summaryrefslogtreecommitdiffstats
path: root/vendor/winapi/src/um
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /vendor/winapi/src/um
parentInitial commit. (diff)
downloadrustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz
rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/winapi/src/um')
-rw-r--r--vendor/winapi/src/um/accctrl.rs371
-rw-r--r--vendor/winapi/src/um/aclapi.rs362
-rw-r--r--vendor/winapi/src/um/adhoc.rs220
-rw-r--r--vendor/winapi/src/um/appmgmt.rs122
-rw-r--r--vendor/winapi/src/um/audioclient.rs172
-rw-r--r--vendor/winapi/src/um/audiosessiontypes.rs37
-rw-r--r--vendor/winapi/src/um/avrt.rs82
-rw-r--r--vendor/winapi/src/um/bits.rs295
-rw-r--r--vendor/winapi/src/um/bits10_1.rs37
-rw-r--r--vendor/winapi/src/um/bits1_5.rs70
-rw-r--r--vendor/winapi/src/um/bits2_0.rs51
-rw-r--r--vendor/winapi/src/um/bits2_5.rs64
-rw-r--r--vendor/winapi/src/um/bits3_0.rs179
-rw-r--r--vendor/winapi/src/um/bits4_0.rs32
-rw-r--r--vendor/winapi/src/um/bits5_0.rs95
-rw-r--r--vendor/winapi/src/um/bitscfg.rs70
-rw-r--r--vendor/winapi/src/um/bitsmsg.rs142
-rw-r--r--vendor/winapi/src/um/bluetoothapis.rs414
-rw-r--r--vendor/winapi/src/um/bluetoothleapis.rs104
-rw-r--r--vendor/winapi/src/um/bthledef.rs280
-rw-r--r--vendor/winapi/src/um/cfgmgr32.rs2077
-rw-r--r--vendor/winapi/src/um/cguid.rs134
-rw-r--r--vendor/winapi/src/um/combaseapi.rs477
-rw-r--r--vendor/winapi/src/um/coml2api.rs10
-rw-r--r--vendor/winapi/src/um/commapi.rs87
-rw-r--r--vendor/winapi/src/um/commctrl.rs4135
-rw-r--r--vendor/winapi/src/um/commdlg.rs712
-rw-r--r--vendor/winapi/src/um/commoncontrols.rs232
-rw-r--r--vendor/winapi/src/um/consoleapi.rs91
-rw-r--r--vendor/winapi/src/um/corsym.rs89
-rw-r--r--vendor/winapi/src/um/d2d1.rs982
-rw-r--r--vendor/winapi/src/um/d2d1_1.rs847
-rw-r--r--vendor/winapi/src/um/d2d1_2.rs68
-rw-r--r--vendor/winapi/src/um/d2d1_3.rs698
-rw-r--r--vendor/winapi/src/um/d2d1effectauthor.rs516
-rw-r--r--vendor/winapi/src/um/d2d1effects.rs617
-rw-r--r--vendor/winapi/src/um/d2d1effects_1.rs31
-rw-r--r--vendor/winapi/src/um/d2d1effects_2.rs40
-rw-r--r--vendor/winapi/src/um/d2d1svg.rs411
-rw-r--r--vendor/winapi/src/um/d2dbasetypes.rs15
-rw-r--r--vendor/winapi/src/um/d3d.rs61
-rw-r--r--vendor/winapi/src/um/d3d10.rs57
-rw-r--r--vendor/winapi/src/um/d3d10_1.rs11
-rw-r--r--vendor/winapi/src/um/d3d10_1shader.rs7
-rw-r--r--vendor/winapi/src/um/d3d10effect.rs45
-rw-r--r--vendor/winapi/src/um/d3d10misc.rs7
-rw-r--r--vendor/winapi/src/um/d3d10sdklayers.rs13
-rw-r--r--vendor/winapi/src/um/d3d10shader.rs206
-rw-r--r--vendor/winapi/src/um/d3d11.rs3421
-rw-r--r--vendor/winapi/src/um/d3d11_1.rs484
-rw-r--r--vendor/winapi/src/um/d3d11_2.rs146
-rw-r--r--vendor/winapi/src/um/d3d11_3.rs23
-rw-r--r--vendor/winapi/src/um/d3d11_4.rs7
-rw-r--r--vendor/winapi/src/um/d3d11on12.rs67
-rw-r--r--vendor/winapi/src/um/d3d11sdklayers.rs2679
-rw-r--r--vendor/winapi/src/um/d3d11shader.rs477
-rw-r--r--vendor/winapi/src/um/d3d11tokenizedprogramformat.rs1335
-rw-r--r--vendor/winapi/src/um/d3d12.rs2722
-rw-r--r--vendor/winapi/src/um/d3d12sdklayers.rs1364
-rw-r--r--vendor/winapi/src/um/d3d12shader.rs347
-rw-r--r--vendor/winapi/src/um/d3dcommon.rs744
-rw-r--r--vendor/winapi/src/um/d3dcompiler.rs274
-rw-r--r--vendor/winapi/src/um/d3dcsx.rs11
-rw-r--r--vendor/winapi/src/um/d3dx10core.rs11
-rw-r--r--vendor/winapi/src/um/d3dx10math.rs7
-rw-r--r--vendor/winapi/src/um/d3dx10mesh.rs19
-rw-r--r--vendor/winapi/src/um/datetimeapi.rs60
-rw-r--r--vendor/winapi/src/um/davclnt.rs104
-rw-r--r--vendor/winapi/src/um/dbghelp.rs750
-rw-r--r--vendor/winapi/src/um/dbt.rs192
-rw-r--r--vendor/winapi/src/um/dcommon.rs114
-rw-r--r--vendor/winapi/src/um/dcomp.rs1159
-rw-r--r--vendor/winapi/src/um/dcompanimation.rs38
-rw-r--r--vendor/winapi/src/um/dde.rs20
-rw-r--r--vendor/winapi/src/um/ddraw.rs37
-rw-r--r--vendor/winapi/src/um/ddrawi.rs13
-rw-r--r--vendor/winapi/src/um/ddrawint.rs41
-rw-r--r--vendor/winapi/src/um/debugapi.rs41
-rw-r--r--vendor/winapi/src/um/devicetopology.rs462
-rw-r--r--vendor/winapi/src/um/dinput.rs107
-rw-r--r--vendor/winapi/src/um/dispex.rs221
-rw-r--r--vendor/winapi/src/um/dmksctl.rs11
-rw-r--r--vendor/winapi/src/um/dmusicc.rs71
-rw-r--r--vendor/winapi/src/um/docobj.rs136
-rw-r--r--vendor/winapi/src/um/documenttarget.rs24
-rw-r--r--vendor/winapi/src/um/dot1x.rs151
-rw-r--r--vendor/winapi/src/um/dpa_dsa.rs283
-rw-r--r--vendor/winapi/src/um/dpapi.rs100
-rw-r--r--vendor/winapi/src/um/dsgetdc.rs267
-rw-r--r--vendor/winapi/src/um/dsound.rs342
-rw-r--r--vendor/winapi/src/um/dsrole.rs66
-rw-r--r--vendor/winapi/src/um/dvp.rs25
-rw-r--r--vendor/winapi/src/um/dwmapi.rs295
-rw-r--r--vendor/winapi/src/um/dwrite.rs1477
-rw-r--r--vendor/winapi/src/um/dwrite_1.rs746
-rw-r--r--vendor/winapi/src/um/dwrite_2.rs293
-rw-r--r--vendor/winapi/src/um/dwrite_3.rs578
-rw-r--r--vendor/winapi/src/um/dxdiag.rs11
-rw-r--r--vendor/winapi/src/um/dxfile.rs23
-rw-r--r--vendor/winapi/src/um/dxgidebug.rs235
-rw-r--r--vendor/winapi/src/um/dxva2api.rs706
-rw-r--r--vendor/winapi/src/um/dxvahd.rs555
-rw-r--r--vendor/winapi/src/um/eaptypes.rs403
-rw-r--r--vendor/winapi/src/um/enclaveapi.rs64
-rw-r--r--vendor/winapi/src/um/endpointvolume.rs123
-rw-r--r--vendor/winapi/src/um/errhandlingapi.rs75
-rw-r--r--vendor/winapi/src/um/evntcons.rs229
-rw-r--r--vendor/winapi/src/um/exdisp.rs220
-rw-r--r--vendor/winapi/src/um/fibersapi.rs23
-rw-r--r--vendor/winapi/src/um/fileapi.rs639
-rw-r--r--vendor/winapi/src/um/functiondiscoverykeys_devpkey.rs117
-rw-r--r--vendor/winapi/src/um/gl/gl.rs52
-rw-r--r--vendor/winapi/src/um/gl/mod.rs7
-rw-r--r--vendor/winapi/src/um/handleapi.rs36
-rw-r--r--vendor/winapi/src/um/heapapi.rs92
-rw-r--r--vendor/winapi/src/um/highlevelmonitorconfigurationapi.rs171
-rw-r--r--vendor/winapi/src/um/http.rs1096
-rw-r--r--vendor/winapi/src/um/imm.rs42
-rw-r--r--vendor/winapi/src/um/interlockedapi.rs31
-rw-r--r--vendor/winapi/src/um/ioapiset.rs71
-rw-r--r--vendor/winapi/src/um/ipexport.rs174
-rw-r--r--vendor/winapi/src/um/iphlpapi.rs521
-rw-r--r--vendor/winapi/src/um/iptypes.rs372
-rw-r--r--vendor/winapi/src/um/jobapi.rs14
-rw-r--r--vendor/winapi/src/um/jobapi2.rs63
-rw-r--r--vendor/winapi/src/um/knownfolders.rs287
-rw-r--r--vendor/winapi/src/um/ktmw32.rs63
-rw-r--r--vendor/winapi/src/um/l2cmn.rs55
-rw-r--r--vendor/winapi/src/um/libloaderapi.rs236
-rw-r--r--vendor/winapi/src/um/lmaccess.rs1215
-rw-r--r--vendor/winapi/src/um/lmalert.rs75
-rw-r--r--vendor/winapi/src/um/lmapibuf.rs30
-rw-r--r--vendor/winapi/src/um/lmat.rs62
-rw-r--r--vendor/winapi/src/um/lmdfs.rs483
-rw-r--r--vendor/winapi/src/um/lmerrlog.rs268
-rw-r--r--vendor/winapi/src/um/lmjoin.rs232
-rw-r--r--vendor/winapi/src/um/lmmsg.rs56
-rw-r--r--vendor/winapi/src/um/lmremutl.rs61
-rw-r--r--vendor/winapi/src/um/lmrepl.rs200
-rw-r--r--vendor/winapi/src/um/lmserver.rs1255
-rw-r--r--vendor/winapi/src/um/lmshare.rs379
-rw-r--r--vendor/winapi/src/um/lmstats.rs85
-rw-r--r--vendor/winapi/src/um/lmsvc.rs180
-rw-r--r--vendor/winapi/src/um/lmuse.rs101
-rw-r--r--vendor/winapi/src/um/lmwksta.rs421
-rw-r--r--vendor/winapi/src/um/lowlevelmonitorconfigurationapi.rs49
-rw-r--r--vendor/winapi/src/um/lsalookup.rs109
-rw-r--r--vendor/winapi/src/um/memoryapi.rs390
-rw-r--r--vendor/winapi/src/um/minschannel.rs58
-rw-r--r--vendor/winapi/src/um/minwinbase.rs337
-rw-r--r--vendor/winapi/src/um/mmdeviceapi.rs220
-rw-r--r--vendor/winapi/src/um/mmeapi.rs336
-rw-r--r--vendor/winapi/src/um/mmsystem.rs266
-rw-r--r--vendor/winapi/src/um/mod.rs302
-rw-r--r--vendor/winapi/src/um/msaatext.rs59
-rw-r--r--vendor/winapi/src/um/mscat.rs36
-rw-r--r--vendor/winapi/src/um/mschapp.rs48
-rw-r--r--vendor/winapi/src/um/mssip.rs255
-rw-r--r--vendor/winapi/src/um/mswsock.rs413
-rw-r--r--vendor/winapi/src/um/namedpipeapi.rs93
-rw-r--r--vendor/winapi/src/um/namespaceapi.rs36
-rw-r--r--vendor/winapi/src/um/nb30.rs214
-rw-r--r--vendor/winapi/src/um/ncrypt.rs88
-rw-r--r--vendor/winapi/src/um/ntlsa.rs1530
-rw-r--r--vendor/winapi/src/um/ntsecapi.rs1728
-rw-r--r--vendor/winapi/src/um/oaidl.rs915
-rw-r--r--vendor/winapi/src/um/objbase.rs64
-rw-r--r--vendor/winapi/src/um/objidl.rs525
-rw-r--r--vendor/winapi/src/um/objidlbase.rs952
-rw-r--r--vendor/winapi/src/um/ocidl.rs68
-rw-r--r--vendor/winapi/src/um/ole2.rs21
-rw-r--r--vendor/winapi/src/um/oleauto.rs849
-rw-r--r--vendor/winapi/src/um/olectl.rs14
-rw-r--r--vendor/winapi/src/um/oleidl.rs43
-rw-r--r--vendor/winapi/src/um/opmapi.rs362
-rw-r--r--vendor/winapi/src/um/pdh.rs806
-rw-r--r--vendor/winapi/src/um/perflib.rs331
-rw-r--r--vendor/winapi/src/um/physicalmonitorenumerationapi.rs43
-rw-r--r--vendor/winapi/src/um/playsoundapi.rs46
-rw-r--r--vendor/winapi/src/um/portabledevice.rs163
-rw-r--r--vendor/winapi/src/um/portabledeviceapi.rs288
-rw-r--r--vendor/winapi/src/um/portabledevicetypes.rs255
-rw-r--r--vendor/winapi/src/um/powerbase.rs35
-rw-r--r--vendor/winapi/src/um/powersetting.rs60
-rw-r--r--vendor/winapi/src/um/powrprof.rs550
-rw-r--r--vendor/winapi/src/um/processenv.rs98
-rw-r--r--vendor/winapi/src/um/processsnapshot.rs120
-rw-r--r--vendor/winapi/src/um/processthreadsapi.rs441
-rw-r--r--vendor/winapi/src/um/processtopologyapi.rs23
-rw-r--r--vendor/winapi/src/um/profileapi.rs15
-rw-r--r--vendor/winapi/src/um/propidl.rs392
-rw-r--r--vendor/winapi/src/um/propkey.rs2300
-rw-r--r--vendor/winapi/src/um/propkeydef.rs13
-rw-r--r--vendor/winapi/src/um/propsys.rs46
-rw-r--r--vendor/winapi/src/um/prsht.rs361
-rw-r--r--vendor/winapi/src/um/psapi.rs422
-rw-r--r--vendor/winapi/src/um/realtimeapiset.rs30
-rw-r--r--vendor/winapi/src/um/reason.rs60
-rw-r--r--vendor/winapi/src/um/restartmanager.rs150
-rw-r--r--vendor/winapi/src/um/restrictederrorinfo.rs20
-rw-r--r--vendor/winapi/src/um/rmxfguid.rs67
-rw-r--r--vendor/winapi/src/um/rtinfo.rs7
-rw-r--r--vendor/winapi/src/um/sapi.rs1388
-rw-r--r--vendor/winapi/src/um/sapi51.rs3726
-rw-r--r--vendor/winapi/src/um/sapi53.rs1823
-rw-r--r--vendor/winapi/src/um/sapiddk.rs238
-rw-r--r--vendor/winapi/src/um/sapiddk51.rs651
-rw-r--r--vendor/winapi/src/um/schannel.rs339
-rw-r--r--vendor/winapi/src/um/securityappcontainer.rs16
-rw-r--r--vendor/winapi/src/um/securitybaseapi.rs690
-rw-r--r--vendor/winapi/src/um/servprov.rs23
-rw-r--r--vendor/winapi/src/um/setupapi.rs3571
-rw-r--r--vendor/winapi/src/um/shellapi.rs923
-rw-r--r--vendor/winapi/src/um/shellscalingapi.rs44
-rw-r--r--vendor/winapi/src/um/shlobj.rs260
-rw-r--r--vendor/winapi/src/um/shobjidl.rs329
-rw-r--r--vendor/winapi/src/um/shobjidl_core.rs576
-rw-r--r--vendor/winapi/src/um/shtypes.rs44
-rw-r--r--vendor/winapi/src/um/softpub.rs3
-rw-r--r--vendor/winapi/src/um/spapidef.rs53
-rw-r--r--vendor/winapi/src/um/spellcheck.rs146
-rw-r--r--vendor/winapi/src/um/sporder.rs41
-rw-r--r--vendor/winapi/src/um/sql.rs108
-rw-r--r--vendor/winapi/src/um/sqlext.rs95
-rw-r--r--vendor/winapi/src/um/sqltypes.rs142
-rw-r--r--vendor/winapi/src/um/sqlucode.rs106
-rw-r--r--vendor/winapi/src/um/sspi.rs7
-rw-r--r--vendor/winapi/src/um/stringapiset.rs75
-rw-r--r--vendor/winapi/src/um/strmif.rs7
-rw-r--r--vendor/winapi/src/um/subauth.rs204
-rw-r--r--vendor/winapi/src/um/synchapi.rs349
-rw-r--r--vendor/winapi/src/um/sysinfoapi.rs217
-rw-r--r--vendor/winapi/src/um/systemtopologyapi.rs20
-rw-r--r--vendor/winapi/src/um/taskschd.rs1233
-rw-r--r--vendor/winapi/src/um/textstor.rs11
-rw-r--r--vendor/winapi/src/um/threadpoolapiset.rs171
-rw-r--r--vendor/winapi/src/um/threadpoollegacyapiset.rs44
-rw-r--r--vendor/winapi/src/um/timeapi.rs20
-rw-r--r--vendor/winapi/src/um/timezoneapi.rs89
-rw-r--r--vendor/winapi/src/um/tlhelp32.rs194
-rw-r--r--vendor/winapi/src/um/unknwnbase.rs43
-rw-r--r--vendor/winapi/src/um/urlhist.rs97
-rw-r--r--vendor/winapi/src/um/urlmon.rs21
-rw-r--r--vendor/winapi/src/um/userenv.rs159
-rw-r--r--vendor/winapi/src/um/usp10.rs560
-rw-r--r--vendor/winapi/src/um/utilapiset.rs25
-rw-r--r--vendor/winapi/src/um/uxtheme.rs772
-rw-r--r--vendor/winapi/src/um/vsbackup.rs520
-rw-r--r--vendor/winapi/src/um/vss.rs284
-rw-r--r--vendor/winapi/src/um/vsserror.rs89
-rw-r--r--vendor/winapi/src/um/vswriter.rs397
-rw-r--r--vendor/winapi/src/um/wbemads.rs41
-rw-r--r--vendor/winapi/src/um/wbemcli.rs1174
-rw-r--r--vendor/winapi/src/um/wbemdisp.rs1344
-rw-r--r--vendor/winapi/src/um/wbemprov.rs302
-rw-r--r--vendor/winapi/src/um/wbemtran.rs184
-rw-r--r--vendor/winapi/src/um/wct.rs114
-rw-r--r--vendor/winapi/src/um/werapi.rs64
-rw-r--r--vendor/winapi/src/um/winbase.rs2854
-rw-r--r--vendor/winapi/src/um/wincodec.rs1861
-rw-r--r--vendor/winapi/src/um/wincodecsdk.rs564
-rw-r--r--vendor/winapi/src/um/wincon.rs459
-rw-r--r--vendor/winapi/src/um/wincontypes.rs114
-rw-r--r--vendor/winapi/src/um/wincred.rs532
-rw-r--r--vendor/winapi/src/um/wincrypt.rs7365
-rw-r--r--vendor/winapi/src/um/windowsceip.rs9
-rw-r--r--vendor/winapi/src/um/winefs.rs178
-rw-r--r--vendor/winapi/src/um/winevt.rs543
-rw-r--r--vendor/winapi/src/um/wingdi.rs5591
-rw-r--r--vendor/winapi/src/um/winhttp.rs658
-rw-r--r--vendor/winapi/src/um/wininet.rs2364
-rw-r--r--vendor/winapi/src/um/winineti.rs142
-rw-r--r--vendor/winapi/src/um/winioctl.rs1091
-rw-r--r--vendor/winapi/src/um/winnetwk.rs446
-rw-r--r--vendor/winapi/src/um/winnls.rs817
-rw-r--r--vendor/winapi/src/um/winnt.rs8648
-rw-r--r--vendor/winapi/src/um/winreg.rs684
-rw-r--r--vendor/winapi/src/um/winsafer.rs228
-rw-r--r--vendor/winapi/src/um/winscard.rs709
-rw-r--r--vendor/winapi/src/um/winsmcrd.rs166
-rw-r--r--vendor/winapi/src/um/winsock2.rs1450
-rw-r--r--vendor/winapi/src/um/winspool.rs2433
-rw-r--r--vendor/winapi/src/um/winsvc.rs695
-rw-r--r--vendor/winapi/src/um/wintrust.rs123
-rw-r--r--vendor/winapi/src/um/winusb.rs224
-rw-r--r--vendor/winapi/src/um/winuser.rs7251
-rw-r--r--vendor/winapi/src/um/winver.rs53
-rw-r--r--vendor/winapi/src/um/wlanapi.rs1459
-rw-r--r--vendor/winapi/src/um/wlanihv.rs410
-rw-r--r--vendor/winapi/src/um/wlanihvtypes.rs41
-rw-r--r--vendor/winapi/src/um/wlclient.rs33
-rw-r--r--vendor/winapi/src/um/wow64apiset.rs32
-rw-r--r--vendor/winapi/src/um/wpdmtpextensions.rs60
-rw-r--r--vendor/winapi/src/um/ws2bth.rs211
-rw-r--r--vendor/winapi/src/um/ws2spi.rs909
-rw-r--r--vendor/winapi/src/um/ws2tcpip.rs346
-rw-r--r--vendor/winapi/src/um/wtsapi32.rs6
-rw-r--r--vendor/winapi/src/um/xinput.rs173
298 files changed, 143766 insertions, 0 deletions
diff --git a/vendor/winapi/src/um/accctrl.rs b/vendor/winapi/src/um/accctrl.rs
new file mode 100644
index 000000000..829ce5793
--- /dev/null
+++ b/vendor/winapi/src/um/accctrl.rs
@@ -0,0 +1,371 @@
+// 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::guiddef::GUID;
+use shared::minwindef::{DWORD, ULONG};
+use um::winbase::LocalFree;
+use um::winnt::{HANDLE, LONG, LPSTR, LPWSTR, PVOID, SID};
+#[inline]
+pub unsafe fn AccFree(p: PVOID) -> PVOID {
+ LocalFree(p)
+}
+ENUM!{enum SE_OBJECT_TYPE {
+ SE_UNKNOWN_OBJECT_TYPE = 0,
+ SE_FILE_OBJECT,
+ SE_SERVICE,
+ SE_PRINTER,
+ SE_REGISTRY_KEY,
+ SE_LMSHARE,
+ SE_KERNEL_OBJECT,
+ SE_WINDOW_OBJECT,
+ SE_DS_OBJECT,
+ SE_DS_OBJECT_ALL,
+ SE_PROVIDER_DEFINED_OBJECT,
+ SE_WMIGUID_OBJECT,
+ SE_REGISTRY_WOW64_32KEY,
+ SE_REGISTRY_WOW64_64KEY,
+}}
+ENUM!{enum TRUSTEE_TYPE {
+ TRUSTEE_IS_UNKNOWN,
+ TRUSTEE_IS_USER,
+ TRUSTEE_IS_GROUP,
+ TRUSTEE_IS_DOMAIN,
+ TRUSTEE_IS_ALIAS,
+ TRUSTEE_IS_WELL_KNOWN_GROUP,
+ TRUSTEE_IS_DELETED,
+ TRUSTEE_IS_INVALID,
+ TRUSTEE_IS_COMPUTER,
+}}
+ENUM!{enum TRUSTEE_FORM {
+ TRUSTEE_IS_SID,
+ TRUSTEE_IS_NAME,
+ TRUSTEE_BAD_FORM,
+ TRUSTEE_IS_OBJECTS_AND_SID,
+ TRUSTEE_IS_OBJECTS_AND_NAME,
+}}
+ENUM!{enum MULTIPLE_TRUSTEE_OPERATION {
+ NO_MULTIPLE_TRUSTEE,
+ TRUSTEE_IS_IMPERSONATE,
+}}
+STRUCT!{struct OBJECTS_AND_SID {
+ ObjectsPresent: DWORD,
+ ObjectTypeGuid: GUID,
+ InheritedObjectTypeGuid: GUID,
+ pSid: *mut SID,
+}}
+pub type POBJECTS_AND_SID = *mut OBJECTS_AND_SID;
+STRUCT!{struct OBJECTS_AND_NAME_A {
+ ObjectsPresent: DWORD,
+ ObjectType: SE_OBJECT_TYPE,
+ ObjectTypeName: LPSTR,
+ InheritedObjectTypeName: LPSTR,
+ ptstrName: LPSTR,
+}}
+pub type POBJECTS_AND_NAME_A = *mut OBJECTS_AND_NAME_A;
+STRUCT!{struct OBJECTS_AND_NAME_W {
+ ObjectsPresent: DWORD,
+ ObjectType: SE_OBJECT_TYPE,
+ ObjectTypeName: LPWSTR,
+ InheritedObjectTypeName: LPWSTR,
+ ptstrName: LPWSTR,
+}}
+pub type POBJECTS_AND_NAME_W = *mut OBJECTS_AND_NAME_W;
+STRUCT!{struct TRUSTEE_A {
+ pMultipleTrustee: *mut TRUSTEE_A,
+ MultipleTrusteeOperation: MULTIPLE_TRUSTEE_OPERATION,
+ TrusteeForm: TRUSTEE_FORM,
+ TrusteeType: TRUSTEE_TYPE,
+ ptstrName: LPSTR,
+}}
+pub type PTRUSTEE_A = *mut TRUSTEE_A;
+pub type TRUSTEEA = TRUSTEE_A;
+pub type PTRUSTEEA = PTRUSTEE_A;
+STRUCT!{struct TRUSTEE_W {
+ pMultipleTrustee: *mut TRUSTEE_W,
+ MultipleTrusteeOperation: MULTIPLE_TRUSTEE_OPERATION,
+ TrusteeForm: TRUSTEE_FORM,
+ TrusteeType: TRUSTEE_TYPE,
+ ptstrName: LPWSTR,
+}}
+pub type PTRUSTEE_W = *mut TRUSTEE_W;
+pub type TRUSTEEW = TRUSTEE_W;
+pub type PTRUSTEEW = PTRUSTEE_W;
+ENUM!{enum ACCESS_MODE {
+ NOT_USED_ACCESS = 0,
+ GRANT_ACCESS,
+ SET_ACCESS,
+ DENY_ACCESS,
+ REVOKE_ACCESS,
+ SET_AUDIT_SUCCESS,
+ SET_AUDIT_FAILURE,
+}}
+pub const NO_INHERITANCE: DWORD = 0x0;
+pub const SUB_OBJECTS_ONLY_INHERIT: DWORD = 0x1;
+pub const SUB_CONTAINERS_ONLY_INHERIT: DWORD = 0x2;
+pub const SUB_CONTAINERS_AND_OBJECTS_INHERIT: DWORD = 0x3;
+pub const INHERIT_NO_PROPAGATE: DWORD = 0x4;
+pub const INHERIT_ONLY: DWORD = 0x8;
+pub const INHERITED_ACCESS_ENTRY: DWORD = 0x10;
+pub const INHERITED_PARENT: DWORD = 0x10000000;
+pub const INHERITED_GRANDPARENT: DWORD = 0x20000000;
+STRUCT!{struct EXPLICIT_ACCESS_A {
+ grfAccessPermissions: DWORD,
+ grfAccessMode: ACCESS_MODE,
+ grfInheritance: DWORD,
+ Trustee: TRUSTEE_A,
+}}
+pub type PEXPLICIT_ACCESS_A = *mut EXPLICIT_ACCESS_A;
+pub type EXPLICIT_ACCESSA = EXPLICIT_ACCESS_A;
+pub type PEXPLICIT_ACCESSA = PEXPLICIT_ACCESS_A;
+STRUCT!{struct EXPLICIT_ACCESS_W {
+ grfAccessPermissions: DWORD,
+ grfAccessMode: ACCESS_MODE,
+ grfInheritance: DWORD,
+ Trustee: TRUSTEE_W,
+}}
+pub type PEXPLICIT_ACCESS_W = *mut EXPLICIT_ACCESS_W;
+pub type EXPLICIT_ACCESSW = EXPLICIT_ACCESS_W;
+pub type PEXPLICIT_ACCESSW = PEXPLICIT_ACCESS_W;
+pub const ACCCTRL_DEFAULT_PROVIDER: &'static str = "Windows NT Access Provider";
+pub type ACCESS_RIGHTS = ULONG;
+pub type PACCESS_RIGHTS = *mut ACCESS_RIGHTS;
+pub type INHERIT_FLAGS = ULONG;
+pub type PINHERIT_FLAGS = *mut INHERIT_FLAGS;
+STRUCT!{struct ACTRL_ACCESS_ENTRYA {
+ Trustee: TRUSTEE_A,
+ fAccessFlags: ULONG,
+ Access: ACCESS_RIGHTS,
+ ProvSpecificAccess: ACCESS_RIGHTS,
+ Inheritance: INHERIT_FLAGS,
+ lpInheritProperty: LPSTR,
+}}
+pub type PACTRL_ACCESS_ENTRYA = *mut ACTRL_ACCESS_ENTRYA;
+STRUCT!{struct ACTRL_ACCESS_ENTRYW {
+ Trustee: TRUSTEE_W,
+ fAccessFlags: ULONG,
+ Access: ACCESS_RIGHTS,
+ ProvSpecificAccess: ACCESS_RIGHTS,
+ Inheritance: INHERIT_FLAGS,
+ lpInheritProperty: LPWSTR,
+}}
+pub type PACTRL_ACCESS_ENTRYW = *mut ACTRL_ACCESS_ENTRYW;
+STRUCT!{struct ACTRL_ACCESS_ENTRY_LISTA {
+ cEntries: ULONG,
+ pAccessList: *mut ACTRL_ACCESS_ENTRYA,
+}}
+pub type PACTRL_ACCESS_ENTRY_LISTA = *mut ACTRL_ACCESS_ENTRY_LISTA;
+STRUCT!{struct ACTRL_ACCESS_ENTRY_LISTW {
+ cEntries: ULONG,
+ pAccessList: *mut ACTRL_ACCESS_ENTRYW,
+}}
+pub type PACTRL_ACCESS_ENTRY_LISTW = *mut ACTRL_ACCESS_ENTRY_LISTW;
+STRUCT!{struct ACTRL_PROPERTY_ENTRYA {
+ lpProperty: LPSTR,
+ pAccessEntryList: PACTRL_ACCESS_ENTRY_LISTA,
+ fListFlags: ULONG,
+}}
+pub type PACTRL_PROPERTY_ENTRYA = *mut ACTRL_PROPERTY_ENTRYA;
+STRUCT!{struct ACTRL_PROPERTY_ENTRYW {
+ lpProperty: LPWSTR,
+ pAccessEntryList: PACTRL_ACCESS_ENTRY_LISTW,
+ fListFlags: ULONG,
+}}
+pub type PACTRL_PROPERTY_ENTRYW = *mut ACTRL_PROPERTY_ENTRYW;
+STRUCT!{struct ACTRL_ACCESSA {
+ cEntries: ULONG,
+ pPropertyAccessList: PACTRL_PROPERTY_ENTRYA,
+}}
+pub type PACTRL_ACCESSA = *mut ACTRL_ACCESSA;
+pub type ACTRL_AUDITA = ACTRL_ACCESSA;
+pub type PACTRL_AUDITA = *mut ACTRL_AUDITA;
+STRUCT!{struct ACTRL_ACCESSW {
+ cEntries: ULONG,
+ pPropertyAccessList: PACTRL_PROPERTY_ENTRYW,
+}}
+pub type PACTRL_ACCESSW = *mut ACTRL_ACCESSW;
+pub type ACTRL_AUDITW = ACTRL_ACCESSW;
+pub type PACTRL_AUDITW = *mut ACTRL_AUDITW;
+pub const TRUSTEE_ACCESS_ALLOWED: ULONG = 0x00000001;
+pub const TRUSTEE_ACCESS_READ: ULONG = 0x00000002;
+pub const TRUSTEE_ACCESS_WRITE: ULONG = 0x00000004;
+pub const TRUSTEE_ACCESS_EXPLICIT: ULONG = 0x00000001;
+pub const TRUSTEE_ACCESS_READ_WRITE: ULONG = TRUSTEE_ACCESS_READ | TRUSTEE_ACCESS_WRITE;
+pub const TRUSTEE_ACCESS_ALL: ULONG = 0xFFFFFFFF;
+STRUCT!{struct TRUSTEE_ACCESSA {
+ lpProperty: LPSTR,
+ Access: ACCESS_RIGHTS,
+ fAccessFlags: ULONG,
+ fReturnedAccess: ULONG,
+}}
+pub type PTRUSTEE_ACCESSA = *mut TRUSTEE_ACCESSA;
+STRUCT!{struct TRUSTEE_ACCESSW {
+ lpProperty: LPWSTR,
+ Access: ACCESS_RIGHTS,
+ fAccessFlags: ULONG,
+ fReturnedAccess: ULONG,
+}}
+pub type PTRUSTEE_ACCESSW = *mut TRUSTEE_ACCESSW;
+pub const ACTRL_RESERVED: ULONG = 0x00000000;
+pub const ACTRL_PERM_1: ULONG = 0x00000001;
+pub const ACTRL_PERM_2: ULONG = 0x00000002;
+pub const ACTRL_PERM_3: ULONG = 0x00000004;
+pub const ACTRL_PERM_4: ULONG = 0x00000008;
+pub const ACTRL_PERM_5: ULONG = 0x00000010;
+pub const ACTRL_PERM_6: ULONG = 0x00000020;
+pub const ACTRL_PERM_7: ULONG = 0x00000040;
+pub const ACTRL_PERM_8: ULONG = 0x00000080;
+pub const ACTRL_PERM_9: ULONG = 0x00000100;
+pub const ACTRL_PERM_10: ULONG = 0x00000200;
+pub const ACTRL_PERM_11: ULONG = 0x00000400;
+pub const ACTRL_PERM_12: ULONG = 0x00000800;
+pub const ACTRL_PERM_13: ULONG = 0x00001000;
+pub const ACTRL_PERM_14: ULONG = 0x00002000;
+pub const ACTRL_PERM_15: ULONG = 0x00004000;
+pub const ACTRL_PERM_16: ULONG = 0x00008000;
+pub const ACTRL_PERM_17: ULONG = 0x00010000;
+pub const ACTRL_PERM_18: ULONG = 0x00020000;
+pub const ACTRL_PERM_19: ULONG = 0x00040000;
+pub const ACTRL_PERM_20: ULONG = 0x00080000;
+pub const ACTRL_ACCESS_ALLOWED: ULONG = 0x00000001;
+pub const ACTRL_ACCESS_DENIED: ULONG = 0x00000002;
+pub const ACTRL_AUDIT_SUCCESS: ULONG = 0x00000004;
+pub const ACTRL_AUDIT_FAILURE: ULONG = 0x00000008;
+pub const ACTRL_ACCESS_PROTECTED: ULONG = 0x00000001;
+pub const ACTRL_SYSTEM_ACCESS: ULONG = 0x04000000;
+pub const ACTRL_DELETE: ULONG = 0x08000000;
+pub const ACTRL_READ_CONTROL: ULONG = 0x10000000;
+pub const ACTRL_CHANGE_ACCESS: ULONG = 0x20000000;
+pub const ACTRL_CHANGE_OWNER: ULONG = 0x40000000;
+pub const ACTRL_SYNCHRONIZE: ULONG = 0x80000000;
+pub const ACTRL_STD_RIGHTS_ALL: ULONG = 0xf8000000;
+pub const ACTRL_STD_RIGHT_REQUIRED: ULONG = ACTRL_STD_RIGHTS_ALL & !ACTRL_SYNCHRONIZE;
+pub const ACTRL_DS_OPEN: ULONG = ACTRL_RESERVED;
+pub const ACTRL_DS_CREATE_CHILD: ULONG = ACTRL_PERM_1;
+pub const ACTRL_DS_DELETE_CHILD: ULONG = ACTRL_PERM_2;
+pub const ACTRL_DS_LIST: ULONG = ACTRL_PERM_3;
+pub const ACTRL_DS_SELF: ULONG = ACTRL_PERM_4;
+pub const ACTRL_DS_READ_PROP: ULONG = ACTRL_PERM_5;
+pub const ACTRL_DS_WRITE_PROP: ULONG = ACTRL_PERM_6;
+pub const ACTRL_DS_DELETE_TREE: ULONG = ACTRL_PERM_7;
+pub const ACTRL_DS_LIST_OBJECT: ULONG = ACTRL_PERM_8;
+pub const ACTRL_DS_CONTROL_ACCESS: ULONG = ACTRL_PERM_9;
+pub const ACTRL_FILE_READ: ULONG = ACTRL_PERM_1;
+pub const ACTRL_FILE_WRITE: ULONG = ACTRL_PERM_2;
+pub const ACTRL_FILE_APPEND: ULONG = ACTRL_PERM_3;
+pub const ACTRL_FILE_READ_PROP: ULONG = ACTRL_PERM_4;
+pub const ACTRL_FILE_WRITE_PROP: ULONG = ACTRL_PERM_5;
+pub const ACTRL_FILE_EXECUTE: ULONG = ACTRL_PERM_6;
+pub const ACTRL_FILE_READ_ATTRIB: ULONG = ACTRL_PERM_8;
+pub const ACTRL_FILE_WRITE_ATTRIB: ULONG = ACTRL_PERM_9;
+pub const ACTRL_FILE_CREATE_PIPE: ULONG = ACTRL_PERM_10;
+pub const ACTRL_DIR_LIST: ULONG = ACTRL_PERM_1;
+pub const ACTRL_DIR_CREATE_OBJECT: ULONG = ACTRL_PERM_2;
+pub const ACTRL_DIR_CREATE_CHILD: ULONG = ACTRL_PERM_3;
+pub const ACTRL_DIR_DELETE_CHILD: ULONG = ACTRL_PERM_7;
+pub const ACTRL_DIR_TRAVERSE: ULONG = ACTRL_PERM_6;
+pub const ACTRL_KERNEL_TERMINATE: ULONG = ACTRL_PERM_1;
+pub const ACTRL_KERNEL_THREAD: ULONG = ACTRL_PERM_2;
+pub const ACTRL_KERNEL_VM: ULONG = ACTRL_PERM_3;
+pub const ACTRL_KERNEL_VM_READ: ULONG = ACTRL_PERM_4;
+pub const ACTRL_KERNEL_VM_WRITE: ULONG = ACTRL_PERM_5;
+pub const ACTRL_KERNEL_DUP_HANDLE: ULONG = ACTRL_PERM_6;
+pub const ACTRL_KERNEL_PROCESS: ULONG = ACTRL_PERM_7;
+pub const ACTRL_KERNEL_SET_INFO: ULONG = ACTRL_PERM_8;
+pub const ACTRL_KERNEL_GET_INFO: ULONG = ACTRL_PERM_9;
+pub const ACTRL_KERNEL_CONTROL: ULONG = ACTRL_PERM_10;
+pub const ACTRL_KERNEL_ALERT: ULONG = ACTRL_PERM_11;
+pub const ACTRL_KERNEL_GET_CONTEXT: ULONG = ACTRL_PERM_12;
+pub const ACTRL_KERNEL_SET_CONTEXT: ULONG = ACTRL_PERM_13;
+pub const ACTRL_KERNEL_TOKEN: ULONG = ACTRL_PERM_14;
+pub const ACTRL_KERNEL_IMPERSONATE: ULONG = ACTRL_PERM_15;
+pub const ACTRL_KERNEL_DIMPERSONATE: ULONG = ACTRL_PERM_16;
+pub const ACTRL_PRINT_SADMIN: ULONG = ACTRL_PERM_1;
+pub const ACTRL_PRINT_SLIST: ULONG = ACTRL_PERM_2;
+pub const ACTRL_PRINT_PADMIN: ULONG = ACTRL_PERM_3;
+pub const ACTRL_PRINT_PUSE: ULONG = ACTRL_PERM_4;
+pub const ACTRL_PRINT_JADMIN: ULONG = ACTRL_PERM_5;
+pub const ACTRL_SVC_GET_INFO: ULONG = ACTRL_PERM_1;
+pub const ACTRL_SVC_SET_INFO: ULONG = ACTRL_PERM_2;
+pub const ACTRL_SVC_STATUS: ULONG = ACTRL_PERM_3;
+pub const ACTRL_SVC_LIST: ULONG = ACTRL_PERM_4;
+pub const ACTRL_SVC_START: ULONG = ACTRL_PERM_5;
+pub const ACTRL_SVC_STOP: ULONG = ACTRL_PERM_6;
+pub const ACTRL_SVC_PAUSE: ULONG = ACTRL_PERM_7;
+pub const ACTRL_SVC_INTERROGATE: ULONG = ACTRL_PERM_8;
+pub const ACTRL_SVC_UCONTROL: ULONG = ACTRL_PERM_9;
+pub const ACTRL_REG_QUERY: ULONG = ACTRL_PERM_1;
+pub const ACTRL_REG_SET: ULONG = ACTRL_PERM_2;
+pub const ACTRL_REG_CREATE_CHILD: ULONG = ACTRL_PERM_3;
+pub const ACTRL_REG_LIST: ULONG = ACTRL_PERM_4;
+pub const ACTRL_REG_NOTIFY: ULONG = ACTRL_PERM_5;
+pub const ACTRL_REG_LINK: ULONG = ACTRL_PERM_6;
+pub const ACTRL_WIN_CLIPBRD: ULONG = ACTRL_PERM_1;
+pub const ACTRL_WIN_GLOBAL_ATOMS: ULONG = ACTRL_PERM_2;
+pub const ACTRL_WIN_CREATE: ULONG = ACTRL_PERM_3;
+pub const ACTRL_WIN_LIST_DESK: ULONG = ACTRL_PERM_4;
+pub const ACTRL_WIN_LIST: ULONG = ACTRL_PERM_5;
+pub const ACTRL_WIN_READ_ATTRIBS: ULONG = ACTRL_PERM_6;
+pub const ACTRL_WIN_WRITE_ATTRIBS: ULONG = ACTRL_PERM_7;
+pub const ACTRL_WIN_SCREEN: ULONG = ACTRL_PERM_8;
+pub const ACTRL_WIN_EXIT: ULONG = ACTRL_PERM_9;
+UNION!{union ACTRL_OVERLAPPED_u {
+ [u32; 1] [u64; 1],
+ Provider Provider_mut: PVOID,
+ Reserved1 Reserved1_mut: ULONG,
+}}
+STRUCT!{struct ACTRL_OVERLAPPED {
+ u: ACTRL_OVERLAPPED_u,
+ Reserved2: ULONG,
+ hEvent: HANDLE,
+}}
+pub type PACTRL_OVERLAPPED = *mut ACTRL_OVERLAPPED;
+STRUCT!{struct ACTRL_ACCESS_INFOA {
+ fAccessPermission: ULONG,
+ lpAccessPermissionName: LPSTR,
+}}
+pub type PACTRL_ACCESS_INFOA = *mut ACTRL_ACCESS_INFOA;
+STRUCT!{struct ACTRL_ACCESS_INFOW {
+ fAccessPermission: ULONG,
+ lpAccessPermissionName: LPWSTR,
+}}
+pub type PACTRL_ACCESS_INFOW = *mut ACTRL_ACCESS_INFOW;
+STRUCT!{struct ACTRL_CONTROL_INFOA {
+ lpControlId: LPSTR,
+ lpControlName: LPSTR,
+}}
+pub type PACTRL_CONTROL_INFOA = *mut ACTRL_CONTROL_INFOA;
+STRUCT!{struct ACTRL_CONTROL_INFOW {
+ lpControlId: LPWSTR,
+ lpControlName: LPWSTR,
+}}
+pub type PACTRL_CONTROL_INFOW = *mut ACTRL_CONTROL_INFOW;
+pub const ACTRL_ACCESS_NO_OPTIONS: DWORD = 0x00000000;
+pub const ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES: DWORD = 0x00000001;
+pub const TREE_SEC_INFO_SET: DWORD = 0x00000001;
+pub const TREE_SEC_INFO_RESET: DWORD = 0x00000002;
+pub const TREE_SEC_INFO_RESET_KEEP_EXPLICIT: DWORD = 0x00000003;
+ENUM!{enum PROG_INVOKE_SETTING {
+ ProgressInvokeNever = 1,
+ ProgressInvokeEveryObject,
+ ProgressInvokeOnError,
+ ProgressCancelOperation,
+ ProgressRetryOperation,
+ ProgressInvokePrePostError,
+}}
+pub type PPROG_INVOKE_SETTING = *mut PROG_INVOKE_SETTING;
+STRUCT!{struct FN_OBJECT_MGR_FUNCTS {
+ Placeholder: ULONG,
+}}
+pub type PFN_OBJECT_MGR_FUNCTS = *mut FN_OBJECT_MGR_FUNCTS;
+STRUCT!{struct INHERITED_FROMA {
+ GenerationGap: LONG,
+ AncestorName: LPSTR,
+}}
+pub type PINHERITED_FROMA = *mut INHERITED_FROMA;
+STRUCT!{struct INHERITED_FROMW {
+ GenerationGap: LONG,
+ AncestorName: LPWSTR,
+}}
+pub type PINHERITED_FROMW = *mut INHERITED_FROMW;
diff --git a/vendor/winapi/src/um/aclapi.rs b/vendor/winapi/src/um/aclapi.rs
new file mode 100644
index 000000000..5c2c5f121
--- /dev/null
+++ b/vendor/winapi/src/um/aclapi.rs
@@ -0,0 +1,362 @@
+// 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::guiddef::GUID;
+use shared::minwindef::{BOOL, DWORD, PULONG, ULONG, USHORT};
+use um::accctrl::{
+ ACCESS_MODE, MULTIPLE_TRUSTEE_OPERATION, PEXPLICIT_ACCESS_A, PEXPLICIT_ACCESS_W,
+ PFN_OBJECT_MGR_FUNCTS, PINHERITED_FROMA, PINHERITED_FROMW, POBJECTS_AND_NAME_A,
+ POBJECTS_AND_NAME_W, POBJECTS_AND_SID, PPROG_INVOKE_SETTING, PROG_INVOKE_SETTING, PTRUSTEE_A,
+ PTRUSTEE_W, SE_OBJECT_TYPE, TRUSTEE_FORM, TRUSTEE_TYPE
+};
+use um::winnt::{
+ HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PACCESS_MASK, PACL, PGENERIC_MAPPING,
+ PSECURITY_DESCRIPTOR, PSID, PVOID, SECURITY_INFORMATION
+};
+FN!{cdecl FN_PROGRESS(
+ pObjectName: LPWSTR,
+ Status: DWORD,
+ pInvokeSetting: PPROG_INVOKE_SETTING,
+ Args: PVOID,
+ SecuritySet: BOOL,
+) -> ()}
+extern "system" {
+ pub fn SetEntriesInAclA(
+ cCountOfExplicitEntries: ULONG,
+ pListOfExplicitEntries: PEXPLICIT_ACCESS_A,
+ OldAcl: PACL,
+ NewAcl: *mut PACL,
+ ) -> DWORD;
+ pub fn SetEntriesInAclW(
+ cCountOfExplicitEntries: ULONG,
+ pListOfExplicitEntries: PEXPLICIT_ACCESS_W,
+ OldAcl: PACL,
+ NewAcl: *mut PACL,
+ ) -> DWORD;
+ pub fn GetExplicitEntriesFromAclA(
+ pacl: PACL,
+ pcCountOfExplicitEntries: PULONG,
+ pListOfExplicitEntries: *mut PEXPLICIT_ACCESS_A,
+ ) -> DWORD;
+ pub fn GetExplicitEntriesFromAclW(
+ pacl: PACL,
+ pcCountOfExplicitEntries: PULONG,
+ pListOfExplicitEntries: *mut PEXPLICIT_ACCESS_W,
+ ) -> DWORD;
+ pub fn GetEffectiveRightsFromAclA(
+ pacl: PACL,
+ pTrustee: PTRUSTEE_A,
+ pAccessRight: PACCESS_MASK,
+ ) -> DWORD;
+ pub fn GetEffectiveRightsFromAclW(
+ pacl: PACL,
+ pTrustee: PTRUSTEE_W,
+ pAccessRight: PACCESS_MASK,
+ ) -> DWORD;
+ pub fn GetAuditedPermissionsFromAclA(
+ pAcl: PACL,
+ pTrustee: PTRUSTEE_A,
+ pSuccessfulAuditedRights: PACCESS_MASK,
+ pFailedAuditRights: PACCESS_MASK,
+ ) -> DWORD;
+ pub fn GetAuditedPermissionsFromAclW(
+ pAcl: PACL,
+ pTrustee: PTRUSTEE_W,
+ pSuccessfulAuditedRights: PACCESS_MASK,
+ pFailedAuditRights: PACCESS_MASK,
+ ) -> DWORD;
+ pub fn GetNamedSecurityInfoA(
+ pObjectName: LPCSTR,
+ ObjectType: SE_OBJECT_TYPE,
+ SecurityInfo: SECURITY_INFORMATION,
+ ppsidOwner: *mut PSID,
+ ppsidGroup: *mut PSID,
+ ppDacl: *mut PACL,
+ ppSacl: *mut PACL,
+ ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
+ ) -> DWORD;
+ pub fn GetNamedSecurityInfoW(
+ pObjectName: LPCWSTR,
+ ObjectType: SE_OBJECT_TYPE,
+ SecurityInfo: SECURITY_INFORMATION,
+ ppsidOwner: *mut PSID,
+ ppsidGroup: *mut PSID,
+ ppDacl: *mut PACL,
+ ppSacl: *mut PACL,
+ ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
+ ) -> DWORD;
+ pub fn GetSecurityInfo(
+ handle: HANDLE,
+ ObjectType: SE_OBJECT_TYPE,
+ SecurityInfo: SECURITY_INFORMATION,
+ ppsidOwner: *mut PSID,
+ ppsidGroup: *mut PSID,
+ ppDacl: *mut PACL,
+ ppSacl: *mut PACL,
+ ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
+ ) -> DWORD;
+ pub fn SetNamedSecurityInfoA(
+ pObjectame: LPSTR,
+ ObjectType: SE_OBJECT_TYPE,
+ SecurityInfo: SECURITY_INFORMATION,
+ psidOwner: PSID,
+ psidGroup: PSID,
+ pDacl: PACL,
+ pSacl: PACL,
+ ) -> DWORD;
+ pub fn SetNamedSecurityInfoW(
+ pObjectame: LPWSTR,
+ ObjectType: SE_OBJECT_TYPE,
+ SecurityInfo: SECURITY_INFORMATION,
+ psidOwner: PSID,
+ psidGroup: PSID,
+ pDacl: PACL,
+ pSacl: PACL,
+ ) -> DWORD;
+ pub fn SetSecurityInfo(
+ handle: HANDLE,
+ ObjectType: SE_OBJECT_TYPE,
+ SecurityInfo: SECURITY_INFORMATION,
+ psidOwner: PSID,
+ psidGroup: PSID,
+ pDacl: PACL,
+ pSacl: PACL,
+ ) -> DWORD;
+ pub fn GetInheritanceSourceA(
+ pObjectName: LPSTR,
+ ObjectType: SE_OBJECT_TYPE,
+ SecurityInfo: SECURITY_INFORMATION,
+ Container: BOOL,
+ pObjectClassGuids: *mut *mut GUID,
+ GuidCount: DWORD,
+ pAcl: PACL,
+ pfnArray: PFN_OBJECT_MGR_FUNCTS,
+ pGenericMapping: PGENERIC_MAPPING,
+ pInheritArray: PINHERITED_FROMA,
+ ) -> DWORD;
+ pub fn GetInheritanceSourceW(
+ pObjectName: LPWSTR,
+ ObjectType: SE_OBJECT_TYPE,
+ SecurityInfo: SECURITY_INFORMATION,
+ Container: BOOL,
+ pObjectClassGuids: *mut *mut GUID,
+ GuidCount: DWORD,
+ pAcl: PACL,
+ pfnArray: PFN_OBJECT_MGR_FUNCTS,
+ pGenericMapping: PGENERIC_MAPPING,
+ pInheritArray: PINHERITED_FROMW,
+ ) -> DWORD;
+ pub fn FreeInheritedFromArray(
+ pInheritArray: PINHERITED_FROMW,
+ AceCnt: USHORT,
+ pfnArray: PFN_OBJECT_MGR_FUNCTS,
+ ) -> DWORD;
+ pub fn TreeResetNamedSecurityInfoA(
+ pObjectName: LPSTR,
+ ObjectType: SE_OBJECT_TYPE,
+ SecurityInfo: SECURITY_INFORMATION,
+ pOwner: PSID,
+ pGroup: PSID,
+ pDacl: PACL,
+ pSacl: PACL,
+ KeepExplicit: BOOL,
+ fnProgress: FN_PROGRESS,
+ ProgressInvokeSetting: PROG_INVOKE_SETTING,
+ Args: PVOID,
+ ) -> DWORD;
+ pub fn TreeResetNamedSecurityInfoW(
+ pObjectName: LPWSTR,
+ ObjectType: SE_OBJECT_TYPE,
+ SecurityInfo: SECURITY_INFORMATION,
+ pOwner: PSID,
+ pGroup: PSID,
+ pDacl: PACL,
+ pSacl: PACL,
+ KeepExplicit: BOOL,
+ fnProgress: FN_PROGRESS,
+ ProgressInvokeSetting: PROG_INVOKE_SETTING,
+ Args: PVOID,
+ ) -> DWORD;
+ pub fn TreeSetNamedSecurityInfoA(
+ pObjectName: LPSTR,
+ ObjectType: SE_OBJECT_TYPE,
+ SecurityInfo: SECURITY_INFORMATION,
+ pOwner: PSID,
+ pGroup: PSID,
+ pDacl: PACL,
+ pSacl: PACL,
+ dwAction: DWORD,
+ fnProgress: FN_PROGRESS,
+ ProgressInvokeSetting: PROG_INVOKE_SETTING,
+ Args: PVOID,
+ ) -> DWORD;
+ pub fn TreeSetNamedSecurityInfoW(
+ pObjectName: LPWSTR,
+ ObjectType: SE_OBJECT_TYPE,
+ SecurityInfo: SECURITY_INFORMATION,
+ pOwner: PSID,
+ pGroup: PSID,
+ pDacl: PACL,
+ pSacl: PACL,
+ dwAction: DWORD,
+ fnProgress: FN_PROGRESS,
+ ProgressInvokeSetting: PROG_INVOKE_SETTING,
+ Args: PVOID,
+ ) -> DWORD;
+ pub fn BuildSecurityDescriptorA(
+ pOwner: PTRUSTEE_A,
+ pGroup: PTRUSTEE_A,
+ cCountOfAccessEntries: ULONG,
+ pListOfAccessEntries: PEXPLICIT_ACCESS_A,
+ cCountOfAuditEntries: ULONG,
+ pListOfAuditEntries: PEXPLICIT_ACCESS_A,
+ pOldSD: PSECURITY_DESCRIPTOR,
+ pSizeNewSD: PULONG,
+ pNewSD: *mut PSECURITY_DESCRIPTOR,
+ ) -> DWORD;
+ pub fn BuildSecurityDescriptorW(
+ pOwner: PTRUSTEE_W,
+ pGroup: PTRUSTEE_W,
+ cCountOfAccessEntries: ULONG,
+ pListOfAccessEntries: PEXPLICIT_ACCESS_W,
+ cCountOfAuditEntries: ULONG,
+ pListOfAuditEntries: PEXPLICIT_ACCESS_W,
+ pOldSD: PSECURITY_DESCRIPTOR,
+ pSizeNewSD: PULONG,
+ pNewSD: *mut PSECURITY_DESCRIPTOR,
+ ) -> DWORD;
+ pub fn LookupSecurityDescriptorPartsA(
+ ppOwner: *mut PTRUSTEE_A,
+ ppGroup: *mut PTRUSTEE_A,
+ pcCountOfAccessEntries: PULONG,
+ ppListOfAccessEntries: *mut PEXPLICIT_ACCESS_A,
+ pcCountOfAuditEntries: PULONG,
+ ppListOfAuditEntries: *mut PEXPLICIT_ACCESS_A,
+ pSD: PSECURITY_DESCRIPTOR,
+ ) -> DWORD;
+ pub fn LookupSecurityDescriptorPartsW(
+ ppOwner: *mut PTRUSTEE_W,
+ ppGroup: *mut PTRUSTEE_W,
+ pcCountOfAccessEntries: PULONG,
+ ppListOfAccessEntries: *mut PEXPLICIT_ACCESS_W,
+ pcCountOfAuditEntries: PULONG,
+ ppListOfAuditEntries: *mut PEXPLICIT_ACCESS_W,
+ pSD: PSECURITY_DESCRIPTOR,
+ ) -> DWORD;
+ pub fn BuildExplicitAccessWithNameA(
+ pExplicitAccess: PEXPLICIT_ACCESS_A,
+ pTrusteeName: LPSTR,
+ AccessPermissions: DWORD,
+ AccessMode: ACCESS_MODE,
+ Inheritance: DWORD,
+ );
+ pub fn BuildExplicitAccessWithNameW(
+ pExplicitAccess: PEXPLICIT_ACCESS_W,
+ pTrusteeName: LPWSTR,
+ AccessPermissions: DWORD,
+ AccessMode: ACCESS_MODE,
+ Inheritance: DWORD,
+ );
+ pub fn BuildImpersonateExplicitAccessWithNameA(
+ pExplicitAccess: PEXPLICIT_ACCESS_A,
+ pTrusteeName: LPSTR,
+ pTrustee: PTRUSTEE_A,
+ AccessPermissions: DWORD,
+ AccessMode: ACCESS_MODE,
+ Inheritance: DWORD,
+ );
+ pub fn BuildImpersonateExplicitAccessWithNameW(
+ pExplicitAccess: PEXPLICIT_ACCESS_W,
+ pTrusteeName: LPWSTR,
+ pTrustee: PTRUSTEE_W,
+ AccessPermissions: DWORD,
+ AccessMode: ACCESS_MODE,
+ Inheritance: DWORD,
+ );
+ pub fn BuildTrusteeWithNameA(
+ pTrustee: PTRUSTEE_A,
+ pName: LPSTR,
+ );
+ pub fn BuildTrusteeWithNameW(
+ pTrustee: PTRUSTEE_W,
+ pName: LPWSTR,
+ );
+ pub fn BuildImpersonateTrusteeA(
+ pTrustee: PTRUSTEE_A,
+ pImpersonateTrustee: PTRUSTEE_A,
+ );
+ pub fn BuildImpersonateTrusteeW(
+ pTrustee: PTRUSTEE_W,
+ pImpersonateTrustee: PTRUSTEE_W,
+ );
+ pub fn BuildTrusteeWithSidA(
+ pTrustee: PTRUSTEE_A,
+ pSid: PSID,
+ );
+ pub fn BuildTrusteeWithSidW(
+ pTrustee: PTRUSTEE_W,
+ pSid: PSID,
+ );
+ pub fn BuildTrusteeWithObjectsAndSidA(
+ pTrustee: PTRUSTEE_A,
+ pObjSid: POBJECTS_AND_SID,
+ pObjectGuid: *mut GUID,
+ pInheritedObjectGuid: *mut GUID,
+ pSid: PSID,
+ );
+ pub fn BuildTrusteeWithObjectsAndSidW(
+ pTrustee: PTRUSTEE_W,
+ pObjSid: POBJECTS_AND_SID,
+ pObjectGuid: *mut GUID,
+ pInheritedObjectGuid: *mut GUID,
+ pSid: PSID,
+ );
+ pub fn BuildTrusteeWithObjectsAndNameA(
+ pTrustee: PTRUSTEE_A,
+ pObjName: POBJECTS_AND_NAME_A,
+ ObjectType: SE_OBJECT_TYPE,
+ ObjectTypeName: LPSTR,
+ InheritedObjectTypeName: LPSTR,
+ Name: LPSTR,
+ );
+ pub fn BuildTrusteeWithObjectsAndNameW(
+ pTrustee: PTRUSTEE_W,
+ pObjName: POBJECTS_AND_NAME_W,
+ ObjectType: SE_OBJECT_TYPE,
+ ObjectTypeName: LPWSTR,
+ InheritedObjectTypeName: LPWSTR,
+ Name: LPWSTR,
+ );
+ pub fn GetTrusteeNameA(
+ pTrustee: PTRUSTEE_A,
+ ) -> LPSTR;
+ pub fn GetTrusteeNameW(
+ pTrustee: PTRUSTEE_W,
+ ) -> LPWSTR;
+ pub fn GetTrusteeTypeA(
+ pTrustee: PTRUSTEE_A,
+ ) -> TRUSTEE_TYPE;
+ pub fn GetTrusteeTypeW(
+ pTrustee: PTRUSTEE_W,
+ ) -> TRUSTEE_TYPE;
+ pub fn GetTrusteeFormA(
+ pTrustee: PTRUSTEE_A,
+ ) -> TRUSTEE_FORM;
+ pub fn GetTrusteeFormW(
+ pTrustee: PTRUSTEE_W,
+ ) -> TRUSTEE_FORM;
+ pub fn GetMultipleTrusteeOperationA(
+ pTrustee: PTRUSTEE_A,
+ ) -> MULTIPLE_TRUSTEE_OPERATION;
+ pub fn GetMultipleTrusteeOperationW(
+ pTrustee: PTRUSTEE_W,
+ ) -> MULTIPLE_TRUSTEE_OPERATION;
+ pub fn GetMultipleTrusteeA(
+ pTrustee: PTRUSTEE_A,
+ ) -> PTRUSTEE_A;
+ pub fn GetMultipleTrusteeW(
+ pTrustee: PTRUSTEE_W,
+ ) -> PTRUSTEE_W;
+}
diff --git a/vendor/winapi/src/um/adhoc.rs b/vendor/winapi/src/um/adhoc.rs
new file mode 100644
index 000000000..7448c08d2
--- /dev/null
+++ b/vendor/winapi/src/um/adhoc.rs
@@ -0,0 +1,220 @@
+// 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::guiddef::GUID;
+use shared::minwindef::ULONG;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{BOOLEAN, HRESULT, LONG, LPCWSTR, LPWSTR};
+ENUM!{enum DOT11_ADHOC_CIPHER_ALGORITHM {
+ DOT11_ADHOC_CIPHER_ALGO_INVALID = -1i32 as u32,
+ DOT11_ADHOC_CIPHER_ALGO_NONE = 0,
+ DOT11_ADHOC_CIPHER_ALGO_CCMP = 0x4,
+ DOT11_ADHOC_CIPHER_ALGO_WEP = 0x101,
+}}
+ENUM!{enum DOT11_ADHOC_AUTH_ALGORITHM {
+ DOT11_ADHOC_AUTH_ALGO_INVALID = -1i32 as u32,
+ DOT11_ADHOC_AUTH_ALGO_80211_OPEN = 1,
+ DOT11_ADHOC_AUTH_ALGO_RSNA_PSK = 7,
+}}
+ENUM!{enum DOT11_ADHOC_NETWORK_CONNECTION_STATUS {
+ DOT11_ADHOC_NETWORK_CONNECTION_STATUS_INVALID = 0,
+ DOT11_ADHOC_NETWORK_CONNECTION_STATUS_DISCONNECTED = 11,
+ DOT11_ADHOC_NETWORK_CONNECTION_STATUS_CONNECTING = 12,
+ DOT11_ADHOC_NETWORK_CONNECTION_STATUS_CONNECTED = 13,
+ DOT11_ADHOC_NETWORK_CONNECTION_STATUS_FORMED = 14,
+}}
+ENUM!{enum DOT11_ADHOC_CONNECT_FAIL_REASON {
+ DOT11_ADHOC_CONNECT_FAIL_DOMAIN_MISMATCH = 0,
+ DOT11_ADHOC_CONNECT_FAIL_PASSPHRASE_MISMATCH = 1,
+ DOT11_ADHOC_CONNECT_FAIL_OTHER = 2,
+}}
+RIDL!{#[uuid(0x8f10cc26, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IDot11AdHocManager(IDot11AdHocManagerVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateNetwork(
+ Name: LPCWSTR,
+ Password: LPCWSTR,
+ GeographicalId: LONG,
+ pInterface: *mut IDot11AdHocInterface,
+ pSecurity: *mut IDot11AdHocSecuritySettings,
+ pContextGuid: *mut GUID,
+ pIAdHoc: *mut *mut IDot11AdHocNetwork,
+ ) -> HRESULT,
+ fn CommitCreatedNetwork(
+ pIAdHoc: *mut IDot11AdHocNetwork,
+ fSaveProfile: BOOLEAN,
+ fMakeSavedProfileUserSpecific: BOOLEAN,
+ ) -> HRESULT,
+ fn GetIEnumDot11AdHocNetworks(
+ pContextGuid: *mut GUID,
+ ppEnum: *mut *mut IEnumDot11AdHocNetworks,
+ ) -> HRESULT,
+ fn GetIEnumDot11AdHocInterfaces(
+ ppEnum: *mut *mut IEnumDot11AdHocInterfaces,
+ ) -> HRESULT,
+ fn GetNetwork(
+ NetworkSignature: *mut GUID,
+ pNetwork: *mut *mut IDot11AdHocNetwork,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc27, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IDot11AdHocManagerNotificationSink(IDot11AdHocManagerNotificationSinkVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn OnNetworkAdd(
+ pIAdHocNetwork: *mut IDot11AdHocNetwork,
+ ) -> HRESULT,
+ fn OnNetworkRemove(
+ Signature: *mut GUID,
+ ) -> HRESULT,
+ fn OnInterfaceAdd(
+ pIAdHocInterface: *mut IDot11AdHocInterface,
+ ) -> HRESULT,
+ fn OnInterfaceRemove(
+ Signature: *mut GUID,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc28, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IEnumDot11AdHocNetworks(IEnumDot11AdHocNetworksVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ cElt: ULONG,
+ rgElt: *mut *mut IDot11AdHocNetwork,
+ pcEltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ cElt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppEnum: *mut *mut IEnumDot11AdHocNetworks,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc29, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IDot11AdHocNetwork(IDot11AdHocNetworkVtbl): IUnknown(IUnknownVtbl) {
+ fn GetStatus(
+ eStatus: *mut DOT11_ADHOC_NETWORK_CONNECTION_STATUS,
+ ) -> HRESULT,
+ fn GetSSID(
+ ppszwSSID: *mut LPWSTR,
+ ) -> HRESULT,
+ fn HasProfile(
+ pf11d: *mut BOOLEAN,
+ ) -> HRESULT,
+ fn GetProfileName(
+ ppszwProfileName: *mut LPWSTR,
+ ) -> HRESULT,
+ fn DeleteProfile() -> HRESULT,
+ fn GetSignalQuality(
+ puStrengthValue: *mut ULONG,
+ puStrengthMax: *mut ULONG,
+ ) -> HRESULT,
+ fn GetSecuritySetting(
+ pAdHocSecuritySetting: *mut *mut IDot11AdHocSecuritySettings,
+ ) -> HRESULT,
+ fn GetContextGuid(
+ pContextGuid: *mut GUID,
+ ) -> HRESULT,
+ fn GetSignature(
+ pSignature: *mut GUID,
+ ) -> HRESULT,
+ fn GetInterface(
+ pAdHocInterface: *mut *mut IDot11AdHocInterface,
+ ) -> HRESULT,
+ fn Connect(
+ Passphrase: LPCWSTR,
+ GeographicalId: LONG,
+ fSaveProfile: BOOLEAN,
+ fMakeSavedProfileUserSpecific: BOOLEAN,
+ ) -> HRESULT,
+ fn Disconnect() -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc2a, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IDot11AdHocNetworkNotificationSink(IDot11AdHocNetworkNotificationSinkVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn OnStatusChange(
+ eStatus: DOT11_ADHOC_NETWORK_CONNECTION_STATUS,
+ ) -> HRESULT,
+ fn OnConnectFail(
+ eFailReason: DOT11_ADHOC_CONNECT_FAIL_REASON,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc2b, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IDot11AdHocInterface(IDot11AdHocInterfaceVtbl): IUnknown(IUnknownVtbl) {
+ fn GetDeviceSignature(
+ pSignature: *mut GUID,
+ ) -> HRESULT,
+ fn GetFriendlyName(
+ ppszName: *mut LPWSTR,
+ ) -> HRESULT,
+ fn IsDot11d(
+ pf11d: *mut BOOLEAN,
+ ) -> HRESULT,
+ fn IsAdHocCapable(
+ pfAdHocCapable: *mut BOOLEAN,
+ ) -> HRESULT,
+ fn IsRadioOn(
+ pfIsRadioOn: *mut BOOLEAN,
+ ) -> HRESULT,
+ fn GetActiveNetwork(
+ ppNetwork: *mut *mut IDot11AdHocNetwork,
+ ) -> HRESULT,
+ fn GetIEnumSecuritySettings(
+ ppEnum: *mut *mut IEnumDot11AdHocSecuritySettings,
+ ) -> HRESULT,
+ fn GetIEnumDot11AdHocNetworks(
+ pFilterGuid: *mut GUID,
+ ppEnum: *mut *mut IEnumDot11AdHocNetworks,
+ ) -> HRESULT,
+ fn GetStatus(
+ pState: *mut DOT11_ADHOC_NETWORK_CONNECTION_STATUS,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc2c, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IEnumDot11AdHocInterfaces(IEnumDot11AdHocInterfacesVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ cElt: ULONG,
+ rgElt: *mut *mut IDot11AdHocInterface,
+ pcEltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ cElt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppEnum: *mut *mut IEnumDot11AdHocInterfaces,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc2d, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IEnumDot11AdHocSecuritySettings(IEnumDot11AdHocSecuritySettingsVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn Next(
+ cElt: ULONG,
+ rgElt: *mut *mut IDot11AdHocSecuritySettings,
+ pcEltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ cElt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppEnum: *mut *mut IEnumDot11AdHocSecuritySettings,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc2e, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IDot11AdHocSecuritySettings(IDot11AdHocSecuritySettingsVtbl): IUnknown(IUnknownVtbl) {
+ fn GetDot11AuthAlgorithm(
+ pAuth: *mut DOT11_ADHOC_AUTH_ALGORITHM,
+ ) -> HRESULT,
+ fn GetDot11CipherAlgorithm(
+ pCipher: *mut DOT11_ADHOC_CIPHER_ALGORITHM,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8f10cc2f, 0xcf0d, 0x42a0, 0xac, 0xbe, 0xe2, 0xde, 0x70, 0x07, 0x38, 0x4d)]
+interface IDot11AdHocInterfaceNotificationSink(IDot11AdHocInterfaceNotificationSinkVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn OnConnectionStatusChange(
+ eStatus: DOT11_ADHOC_NETWORK_CONNECTION_STATUS,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xdd06a84f, 0x83bd, 0x4d01, 0x8a, 0xb9, 0x23, 0x89, 0xfe, 0xa0, 0x86, 0x9e)]
+class Dot11AdHocManager;}
diff --git a/vendor/winapi/src/um/appmgmt.rs b/vendor/winapi/src/um/appmgmt.rs
new file mode 100644
index 000000000..1d7b910d4
--- /dev/null
+++ b/vendor/winapi/src/um/appmgmt.rs
@@ -0,0 +1,122 @@
+// 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::guiddef::GUID;
+use shared::minwindef::{BOOL, DWORD, LPDWORD};
+use um::winnt::{LANGID, LCID, LPWSTR, WCHAR};
+ENUM!{enum INSTALLSPECTYPE {
+ APPNAME = 1,
+ FILEEXT,
+ PROGID,
+ COMCLASS,
+}}
+STRUCT!{struct INSTALLSPEC_APPNAME {
+ Name: *mut WCHAR,
+ GPOId: GUID,
+}}
+STRUCT!{struct INSTALLSPEC_COMCLASS {
+ Clsid: GUID,
+ ClsCtx: DWORD,
+}}
+UNION!{union INSTALLSPEC {
+ [u32; 5] [u64; 3],
+ AppName AppName_mut: INSTALLSPEC_APPNAME,
+ FileExt FileExt_mut: *mut WCHAR,
+ ProgId ProgId_mut: *mut WCHAR,
+ COMClass COMClass_mut: INSTALLSPEC_COMCLASS,
+}}
+STRUCT!{struct INSTALLDATA {
+ Type: INSTALLSPECTYPE,
+ Spec: INSTALLSPEC,
+}}
+pub type PINSTALLDATA = *mut INSTALLDATA;
+ENUM!{enum APPSTATE {
+ ABSENT,
+ ASSIGNED,
+ PUBLISHED,
+}}
+pub const LOCALSTATE_ASSIGNED: DWORD = 0x1;
+pub const LOCALSTATE_PUBLISHED: DWORD = 0x2;
+pub const LOCALSTATE_UNINSTALL_UNMANAGED: DWORD = 0x4;
+pub const LOCALSTATE_POLICYREMOVE_ORPHAN: DWORD = 0x8;
+pub const LOCALSTATE_POLICYREMOVE_UNINSTALL: DWORD = 0x10;
+pub const LOCALSTATE_ORPHANED: DWORD = 0x20;
+pub const LOCALSTATE_UNINSTALLED: DWORD = 0x40;
+STRUCT!{struct LOCALMANAGEDAPPLICATION {
+ pszDeploymentName: LPWSTR,
+ pszPolicyName: LPWSTR,
+ pszProductId: LPWSTR,
+ dwState: DWORD,
+}}
+pub type PLOCALMANAGEDAPPLICATION = *mut LOCALMANAGEDAPPLICATION;
+pub const MANAGED_APPS_USERAPPLICATIONS: DWORD = 0x1;
+pub const MANAGED_APPS_FROMCATEGORY: DWORD = 0x2;
+pub const MANAGED_APPS_INFOLEVEL_DEFAULT: DWORD = 0x10000;
+pub const MANAGED_APPTYPE_WINDOWSINSTALLER: DWORD = 0x1;
+pub const MANAGED_APPTYPE_SETUPEXE: DWORD = 0x2;
+pub const MANAGED_APPTYPE_UNSUPPORTED: DWORD = 0x3;
+STRUCT!{struct MANAGEDAPPLICATION {
+ pszPackageName: LPWSTR,
+ pszPublisher: LPWSTR,
+ dwVersionHi: DWORD,
+ dwVersionLo: DWORD,
+ dwRevision: DWORD,
+ GpoId: GUID,
+ pszPolicyName: LPWSTR,
+ ProductId: GUID,
+ Language: LANGID,
+ pszOwner: LPWSTR,
+ pszCompany: LPWSTR,
+ pszComments: LPWSTR,
+ pszContact: LPWSTR,
+ pszSupportUrl: LPWSTR,
+ dwPathType: DWORD,
+ bInstalled: BOOL,
+}}
+pub type PMANAGEDAPPLICATION = *mut MANAGEDAPPLICATION;
+STRUCT!{struct APPCATEGORYINFO {
+ Locale: LCID,
+ pszDescription: LPWSTR,
+ AppCategoryId: GUID,
+}}
+STRUCT!{struct APPCATEGORYINFOLIST {
+ cCategory: DWORD,
+ pCategoryInfo: *mut APPCATEGORYINFO,
+}}
+extern "system" {
+ pub fn InstallApplication(
+ pInstallInfo: PINSTALLDATA,
+ ) -> DWORD;
+ pub fn UninstallApplication(
+ ProductCode: LPWSTR,
+ dwStatus: DWORD,
+ ) -> DWORD;
+ pub fn CommandLineFromMsiDescriptor(
+ Descriptor: LPWSTR,
+ CommandLine: LPWSTR,
+ CommandLineLength: *mut DWORD,
+ ) -> DWORD;
+ pub fn GetManagedApplications(
+ pCategory: *mut GUID,
+ dwQueryFlags: DWORD,
+ dwInfoLevel: DWORD,
+ pdwApps: LPDWORD,
+ prgManagedApps: *mut PMANAGEDAPPLICATION,
+ ) -> DWORD;
+ pub fn GetLocalManagedApplications(
+ bUserApps: BOOL,
+ pdwApps: LPDWORD,
+ prgManagedApps: *mut PMANAGEDAPPLICATION,
+ ) -> DWORD;
+ pub fn GetLocalManagedApplicationData(
+ ProductCode: LPWSTR,
+ DisplayName: *mut LPWSTR,
+ SupportUrl: *mut LPWSTR,
+ );
+ pub fn GetManagedApplicationCategories(
+ dwReserved: DWORD,
+ pAppCategory: *mut APPCATEGORYINFOLIST,
+ ) -> DWORD;
+}
diff --git a/vendor/winapi/src/um/audioclient.rs b/vendor/winapi/src/um/audioclient.rs
new file mode 100644
index 000000000..5f7b83e46
--- /dev/null
+++ b/vendor/winapi/src/um/audioclient.rs
@@ -0,0 +1,172 @@
+// 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
+//! this ALWAYS GENERATED file contains the definitions for the interfaces
+use ctypes::c_float;
+use shared::basetsd::{UINT32, UINT64};
+use shared::guiddef::{LPCGUID, REFIID};
+use shared::minwindef::{BYTE, DWORD, LPVOID};
+use shared::mmreg::WAVEFORMATEX;
+use shared::winerror::{FACILITY_AUDCLNT, SEVERITY_ERROR, SEVERITY_SUCCESS};
+use shared::wtypesbase::SCODE;
+use um::audiosessiontypes::AUDCLNT_SHAREMODE;
+use um::strmif::REFERENCE_TIME;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HANDLE, HRESULT};
+//1627
+pub const AUDCLNT_E_NOT_INITIALIZED: HRESULT = AUDCLNT_ERR!(0x001);
+pub const AUDCLNT_E_ALREADY_INITIALIZED: HRESULT = AUDCLNT_ERR!(0x002);
+pub const AUDCLNT_E_WRONG_ENDPOINT_TYPE: HRESULT = AUDCLNT_ERR!(0x003);
+pub const AUDCLNT_E_DEVICE_INVALIDATED: HRESULT = AUDCLNT_ERR!(0x004);
+pub const AUDCLNT_E_NOT_STOPPED: HRESULT = AUDCLNT_ERR!(0x005);
+pub const AUDCLNT_E_BUFFER_TOO_LARGE: HRESULT = AUDCLNT_ERR!(0x006);
+pub const AUDCLNT_E_OUT_OF_ORDER: HRESULT = AUDCLNT_ERR!(0x007);
+pub const AUDCLNT_E_UNSUPPORTED_FORMAT: HRESULT = AUDCLNT_ERR!(0x008);
+pub const AUDCLNT_E_INVALID_SIZE: HRESULT = AUDCLNT_ERR!(0x009);
+pub const AUDCLNT_E_DEVICE_IN_USE: HRESULT = AUDCLNT_ERR!(0x00a);
+pub const AUDCLNT_E_BUFFER_OPERATION_PENDING: HRESULT = AUDCLNT_ERR!(0x00b);
+pub const AUDCLNT_E_THREAD_NOT_REGISTERED: HRESULT = AUDCLNT_ERR!(0x00c);
+pub const AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED: HRESULT = AUDCLNT_ERR!(0x00e);
+pub const AUDCLNT_E_ENDPOINT_CREATE_FAILED: HRESULT = AUDCLNT_ERR!(0x00f);
+pub const AUDCLNT_E_SERVICE_NOT_RUNNING: HRESULT = AUDCLNT_ERR!(0x010);
+pub const AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED: HRESULT = AUDCLNT_ERR!(0x011);
+pub const AUDCLNT_E_EXCLUSIVE_MODE_ONLY: HRESULT = AUDCLNT_ERR!(0x012);
+pub const AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL: HRESULT = AUDCLNT_ERR!(0x013);
+pub const AUDCLNT_E_EVENTHANDLE_NOT_SET: HRESULT = AUDCLNT_ERR!(0x014);
+pub const AUDCLNT_E_INCORRECT_BUFFER_SIZE: HRESULT = AUDCLNT_ERR!(0x015);
+pub const AUDCLNT_E_BUFFER_SIZE_ERROR: HRESULT = AUDCLNT_ERR!(0x016);
+pub const AUDCLNT_E_CPUUSAGE_EXCEEDED: HRESULT = AUDCLNT_ERR!(0x017);
+pub const AUDCLNT_E_BUFFER_ERROR: HRESULT = AUDCLNT_ERR!(0x018);
+pub const AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED: HRESULT = AUDCLNT_ERR!(0x019);
+pub const AUDCLNT_E_INVALID_DEVICE_PERIOD: HRESULT = AUDCLNT_ERR!(0x020);
+pub const AUDCLNT_E_INVALID_STREAM_FLAG: HRESULT = AUDCLNT_ERR!(0x021);
+pub const AUDCLNT_E_ENDPOINT_OFFLOAD_NOT_CAPABLE: HRESULT = AUDCLNT_ERR!(0x022);
+pub const AUDCLNT_E_OUT_OF_OFFLOAD_RESOURCES: HRESULT = AUDCLNT_ERR!(0x023);
+pub const AUDCLNT_E_OFFLOAD_MODE_ONLY: HRESULT = AUDCLNT_ERR!(0x024);
+pub const AUDCLNT_E_NONOFFLOAD_MODE_ONLY: HRESULT = AUDCLNT_ERR!(0x025);
+pub const AUDCLNT_E_RESOURCES_INVALIDATED: HRESULT = AUDCLNT_ERR!(0x026);
+pub const AUDCLNT_E_RAW_MODE_UNSUPPORTED: HRESULT = AUDCLNT_ERR!(0x027);
+pub const AUDCLNT_S_BUFFER_EMPTY: SCODE = AUDCLNT_SUCCESS!(0x001);
+pub const AUDCLNT_S_THREAD_ALREADY_REGISTERED: SCODE = AUDCLNT_SUCCESS!(0x002);
+pub const AUDCLNT_S_POSITION_STALLED: SCODE = AUDCLNT_SUCCESS!(0x003);
+ENUM!{enum AUDCLNT_BUFFERFLAGS {
+ AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY = 0x1,
+ AUDCLNT_BUFFERFLAGS_SILENT = 0x2,
+ AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR = 0x4,
+}}
+DEFINE_GUID!{IID_IAudioClient,
+ 0x1CB9AD4C, 0xDBFA, 0x4c32, 0xB1, 0x78, 0xC2, 0xF5, 0x68, 0xA7, 0x03, 0xB2}
+DEFINE_GUID!{IID_IAudioRenderClient,
+ 0xF294ACFC, 0x3146, 0x4483, 0xA7, 0xBF, 0xAD, 0xDC, 0xA7, 0xC2, 0x60, 0xE2}
+DEFINE_GUID!{IID_IAudioCaptureClient,
+ 0xc8adbd64, 0xe71e, 0x48a0, 0xa4, 0xde, 0x18, 0x5c, 0x39, 0x5c, 0xd3, 0x17}
+DEFINE_GUID!{IID_IAudioClock,
+ 0xcd63314f, 0x3fba, 0x4a1b, 0x81, 0x2c, 0xef, 0x96, 0x35, 0x87, 0x28, 0xe7}
+DEFINE_GUID!{IID_IAudioStreamVolume,
+ 0x93014887, 0x242d, 0x4068, 0x8a, 0x15, 0xcf, 0x5e, 0x93, 0xb9, 0x0f, 0xe3}
+RIDL!{#[uuid(0x1cb9ad4c, 0xdbfa, 0x4c32, 0xb1, 0x78, 0xc2, 0xf5, 0x68, 0xa7, 0x03, 0xb2)]
+interface IAudioClient(IAudioClientVtbl): IUnknown(IUnknownVtbl) {
+ fn Initialize(
+ ShareMode: AUDCLNT_SHAREMODE,
+ StreamFlags: DWORD,
+ hnsBufferDuration: REFERENCE_TIME,
+ hnsPeriodicity: REFERENCE_TIME,
+ pFormat: *const WAVEFORMATEX,
+ AudioSessionGuid: LPCGUID,
+ ) -> HRESULT,
+ fn GetBufferSize(
+ pNumBufferFrames: *mut UINT32,
+ ) -> HRESULT,
+ fn GetStreamLatency(
+ phnsLatency: *mut REFERENCE_TIME,
+ ) -> HRESULT,
+ fn GetCurrentPadding(
+ pNumPaddingFrames: *mut UINT32,
+ ) -> HRESULT,
+ fn IsFormatSupported(
+ ShareMode: AUDCLNT_SHAREMODE,
+ pFormat: *const WAVEFORMATEX,
+ ppClosestMatch: *mut *mut WAVEFORMATEX,
+ ) -> HRESULT,
+ fn GetMixFormat(
+ ppDeviceFormat: *mut *mut WAVEFORMATEX,
+ ) -> HRESULT,
+ fn GetDevicePeriod(
+ phnsDefaultDevicePeriod: *mut REFERENCE_TIME,
+ phnsMinimumDevicePeriod: *mut REFERENCE_TIME,
+ ) -> HRESULT,
+ fn Start() -> HRESULT,
+ fn Stop() -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn SetEventHandle(
+ eventHandle: HANDLE,
+ ) -> HRESULT,
+ fn GetService(
+ riid: REFIID,
+ ppv: *mut LPVOID,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xf294acfc, 0x3146, 0x4483, 0xa7, 0xbf, 0xad, 0xdc, 0xa7, 0xc2, 0x60, 0xe2)]
+interface IAudioRenderClient(IAudioRenderClientVtbl): IUnknown(IUnknownVtbl) {
+ fn GetBuffer(
+ NumFramesRequested: UINT32,
+ ppData: *mut *mut BYTE,
+ ) -> HRESULT,
+ fn ReleaseBuffer(
+ NumFramesWritten: UINT32,
+ dwFlags: DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xc8adbd64, 0xe71e, 0x48a0, 0xa4, 0xde, 0x18, 0x5c, 0x39, 0x5c, 0xd3, 0x17)]
+interface IAudioCaptureClient(IAudioCaptureClientVtbl): IUnknown(IUnknownVtbl) {
+ fn GetBuffer(
+ ppData: *mut *mut BYTE,
+ pNumFramesToRead: *mut UINT32,
+ pdwFlags: *mut DWORD,
+ pu64DevicePosition: *mut UINT64,
+ pu64QPCPosition: *mut UINT64,
+ ) -> HRESULT,
+ fn ReleaseBuffer(
+ NumFramesRead: UINT32,
+ ) -> HRESULT,
+ fn GetNextPacketSize(
+ pNumFramesInNextPacket: *mut UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xcd63314f, 0x3fba, 0x4a1b, 0x81, 0x2c, 0xef, 0x96, 0x35, 0x87, 0x28, 0xe7)]
+interface IAudioClock(IAudioClockVtbl): IUnknown(IUnknownVtbl) {
+ fn GetFrequency(
+ pu64Frequency: *mut UINT64,
+ ) -> HRESULT,
+ fn GetPosition(
+ pu64Position: *mut UINT64,
+ pu64QPCPosition: *mut UINT64,
+ ) -> HRESULT,
+ fn GetCharacteristics(
+ pdwCharacteristics: *mut DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x93014887, 0x242d, 0x4068, 0x8a, 0x15, 0xcf, 0x5e, 0x93, 0xb9, 0x0f, 0xe3)]
+interface IAudioStreamVolume(IAudioStreamVolumeVtbl): IUnknown(IUnknownVtbl) {
+ fn GetChannelCount(
+ pdwCount: *mut UINT32,
+ ) -> HRESULT,
+ fn SetChannelVolume(
+ dwIndex: UINT32,
+ fLevel: c_float,
+ ) -> HRESULT,
+ fn GetChannelVolume(
+ dwIndex: UINT32,
+ pfLevel: *mut c_float,
+ ) -> HRESULT,
+ fn SetAllVolumes(
+ dwCount: UINT32,
+ pfVolumes: *const c_float,
+ ) -> HRESULT,
+ fn GetAllVolumes(
+ dwCount: UINT32,
+ pfVolumes: *mut c_float,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/audiosessiontypes.rs b/vendor/winapi/src/um/audiosessiontypes.rs
new file mode 100644
index 000000000..3c64f4244
--- /dev/null
+++ b/vendor/winapi/src/um/audiosessiontypes.rs
@@ -0,0 +1,37 @@
+// 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::minwindef::DWORD;
+ENUM!{enum AUDCLNT_SHAREMODE {
+ AUDCLNT_SHAREMODE_SHARED,
+ AUDCLNT_SHAREMODE_EXCLUSIVE,
+}}
+ENUM!{enum AUDIO_STREAM_CATEGORY {
+ AudioCategory_Other = 0,
+ AudioCategory_ForegroundOnlyMedia = 1,
+ AudioCategory_BackgroundCapableMedia = 2,
+ AudioCategory_Communications = 3,
+ AudioCategory_Alerts = 4,
+ AudioCategory_SoundEffects = 5,
+ AudioCategory_GameEffects = 6,
+ AudioCategory_GameMedia = 7,
+ AudioCategory_GameChat = 8,
+ AudioCategory_Speech = 9,
+ AudioCategory_Movie = 10,
+ AudioCategory_Media = 11,
+}}
+pub const AUDCLNT_STREAMFLAGS_CROSSPROCESS: DWORD = 0x00010000;
+pub const AUDCLNT_STREAMFLAGS_LOOPBACK: DWORD = 0x00020000;
+pub const AUDCLNT_STREAMFLAGS_EVENTCALLBACK: DWORD = 0x00040000;
+pub const AUDCLNT_STREAMFLAGS_NOPERSIST: DWORD = 0x00080000;
+pub const AUDCLNT_STREAMFLAGS_RATEADJUST: DWORD = 0x00100000;
+pub const AUDCLNT_SESSIONFLAGS_EXPIREWHENUNOWNED: DWORD = 0x10000000;
+pub const AUDCLNT_SESSIONFLAGS_DISPLAY_HIDE: DWORD = 0x20000000;
+pub const AUDCLNT_SESSIONFLAGS_DISPLAY_HIDEWHENEXPIRED: DWORD = 0x40000000;
+ENUM!{enum AudioSessionState {
+ AudioSessionStateInactive = 0,
+ AudioSessionStateActive = 1,
+ AudioSessionStateExpired = 2,
+}}
diff --git a/vendor/winapi/src/um/avrt.rs b/vendor/winapi/src/um/avrt.rs
new file mode 100644
index 000000000..62b0e9c88
--- /dev/null
+++ b/vendor/winapi/src/um/avrt.rs
@@ -0,0 +1,82 @@
+// 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 ctypes::c_longlong;
+use shared::guiddef::GUID;
+use shared::minwindef::{BOOL, LPDWORD, PULONG};
+use um::winnt::{HANDLE, LPCSTR, LPCWSTR, PHANDLE, PLARGE_INTEGER};
+ENUM!{enum AVRT_PRIORITY {
+ AVRT_PRIORITY_VERYLOW = -2i32 as u32,
+ AVRT_PRIORITY_LOW,
+ AVRT_PRIORITY_NORMAL = 0,
+ AVRT_PRIORITY_HIGH,
+ AVRT_PRIORITY_CRITICAL,
+}}
+pub const THREAD_ORDER_GROUP_INFINITE_TIMEOUT: c_longlong = -1;
+extern "system" {
+ pub fn AvSetMmThreadCharacteristicsA(
+ TaskName: LPCSTR,
+ TaskIndex: LPDWORD,
+ ) -> HANDLE;
+ pub fn AvSetMmThreadCharacteristicsW(
+ TaskName: LPCWSTR,
+ TaskIndex: LPDWORD,
+ ) -> HANDLE;
+ pub fn AvSetMmMaxThreadCharacteristicsA(
+ FirstTask: LPCSTR,
+ SecondTask: LPCSTR,
+ TaskIndex: LPDWORD,
+ ) -> HANDLE;
+ pub fn AvSetMmMaxThreadCharacteristicsW(
+ FirstTask: LPCWSTR,
+ SecondTask: LPCWSTR,
+ TaskIndex: LPDWORD,
+ ) -> HANDLE;
+ pub fn AvRevertMmThreadCharacteristics(
+ avrt_handle: HANDLE,
+ ) -> BOOL;
+ pub fn AvSetMmThreadPriority(
+ AvrtHandle: HANDLE,
+ Priority: AVRT_PRIORITY,
+ ) -> BOOL;
+ pub fn AvRtCreateThreadOrderingGroup(
+ Context: PHANDLE,
+ Period: PLARGE_INTEGER,
+ ThreadOrderingGuid: *mut GUID,
+ Timeout: PLARGE_INTEGER,
+ ) -> BOOL;
+ pub fn AvRtCreateThreadOrderingGroupExA(
+ Context: PHANDLE,
+ Period: PLARGE_INTEGER,
+ ThreadOrderingGuid: *mut GUID,
+ Timeout: PLARGE_INTEGER,
+ TaskName: LPCSTR,
+ )-> BOOL;
+ pub fn AvRtCreateThreadOrderingGroupExW(
+ Context: PHANDLE,
+ Period: PLARGE_INTEGER,
+ ThreadOrderingGuid: *mut GUID,
+ Timeout: PLARGE_INTEGER,
+ TaskName: LPCWSTR,
+ ) -> BOOL;
+ pub fn AvRtJoinThreadOrderingGroup(
+ Context: PHANDLE,
+ ThreadOrderingGuid: *mut GUID,
+ Before: BOOL,
+ ) -> BOOL;
+ pub fn AvRtWaitOnThreadOrderingGroup(
+ Context: HANDLE,
+ ) -> BOOL;
+ pub fn AvRtLeaveThreadOrderingGroup(
+ Context: HANDLE,
+ ) -> BOOL;
+ pub fn AvRtDeleteThreadOrderingGroup(
+ Context: HANDLE,
+ ) -> BOOL;
+ pub fn AvQuerySystemResponsiveness(
+ AvrtHandle: HANDLE,
+ SystemResponsivenessValue: PULONG,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/bits.rs b/vendor/winapi/src/um/bits.rs
new file mode 100644
index 000000000..aef603fe0
--- /dev/null
+++ b/vendor/winapi/src/um/bits.rs
@@ -0,0 +1,295 @@
+// 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::UINT64;
+use shared::guiddef::{GUID, REFGUID};
+use shared::minwindef::{BOOL, DWORD, FILETIME, ULONG};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPCWSTR, LPWSTR, WCHAR};
+RIDL!{#[uuid(0x4991d34b, 0x80a1, 0x4291, 0x83, 0xb6, 0x33, 0x28, 0x36, 0x6b, 0x90, 0x97)]
+class BackgroundCopyManager;}
+pub const BG_SIZE_UNKNOWN: UINT64 = -1i64 as u64;
+STRUCT!{struct BG_FILE_PROGRESS {
+ BytesTotal: UINT64,
+ BytesTransferred: UINT64,
+ Completed: BOOL,
+}}
+RIDL!{#[uuid(0x01b7bd23, 0xfb88, 0x4a77, 0x84, 0x90, 0x58, 0x91, 0xd3, 0xe4, 0x65, 0x3a)]
+interface IBackgroundCopyFile(IBackgroundCopyFileVtbl): IUnknown(IUnknownVtbl) {
+ fn GetRemoteName(
+ pVal: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetLocalName(
+ pVal: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetProgress(
+ pVal: *mut BG_FILE_PROGRESS,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xca51e165, 0xc365, 0x424c, 0x8d, 0x41, 0x24, 0xaa, 0xa4, 0xff, 0x3c, 0x40)]
+interface IEnumBackgroundCopyFiles(IEnumBackgroundCopyFilesVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ celt: ULONG,
+ rgelt: *mut *mut IBackgroundCopyFile,
+ pceltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ celt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppenum: *mut *mut IEnumBackgroundCopyFiles,
+ ) -> HRESULT,
+ fn GetCount(
+ puCount: *mut ULONG,
+ ) -> HRESULT,
+}}
+ENUM!{enum BG_ERROR_CONTEXT {
+ BG_ERROR_CONTEXT_NONE = 0,
+ BG_ERROR_CONTEXT_UNKNOWN = 1,
+ BG_ERROR_CONTEXT_GENERAL_QUEUE_MANAGER = 2,
+ BG_ERROR_CONTEXT_QUEUE_MANAGER_NOTIFICATION = 3,
+ BG_ERROR_CONTEXT_LOCAL_FILE = 4,
+ BG_ERROR_CONTEXT_REMOTE_FILE = 5,
+ BG_ERROR_CONTEXT_GENERAL_TRANSPORT = 6,
+ BG_ERROR_CONTEXT_REMOTE_APPLICATION = 7,
+}}
+RIDL!{#[uuid(0x19c613a0, 0xfcb8, 0x4f28, 0x81, 0xae, 0x89, 0x7c, 0x3d, 0x07, 0x8f, 0x81)]
+interface IBackgroundCopyError(IBackgroundCopyErrorVtbl): IUnknown(IUnknownVtbl) {
+ fn GetError(
+ pContext: *mut BG_ERROR_CONTEXT,
+ pCode: *mut HRESULT,
+ ) -> HRESULT,
+ fn GetFile(
+ pVal: *mut *mut IBackgroundCopyFile,
+ ) -> HRESULT,
+ fn GetErrorDescription(
+ LanguageId: DWORD,
+ pErrorDescription: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetErrorContextDescription(
+ LanguageId: DWORD,
+ pContextDescription: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetProtocol(
+ pProtocol: *mut LPWSTR,
+ ) -> HRESULT,
+}}
+STRUCT!{struct BG_FILE_INFO {
+ RemoteName: LPWSTR,
+ LocalName: LPWSTR,
+}}
+STRUCT!{struct BG_JOB_PROGRESS {
+ BytesTotal: UINT64,
+ BytesTransferred: UINT64,
+ FilesTotal: ULONG,
+ FilesTransferred: ULONG,
+}}
+STRUCT!{struct BG_JOB_TIMES {
+ CreationTime: FILETIME,
+ ModificationTime: FILETIME,
+ TransferCompletionTime: FILETIME,
+}}
+ENUM!{enum BG_JOB_PRIORITY {
+ BG_JOB_PRIORITY_FOREGROUND = 0,
+ BG_JOB_PRIORITY_HIGH = BG_JOB_PRIORITY_FOREGROUND + 1,
+ BG_JOB_PRIORITY_NORMAL = BG_JOB_PRIORITY_HIGH + 1,
+ BG_JOB_PRIORITY_LOW = BG_JOB_PRIORITY_NORMAL + 1,
+}}
+ENUM!{enum BG_JOB_STATE {
+ BG_JOB_STATE_QUEUED = 0,
+ BG_JOB_STATE_CONNECTING = BG_JOB_STATE_QUEUED + 1,
+ BG_JOB_STATE_TRANSFERRING = BG_JOB_STATE_CONNECTING + 1,
+ BG_JOB_STATE_SUSPENDED = BG_JOB_STATE_TRANSFERRING + 1,
+ BG_JOB_STATE_ERROR = BG_JOB_STATE_SUSPENDED + 1,
+ BG_JOB_STATE_TRANSIENT_ERROR = BG_JOB_STATE_ERROR + 1,
+ BG_JOB_STATE_TRANSFERRED = BG_JOB_STATE_TRANSIENT_ERROR + 1,
+ BG_JOB_STATE_ACKNOWLEDGED = BG_JOB_STATE_TRANSFERRED + 1,
+ BG_JOB_STATE_CANCELLED = BG_JOB_STATE_ACKNOWLEDGED + 1,
+}}
+ENUM!{enum BG_JOB_TYPE {
+ BG_JOB_TYPE_DOWNLOAD = 0,
+ BG_JOB_TYPE_UPLOAD = BG_JOB_TYPE_DOWNLOAD + 1,
+ BG_JOB_TYPE_UPLOAD_REPLY = BG_JOB_TYPE_UPLOAD + 1,
+}}
+ENUM!{enum BG_JOB_PROXY_USAGE {
+ BG_JOB_PROXY_USAGE_PRECONFIG = 0,
+ BG_JOB_PROXY_USAGE_NO_PROXY = BG_JOB_PROXY_USAGE_PRECONFIG + 1,
+ BG_JOB_PROXY_USAGE_OVERRIDE = BG_JOB_PROXY_USAGE_NO_PROXY + 1,
+ BG_JOB_PROXY_USAGE_AUTODETECT = BG_JOB_PROXY_USAGE_OVERRIDE + 1,
+}}
+RIDL!{#[uuid(0x37668d37, 0x507e, 0x4160, 0x93, 0x16, 0x26, 0x30, 0x6d, 0x15, 0x0b, 0x12)]
+interface IBackgroundCopyJob(IBackgroundCopyJobVtbl): IUnknown(IUnknownVtbl) {
+ fn AddFileSet(
+ cFileCount: ULONG,
+ pFileSet: *mut BG_FILE_INFO,
+ ) -> HRESULT,
+ fn AddFile(
+ RemoteUrl: LPCWSTR,
+ LocalName: LPCWSTR,
+ ) -> HRESULT,
+ fn EnumFiles(
+ pErrorDescription: *mut *mut IEnumBackgroundCopyFiles,
+ ) -> HRESULT,
+ fn Suspend() -> HRESULT,
+ fn Resume() -> HRESULT,
+ fn Cancel() -> HRESULT,
+ fn Complete() -> HRESULT,
+ fn GetId(
+ pVal: *mut GUID,
+ ) -> HRESULT,
+ fn GetType(
+ pVal: *mut BG_JOB_TYPE,
+ ) -> HRESULT,
+ fn GetProgress(
+ pVal: *mut BG_JOB_PROGRESS,
+ ) -> HRESULT,
+ fn GetTimes(
+ pVal: *mut BG_JOB_TIMES,
+ ) -> HRESULT,
+ fn GetState(
+ pVal: *mut BG_JOB_STATE,
+ ) -> HRESULT,
+ fn GetError(
+ ppError: *mut *mut IBackgroundCopyError,
+ ) -> HRESULT,
+ fn GetOwner(
+ pVal: *mut LPWSTR,
+ ) -> HRESULT,
+ fn SetDisplayName(
+ Val: LPCWSTR,
+ ) -> HRESULT,
+ fn GetDisplayName(
+ pVal: *mut LPWSTR,
+ ) -> HRESULT,
+ fn SetDescription(
+ Val: LPCWSTR,
+ ) -> HRESULT,
+ fn GetDescription(
+ pVal: *mut LPWSTR,
+ ) -> HRESULT,
+ fn SetPriority(
+ Val: BG_JOB_PRIORITY,
+ ) -> HRESULT,
+ fn GetPriority(
+ pVal: *mut BG_JOB_PRIORITY,
+ ) -> HRESULT,
+ fn SetNotifyFlags(
+ Val: ULONG,
+ ) -> HRESULT,
+ fn GetNotifyFlags(
+ pVal: *mut ULONG,
+ ) -> HRESULT,
+ fn SetNotifyInterface(
+ Val: *mut IUnknown,
+ ) -> HRESULT,
+ fn GetNotifyInterface(
+ pVal: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn SetMinimumRetryDelay(
+ Seconds: ULONG,
+ ) -> HRESULT,
+ fn GetMinimumRetryDelay(
+ Seconds: *mut ULONG,
+ ) -> HRESULT,
+ fn SetNoProgressTimeout(
+ Seconds: ULONG,
+ ) -> HRESULT,
+ fn GetNoProgressTimeout(
+ Seconds: *mut ULONG,
+ ) -> HRESULT,
+ fn GetErrorCount(
+ Errors: *mut ULONG,
+ ) -> HRESULT,
+ fn SetProxySettings(
+ ProxyUsage: BG_JOB_PROXY_USAGE,
+ ProxyList: *const WCHAR,
+ ProxyBypassList: *const WCHAR,
+ ) -> HRESULT,
+ fn GetProxySettings(
+ pProxyUsage: *mut BG_JOB_PROXY_USAGE,
+ pProxyList: *mut LPWSTR,
+ pProxyBypassListpProxyList: *mut LPWSTR,
+ ) -> HRESULT,
+ fn TakeOwnership() -> HRESULT,
+}}
+RIDL!{#[uuid(0x1af4f612, 0x3b71, 0x466f, 0x8f, 0x58, 0x7b, 0x6f, 0x73, 0xac, 0x57, 0xad)]
+interface IEnumBackgroundCopyJobs(IEnumBackgroundCopyJobsVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ celt: ULONG,
+ rgelt: *mut *mut IBackgroundCopyJob,
+ pceltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ celt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppenum: *mut *mut IEnumBackgroundCopyJobs,
+ ) -> HRESULT,
+ fn GetCount(
+ puCount: *mut ULONG,
+ ) -> HRESULT,
+}}
+pub const BG_NOTIFY_JOB_TRANSFERRED: DWORD = 0x0001;
+pub const BG_NOTIFY_JOB_ERROR: DWORD = 0x0002;
+pub const BG_NOTIFY_DISABLE: DWORD = 0x0004;
+pub const BG_NOTIFY_JOB_MODIFICATION: DWORD = 0x0008;
+pub const BG_NOTIFY_FILE_TRANSFERRED: DWORD = 0x0010;
+pub const BG_NOTIFY_FILE_RANGES_TRANSFERRED: DWORD = 0x0020;
+RIDL!{#[uuid(0x97ea99c7, 0x0186, 0x4ad4, 0x8d, 0xf9, 0xc5, 0xb4, 0xe0, 0xed, 0x6b, 0x22)]
+interface IBackgroundCopyCallback(IBackgroundCopyCallbackVtbl): IUnknown(IUnknownVtbl) {
+ fn JobTransferred(
+ pJob: *mut IBackgroundCopyJob,
+ ) -> HRESULT,
+ fn JobError(
+ pJob: *mut IBackgroundCopyJob,
+ pError: *mut IBackgroundCopyError,
+ ) -> HRESULT,
+ fn JobModification(
+ pJob: *mut IBackgroundCopyJob,
+ dwReserved: DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xca29d251, 0xb4bb, 0x4679, 0xa3, 0xd9, 0xae, 0x80, 0x06, 0x11, 0x9d, 0x54)]
+interface AsyncIBackgroundCopyCallback(AsyncIBackgroundCopyCallbackVtbl): IUnknown(IUnknownVtbl) {
+ fn Begin_JobTransferred(
+ pJob: *mut IBackgroundCopyJob,
+ ) -> HRESULT,
+ fn Finish_JobTransferred() -> HRESULT,
+ fn Begin_JobError(
+ pJob: *mut IBackgroundCopyJob,
+ pError: *mut IBackgroundCopyError,
+ ) -> HRESULT,
+ fn Finish_JobError() -> HRESULT,
+ fn Begin_JobModification(
+ pJob: *mut IBackgroundCopyJob,
+ dwReserved: DWORD,
+ ) -> HRESULT,
+ fn Finish_JobModification() -> HRESULT,
+}}
+pub const BG_JOB_ENUM_ALL_USERS: DWORD = 0x0001;
+RIDL!{#[uuid(0x5ce34c0d, 0x0dc9, 0x4c1f, 0x89, 0x7c, 0xda, 0xa1, 0xb7, 0x8c, 0xee, 0x7c)]
+interface IBackgroundCopyManager(IBackgroundCopyManagerVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateJob(
+ DisplayName: LPCWSTR,
+ Type: BG_JOB_TYPE,
+ pJobId: *mut GUID,
+ ppJob: *mut *mut IBackgroundCopyJob,
+ ) -> HRESULT,
+ fn GetJob(
+ jobID: REFGUID,
+ ppJob: *mut *mut IBackgroundCopyJob,
+ ) -> HRESULT,
+ fn EnumJobs(
+ dwFlags: DWORD,
+ ppEnum: *mut *mut IEnumBackgroundCopyJobs,
+ ) -> HRESULT,
+ fn GetErrorDescription(
+ hResult: HRESULT,
+ LanguageId: DWORD,
+ pErrorDescription: *mut LPWSTR,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/bits10_1.rs b/vendor/winapi/src/um/bits10_1.rs
new file mode 100644
index 000000000..327161a8d
--- /dev/null
+++ b/vendor/winapi/src/um/bits10_1.rs
@@ -0,0 +1,37 @@
+// 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::UINT64;
+use shared::minwindef::DWORD;
+use um::bits::{IBackgroundCopyFile, IBackgroundCopyJob};
+use um::bits2_0::BG_FILE_RANGE;
+use um::bits3_0::{IBackgroundCopyCallback2, IBackgroundCopyCallback2Vtbl};
+use um::bits5_0::{IBackgroundCopyFile5, IBackgroundCopyFile5Vtbl};
+use um::winnt::HRESULT;
+RIDL!{#[uuid(0x98c97bd2, 0xe32b, 0x4ad8, 0xa5, 0x28, 0x95, 0xfd, 0x8b, 0x16, 0xbd, 0x42)]
+interface IBackgroundCopyCallback3(IBackgroundCopyCallback3Vtbl):
+ IBackgroundCopyCallback2(IBackgroundCopyCallback2Vtbl) {
+ fn FileRangesTransferred(
+ job: *mut IBackgroundCopyJob,
+ file: *mut IBackgroundCopyFile,
+ rangeCount: DWORD,
+ ranges: *const BG_FILE_RANGE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xcf6784f7, 0xd677, 0x49fd, 0x93, 0x68, 0xcb, 0x47, 0xae, 0xe9, 0xd1, 0xad)]
+interface IBackgroundCopyFile6(IBackgroundCopyFile6Vtbl):
+ IBackgroundCopyFile5(IBackgroundCopyFile5Vtbl) {
+ fn UpdateDownloadPosition(
+ offset: UINT64,
+ ) -> HRESULT,
+ fn RequestFileRanges(
+ rangeCount: DWORD,
+ ranges: *const BG_FILE_RANGE,
+ ) -> HRESULT,
+ fn GetFilledFileRanges(
+ rangeCount: *mut DWORD,
+ ranges: *mut *mut BG_FILE_RANGE,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/bits1_5.rs b/vendor/winapi/src/um/bits1_5.rs
new file mode 100644
index 000000000..b2890e7db
--- /dev/null
+++ b/vendor/winapi/src/um/bits1_5.rs
@@ -0,0 +1,70 @@
+// 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::UINT64;
+use shared::rpcndr::byte;
+use um::bits::{IBackgroundCopyJob, IBackgroundCopyJobVtbl};
+use um::winnt::{HRESULT, LPCWSTR, LPWSTR};
+STRUCT!{struct BG_JOB_REPLY_PROGRESS {
+ BytesTotal: UINT64,
+ BytesTransferred: UINT64,
+}}
+ENUM!{enum BG_AUTH_TARGET {
+ BG_AUTH_TARGET_SERVER = 1,
+ BG_AUTH_TARGET_PROXY = BG_AUTH_TARGET_SERVER + 1,
+}}
+ENUM!{enum BG_AUTH_SCHEME {
+ BG_AUTH_SCHEME_BASIC = 1,
+ BG_AUTH_SCHEME_DIGEST = BG_AUTH_SCHEME_BASIC + 1,
+ BG_AUTH_SCHEME_NTLM = BG_AUTH_SCHEME_DIGEST + 1,
+ BG_AUTH_SCHEME_NEGOTIATE = BG_AUTH_SCHEME_NTLM + 1,
+ BG_AUTH_SCHEME_PASSPORT = BG_AUTH_SCHEME_NEGOTIATE + 1,
+}}
+STRUCT!{struct BG_BASIC_CREDENTIALS {
+ UserName: LPWSTR,
+ Password: LPWSTR,
+}}
+UNION!{union BG_AUTH_CREDENTIALS_UNION {
+ [usize; 2],
+ Basic Basic_mut: BG_BASIC_CREDENTIALS,
+}}
+STRUCT!{struct BG_AUTH_CREDENTIALS {
+ Target: BG_AUTH_TARGET,
+ Scheme: BG_AUTH_SCHEME,
+ Credentials: BG_AUTH_CREDENTIALS_UNION,
+}}
+pub type PBG_AUTH_CREDENTIALS = *mut BG_AUTH_CREDENTIALS;
+RIDL!{#[uuid(0x54b50739, 0x686f, 0x45eb, 0x9d, 0xff, 0xd6, 0xa9, 0xa0, 0xfa, 0xa9, 0xaf)]
+interface IBackgroundCopyJob2(IBackgroundCopyJob2Vtbl):
+ IBackgroundCopyJob(IBackgroundCopyJobVtbl) {
+ fn SetNotifyCmdLine(
+ Program: LPCWSTR,
+ Parameters: LPCWSTR,
+ ) -> HRESULT,
+ fn GetNotifyCmdLine(
+ pProgram: *mut LPWSTR,
+ pParameters: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetReplyProgress(
+ pProgress: *mut BG_JOB_REPLY_PROGRESS,
+ ) -> HRESULT,
+ fn GetReplyData(
+ ppBuffer: *mut *mut byte,
+ pLength: *mut UINT64,
+ ) -> HRESULT,
+ fn SetReplyFileName(
+ ReplyFileName: LPCWSTR,
+ ) -> HRESULT,
+ fn GetReplyFileName(
+ pReplyFileName: *mut LPWSTR,
+ ) -> HRESULT,
+ fn SetCredentials(
+ credentials: *mut BG_AUTH_CREDENTIALS,
+ ) -> HRESULT,
+ fn RemoveCredentials(
+ Target: BG_AUTH_TARGET,
+ Scheme: BG_AUTH_SCHEME,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/bits2_0.rs b/vendor/winapi/src/um/bits2_0.rs
new file mode 100644
index 000000000..15e582708
--- /dev/null
+++ b/vendor/winapi/src/um/bits2_0.rs
@@ -0,0 +1,51 @@
+// 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::UINT64;
+use shared::minwindef::DWORD;
+use um::bits::{IBackgroundCopyFile, IBackgroundCopyFileVtbl};
+use um::bits1_5::{IBackgroundCopyJob2, IBackgroundCopyJob2Vtbl};
+use um::winnt::{HRESULT, LPCWSTR};
+pub const BG_LENGTH_TO_EOF: UINT64 = -1i64 as u64;
+STRUCT!{struct BG_FILE_RANGE {
+ InitialOffset: UINT64,
+ Length: UINT64,
+}}
+pub const BG_COPY_FILE_OWNER: DWORD = 1;
+pub const BG_COPY_FILE_GROUP: DWORD = 2;
+pub const BG_COPY_FILE_DACL: DWORD = 4;
+pub const BG_COPY_FILE_SACL: DWORD = 8;
+pub const BG_COPY_FILE_ALL: DWORD = 15;
+RIDL!{#[uuid(0x443c8934, 0x90ff, 0x48ed, 0xbc, 0xde, 0x26, 0xf5, 0xc7, 0x45, 0x00, 0x42)]
+interface IBackgroundCopyJob3(IBackgroundCopyJob3Vtbl):
+ IBackgroundCopyJob2(IBackgroundCopyJob2Vtbl) {
+ fn ReplaceRemotePrefix(
+ OldPrefix: LPCWSTR,
+ NewPrefix: LPCWSTR,
+ ) -> HRESULT,
+ fn AddFileWithRanges(
+ RemoteUrl: LPCWSTR,
+ LocalName: LPCWSTR,
+ RangeCount: DWORD,
+ Ranges: *mut BG_FILE_RANGE,
+ ) -> HRESULT,
+ fn SetFileACLFlags(
+ Flags: DWORD,
+ ) -> HRESULT,
+ fn GetFileACLFlags(
+ Flags: *mut DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x83e81b93, 0x0873, 0x474d, 0x8a, 0x8c, 0xf2, 0x01, 0x8b, 0x1a, 0x93, 0x9c)]
+interface IBackgroundCopyFile2(IBackgroundCopyFile2Vtbl):
+ IBackgroundCopyFile(IBackgroundCopyFileVtbl) {
+ fn GetFileRanges(
+ RangeCount: *mut DWORD,
+ Ranges: *mut *mut BG_FILE_RANGE,
+ ) -> HRESULT,
+ fn SetRemoteName(
+ Val: LPCWSTR,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/bits2_5.rs b/vendor/winapi/src/um/bits2_5.rs
new file mode 100644
index 000000000..50a5b4d17
--- /dev/null
+++ b/vendor/winapi/src/um/bits2_5.rs
@@ -0,0 +1,64 @@
+// 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::minwindef::ULONG;
+use shared::rpcndr::byte;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPCWSTR, LPWSTR};
+ENUM!{enum BG_CERT_STORE_LOCATION {
+ BG_CERT_STORE_LOCATION_CURRENT_USER = 0,
+ BG_CERT_STORE_LOCATION_LOCAL_MACHINE = BG_CERT_STORE_LOCATION_CURRENT_USER + 1,
+ BG_CERT_STORE_LOCATION_CURRENT_SERVICE = BG_CERT_STORE_LOCATION_LOCAL_MACHINE + 1,
+ BG_CERT_STORE_LOCATION_SERVICES = BG_CERT_STORE_LOCATION_CURRENT_SERVICE + 1,
+ BG_CERT_STORE_LOCATION_USERS = BG_CERT_STORE_LOCATION_SERVICES + 1,
+ BG_CERT_STORE_LOCATION_CURRENT_USER_GROUP_POLICY = BG_CERT_STORE_LOCATION_USERS + 1,
+ BG_CERT_STORE_LOCATION_LOCAL_MACHINE_GROUP_POLICY
+ = BG_CERT_STORE_LOCATION_CURRENT_USER_GROUP_POLICY + 1,
+ BG_CERT_STORE_LOCATION_LOCAL_MACHINE_ENTERPRISE
+ = BG_CERT_STORE_LOCATION_LOCAL_MACHINE_GROUP_POLICY + 1,
+}}
+RIDL!{#[uuid(0xf1bd1079, 0x9f01, 0x4bdc, 0x80, 0x36, 0xf0, 0x9b, 0x70, 0x09, 0x50, 0x66)]
+interface IBackgroundCopyJobHttpOptions(IBackgroundCopyJobHttpOptionsVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn SetClientCertificateByID(
+ StoreLocation: BG_CERT_STORE_LOCATION,
+ StoreName: LPCWSTR,
+ pCertHashBlob: *mut byte,
+ ) -> HRESULT,
+ fn SetClientCertificateByName(
+ StoreLocation: BG_CERT_STORE_LOCATION,
+ StoreName: LPCWSTR,
+ SubjectName: LPCWSTR,
+ ) -> HRESULT,
+ fn RemoveClientCertificate() -> HRESULT,
+ fn GetClientCertificate(
+ pStoreLocation: *mut BG_CERT_STORE_LOCATION,
+ pStoreName: *mut LPWSTR,
+ ppCertHashBlob: *mut *mut byte,
+ pSubjectName: *mut LPWSTR,
+ ) -> HRESULT,
+ fn SetCustomHeaders(
+ RequestHeaders: LPCWSTR,
+ ) -> HRESULT,
+ fn GetCustomHeaders(
+ pRequestHeaders: *mut LPWSTR,
+ ) -> HRESULT,
+ fn SetSecurityFlags(
+ Flags: ULONG,
+ ) -> HRESULT,
+ fn GetSecurityFlags(
+ pFlags: *mut ULONG,
+ ) -> HRESULT,
+}}
+pub const BG_SSL_ENABLE_CRL_CHECK: ULONG = 0x0001;
+pub const BG_SSL_IGNORE_CERT_CN_INVALID: ULONG = 0x0002;
+pub const BG_SSL_IGNORE_CERT_DATE_INVALID: ULONG = 0x0004;
+pub const BG_SSL_IGNORE_UNKNOWN_CA: ULONG = 0x0008;
+pub const BG_SSL_IGNORE_CERT_WRONG_USAGE: ULONG = 0x0010;
+pub const BG_HTTP_REDIRECT_POLICY_MASK: ULONG = 0x0700;
+pub const BG_HTTP_REDIRECT_POLICY_ALLOW_SILENT: ULONG = 0x0000;
+pub const BG_HTTP_REDIRECT_POLICY_ALLOW_REPORT: ULONG = 0x0100;
+pub const BG_HTTP_REDIRECT_POLICY_DISALLOW: ULONG = 0x0200;
+pub const BG_HTTP_REDIRECT_POLICY_ALLOW_HTTPS_TO_HTTP: ULONG = 0x0800;
diff --git a/vendor/winapi/src/um/bits3_0.rs b/vendor/winapi/src/um/bits3_0.rs
new file mode 100644
index 000000000..478dce642
--- /dev/null
+++ b/vendor/winapi/src/um/bits3_0.rs
@@ -0,0 +1,179 @@
+// 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::UINT64;
+use shared::guiddef::{GUID, REFGUID};
+use shared::minwindef::{BOOL, DWORD, FILETIME, ULONG};
+use um::bits::{
+ IBackgroundCopyCallback, IBackgroundCopyCallbackVtbl, IBackgroundCopyFile, IBackgroundCopyJob,
+};
+use um::bits2_0::{
+ BG_FILE_RANGE, IBackgroundCopyFile2, IBackgroundCopyFile2Vtbl, IBackgroundCopyJob3,
+ IBackgroundCopyJob3Vtbl,
+};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPCWSTR, LPWSTR};
+RIDL!{#[uuid(0x659cdeaf, 0x489e, 0x11d9, 0xa9, 0xcd, 0x00, 0x0d, 0x56, 0x96, 0x52, 0x51)]
+interface IBitsPeerCacheRecord(IBitsPeerCacheRecordVtbl): IUnknown(IUnknownVtbl) {
+ fn GetId(
+ pVal: *mut GUID,
+ ) -> HRESULT,
+ fn GetOriginUrl(
+ pVal: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetFileSize(
+ pVal: *mut UINT64,
+ ) -> HRESULT,
+ fn GetFileModificationTime(
+ pVal: *mut FILETIME,
+ ) -> HRESULT,
+ fn GetLastAccessTime(
+ pVal: *mut FILETIME,
+ ) -> HRESULT,
+ fn IsFileValidated() -> HRESULT,
+ fn GetFileRanges(
+ pRangeCount: *mut DWORD,
+ ppRanges: *mut *mut BG_FILE_RANGE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x659cdea4, 0x489e, 0x11d9, 0xa9, 0xcd, 0x00, 0x0d, 0x56, 0x96, 0x52, 0x51)]
+interface IEnumBitsPeerCacheRecords(IEnumBitsPeerCacheRecordsVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ celt: ULONG,
+ rgelt: *mut *mut IBitsPeerCacheRecord,
+ pceltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ celt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppenum: *mut *mut IEnumBitsPeerCacheRecords,
+ ) -> HRESULT,
+ fn GetCount(
+ puCount: *mut ULONG,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x659cdea2, 0x489e, 0x11d9, 0xa9, 0xcd, 0x00, 0x0d, 0x56, 0x96, 0x52, 0x51)]
+interface IBitsPeer(IBitsPeerVtbl): IUnknown(IUnknownVtbl) {
+ fn GetPeerName(
+ pName: *mut LPWSTR,
+ ) -> HRESULT,
+ fn IsAuthenticated(
+ pAuth: *mut BOOL,
+ ) -> HRESULT,
+ fn IsAvailable(
+ pOnline: *mut BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x659cdea5, 0x489e, 0x11d9, 0xa9, 0xcd, 0x00, 0x0d, 0x56, 0x96, 0x52, 0x51)]
+interface IEnumBitsPeers(IEnumBitsPeersVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ celt: ULONG,
+ rgelt: *mut *mut IBitsPeer,
+ pceltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ celt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppenum: *mut *mut IEnumBitsPeers,
+ ) -> HRESULT,
+ fn GetCount(
+ puCount: *mut ULONG,
+ ) -> HRESULT,
+}}
+pub const BG_ENABLE_PEERCACHING_CLIENT: DWORD = 0x0001;
+pub const BG_ENABLE_PEERCACHING_SERVER: DWORD = 0x0002;
+pub const BG_DISABLE_BRANCH_CACHE: DWORD = 0x0004;
+RIDL!{#[uuid(0x659cdead, 0x489e, 0x11d9, 0xa9, 0xcd, 0x00, 0x0d, 0x56, 0x96, 0x52, 0x51)]
+interface IBitsPeerCacheAdministration(IBitsPeerCacheAdministrationVtbl): IUnknown(IUnknownVtbl) {
+ fn GetMaximumCacheSize(
+ pBytes: *mut DWORD,
+ ) -> HRESULT,
+ fn SetMaximumCacheSize(
+ Bytes: DWORD,
+ ) -> HRESULT,
+ fn GetMaximumContentAge(
+ pSeconds: *mut ULONG,
+ ) -> HRESULT,
+ fn SetMaximumContentAge(
+ Seconds: ULONG,
+ ) -> HRESULT,
+ fn GetConfigurationFlags(
+ pFlags: *mut DWORD,
+ ) -> HRESULT,
+ fn SetConfigurationFlags(
+ Flags: DWORD,
+ ) -> HRESULT,
+ fn EnumRecords(
+ ppEnum: *mut *mut IEnumBitsPeerCacheRecords,
+ ) -> HRESULT,
+ fn GetRecord(
+ ppRecord: *mut *mut IBitsPeerCacheRecord,
+ ) -> HRESULT,
+ fn ClearRecords() -> HRESULT,
+ fn DeleteRecord(
+ id: REFGUID,
+ ) -> HRESULT,
+ fn DeleteUrl(
+ url: LPCWSTR,
+ ) -> HRESULT,
+ fn EnumPeers(
+ ppEnum: *mut *mut IEnumBitsPeers,
+ ) -> HRESULT,
+ fn ClearPeers() -> HRESULT,
+ fn DiscoverPeers() -> HRESULT,
+}}
+pub const BG_JOB_ENABLE_PEERCACHING_CLIENT: DWORD = 0x0001;
+pub const BG_JOB_ENABLE_PEERCACHING_SERVER: DWORD = 0x0002;
+pub const BG_JOB_DISABLE_BRANCH_CACHE: DWORD = 0x0004;
+RIDL!{#[uuid(0x659cdeae, 0x489e, 0x11d9, 0xa9, 0xcd, 0x00, 0x0d, 0x56, 0x96, 0x52, 0x51)]
+interface IBackgroundCopyJob4(IBackgroundCopyJob4Vtbl):
+ IBackgroundCopyJob3(IBackgroundCopyJob3Vtbl) {
+ fn SetPeerCachingFlags(
+ Flags: DWORD,
+ ) -> HRESULT,
+ fn GetPeerCachingFlags(
+ pFlags: *mut DWORD,
+ ) -> HRESULT,
+ fn GetOwnerIntegrityLevel(
+ pLevel: *mut ULONG,
+ ) -> HRESULT,
+ fn GetOwnerElevationState(
+ pElevated: *mut BOOL,
+ ) -> HRESULT,
+ fn SetMaximumDownloadTime(
+ Timeout: ULONG,
+ ) -> HRESULT,
+ fn GetMaximumDownloadTime(
+ pTimeout: *mut ULONG,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x659cdeaa, 0x489e, 0x11d9, 0xa9, 0xcd, 0x00, 0x0d, 0x56, 0x96, 0x52, 0x51)]
+interface IBackgroundCopyFile3(IBackgroundCopyFile3Vtbl):
+ IBackgroundCopyFile2(IBackgroundCopyFile2Vtbl) {
+ fn GetTemporaryName(
+ pFilename: *mut LPWSTR,
+ ) -> HRESULT,
+ fn SetValidationState(
+ state: BOOL,
+ ) -> HRESULT,
+ fn GetValidationState(
+ pState: *mut BOOL,
+ ) -> HRESULT,
+ fn IsDownloadedFromPeer(
+ pVal: *mut BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x659cdeac, 0x489e, 0x11d9, 0xa9, 0xcd, 0x00, 0x0d, 0x56, 0x96, 0x52, 0x51)]
+interface IBackgroundCopyCallback2(IBackgroundCopyCallback2Vtbl):
+ IBackgroundCopyCallback(IBackgroundCopyCallbackVtbl) {
+ fn FileTransferred(
+ pJob: *mut IBackgroundCopyJob,
+ pFile: *mut IBackgroundCopyFile,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/bits4_0.rs b/vendor/winapi/src/um/bits4_0.rs
new file mode 100644
index 000000000..2cd763a68
--- /dev/null
+++ b/vendor/winapi/src/um/bits4_0.rs
@@ -0,0 +1,32 @@
+// 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::PUINT64;
+use shared::minwindef::DWORD;
+use um::bits3_0::{IBackgroundCopyFile3, IBackgroundCopyFile3Vtbl};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPWSTR};
+RIDL!{#[uuid(0x9a2584c3, 0xf7d2, 0x457a, 0x9a, 0x5e, 0x22, 0xb6, 0x7b, 0xff, 0xc7, 0xd2)]
+interface IBitsTokenOptions(IBitsTokenOptionsVtbl): IUnknown(IUnknownVtbl) {
+ fn SetHelperTokenFlags(
+ UsageFlags: DWORD,
+ ) -> HRESULT,
+ fn GetHelperTokenFlags(
+ pFlags: *mut DWORD,
+ ) -> HRESULT,
+ fn SetHelperToken() -> HRESULT,
+ fn ClearHelperToken() -> HRESULT,
+ fn GetHelperTokenSid(
+ pSid: *mut LPWSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xef7e0655, 0x7888, 0x4960, 0xb0, 0xe5, 0x73, 0x08, 0x46, 0xe0, 0x34, 0x92)]
+interface IBackgroundCopyFile4(IBackgroundCopyFile4Vtbl):
+ IBackgroundCopyFile3(IBackgroundCopyFile3Vtbl) {
+ fn GetPeerDownloadStats(
+ pFromOrigin: PUINT64,
+ pFromPeers: PUINT64,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/bits5_0.rs b/vendor/winapi/src/um/bits5_0.rs
new file mode 100644
index 000000000..97166eb83
--- /dev/null
+++ b/vendor/winapi/src/um/bits5_0.rs
@@ -0,0 +1,95 @@
+// 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::UINT64;
+use shared::guiddef::GUID;
+use shared::minwindef::{BOOL, DWORD};
+use um::bits1_5::BG_AUTH_TARGET;
+use um::bits3_0::{IBackgroundCopyJob4, IBackgroundCopyJob4Vtbl};
+use um::bits4_0::{IBackgroundCopyFile4, IBackgroundCopyFile4Vtbl};
+use um::winnt::{HRESULT, LPWSTR};
+pub const BITS_COST_STATE_UNRESTRICTED: DWORD = 0x1;
+pub const BITS_COST_STATE_CAPPED_USAGE_UNKNOWN: DWORD = 0x2;
+pub const BITS_COST_STATE_BELOW_CAP: DWORD = 0x4;
+pub const BITS_COST_STATE_NEAR_CAP: DWORD = 0x8;
+pub const BITS_COST_STATE_OVERCAP_CHARGED: DWORD = 0x10;
+pub const BITS_COST_STATE_OVERCAP_THROTTLED: DWORD = 0x20;
+pub const BITS_COST_STATE_USAGE_BASED: DWORD = 0x40;
+pub const BITS_COST_STATE_ROAMING: DWORD = 0x80;
+pub const BITS_COST_OPTION_IGNORE_CONGESTION: DWORD = 0x80000000;
+pub const BITS_COST_STATE_RESERVED: DWORD = 0x40000000;
+pub const BITS_COST_STATE_TRANSFER_NOT_ROAMING: DWORD = BITS_COST_OPTION_IGNORE_CONGESTION
+ | BITS_COST_STATE_USAGE_BASED | BITS_COST_STATE_OVERCAP_THROTTLED
+ | BITS_COST_STATE_OVERCAP_CHARGED | BITS_COST_STATE_NEAR_CAP | BITS_COST_STATE_BELOW_CAP
+ | BITS_COST_STATE_CAPPED_USAGE_UNKNOWN | BITS_COST_STATE_UNRESTRICTED;
+pub const BITS_COST_STATE_TRANSFER_NO_SURCHARGE: DWORD = BITS_COST_OPTION_IGNORE_CONGESTION
+ | BITS_COST_STATE_USAGE_BASED | BITS_COST_STATE_OVERCAP_THROTTLED | BITS_COST_STATE_NEAR_CAP
+ | BITS_COST_STATE_BELOW_CAP | BITS_COST_STATE_CAPPED_USAGE_UNKNOWN
+ | BITS_COST_STATE_UNRESTRICTED;
+pub const BITS_COST_STATE_TRANSFER_STANDARD: DWORD = BITS_COST_OPTION_IGNORE_CONGESTION
+ | BITS_COST_STATE_USAGE_BASED | BITS_COST_STATE_OVERCAP_THROTTLED | BITS_COST_STATE_BELOW_CAP
+ | BITS_COST_STATE_CAPPED_USAGE_UNKNOWN | BITS_COST_STATE_UNRESTRICTED;
+pub const BITS_COST_STATE_TRANSFER_UNRESTRICTED: DWORD = BITS_COST_OPTION_IGNORE_CONGESTION
+ | BITS_COST_STATE_OVERCAP_THROTTLED | BITS_COST_STATE_UNRESTRICTED;
+pub const BITS_COST_STATE_TRANSFER_ALWAYS: DWORD = BITS_COST_OPTION_IGNORE_CONGESTION
+ | BITS_COST_STATE_ROAMING | BITS_COST_STATE_USAGE_BASED | BITS_COST_STATE_OVERCAP_THROTTLED
+ | BITS_COST_STATE_OVERCAP_CHARGED | BITS_COST_STATE_NEAR_CAP | BITS_COST_STATE_BELOW_CAP
+ | BITS_COST_STATE_CAPPED_USAGE_UNKNOWN | BITS_COST_STATE_UNRESTRICTED;
+ENUM!{enum BITS_JOB_TRANSFER_POLICY {
+ BITS_JOB_TRANSFER_POLICY_ALWAYS = 0x800000ff,
+ BITS_JOB_TRANSFER_POLICY_NOT_ROAMING = 0x8000007f,
+ BITS_JOB_TRANSFER_POLICY_NO_SURCHARGE = 0x8000006f,
+ BITS_JOB_TRANSFER_POLICY_STANDARD = 0x80000067,
+ BITS_JOB_TRANSFER_POLICY_UNRESTRICTED = 0x80000021,
+}}
+ENUM!{enum BITS_JOB_PROPERTY_ID {
+ BITS_JOB_PROPERTY_ID_COST_FLAGS = 1,
+ BITS_JOB_PROPERTY_NOTIFICATION_CLSID = 2,
+ BITS_JOB_PROPERTY_DYNAMIC_CONTENT = 3,
+ BITS_JOB_PROPERTY_HIGH_PERFORMANCE = 4,
+ BITS_JOB_PROPERTY_MAX_DOWNLOAD_SIZE = 5,
+ BITS_JOB_PROPERTY_USE_STORED_CREDENTIALS = 7,
+ BITS_JOB_PROPERTY_MINIMUM_NOTIFICATION_INTERVAL_MS = 9,
+ BITS_JOB_PROPERTY_ON_DEMAND_MODE = 10,
+}}
+UNION!{union BITS_JOB_PROPERTY_VALUE {
+ [u64; 2],
+ Dword Dword_mut: DWORD,
+ ClsID ClsID_mut: GUID,
+ Enable Enable_mut: BOOL,
+ Uint64 Uint64_mut: UINT64,
+ Target Target_mut: BG_AUTH_TARGET,
+}}
+ENUM!{enum BITS_FILE_PROPERTY_ID {
+ BITS_FILE_PROPERTY_ID_HTTP_RESPONSE_HEADERS = 1,
+}}
+UNION!{union BITS_FILE_PROPERTY_VALUE {
+ [usize; 1],
+ String String_mut: LPWSTR,
+}}
+RIDL!{#[uuid(0xe847030c, 0xbbba, 0x4657, 0xaf, 0x6d, 0x48, 0x4a, 0xa4, 0x2b, 0xf1, 0xfe)]
+interface IBackgroundCopyJob5(IBackgroundCopyJob5Vtbl):
+ IBackgroundCopyJob4(IBackgroundCopyJob4Vtbl) {
+ fn SetProperty(
+ PropertyId: BITS_JOB_PROPERTY_ID,
+ PropertyValue: BITS_JOB_PROPERTY_VALUE,
+ ) -> HRESULT,
+ fn GetProperty(
+ PropertyId: BITS_JOB_PROPERTY_ID,
+ PropertyValue: *mut BITS_JOB_PROPERTY_VALUE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x85c1657f, 0xdafc, 0x40e8, 0x88, 0x34, 0xdf, 0x18, 0xea, 0x25, 0x71, 0x7e)]
+interface IBackgroundCopyFile5(IBackgroundCopyFile5Vtbl):
+ IBackgroundCopyFile4(IBackgroundCopyFile4Vtbl) {
+ fn SetProperty(
+ PropertyId: BITS_JOB_PROPERTY_ID,
+ PropertyValue: BITS_JOB_PROPERTY_VALUE,
+ ) -> HRESULT,
+ fn GetProperty(
+ PropertyId: BITS_JOB_PROPERTY_ID,
+ PropertyValue: *mut BITS_JOB_PROPERTY_VALUE,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/bitscfg.rs b/vendor/winapi/src/um/bitscfg.rs
new file mode 100644
index 000000000..3d9f46a2d
--- /dev/null
+++ b/vendor/winapi/src/um/bitscfg.rs
@@ -0,0 +1,70 @@
+// 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 ctypes::{c_uchar, c_ulong};
+use shared::guiddef::REFIID;
+use shared::wtypes::BSTR;
+use um::oaidl::{IDispatch, IDispatchVtbl};
+use um::unknwnbase::IUnknown;
+use um::winnt::HRESULT;
+RIDL!{#[uuid(0x29cfbbf7, 0x09e4, 0x4b97, 0xb0, 0xbc, 0xf2, 0x28, 0x7e, 0x3d, 0x8e, 0xb3)]
+interface IBITSExtensionSetup(IBITSExtensionSetupVtbl): IDispatch(IDispatchVtbl) {
+ fn EnableBITSUploads() -> HRESULT,
+ fn DisableBITSUploads() -> HRESULT,
+ fn GetCleanupTaskName(
+ pTaskName: *mut BSTR,
+ ) -> HRESULT,
+ fn GetCleanupTask(
+ riid: REFIID,
+ ppUnk: *mut *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xd5d2d542, 0x5503, 0x4e64, 0x8b, 0x48, 0x72, 0xef, 0x91, 0xa3, 0x2e, 0xe1)]
+interface IBITSExtensionSetupFactory(IBITSExtensionSetupFactoryVtbl): IDispatch(IDispatchVtbl) {
+ fn GetObject(
+ Path: BSTR,
+ ppExtensionSetup: *mut *mut IBITSExtensionSetup,
+ ) -> HRESULT,
+}}
+extern "system" {
+ pub fn BSTR_UserSize(
+ pFlags: *mut c_ulong,
+ Offset: c_ulong,
+ pBstr: *mut BSTR,
+ ) -> c_ulong;
+ pub fn BSTR_UserMarshal(
+ pFlags: *mut c_ulong,
+ pBuffer: *mut c_uchar,
+ pBstr: *mut BSTR,
+ ) -> *mut c_uchar;
+ pub fn BSTR_UserUnmarshal(
+ pFlags: *mut c_ulong,
+ pBuffer: *mut c_uchar,
+ pBstr: *mut BSTR,
+ ) -> *mut c_uchar;
+ pub fn BSTR_UserFree(
+ pFlags: *mut c_ulong,
+ pBstr: *mut BSTR,
+ );
+ pub fn BSTR_UserSize64(
+ pFlags: *mut c_ulong,
+ Offset: c_ulong,
+ pBstr: *mut BSTR,
+ ) -> c_ulong;
+ pub fn BSTR_UserMarshal64(
+ pFlags: *mut c_ulong,
+ pBuffer: *mut c_uchar,
+ pBstr: *mut BSTR,
+ ) -> *mut c_uchar;
+ pub fn BSTR_UserUnmarshal64(
+ pFlags: *mut c_ulong,
+ pBuffer: *mut c_uchar,
+ pBstr: *mut BSTR,
+ ) -> *mut c_uchar;
+ pub fn BSTR_UserFree64(
+ pFlags: *mut c_ulong,
+ pBstr: *mut BSTR,
+ );
+}
diff --git a/vendor/winapi/src/um/bitsmsg.rs b/vendor/winapi/src/um/bitsmsg.rs
new file mode 100644
index 000000000..b7029f730
--- /dev/null
+++ b/vendor/winapi/src/um/bitsmsg.rs
@@ -0,0 +1,142 @@
+// 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.
+//! error code definitions for the background file copier
+use shared::minwindef::DWORD;
+pub const BG_E_NOT_FOUND: DWORD = 0x80200001;
+pub const BG_E_INVALID_STATE: DWORD = 0x80200002;
+pub const BG_E_EMPTY: DWORD = 0x80200003;
+pub const BG_E_FILE_NOT_AVAILABLE: DWORD = 0x80200004;
+pub const BG_E_PROTOCOL_NOT_AVAILABLE: DWORD = 0x80200005;
+pub const BG_S_ERROR_CONTEXT_NONE: DWORD = 0x00200006;
+pub const BG_E_ERROR_CONTEXT_UNKNOWN: DWORD = 0x80200007;
+pub const BG_E_ERROR_CONTEXT_GENERAL_QUEUE_MANAGER: DWORD = 0x80200008;
+pub const BG_E_ERROR_CONTEXT_LOCAL_FILE: DWORD = 0x80200009;
+pub const BG_E_ERROR_CONTEXT_REMOTE_FILE: DWORD = 0x8020000A;
+pub const BG_E_ERROR_CONTEXT_GENERAL_TRANSPORT: DWORD = 0x8020000B;
+pub const BG_E_ERROR_CONTEXT_QUEUE_MANAGER_NOTIFICATION: DWORD = 0x8020000C;
+pub const BG_E_DESTINATION_LOCKED: DWORD = 0x8020000D;
+pub const BG_E_VOLUME_CHANGED: DWORD = 0x8020000E;
+pub const BG_E_ERROR_INFORMATION_UNAVAILABLE: DWORD = 0x8020000F;
+pub const BG_E_NETWORK_DISCONNECTED: DWORD = 0x80200010;
+pub const BG_E_MISSING_FILE_SIZE: DWORD = 0x80200011;
+pub const BG_E_INSUFFICIENT_HTTP_SUPPORT: DWORD = 0x80200012;
+pub const BG_E_INSUFFICIENT_RANGE_SUPPORT: DWORD = 0x80200013;
+pub const BG_E_REMOTE_NOT_SUPPORTED: DWORD = 0x80200014;
+pub const BG_E_NEW_OWNER_DIFF_MAPPING: DWORD = 0x80200015;
+pub const BG_E_NEW_OWNER_NO_FILE_ACCESS: DWORD = 0x80200016;
+pub const BG_S_PARTIAL_COMPLETE: DWORD = 0x00200017;
+pub const BG_E_PROXY_LIST_TOO_LARGE: DWORD = 0x80200018;
+pub const BG_E_PROXY_BYPASS_LIST_TOO_LARGE: DWORD = 0x80200019;
+pub const BG_S_UNABLE_TO_DELETE_FILES: DWORD = 0x0020001A;
+pub const BG_E_INVALID_SERVER_RESPONSE: DWORD = 0x8020001B;
+pub const BG_E_TOO_MANY_FILES: DWORD = 0x8020001C;
+pub const BG_E_LOCAL_FILE_CHANGED: DWORD = 0x8020001D;
+pub const BG_E_ERROR_CONTEXT_REMOTE_APPLICATION: DWORD = 0x8020001E;
+pub const BG_E_SESSION_NOT_FOUND: DWORD = 0x8020001F;
+pub const BG_E_TOO_LARGE: DWORD = 0x80200020;
+pub const BG_E_STRING_TOO_LONG: DWORD = 0x80200021;
+pub const BG_E_CLIENT_SERVER_PROTOCOL_MISMATCH: DWORD = 0x80200022;
+pub const BG_E_SERVER_EXECUTE_ENABLE: DWORD = 0x80200023;
+pub const BG_E_NO_PROGRESS: DWORD = 0x80200024;
+pub const BG_E_USERNAME_TOO_LARGE: DWORD = 0x80200025;
+pub const BG_E_PASSWORD_TOO_LARGE: DWORD = 0x80200026;
+pub const BG_E_INVALID_AUTH_TARGET: DWORD = 0x80200027;
+pub const BG_E_INVALID_AUTH_SCHEME: DWORD = 0x80200028;
+pub const BG_E_FILE_NOT_FOUND: DWORD = 0x80200029;
+pub const BG_S_PROXY_CHANGED: DWORD = 0x0020002A;
+pub const BG_E_INVALID_RANGE: DWORD = 0x8020002B;
+pub const BG_E_OVERLAPPING_RANGES: DWORD = 0x8020002C;
+pub const BG_E_CONNECT_FAILURE: DWORD = 0x8020002D;
+pub const BG_E_CONNECTION_CLOSED: DWORD = 0x8020002E;
+pub const BG_E_BLOCKED_BY_POLICY: DWORD = 0x8020003E;
+pub const BG_E_INVALID_PROXY_INFO: DWORD = 0x8020003F;
+pub const BG_E_INVALID_CREDENTIALS: DWORD = 0x80200040;
+pub const BG_E_INVALID_HASH_ALGORITHM: DWORD = 0x80200041;
+pub const BG_E_RECORD_DELETED: DWORD = 0x80200042;
+pub const BG_E_COMMIT_IN_PROGRESS: DWORD = 0x80200043;
+pub const BG_E_DISCOVERY_IN_PROGRESS: DWORD = 0x80200044;
+pub const BG_E_UPNP_ERROR: DWORD = 0x80200045;
+pub const BG_E_TEST_OPTION_BLOCKED_DOWNLOAD: DWORD = 0x80200046;
+pub const BG_E_PEERCACHING_DISABLED: DWORD = 0x80200047;
+pub const BG_E_BUSYCACHERECORD: DWORD = 0x80200048;
+pub const BG_E_TOO_MANY_JOBS_PER_USER: DWORD = 0x80200049;
+pub const BG_E_TOO_MANY_JOBS_PER_MACHINE: DWORD = 0x80200050;
+pub const BG_E_TOO_MANY_FILES_IN_JOB: DWORD = 0x80200051;
+pub const BG_E_TOO_MANY_RANGES_IN_FILE: DWORD = 0x80200052;
+pub const BG_E_VALIDATION_FAILED: DWORD = 0x80200053;
+pub const BG_E_MAXDOWNLOAD_TIMEOUT: DWORD = 0x80200054;
+pub const BG_S_OVERRIDDEN_BY_POLICY: DWORD = 0x00200055;
+pub const BG_E_TOKEN_REQUIRED: DWORD = 0x80200056;
+pub const BG_E_UNKNOWN_PROPERTY_ID: DWORD = 0x80200057;
+pub const BG_E_READ_ONLY_PROPERTY: DWORD = 0x80200058;
+pub const BG_E_BLOCKED_BY_COST_TRANSFER_POLICY: DWORD = 0x80200059;
+pub const BG_E_PROPERTY_SUPPORTED_FOR_DOWNLOAD_JOBS_ONLY: DWORD = 0x80200060;
+pub const BG_E_READ_ONLY_PROPERTY_AFTER_ADDFILE: DWORD = 0x80200061;
+pub const BG_E_READ_ONLY_PROPERTY_AFTER_RESUME: DWORD = 0x80200062;
+pub const BG_E_MAX_DOWNLOAD_SIZE_INVALID_VALUE: DWORD = 0x80200063;
+pub const BG_E_MAX_DOWNLOAD_SIZE_LIMIT_REACHED: DWORD = 0x80200064;
+pub const BG_E_STANDBY_MODE: DWORD = 0x80200065;
+pub const BG_E_USE_STORED_CREDENTIALS_NOT_SUPPORTED: DWORD = 0x80200066;
+pub const BG_E_BLOCKED_BY_BATTERY_POLICY: DWORD = 0x80200067;
+pub const BG_E_BLOCKED_BY_BATTERY_SAVER: DWORD = 0x80200068;
+pub const BG_E_WATCHDOG_TIMEOUT: DWORD = 0x80200069;
+pub const BG_E_APP_PACKAGE_NOT_FOUND: DWORD = 0x8020006A;
+pub const BG_E_APP_PACKAGE_SCENARIO_NOT_SUPPORTED: DWORD = 0x8020006B;
+pub const BG_E_DATABASE_CORRUPT: DWORD = 0x8020006C;
+pub const BG_E_RANDOM_ACCESS_NOT_SUPPORTED: DWORD = 0x8020006D;
+pub const BG_E_HTTP_ERROR_100: DWORD = 0x80190064;
+pub const BG_E_HTTP_ERROR_101: DWORD = 0x80190065;
+pub const BG_E_HTTP_ERROR_200: DWORD = 0x801900C8;
+pub const BG_E_HTTP_ERROR_201: DWORD = 0x801900C9;
+pub const BG_E_HTTP_ERROR_202: DWORD = 0x801900CA;
+pub const BG_E_HTTP_ERROR_203: DWORD = 0x801900CB;
+pub const BG_E_HTTP_ERROR_204: DWORD = 0x801900CC;
+pub const BG_E_HTTP_ERROR_205: DWORD = 0x801900CD;
+pub const BG_E_HTTP_ERROR_206: DWORD = 0x801900CE;
+pub const BG_E_HTTP_ERROR_300: DWORD = 0x8019012C;
+pub const BG_E_HTTP_ERROR_301: DWORD = 0x8019012D;
+pub const BG_E_HTTP_ERROR_302: DWORD = 0x8019012E;
+pub const BG_E_HTTP_ERROR_303: DWORD = 0x8019012F;
+pub const BG_E_HTTP_ERROR_304: DWORD = 0x80190130;
+pub const BG_E_HTTP_ERROR_305: DWORD = 0x80190131;
+pub const BG_E_HTTP_ERROR_307: DWORD = 0x80190133;
+pub const BG_E_HTTP_ERROR_400: DWORD = 0x80190190;
+pub const BG_E_HTTP_ERROR_401: DWORD = 0x80190191;
+pub const BG_E_HTTP_ERROR_402: DWORD = 0x80190192;
+pub const BG_E_HTTP_ERROR_403: DWORD = 0x80190193;
+pub const BG_E_HTTP_ERROR_404: DWORD = 0x80190194;
+pub const BG_E_HTTP_ERROR_405: DWORD = 0x80190195;
+pub const BG_E_HTTP_ERROR_406: DWORD = 0x80190196;
+pub const BG_E_HTTP_ERROR_407: DWORD = 0x80190197;
+pub const BG_E_HTTP_ERROR_408: DWORD = 0x80190198;
+pub const BG_E_HTTP_ERROR_409: DWORD = 0x80190199;
+pub const BG_E_HTTP_ERROR_410: DWORD = 0x8019019A;
+pub const BG_E_HTTP_ERROR_411: DWORD = 0x8019019B;
+pub const BG_E_HTTP_ERROR_412: DWORD = 0x8019019C;
+pub const BG_E_HTTP_ERROR_413: DWORD = 0x8019019D;
+pub const BG_E_HTTP_ERROR_414: DWORD = 0x8019019E;
+pub const BG_E_HTTP_ERROR_415: DWORD = 0x8019019F;
+pub const BG_E_HTTP_ERROR_416: DWORD = 0x801901A0;
+pub const BG_E_HTTP_ERROR_417: DWORD = 0x801901A1;
+pub const BG_E_HTTP_ERROR_449: DWORD = 0x801901C1;
+pub const BG_E_HTTP_ERROR_500: DWORD = 0x801901F4;
+pub const BG_E_HTTP_ERROR_501: DWORD = 0x801901F5;
+pub const BG_E_HTTP_ERROR_502: DWORD = 0x801901F6;
+pub const BG_E_HTTP_ERROR_503: DWORD = 0x801901F7;
+pub const BG_E_HTTP_ERROR_504: DWORD = 0x801901F8;
+pub const BG_E_HTTP_ERROR_505: DWORD = 0x801901F9;
+pub const BITS_MC_JOB_CANCELLED: DWORD = 0x80194000;
+pub const BITS_MC_FILE_DELETION_FAILED: DWORD = 0x80194001;
+pub const BITS_MC_FILE_DELETION_FAILED_MORE: DWORD = 0x80194002;
+pub const BITS_MC_JOB_PROPERTY_CHANGE: DWORD = 0x80194003;
+pub const BITS_MC_JOB_TAKE_OWNERSHIP: DWORD = 0x80194004;
+pub const BITS_MC_JOB_SCAVENGED: DWORD = 0x80194005;
+pub const BITS_MC_JOB_NOTIFICATION_FAILURE: DWORD = 0x80194006;
+pub const BITS_MC_STATE_FILE_CORRUPT: DWORD = 0x80194007;
+pub const BITS_MC_FAILED_TO_START: DWORD = 0x80194008;
+pub const BITS_MC_FATAL_IGD_ERROR: DWORD = 0x80194009;
+pub const BITS_MC_PEERCACHING_PORT: DWORD = 0x8019400A;
+pub const BITS_MC_WSD_PORT: DWORD = 0x8019400B;
diff --git a/vendor/winapi/src/um/bluetoothapis.rs b/vendor/winapi/src/um/bluetoothapis.rs
new file mode 100644
index 000000000..8b75c8739
--- /dev/null
+++ b/vendor/winapi/src/um/bluetoothapis.rs
@@ -0,0 +1,414 @@
+// 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::bthdef::{AUTHENTICATION_REQUIREMENTS, BTH_ADDR, BTH_MAX_PIN_SIZE};
+use shared::bthsdpdef::{SDP_LARGE_INTEGER_16, SDP_SPECIFICTYPE, SDP_TYPE, SDP_ULARGE_INTEGER_16};
+use shared::guiddef::GUID;
+use shared::minwindef::{BOOL, DWORD, LPBYTE, LPVOID, PULONG, UCHAR, ULONG, USHORT};
+use shared::windef::HWND;
+use um::minwinbase::SYSTEMTIME;
+use um::winnt::{
+ CHAR, HANDLE, LONG, LONGLONG, LPCWSTR, LPWSTR, PVOID, PWSTR, SHORT, ULONGLONG, WCHAR,
+};
+pub const BLUETOOTH_MAX_NAME_SIZE: usize = 248;
+pub const BLUETOOTH_MAX_PASSKEY_SIZE: usize = 16;
+pub const BLUETOOTH_MAX_PASSKEY_BUFFER_SIZE: usize = BLUETOOTH_MAX_PASSKEY_SIZE + 1;
+pub const BLUETOOTH_MAX_SERVICE_NAME_SIZE: usize = 256;
+pub const BLUETOOTH_DEVICE_NAME_SIZE: usize = 256;
+pub type BLUETOOTH_ADDRESS = BTH_ADDR;
+pub const BLUETOOTH_NULL_ADDRESS: BLUETOOTH_ADDRESS = 0x0;
+STRUCT!{struct BLUETOOTH_LOCAL_SERVICE_INFO {
+ Enabled: BOOL,
+ btAddr: BLUETOOTH_ADDRESS,
+ szName: [WCHAR; BLUETOOTH_MAX_SERVICE_NAME_SIZE],
+ szDeviceString: [WCHAR; BLUETOOTH_DEVICE_NAME_SIZE],
+}}
+pub type PBLUETOOTH_LOCAL_SERVICE_INFO = *mut BLUETOOTH_LOCAL_SERVICE_INFO;
+STRUCT!{struct BLUETOOTH_FIND_RADIO_PARAMS {
+ dwSize: DWORD,
+}}
+pub type HBLUETOOTH_RADIO_FIND = HANDLE;
+extern "system" {
+ pub fn BluetoothFindFirstRadio(
+ pbtfrp: *const BLUETOOTH_FIND_RADIO_PARAMS,
+ phRadio: *mut HANDLE,
+ ) -> HBLUETOOTH_RADIO_FIND;
+ pub fn BluetoothFindNextRadio(
+ hFind: HBLUETOOTH_RADIO_FIND,
+ phRadio: *mut HANDLE,
+ ) -> BOOL;
+ pub fn BluetoothFindRadioClose(
+ hFind: HBLUETOOTH_RADIO_FIND,
+ ) -> BOOL;
+}
+STRUCT!{struct BLUETOOTH_RADIO_INFO {
+ dwSize: DWORD,
+ address: BLUETOOTH_ADDRESS,
+ szName: [WCHAR; BLUETOOTH_MAX_NAME_SIZE],
+ ulClassofDevice: ULONG,
+ lmpSubversion: USHORT,
+ manufacturer: USHORT,
+}}
+pub type PBLUETOOTH_RADIO_INFO = *mut BLUETOOTH_RADIO_INFO;
+extern "system" {
+ pub fn BluetoothGetRadioInfo(
+ hRadio: HANDLE,
+ pRadioInfo: PBLUETOOTH_RADIO_INFO,
+ ) -> DWORD;
+}
+STRUCT!{struct BLUETOOTH_DEVICE_INFO {
+ dwSize: DWORD,
+ Address: BLUETOOTH_ADDRESS,
+ ulClassofDevice: ULONG,
+ fConnected: BOOL,
+ fRemembered: BOOL,
+ fAuthenticated: BOOL,
+ stLastSeen: SYSTEMTIME,
+ stLastUsed: SYSTEMTIME,
+ szName: [WCHAR; BLUETOOTH_MAX_NAME_SIZE],
+}}
+pub type PBLUETOOTH_DEVICE_INFO = *mut BLUETOOTH_DEVICE_INFO;
+ENUM!{enum BLUETOOTH_AUTHENTICATION_METHOD {
+ BLUETOOTH_AUTHENTICATION_METHOD_LEGACY = 0x1,
+ BLUETOOTH_AUTHENTICATION_METHOD_OOB,
+ BLUETOOTH_AUTHENTICATION_METHOD_NUMERIC_COMPARISON,
+ BLUETOOTH_AUTHENTICATION_METHOD_PASSKEY_NOTIFICATION,
+ BLUETOOTH_AUTHENTICATION_METHOD_PASSKEY,
+}}
+pub type PBLUETOOTH_AUTHENTICATION_METHOD = *mut BLUETOOTH_AUTHENTICATION_METHOD;
+ENUM!{enum BLUETOOTH_IO_CAPABILITY {
+ BLUETOOTH_IO_CAPABILITY_DISPLAYONLY = 0x00,
+ BLUETOOTH_IO_CAPABILITY_DISPLAYYESNO = 0x01,
+ BLUETOOTH_IO_CAPABILITY_KEYBOARDONLY = 0x02,
+ BLUETOOTH_IO_CAPABILITY_NOINPUTNOOUTPUT = 0x03,
+ BLUETOOTH_IO_CAPABILITY_UNDEFINED = 0xff,
+}}
+ENUM!{enum BLUETOOTH_AUTHENTICATION_REQUIREMENTS {
+ BLUETOOTH_MITM_ProtectionNotRequired = 0,
+ BLUETOOTH_MITM_ProtectionRequired = 0x1,
+ BLUETOOTH_MITM_ProtectionNotRequiredBonding = 0x2,
+ BLUETOOTH_MITM_ProtectionRequiredBonding = 0x3,
+ BLUETOOTH_MITM_ProtectionNotRequiredGeneralBonding = 0x4,
+ BLUETOOTH_MITM_ProtectionRequiredGeneralBonding = 0x5,
+ BLUETOOTH_MITM_ProtectionNotDefined = 0xff,
+}}
+UNION!{union BLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS_u {
+ [u32; 1],
+ Numeric_Value Numeric_Value_mut: ULONG,
+ Passkey Passkey_mut: ULONG,
+}}
+STRUCT!{struct BLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS {
+ deviceInfo: BLUETOOTH_DEVICE_INFO,
+ authenticationMethod: BLUETOOTH_AUTHENTICATION_METHOD,
+ ioCapability: BLUETOOTH_IO_CAPABILITY,
+ authenticationRequirements: BLUETOOTH_AUTHENTICATION_REQUIREMENTS,
+ u: BLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS_u,
+}}
+pub type PBLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS = *mut BLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS;
+STRUCT!{struct BLUETOOTH_DEVICE_SEARCH_PARAMS {
+ dwSize: DWORD,
+ fReturnAuthenticated: BOOL,
+ fReturnRemembered: BOOL,
+ fReturnUnknown: BOOL,
+ fReturnConnected: BOOL,
+ fIssueInquiry: BOOL,
+ cTimeoutMultiplier: UCHAR,
+ hRadio: HANDLE,
+}}
+pub type HBLUETOOTH_DEVICE_FIND = HANDLE;
+extern "system" {
+ pub fn BluetoothFindFirstDevice(
+ pbtsp: *const BLUETOOTH_DEVICE_SEARCH_PARAMS,
+ pbtdi: *mut BLUETOOTH_DEVICE_INFO,
+ ) -> HBLUETOOTH_DEVICE_FIND;
+ pub fn BluetoothFindNextDevice(
+ hFind: HBLUETOOTH_DEVICE_FIND,
+ pbtdi: *mut BLUETOOTH_DEVICE_INFO,
+ ) -> BOOL;
+ pub fn BluetoothFindDeviceClose(
+ hFind: HBLUETOOTH_DEVICE_FIND,
+ ) -> BOOL;
+ pub fn BluetoothGetDeviceInfo(
+ hRadio: HANDLE,
+ pbtdi: *mut BLUETOOTH_DEVICE_INFO,
+ ) -> DWORD;
+ pub fn BluetoothUpdateDeviceRecord(
+ pbtdi: *const BLUETOOTH_DEVICE_INFO,
+ ) -> DWORD;
+ pub fn BluetoothRemoveDevice(
+ pAddress: *const BLUETOOTH_ADDRESS,
+ ) -> DWORD;
+}
+STRUCT!{struct BLUETOOTH_COD_PAIRS {
+ ulCODMask: ULONG,
+ pcszDescription: LPCWSTR,
+}}
+FN!{stdcall PFN_DEVICE_CALLBACK(
+ pvParam: LPVOID,
+ pDevice: *const BLUETOOTH_DEVICE_INFO,
+) -> BOOL}
+STRUCT!{struct BLUETOOTH_SELECT_DEVICE_PARAMS {
+ dwSize: DWORD,
+ cNumOfClasses: ULONG,
+ prgClassOfDevices: *mut BLUETOOTH_COD_PAIRS,
+ pszInfo: LPWSTR,
+ hwndParent: HWND,
+ fForceAuthentication: BOOL,
+ fShowAuthenticated: BOOL,
+ fShowRemembered: BOOL,
+ fShowUnknown: BOOL,
+ fAddNewDeviceWizard: BOOL,
+ fSkipServicesPage: BOOL,
+ pfnDeviceCallback: PFN_DEVICE_CALLBACK,
+ pvParam: LPVOID,
+ cNumDevices: DWORD,
+ pDevices: PBLUETOOTH_DEVICE_INFO,
+}}
+extern "system" {
+ pub fn BluetoothSelectDevices(
+ pbtsdp: *mut BLUETOOTH_SELECT_DEVICE_PARAMS,
+ ) -> BOOL;
+ pub fn BluetoothSelectDevicesFree(
+ pbtsdp: *mut BLUETOOTH_SELECT_DEVICE_PARAMS,
+ ) -> BOOL;
+ pub fn BluetoothDisplayDeviceProperties(
+ hwndParent: HWND,
+ pbtdi: *mut BLUETOOTH_DEVICE_INFO,
+ ) -> BOOL;
+ // #[deprecated]
+ pub fn BluetoothAuthenticateDevice(
+ hwndParent: HWND,
+ hRadio: HANDLE,
+ pbtbi: *mut BLUETOOTH_DEVICE_INFO,
+ pszPasskey: PWSTR,
+ ulPasskeyLength: ULONG,
+ ) -> DWORD;
+}
+STRUCT!{struct BLUETOOTH_PIN_INFO {
+ pin: [UCHAR; BTH_MAX_PIN_SIZE],
+ pinLength: UCHAR,
+}}
+pub type PBLUETOOTH_PIN_INFO = *mut BLUETOOTH_PIN_INFO;
+STRUCT!{struct BLUETOOTH_OOB_DATA_INFO {
+ C: [UCHAR; 16],
+ R: [UCHAR; 16],
+}}
+pub type PBLUETOOTH_OOB_DATA_INFO = *mut BLUETOOTH_OOB_DATA_INFO;
+STRUCT!{struct BLUETOOTH_NUMERIC_COMPARISON_INFO {
+ NumericValue: ULONG,
+}}
+pub type PBLUETOOTH_NUMERIC_COMPARISON_INFO = *mut BLUETOOTH_NUMERIC_COMPARISON_INFO;
+STRUCT!{struct BLUETOOTH_PASSKEY_INFO {
+ passkey: ULONG,
+}}
+pub type PBLUETOOTH_PASSKEY_INFO = *mut BLUETOOTH_PASSKEY_INFO;
+extern "system" {
+ pub fn BluetoothAuthenticateDeviceEx(
+ hwndParentIn: HWND,
+ hRadioIn: HANDLE,
+ pbtdiInout: *mut BLUETOOTH_DEVICE_INFO,
+ pbtOobData: PBLUETOOTH_OOB_DATA_INFO,
+ authenticationRequirement: AUTHENTICATION_REQUIREMENTS,
+ ) -> DWORD;
+ // #[deprecated]
+ pub fn BluetoothAuthenticateMultipleDevices(
+ hwndParent: HWND,
+ hRadio: HANDLE,
+ cDevices: DWORD,
+ rgbtdi: *mut BLUETOOTH_DEVICE_INFO,
+ ) -> DWORD;
+}
+pub const BLUETOOTH_SERVICE_DISABLE: DWORD = 0x00;
+pub const BLUETOOTH_SERVICE_ENABLE: DWORD = 0x01;
+pub const BLUETOOTH_SERVICE_MASK: DWORD = BLUETOOTH_SERVICE_DISABLE | BLUETOOTH_SERVICE_ENABLE;
+extern "system" {
+ pub fn BluetoothSetServiceState(
+ hRadio: HANDLE,
+ pbtdi: *const BLUETOOTH_DEVICE_INFO,
+ pGuidService: *const GUID,
+ dwServiceFlags: DWORD,
+ ) -> DWORD;
+ pub fn BluetoothEnumerateInstalledServices(
+ hRadio: HANDLE,
+ pbtdi: *const BLUETOOTH_DEVICE_INFO,
+ pcServiceInout: *mut DWORD,
+ pGuidServices: *mut GUID,
+ ) -> DWORD;
+ pub fn BluetoothEnableDiscovery(
+ hRadio: HANDLE,
+ fEnabled: BOOL,
+ ) -> BOOL;
+ pub fn BluetoothIsDiscoverable(
+ hRadio: HANDLE,
+ ) -> BOOL;
+ pub fn BluetoothEnableIncomingConnections(
+ hRadio: HANDLE,
+ fEnabled: BOOL,
+ ) -> BOOL;
+ pub fn BluetoothIsConnectable(
+ hRadio: HANDLE,
+ ) -> BOOL;
+}
+pub type HBLUETOOTH_AUTHENTICATION_REGISTRATION = HANDLE;
+FN!{stdcall PFN_AUTHENTICATION_CALLBACK(
+ pvParam: LPVOID,
+ pDevice: PBLUETOOTH_DEVICE_INFO,
+) -> BOOL}
+extern "system" {
+ // #[deprecated]
+ pub fn BluetoothRegisterForAuthentication(
+ pbtdi: *const BLUETOOTH_DEVICE_INFO,
+ phRegHandle: *mut HBLUETOOTH_AUTHENTICATION_REGISTRATION,
+ pfnCallback: PFN_AUTHENTICATION_CALLBACK,
+ pvParam: PVOID,
+ ) -> DWORD;
+}
+FN!{stdcall PFN_AUTHENTICATION_CALLBACK_EX(
+ pvParam: LPVOID,
+ pAuthCallbackParams: PBLUETOOTH_AUTHENTICATION_CALLBACK_PARAMS,
+) -> BOOL}
+extern "system" {
+ pub fn BluetoothRegisterForAuthenticationEx(
+ pbtdiIn: *const BLUETOOTH_DEVICE_INFO,
+ phRegHandleOut: *mut HBLUETOOTH_AUTHENTICATION_REGISTRATION,
+ pfnCallbackIn: PFN_AUTHENTICATION_CALLBACK_EX,
+ pvParam: PVOID,
+ ) -> DWORD;
+ pub fn BluetoothUnregisterAuthentication(
+ hRegHandle: HBLUETOOTH_AUTHENTICATION_REGISTRATION,
+ ) -> BOOL;
+ // #[deprecated]
+ pub fn BluetoothSendAuthenticationResponse(
+ hRadio: HANDLE,
+ pbtdi: *const BLUETOOTH_DEVICE_INFO,
+ pszPasskey: LPCWSTR,
+ ) -> DWORD;
+}
+UNION!{union BLUETOOTH_AUTHENTICATE_RESPONSE_u {
+ [u32; 8],
+ pinInfo pinInfo_mut: BLUETOOTH_PIN_INFO,
+ oobInfo oobInfo_mut: BLUETOOTH_OOB_DATA_INFO,
+ numericCompInfo numericCompInfo_mut: BLUETOOTH_NUMERIC_COMPARISON_INFO,
+ passkeyInfo passkeyInfo_mut: BLUETOOTH_PASSKEY_INFO,
+}}
+STRUCT!{struct BLUETOOTH_AUTHENTICATE_RESPONSE {
+ bthAddressRemote: BLUETOOTH_ADDRESS,
+ authMethod: BLUETOOTH_AUTHENTICATION_METHOD,
+ u: BLUETOOTH_AUTHENTICATE_RESPONSE_u,
+ negativeResponse: UCHAR,
+}}
+pub type PBLUETOOTH_AUTHENTICATE_RESPONSE = *mut BLUETOOTH_AUTHENTICATE_RESPONSE;
+extern "system" {
+ pub fn BluetoothSendAuthenticationResponseEx(
+ hRadioIn: HANDLE,
+ pauthResponse: PBLUETOOTH_AUTHENTICATE_RESPONSE,
+ ) -> DWORD;
+}
+STRUCT!{struct SDP_ELEMENT_DATA_data_string {
+ value: LPBYTE,
+ length: ULONG,
+}}
+STRUCT!{struct SDP_ELEMENT_DATA_data_url {
+ value: LPBYTE,
+ length: ULONG,
+}}
+STRUCT!{struct SDP_ELEMENT_DATA_data_sequence {
+ value: LPBYTE,
+ length: ULONG,
+}}
+STRUCT!{struct SDP_ELEMENT_DATA_data_alternative {
+ value: LPBYTE,
+ length: ULONG,
+}}
+UNION!{union SDP_ELEMENT_DATA_data {
+ [u64; 2],
+ int128 int128_mut: SDP_LARGE_INTEGER_16,
+ int64 int64_mut: LONGLONG,
+ int32 int32_mut: LONG,
+ int16 int16_mut: SHORT,
+ int8 int8_mut: CHAR,
+ uint128 uint128_mut: SDP_ULARGE_INTEGER_16,
+ uint64 uint64_mut: ULONGLONG,
+ uint32 uint32_mut: ULONG,
+ uint16 uint16_mut: USHORT,
+ uint8 uint8_mut: UCHAR,
+ booleanVal booleanVal_mut: UCHAR,
+ uuid128 uuid128_mut: GUID,
+ uuid32 uuid32_mut: ULONG,
+ uuid16 uuid16_mut: USHORT,
+ string string_mut: SDP_ELEMENT_DATA_data_string,
+ url url_mut: SDP_ELEMENT_DATA_data_url,
+ sequence sequence_mut: SDP_ELEMENT_DATA_data_sequence,
+ alternative alternative_mut: SDP_ELEMENT_DATA_data_alternative,
+}}
+STRUCT!{struct SDP_ELEMENT_DATA {
+ type_: SDP_TYPE,
+ specificType: SDP_SPECIFICTYPE,
+ data: SDP_ELEMENT_DATA_data,
+}}
+pub type PSDP_ELEMENT_DATA = *mut SDP_ELEMENT_DATA;
+extern "system" {
+ pub fn BluetoothSdpGetElementData(
+ pSdpStream: LPBYTE,
+ cbSdpStreamLength: ULONG,
+ pData: PSDP_ELEMENT_DATA,
+ ) -> DWORD;
+}
+pub type HBLUETOOTH_CONTAINER_ELEMENT = HANDLE;
+extern "system" {
+ pub fn BluetoothSdpGetContainerElementData(
+ pContainerStream: LPBYTE,
+ cbContainerLength: ULONG,
+ pElement: *mut HBLUETOOTH_CONTAINER_ELEMENT,
+ pData: PSDP_ELEMENT_DATA,
+ ) -> DWORD;
+ pub fn BluetoothSdpGetAttributeValue(
+ pRecordStream: LPBYTE,
+ cbRecordLength: ULONG,
+ usAttributeId: USHORT,
+ pAttributeData: PSDP_ELEMENT_DATA,
+ ) -> DWORD;
+}
+STRUCT!{struct SDP_STRING_TYPE_DATA {
+ encoding: USHORT,
+ mibeNum: USHORT,
+ attributeId: USHORT,
+}}
+pub type PSDP_STRING_TYPE_DATA = *mut SDP_STRING_TYPE_DATA;
+extern "system" {
+ pub fn BluetoothSdpGetString(
+ pRecordStream: LPBYTE,
+ cbRecordLength: ULONG,
+ pStringData: PSDP_STRING_TYPE_DATA,
+ usStringOffset: USHORT,
+ pszString: PWSTR,
+ pcchStringLength: PULONG,
+ ) -> DWORD;
+}
+FN!{stdcall PFN_BLUETOOTH_ENUM_ATTRIBUTES_CALLBACK(
+ uAttribId: ULONG,
+ pValueStream: LPBYTE,
+ cbStreamSize: ULONG,
+ pvParam: LPVOID,
+) -> BOOL}
+pub use self::BluetoothSdpEnumAttributes as BluetoothEnumAttributes;
+extern "system" {
+ pub fn BluetoothSdpEnumAttributes(
+ pSDPStream: LPBYTE,
+ cbStreamSize: ULONG,
+ pfnCallback: PFN_BLUETOOTH_ENUM_ATTRIBUTES_CALLBACK,
+ pvParam: LPVOID,
+ ) -> BOOL;
+ pub fn BluetoothSetLocalServiceInfo(
+ hRadioIn: HANDLE,
+ pClassGuid: *const GUID,
+ ulInstance: ULONG,
+ pServiceInfoIn: *const BLUETOOTH_LOCAL_SERVICE_INFO,
+ ) -> DWORD;
+ pub fn BluetoothIsVersionAvailable(
+ MajorVersion: UCHAR,
+ MinorVersion: UCHAR,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/bluetoothleapis.rs b/vendor/winapi/src/um/bluetoothleapis.rs
new file mode 100644
index 000000000..bca8f9743
--- /dev/null
+++ b/vendor/winapi/src/um/bluetoothleapis.rs
@@ -0,0 +1,104 @@
+// 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::minwindef::{ULONG, USHORT};
+use shared::winerror::HRESULT;
+use um::bthledef::{
+ BLUETOOTH_GATT_EVENT_HANDLE, BTH_LE_GATT_EVENT_TYPE, BTH_LE_GATT_RELIABLE_WRITE_CONTEXT,
+ PBTH_LE_GATT_CHARACTERISTIC, PBTH_LE_GATT_CHARACTERISTIC_VALUE, PBTH_LE_GATT_DESCRIPTOR,
+ PBTH_LE_GATT_DESCRIPTOR_VALUE, PBTH_LE_GATT_RELIABLE_WRITE_CONTEXT, PBTH_LE_GATT_SERVICE,
+ PFNBLUETOOTH_GATT_EVENT_CALLBACK,
+};
+use um::winnt::{HANDLE, PVOID};
+extern "system" {
+ pub fn BluetoothGATTGetServices(
+ hDevice: HANDLE,
+ ServicesBufferCount: USHORT,
+ ServicesBuffer: PBTH_LE_GATT_SERVICE,
+ ServicesBufferActual: *mut USHORT,
+ Flags: ULONG,
+ ) -> HRESULT;
+ pub fn BluetoothGATTGetIncludedServices(
+ hDevice: HANDLE,
+ ParentService: PBTH_LE_GATT_SERVICE,
+ IncludedServicesBufferCount: USHORT,
+ IncludedServicesBuffer: PBTH_LE_GATT_SERVICE,
+ IncludedServicesBufferActual: *mut USHORT,
+ Flags: ULONG,
+ ) -> HRESULT;
+ pub fn BluetoothGATTGetCharacteristics(
+ hDevice: HANDLE,
+ Service: PBTH_LE_GATT_SERVICE,
+ CharacteristicsBufferCount: USHORT,
+ CharacteristicsBuffer: PBTH_LE_GATT_CHARACTERISTIC,
+ CharacteristicsBufferActual: *mut USHORT,
+ Flags: ULONG,
+ ) -> HRESULT;
+ pub fn BluetoothGATTGetDescriptors(
+ hDevice: HANDLE,
+ Characteristic: PBTH_LE_GATT_CHARACTERISTIC,
+ DescriptorsBufferCount: USHORT,
+ DescriptorsBuffer: PBTH_LE_GATT_DESCRIPTOR,
+ DescriptorsBufferActual: *mut USHORT,
+ Flags: ULONG,
+ ) -> HRESULT;
+ pub fn BluetoothGATTGetCharacteristicValue(
+ hDevice: HANDLE,
+ Characteristic: PBTH_LE_GATT_CHARACTERISTIC,
+ CharacteristicValueDataSize: ULONG,
+ CharacteristicValue: PBTH_LE_GATT_CHARACTERISTIC_VALUE,
+ CharacteristicValueSizeRequired: *mut USHORT,
+ Flags: ULONG,
+ ) -> HRESULT;
+ pub fn BluetoothGATTGetDescriptorValue(
+ hDevice: HANDLE,
+ Descriptor: PBTH_LE_GATT_DESCRIPTOR,
+ DescriptorValueDataSize: ULONG,
+ DescriptorValue: PBTH_LE_GATT_DESCRIPTOR_VALUE,
+ DescriptorValueSizeRequired: *mut USHORT,
+ Flags: ULONG,
+ ) -> HRESULT;
+ pub fn BluetoothGATTBeginReliableWrite(
+ hDevice: HANDLE,
+ ReliableWriteContext: PBTH_LE_GATT_RELIABLE_WRITE_CONTEXT,
+ Flags: ULONG,
+ ) -> HRESULT;
+ pub fn BluetoothGATTSetCharacteristicValue(
+ hDevice: HANDLE,
+ Characteristic: PBTH_LE_GATT_CHARACTERISTIC,
+ CharacteristicValue: PBTH_LE_GATT_CHARACTERISTIC_VALUE,
+ ReliableWriteContext: BTH_LE_GATT_RELIABLE_WRITE_CONTEXT,
+ Flags: ULONG,
+ ) -> HRESULT;
+ pub fn BluetoothGATTEndReliableWrite(
+ hDevice: HANDLE,
+ ReliableWriteContext: BTH_LE_GATT_RELIABLE_WRITE_CONTEXT,
+ Flags: ULONG,
+ ) -> HRESULT;
+ pub fn BluetoothGATTAbortReliableWrite(
+ hDevice: HANDLE,
+ ReliableWriteContext: BTH_LE_GATT_RELIABLE_WRITE_CONTEXT,
+ Flags: ULONG,
+ ) -> HRESULT;
+ pub fn BluetoothGATTSetDescriptorValue(
+ hDevice: HANDLE,
+ Descriptor: PBTH_LE_GATT_DESCRIPTOR,
+ DescriptorValue: PBTH_LE_GATT_DESCRIPTOR_VALUE,
+ Flags: ULONG,
+ ) -> HRESULT;
+ pub fn BluetoothGATTRegisterEvent(
+ hService: HANDLE,
+ EventType: BTH_LE_GATT_EVENT_TYPE,
+ EventParameterIn: PVOID,
+ Callback: PFNBLUETOOTH_GATT_EVENT_CALLBACK,
+ CallbackContext: PVOID,
+ pEventHandle: *mut BLUETOOTH_GATT_EVENT_HANDLE,
+ Flags: ULONG,
+ ) -> HRESULT;
+ pub fn BluetoothGATTUnregisterEvent(
+ EventHandle: BLUETOOTH_GATT_EVENT_HANDLE,
+ Flags: ULONG,
+ ) -> HRESULT;
+}
diff --git a/vendor/winapi/src/um/bthledef.rs b/vendor/winapi/src/um/bthledef.rs
new file mode 100644
index 000000000..ca97c3219
--- /dev/null
+++ b/vendor/winapi/src/um/bthledef.rs
@@ -0,0 +1,280 @@
+// 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::ULONG64;
+use shared::guiddef::{GUID, IsEqualGUID};
+use shared::minwindef::{UCHAR, ULONG, USHORT};
+use um::winnt::{BOOLEAN, HANDLE, PVOID};
+DEFINE_GUID!{GUID_BLUETOOTHLE_DEVICE_INTERFACE,
+ 0x781aee18, 0x7733, 0x4ce4, 0xad, 0xd0, 0x91, 0xf4, 0x1c, 0x67, 0xb5, 0x92}
+DEFINE_GUID!{GUID_BLUETOOTH_GATT_SERVICE_DEVICE_INTERFACE,
+ 0x6e3bb679, 0x4372, 0x40c8, 0x9e, 0xaa, 0x45, 0x09, 0xdf, 0x26, 0x0c, 0xd8}
+DEFINE_GUID!{BTH_LE_ATT_BLUETOOTH_BASE_GUID,
+ 0x00000000, 0x0000, 0x1000, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB}
+pub const BTH_LE_SERVICE_GAP: USHORT = 0x1800;
+pub const BTH_LE_SERVICE_GATT: USHORT = 0x1801;
+pub const BTH_LE_GATT_ATTRIBUTE_TYPE_PRIMARY_SERVICE: USHORT = 0x2800;
+pub const BTH_LE_GATT_ATTRIBUTE_TYPE_SECONDARY_SERVICE: USHORT = 0x2801;
+pub const BTH_LE_GATT_ATTRIBUTE_TYPE_INCLUDE: USHORT = 0x2802;
+pub const BTH_LE_GATT_ATTRIBUTE_TYPE_CHARACTERISTIC: USHORT = 0x2803;
+pub const BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_EXTENDED_PROPERTIES: USHORT = 0x2900;
+pub const BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_USER_DESCRIPTION: USHORT = 0x2901;
+pub const BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_CLIENT_CONFIGURATION: USHORT = 0x2902;
+pub const BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_SERVER_CONFIGURATION: USHORT = 0x2903;
+pub const BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_FORMAT: USHORT = 0x2904;
+pub const BTH_LE_GATT_CHARACTERISTIC_DESCRIPTOR_AGGREGATE_FORMAT: USHORT = 0x2905;
+pub const BTH_LE_GATT_CHARACTERISTIC_TYPE_DEVICE_NAME: USHORT = 0x2A00;
+pub const BTH_LE_GATT_CHARACTERISTIC_TYPE_APPEARANCE: USHORT = 0x2A01;
+pub const BTH_LE_GATT_CHARACTERISTIC_TYPE_PERIPHERAL_PRIVACY_FLAG: USHORT = 0x2A02;
+pub const BTH_LE_GATT_CHARACTERISTIC_TYPE_RECONNECTION_ADDRESS: USHORT = 0x2A03;
+pub const BTH_LE_GATT_CHARACTERISTIC_TYPE_PERIPHERAL_PREFERED_CONNECTION_PARAMETER: USHORT
+ = 0x2A04;
+pub const BTH_LE_GATT_CHARACTERISTIC_TYPE_SERVICE_CHANGED: USHORT = 0x2A05;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_OFFSET: u8 = 0x6;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_MASK: USHORT = 0x3ff;
+#[inline]
+pub fn BTH_LE_GAP_APPEARANCE_GET_CATEGORY(a: USHORT) -> USHORT {
+ (a >> BTH_LE_GAP_APPEARANCE_CATEGORY_OFFSET) & BTH_LE_GAP_APPEARANCE_CATEGORY_MASK
+}
+#[inline]
+pub fn BTH_LE_GAP_APPEARANCE_SET_CATEGORY(a: &mut USHORT, c: USHORT) {
+ *a = (*a & !BTH_LE_GAP_APPEARANCE_CATEGORY_MASK)
+ | (c << BTH_LE_GAP_APPEARANCE_CATEGORY_OFFSET);
+}
+pub const BTH_LE_GAP_APPEARANCE_SUB_CATEGORY_MASK: USHORT = 0x3f;
+#[inline]
+pub fn BTH_LE_GAP_APPEARANCE_GET_SUB_CATEGORY(a: USHORT) -> UCHAR {
+ (a & BTH_LE_GAP_APPEARANCE_SUB_CATEGORY_MASK) as u8
+}
+#[inline]
+pub fn BTH_LE_GAP_APPEARANCE_SET_SUB_CATEGORY(a: &mut USHORT, s: UCHAR) {
+ *a = (*a & !BTH_LE_GAP_APPEARANCE_SUB_CATEGORY_MASK) | (s as u16);
+}
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_UNCATEGORIZED: USHORT = 0x0000;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_PHONE: USHORT = 0x0001;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_COMPUTER: USHORT = 0x0002;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_WATCH: USHORT = 0x0003;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_CLOCK: USHORT = 0x0004;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_DISPLAY: USHORT = 0x0005;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_REMOTE_CONTROL: USHORT = 0x0006;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_EYE_GLASSES: USHORT = 0x0007;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_TAG: USHORT = 0x0008;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_KEYRING: USHORT = 0x0009;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_MEDIA_PLAYER: USHORT = 0x000a;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_BARCODE_SCANNER: USHORT = 0x000b;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_THERMOMETER: USHORT = 0x000c;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_HEART_RATE: USHORT = 0x000d;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_BLOOD_PRESSURE: USHORT = 0x000e;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_HID: USHORT = 0x000f;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_GLUCOSE_METER: USHORT = 0x0010;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_RUNNING_WALKING_SENSOR: USHORT = 0x0011;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_CYCLING: USHORT = 0x0012;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_PLUSE_OXIMETER: USHORT = 0x0031;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_WEIGHT_SCALE: USHORT = 0x0032;
+pub const BTH_LE_GAP_APPEARANCE_CATEGORY_OUTDOOR_SPORTS_ACTIVITY: USHORT = 0x0051;
+pub const BTH_LE_GAP_APPEARANCE_SUBCATEGORY_GENERIC: UCHAR = 0x00;
+pub const BTH_LE_GAP_APPEARANCE_WATCH_SUBCATEGORY_SPORTS_WATCH: UCHAR = 0x01;
+pub const BTH_LE_GAP_APPEARANCE_THERMOMETER_SUBCATEGORY_EAR: UCHAR = 0x01;
+pub const BTH_LE_GAP_APPEARANCE_HEART_RATE_SUBCATEGORY_HEART_RATE_BELT: UCHAR = 0x01;
+pub const BTH_LE_GAP_APPEARANCE_BLOOD_PRESSURE_SUBCATEGORY_ARM: UCHAR = 0x01;
+pub const BTH_LE_GAP_APPEARANCE_BLOOD_PRESSURE_SUBCATEGORY_WRIST: UCHAR = 0x02;
+pub const BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_KEYBOARD: UCHAR = 0x01;
+pub const BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_MOUSE: UCHAR = 0x02;
+pub const BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_JOYSTICK: UCHAR = 0x03;
+pub const BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_GAMEPAD: UCHAR = 0x04;
+pub const BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_DIGITIZER_TABLET: UCHAR = 0x05;
+pub const BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_CARD_READER: UCHAR = 0x06;
+pub const BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_DIGITAL_PEN: UCHAR = 0x07;
+pub const BTH_LE_GAP_APPEARANCE_HID_SUBCATEGORY_BARCODE_SCANNER: UCHAR = 0x08;
+pub const BTH_LE_GAP_APPEARANCE_RUNNING_WALKING_SENSOR_SUBCATEGORY_IN_SHOE: UCHAR = 0x01;
+pub const BTH_LE_GAP_APPEARANCE_RUNNING_WALKING_SENSOR_SUBCATEGORY_ON_SHOE: UCHAR = 0x02;
+pub const BTH_LE_GAP_APPEARANCE_RUNNING_WALKING_SENSOR_SUBCATEGORY_ON_HIP: UCHAR = 0x03;
+pub const BTH_LE_GAP_APPEARANCE_CYCLING_SUBCATEGORY_CYCLING_COMPUTER: UCHAR = 0x01;
+pub const BTH_LE_GAP_APPEARANCE_CYCLING_SUBCATEGORY_SPEED_SENSOR: UCHAR = 0x02;
+pub const BTH_LE_GAP_APPEARANCE_CYCLING_SUBCATEGORY_CADENCE_SENSOR: UCHAR = 0x03;
+pub const BTH_LE_GAP_APPEARANCE_CYCLING_SUBCATEGORY_POWER_SENSOR: UCHAR = 0x04;
+pub const BTH_LE_GAP_APPEARANCE_CYCLING_SUBCATEGORY_SPEED_AND_CADENCE_SENSOR: UCHAR = 0x05;
+pub const BTH_LE_GAP_APPEARANCE_PULSE_OXIMETER_SUBCATEGORY_FINGERTIP: UCHAR = 0x01;
+pub const BTH_LE_GAP_APPEARANCE_PULSE_OXIMETER_SUBCATEGORY_WRIST_WORN: UCHAR = 0x02;
+pub const BTH_LE_GAP_APPEARANCE_OUTDOOR_SPORTS_ACTIVITY_SUBCATEGORY_LOCATION_DISPLAY_DEVICE: UCHAR
+ = 0x01;
+pub const
+ BTH_LE_GAP_APPEARANCE_OUTDOOR_SPORTS_ACTIVITY_SUBCATEGORY_LOCATION_NAVIGATION_DISPLAY_DEVICE:
+ UCHAR = 0x02;
+pub const BTH_LE_GAP_APPEARANCE_OUTDOOR_SPORTS_ACTIVITY_SUBCATEGORY_LOCATION_POD: UCHAR = 0x03;
+pub const BTH_LE_GAP_APPEARANCE_OUTDOOR_SPORTS_ACTIVITY_SUBCATEGORY_LOCATION_NAVIGATION_POD: UCHAR
+ = 0x04;
+pub const BTH_LE_GATT_DEFAULT_MAX_INCLUDED_SERVICES_DEPTH: USHORT = 3;
+pub const BTH_LE_ATT_TRANSACTION_TIMEOUT: USHORT = 30;
+pub const BTH_LE_ATT_MAX_VALUE_SIZE: USHORT = 512;
+pub const BTH_LE_ATT_CID: USHORT = 0x0004;
+pub const BTHLEENUM_ATT_MTU_MIN: USHORT = 23;
+// #define BTHLEENUM_ATT_MTU_MAX (MAX_USHORT)
+pub const BTHLEENUM_ATT_MTU_DEFAULT: USHORT = BTHLEENUM_ATT_MTU_MIN;
+pub const BTHLEENUM_ATT_MTU_INITIAL_NEGOTIATION: USHORT = 525;
+pub const BTH_LE_ERROR_INVALID_HANDLE: USHORT = 0x01;
+pub const BTH_LE_ERROR_READ_NOT_PERMITTED: USHORT = 0x02;
+pub const BTH_LE_ERROR_WRITE_NOT_PERMITTED: USHORT = 0x03;
+pub const BTH_LE_ERROR_INVALID_PDU: USHORT = 0x04;
+pub const BTH_LE_ERROR_INSUFFICIENT_AUTHENTICATION: USHORT = 0x05;
+pub const BTH_LE_ERROR_REQUEST_NOT_SUPPORTED: USHORT = 0x06;
+pub const BTH_LE_ERROR_INVALID_OFFSET: USHORT = 0x07;
+pub const BTH_LE_ERROR_INSUFFICIENT_AUTHORIZATION: USHORT = 0x08;
+pub const BTH_LE_ERROR_PREPARE_QUEUE_FULL: USHORT = 0x09;
+pub const BTH_LE_ERROR_ATTRIBUTE_NOT_FOUND: USHORT = 0x0A;
+pub const BTH_LE_ERROR_ATTRIBUTE_NOT_LONG: USHORT = 0x0B;
+pub const BTH_LE_ERROR_INSUFFICIENT_ENCRYPTION_KEY_SIZE: USHORT = 0x0C;
+pub const BTH_LE_ERROR_INVALID_ATTRIBUTE_VALUE_LENGTH: USHORT = 0x0D;
+pub const BTH_LE_ERROR_UNLIKELY: USHORT = 0x0E;
+pub const BTH_LE_ERROR_INSUFFICIENT_ENCRYPTION: USHORT = 0x0F;
+pub const BTH_LE_ERROR_UNSUPPORTED_GROUP_TYPE: USHORT = 0x10;
+pub const BTH_LE_ERROR_INSUFFICIENT_RESOURCES: USHORT = 0x11;
+pub const BTH_LE_ERROR_UNKNOWN: USHORT = 0x1000;
+pub const BLUETOOTH_GATT_FLAG_NONE: ULONG = 0x00000000;
+pub const BLUETOOTH_GATT_FLAG_CONNECTION_ENCRYPTED: ULONG = 0x00000001;
+pub const BLUETOOTH_GATT_FLAG_CONNECTION_AUTHENTICATED: ULONG = 0x00000002;
+pub const BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_DEVICE: ULONG = 0x00000004;
+pub const BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_CACHE: ULONG = 0x00000008;
+pub const BLUETOOTH_GATT_FLAG_SIGNED_WRITE: ULONG = 0x00000010;
+pub const BLUETOOTH_GATT_FLAG_WRITE_WITHOUT_RESPONSE: ULONG = 0x00000020;
+pub const BLUETOOTH_GATT_FLAG_RETURN_ALL: ULONG = 0x00000040;
+pub const BLUETOOTH_GATT_FLAG_VALID_MASK: ULONG = BLUETOOTH_GATT_FLAG_NONE
+ | BLUETOOTH_GATT_FLAG_CONNECTION_ENCRYPTED | BLUETOOTH_GATT_FLAG_CONNECTION_AUTHENTICATED
+ | BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_DEVICE | BLUETOOTH_GATT_FLAG_FORCE_READ_FROM_CACHE
+ | BLUETOOTH_GATT_FLAG_SIGNED_WRITE | BLUETOOTH_GATT_FLAG_WRITE_WITHOUT_RESPONSE
+ | BLUETOOTH_GATT_FLAG_RETURN_ALL;
+#[inline]
+pub fn IS_BLUETOOTH_GATT_FLAG_VALID(f: ULONG) -> bool {
+ (f & !BLUETOOTH_GATT_FLAG_VALID_MASK) == 0
+}
+pub type BLUETOOTH_GATT_EVENT_HANDLE = HANDLE;
+UNION!{union BTH_LE_UUID_value {
+ [u32; 4],
+ ShortUuid ShortUuid_mut: USHORT,
+ LongUuid LongUuid_mut: GUID,
+}}
+STRUCT!{struct BTH_LE_UUID {
+ IsShortUuid: BOOLEAN,
+ Value: BTH_LE_UUID_value,
+}}
+pub type PBTH_LE_UUID = *mut BTH_LE_UUID;
+STRUCT!{struct BTH_LE_GATT_SERVICE {
+ ServiceUuid: BTH_LE_UUID,
+ AttributeHandle: USHORT,
+}}
+pub type PBTH_LE_GATT_SERVICE = *mut BTH_LE_GATT_SERVICE;
+ENUM!{enum BTH_LE_GATT_DESCRIPTOR_TYPE {
+ CharacteristicExtendedProperties,
+ CharacteristicUserDescription,
+ ClientCharacteristicConfiguration,
+ ServerCharacteristicConfiguration,
+ CharacteristicFormat,
+ CharacteristicAggregateFormat,
+ CustomDescriptor,
+}}
+pub type PBTH_LE_GATT_DESCRIPTOR_TYPE = *mut BTH_LE_GATT_DESCRIPTOR_TYPE;
+STRUCT!{struct BTH_LE_GATT_CHARACTERISTIC {
+ ServiceHandle: USHORT,
+ CharacteristicUuid: BTH_LE_UUID,
+ AttributeHandle: USHORT,
+ CharacteristicValueHandle: USHORT,
+ IsBroadcastable: BOOLEAN,
+ IsReadable: BOOLEAN,
+ IsWritable: BOOLEAN,
+ IsWritableWithoutResponse: BOOLEAN,
+ IsSignedWritable: BOOLEAN,
+ IsNotifiable: BOOLEAN,
+ IsIndicatable: BOOLEAN,
+ HasExtendedProperties: BOOLEAN,
+}}
+pub type PBTH_LE_GATT_CHARACTERISTIC = *mut BTH_LE_GATT_CHARACTERISTIC;
+STRUCT!{struct BTH_LE_GATT_CHARACTERISTIC_VALUE {
+ DataSize: ULONG,
+ Data: [UCHAR; 1],
+}}
+pub type PBTH_LE_GATT_CHARACTERISTIC_VALUE = *mut BTH_LE_GATT_CHARACTERISTIC_VALUE;
+STRUCT!{struct BTH_LE_GATT_DESCRIPTOR {
+ ServiceHandle: USHORT,
+ CharacteristicHandle: USHORT,
+ DescriptorType: BTH_LE_GATT_DESCRIPTOR_TYPE,
+ DescriptorUuid: BTH_LE_UUID,
+ AttributeHandle: USHORT,
+}}
+pub type PBTH_LE_GATT_DESCRIPTOR = *mut BTH_LE_GATT_DESCRIPTOR;
+STRUCT!{struct BTH_LE_GATT_DESCRIPTOR_VALUE_u_CharacteristicExtendedProperties {
+ IsReliableWriteEnabled: BOOLEAN,
+ IsAuxiliariesWritable: BOOLEAN,
+}}
+STRUCT!{struct BTH_LE_GATT_DESCRIPTOR_VALUE_u_ClientCharacteristicConfiguration {
+ IsSubscribeToNotification: BOOLEAN,
+ IsSubscribeToIndication: BOOLEAN,
+}}
+STRUCT!{struct BTH_LE_GATT_DESCRIPTOR_VALUE_u_ServerCharacteristicConfiguration {
+ IsBroadcast: BOOLEAN,
+}}
+STRUCT!{struct BTH_LE_GATT_DESCRIPTOR_VALUE_u_CharacteristicFormat {
+ Format: UCHAR,
+ Exponent: UCHAR,
+ Unit: BTH_LE_UUID,
+ NameSpace: UCHAR,
+ Description: BTH_LE_UUID,
+}}
+UNION!{union BTH_LE_GATT_DESCRIPTOR_VALUE_u {
+ [u32; 12],
+ CharacteristicExtendedProperties CharacteristicExtendedProperties_mut:
+ BTH_LE_GATT_DESCRIPTOR_VALUE_u_CharacteristicExtendedProperties,
+ ClientCharacteristicConfiguration ClientCharacteristicConfiguration_mut:
+ BTH_LE_GATT_DESCRIPTOR_VALUE_u_ClientCharacteristicConfiguration,
+ ServerCharacteristicConfiguration ServerCharacteristicConfiguration_mut:
+ BTH_LE_GATT_DESCRIPTOR_VALUE_u_ServerCharacteristicConfiguration,
+ CharacteristicFormat CharacteristicFormat_mut:
+ BTH_LE_GATT_DESCRIPTOR_VALUE_u_CharacteristicFormat,
+}}
+STRUCT!{struct BTH_LE_GATT_DESCRIPTOR_VALUE {
+ DescriptorType: BTH_LE_GATT_DESCRIPTOR_TYPE,
+ DescriptorUuid: BTH_LE_UUID,
+ u: BTH_LE_GATT_DESCRIPTOR_VALUE_u,
+ DataSize: ULONG,
+ Data: [UCHAR; 1],
+}}
+pub type PBTH_LE_GATT_DESCRIPTOR_VALUE = *mut BTH_LE_GATT_DESCRIPTOR_VALUE;
+ENUM!{enum BTH_LE_GATT_EVENT_TYPE {
+ CharacteristicValueChangedEvent,
+}}
+FN!{stdcall PFNBLUETOOTH_GATT_EVENT_CALLBACK(
+ EventType: BTH_LE_GATT_EVENT_TYPE,
+ EventOutParameter: PVOID,
+ Context: PVOID,
+) -> ()}
+STRUCT!{struct BLUETOOTH_GATT_VALUE_CHANGED_EVENT_REGISTRATION {
+ NumCharacteristics: USHORT,
+ Characteristics: [BTH_LE_GATT_CHARACTERISTIC; 1],
+}}
+pub type PBLUETOOTH_GATT_VALUE_CHANGED_EVENT_REGISTRATION
+ = *mut BLUETOOTH_GATT_VALUE_CHANGED_EVENT_REGISTRATION;
+STRUCT!{struct BLUETOOTH_GATT_VALUE_CHANGED_EVENT {
+ ChangedAttributeHandle: USHORT,
+ CharacteristicValueDataSize: usize,
+ CharacteristicValue: PBTH_LE_GATT_CHARACTERISTIC_VALUE,
+}}
+pub type PBLUETOOTH_GATT_VALUE_CHANGED_EVENT = *mut BLUETOOTH_GATT_VALUE_CHANGED_EVENT;
+pub type BTH_LE_GATT_RELIABLE_WRITE_CONTEXT = ULONG64;
+pub type PBTH_LE_GATT_RELIABLE_WRITE_CONTEXT = *mut ULONG64;
+#[inline]
+pub fn IsBthLEUuidMatch(uuid1: &BTH_LE_UUID, uuid2: &BTH_LE_UUID) -> bool {
+ fn is_bluetooth_le_uuid(uuid: &GUID) -> bool {
+ uuid.Data2 == BTH_LE_ATT_BLUETOOTH_BASE_GUID.Data2
+ && uuid.Data3 == BTH_LE_ATT_BLUETOOTH_BASE_GUID.Data3
+ && uuid.Data4 == BTH_LE_ATT_BLUETOOTH_BASE_GUID.Data4
+ }
+ unsafe { match (uuid1.IsShortUuid != 0, uuid2.IsShortUuid != 0) {
+ (true, true) => uuid1.Value.ShortUuid() == uuid2.Value.ShortUuid(),
+ (false, false) => IsEqualGUID(uuid1.Value.LongUuid(), uuid2.Value.LongUuid()),
+ (true, false) => is_bluetooth_le_uuid(uuid2.Value.LongUuid())
+ && ((*uuid1.Value.ShortUuid()) as u32) == uuid2.Value.LongUuid().Data1,
+ (false, true) => is_bluetooth_le_uuid(uuid1.Value.LongUuid())
+ && ((*uuid2.Value.ShortUuid()) as u32) == uuid1.Value.LongUuid().Data1,
+ }}
+}
diff --git a/vendor/winapi/src/um/cfgmgr32.rs b/vendor/winapi/src/um/cfgmgr32.rs
new file mode 100644
index 000000000..2c4c7f39f
--- /dev/null
+++ b/vendor/winapi/src/um/cfgmgr32.rs
@@ -0,0 +1,2077 @@
+// 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.
+//! user APIs for the Configuration Manager
+use shared::basetsd::{DWORD_PTR, ULONG32, ULONG64, ULONG_PTR};
+use shared::cfg::PPNP_VETO_TYPE;
+use shared::devpropdef::{DEVPROPKEY, DEVPROPTYPE};
+use shared::guiddef::{GUID, LPGUID};
+use shared::minwindef::{BOOL, BYTE, DWORD, MAX_PATH, PBOOL, PBYTE, PHKEY, PULONG, ULONG, WORD};
+use um::winnt::{
+ ANYSIZE_ARRAY, CHAR, DWORDLONG, HANDLE, LARGE_INTEGER, LONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR,
+ PCHAR, PCSTR, PCWSTR, PDWORDLONG, PSTR, PVOID, PWCHAR, PWSTR, ULONGLONG, VOID, WCHAR
+};
+use um::winreg::REGSAM;
+pub type PCVOID = *const VOID;
+pub const MAX_DEVICE_ID_LEN: usize = 200;
+pub const MAX_DEVNODE_ID_LEN: usize = MAX_DEVICE_ID_LEN;
+pub const MAX_GUID_STRING_LEN: usize = 39;
+pub const MAX_CLASS_NAME_LEN: usize = 32;
+pub const MAX_PROFILE_LEN: usize = 80;
+pub const MAX_CONFIG_VALUE: DWORD = 9999;
+pub const MAX_INSTANCE_VALUE: DWORD = 9999;
+pub const MAX_MEM_REGISTERS: DWORD = 9;
+pub const MAX_IO_PORTS: DWORD = 20;
+pub const MAX_IRQS: DWORD = 7;
+pub const MAX_DMA_CHANNELS: DWORD = 7;
+pub const DWORD_MAX: DWORD = 0xffffffff;
+pub const DWORDLONG_MAX: DWORDLONG = 0xffffffffffffffff;
+pub const CONFIGMG_VERSION: DWORD = 0x0400;
+pub type RETURN_TYPE = DWORD;
+pub type CONFIGRET = RETURN_TYPE;
+pub type DEVNODE = DWORD;
+pub type DEVINST = DWORD;
+pub type PDEVNODE = *mut DEVNODE;
+pub type PDEVINST = *mut DEVNODE;
+pub type DEVNODEID_A = *mut CHAR;
+pub type DEVINSTID_A = *mut CHAR;
+pub type DEVNODEID_W = *mut WCHAR;
+pub type DEVINSTID_W = *mut WCHAR;
+pub type LOG_CONF = DWORD_PTR;
+pub type PLOG_CONF = *mut LOG_CONF;
+pub type RES_DES = DWORD_PTR;
+pub type PRES_DES = *mut RES_DES;
+pub type RESOURCEID = ULONG;
+pub type PRESOURCEID = *mut RESOURCEID;
+pub type PRIORITY = ULONG;
+pub type PPRIORITY = *mut PRIORITY;
+pub type RANGE_LIST = DWORD_PTR;
+pub type PRANGE_LIST = *mut RANGE_LIST;
+pub type RANGE_ELEMENT = DWORD_PTR;
+pub type PRANGE_ELEMENT = *mut RANGE_ELEMENT;
+pub type HMACHINE = HANDLE;
+pub type PHMACHINE = *mut HMACHINE;
+pub type CONFLICT_LIST = ULONG_PTR;
+pub type PCONFLICT_LIST = *mut CONFLICT_LIST;
+STRUCT!{struct CONFLICT_DETAILS_A {
+ CD_ulSize: ULONG,
+ CD_ulMask: ULONG,
+ CD_dnDevInst: DEVINST,
+ CD_rdResDes: RES_DES,
+ CD_ulFlags: ULONG,
+ CD_szDescription: [CHAR; MAX_PATH],
+}}
+pub type PCONFLICT_DETAILS_A = *mut CONFLICT_DETAILS_A;
+STRUCT!{struct CONFLICT_DETAILS_W {
+ CD_ulSize: ULONG,
+ CD_ulMask: ULONG,
+ CD_dnDevInst: DEVINST,
+ CD_rdResDes: RES_DES,
+ CD_ulFlags: ULONG,
+ CD_szDescription: [WCHAR; MAX_PATH],
+}}
+pub type PCONFLICT_DETAILS_W = *mut CONFLICT_DETAILS_W;
+pub const CM_CDMASK_DEVINST: ULONG = 0x00000001;
+pub const CM_CDMASK_RESDES: ULONG = 0x00000002;
+pub const CM_CDMASK_FLAGS: ULONG = 0x00000004;
+pub const CM_CDMASK_DESCRIPTION: ULONG = 0x00000008;
+pub const CM_CDMASK_VALID: ULONG = 0x0000000F;
+pub const CM_CDFLAGS_DRIVER: ULONG = 0x00000001;
+pub const CM_CDFLAGS_ROOT_OWNED: ULONG = 0x00000002;
+pub const CM_CDFLAGS_RESERVED: ULONG = 0x00000004;
+pub type REGDISPOSITION = ULONG;
+pub const mMD_MemoryType: DWORD = 0x1;
+pub const fMD_MemoryType: DWORD = mMD_MemoryType;
+pub const fMD_ROM: DWORD = 0x0;
+pub const fMD_RAM: DWORD = 0x1;
+pub const mMD_32_24: DWORD = 0x2;
+pub const fMD_32_24: DWORD = mMD_32_24;
+pub const fMD_24: DWORD = 0x0;
+pub const fMD_32: DWORD = 0x2;
+pub const mMD_Prefetchable: DWORD = 0x4;
+pub const fMD_Prefetchable: DWORD = mMD_Prefetchable;
+pub const fMD_Pref: DWORD = mMD_Prefetchable;
+pub const fMD_PrefetchDisallowed: DWORD = 0x0;
+pub const fMD_PrefetchAllowed: DWORD = 0x4;
+pub const mMD_Readable: DWORD = 0x8;
+pub const fMD_Readable: DWORD = mMD_Readable;
+pub const fMD_ReadAllowed: DWORD = 0x0;
+pub const fMD_ReadDisallowed: DWORD = 0x8;
+pub const mMD_CombinedWrite: DWORD = 0x10;
+pub const fMD_CombinedWrite: DWORD = mMD_CombinedWrite;
+pub const fMD_CombinedWriteDisallowed: DWORD = 0x0;
+pub const fMD_CombinedWriteAllowed: DWORD = 0x10;
+pub const mMD_Cacheable: DWORD = 0x20;
+pub const fMD_NonCacheable: DWORD = 0x0;
+pub const fMD_Cacheable: DWORD = 0x20;
+pub const fMD_WINDOW_DECODE: DWORD = 0x40;
+pub const fMD_MEMORY_BAR: DWORD = 0x80;
+STRUCT!{#[repr(packed)] struct MEM_RANGE {
+ MR_Align: DWORDLONG,
+ MR_nBytes: ULONG,
+ MR_Min: DWORDLONG,
+ MR_Max: DWORDLONG,
+ MR_Flags: DWORD,
+ MR_Reserved: DWORD,
+}}
+pub type PMEM_RANGE = *mut MEM_RANGE;
+STRUCT!{#[repr(packed)] struct MEM_DES {
+ MD_Count: DWORD,
+ MD_Type: DWORD,
+ MD_Alloc_Base: DWORDLONG,
+ MD_Alloc_End: DWORDLONG,
+ MD_Flags: DWORD,
+ MD_Reserved: DWORD,
+}}
+pub type PMEM_DES = *mut MEM_DES;
+STRUCT!{#[repr(packed)] struct MEM_RESOURCE {
+ MEM_Header: MEM_DES,
+ MEM_Data: [MEM_RANGE; ANYSIZE_ARRAY],
+}}
+pub type PMEM_RESOURCE = *mut MEM_RESOURCE;
+STRUCT!{#[repr(packed)] struct MEM_LARGE_RANGE {
+ MLR_Align: DWORDLONG,
+ MLR_nBytes: ULONGLONG,
+ MLR_Min: DWORDLONG,
+ MLR_Max: DWORDLONG,
+ MLR_Flags: DWORD,
+ MLR_Reserved: DWORD,
+}}
+pub type PMEM_LARGE_RANGE = *mut MEM_LARGE_RANGE;
+STRUCT!{#[repr(packed)] struct MEM_LARGE_DES {
+ MLD_Count: DWORD,
+ MLD_Type: DWORD,
+ MLD_Alloc_Base: DWORDLONG,
+ MLD_Alloc_End: DWORDLONG,
+ MLD_Flags: DWORD,
+ MLD_Reserved: DWORD,
+}}
+pub type PMEM_LARGE_DES = *mut MEM_LARGE_DES;
+STRUCT!{#[repr(packed)] struct MEM_LARGE_RESOURCE {
+ MEM_LARGE_Header: MEM_LARGE_DES,
+ MEM_LARGE_Data: [MEM_LARGE_RANGE; ANYSIZE_ARRAY],
+}}
+pub type PMEM_LARGE_RESOURCE = *mut MEM_LARGE_RESOURCE;
+pub const fIOD_PortType: DWORD = 0x1;
+pub const fIOD_Memory: DWORD = 0x0;
+pub const fIOD_IO: DWORD = 0x1;
+pub const fIOD_DECODE: DWORD = 0x00fc;
+pub const fIOD_10_BIT_DECODE: DWORD = 0x0004;
+pub const fIOD_12_BIT_DECODE: DWORD = 0x0008;
+pub const fIOD_16_BIT_DECODE: DWORD = 0x0010;
+pub const fIOD_POSITIVE_DECODE: DWORD = 0x0020;
+pub const fIOD_PASSIVE_DECODE: DWORD = 0x0040;
+pub const fIOD_WINDOW_DECODE: DWORD = 0x0080;
+pub const fIOD_PORT_BAR: DWORD = 0x0100;
+pub const IO_ALIAS_10_BIT_DECODE: DWORDLONG = 0x00000004;
+pub const IO_ALIAS_12_BIT_DECODE: DWORDLONG = 0x00000010;
+pub const IO_ALIAS_16_BIT_DECODE: DWORDLONG = 0x00000000;
+pub const IO_ALIAS_POSITIVE_DECODE: DWORDLONG = 0x000000FF;
+STRUCT!{#[repr(packed)] struct IO_RANGE {
+ IOR_Align: DWORDLONG,
+ IOR_nPorts: DWORD,
+ IOR_Min: DWORDLONG,
+ IOR_Max: DWORDLONG,
+ IOR_RangeFlags: DWORD,
+ IOR_Alias: DWORDLONG,
+}}
+pub type PIO_RANGE = *mut IO_RANGE;
+STRUCT!{#[repr(packed)] struct IO_DES {
+ IOD_Count: DWORD,
+ IOD_Type: DWORD,
+ IOD_Alloc_Base: DWORDLONG,
+ IOD_Alloc_End: DWORDLONG,
+ IOD_DesFlags: DWORD,
+}}
+pub type PIO_DES = *mut IO_DES;
+STRUCT!{#[repr(packed)] struct IO_RESOURCE {
+ IO_Header: IO_DES,
+ IO_Data: [IO_RANGE; ANYSIZE_ARRAY],
+}}
+pub type PIO_RESOURCE = *mut IO_RESOURCE;
+pub const mDD_Width: ULONG = 0x3;
+pub const fDD_BYTE: ULONG = 0x0;
+pub const fDD_WORD: ULONG = 0x1;
+pub const fDD_DWORD: ULONG = 0x2;
+pub const fDD_BYTE_AND_WORD: ULONG = 0x3;
+pub const mDD_BusMaster: ULONG = 0x4;
+pub const fDD_NoBusMaster: ULONG = 0x0;
+pub const fDD_BusMaster: ULONG = 0x4;
+pub const mDD_Type: ULONG = 0x18;
+pub const fDD_TypeStandard: ULONG = 0x00;
+pub const fDD_TypeA: ULONG = 0x08;
+pub const fDD_TypeB: ULONG = 0x10;
+pub const fDD_TypeF: ULONG = 0x18;
+STRUCT!{#[repr(packed)] struct DMA_RANGE {
+ DR_Min: ULONG,
+ DR_Max: ULONG,
+ DR_Flags: ULONG,
+}}
+pub type PDMA_RANGE = *mut DMA_RANGE;
+STRUCT!{#[repr(packed)] struct DMA_DES {
+ DD_Count: DWORD,
+ DD_Type: DWORD,
+ DD_Flags: DWORD,
+ DD_Alloc_Chan: ULONG,
+}}
+pub type PDMA_DES = *mut DMA_DES;
+STRUCT!{#[repr(packed)] struct DMA_RESOURCE {
+ DMA_Header: DMA_DES,
+ DMA_Data: [DMA_RANGE; ANYSIZE_ARRAY],
+}}
+pub type PDMA_RESOURCE = *mut DMA_RESOURCE;
+pub const mIRQD_Share: ULONG = 0x1;
+pub const fIRQD_Exclusive: ULONG = 0x0;
+pub const fIRQD_Share: ULONG = 0x1;
+pub const fIRQD_Share_Bit: ULONG = 0;
+pub const fIRQD_Level_Bit: ULONG = 1;
+pub const mIRQD_Edge_Level: ULONG = 0x2;
+pub const fIRQD_Level: ULONG = 0x0;
+pub const fIRQD_Edge: ULONG = 0x2;
+STRUCT!{#[repr(packed)] struct IRQ_RANGE {
+ IRQR_Min: ULONG,
+ IRQR_Max: ULONG,
+ IRQR_Flags: ULONG,
+}}
+pub type PIRQ_RANGE = *mut IRQ_RANGE;
+STRUCT!{#[repr(packed)] struct IRQ_DES_32 {
+ IRQD_Count: DWORD,
+ IRQD_Type: DWORD,
+ IRQD_Flags: DWORD,
+ IRQD_Alloc_Num: ULONG,
+ IRQD_Affinity: ULONG32,
+}}
+pub type PIRQ_DES_32 = *mut IRQ_DES_32;
+STRUCT!{#[repr(packed)] struct IRQ_DES_64 {
+ IRQD_Count: DWORD,
+ IRQD_Type: DWORD,
+ IRQD_Flags: DWORD,
+ IRQD_Alloc_Num: ULONG,
+ IRQD_Affinity: ULONG64,
+}}
+pub type PIRQ_DES_64 = *mut IRQ_DES_64;
+STRUCT!{#[repr(packed)] struct IRQ_RESOURCE_32 {
+ IRQ_Header: IRQ_DES_32,
+ IRQ_Data: [IRQ_RANGE; ANYSIZE_ARRAY],
+}}
+pub type PIRQ_RESOURCE_32 = *mut IRQ_RESOURCE_32;
+STRUCT!{#[repr(packed)] struct IRQ_RESOURCE_64 {
+ IRQ_Header: IRQ_DES_64,
+ IRQ_Data: [IRQ_RANGE; ANYSIZE_ARRAY],
+}}
+pub type PIRQ_RESOURCE_64 = *mut IRQ_RESOURCE_64;
+STRUCT!{#[repr(packed)] struct DEVPRIVATE_RANGE {
+ PR_Data1: DWORD,
+ PR_Data2: DWORD,
+ PR_Data3: DWORD,
+}}
+pub type PDEVPRIVATE_RANGE = *mut DEVPRIVATE_RANGE;
+STRUCT!{#[repr(packed)] struct DEVPRIVATE_DES {
+ PD_Count: DWORD,
+ PD_Type: DWORD,
+ PD_Data1: DWORD,
+ PD_Data2: DWORD,
+ PD_Data3: DWORD,
+ PD_Flags: DWORD,
+}}
+pub type PDEVPRIVATE_DES = *mut DEVPRIVATE_DES;
+STRUCT!{#[repr(packed)] struct DEVPRIVATE_RESOURCE {
+ PRV_Header: DEVPRIVATE_DES,
+ PRV_Data: [DEVPRIVATE_RANGE; ANYSIZE_ARRAY],
+}}
+pub type PDEVPRIVATE_RESOURCE = *mut DEVPRIVATE_RESOURCE;
+STRUCT!{#[repr(packed)] struct CS_DES {
+ CSD_SignatureLength: DWORD,
+ CSD_LegacyDataOffset: DWORD,
+ CSD_LegacyDataSize: DWORD,
+ CSD_Flags: DWORD,
+ CSD_ClassGuid: GUID,
+ CSD_Signature: [BYTE; ANYSIZE_ARRAY],
+}}
+pub type PCS_DES = *mut CS_DES;
+STRUCT!{#[repr(packed)] struct CS_RESOURCE {
+ CS_Header: CS_DES,
+}}
+pub type PCS_RESOURCE = *mut CS_RESOURCE;
+pub const mPCD_IO_8_16: DWORD = 0x1;
+pub const fPCD_IO_8: DWORD = 0x0;
+pub const fPCD_IO_16: DWORD = 0x1;
+pub const mPCD_MEM_8_16: DWORD = 0x2;
+pub const fPCD_MEM_8: DWORD = 0x0;
+pub const fPCD_MEM_16: DWORD = 0x2;
+pub const mPCD_MEM_A_C: DWORD = 0xC;
+pub const fPCD_MEM1_A: DWORD = 0x4;
+pub const fPCD_MEM2_A: DWORD = 0x8;
+pub const fPCD_IO_ZW_8: DWORD = 0x10;
+pub const fPCD_IO_SRC_16: DWORD = 0x20;
+pub const fPCD_IO_WS_16: DWORD = 0x40;
+pub const mPCD_MEM_WS: DWORD = 0x300;
+pub const fPCD_MEM_WS_ONE: DWORD = 0x100;
+pub const fPCD_MEM_WS_TWO: DWORD = 0x200;
+pub const fPCD_MEM_WS_THREE: DWORD = 0x300;
+pub const fPCD_MEM_A: DWORD = 0x4;
+pub const fPCD_ATTRIBUTES_PER_WINDOW: DWORD = 0x8000;
+pub const fPCD_IO1_16: DWORD = 0x00010000;
+pub const fPCD_IO1_ZW_8: DWORD = 0x00020000;
+pub const fPCD_IO1_SRC_16: DWORD = 0x00040000;
+pub const fPCD_IO1_WS_16: DWORD = 0x00080000;
+pub const fPCD_IO2_16: DWORD = 0x00100000;
+pub const fPCD_IO2_ZW_8: DWORD = 0x00200000;
+pub const fPCD_IO2_SRC_16: DWORD = 0x00400000;
+pub const fPCD_IO2_WS_16: DWORD = 0x00800000;
+pub const mPCD_MEM1_WS: DWORD = 0x03000000;
+pub const fPCD_MEM1_WS_TWO: DWORD = 0x02000000;
+pub const fPCD_MEM1_WS_THREE: DWORD = 0x03000000;
+pub const fPCD_MEM1_16: DWORD = 0x04000000;
+pub const mPCD_MEM2_WS: DWORD = 0x30000000;
+pub const fPCD_MEM2_WS_ONE: DWORD = 0x10000000;
+pub const fPCD_MEM2_WS_TWO: DWORD = 0x20000000;
+pub const fPCD_MEM2_WS_THREE: DWORD = 0x30000000;
+pub const fPCD_MEM2_16: DWORD = 0x40000000;
+pub const PCD_MAX_MEMORY: usize = 2;
+pub const PCD_MAX_IO: usize = 2;
+STRUCT!{#[repr(packed)] struct PCCARD_DES {
+ PCD_Count: DWORD,
+ PCD_Type: DWORD,
+ PCD_Flags: DWORD,
+ PCD_ConfigIndex: BYTE,
+ PCD_Reserved: [BYTE; 3],
+ PCD_MemoryCardBase1: DWORD,
+ PCD_MemoryCardBase2: DWORD,
+ PCD_MemoryCardBase: [DWORD; PCD_MAX_MEMORY],
+ PCD_MemoryFlags: [WORD; PCD_MAX_MEMORY],
+ PCD_IoFlags: [BYTE; PCD_MAX_IO],
+}}
+pub type PPCCARD_DES = *mut PCCARD_DES;
+STRUCT!{#[repr(packed)] struct PCCARD_RESOURCE {
+ PcCard_Header: PCCARD_DES,
+}}
+pub type PPCCARD_RESOURCE = *mut PCCARD_RESOURCE;
+pub const mPMF_AUDIO_ENABLE: DWORD = 0x8;
+pub const fPMF_AUDIO_ENABLE: DWORD = 0x8;
+STRUCT!{#[repr(packed)] struct MFCARD_DES {
+ PMF_Count: DWORD,
+ PMF_Type: DWORD,
+ PMF_Flags: DWORD,
+ PMF_ConfigOptions: BYTE,
+ PMF_IoResourceIndex: BYTE,
+ PMF_Reserved: [BYTE; 2],
+ PMF_ConfigRegisterBase: DWORD,
+}}
+pub type PMFCARD_DES = *mut MFCARD_DES;
+STRUCT!{#[repr(packed)] struct MFCARD_RESOURCE {
+ MfCard_Header: MFCARD_DES,
+}}
+pub type PMFCARD_RESOURCE = *mut MFCARD_RESOURCE;
+STRUCT!{#[repr(packed)] struct BUSNUMBER_RANGE {
+ BUSR_Min: ULONG,
+ BUSR_Max: ULONG,
+ BUSR_nBusNumbers: ULONG,
+ BUSR_Flags: ULONG,
+}}
+pub type PBUSNUMBER_RANGE = *mut BUSNUMBER_RANGE;
+STRUCT!{#[repr(packed)] struct BUSNUMBER_DES {
+ BUSD_Count: DWORD,
+ BUSD_Type: DWORD,
+ BUSD_Flags: DWORD,
+ BUSD_Alloc_Base: ULONG,
+ BUSD_Alloc_End: ULONG,
+}}
+pub type PBUSNUMBER_DES = *mut BUSNUMBER_DES;
+STRUCT!{#[repr(packed)] struct BUSNUMBER_RESOURCE {
+ BusNumber_Header: BUSNUMBER_DES,
+ BusNumber_Data: [BUSNUMBER_RANGE; ANYSIZE_ARRAY],
+}}
+pub type PBUSNUMBER_RESOURCE = *mut BUSNUMBER_RESOURCE;
+STRUCT!{#[repr(packed)] struct CONNECTION_DES {
+ COND_Type: DWORD,
+ COND_Flags: DWORD,
+ COND_Class: BYTE,
+ COND_ClassType: BYTE,
+ COND_Reserved1: BYTE,
+ COND_Reserved2: BYTE,
+ COND_Id: LARGE_INTEGER,
+}}
+pub type PCONNECTION_DES = *mut CONNECTION_DES;
+STRUCT!{#[repr(packed)] struct CONNECTION_RESOURCE {
+ Connection_Header: CONNECTION_DES,
+}}
+pub type PCONNECTION_RESOURCE = *mut CONNECTION_RESOURCE;
+pub const CM_HWPI_NOT_DOCKABLE: DWORD = 0x00000000;
+pub const CM_HWPI_UNDOCKED: DWORD = 0x00000001;
+pub const CM_HWPI_DOCKED: DWORD = 0x00000002;
+STRUCT!{#[repr(packed)] struct HWPROFILEINFO_A {
+ HWPI_ulHWProfile: ULONG,
+ HWPI_szFriendlyName: [CHAR; MAX_PROFILE_LEN],
+ HWPI_dwFlags: DWORD,
+}}
+pub type PHWPROFILEINFO_A = *mut HWPROFILEINFO_A;
+STRUCT!{#[repr(packed)] struct HWPROFILEINFO_W {
+ HWPI_ulHWProfile: ULONG,
+ HWPI_szFriendlyName: [WCHAR; MAX_PROFILE_LEN],
+ HWPI_dwFlags: DWORD,
+}}
+pub type PHWPROFILEINFO_W = *mut HWPROFILEINFO_W;
+pub const ResType_All: RESOURCEID = 0x00000000;
+pub const ResType_None: RESOURCEID = 0x00000000;
+pub const ResType_Mem: RESOURCEID = 0x00000001;
+pub const ResType_IO: RESOURCEID = 0x00000002;
+pub const ResType_DMA: RESOURCEID = 0x00000003;
+pub const ResType_IRQ: RESOURCEID = 0x00000004;
+pub const ResType_DoNotUse: RESOURCEID = 0x00000005;
+pub const ResType_BusNumber: RESOURCEID = 0x00000006;
+pub const ResType_MemLarge: RESOURCEID = 0x00000007;
+pub const ResType_MAX: RESOURCEID = 0x00000007;
+pub const ResType_Ignored_Bit: RESOURCEID = 0x00008000;
+pub const ResType_ClassSpecific: RESOURCEID = 0x0000FFFF;
+pub const ResType_Reserved: RESOURCEID = 0x00008000;
+pub const ResType_DevicePrivate: RESOURCEID = 0x00008001;
+pub const ResType_PcCardConfig: RESOURCEID = 0x00008002;
+pub const ResType_MfCardConfig: RESOURCEID = 0x00008003;
+pub const ResType_Connection: RESOURCEID = 0x00008004;
+pub const CM_ADD_RANGE_ADDIFCONFLICT: ULONG = 0x00000000;
+pub const CM_ADD_RANGE_DONOTADDIFCONFLICT: ULONG = 0x00000001;
+pub const CM_ADD_RANGE_BITS: ULONG = 0x00000001;
+pub const BASIC_LOG_CONF: ULONG = 0x00000000;
+pub const FILTERED_LOG_CONF: ULONG = 0x00000001;
+pub const ALLOC_LOG_CONF: ULONG = 0x00000002;
+pub const BOOT_LOG_CONF: ULONG = 0x00000003;
+pub const FORCED_LOG_CONF: ULONG = 0x00000004;
+pub const OVERRIDE_LOG_CONF: ULONG = 0x00000005;
+pub const NUM_LOG_CONF: ULONG = 0x00000006;
+pub const LOG_CONF_BITS: ULONG = 0x00000007;
+pub const PRIORITY_EQUAL_FIRST: ULONG = 0x00000008;
+pub const PRIORITY_EQUAL_LAST: ULONG = 0x00000000;
+pub const PRIORITY_BIT: ULONG = 0x00000008;
+pub const RegDisposition_OpenAlways: REGDISPOSITION = 0x00000000;
+pub const RegDisposition_OpenExisting: REGDISPOSITION = 0x00000001;
+pub const RegDisposition_Bits: REGDISPOSITION = 0x00000001;
+pub const CM_ADD_ID_HARDWARE: ULONG = 0x00000000;
+pub const CM_ADD_ID_COMPATIBLE: ULONG = 0x00000001;
+pub const CM_ADD_ID_BITS: ULONG = 0x00000001;
+pub const CM_CREATE_DEVNODE_NORMAL: ULONG = 0x00000000;
+pub const CM_CREATE_DEVNODE_NO_WAIT_INSTALL: ULONG = 0x00000001;
+pub const CM_CREATE_DEVNODE_PHANTOM: ULONG = 0x00000002;
+pub const CM_CREATE_DEVNODE_GENERATE_ID: ULONG = 0x00000004;
+pub const CM_CREATE_DEVNODE_DO_NOT_INSTALL: ULONG = 0x00000008;
+pub const CM_CREATE_DEVNODE_BITS: ULONG = 0x0000000F;
+pub const CM_CREATE_DEVINST_NORMAL: ULONG = CM_CREATE_DEVNODE_NORMAL;
+pub const CM_CREATE_DEVINST_NO_WAIT_INSTALL: ULONG = CM_CREATE_DEVNODE_NO_WAIT_INSTALL;
+pub const CM_CREATE_DEVINST_PHANTOM: ULONG = CM_CREATE_DEVNODE_PHANTOM;
+pub const CM_CREATE_DEVINST_GENERATE_ID: ULONG = CM_CREATE_DEVNODE_GENERATE_ID;
+pub const CM_CREATE_DEVINST_DO_NOT_INSTALL: ULONG = CM_CREATE_DEVNODE_DO_NOT_INSTALL;
+pub const CM_CREATE_DEVINST_BITS: ULONG = CM_CREATE_DEVNODE_BITS;
+pub const CM_DELETE_CLASS_ONLY: ULONG = 0x00000000;
+pub const CM_DELETE_CLASS_SUBKEYS: ULONG = 0x00000001;
+pub const CM_DELETE_CLASS_INTERFACE: ULONG = 0x00000002;
+pub const CM_DELETE_CLASS_BITS: ULONG = 0x00000003;
+pub const CM_ENUMERATE_CLASSES_INSTALLER: ULONG = 0x00000000;
+pub const CM_ENUMERATE_CLASSES_INTERFACE: ULONG = 0x00000001;
+pub const CM_ENUMERATE_CLASSES_BITS: ULONG = 0x00000001;
+pub const CM_DETECT_NEW_PROFILE: ULONG = 0x00000001;
+pub const CM_DETECT_CRASHED: ULONG = 0x00000002;
+pub const CM_DETECT_HWPROF_FIRST_BOOT: ULONG = 0x00000004;
+pub const CM_DETECT_RUN: ULONG = 0x80000000;
+pub const CM_DETECT_BITS: ULONG = 0x80000007;
+pub const CM_DISABLE_POLITE: ULONG = 0x00000000;
+pub const CM_DISABLE_ABSOLUTE: ULONG = 0x00000001;
+pub const CM_DISABLE_HARDWARE: ULONG = 0x00000002;
+pub const CM_DISABLE_UI_NOT_OK: ULONG = 0x00000004;
+pub const CM_DISABLE_BITS: ULONG = 0x00000007;
+pub const CM_GETIDLIST_FILTER_NONE: ULONG = 0x00000000;
+pub const CM_GETIDLIST_FILTER_ENUMERATOR: ULONG = 0x00000001;
+pub const CM_GETIDLIST_FILTER_SERVICE: ULONG = 0x00000002;
+pub const CM_GETIDLIST_FILTER_EJECTRELATIONS: ULONG = 0x00000004;
+pub const CM_GETIDLIST_FILTER_REMOVALRELATIONS: ULONG = 0x00000008;
+pub const CM_GETIDLIST_FILTER_POWERRELATIONS: ULONG = 0x00000010;
+pub const CM_GETIDLIST_FILTER_BUSRELATIONS: ULONG = 0x00000020;
+pub const CM_GETIDLIST_DONOTGENERATE: ULONG = 0x10000040;
+pub const CM_GETIDLIST_FILTER_TRANSPORTRELATIONS: ULONG = 0x00000080;
+pub const CM_GETIDLIST_FILTER_PRESENT: ULONG = 0x00000100;
+pub const CM_GETIDLIST_FILTER_CLASS: ULONG = 0x00000200;
+pub const CM_GETIDLIST_FILTER_BITS: ULONG = 0x100003FF;
+pub const CM_GET_DEVICE_INTERFACE_LIST_PRESENT: ULONG = 0x00000000;
+pub const CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES: ULONG = 0x00000001;
+pub const CM_GET_DEVICE_INTERFACE_LIST_BITS: ULONG = 0x00000001;
+pub const CM_DRP_DEVICEDESC: ULONG = 0x00000001;
+pub const CM_DRP_HARDWAREID: ULONG = 0x00000002;
+pub const CM_DRP_COMPATIBLEIDS: ULONG = 0x00000003;
+pub const CM_DRP_UNUSED0: ULONG = 0x00000004;
+pub const CM_DRP_SERVICE: ULONG = 0x00000005;
+pub const CM_DRP_UNUSED1: ULONG = 0x00000006;
+pub const CM_DRP_UNUSED2: ULONG = 0x00000007;
+pub const CM_DRP_CLASS: ULONG = 0x00000008;
+pub const CM_DRP_CLASSGUID: ULONG = 0x00000009;
+pub const CM_DRP_DRIVER: ULONG = 0x0000000A;
+pub const CM_DRP_CONFIGFLAGS: ULONG = 0x0000000B;
+pub const CM_DRP_MFG: ULONG = 0x0000000C;
+pub const CM_DRP_FRIENDLYNAME: ULONG = 0x0000000D;
+pub const CM_DRP_LOCATION_INFORMATION: ULONG = 0x0000000E;
+pub const CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME: ULONG = 0x0000000F;
+pub const CM_DRP_CAPABILITIES: ULONG = 0x00000010;
+pub const CM_DRP_UI_NUMBER: ULONG = 0x00000011;
+pub const CM_DRP_UPPERFILTERS: ULONG = 0x00000012;
+pub const CM_CRP_UPPERFILTERS: ULONG = CM_DRP_UPPERFILTERS;
+pub const CM_DRP_LOWERFILTERS: ULONG = 0x00000013;
+pub const CM_CRP_LOWERFILTERS: ULONG = CM_DRP_LOWERFILTERS;
+pub const CM_DRP_BUSTYPEGUID: ULONG = 0x00000014;
+pub const CM_DRP_LEGACYBUSTYPE: ULONG = 0x00000015;
+pub const CM_DRP_BUSNUMBER: ULONG = 0x00000016;
+pub const CM_DRP_ENUMERATOR_NAME: ULONG = 0x00000017;
+pub const CM_DRP_SECURITY: ULONG = 0x00000018;
+pub const CM_CRP_SECURITY: ULONG = CM_DRP_SECURITY;
+pub const CM_DRP_SECURITY_SDS: ULONG = 0x00000019;
+pub const CM_CRP_SECURITY_SDS: ULONG = CM_DRP_SECURITY_SDS;
+pub const CM_DRP_DEVTYPE: ULONG = 0x0000001A;
+pub const CM_CRP_DEVTYPE: ULONG = CM_DRP_DEVTYPE;
+pub const CM_DRP_EXCLUSIVE: ULONG = 0x0000001B;
+pub const CM_CRP_EXCLUSIVE: ULONG = CM_DRP_EXCLUSIVE;
+pub const CM_DRP_CHARACTERISTICS: ULONG = 0x0000001C;
+pub const CM_CRP_CHARACTERISTICS: ULONG = CM_DRP_CHARACTERISTICS;
+pub const CM_DRP_ADDRESS: ULONG = 0x0000001D;
+pub const CM_DRP_UI_NUMBER_DESC_FORMAT: ULONG = 0x0000001E;
+pub const CM_DRP_DEVICE_POWER_DATA: ULONG = 0x0000001F;
+pub const CM_DRP_REMOVAL_POLICY: ULONG = 0x00000020;
+pub const CM_DRP_REMOVAL_POLICY_HW_DEFAULT: ULONG = 0x00000021;
+pub const CM_DRP_REMOVAL_POLICY_OVERRIDE: ULONG = 0x00000022;
+pub const CM_DRP_INSTALL_STATE: ULONG = 0x00000023;
+pub const CM_DRP_LOCATION_PATHS: ULONG = 0x00000024;
+pub const CM_DRP_BASE_CONTAINERID: ULONG = 0x00000025;
+pub const CM_DRP_MIN: ULONG = 0x00000001;
+pub const CM_CRP_MIN: ULONG = CM_DRP_MIN;
+pub const CM_DRP_MAX: ULONG = 0x00000025;
+pub const CM_CRP_MAX: ULONG = CM_DRP_MAX;
+pub const CM_DEVCAP_LOCKSUPPORTED: ULONG = 0x00000001;
+pub const CM_DEVCAP_EJECTSUPPORTED: ULONG = 0x00000002;
+pub const CM_DEVCAP_REMOVABLE: ULONG = 0x00000004;
+pub const CM_DEVCAP_DOCKDEVICE: ULONG = 0x00000008;
+pub const CM_DEVCAP_UNIQUEID: ULONG = 0x00000010;
+pub const CM_DEVCAP_SILENTINSTALL: ULONG = 0x00000020;
+pub const CM_DEVCAP_RAWDEVICEOK: ULONG = 0x00000040;
+pub const CM_DEVCAP_SURPRISEREMOVALOK: ULONG = 0x00000080;
+pub const CM_DEVCAP_HARDWAREDISABLED: ULONG = 0x00000100;
+pub const CM_DEVCAP_NONDYNAMIC: ULONG = 0x00000200;
+pub const CM_REMOVAL_POLICY_EXPECT_NO_REMOVAL: ULONG = 1;
+pub const CM_REMOVAL_POLICY_EXPECT_ORDERLY_REMOVAL: ULONG = 2;
+pub const CM_REMOVAL_POLICY_EXPECT_SURPRISE_REMOVAL: ULONG = 3;
+pub const CM_INSTALL_STATE_INSTALLED: ULONG = 0;
+pub const CM_INSTALL_STATE_NEEDS_REINSTALL: ULONG = 1;
+pub const CM_INSTALL_STATE_FAILED_INSTALL: ULONG = 2;
+pub const CM_INSTALL_STATE_FINISH_INSTALL: ULONG = 3;
+pub const CM_LOCATE_DEVNODE_NORMAL: ULONG = 0x00000000;
+pub const CM_LOCATE_DEVNODE_PHANTOM: ULONG = 0x00000001;
+pub const CM_LOCATE_DEVNODE_CANCELREMOVE: ULONG = 0x00000002;
+pub const CM_LOCATE_DEVNODE_NOVALIDATION: ULONG = 0x00000004;
+pub const CM_LOCATE_DEVNODE_BITS: ULONG = 0x00000007;
+pub const CM_LOCATE_DEVINST_NORMAL: ULONG = CM_LOCATE_DEVNODE_NORMAL;
+pub const CM_LOCATE_DEVINST_PHANTOM: ULONG = CM_LOCATE_DEVNODE_PHANTOM;
+pub const CM_LOCATE_DEVINST_CANCELREMOVE: ULONG = CM_LOCATE_DEVNODE_CANCELREMOVE;
+pub const CM_LOCATE_DEVINST_NOVALIDATION: ULONG = CM_LOCATE_DEVNODE_NOVALIDATION;
+pub const CM_LOCATE_DEVINST_BITS: ULONG = CM_LOCATE_DEVNODE_BITS;
+pub const CM_OPEN_CLASS_KEY_INSTALLER: ULONG = 0x00000000;
+pub const CM_OPEN_CLASS_KEY_INTERFACE: ULONG = 0x00000001;
+pub const CM_OPEN_CLASS_KEY_BITS: ULONG = 0x00000001;
+pub const CM_REMOVE_UI_OK: ULONG = 0x00000000;
+pub const CM_REMOVE_UI_NOT_OK: ULONG = 0x00000001;
+pub const CM_REMOVE_NO_RESTART: ULONG = 0x00000002;
+pub const CM_REMOVE_BITS: ULONG = 0x00000003;
+pub const CM_QUERY_REMOVE_UI_OK: ULONG = CM_REMOVE_UI_OK;
+pub const CM_QUERY_REMOVE_UI_NOT_OK: ULONG = CM_REMOVE_UI_NOT_OK;
+pub const CM_QUERY_REMOVE_BITS: ULONG = CM_QUERY_REMOVE_UI_OK | CM_QUERY_REMOVE_UI_NOT_OK;
+pub const CM_REENUMERATE_NORMAL: ULONG = 0x00000000;
+pub const CM_REENUMERATE_SYNCHRONOUS: ULONG = 0x00000001;
+pub const CM_REENUMERATE_RETRY_INSTALLATION: ULONG = 0x00000002;
+pub const CM_REENUMERATE_ASYNCHRONOUS: ULONG = 0x00000004;
+pub const CM_REENUMERATE_BITS: ULONG = 0x00000007;
+pub const CM_REGISTER_DEVICE_DRIVER_STATIC: ULONG = 0x00000000;
+pub const CM_REGISTER_DEVICE_DRIVER_DISABLEABLE: ULONG = 0x00000001;
+pub const CM_REGISTER_DEVICE_DRIVER_REMOVABLE: ULONG = 0x00000002;
+pub const CM_REGISTER_DEVICE_DRIVER_BITS: ULONG = 0x00000003;
+pub const CM_REGISTRY_HARDWARE: ULONG = 0x00000000;
+pub const CM_REGISTRY_SOFTWARE: ULONG = 0x00000001;
+pub const CM_REGISTRY_USER: ULONG = 0x00000100;
+pub const CM_REGISTRY_CONFIG: ULONG = 0x00000200;
+pub const CM_REGISTRY_BITS: ULONG = 0x00000301;
+pub const CM_SET_DEVNODE_PROBLEM_NORMAL: ULONG = 0x00000000;
+pub const CM_SET_DEVNODE_PROBLEM_OVERRIDE: ULONG = 0x00000001;
+pub const CM_SET_DEVNODE_PROBLEM_BITS: ULONG = 0x00000001;
+pub const CM_SET_DEVINST_PROBLEM_NORMAL: ULONG = CM_SET_DEVNODE_PROBLEM_NORMAL;
+pub const CM_SET_DEVINST_PROBLEM_OVERRIDE: ULONG = CM_SET_DEVNODE_PROBLEM_OVERRIDE;
+pub const CM_SET_DEVINST_PROBLEM_BITS: ULONG = CM_SET_DEVNODE_PROBLEM_BITS;
+pub const CM_SET_HW_PROF_FLAGS_UI_NOT_OK: ULONG = 0x00000001;
+pub const CM_SET_HW_PROF_FLAGS_BITS: ULONG = 0x00000001;
+pub const CM_SETUP_DEVNODE_READY: ULONG = 0x00000000;
+pub const CM_SETUP_DEVINST_READY: ULONG = CM_SETUP_DEVNODE_READY;
+pub const CM_SETUP_DOWNLOAD: ULONG = 0x00000001;
+pub const CM_SETUP_WRITE_LOG_CONFS: ULONG = 0x00000002;
+pub const CM_SETUP_PROP_CHANGE: ULONG = 0x00000003;
+pub const CM_SETUP_DEVNODE_RESET: ULONG = 0x00000004;
+pub const CM_SETUP_DEVINST_RESET: ULONG = CM_SETUP_DEVNODE_RESET;
+pub const CM_SETUP_DEVNODE_CONFIG: ULONG = 0x00000005;
+pub const CM_SETUP_DEVINST_CONFIG: ULONG = CM_SETUP_DEVNODE_CONFIG;
+pub const CM_SETUP_DEVNODE_CONFIG_CLASS: ULONG = 0x00000006;
+pub const CM_SETUP_DEVINST_CONFIG_CLASS: ULONG = CM_SETUP_DEVNODE_CONFIG_CLASS;
+pub const CM_SETUP_DEVNODE_CONFIG_EXTENSIONS: ULONG = 0x00000007;
+pub const CM_SETUP_DEVINST_CONFIG_EXTENSIONS: ULONG = CM_SETUP_DEVNODE_CONFIG_EXTENSIONS;
+pub const CM_SETUP_BITS: ULONG = 0x00000007;
+pub const CM_QUERY_ARBITRATOR_RAW: ULONG = 0x00000000;
+pub const CM_QUERY_ARBITRATOR_TRANSLATED: ULONG = 0x00000001;
+pub const CM_QUERY_ARBITRATOR_BITS: ULONG = 0x00000001;
+pub const CM_CUSTOMDEVPROP_MERGE_MULTISZ: ULONG = 0x00000001;
+pub const CM_CUSTOMDEVPROP_BITS: ULONG = 0x00000001;
+pub const CM_NAME_ATTRIBUTE_NAME_RETRIEVED_FROM_DEVICE: ULONG = 0x1;
+pub const CM_NAME_ATTRIBUTE_USER_ASSIGNED_NAME: ULONG = 0x2;
+pub const CM_CLASS_PROPERTY_INSTALLER: ULONG = 0x00000000;
+pub const CM_CLASS_PROPERTY_INTERFACE: ULONG = 0x00000001;
+pub const CM_CLASS_PROPERTY_BITS: ULONG = 0x00000001;
+DECLARE_HANDLE!{HCMNOTIFICATION, HCMNOTIFICATION__}
+pub type PHCMNOTIFICATION = *mut HCMNOTIFICATION;
+pub const CM_NOTIFY_FILTER_FLAG_ALL_INTERFACE_CLASSES: ULONG = 0x00000001;
+pub const CM_NOTIFY_FILTER_FLAG_ALL_DEVICE_INSTANCES: ULONG = 0x00000002;
+pub const CM_NOTIFY_FILTER_VALID_FLAGS: ULONG = CM_NOTIFY_FILTER_FLAG_ALL_INTERFACE_CLASSES
+ | CM_NOTIFY_FILTER_FLAG_ALL_DEVICE_INSTANCES;
+ENUM!{enum CM_NOTIFY_FILTER_TYPE {
+ CM_NOTIFY_FILTER_TYPE_DEVICEINTERFACE = 0,
+ CM_NOTIFY_FILTER_TYPE_DEVICEHANDLE,
+ CM_NOTIFY_FILTER_TYPE_DEVICEINSTANCE,
+ CM_NOTIFY_FILTER_TYPE_MAX,
+}}
+pub type PCM_NOTIFY_FILTER_TYPE = *mut CM_NOTIFY_FILTER_TYPE;
+STRUCT!{struct CM_NOTIFY_FILTER_DeviceInterface {
+ ClassGuid: GUID,
+}}
+STRUCT!{struct CM_NOTIFY_FILTER_DeviceHandle {
+ hTarget: HANDLE,
+}}
+STRUCT!{struct CM_NOTIFY_FILTER_DeviceInstance {
+ InstanceId: [WCHAR; MAX_DEVICE_ID_LEN],
+}}
+UNION!{union CM_NOTIFY_FILTER_u {
+ [u32; 100] [u64; 50],
+ DeviceInterface DeviceInterface_mut: CM_NOTIFY_FILTER_DeviceInterface,
+ DeviceHandle DeviceHandle_mut: CM_NOTIFY_FILTER_DeviceHandle,
+ DeviceInstance DeviceInstance_mut: CM_NOTIFY_FILTER_DeviceInstance,
+}}
+STRUCT!{struct CM_NOTIFY_FILTER {
+ cbSize: DWORD,
+ Flags: DWORD,
+ FilterType: CM_NOTIFY_FILTER_TYPE,
+ Reserved: DWORD,
+ u: CM_NOTIFY_FILTER_u,
+}}
+pub type PCM_NOTIFY_FILTER = *mut CM_NOTIFY_FILTER;
+ENUM!{enum CM_NOTIFY_ACTION {
+ CM_NOTIFY_ACTION_DEVICEINTERFACEARRIVAL = 0,
+ CM_NOTIFY_ACTION_DEVICEINTERFACEREMOVAL,
+ CM_NOTIFY_ACTION_DEVICEQUERYREMOVE,
+ CM_NOTIFY_ACTION_DEVICEQUERYREMOVEFAILED,
+ CM_NOTIFY_ACTION_DEVICEREMOVEPENDING,
+ CM_NOTIFY_ACTION_DEVICEREMOVECOMPLETE,
+ CM_NOTIFY_ACTION_DEVICECUSTOMEVENT,
+ CM_NOTIFY_ACTION_DEVICEINSTANCEENUMERATED,
+ CM_NOTIFY_ACTION_DEVICEINSTANCESTARTED,
+ CM_NOTIFY_ACTION_DEVICEINSTANCEREMOVED,
+ CM_NOTIFY_ACTION_MAX,
+}}
+pub type PCM_NOTIFY_ACTION = *mut CM_NOTIFY_ACTION;
+STRUCT!{struct CM_NOTIFY_EVENT_DATA_DeviceInterface {
+ ClassGuid: GUID,
+ SymbolicLink: [WCHAR; ANYSIZE_ARRAY],
+}}
+STRUCT!{struct CM_NOTIFY_EVENT_DATA_DeviceHandle {
+ EventGuid: GUID,
+ NameOffset: LONG,
+ DataSize: DWORD,
+ Data: [BYTE; ANYSIZE_ARRAY],
+}}
+STRUCT!{struct CM_NOTIFY_EVENT_DATA_DeviceInstance {
+ InstanceId: [WCHAR; ANYSIZE_ARRAY],
+}}
+UNION!{union CM_NOTIFY_EVENT_DATA_u {
+ [u32; 7],
+ DeviceInterface DeviceInterface_mut: CM_NOTIFY_EVENT_DATA_DeviceInterface,
+ DeviceHandle DeviceHandle_mut: CM_NOTIFY_EVENT_DATA_DeviceHandle,
+ DeviceInstance DeviceInstance_mut: CM_NOTIFY_EVENT_DATA_DeviceInstance,
+}}
+STRUCT!{struct CM_NOTIFY_EVENT_DATA {
+ FilterType: CM_NOTIFY_FILTER_TYPE,
+ Reserved: DWORD,
+ u: CM_NOTIFY_EVENT_DATA_u,
+}}
+pub type PCM_NOTIFY_EVENT_DATA = *mut CM_NOTIFY_EVENT_DATA;
+FN!{stdcall PCM_NOTIFY_CALLBACK(
+ hNotify: HCMNOTIFICATION,
+ Context: PVOID,
+ Action: CM_NOTIFY_ACTION,
+ EventData: PCM_NOTIFY_EVENT_DATA,
+ EventDataSize: DWORD,
+) -> DWORD}
+extern "system" {
+ pub fn CM_Add_Empty_Log_Conf(
+ plcLogConf: PLOG_CONF,
+ dnDevInst: DEVINST,
+ Priority: PRIORITY,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Add_Empty_Log_Conf_Ex(
+ plcLogConf: PLOG_CONF,
+ dnDevInst: DEVINST,
+ Priority: PRIORITY,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Add_IDA(
+ dnDevInst: DEVINST,
+ pszID: PSTR,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Add_IDW(
+ dnDevInst: DEVINST,
+ pszID: PWSTR,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Add_ID_ExA(
+ dnDevInst: DEVINST,
+ pszID: PSTR,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Add_ID_ExW(
+ dnDevInst: DEVINST,
+ pszID: PWSTR,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Add_Range(
+ ullStartValue: DWORDLONG,
+ ullEndValue: DWORDLONG,
+ rlh: RANGE_LIST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Add_Res_Des(
+ prdResDes: PRES_DES,
+ lcLogConf: LOG_CONF,
+ ResourceID: RESOURCEID,
+ ResourceData: PCVOID,
+ ResourceLen: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Add_Res_Des_Ex(
+ prdResDes: PRES_DES,
+ lcLogConf: LOG_CONF,
+ ResourceID: RESOURCEID,
+ ResourceData: PCVOID,
+ ResourceLen: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Connect_MachineA(
+ UNCServerName: PCSTR,
+ phMachine: PHMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Connect_MachineW(
+ UNCServerName: PCWSTR,
+ phMachine: PHMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Create_DevNodeA(
+ pdnDevInst: PDEVINST,
+ pDeviceID: DEVINSTID_A,
+ dnParent: DEVINST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Create_DevNodeW(
+ pdnDevInst: PDEVINST,
+ pDeviceID: DEVINSTID_W,
+ dnParent: DEVINST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Create_DevNode_ExA(
+ pdnDevInst: PDEVINST,
+ pDeviceID: DEVINSTID_A,
+ dnParent: DEVINST,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Create_DevNode_ExW(
+ pdnDevInst: PDEVINST,
+ pDeviceID: DEVINSTID_W,
+ dnParent: DEVINST,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Create_Range_List(
+ prlh: PRANGE_LIST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Delete_Class_Key(
+ ClassGuid: LPGUID,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Delete_Class_Key_Ex(
+ ClassGuid: LPGUID,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Delete_DevNode_Key(
+ dnDevNode: DEVNODE,
+ ulHardwareProfile: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Delete_DevNode_Key_Ex(
+ dnDevNode: DEVNODE,
+ ulHardwareProfile: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Delete_Range(
+ ullStartValue: DWORDLONG,
+ ullEndValue: DWORDLONG,
+ rlh: RANGE_LIST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Detect_Resource_Conflict(
+ dnDevInst: DEVINST,
+ ResourceID: RESOURCEID,
+ ResourceData: PCVOID,
+ ResourceLen: ULONG,
+ pbConflictDetected: PBOOL,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Detect_Resource_Conflict_Ex(
+ dnDevInst: DEVINST,
+ ResourceID: RESOURCEID,
+ ResourceData: PCVOID,
+ ResourceLen: ULONG,
+ pbConflictDetected: PBOOL,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Disable_DevNode(
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Disable_DevNode_Ex(
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Disconnect_Machine(
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Dup_Range_List(
+ rlhOld: RANGE_LIST,
+ rlhNew: RANGE_LIST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Enable_DevNode(
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Enable_DevNode_Ex(
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Enumerate_Classes(
+ ulClassIndex: ULONG,
+ ClassGuid: LPGUID,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Enumerate_Classes_Ex(
+ ulClassIndex: ULONG,
+ ClassGuid: LPGUID,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Enumerate_EnumeratorsA(
+ ulEnumIndex: ULONG,
+ Buffer: PSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Enumerate_EnumeratorsW(
+ ulEnumIndex: ULONG,
+ Buffer: PWSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Enumerate_Enumerators_ExA(
+ ulEnumIndex: ULONG,
+ Buffer: PSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Enumerate_Enumerators_ExW(
+ ulEnumIndex: ULONG,
+ Buffer: PWSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Find_Range(
+ pullStart: PDWORDLONG,
+ ullStart: DWORDLONG,
+ ulLength: ULONG,
+ ullAlignment: DWORDLONG,
+ ullEnd: DWORDLONG,
+ rlh: RANGE_LIST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_First_Range(
+ rlh: RANGE_LIST,
+ pullStart: PDWORDLONG,
+ pullEnd: PDWORDLONG,
+ preElement: PRANGE_LIST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Free_Log_Conf(
+ lcLogConfToBeFreed: LOG_CONF,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Free_Log_Conf_Ex(
+ lcLogConfToBeFreed: LOG_CONF,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Free_Log_Conf_Handle(
+ lcLogConf: LOG_CONF,
+ ) -> CONFIGRET;
+ pub fn CM_Free_Range_List(
+ rlh: RANGE_LIST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Free_Res_Des(
+ prdResDes: PRES_DES,
+ rdResDes: RES_DES,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Free_Res_Des_Ex(
+ prdResDes: PRES_DES,
+ rdResDes: RES_DES,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Free_Res_Des_Handle(
+ rdResDes: RES_DES,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Child(
+ pdnDevInst: PDEVINST,
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Child_Ex(
+ pdnDevInst: PDEVINST,
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Class_Key_NameA(
+ ClassGuid: LPGUID,
+ pszKeyName: LPSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Class_Key_NameW(
+ ClassGuid: LPGUID,
+ pszKeyName: LPWSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Class_Key_Name_ExA(
+ ClassGuid: LPGUID,
+ pszKeyName: LPSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Class_Key_Name_ExW(
+ ClassGuid: LPGUID,
+ pszKeyName: LPWSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Class_NameA(
+ ClassGuid: LPGUID,
+ Buffer: PSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Class_NameW(
+ ClassGuid: LPGUID,
+ Buffer: PWSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Class_Name_ExA(
+ ClassGuid: LPGUID,
+ Buffer: PSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Class_Name_ExW(
+ ClassGuid: LPGUID,
+ Buffer: PWSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Depth(
+ pulDepth: PULONG,
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Depth_Ex(
+ pulDepth: PULONG,
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_IDA(
+ dnDevInst: DEVINST,
+ Buffer: PSTR,
+ BufferLen: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_IDW(
+ dnDevInst: DEVINST,
+ Buffer: PWSTR,
+ BufferLen: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_ID_ExA(
+ dnDevInst: DEVINST,
+ Buffer: PSTR,
+ BufferLen: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_ID_ExW(
+ dnDevInst: DEVINST,
+ Buffer: PWSTR,
+ BufferLen: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_ID_ListA(
+ pszFilter: PCSTR,
+ Buffer: PCHAR,
+ BufferLen: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_ID_ListW(
+ pszFilter: PCWSTR,
+ Buffer: PWCHAR,
+ BufferLen: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_ID_List_ExA(
+ pszFilter: PCSTR,
+ Buffer: PCHAR,
+ BufferLen: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_ID_List_ExW(
+ pszFilter: PCWSTR,
+ Buffer: PWCHAR,
+ BufferLen: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_ID_List_SizeA(
+ pulLen: PULONG,
+ pszFilter: PCSTR,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_ID_List_SizeW(
+ pulLen: PULONG,
+ pszFilter: PCWSTR,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_ID_List_Size_ExA(
+ pulLen: PULONG,
+ pszFilter: PCSTR,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_ID_List_Size_ExW(
+ pulLen: PULONG,
+ pszFilter: PCWSTR,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_ID_Size(
+ pulLen: PULONG,
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_ID_Size_Ex(
+ pulLen: PULONG,
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_DevNode_PropertyW(
+ dnDevInst: DEVINST,
+ PropertyKey: *const DEVPROPKEY,
+ PropertyType: *mut DEVPROPTYPE,
+ PropertyBuffer: PBYTE,
+ PropertyBufferSize: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_DevNode_PropertyExW(
+ dnDevInst: DEVINST,
+ PropertyKey: *const DEVPROPKEY,
+ PropertyType: *mut DEVPROPTYPE,
+ PropertyBuffer: PBYTE,
+ PropertyBufferSize: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_DevNode_Registry_PropertyA(
+ dnDevInst: DEVINST,
+ ulProperty: ULONG,
+ pulRegDataType: PULONG,
+ Buffer: PVOID,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_DevNode_Registry_PropertyW(
+ dnDevInst: DEVINST,
+ ulProperty: ULONG,
+ pulRegDataType: PULONG,
+ Buffer: PVOID,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_DevNode_Registry_Property_ExA(
+ dnDevInst: DEVINST,
+ ulProperty: ULONG,
+ pulRegDataType: PULONG,
+ Buffer: PVOID,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_DevNode_Registry_Property_ExW(
+ dnDevInst: DEVINST,
+ ulProperty: ULONG,
+ pulRegDataType: PULONG,
+ Buffer: PVOID,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_DevNode_Custom_PropertyA(
+ dnDevInst: DEVINST,
+ pszCustomPropertyName: PCSTR,
+ pulRegDataType: PULONG,
+ Buffer: PVOID,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_DevNode_Custom_PropertyW(
+ dnDevInst: DEVINST,
+ pszCustomPropertyName: PCWSTR,
+ pulRegDataType: PULONG,
+ Buffer: PVOID,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_DevNode_Custom_Property_ExA(
+ dnDevInst: DEVINST,
+ pszCustomPropertyName: PCSTR,
+ pulRegDataType: PULONG,
+ Buffer: PVOID,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_DevNode_Custom_Property_ExW(
+ dnDevInst: DEVINST,
+ pszCustomPropertyName: PCWSTR,
+ pulRegDataType: PULONG,
+ Buffer: PVOID,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_DevNode_Status(
+ pulStatus: PULONG,
+ pulProblemNumber: PULONG,
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_DevNode_Status_Ex(
+ pulStatus: PULONG,
+ pulProblemNumber: PULONG,
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_First_Log_Conf(
+ plcLogConf: PLOG_CONF,
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_First_Log_Conf_Ex(
+ plcLogConf: PLOG_CONF,
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Global_State(
+ pulState: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Global_State_Ex(
+ pulState: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Hardware_Profile_InfoA(
+ ulIndex: ULONG,
+ pHWProfileInfo: PHWPROFILEINFO_A,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Hardware_Profile_Info_ExA(
+ ulIndex: ULONG,
+ pHWProfileInfo: PHWPROFILEINFO_A,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Hardware_Profile_InfoW(
+ ulIndex: ULONG,
+ pHWProfileInfo: PHWPROFILEINFO_W,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Hardware_Profile_Info_ExW(
+ ulIndex: ULONG,
+ pHWProfileInfo: PHWPROFILEINFO_W,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_HW_Prof_FlagsA(
+ pDeviceID: DEVINSTID_A,
+ ulHardwareProfile: ULONG,
+ pulValue: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_HW_Prof_FlagsW(
+ pDeviceID: DEVINSTID_W,
+ ulHardwareProfile: ULONG,
+ pulValue: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_HW_Prof_Flags_ExA(
+ pDeviceID: DEVINSTID_A,
+ ulHardwareProfile: ULONG,
+ pulValue: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_HW_Prof_Flags_ExW(
+ pDeviceID: DEVINSTID_W,
+ ulHardwareProfile: ULONG,
+ pulValue: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_Interface_AliasA(
+ pszDeviceInterface: LPCSTR,
+ AliasInterfaceGuid: LPGUID,
+ pszAliasDeviceInterface: LPSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_Interface_AliasW(
+ pszDeviceInterface: LPCWSTR,
+ AliasInterfaceGuid: LPGUID,
+ pszAliasDeviceInterface: LPWSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_Interface_Alias_ExA(
+ pszDeviceInterface: LPCSTR,
+ AliasInterfaceGuid: LPGUID,
+ pszAliasDeviceInterface: LPSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_Interface_Alias_ExW(
+ pszDeviceInterface: LPCWSTR,
+ AliasInterfaceGuid: LPGUID,
+ pszAliasDeviceInterface: LPWSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_Interface_ListA(
+ InterfaceClassGuid: LPGUID,
+ pDeviceID: DEVINSTID_A,
+ Buffer: PCHAR,
+ BufferLen: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_Interface_ListW(
+ InterfaceClassGuid: LPGUID,
+ pDeviceID: DEVINSTID_W,
+ Buffer: PWCHAR,
+ BufferLen: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_Interface_List_ExA(
+ InterfaceClassGuid: LPGUID,
+ pDeviceID: DEVINSTID_A,
+ Buffer: PCHAR,
+ BufferLen: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_Interface_List_ExW(
+ InterfaceClassGuid: LPGUID,
+ pDeviceID: DEVINSTID_W,
+ Buffer: PWCHAR,
+ BufferLen: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_Interface_List_SizeA(
+ pulLen: PULONG,
+ InterfaceClassGuid: LPGUID,
+ pDeviceID: DEVINSTID_A,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_Interface_List_SizeW(
+ pulLen: PULONG,
+ InterfaceClassGuid: LPGUID,
+ pDeviceID: DEVINSTID_W,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_Interface_List_Size_ExA(
+ pulLen: PULONG,
+ InterfaceClassGuid: LPGUID,
+ pDeviceID: DEVINSTID_A,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_Interface_List_Size_ExW(
+ pulLen: PULONG,
+ InterfaceClassGuid: LPGUID,
+ pDeviceID: DEVINSTID_W,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_Interface_PropertyW(
+ pszDeviceInterface: LPCWSTR,
+ PropertyKey: *const DEVPROPKEY,
+ PropertyType: *mut DEVPROPTYPE,
+ PropertyBuffer: PBYTE,
+ PropertyBufferSize: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Device_Interface_PropertyExW(
+ pszDeviceInterface: LPCWSTR,
+ PropertyKey: *const DEVPROPKEY,
+ PropertyType: *mut DEVPROPTYPE,
+ PropertyBuffer: PBYTE,
+ PropertyBufferSize: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Log_Conf_Priority(
+ lcLogConf: LOG_CONF,
+ pPriority: PRIORITY,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Log_Conf_Priority_Ex(
+ lcLogConf: LOG_CONF,
+ pPriority: PRIORITY,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Next_Log_Conf(
+ plcLogConf: PLOG_CONF,
+ lcLogConf: LOG_CONF,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Next_Log_Conf_Ex(
+ plcLogConf: PLOG_CONF,
+ lcLogConf: LOG_CONF,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Parent(
+ pdnDevInst: PDEVINST,
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Parent_Ex(
+ pdnDevInst: PDEVINST,
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Res_Des_Data(
+ rdResDes: RES_DES,
+ Buffer: PVOID,
+ BufferLen: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Res_Des_Data_Ex(
+ rdResDes: RES_DES,
+ Buffer: PVOID,
+ BufferLen: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Res_Des_Data_Size(
+ pulSize: PULONG,
+ rdResDes: RES_DES,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Res_Des_Data_Size_Ex(
+ pulSize: PULONG,
+ rdResDes: RES_DES,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Sibling(
+ pdnDevInst: PDEVINST,
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Sibling_Ex(
+ pdnDevInst: PDEVINST,
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Version() -> WORD;
+ pub fn CM_Get_Version_Ex(
+ hMachine: HMACHINE,
+ ) -> WORD;
+ pub fn CM_Is_Version_Available(
+ wVersion: WORD,
+ ) -> BOOL;
+ pub fn CM_Is_Version_Available_Ex(
+ wVersion: WORD,
+ hMachine: HMACHINE,
+ ) -> BOOL;
+ pub fn CM_Intersect_Range_List(
+ rlhOld1: RANGE_LIST,
+ rlhOld2: RANGE_LIST,
+ rlhNew: RANGE_LIST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Invert_Range_List(
+ rlhOld: RANGE_LIST,
+ rlhNew: RANGE_LIST,
+ ullMaxValue: DWORDLONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Locate_DevNodeA(
+ pdnDevInst: PDEVINST,
+ pDeviceID: DEVINSTID_A,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Locate_DevNodeW(
+ pdnDevInst: PDEVINST,
+ pDeviceID: DEVINSTID_W,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Locate_DevNode_ExA(
+ pdnDevInst: PDEVINST,
+ pDeviceID: DEVINSTID_A,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Locate_DevNode_ExW(
+ pdnDevInst: PDEVINST,
+ pDeviceID: DEVINSTID_W,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Merge_Range_List(
+ rlhOld1: RANGE_LIST,
+ rlhOld2: RANGE_LIST,
+ rlhNew: RANGE_LIST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Modify_Res_Des(
+ prdResDes: PRES_DES,
+ rdResDes: RES_DES,
+ ResourceID: RESOURCEID,
+ ResourceData: PCVOID,
+ ResourceLen: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Modify_Res_Des_Ex(
+ prdResDes: PRES_DES,
+ rdResDes: RES_DES,
+ ResourceID: RESOURCEID,
+ ResourceData: PCVOID,
+ ResourceLen: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Move_DevNode(
+ dnFromDevInst: DEVINST,
+ dnToDevInst: DEVINST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Move_DevNode_Ex(
+ dnFromDevInst: DEVINST,
+ dnToDevInst: DEVINST,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Next_Range(
+ preElement: PRANGE_LIST,
+ pullStart: PDWORDLONG,
+ pullEnd: PDWORDLONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Next_Res_Des(
+ prdResDes: PRES_DES,
+ rdResDes: RES_DES,
+ ForResource: RESOURCEID,
+ pResourceID: PRESOURCEID,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Next_Res_Des_Ex(
+ prdResDes: PRES_DES,
+ rdResDes: RES_DES,
+ ForResource: RESOURCEID,
+ pResourceID: PRESOURCEID,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Open_Class_KeyA(
+ ClassGuid: LPGUID,
+ pszClassName: LPCSTR,
+ samDesired: REGSAM,
+ Disposition: REGDISPOSITION,
+ phkClass: PHKEY,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Open_Class_KeyW(
+ ClassGuid: LPGUID,
+ pszClassName: LPCWSTR,
+ samDesired: REGSAM,
+ Disposition: REGDISPOSITION,
+ phkClass: PHKEY,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Open_Class_Key_ExA(
+ ClassGuid: LPGUID,
+ pszClassName: LPCSTR,
+ samDesired: REGSAM,
+ Disposition: REGDISPOSITION,
+ phkClass: PHKEY,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Open_Class_Key_ExW(
+ ClassGuid: LPGUID,
+ pszClassName: LPCWSTR,
+ samDesired: REGSAM,
+ Disposition: REGDISPOSITION,
+ phkClass: PHKEY,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Open_DevNode_Key(
+ dnDevNode: DEVINST,
+ samDesired: REGSAM,
+ ulHardwareProfile: ULONG,
+ Disposition: REGDISPOSITION,
+ phkDevice: PHKEY,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Open_DevNode_Key_Ex(
+ dnDevNode: DEVINST,
+ samDesired: REGSAM,
+ ulHardwareProfile: ULONG,
+ Disposition: REGDISPOSITION,
+ phkDevice: PHKEY,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Open_Device_Interface_KeyA(
+ pszDeviceInterface: LPCSTR,
+ samDesired: REGSAM,
+ Disposition: REGDISPOSITION,
+ phkDeviceInterface: PHKEY,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Open_Device_Interface_KeyW(
+ pszDeviceInterface: LPCWSTR,
+ samDesired: REGSAM,
+ Disposition: REGDISPOSITION,
+ phkDeviceInterface: PHKEY,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Open_Device_Interface_Key_ExA(
+ pszDeviceInterface: LPCSTR,
+ samDesired: REGSAM,
+ Disposition: REGDISPOSITION,
+ phkDeviceInterface: PHKEY,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Open_Device_Interface_Key_ExW(
+ pszDeviceInterface: LPCWSTR,
+ samDesired: REGSAM,
+ Disposition: REGDISPOSITION,
+ phkDeviceInterface: PHKEY,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Delete_Device_Interface_KeyA(
+ pszDeviceInterface: LPCSTR,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Delete_Device_Interface_KeyW(
+ pszDeviceInterface: LPCWSTR,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Delete_Device_Interface_Key_ExA(
+ pszDeviceInterface: LPCSTR,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Delete_Device_Interface_Key_ExW(
+ pszDeviceInterface: LPCWSTR,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Query_Arbitrator_Free_Data(
+ pData: PVOID,
+ DataLen: ULONG,
+ dnDevInst: DEVINST,
+ ResourceID: RESOURCEID,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Query_Arbitrator_Free_Data_Ex(
+ pData: PVOID,
+ DataLen: ULONG,
+ dnDevInst: DEVINST,
+ ResourceID: RESOURCEID,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Query_Arbitrator_Free_Size(
+ pulSize: PULONG,
+ dnDevInst: DEVINST,
+ ResourceID: RESOURCEID,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Query_Arbitrator_Free_Size_Ex(
+ pulSize: PULONG,
+ dnDevInst: DEVINST,
+ ResourceID: RESOURCEID,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Query_Remove_SubTree(
+ dnAncestor: DEVINST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Query_Remove_SubTree_Ex(
+ dnAncestor: DEVINST,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Query_And_Remove_SubTreeA(
+ dnAncestor: DEVINST,
+ pVetoType: PPNP_VETO_TYPE,
+ pszVetoName: LPSTR,
+ ulNameLength: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Query_And_Remove_SubTree_ExA(
+ dnAncestor: DEVINST,
+ pVetoType: PPNP_VETO_TYPE,
+ pszVetoName: LPSTR,
+ ulNameLength: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Query_And_Remove_SubTreeW(
+ dnAncestor: DEVINST,
+ pVetoType: PPNP_VETO_TYPE,
+ pszVetoName: LPWSTR,
+ ulNameLength: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Query_And_Remove_SubTree_ExW(
+ dnAncestor: DEVINST,
+ pVetoType: PPNP_VETO_TYPE,
+ pszVetoName: LPWSTR,
+ ulNameLength: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Request_Device_EjectA(
+ dnDevInst: DEVINST,
+ pVetoType: PPNP_VETO_TYPE,
+ pszVetoName: LPSTR,
+ ulNameLength: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Request_Device_Eject_ExA(
+ dnDevInst: DEVINST,
+ pVetoType: PPNP_VETO_TYPE,
+ pszVetoName: LPSTR,
+ ulNameLength: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Request_Device_EjectW(
+ dnDevInst: DEVINST,
+ pVetoType: PPNP_VETO_TYPE,
+ pszVetoName: LPWSTR,
+ ulNameLength: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Request_Device_Eject_ExW(
+ dnDevInst: DEVINST,
+ pVetoType: PPNP_VETO_TYPE,
+ pszVetoName: LPWSTR,
+ ulNameLength: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Reenumerate_DevNode(
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Reenumerate_DevNode_Ex(
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Register_Device_InterfaceA(
+ dnDevInst: DEVINST,
+ InterfaceClassGuid: LPGUID,
+ pszReference: LPCSTR,
+ pszDeviceInterface: LPSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Register_Device_InterfaceW(
+ dnDevInst: DEVINST,
+ InterfaceClassGuid: LPGUID,
+ pszReference: LPCWSTR,
+ pszDeviceInterface: LPWSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Register_Device_Interface_ExA(
+ dnDevInst: DEVINST,
+ InterfaceClassGuid: LPGUID,
+ pszReference: LPCSTR,
+ pszDeviceInterface: LPSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Register_Device_Interface_ExW(
+ dnDevInst: DEVINST,
+ InterfaceClassGuid: LPGUID,
+ pszReference: LPCWSTR,
+ pszDeviceInterface: LPWSTR,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Set_DevNode_Problem_Ex(
+ dnDevInst: DEVINST,
+ ulProblem: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Set_DevNode_Problem(
+ dnDevInst: DEVINST,
+ ulProblem: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Unregister_Device_InterfaceA(
+ pszDeviceInterface: LPCSTR,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Unregister_Device_InterfaceW(
+ pszDeviceInterface: LPCWSTR,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Unregister_Device_Interface_ExA(
+ pszDeviceInterface: LPCSTR,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Unregister_Device_Interface_ExW(
+ pszDeviceInterface: LPCWSTR,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Register_Device_Driver(
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Register_Device_Driver_Ex(
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Remove_SubTree(
+ dnAncestor: DEVINST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Remove_SubTree_Ex(
+ dnAncestor: DEVINST,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Set_DevNode_Registry_PropertyA(
+ dnDevInst: DEVINST,
+ ulProperty: ULONG,
+ Buffer: PCVOID,
+ ulLength: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Set_DevNode_Registry_PropertyW(
+ dnDevInst: DEVINST,
+ ulProperty: ULONG,
+ Buffer: PCVOID,
+ ulLength: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Set_DevNode_Registry_Property_ExA(
+ dnDevInst: DEVINST,
+ ulProperty: ULONG,
+ Buffer: PCVOID,
+ ulLength: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Set_DevNode_Registry_Property_ExW(
+ dnDevInst: DEVINST,
+ ulProperty: ULONG,
+ Buffer: PCVOID,
+ ulLength: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Is_Dock_Station_Present(
+ pbPresent: PBOOL,
+ ) -> CONFIGRET;
+ pub fn CM_Is_Dock_Station_Present_Ex(
+ pbPresent: PBOOL,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Request_Eject_PC() -> CONFIGRET;
+ pub fn CM_Request_Eject_PC_Ex(
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Set_HW_Prof_FlagsA(
+ pDeviceID: DEVINSTID_A,
+ ulConfig: ULONG,
+ ulValue: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Set_HW_Prof_FlagsW(
+ pDeviceID: DEVINSTID_W,
+ ulConfig: ULONG,
+ ulValue: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Set_HW_Prof_Flags_ExA(
+ pDeviceID: DEVINSTID_A,
+ ulConfig: ULONG,
+ ulValue: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Set_HW_Prof_Flags_ExW(
+ pDeviceID: DEVINSTID_A,
+ ulConfig: ULONG,
+ ulValue: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Setup_DevNode(
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Setup_DevNode_Ex(
+ dnDevInst: DEVINST,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Test_Range_Available(
+ ullStartValue: DWORDLONG,
+ ullEndValue: DWORDLONG,
+ rlh: RANGE_LIST,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Uninstall_DevNode(
+ dnDevInst: DEVNODE,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Uninstall_DevNode_Ex(
+ dnDevInst: DEVNODE,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Run_Detection(
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Run_Detection_Ex(
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Set_HW_Prof(
+ ulHardwareProfile: ULONG,
+ ulFlags: ULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Set_HW_Prof_Ex(
+ ulHardwareProfile: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Query_Resource_Conflict_List(
+ pclConflictList: PCONFLICT_LIST,
+ dnDevInst: DEVINST,
+ ResourceID: RESOURCEID,
+ ResourceData: PCVOID,
+ ResourceLen: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Free_Resource_Conflict_Handle(
+ clConflictList: CONFLICT_LIST,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Resource_Conflict_Count(
+ clConflictList: CONFLICT_LIST,
+ pulCount: PULONG,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Resource_Conflict_DetailsA(
+ clConflictList: CONFLICT_LIST,
+ ulIndex: ULONG,
+ pConflictDetails: PCONFLICT_DETAILS_A,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Resource_Conflict_DetailsW(
+ clConflictList: CONFLICT_LIST,
+ ulIndex: ULONG,
+ pConflictDetails: PCONFLICT_DETAILS_W,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Class_Registry_PropertyW(
+ ClassGuid: LPGUID,
+ ulProperty: ULONG,
+ pulRegDataType: PULONG,
+ Buffer: PVOID,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Set_Class_Registry_PropertyW(
+ ClassGuid: LPGUID,
+ ulProperty: ULONG,
+ Buffer: PCVOID,
+ ulLength: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Get_Class_Registry_PropertyA(
+ ClassGuid: LPGUID,
+ ulProperty: ULONG,
+ pulRegDataType: PULONG,
+ Buffer: PVOID,
+ pulLength: PULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CM_Set_Class_Registry_PropertyA(
+ ClassGuid: LPGUID,
+ ulProperty: ULONG,
+ Buffer: PCVOID,
+ ulLength: ULONG,
+ ulFlags: ULONG,
+ hMachine: HMACHINE,
+ ) -> CONFIGRET;
+ pub fn CMP_WaitNoPendingInstallEvents(
+ dwTimeout: DWORD,
+ ) -> DWORD;
+}
+pub const CR_SUCCESS: CONFIGRET = 0x00000000;
+pub const CR_DEFAULT: CONFIGRET = 0x00000001;
+pub const CR_OUT_OF_MEMORY: CONFIGRET = 0x00000002;
+pub const CR_INVALID_POINTER: CONFIGRET = 0x00000003;
+pub const CR_INVALID_FLAG: CONFIGRET = 0x00000004;
+pub const CR_INVALID_DEVNODE: CONFIGRET = 0x00000005;
+pub const CR_INVALID_DEVINST: CONFIGRET = CR_INVALID_DEVNODE;
+pub const CR_INVALID_RES_DES: CONFIGRET = 0x00000006;
+pub const CR_INVALID_LOG_CONF: CONFIGRET = 0x00000007;
+pub const CR_INVALID_ARBITRATOR: CONFIGRET = 0x00000008;
+pub const CR_INVALID_NODELIST: CONFIGRET = 0x00000009;
+pub const CR_DEVNODE_HAS_REQS: CONFIGRET = 0x0000000A;
+pub const CR_DEVINST_HAS_REQS: CONFIGRET = CR_DEVNODE_HAS_REQS;
+pub const CR_INVALID_RESOURCEID: CONFIGRET = 0x0000000B;
+pub const CR_DLVXD_NOT_FOUND: CONFIGRET = 0x0000000C;
+pub const CR_NO_SUCH_DEVNODE: CONFIGRET = 0x0000000D;
+pub const CR_NO_SUCH_DEVINST: CONFIGRET = CR_NO_SUCH_DEVNODE;
+pub const CR_NO_MORE_LOG_CONF: CONFIGRET = 0x0000000E;
+pub const CR_NO_MORE_RES_DES: CONFIGRET = 0x0000000F;
+pub const CR_ALREADY_SUCH_DEVNODE: CONFIGRET = 0x00000010;
+pub const CR_ALREADY_SUCH_DEVINST: CONFIGRET = CR_ALREADY_SUCH_DEVNODE;
+pub const CR_INVALID_RANGE_LIST: CONFIGRET = 0x00000011;
+pub const CR_INVALID_RANGE: CONFIGRET = 0x00000012;
+pub const CR_FAILURE: CONFIGRET = 0x00000013;
+pub const CR_NO_SUCH_LOGICAL_DEV: CONFIGRET = 0x00000014;
+pub const CR_CREATE_BLOCKED: CONFIGRET = 0x00000015;
+pub const CR_NOT_SYSTEM_VM: CONFIGRET = 0x00000016;
+pub const CR_REMOVE_VETOED: CONFIGRET = 0x00000017;
+pub const CR_APM_VETOED: CONFIGRET = 0x00000018;
+pub const CR_INVALID_LOAD_TYPE: CONFIGRET = 0x00000019;
+pub const CR_BUFFER_SMALL: CONFIGRET = 0x0000001A;
+pub const CR_NO_ARBITRATOR: CONFIGRET = 0x0000001B;
+pub const CR_NO_REGISTRY_HANDLE: CONFIGRET = 0x0000001C;
+pub const CR_REGISTRY_ERROR: CONFIGRET = 0x0000001D;
+pub const CR_INVALID_DEVICE_ID: CONFIGRET = 0x0000001E;
+pub const CR_INVALID_DATA: CONFIGRET = 0x0000001F;
+pub const CR_INVALID_API: CONFIGRET = 0x00000020;
+pub const CR_DEVLOADER_NOT_READY: CONFIGRET = 0x00000021;
+pub const CR_NEED_RESTART: CONFIGRET = 0x00000022;
+pub const CR_NO_MORE_HW_PROFILES: CONFIGRET = 0x00000023;
+pub const CR_DEVICE_NOT_THERE: CONFIGRET = 0x00000024;
+pub const CR_NO_SUCH_VALUE: CONFIGRET = 0x00000025;
+pub const CR_WRONG_TYPE: CONFIGRET = 0x00000026;
+pub const CR_INVALID_PRIORITY: CONFIGRET = 0x00000027;
+pub const CR_NOT_DISABLEABLE: CONFIGRET = 0x00000028;
+pub const CR_FREE_RESOURCES: CONFIGRET = 0x00000029;
+pub const CR_QUERY_VETOED: CONFIGRET = 0x0000002A;
+pub const CR_CANT_SHARE_IRQ: CONFIGRET = 0x0000002B;
+pub const CR_NO_DEPENDENT: CONFIGRET = 0x0000002C;
+pub const CR_SAME_RESOURCES: CONFIGRET = 0x0000002D;
+pub const CR_NO_SUCH_REGISTRY_KEY: CONFIGRET = 0x0000002E;
+pub const CR_INVALID_MACHINENAME: CONFIGRET = 0x0000002F;
+pub const CR_REMOTE_COMM_FAILURE: CONFIGRET = 0x00000030;
+pub const CR_MACHINE_UNAVAILABLE: CONFIGRET = 0x00000031;
+pub const CR_NO_CM_SERVICES: CONFIGRET = 0x00000032;
+pub const CR_ACCESS_DENIED: CONFIGRET = 0x00000033;
+pub const CR_CALL_NOT_IMPLEMENTED: CONFIGRET = 0x00000034;
+pub const CR_INVALID_PROPERTY: CONFIGRET = 0x00000035;
+pub const CR_DEVICE_INTERFACE_ACTIVE: CONFIGRET = 0x00000036;
+pub const CR_NO_SUCH_DEVICE_INTERFACE: CONFIGRET = 0x00000037;
+pub const CR_INVALID_REFERENCE_STRING: CONFIGRET = 0x00000038;
+pub const CR_INVALID_CONFLICT_LIST: CONFIGRET = 0x00000039;
+pub const CR_INVALID_INDEX: CONFIGRET = 0x0000003A;
+pub const CR_INVALID_STRUCTURE_SIZE: CONFIGRET = 0x0000003B;
+pub const NUM_CR_RESULTS: CONFIGRET = 0x0000003C;
diff --git a/vendor/winapi/src/um/cguid.rs b/vendor/winapi/src/um/cguid.rs
new file mode 100644
index 000000000..be7f92958
--- /dev/null
+++ b/vendor/winapi/src/um/cguid.rs
@@ -0,0 +1,134 @@
+// 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
+// Some of these definitions are commented out because I could not find their value
+DEFINE_GUID!{GUID_NULL,
+ 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+DEFINE_GUID!{CATID_MARSHALER,
+ 0x00000003, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IRpcChannel,
+ 0x00000004, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IRpcStub,
+ 0x00000005, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IStubManager,
+ 0x00000006, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IRpcProxy,
+ 0x00000007, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IProxyManager,
+ 0x00000008, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IPSFactory,
+ 0x00000009, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IInternalMoniker,
+ 0x00000011, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IDfReserved1,
+ 0x00000013, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IDfReserved2,
+ 0x00000014, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IDfReserved3,
+ 0x00000015, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_StdMarshal,
+ 0x00000017, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+// extern const CLSID CLSID_AggStdMarshal;
+DEFINE_GUID!{CLSID_StdAsyncActManager,
+ 0x00000329, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IStub,
+ 0x00000026, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IProxy,
+ 0x00000027, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IEnumGeneric,
+ 0x00000106, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IEnumHolder,
+ 0x00000107, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IEnumCallback,
+ 0x00000108, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IOleManager,
+ 0x0000011f, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IOlePresObj,
+ 0x00000120, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IDebug,
+ 0x00000123, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{IID_IDebugStream,
+ 0x00000124, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_PSGenObject,
+ 0x0000030c, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_PSClientSite,
+ 0x0000030d, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_PSClassObject,
+ 0x0000030e, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_PSInPlaceActive,
+ 0x0000030f, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_PSInPlaceFrame,
+ 0x00000310, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_PSDragDrop,
+ 0x00000311, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_PSBindCtx,
+ 0x00000312, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_PSEnumerators,
+ 0x00000313, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_StaticMetafile,
+ 0x00000315, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_StaticDib,
+ 0x00000316, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+// extern const CLSID CID_CDfsVolume;
+DEFINE_GUID!{CLSID_DCOMAccessControl,
+ 0x0000031d, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_GlobalOptions,
+ 0x0000034b, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_StdGlobalInterfaceTable,
+ 0x00000323, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_ComBinding,
+ 0x00000328, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_StdEvent,
+ 0x0000032b, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_ManualResetEvent,
+ 0x0000032c, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_SynchronizeContainer,
+ 0x0000032d, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_AddrControl,
+ 0x00000348, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_ContextSwitcher,
+ 0x0000034e, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+// extern const CLSID CLSID_CCDFormKrnl;
+// extern const CLSID CLSID_CCDPropertyPage;
+// extern const CLSID CLSID_CCDFormDialog;
+// extern const CLSID CLSID_CCDCommandButton;
+// extern const CLSID CLSID_CCDComboBox;
+// extern const CLSID CLSID_CCDTextBox;
+// extern const CLSID CLSID_CCDCheckBox;
+// extern const CLSID CLSID_CCDLabel;
+// extern const CLSID CLSID_CCDOptionButton;
+// extern const CLSID CLSID_CCDListBox;
+// extern const CLSID CLSID_CCDScrollBar;
+// extern const CLSID CLSID_CCDGroupBox;
+// extern const CLSID CLSID_CCDGeneralPropertyPage;
+// extern const CLSID CLSID_CCDGenericPropertyPage;
+// extern const CLSID CLSID_CCDFontPropertyPage;
+// extern const CLSID CLSID_CCDColorPropertyPage;
+// extern const CLSID CLSID_CCDLabelPropertyPage;
+// extern const CLSID CLSID_CCDCheckBoxPropertyPage;
+// extern const CLSID CLSID_CCDTextBoxPropertyPage;
+// extern const CLSID CLSID_CCDOptionButtonPropertyPage;
+// extern const CLSID CLSID_CCDListBoxPropertyPage;
+// extern const CLSID CLSID_CCDCommandButtonPropertyPage;
+// extern const CLSID CLSID_CCDComboBoxPropertyPage;
+// extern const CLSID CLSID_CCDScrollBarPropertyPage;
+// extern const CLSID CLSID_CCDGroupBoxPropertyPage;
+// extern const CLSID CLSID_CCDXObjectPropertyPage;
+// extern const CLSID CLSID_CStdPropertyFrame;
+// extern const CLSID CLSID_CFormPropertyPage;
+// extern const CLSID CLSID_CGridPropertyPage;
+// extern const CLSID CLSID_CWSJArticlePage;
+// extern const CLSID CLSID_CSystemPage;
+// extern const CLSID CLSID_IdentityUnmarshal;
+DEFINE_GUID!{CLSID_InProcFreeMarshaler,
+ 0x0000033a, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_Picture_Metafile,
+ 0x00000315, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_Picture_EnhMetafile,
+ 0x00000319, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{CLSID_Picture_Dib,
+ 0x00000316, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
+DEFINE_GUID!{GUID_TRISTATE,
+ 0x6650430a, 0xbe0f, 0x101a, 0x8b, 0xbb, 0x00, 0xaa, 0x00, 0x30, 0x0c, 0xab}
diff --git a/vendor/winapi/src/um/combaseapi.rs b/vendor/winapi/src/um/combaseapi.rs
new file mode 100644
index 000000000..823c026ac
--- /dev/null
+++ b/vendor/winapi/src/um/combaseapi.rs
@@ -0,0 +1,477 @@
+// 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.
+//! Base Component Object Model defintions.
+use ctypes::{c_int, c_void};
+use shared::basetsd::{SIZE_T, UINT64, ULONG_PTR};
+use shared::guiddef::{CLSID, GUID, LPCLSID, LPIID, REFCLSID, REFGUID, REFIID};
+use shared::minwindef::{BOOL, DWORD, FILETIME, HGLOBAL, LPDWORD, LPHANDLE, LPVOID, ULONG};
+use shared::rpcdce::{RPC_AUTHZ_HANDLE, RPC_AUTH_IDENTITY_HANDLE};
+use shared::wtypesbase::{
+ CLSCTX, CLSCTX_INPROC_HANDLER, CLSCTX_INPROC_SERVER, CLSCTX_LOCAL_SERVER, CLSCTX_REMOTE_SERVER,
+ LPCOLESTR, LPOLESTR, OLECHAR,
+};
+use um::objidl::SOLE_AUTHENTICATION_SERVICE;
+use um::objidlbase::{
+ APTTYPE, APTTYPEQUALIFIER, COSERVERINFO, IActivationFilter, IAgileReference, LPMALLOC,
+ LPMARSHAL, LPSTREAM, LPSURROGATE, MULTI_QI,
+};
+use um::propidl::PROPVARIANT;
+use um::unknwnbase::{IUnknown, LPUNKNOWN};
+use um::winnt::{HANDLE, HRESULT, LARGE_INTEGER, LONG, PSECURITY_DESCRIPTOR, PVOID, ULARGE_INTEGER};
+#[inline]
+pub fn LISet32(li: &mut LARGE_INTEGER, v: DWORD) {
+ unsafe {
+ li.u_mut().HighPart = if (v as LONG) < 0 {
+ -1
+ } else {
+ 0
+ };
+ li.u_mut().LowPart = v;
+ }
+}
+#[inline]
+pub fn ULISet32(li: &mut ULARGE_INTEGER, v: DWORD) {
+ unsafe {
+ li.u_mut().HighPart = 0;
+ li.u_mut().LowPart = v;
+ }
+}
+pub const CLSCTX_INPROC: CLSCTX = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER;
+pub const CLSCTX_ALL: CLSCTX = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER
+ | CLSCTX_REMOTE_SERVER;
+pub const CLSCTX_SERVER: CLSCTX = CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER
+ | CLSCTX_REMOTE_SERVER;
+ENUM!{enum REGCLS {
+ REGCLS_SINGLEUSE = 0,
+ REGCLS_MULTIPLEUSE = 1,
+ REGCLS_MULTI_SEPARATE = 2,
+ REGCLS_SUSPENDED = 4,
+ REGCLS_SURROGATE = 8,
+ REGCLS_AGILE = 0x10,
+}}
+ENUM!{enum COINITBASE {
+ COINITBASE_MULTITHREADED = 0x0,
+}}
+extern "system" {
+ pub fn CoGetMalloc(
+ dwMemContext: DWORD,
+ ppMalloc: *mut LPMALLOC,
+ ) -> HRESULT;
+ pub fn CreateStreamOnHGlobal(
+ hGlobal: HGLOBAL,
+ fDeleteOnRelease: BOOL,
+ ppstm: *mut LPSTREAM,
+ ) -> HRESULT;
+ pub fn GetHGlobalFromStream(
+ pstm: LPSTREAM,
+ phglobal: *mut HGLOBAL,
+ ) -> HRESULT;
+ pub fn CoUninitialize() -> ();
+ pub fn CoGetCurrentProcess() -> DWORD;
+ pub fn CoInitializeEx(
+ pvReserved: LPVOID,
+ dwCoInit: DWORD,
+ ) -> HRESULT;
+ pub fn CoGetCallerTID(
+ lpdwTID: LPDWORD,
+ ) -> HRESULT;
+ pub fn CoGetCurrentLogicalThreadId(
+ pguid: *mut GUID,
+ ) -> HRESULT;
+ pub fn CoGetContextToken(
+ pToken: *mut ULONG_PTR,
+ ) -> HRESULT;
+ pub fn CoGetDefaultContext(
+ aptType: APTTYPE,
+ riid: REFIID,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT;
+ pub fn CoGetApartmentType(
+ pAptType: *mut APTTYPE,
+ pAptQualifier: *mut APTTYPEQUALIFIER,
+ ) -> HRESULT;
+}
+STRUCT!{struct ServerInformation {
+ dwServerPid: DWORD,
+ dwServerTid: DWORD,
+ ui64ServerAddress: UINT64,
+}}
+pub type PServerInformation = *mut ServerInformation;
+extern "system" {
+ pub fn CoDecodeProxy(
+ dwClientPid: DWORD,
+ ui64ProxyAddress: UINT64,
+ pServerInformation: PServerInformation,
+ ) -> HRESULT;
+}
+DECLARE_HANDLE!{CO_MTA_USAGE_COOKIE, CO_MTA_USAGE_COOKIE__}
+extern "system" {
+ pub fn CoIncrementMTAUsage(
+ pCookie: *mut CO_MTA_USAGE_COOKIE,
+ ) -> HRESULT;
+ pub fn CoDecrementMTAUsage(
+ Cookie: CO_MTA_USAGE_COOKIE,
+ ) -> HRESULT;
+ pub fn CoAllowUnmarshalerCLSID(
+ clsid: REFCLSID,
+ ) -> HRESULT;
+ pub fn CoGetObjectContext(
+ riid: REFIID,
+ ppv: *mut LPVOID,
+ ) -> HRESULT;
+ pub fn CoGetClassObject(
+ rclsid: REFCLSID,
+ dwClsContext: DWORD,
+ pvReserved: LPVOID,
+ riid: REFIID,
+ ppv: *mut LPVOID,
+ ) -> HRESULT;
+ pub fn CoRegisterClassObject(
+ rclsid: REFCLSID,
+ pUnk: LPUNKNOWN,
+ dwClsContext: DWORD,
+ flags: DWORD,
+ lpdwRegister: LPDWORD,
+ ) -> HRESULT;
+ pub fn CoRevokeClassObject(
+ dwRegister: DWORD,
+ ) -> HRESULT;
+ pub fn CoResumeClassObjects() -> HRESULT;
+ pub fn CoSuspendClassObjects() -> HRESULT;
+ pub fn CoAddRefServerProcess() -> ULONG;
+ pub fn CoReleaseServerProcess() -> ULONG;
+ pub fn CoGetPSClsid(
+ riid: REFIID,
+ pClsid: *mut CLSID,
+ ) -> HRESULT;
+ pub fn CoRegisterPSClsid(
+ riid: REFIID,
+ rclsid: REFCLSID,
+ ) -> HRESULT;
+ pub fn CoRegisterSurrogate(
+ pSurrogate: LPSURROGATE,
+ ) -> HRESULT;
+ pub fn CoGetMarshalSizeMax(
+ pulSize: *mut ULONG,
+ riid: REFIID,
+ pUnk: LPUNKNOWN,
+ dwDestContext: DWORD,
+ pvDestContext: LPVOID,
+ mshlflags: DWORD,
+ ) -> HRESULT;
+ pub fn CoMarshalInterface(
+ pStm: LPSTREAM,
+ riid: REFIID,
+ pUnk: LPUNKNOWN,
+ dwDestContext: DWORD,
+ pvDestContext: LPVOID,
+ mshlflags: DWORD,
+ ) -> HRESULT;
+ pub fn CoUnmarshalInterface(
+ pStm: LPSTREAM,
+ riid: REFIID,
+ ppv: *mut LPVOID,
+ ) -> HRESULT;
+ pub fn CoMarshalHresult(
+ pstm: LPSTREAM,
+ hresult: HRESULT,
+ ) -> HRESULT;
+ pub fn CoUnmarshalHresult(
+ pstm: LPSTREAM,
+ phresult: *mut HRESULT,
+ ) -> HRESULT;
+ pub fn CoReleaseMarshalData(
+ pstm: LPSTREAM,
+ ) -> HRESULT;
+ pub fn CoDisconnectObject(
+ pUnk: LPUNKNOWN,
+ dwReserved: DWORD,
+ ) -> HRESULT;
+ pub fn CoLockObjectExternal(
+ pUnk: LPUNKNOWN,
+ fLock: BOOL,
+ fLastUnlockReleases: BOOL,
+ ) -> HRESULT;
+ pub fn CoGetStandardMarshal(
+ riid: REFIID,
+ pUnk: LPUNKNOWN,
+ dwDestContext: DWORD,
+ pvDestContext: LPVOID,
+ mshlflags: DWORD,
+ ppMarshal: *mut LPMARSHAL,
+ ) -> HRESULT;
+ pub fn CoGetStdMarshalEx(
+ pUnkOuter: LPUNKNOWN,
+ smexflags: DWORD,
+ ppUnkInner: *mut LPUNKNOWN,
+ ) -> HRESULT;
+}
+ENUM!{enum STDMSHLFLAGS {
+ SMEXF_SERVER = 0x01,
+ SMEXF_HANDLER = 0x02,
+}}
+extern "system" {
+ pub fn CoIsHandlerConnected(
+ pUnk: LPUNKNOWN,
+ ) -> BOOL;
+ pub fn CoMarshalInterThreadInterfaceInStream(
+ riid: REFIID,
+ pUnk: LPUNKNOWN,
+ ppStm: *mut LPSTREAM,
+ ) -> HRESULT;
+ pub fn CoGetInterfaceAndReleaseStream(
+ pStm: LPSTREAM,
+ iid: REFIID,
+ ppv: *mut LPVOID,
+ ) -> HRESULT;
+ pub fn CoCreateFreeThreadedMarshaler(
+ punkOuter: LPUNKNOWN,
+ ppunkMarshal: *mut LPUNKNOWN,
+ ) -> HRESULT;
+ pub fn CoFreeUnusedLibraries();
+ pub fn CoFreeUnusedLibrariesEx(
+ dwUnloadDelay: DWORD,
+ dwReserved: DWORD,
+ );
+ pub fn CoDisconnectContext(
+ dwTimeout: DWORD,
+ )-> HRESULT;
+ pub fn CoInitializeSecurity(
+ pSecDesc: PSECURITY_DESCRIPTOR,
+ cAuthSvc: LONG,
+ asAuthSvc: *mut SOLE_AUTHENTICATION_SERVICE,
+ pReserved1: *mut c_void,
+ dwAuthnLevel: DWORD,
+ dwImpLevel: DWORD,
+ pAuthList: *mut c_void,
+ dwCapabilities: DWORD,
+ pReserved3: *mut c_void,
+ ) -> HRESULT;
+ pub fn CoGetCallContext(
+ riid: REFIID,
+ ppInterface: *mut *mut c_void,
+ ) -> HRESULT;
+ pub fn CoQueryProxyBlanket(
+ pProxy: *mut IUnknown,
+ pwAuthnSvc: *mut DWORD,
+ pAuthzSvc: *mut DWORD,
+ pServerPrincName: *mut LPOLESTR,
+ pAuthnLevel: *mut DWORD,
+ pImpLevel: *mut DWORD,
+ pAuthInfo: *mut RPC_AUTH_IDENTITY_HANDLE,
+ pCapabilites: *mut DWORD,
+ ) -> HRESULT;
+ pub fn CoSetProxyBlanket(
+ pProxy: *mut IUnknown,
+ dwAuthnSvc: DWORD,
+ dwAuthzSvc: DWORD,
+ pServerPrincName: *mut OLECHAR,
+ dwAuthnLevel: DWORD,
+ dwImpLevel: DWORD,
+ pAuthInfo: RPC_AUTH_IDENTITY_HANDLE,
+ dwCapabilities: DWORD,
+ ) -> HRESULT;
+ pub fn CoCopyProxy(
+ pProxy: *mut IUnknown,
+ ppCopy: *mut *mut IUnknown,
+ ) -> HRESULT;
+ pub fn CoQueryClientBlanket(
+ pAuthnSvc: *mut DWORD,
+ pAuthzSvc: *mut DWORD,
+ pServerPrincName: *mut LPOLESTR,
+ pAuthnLevel: *mut DWORD,
+ pImpLevel: *mut DWORD,
+ pPrivs: *mut RPC_AUTHZ_HANDLE,
+ pCapabilities: *mut DWORD,
+ ) -> HRESULT;
+ pub fn CoImpersonateClient() -> HRESULT;
+ pub fn CoRevertToSelf() -> HRESULT;
+ pub fn CoQueryAuthenticationServices(
+ pcAuthSvc: *mut DWORD,
+ asAuthSvc: *mut *mut SOLE_AUTHENTICATION_SERVICE,
+ ) -> HRESULT;
+ pub fn CoSwitchCallContext(
+ pNewObject: *mut IUnknown,
+ ppOldObject: *mut *mut IUnknown,
+ ) -> HRESULT;
+}
+pub const COM_RIGHTS_EXECUTE: DWORD = 1;
+pub const COM_RIGHTS_EXECUTE_LOCAL: DWORD = 2;
+pub const COM_RIGHTS_EXECUTE_REMOTE: DWORD = 4;
+pub const COM_RIGHTS_ACTIVATE_LOCAL: DWORD = 8;
+pub const COM_RIGHTS_ACTIVATE_REMOTE: DWORD = 16;
+extern "system" {
+ pub fn CoCreateInstance(
+ rclsid: REFCLSID,
+ pUnkOuter: LPUNKNOWN,
+ dwClsContext: DWORD,
+ riid: REFIID,
+ ppv: *mut LPVOID,
+ ) -> HRESULT;
+ pub fn CoCreateInstanceEx(
+ Clsid: REFCLSID,
+ punkOuter: *mut IUnknown,
+ dwClsCtx: DWORD,
+ pServerInfo: *mut COSERVERINFO,
+ dwCount: DWORD,
+ pResults: *mut MULTI_QI,
+ ) -> HRESULT;
+ pub fn CoRegisterActivationFilter(
+ pActivationFilter: *mut IActivationFilter,
+ ) -> HRESULT;
+ pub fn CoCreateInstanceFromApp(
+ Clsid: REFCLSID,
+ punkOuter: *mut IUnknown,
+ dwClsCtx: DWORD,
+ reserved: PVOID,
+ dwCount: DWORD,
+ pResults: *mut MULTI_QI,
+ ) -> HRESULT;
+ pub fn CoGetCancelObject(
+ dwThreadId: DWORD,
+ iid: REFIID,
+ ppUnk: *mut *mut c_void,
+ ) -> HRESULT;
+ pub fn CoSetCancelObject(
+ pUnk: *mut *mut IUnknown,
+ ) -> HRESULT;
+ pub fn CoCancelCall(
+ dwThreadId: DWORD,
+ ulTimeout: ULONG,
+ ) -> HRESULT;
+ pub fn CoTestCancel() -> HRESULT;
+ pub fn CoEnableCallCancellation(
+ pReserved: LPVOID,
+ ) -> HRESULT;
+ pub fn CoDisableCallCancellation(
+ pReserved: LPVOID,
+ ) -> HRESULT;
+ pub fn StringFromCLSID(
+ rclsid: REFCLSID,
+ lplpsz: *mut LPOLESTR,
+ ) -> HRESULT;
+ pub fn CLSIDFromString(
+ lpsz: LPCOLESTR,
+ pclsid: LPCLSID,
+ ) -> HRESULT;
+ pub fn StringFromIID(
+ rclsid: REFIID,
+ lplpsz: *mut LPOLESTR,
+ ) -> HRESULT;
+ pub fn IIDFromString(
+ lpsz: LPCOLESTR,
+ lpiid: LPIID,
+ ) -> HRESULT;
+ pub fn ProgIDFromCLSID(
+ clsid: REFCLSID,
+ lplpszProgID: *mut LPOLESTR,
+ ) -> HRESULT;
+ pub fn CLSIDFromProgID(
+ lpszProgID: LPCOLESTR,
+ lpclsid: LPCLSID,
+ ) -> HRESULT;
+ pub fn StringFromGUID2(
+ rguid: REFGUID,
+ lpsz: LPOLESTR,
+ cchMax: c_int,
+ ) -> c_int;
+ pub fn CoCreateGuid(
+ pguid: *mut GUID,
+ ) -> HRESULT;
+ pub fn PropVariantCopy(
+ pvarDest: *mut PROPVARIANT,
+ pvarSrc: *const PROPVARIANT,
+ ) -> HRESULT;
+ pub fn PropVariantClear(
+ pvar: *mut PROPVARIANT,
+ ) -> HRESULT;
+ pub fn FreePropVariantArray(
+ cVariants: ULONG,
+ rgvars: *mut PROPVARIANT,
+ ) -> HRESULT;
+ pub fn CoWaitForMultipleHandles(
+ dwFlags: DWORD,
+ dwTimeout: DWORD,
+ cHandles: ULONG,
+ pHandles: LPHANDLE,
+ lpdwindex: LPDWORD,
+ ) -> HRESULT;
+}
+ENUM!{enum COWAIT_FLAGS {
+ COWAIT_DEFAULT = 0,
+ COWAIT_WAITALL = 1,
+ COWAIT_ALERTABLE = 2,
+ COWAIT_INPUTAVAILABLE = 4,
+ COWAIT_DISPATCH_CALLS = 8,
+ COWAIT_DISPATCH_WINDOW_MESSAGES = 0x10,
+}}
+ENUM!{enum CWMO_FLAGS {
+ CWMO_DEFAULT = 0,
+ CWMO_DISPATCH_CALLS = 1,
+ CWMO_DISPATCH_WINDOW_MESSAGES = 2,
+}}
+extern "system" {
+ pub fn CoWaitForMultipleObjects(
+ dwFlags: DWORD,
+ dwTimeout: DWORD,
+ cHandles: ULONG,
+ pHandles: *const HANDLE,
+ lpdwindex: LPDWORD,
+ ) -> HRESULT;
+}
+pub const CWMO_MAX_HANDLES: ULONG = 56;
+extern "system" {
+ pub fn CoGetTreatAsClass(
+ clsidOld: REFCLSID,
+ pClsidNew: LPCLSID,
+ ) -> HRESULT;
+ pub fn CoInvalidateRemoteMachineBindings(
+ pszMachineName: LPOLESTR,
+ ) -> HRESULT;
+}
+ENUM!{enum AgileReferenceOptions {
+ AGILEREFERENCE_DEFAULT = 0,
+ AGILEREFERENCE_DELAYEDMARSHAL = 1,
+}}
+extern "system" {
+ pub fn RoGetAgileReference(
+ options: AgileReferenceOptions,
+ riid: REFIID,
+ pUnk: *mut IUnknown,
+ ppAgileReference: *mut *mut IAgileReference,
+ ) -> HRESULT;
+}
+FN!{stdcall LPFNGETCLASSOBJECT(
+ REFCLSID,
+ REFIID,
+ *mut LPVOID,
+) -> HRESULT}
+FN!{stdcall LPFNCANUNLOADNOW() -> HRESULT}
+extern "system" {
+ pub fn DllGetClassObject(
+ rclsid: REFCLSID,
+ riid: REFIID,
+ ppv: *mut LPVOID,
+ ) -> HRESULT;
+ pub fn DllCanUnloadNow() -> HRESULT;
+ pub fn CoTaskMemAlloc(
+ cb: SIZE_T,
+ ) -> LPVOID;
+ pub fn CoTaskMemRealloc(
+ pv: LPVOID,
+ cb: SIZE_T,
+ ) -> LPVOID;
+ pub fn CoTaskMemFree(
+ pv: LPVOID,
+ );
+ pub fn CoFileTimeNow(
+ lpFileTime: *mut FILETIME,
+ ) -> HRESULT;
+ pub fn CLSIDFromProgIDEx(
+ lpszProgID: LPCOLESTR,
+ lpclsid: LPCLSID,
+ ) -> HRESULT;
+}
diff --git a/vendor/winapi/src/um/coml2api.rs b/vendor/winapi/src/um/coml2api.rs
new file mode 100644
index 000000000..449be87e3
--- /dev/null
+++ b/vendor/winapi/src/um/coml2api.rs
@@ -0,0 +1,10 @@
+// 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
+//! Structured storage, property sets, and related APIs.
+use shared::minwindef::DWORD;
+pub const STGM_READ: DWORD = 0x00000000;
+pub const STGM_WRITE: DWORD = 0x00000001;
+pub const STGM_READWRITE: DWORD = 0x00000002;
diff --git a/vendor/winapi/src/um/commapi.rs b/vendor/winapi/src/um/commapi.rs
new file mode 100644
index 000000000..433bb78fa
--- /dev/null
+++ b/vendor/winapi/src/um/commapi.rs
@@ -0,0 +1,87 @@
+// 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 ctypes::c_char;
+use shared::minwindef::{BOOL, DWORD, LPDWORD};
+use um::minwinbase::LPOVERLAPPED;
+use um::winbase::{LPCOMMCONFIG, LPCOMMPROP, LPCOMMTIMEOUTS, LPCOMSTAT, LPDCB};
+use um::winnt::HANDLE;
+extern "system" {
+ pub fn ClearCommBreak(
+ hFile: HANDLE,
+ ) -> BOOL;
+ pub fn ClearCommError(
+ hFile: HANDLE,
+ lpErrors: LPDWORD,
+ lpStat: LPCOMSTAT,
+ ) -> BOOL;
+ pub fn SetupComm(
+ hFile: HANDLE,
+ dwInQueue: DWORD,
+ dwOutQueue: DWORD,
+ ) -> BOOL;
+ pub fn EscapeCommFunction(
+ hFile: HANDLE,
+ dwFunc: DWORD,
+ ) -> BOOL;
+ pub fn GetCommConfig(
+ hCommDev: HANDLE,
+ lpCC: LPCOMMCONFIG,
+ lpdwSize: LPDWORD,
+ ) -> BOOL;
+ pub fn GetCommMask(
+ hFile: HANDLE,
+ lpEvtMask: LPDWORD,
+ ) -> BOOL;
+ pub fn GetCommModemStatus(
+ hFile: HANDLE,
+ lpModemStat: LPDWORD,
+ ) -> BOOL;
+ pub fn GetCommProperties(
+ hFile: HANDLE,
+ lpCommProp: LPCOMMPROP,
+ ) -> BOOL;
+ pub fn GetCommState(
+ hFile: HANDLE,
+ lpDCB: LPDCB,
+ ) -> BOOL;
+ pub fn GetCommTimeouts(
+ hFile: HANDLE,
+ lpCommTimeouts: LPCOMMTIMEOUTS,
+ ) -> BOOL;
+ pub fn PurgeComm(
+ hFile: HANDLE,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn SetCommBreak(
+ hFile: HANDLE,
+ ) -> BOOL;
+ pub fn SetCommConfig(
+ hCommDev: HANDLE,
+ lpCC: LPCOMMCONFIG,
+ dwSize: DWORD,
+ ) -> BOOL;
+ pub fn SetCommMask(
+ hFile: HANDLE,
+ dwEvtMask: DWORD,
+ ) -> BOOL;
+ pub fn SetCommState(
+ hFile: HANDLE,
+ lpDCB: LPDCB,
+ ) -> BOOL;
+ pub fn SetCommTimeouts(
+ hFile: HANDLE,
+ lpCommTimeouts: LPCOMMTIMEOUTS,
+ ) -> BOOL;
+ pub fn TransmitCommChar(
+ hFile: HANDLE,
+ cChar: c_char,
+ ) -> BOOL;
+ pub fn WaitCommEvent(
+ hFile: HANDLE,
+ lpEvtMask: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/commctrl.rs b/vendor/winapi/src/um/commctrl.rs
new file mode 100644
index 000000000..0d4d64920
--- /dev/null
+++ b/vendor/winapi/src/um/commctrl.rs
@@ -0,0 +1,4135 @@
+// 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 ctypes::{c_char, c_int, c_long, c_short, c_void};
+use shared::basetsd::{DWORD_PTR, INT_PTR, LONG_PTR, UINT_PTR};
+#[cfg(target_pointer_width = "64")] use shared::basetsd::PINT_PTR;
+use shared::guiddef::{IID, REFIID};
+use shared::minwindef::{
+ BOOL, BYTE, DWORD, HINSTANCE, HKEY, INT, LPARAM, LPINT, LRESULT, PUINT, UINT, ULONG, WORD,
+ WPARAM,
+};
+use shared::windef::{
+ COLORREF, HBITMAP, HBRUSH, HDC, HICON, HMENU, HPEN, HWND, LPCRECT, LPRECT, POINT, RECT, SIZE,
+};
+use um::commoncontrols::IImageList;
+use um::minwinbase::SYSTEMTIME;
+use um::winnt::{CHAR, LANGID, LONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PCWSTR, PVOID, PWSTR, WCHAR};
+use um::winuser::{
+ CB_DELETESTRING, IMAGE_BITMAP, LPSCROLLINFO, LPTRACKMOUSEEVENT, NMHDR,
+ WINDOWPOS, WM_USER,
+};
+use vc::vcruntime::size_t;
+pub type HRESULT = c_long;
+extern "system" {
+ pub fn InitCommonControls();
+}
+//138
+STRUCT!{struct INITCOMMONCONTROLSEX {
+ dwSize: DWORD,
+ dwICC: DWORD,
+}}
+pub type LPINITCOMMONCONTROLSEX = *mut INITCOMMONCONTROLSEX;
+pub const ICC_LISTVIEW_CLASSES: DWORD = 0x1;
+pub const ICC_TREEVIEW_CLASSES: DWORD = 0x2;
+pub const ICC_BAR_CLASSES: DWORD = 0x4;
+pub const ICC_TAB_CLASSES: DWORD = 0x8;
+pub const ICC_UPDOWN_CLASS: DWORD = 0x10;
+pub const ICC_PROGRESS_CLASS: DWORD = 0x20;
+pub const ICC_HOTKEY_CLASS: DWORD = 0x40;
+pub const ICC_ANIMATE_CLASS: DWORD = 0x80;
+pub const ICC_WIN95_CLASSES: DWORD = 0xFF;
+pub const ICC_DATE_CLASSES: DWORD = 0x100;
+pub const ICC_USEREX_CLASSES: DWORD = 0x200;
+pub const ICC_COOL_CLASSES: DWORD = 0x400;
+pub const ICC_INTERNET_CLASSES: DWORD = 0x800;
+pub const ICC_PAGESCROLLER_CLASS: DWORD = 0x1000;
+pub const ICC_NATIVEFNTCTL_CLASS: DWORD = 0x2000;
+pub const ICC_STANDARD_CLASSES: DWORD = 0x4000;
+pub const ICC_LINK_CLASS: DWORD = 0x8000;
+extern "system" {
+ pub fn InitCommonControlsEx(
+ lpInitCtrls: *const INITCOMMONCONTROLSEX,
+ ) -> BOOL;
+}
+pub const ODT_HEADER: UINT = 100;
+pub const ODT_TAB: UINT = 101;
+pub const ODT_LISTVIEW: UINT = 102;
+pub const LVM_FIRST: UINT = 0x1000;
+pub const TV_FIRST: UINT = 0x1100;
+pub const HDM_FIRST: UINT = 0x1200;
+pub const TCM_FIRST: UINT = 0x1300;
+pub const PGM_FIRST: UINT = 0x1400;
+pub const ECM_FIRST: UINT = 0x1500;
+pub const BCM_FIRST: UINT = 0x1600;
+pub const CBM_FIRST: UINT = 0x1700;
+pub const CCM_FIRST: UINT = 0x2000;
+pub const CCM_LAST: UINT = CCM_FIRST + 0x200;
+pub const CCM_SETBKCOLOR: UINT = CCM_FIRST + 1;
+STRUCT!{struct COLORSCHEME {
+ dwSize: DWORD,
+ clrBtnHighlight: COLORREF,
+ clrBtnShadow: COLORREF,
+}}
+pub type LPCOLORSCHEME = *mut COLORSCHEME;
+pub const CCM_SETCOLORSCHEME: UINT = CCM_FIRST + 2;
+pub const CCM_GETCOLORSCHEME: UINT = CCM_FIRST + 3;
+pub const CCM_GETDROPTARGET: UINT = CCM_FIRST + 4;
+pub const CCM_SETUNICODEFORMAT: UINT = CCM_FIRST + 5;
+pub const CCM_GETUNICODEFORMAT: UINT = CCM_FIRST + 6;
+pub const CCM_SETVERSION: UINT = CCM_FIRST + 7;
+pub const CCM_GETVERSION: UINT = CCM_FIRST + 8;
+pub const CCM_SETNOTIFYWINDOW: UINT = CCM_FIRST + 9;
+pub const CCM_SETWINDOWTHEME: UINT = CCM_FIRST + 0xb;
+pub const CCM_DPISCALE: UINT = CCM_FIRST + 0xc;
+pub const INFOTIPSIZE: c_int = 1024;
+pub const NM_OUTOFMEMORY: UINT = (NM_FIRST as i32 - 1) as u32;
+pub const NM_CLICK: UINT = (NM_FIRST as i32 - 2) as u32;
+pub const NM_DBLCLK: UINT = (NM_FIRST as i32 - 3) as u32;
+pub const NM_RETURN: UINT = (NM_FIRST as i32 - 4) as u32;
+pub const NM_RCLICK: UINT = (NM_FIRST as i32 - 5) as u32;
+pub const NM_RDBLCLK: UINT = (NM_FIRST as i32 - 6) as u32;
+pub const NM_SETFOCUS: UINT = (NM_FIRST as i32 - 7) as u32;
+pub const NM_KILLFOCUS: UINT = (NM_FIRST as i32 - 8) as u32;
+pub const NM_CUSTOMDRAW: UINT = (NM_FIRST as i32 - 12) as u32;
+pub const NM_HOVER: UINT = (NM_FIRST as i32 - 13) as u32;
+pub const NM_NCHITTEST: UINT = (NM_FIRST as i32 - 14) as u32;
+pub const NM_KEYDOWN: UINT = (NM_FIRST as i32 - 15) as u32;
+pub const NM_RELEASEDCAPTURE: UINT = (NM_FIRST as i32 - 16) as u32;
+pub const NM_SETCURSOR: UINT = (NM_FIRST as i32 - 17) as u32;
+pub const NM_CHAR: UINT = (NM_FIRST as i32 - 18) as u32;
+pub const NM_TOOLTIPSCREATED: UINT = (NM_FIRST as i32 - 19) as u32;
+pub const NM_LDOWN: UINT = (NM_FIRST as i32 - 20) as u32;
+pub const NM_RDOWN: UINT = (NM_FIRST as i32 - 21) as u32;
+pub const NM_THEMECHANGED: UINT = (NM_FIRST as i32 - 22) as u32;
+pub const NM_FONTCHANGED: UINT = (NM_FIRST as i32 - 23) as u32;
+pub const NM_CUSTOMTEXT: UINT = (NM_FIRST as i32 - 24) as u32;
+pub const NM_TVSTATEIMAGECHANGING: UINT = (NM_FIRST as i32 - 24) as u32;
+STRUCT!{struct NMTOOLTIPSCREATED {
+ hdr: NMHDR,
+ hwndToolTips: HWND,
+}}
+pub type LPNMTOOLTIPSCREATED = *mut NMTOOLTIPSCREATED;
+STRUCT!{struct NMMOUSE {
+ hdr: NMHDR,
+ dwItemSpec: DWORD_PTR,
+ dwItemData: DWORD_PTR,
+ pt: POINT,
+ dwHitInfo: LPARAM,
+}}
+pub type LPNMMOUSE = *mut NMMOUSE;
+pub type NMCLICK = NMMOUSE;
+pub type LPNMCLICK = LPNMMOUSE;
+STRUCT!{struct NMOBJECTNOTIFY {
+ hdr: NMHDR,
+ iItem: c_int,
+ piid: *const IID,
+ pObject: *mut c_void,
+ hResult: HRESULT,
+ dwFlags: DWORD,
+}}
+pub type LPNMOBJECTNOTIFY = *mut NMOBJECTNOTIFY;
+STRUCT!{struct NMKEY {
+ hdr: NMHDR,
+ nVKey: UINT,
+ uFlags: UINT,
+}}
+pub type LPNMKEY = *mut NMKEY;
+STRUCT!{struct NMCHAR {
+ hdr: NMHDR,
+ ch: UINT,
+ dwItemPrev: DWORD,
+ dwItemNext: DWORD,
+}}
+pub type LPNMCHAR = *mut NMCHAR;
+STRUCT!{struct NMCUSTOMTEXT {
+ hdr: NMHDR,
+ hDC: HDC,
+ lpString: LPCWSTR,
+ nCount: c_int,
+ lpRect: LPRECT,
+ uFormat: UINT,
+ fLink: BOOL,
+}}
+pub type LPNMCUSTOMTEXT = *mut NMCUSTOMTEXT;
+pub const NM_FIRST: UINT = 0;
+pub const NM_LAST: UINT = -99i32 as u32;
+pub const LVN_FIRST: UINT = -100i32 as u32;
+pub const LVN_LAST: UINT = -199i32 as u32;
+pub const HDN_FIRST: UINT = -300i32 as u32;
+pub const HDN_LAST: UINT = -399i32 as u32;
+pub const TVN_FIRST: UINT = -400i32 as u32;
+pub const TVN_LAST: UINT = -499i32 as u32;
+pub const TTN_FIRST: UINT = -520i32 as u32;
+pub const TTN_LAST: UINT = -549i32 as u32;
+pub const TCN_FIRST: UINT = -550i32 as u32;
+pub const TCN_LAST: UINT = -580i32 as u32;
+pub const CDN_FIRST: UINT = -601i32 as u32;
+pub const CDN_LAST: UINT = -699i32 as u32;
+pub const TBN_FIRST: UINT = -700i32 as u32;
+pub const TBN_LAST: UINT = -720i32 as u32;
+pub const UDN_FIRST: UINT = -721i32 as u32;
+pub const UDN_LAST: UINT = -729i32 as u32;
+pub const DTN_FIRST: UINT = -740i32 as u32;
+pub const DTN_LAST: UINT = -745i32 as u32;
+pub const MCN_FIRST: UINT = -746i32 as u32;
+pub const MCN_LAST: UINT = -752i32 as u32;
+pub const DTN_FIRST2: UINT = -753i32 as u32;
+pub const DTN_LAST2: UINT = -799i32 as u32;
+pub const CBEN_FIRST: UINT = -800i32 as u32;
+pub const CBEN_LAST: UINT = -830i32 as u32;
+pub const RBN_FIRST: UINT = -831i32 as u32;
+pub const RBN_LAST: UINT = -859i32 as u32;
+pub const IPN_FIRST: UINT = -860i32 as u32;
+pub const IPN_LAST: UINT = -879i32 as u32;
+pub const SBN_FIRST: UINT = -880i32 as u32;
+pub const SBN_LAST: UINT = -899i32 as u32;
+pub const PGN_FIRST: UINT = -900i32 as u32;
+pub const PGN_LAST: UINT = -950i32 as u32;
+pub const WMN_FIRST: UINT = -1000i32 as u32;
+pub const WMN_LAST: UINT = -1200i32 as u32;
+pub const BCN_FIRST: UINT = -1250i32 as u32;
+pub const BCN_LAST: UINT = -1350i32 as u32;
+pub const TRBN_FIRST: UINT = -1501i32 as u32;
+pub const TRBN_LAST: UINT = -1519i32 as u32;
+pub const MSGF_COMMCTRL_BEGINDRAG: c_int = 0x4200;
+pub const MSGF_COMMCTRL_SIZEHEADER: c_int = 0x4201;
+pub const MSGF_COMMCTRL_DRAGSELECT: c_int = 0x4202;
+pub const MSGF_COMMCTRL_TOOLBARCUST: c_int = 0x4203;
+pub const CDRF_DODEFAULT: LRESULT = 0x00000000;
+pub const CDRF_NEWFONT: LRESULT = 0x00000002;
+pub const CDRF_SKIPDEFAULT: LRESULT = 0x00000004;
+pub const CDRF_DOERASE: LRESULT = 0x00000008;
+pub const CDRF_SKIPPOSTPAINT: LRESULT = 0x00000100;
+pub const CDRF_NOTIFYPOSTPAINT: LRESULT = 0x00000010;
+pub const CDRF_NOTIFYITEMDRAW: LRESULT = 0x00000020;
+pub const CDRF_NOTIFYSUBITEMDRAW: LRESULT = 0x00000020;
+pub const CDRF_NOTIFYPOSTERASE: LRESULT = 0x00000040;
+pub const CDDS_PREPAINT: DWORD = 0x00000001;
+pub const CDDS_POSTPAINT: DWORD = 0x00000002;
+pub const CDDS_PREERASE: DWORD = 0x00000003;
+pub const CDDS_POSTERASE: DWORD = 0x00000004;
+pub const CDDS_ITEM: DWORD = 0x00010000;
+pub const CDDS_ITEMPREPAINT: DWORD = CDDS_ITEM | CDDS_PREPAINT;
+pub const CDDS_ITEMPOSTPAINT: DWORD = CDDS_ITEM | CDDS_POSTPAINT;
+pub const CDDS_ITEMPREERASE: DWORD = CDDS_ITEM | CDDS_PREERASE;
+pub const CDDS_ITEMPOSTERASE: DWORD = CDDS_ITEM | CDDS_POSTERASE;
+pub const CDDS_SUBITEM: DWORD = 0x00020000;
+pub const CDIS_SELECTED: UINT = 0x0001;
+pub const CDIS_GRAYED: UINT = 0x0002;
+pub const CDIS_DISABLED: UINT = 0x0004;
+pub const CDIS_CHECKED: UINT = 0x0008;
+pub const CDIS_FOCUS: UINT = 0x0010;
+pub const CDIS_DEFAULT: UINT = 0x0020;
+pub const CDIS_HOT: UINT = 0x0040;
+pub const CDIS_MARKED: UINT = 0x0080;
+pub const CDIS_INDETERMINATE: UINT = 0x0100;
+pub const CDIS_SHOWKEYBOARDCUES: UINT = 0x0200;
+pub const CDIS_NEARHOT: UINT = 0x0400;
+pub const CDIS_OTHERSIDEHOT: UINT = 0x0800;
+pub const CDIS_DROPHILITED: UINT = 0x1000;
+STRUCT!{struct NMCUSTOMDRAW {
+ hdr: NMHDR,
+ dwDrawStage: DWORD,
+ hdc: HDC,
+ rc: RECT,
+ dwItemSpec: DWORD_PTR,
+ uItemState: UINT,
+ lItemlParam: LPARAM,
+}}
+pub type LPNMCUSTOMDRAW = *mut NMCUSTOMDRAW;
+STRUCT!{struct NMTTCUSTOMDRAW {
+ nmcd: NMCUSTOMDRAW,
+ uDrawFlags: UINT,
+}}
+pub type LPNMTTCUSTOMDRAW = *mut NMTTCUSTOMDRAW;
+STRUCT!{struct NMCUSTOMSPLITRECTINFO {
+ hdr: NMHDR,
+ rcClient: RECT,
+ rcButton: RECT,
+ rcSplit: RECT,
+}}
+pub type LPNMCUSTOMSPLITRECTINFO = *mut NMCUSTOMSPLITRECTINFO;
+pub const NM_GETCUSTOMSPLITRECT: UINT = BCN_FIRST + 0x0003;
+pub const CLR_NONE: DWORD = 0xFFFFFFFF;
+pub const CLR_DEFAULT: DWORD = 0xFF000000;
+pub enum IMAGELIST {}
+pub type HIMAGELIST = *mut IMAGELIST;
+STRUCT!{struct IMAGELISTDRAWPARAMS {
+ cbSize: DWORD,
+ himl: HIMAGELIST,
+ i: c_int,
+ hdcDst: HDC,
+ x: c_int,
+ y: c_int,
+ cx: c_int,
+ cy: c_int,
+ xBitmap: c_int,
+ yBitmap: c_int,
+ rgbBk: COLORREF,
+ rgbFg: COLORREF,
+ fStyle: UINT,
+ dwRop: DWORD,
+ fState: DWORD,
+ Frame: DWORD,
+ crEffect: COLORREF,
+}}
+pub type LPIMAGELISTDRAWPARAMS = *mut IMAGELISTDRAWPARAMS;
+pub const ILC_MASK: UINT = 0x00000001;
+pub const ILC_COLOR: UINT = 0x00000000;
+pub const ILC_COLORDDB: UINT = 0x000000FE;
+pub const ILC_COLOR4: UINT = 0x00000004;
+pub const ILC_COLOR8: UINT = 0x00000008;
+pub const ILC_COLOR16: UINT = 0x00000010;
+pub const ILC_COLOR24: UINT = 0x00000018;
+pub const ILC_COLOR32: UINT = 0x00000020;
+pub const ILC_PALETTE: UINT = 0x00000800;
+pub const ILC_MIRROR: UINT = 0x00002000;
+pub const ILC_PERITEMMIRROR: UINT = 0x00008000;
+pub const ILC_ORIGINALSIZE: UINT = 0x00010000;
+pub const ILC_HIGHQUALITYSCALE: UINT = 0x00020000;
+extern "system" {
+ pub fn ImageList_Create(
+ cx: c_int,
+ cy: c_int,
+ flags: UINT,
+ cInitial: c_int,
+ cGrow: c_int,
+ ) -> HIMAGELIST;
+ pub fn ImageList_Destroy(
+ himl: HIMAGELIST,
+ ) -> BOOL;
+ pub fn ImageList_GetImageCount(
+ himl: HIMAGELIST,
+ ) -> c_int;
+ pub fn ImageList_SetImageCount(
+ himl: HIMAGELIST,
+ uNewCount: UINT,
+ ) -> BOOL;
+ pub fn ImageList_Add(
+ himl: HIMAGELIST,
+ hbmImage: HBITMAP,
+ hbmMask: HBITMAP,
+ ) -> c_int;
+ pub fn ImageList_ReplaceIcon(
+ himl: HIMAGELIST,
+ i: c_int,
+ hicon: HICON,
+ ) -> c_int;
+ pub fn ImageList_SetBkColor(
+ himl: HIMAGELIST,
+ clrBk: COLORREF,
+ ) -> COLORREF;
+ pub fn ImageList_GetBkColor(
+ himl: HIMAGELIST,
+ ) -> COLORREF;
+ pub fn ImageList_SetOverlayImage(
+ himl: HIMAGELIST,
+ iImage: c_int,
+ iOverlay: c_int,
+ ) -> BOOL;
+}
+#[inline]
+pub unsafe fn ImageList_AddIcon(himl: HIMAGELIST, hicon: HICON) -> c_int {
+ ImageList_ReplaceIcon(himl, -1, hicon)
+}
+pub const ILD_NORMAL: UINT = 0x00000000;
+pub const ILD_TRANSPARENT: UINT = 0x00000001;
+pub const ILD_MASK: UINT = 0x00000010;
+pub const ILD_IMAGE: UINT = 0x00000020;
+pub const ILD_ROP: UINT = 0x00000040;
+pub const ILD_BLEND25: UINT = 0x00000002;
+pub const ILD_BLEND50: UINT = 0x00000004;
+pub const ILD_OVERLAYMASK: UINT = 0x00000F00;
+#[inline]
+pub fn INDEXTOOVERLAYMASK(i: UINT) -> UINT {
+ i << 8
+}
+pub const ILD_PRESERVEALPHA: UINT = 0x00001000;
+pub const ILD_SCALE: UINT = 0x00002000;
+pub const ILD_DPISCALE: UINT = 0x00004000;
+pub const ILD_ASYNC: UINT = 0x00008000;
+pub const ILD_SELECTED: UINT = ILD_BLEND50;
+pub const ILD_FOCUS: UINT = ILD_BLEND25;
+pub const ILD_BLEND: UINT = ILD_BLEND50;
+pub const CLR_HILIGHT: DWORD = CLR_DEFAULT;
+pub const ILS_NORMAL: DWORD = 0x00000000;
+pub const ILS_GLOW: DWORD = 0x00000001;
+pub const ILS_SHADOW: DWORD = 0x00000002;
+pub const ILS_SATURATE: DWORD = 0x00000004;
+pub const ILS_ALPHA: DWORD = 0x00000008;
+pub const ILGT_NORMAL: DWORD = 0x00000000;
+pub const ILGT_ASYNC : DWORD = 0x00000001;
+extern "system" {
+ pub fn ImageList_Draw(
+ himl: HIMAGELIST,
+ i: c_int,
+ hdcDst: HDC,
+ x: c_int,
+ y: c_int,
+ fStyle: UINT,
+ ) -> BOOL;
+}
+pub const HBITMAP_CALLBACK: HBITMAP = -1isize as HBITMAP;
+extern "system" {
+ pub fn ImageList_Replace(
+ himl: HIMAGELIST,
+ i: c_int,
+ hbmImage: HBITMAP,
+ hbmMask: HBITMAP,
+ ) -> BOOL;
+ pub fn ImageList_AddMasked(
+ himl: HIMAGELIST,
+ hbmImage: HBITMAP,
+ crMask: COLORREF,
+ ) -> c_int;
+ pub fn ImageList_DrawEx(
+ himl: HIMAGELIST,
+ i: c_int,
+ hdcDst: HDC,
+ x: c_int,
+ y: c_int,
+ dx: c_int,
+ dy: c_int,
+ rgbBk: COLORREF,
+ rgbFg: COLORREF,
+ fStyle: UINT,
+ ) -> BOOL;
+ pub fn ImageList_DrawIndirect(
+ pimldp: *mut IMAGELISTDRAWPARAMS,
+ ) -> BOOL;
+ pub fn ImageList_Remove(
+ himl: HIMAGELIST,
+ i: c_int,
+ ) -> BOOL;
+ pub fn ImageList_GetIcon(
+ himl: HIMAGELIST,
+ i: c_int,
+ flags: UINT,
+ ) -> HICON;
+ pub fn ImageList_LoadImageA(
+ hi: HINSTANCE,
+ lpbmp: LPCSTR,
+ cx: c_int,
+ cGrow: c_int,
+ crMask: COLORREF,
+ uType: UINT,
+ uFlags: UINT,
+ ) -> HIMAGELIST;
+ pub fn ImageList_LoadImageW(
+ hi: HINSTANCE,
+ lpbmp: LPCWSTR,
+ cx: c_int,
+ cGrow: c_int,
+ crMask: COLORREF,
+ uType: UINT,
+ uFlags: UINT,
+ ) -> HIMAGELIST;
+}
+pub const ILCF_MOVE: UINT = 0x00000000;
+pub const ILCF_SWAP: UINT = 0x00000001;
+extern "system" {
+ pub fn ImageList_Copy(
+ himlDst: HIMAGELIST,
+ iDst: c_int,
+ himlSrc: HIMAGELIST,
+ iSrc: c_int,
+ uFlags: UINT,
+ ) -> BOOL;
+ pub fn ImageList_BeginDrag(
+ himlTrack: HIMAGELIST,
+ iTrack: c_int,
+ dxHotspot: c_int,
+ dyHotspot: c_int,
+ ) -> BOOL;
+ pub fn ImageList_EndDrag();
+ pub fn ImageList_DragEnter(
+ hwndLock: HWND,
+ x: c_int,
+ y: c_int,
+ ) -> BOOL;
+ pub fn ImageList_DragLeave(
+ hwndLock: HWND,
+ ) -> BOOL;
+ pub fn ImageList_DragMove(
+ x: c_int,
+ y: c_int,
+ ) -> BOOL;
+ pub fn ImageList_SetDragCursorImage(
+ himlDrag: HIMAGELIST,
+ iDrag: c_int,
+ dxHotspot: c_int,
+ dyHotspot: c_int,
+ ) -> BOOL;
+ pub fn ImageList_DragShowNolock(
+ fShow: BOOL,
+ ) -> BOOL;
+ pub fn ImageList_GetDragImage(
+ ppt: *mut POINT,
+ pptHotspot: *mut POINT,
+ ) -> HIMAGELIST;
+}
+#[inline]
+pub unsafe fn ImageList_RemoveAll(himl: HIMAGELIST) -> BOOL {
+ ImageList_Remove(himl, -1)
+}
+#[inline]
+pub unsafe fn ImageList_ExtractIcon(_: HINSTANCE, himl: HIMAGELIST, i: c_int) -> HICON {
+ ImageList_GetIcon(himl, i, 0)
+}
+#[inline]
+pub unsafe fn ImageList_LoadBitmap(
+ hi: HINSTANCE,
+ lpbmp: LPCWSTR,
+ cx: c_int,
+ cGrow: c_int,
+ crMask: COLORREF,
+) -> HIMAGELIST {
+ ImageList_LoadImageW(hi, lpbmp, cx, cGrow, crMask, IMAGE_BITMAP, 0)
+}
+pub enum IStream {}
+extern "system" {
+ pub fn ImageList_Read(
+ pstm: *mut IStream,
+ ) -> HIMAGELIST;
+ pub fn ImageList_Write(
+ himl: HIMAGELIST,
+ pstm: *mut IStream,
+ ) -> BOOL;
+}
+pub const ILP_NORMAL: DWORD = 0;
+pub const ILP_DOWNLEVEL: DWORD = 0;
+extern "system" {
+ pub fn ImageList_ReadEx(
+ dwFlags: DWORD,
+ pstm: *mut IStream,
+ riid: REFIID,
+ ppv: *mut PVOID,
+ ) -> HRESULT;
+ pub fn ImageList_WriteEx(
+ himl: HIMAGELIST,
+ dwFlags: DWORD,
+ pstm: *mut IStream,
+ ) -> HRESULT;
+}
+STRUCT!{struct IMAGEINFO {
+ hbmImage: HBITMAP,
+ hbmMask: HBITMAP,
+ Unused1: c_int,
+ Unused2: c_int,
+ rcImage: RECT,
+}}
+pub type LPIMAGEINFO = *mut IMAGEINFO;
+extern "system" {
+ pub fn ImageList_GetIconSize(
+ himl: HIMAGELIST,
+ cx: *mut c_int,
+ cy: *mut c_int,
+ ) -> BOOL;
+ pub fn ImageList_SetIconSize(
+ himl: HIMAGELIST,
+ cx: c_int,
+ cy: c_int,
+ ) -> BOOL;
+ pub fn ImageList_GetImageInfo(
+ himl: HIMAGELIST,
+ i: c_int,
+ pImageInfo: *mut IMAGEINFO,
+ ) -> BOOL;
+ pub fn ImageList_Merge(
+ himl1: HIMAGELIST,
+ i1: c_int,
+ himl2: HIMAGELIST,
+ i2: c_int,
+ dx: c_int,
+ dy: c_int,
+ ) -> HIMAGELIST;
+ pub fn ImageList_Duplicate(
+ himl: HIMAGELIST,
+ ) -> HIMAGELIST;
+ pub fn HIMAGELIST_QueryInterface(
+ himl: HIMAGELIST,
+ riid: REFIID,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT;
+}
+#[inline]
+pub fn IImageListToHIMAGELIST(himl: *mut IImageList) -> HIMAGELIST {
+ himl as HIMAGELIST
+}
+pub const WC_HEADER: &'static str = "SysHeader32";
+pub const HDS_HORZ: DWORD = 0x0000;
+pub const HDS_BUTTONS: DWORD = 0x0002;
+pub const HDS_HOTTRACK: DWORD = 0x0004;
+pub const HDS_HIDDEN: DWORD = 0x0008;
+pub const HDS_DRAGDROP: DWORD = 0x0040;
+pub const HDS_FULLDRAG: DWORD = 0x0080;
+pub const HDS_FILTERBAR: DWORD = 0x0100;
+pub const HDS_FLAT: DWORD = 0x0200;
+pub const HDS_CHECKBOXES: DWORD = 0x0400;
+pub const HDS_NOSIZING: DWORD = 0x0800;
+pub const HDS_OVERFLOW: DWORD = 0x1000;
+pub const HDFT_ISSTRING: UINT = 0x0000;
+pub const HDFT_ISNUMBER: UINT = 0x0001;
+pub const HDFT_ISDATE: UINT = 0x0002;
+pub const HDFT_HASNOVALUE: UINT = 0x8000;
+STRUCT!{struct HD_TEXTFILTERA {
+ pszText: LPSTR,
+ cchTextMax: INT,
+}}
+pub type LPHD_TEXTFILTERA = *mut HD_TEXTFILTERA;
+STRUCT!{struct HD_TEXTFILTERW {
+ pszText: LPWSTR,
+ cchTextMax: INT,
+}}
+pub type LPHD_TEXTFILTERW = *mut HD_TEXTFILTERW;
+STRUCT!{struct HDITEMA {
+ mask: UINT,
+ cxy: c_int,
+ pszText: LPSTR,
+ hbm: HBITMAP,
+ cchTextMax: c_int,
+ fmt: c_int,
+ lParam: LPARAM,
+ iImage: c_int,
+ iOrder: c_int,
+ _type: UINT,
+ pvFilter: *mut c_void,
+ state: UINT,
+}}
+pub type LPHDITEMA = *mut HDITEMA;
+STRUCT!{struct HDITEMW {
+ mask: UINT,
+ cxy: c_int,
+ pszText: LPWSTR,
+ hbm: HBITMAP,
+ cchTextMax: c_int,
+ fmt: c_int,
+ lParam: LPARAM,
+ iImage: c_int,
+ iOrder: c_int,
+ _type: UINT,
+ pvFilter: *mut c_void,
+ state: UINT,
+}}
+pub type LPHDITEMW = *mut HDITEMW;
+pub const HDI_WIDTH: UINT = 0x0001;
+pub const HDI_HEIGHT: UINT = HDI_WIDTH;
+pub const HDI_TEXT: UINT = 0x0002;
+pub const HDI_FORMAT: UINT = 0x0004;
+pub const HDI_LPARAM: UINT = 0x0008;
+pub const HDI_BITMAP: UINT = 0x0010;
+pub const HDI_IMAGE: UINT = 0x0020;
+pub const HDI_DI_SETITEM: UINT = 0x0040;
+pub const HDI_ORDER: UINT = 0x0080;
+pub const HDI_FILTER: UINT = 0x0100;
+pub const HDI_STATE: UINT = 0x0200;
+pub const HDF_LEFT: c_int = 0x0000;
+pub const HDF_RIGHT: c_int = 0x0001;
+pub const HDF_CENTER: c_int = 0x0002;
+pub const HDF_JUSTIFYMASK: c_int = 0x0003;
+pub const HDF_RTLREADING: c_int = 0x0004;
+pub const HDF_BITMAP: c_int = 0x2000;
+pub const HDF_STRING: c_int = 0x4000;
+pub const HDF_OWNERDRAW: c_int = 0x8000;
+pub const HDF_IMAGE: c_int = 0x0800;
+pub const HDF_BITMAP_ON_RIGHT: c_int = 0x1000;
+pub const HDF_SORTUP: c_int = 0x0400;
+pub const HDF_SORTDOWN: c_int = 0x0200;
+pub const HDF_CHECKBOX: c_int = 0x0040;
+pub const HDF_CHECKED: c_int = 0x0080;
+pub const HDF_FIXEDWIDTH: c_int = 0x0100;
+pub const HDF_SPLITBUTTON: c_int = 0x1000000;
+pub const HDIS_FOCUSED: UINT = 0x00000001;
+pub const HDM_GETITEMCOUNT: UINT = HDM_FIRST + 0;
+pub const HDM_INSERTITEMA: UINT = HDM_FIRST + 1;
+pub const HDM_INSERTITEMW: UINT = HDM_FIRST + 10;
+pub const HDM_DELETEITEM: UINT = HDM_FIRST + 2;
+pub const HDM_GETITEMA: UINT = HDM_FIRST + 3;
+pub const HDM_GETITEMW: UINT = HDM_FIRST + 11;
+pub const HDM_SETITEMA: UINT = HDM_FIRST + 4;
+pub const HDM_SETITEMW: UINT = HDM_FIRST + 12;
+STRUCT!{struct HDLAYOUT {
+ prc: *mut RECT,
+ pwpos: *mut WINDOWPOS,
+}}
+pub type LPHDLAYOUT = *mut HDLAYOUT;
+pub const HDM_LAYOUT: UINT = HDM_FIRST + 5;
+pub const HHT_NOWHERE: UINT = 0x0001;
+pub const HHT_ONHEADER: UINT = 0x0002;
+pub const HHT_ONDIVIDER: UINT = 0x0004;
+pub const HHT_ONDIVOPEN: UINT = 0x0008;
+pub const HHT_ONFILTER: UINT = 0x0010;
+pub const HHT_ONFILTERBUTTON: UINT = 0x0020;
+pub const HHT_ABOVE: UINT = 0x0100;
+pub const HHT_BELOW: UINT = 0x0200;
+pub const HHT_TORIGHT: UINT = 0x0400;
+pub const HHT_TOLEFT: UINT = 0x0800;
+pub const HHT_ONITEMSTATEICON: UINT = 0x1000;
+pub const HHT_ONDROPDOWN: UINT = 0x2000;
+pub const HHT_ONOVERFLOW: UINT = 0x4000;
+STRUCT!{struct HDHITTESTINFO {
+ pt: POINT,
+ flags: UINT,
+ iItem: c_int,
+}}
+pub type LPHDHITTESTINFO = *mut HDHITTESTINFO;
+pub type HD_HITTESTINFO = HDHITTESTINFO;
+pub const HDSIL_NORMAL: WPARAM = 0;
+pub const HDSIL_STATE: WPARAM = 1;
+pub const HDM_HITTEST: UINT = HDM_FIRST + 6;
+pub const HDM_GETITEMRECT: UINT = HDM_FIRST + 7;
+pub const HDM_SETIMAGELIST: UINT = HDM_FIRST + 8;
+pub const HDM_GETIMAGELIST: UINT = HDM_FIRST + 9;
+pub const HDM_ORDERTOINDEX: UINT = HDM_FIRST + 15;
+pub const HDM_CREATEDRAGIMAGE: UINT = HDM_FIRST + 16;
+pub const HDM_GETORDERARRAY: UINT = HDM_FIRST + 17;
+pub const HDM_SETORDERARRAY: UINT = HDM_FIRST + 18;
+pub const HDM_SETHOTDIVIDER: UINT = HDM_FIRST + 19;
+pub const HDM_SETBITMAPMARGIN: UINT = HDM_FIRST + 20;
+pub const HDM_GETBITMAPMARGIN: UINT = HDM_FIRST + 21;
+pub const HDM_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
+pub const HDM_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
+pub const HDM_SETFILTERCHANGETIMEOUT: UINT = HDM_FIRST + 22;
+pub const HDM_EDITFILTER: UINT = HDM_FIRST + 23;
+pub const HDM_CLEARFILTER: UINT = HDM_FIRST + 24;
+pub const HDM_GETITEMDROPDOWNRECT: UINT = HDM_FIRST + 25;
+pub const HDM_GETOVERFLOWRECT: UINT = HDM_FIRST + 26;
+pub const HDM_GETFOCUSEDITEM: UINT = HDM_FIRST + 27;
+pub const HDM_SETFOCUSEDITEM: UINT = HDM_FIRST + 28;
+pub const HDN_ITEMCHANGINGA: UINT = HDN_FIRST - 0;
+pub const HDN_ITEMCHANGINGW: UINT = HDN_FIRST - 20;
+pub const HDN_ITEMCHANGEDA: UINT = HDN_FIRST - 1;
+pub const HDN_ITEMCHANGEDW: UINT = HDN_FIRST - 21;
+pub const HDN_ITEMCLICKA: UINT = HDN_FIRST - 2;
+pub const HDN_ITEMCLICKW: UINT = HDN_FIRST - 22;
+pub const HDN_ITEMDBLCLICKA: UINT = HDN_FIRST - 3;
+pub const HDN_ITEMDBLCLICKW: UINT = HDN_FIRST - 23;
+pub const HDN_DIVIDERDBLCLICKA: UINT = HDN_FIRST - 5;
+pub const HDN_DIVIDERDBLCLICKW: UINT = HDN_FIRST - 25;
+pub const HDN_BEGINTRACKA: UINT = HDN_FIRST - 6;
+pub const HDN_BEGINTRACKW: UINT = HDN_FIRST - 26;
+pub const HDN_ENDTRACKA: UINT = HDN_FIRST - 7;
+pub const HDN_ENDTRACKW: UINT = HDN_FIRST - 27;
+pub const HDN_TRACKA: UINT = HDN_FIRST - 8;
+pub const HDN_TRACKW: UINT = HDN_FIRST - 28;
+pub const HDN_GETDISPINFOA: UINT = HDN_FIRST - 9;
+pub const HDN_GETDISPINFOW: UINT = HDN_FIRST - 29;
+pub const HDN_BEGINDRAG: UINT = HDN_FIRST - 10;
+pub const HDN_ENDDRAG: UINT = HDN_FIRST - 11;
+pub const HDN_FILTERCHANGE: UINT = HDN_FIRST - 12;
+pub const HDN_FILTERBTNCLICK: UINT = HDN_FIRST - 13;
+pub const HDN_BEGINFILTEREDIT: UINT = HDN_FIRST - 14;
+pub const HDN_ENDFILTEREDIT: UINT = HDN_FIRST - 15;
+pub const HDN_ITEMSTATEICONCLICK: UINT = HDN_FIRST - 16;
+pub const HDN_ITEMKEYDOWN: UINT = HDN_FIRST - 17;
+pub const HDN_DROPDOWN: UINT = HDN_FIRST - 18;
+pub const HDN_OVERFLOWCLICK: UINT = HDN_FIRST - 19;
+STRUCT!{struct NMHEADERA {
+ hdr: NMHDR,
+ iItem: c_int,
+ iButton: c_int,
+ pitem: *mut HDITEMA,
+}}
+pub type LPNMHEADERA = *mut NMHEADERA;
+pub type HD_NOTIFYA = NMHEADERA;
+STRUCT!{struct NMHEADERW {
+ hdr: NMHDR,
+ iItem: c_int,
+ iButton: c_int,
+ pitem: *mut HDITEMW,
+}}
+pub type LPNMHEADERW = *mut NMHEADERW;
+pub type HD_NOTIFYW = NMHEADERW;
+STRUCT!{struct NMHDDISPINFOW {
+ hdr: NMHDR,
+ iItem: c_int,
+ mask: UINT,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ lParam: LPARAM,
+}}
+pub type LPNMHDDISPINFOW = *mut NMHDDISPINFOW;
+STRUCT!{struct NMHDDISPINFOA {
+ hdr: NMHDR,
+ iItem: c_int,
+ mask: UINT,
+ pszText: LPSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ lParam: LPARAM,
+}}
+pub type LPNMHDDISPINFOA = *mut NMHDDISPINFOA;
+STRUCT!{struct NMHDFILTERBTNCLICK {
+ hdr: NMHDR,
+ iItem: INT,
+ rc: RECT,
+}}
+pub type LPNMHDFILTERBTNCLICK = *mut NMHDFILTERBTNCLICK;
+pub const TOOLBARCLASSNAME: &'static str = "ToolbarWindow32";
+#[cfg(target_pointer_width = "32")]
+STRUCT!{struct TBBUTTON {
+ iBitmap: c_int,
+ idCommand: c_int,
+ fsState: BYTE,
+ fsStyle: BYTE,
+ bReserved: [BYTE; 2],
+ dwData: DWORD_PTR,
+ iString: INT_PTR,
+}}
+#[cfg(target_pointer_width = "64")]
+STRUCT!{struct TBBUTTON {
+ iBitmap: c_int,
+ idCommand: c_int,
+ fsState: BYTE,
+ fsStyle: BYTE,
+ bReserved: [BYTE; 6],
+ dwData: DWORD_PTR,
+ iString: INT_PTR,
+}}
+pub type PTBBUTTON = *mut TBBUTTON;
+pub type LPTBBUTTON = *mut TBBUTTON;
+pub type LPCTBBUTTON = *const TBBUTTON;
+STRUCT!{struct COLORMAP {
+ from: COLORREF,
+ to: COLORREF,
+}}
+pub type LPCOLORMAP = *mut COLORMAP;
+extern "system" {
+ pub fn CreateToolbarEx(
+ hwnd: HWND,
+ ws: DWORD,
+ wID: UINT,
+ nBitmaps: c_int,
+ hBMInst: HINSTANCE,
+ wBMID: UINT_PTR,
+ lpButtons: LPCTBBUTTON,
+ iNumButtons: c_int,
+ dxButton: c_int,
+ dyButton: c_int,
+ dxBitmap: c_int,
+ dyBitmap: c_int,
+ uStructSize: UINT,
+ ) -> HWND;
+ pub fn CreateMappedBitmap(
+ hInstance: HINSTANCE,
+ idBitmap: INT_PTR,
+ wFlags: UINT,
+ lpColorMap: LPCOLORMAP,
+ iNumMaps: c_int,
+ ) -> HBITMAP;
+}
+pub const CMB_MASKED: UINT = 0x02;
+pub const TBSTATE_CHECKED: BYTE = 0x01;
+pub const TBSTATE_PRESSED: BYTE = 0x02;
+pub const TBSTATE_ENABLED: BYTE = 0x04;
+pub const TBSTATE_HIDDEN: BYTE = 0x08;
+pub const TBSTATE_INDETERMINATE: BYTE = 0x10;
+pub const TBSTATE_WRAP: BYTE = 0x20;
+pub const TBSTATE_ELLIPSES: BYTE = 0x40;
+pub const TBSTATE_MARKED: BYTE = 0x80;
+pub const TBSTYLE_BUTTON: DWORD = 0x0000;
+pub const TBSTYLE_SEP: DWORD = 0x0001;
+pub const TBSTYLE_CHECK: DWORD = 0x0002;
+pub const TBSTYLE_GROUP: DWORD = 0x0004;
+pub const TBSTYLE_CHECKGROUP: DWORD = TBSTYLE_GROUP | TBSTYLE_CHECK;
+pub const TBSTYLE_DROPDOWN: DWORD = 0x0008;
+pub const TBSTYLE_AUTOSIZE: DWORD = 0x0010;
+pub const TBSTYLE_NOPREFIX: DWORD = 0x0020;
+pub const TBSTYLE_TOOLTIPS: DWORD = 0x0100;
+pub const TBSTYLE_WRAPABLE: DWORD = 0x0200;
+pub const TBSTYLE_ALTDRAG: DWORD = 0x0400;
+pub const TBSTYLE_FLAT: DWORD = 0x0800;
+pub const TBSTYLE_LIST: DWORD = 0x1000;
+pub const TBSTYLE_CUSTOMERASE: DWORD = 0x2000;
+pub const TBSTYLE_REGISTERDROP: DWORD = 0x4000;
+pub const TBSTYLE_TRANSPARENT: DWORD = 0x8000;
+pub const TBSTYLE_EX_DRAWDDARROWS: DWORD = 0x00000001;
+pub const BTNS_BUTTON: DWORD = TBSTYLE_BUTTON;
+pub const BTNS_SEP: DWORD = TBSTYLE_SEP;
+pub const BTNS_CHECK: DWORD = TBSTYLE_CHECK;
+pub const BTNS_GROUP: DWORD = TBSTYLE_GROUP;
+pub const BTNS_CHECKGROUP: DWORD = TBSTYLE_CHECKGROUP;
+pub const BTNS_DROPDOWN: DWORD = TBSTYLE_DROPDOWN;
+pub const BTNS_AUTOSIZE: DWORD = TBSTYLE_AUTOSIZE;
+pub const BTNS_NOPREFIX: DWORD = TBSTYLE_NOPREFIX;
+pub const BTNS_SHOWTEXT: DWORD = 0x0040;
+pub const BTNS_WHOLEDROPDOWN: DWORD = 0x0080;
+pub const TBSTYLE_EX_MIXEDBUTTONS: DWORD = 0x00000008;
+pub const TBSTYLE_EX_HIDECLIPPEDBUTTONS: DWORD = 0x00000010;
+pub const TBSTYLE_EX_MULTICOLUMN: DWORD = 0x00000002;
+pub const TBSTYLE_EX_VERTICAL: DWORD = 0x00000004;
+pub const TBSTYLE_EX_DOUBLEBUFFER: DWORD = 0x00000080;
+STRUCT!{struct NMTBCUSTOMDRAW {
+ nmcd: NMCUSTOMDRAW,
+ hbrMonoDither: HBRUSH,
+ hbrLines: HBRUSH,
+ hpenLines: HPEN,
+ clrText: COLORREF,
+ clrMark: COLORREF,
+ clrTextHighlight: COLORREF,
+ clrBtnFace: COLORREF,
+ clrBtnHighlight: COLORREF,
+ clrHighlightHotTrack: COLORREF,
+ rcText: RECT,
+ nStringBkMode: c_int,
+ nHLStringBkMode: c_int,
+ iListGap: c_int,
+}}
+pub type LPNMTBCUSTOMDRAW = *mut NMTBCUSTOMDRAW;
+pub const TBCDRF_NOEDGES: LRESULT = 0x00010000;
+pub const TBCDRF_HILITEHOTTRACK: LRESULT = 0x00020000;
+pub const TBCDRF_NOOFFSET: LRESULT = 0x00040000;
+pub const TBCDRF_NOMARK: LRESULT = 0x00080000;
+pub const TBCDRF_NOETCHEDEFFECT: LRESULT = 0x00100000;
+pub const TBCDRF_BLENDICON: LRESULT = 0x00200000;
+pub const TBCDRF_NOBACKGROUND: LRESULT = 0x00400000;
+pub const TBCDRF_USECDCOLORS: LRESULT = 0x00800000;
+pub const TB_ENABLEBUTTON: UINT = WM_USER + 1;
+pub const TB_CHECKBUTTON: UINT = WM_USER + 2;
+pub const TB_PRESSBUTTON: UINT = WM_USER + 3;
+pub const TB_HIDEBUTTON: UINT = WM_USER + 4;
+pub const TB_INDETERMINATE: UINT = WM_USER + 5;
+pub const TB_MARKBUTTON: UINT = WM_USER + 6;
+pub const TB_ISBUTTONENABLED: UINT = WM_USER + 9;
+pub const TB_ISBUTTONCHECKED: UINT = WM_USER + 10;
+pub const TB_ISBUTTONPRESSED: UINT = WM_USER + 11;
+pub const TB_ISBUTTONHIDDEN: UINT = WM_USER + 12;
+pub const TB_ISBUTTONINDETERMINATE: UINT = WM_USER + 13;
+pub const TB_ISBUTTONHIGHLIGHTED: UINT = WM_USER + 14;
+pub const TB_SETSTATE: UINT = WM_USER + 17;
+pub const TB_GETSTATE: UINT = WM_USER + 18;
+pub const TB_ADDBITMAP: UINT = WM_USER + 19;
+STRUCT!{struct TBADDBITMAP {
+ hInst: HINSTANCE,
+ nID: UINT_PTR,
+}}
+pub type LPTBADDBITMAP = *mut TBADDBITMAP;
+pub const HINST_COMMCTRL: HINSTANCE = -1isize as HINSTANCE;
+pub const IDB_STD_SMALL_COLOR: WPARAM = 0;
+pub const IDB_STD_LARGE_COLOR: WPARAM = 1;
+pub const IDB_VIEW_SMALL_COLOR: WPARAM = 4;
+pub const IDB_VIEW_LARGE_COLOR: WPARAM = 5;
+pub const IDB_HIST_SMALL_COLOR: WPARAM = 8;
+pub const IDB_HIST_LARGE_COLOR: WPARAM = 9;
+pub const IDB_HIST_NORMAL: WPARAM = 12;
+pub const IDB_HIST_HOT: WPARAM = 13;
+pub const IDB_HIST_DISABLED: WPARAM = 14;
+pub const IDB_HIST_PRESSED: WPARAM = 15;
+pub const STD_CUT: c_int = 0;
+pub const STD_COPY: c_int = 1;
+pub const STD_PASTE: c_int = 2;
+pub const STD_UNDO: c_int = 3;
+pub const STD_REDOW: c_int = 4;
+pub const STD_DELETE: c_int = 5;
+pub const STD_FILENEW: c_int = 6;
+pub const STD_FILEOPEN: c_int = 7;
+pub const STD_FILESAVE: c_int = 8;
+pub const STD_PRINTPRE: c_int = 9;
+pub const STD_PROPERTIES: c_int = 10;
+pub const STD_HELP: c_int = 11;
+pub const STD_FIND: c_int = 12;
+pub const STD_REPLACE: c_int = 13;
+pub const STD_PRINT: c_int = 14;
+pub const VIEW_LARGEICONS: c_int = 0;
+pub const VIEW_SMALLICONS: c_int = 1;
+pub const VIEW_LIST: c_int = 2;
+pub const VIEW_DETAILS: c_int = 3;
+pub const VIEW_SORTNAME: c_int = 4;
+pub const VIEW_SORTSIZE: c_int = 5;
+pub const VIEW_SORTDATE: c_int = 6;
+pub const VIEW_SORTTYPE: c_int = 7;
+pub const VIEW_PARENTFOLDER: c_int = 8;
+pub const VIEW_NETCONNECT: c_int = 9;
+pub const VIEW_NETDISCONNECT: c_int = 10;
+pub const VIEW_NEWFOLDER: c_int = 11;
+pub const VIEW_VIEWMENU: c_int = 12;
+pub const HIST_BACK: c_int = 0;
+pub const HIST_FORWARD: c_int = 1;
+pub const HIST_FAVORITES: c_int = 2;
+pub const HIST_ADDTOFAVORITES: c_int = 3;
+pub const HIST_VIEWTREE: c_int = 4;
+pub const TB_ADDBUTTONSA: UINT = WM_USER + 20;
+pub const TB_INSERTBUTTONA: UINT = WM_USER + 21;
+pub const TB_DELETEBUTTON: UINT = WM_USER + 22;
+pub const TB_GETBUTTON: UINT = WM_USER + 23;
+pub const TB_BUTTONCOUNT: UINT = WM_USER + 24;
+pub const TB_COMMANDTOINDEX: UINT = WM_USER + 25;
+STRUCT!{struct TBSAVEPARAMSA {
+ hkr: HKEY,
+ pszSubKey: LPCSTR,
+ pszValueName: LPCSTR,
+}}
+pub type LPTBSAVEPARAMSA = *mut TBSAVEPARAMSA;
+STRUCT!{struct TBSAVEPARAMSW {
+ hkr: HKEY,
+ pszSubKey: LPCWSTR,
+ pszValueName: LPCWSTR,
+}}
+pub type LPTBSAVEPARAMSW = *mut TBSAVEPARAMSW;
+pub const TB_SAVERESTOREA: UINT = WM_USER + 26;
+pub const TB_SAVERESTOREW: UINT = WM_USER + 76;
+pub const TB_CUSTOMIZE: UINT = WM_USER + 27;
+pub const TB_ADDSTRINGA: UINT = WM_USER + 28;
+pub const TB_ADDSTRINGW: UINT = WM_USER + 77;
+pub const TB_GETITEMRECT: UINT = WM_USER + 29;
+pub const TB_BUTTONSTRUCTSIZE: UINT = WM_USER + 30;
+pub const TB_SETBUTTONSIZE: UINT = WM_USER + 31;
+pub const TB_SETBITMAPSIZE: UINT = WM_USER + 32;
+pub const TB_AUTOSIZE: UINT = WM_USER + 33;
+pub const TB_GETTOOLTIPS: UINT = WM_USER + 35;
+pub const TB_SETTOOLTIPS: UINT = WM_USER + 36;
+pub const TB_SETPARENT: UINT = WM_USER + 37;
+pub const TB_SETROWS: UINT = WM_USER + 39;
+pub const TB_GETROWS: UINT = WM_USER + 40;
+pub const TB_SETCMDID: UINT = WM_USER + 42;
+pub const TB_CHANGEBITMAP: UINT = WM_USER + 43;
+pub const TB_GETBITMAP: UINT = WM_USER + 44;
+pub const TB_GETBUTTONTEXTA: UINT = WM_USER + 45;
+pub const TB_GETBUTTONTEXTW: UINT = WM_USER + 75;
+pub const TB_REPLACEBITMAP: UINT = WM_USER + 46;
+pub const TB_SETINDENT: UINT = WM_USER + 47;
+pub const TB_SETIMAGELIST: UINT = WM_USER + 48;
+pub const TB_GETIMAGELIST: UINT = WM_USER + 49;
+pub const TB_LOADIMAGES: UINT = WM_USER + 50;
+pub const TB_GETRECT: UINT = WM_USER + 51;
+pub const TB_SETHOTIMAGELIST: UINT = WM_USER + 52;
+pub const TB_GETHOTIMAGELIST: UINT = WM_USER + 53;
+pub const TB_SETDISABLEDIMAGELIST: UINT = WM_USER + 54;
+pub const TB_GETDISABLEDIMAGELIST: UINT = WM_USER + 55;
+pub const TB_SETSTYLE: UINT = WM_USER + 56;
+pub const TB_GETSTYLE: UINT = WM_USER + 57;
+pub const TB_GETBUTTONSIZE: UINT = WM_USER + 58;
+pub const TB_SETBUTTONWIDTH: UINT = WM_USER + 59;
+pub const TB_SETMAXTEXTROWS: UINT = WM_USER + 60;
+pub const TB_GETTEXTROWS: UINT = WM_USER + 61;
+pub const TB_GETOBJECT: UINT = WM_USER + 62;
+pub const TB_GETHOTITEM: UINT = WM_USER + 71;
+pub const TB_SETHOTITEM: UINT = WM_USER + 72;
+pub const TB_SETANCHORHIGHLIGHT: UINT = WM_USER + 73;
+pub const TB_GETANCHORHIGHLIGHT: UINT = WM_USER + 74;
+pub const TB_MAPACCELERATORA: UINT = WM_USER + 78;
+STRUCT!{struct TBINSERTMARK {
+ iButton: c_int,
+ dwFlags: DWORD,
+}}
+pub type LPTBINSERTMARK = *mut TBINSERTMARK;
+pub const TBIMHT_AFTER: DWORD = 0x00000001;
+pub const TBIMHT_BACKGROUND: DWORD = 0x00000002;
+pub const TB_GETINSERTMARK: UINT = WM_USER + 79;
+pub const TB_SETINSERTMARK: UINT = WM_USER + 80;
+pub const TB_INSERTMARKHITTEST: UINT = WM_USER + 81;
+pub const TB_MOVEBUTTON: UINT = WM_USER + 82;
+pub const TB_GETMAXSIZE: UINT = WM_USER + 83;
+pub const TB_SETEXTENDEDSTYLE: UINT = WM_USER + 84;
+pub const TB_GETEXTENDEDSTYLE: UINT = WM_USER + 85;
+pub const TB_GETPADDING: UINT = WM_USER + 86;
+pub const TB_SETPADDING: UINT = WM_USER + 87;
+pub const TB_SETINSERTMARKCOLOR: UINT = WM_USER + 88;
+pub const TB_GETINSERTMARKCOLOR: UINT = WM_USER + 89;
+pub const TB_SETCOLORSCHEME: UINT = CCM_SETCOLORSCHEME;
+pub const TB_GETCOLORSCHEME: UINT = CCM_GETCOLORSCHEME;
+pub const TB_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
+pub const TB_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
+pub const TB_MAPACCELERATORW: UINT = WM_USER + 90;
+STRUCT!{struct TBREPLACEBITMAP {
+ hInstOld: HINSTANCE,
+ nIDOld: UINT_PTR,
+ hInstNew: HINSTANCE,
+ nIDNew: UINT_PTR,
+ nButtons: c_int,
+}}
+pub type LPTBREPLACEBITMAP = *mut TBREPLACEBITMAP;
+pub const TBBF_LARGE: DWORD = 0x0001;
+pub const TB_GETBITMAPFLAGS: UINT = WM_USER + 41;
+pub const TBIF_IMAGE: DWORD = 0x00000001;
+pub const TBIF_TEXT: DWORD = 0x00000002;
+pub const TBIF_STATE: DWORD = 0x00000004;
+pub const TBIF_STYLE: DWORD = 0x00000008;
+pub const TBIF_LPARAM: DWORD = 0x00000010;
+pub const TBIF_COMMAND: DWORD = 0x00000020;
+pub const TBIF_SIZE: DWORD = 0x00000040;
+pub const TBIF_BYINDEX: DWORD = 0x80000000;
+STRUCT!{struct TBBUTTONINFOA {
+ cbSize: UINT,
+ dwMask: DWORD,
+ idCommand: c_int,
+ iImage: c_int,
+ fsState: BYTE,
+ fsStyle: BYTE,
+ cx: WORD,
+ lParam: DWORD_PTR,
+ pszText: LPSTR,
+ cchText: c_int,
+}}
+pub type LPTBBUTTONINFOA = *mut TBBUTTONINFOA;
+STRUCT!{struct TBBUTTONINFOW {
+ cbSize: UINT,
+ dwMask: DWORD,
+ idCommand: c_int,
+ iImage: c_int,
+ fsState: BYTE,
+ fsStyle: BYTE,
+ cx: WORD,
+ lParam: DWORD_PTR,
+ pszText: LPWSTR,
+ cchText: c_int,
+}}
+pub type LPTBBUTTONINFOW = *mut TBBUTTONINFOW;
+pub const TB_GETBUTTONINFOW: UINT = WM_USER + 63;
+pub const TB_SETBUTTONINFOW: UINT = WM_USER + 64;
+pub const TB_GETBUTTONINFOA: UINT = WM_USER + 65;
+pub const TB_SETBUTTONINFOA: UINT = WM_USER + 66;
+pub const TB_INSERTBUTTONW: UINT = WM_USER + 67;
+pub const TB_ADDBUTTONSW: UINT = WM_USER + 68;
+pub const TB_HITTEST: UINT = WM_USER + 69;
+pub const TB_SETDRAWTEXTFLAGS: UINT = WM_USER + 70;
+pub const TB_GETSTRINGW: UINT = WM_USER + 91;
+pub const TB_GETSTRINGA: UINT = WM_USER + 92;
+pub const TB_SETBOUNDINGSIZE: UINT = WM_USER + 93;
+pub const TB_SETHOTITEM2: UINT = WM_USER + 94;
+pub const TB_HASACCELERATOR: UINT = WM_USER + 95;
+pub const TB_SETLISTGAP: UINT = WM_USER + 96;
+pub const TB_GETIMAGELISTCOUNT: UINT = WM_USER + 98;
+pub const TB_GETIDEALSIZE: UINT = WM_USER + 99;
+pub const TBMF_PAD: DWORD = 0x00000001;
+pub const TBMF_BARPAD: DWORD = 0x00000002;
+pub const TBMF_BUTTONSPACING: DWORD = 0x00000004;
+STRUCT!{struct TBMETRICS {
+ cbSize: UINT,
+ dwMask: DWORD,
+ cxPad: c_int,
+ cyPad: c_int,
+ cxBarPad: c_int,
+ cyBarPad: c_int,
+ cxButtonSpacing: c_int,
+ cyButtonSpacing: c_int,
+}}
+pub type LPTBMETRICS = *mut TBMETRICS;
+pub const TB_GETMETRICS: UINT = WM_USER + 101;
+pub const TB_SETMETRICS: UINT = WM_USER + 102;
+pub const TB_GETITEMDROPDOWNRECT: UINT = WM_USER + 103;
+pub const TB_SETPRESSEDIMAGELIST: UINT = WM_USER + 104;
+pub const TB_GETPRESSEDIMAGELIST: UINT = WM_USER + 105;
+pub const TB_SETWINDOWTHEME: UINT = CCM_SETWINDOWTHEME;
+pub const TBN_GETBUTTONINFOA: UINT = TBN_FIRST - 0;
+pub const TBN_BEGINDRAG: UINT = TBN_FIRST - 1;
+pub const TBN_ENDDRAG: UINT = TBN_FIRST - 2;
+pub const TBN_BEGINADJUST: UINT = TBN_FIRST - 3;
+pub const TBN_ENDADJUST: UINT = TBN_FIRST - 4;
+pub const TBN_RESET: UINT = TBN_FIRST - 5;
+pub const TBN_QUERYINSERT: UINT = TBN_FIRST - 6;
+pub const TBN_QUERYDELETE: UINT = TBN_FIRST - 7;
+pub const TBN_TOOLBARCHANGE: UINT = TBN_FIRST - 8;
+pub const TBN_CUSTHELP: UINT = TBN_FIRST - 9;
+pub const TBN_DROPDOWN: UINT = TBN_FIRST - 10;
+pub const TBN_GETOBJECT: UINT = TBN_FIRST - 12;
+STRUCT!{struct NMTBHOTITEM {
+ hdr: NMHDR,
+ idOld: c_int,
+ idNew: c_int,
+ dwFlags: DWORD,
+}}
+pub type LPNMTBHOTITEM = *mut NMTBHOTITEM;
+pub const HICF_OTHER: DWORD = 0x00000000;
+pub const HICF_MOUSE: DWORD = 0x00000001;
+pub const HICF_ARROWKEYS: DWORD = 0x00000002;
+pub const HICF_ACCELERATOR: DWORD = 0x00000004;
+pub const HICF_DUPACCEL: DWORD = 0x00000008;
+pub const HICF_ENTERING: DWORD = 0x00000010;
+pub const HICF_LEAVING: DWORD = 0x00000020;
+pub const HICF_RESELECT: DWORD = 0x00000040;
+pub const HICF_LMOUSE: DWORD = 0x00000080;
+pub const HICF_TOGGLEDROPDOWN: DWORD = 0x00000100;
+pub const TBN_HOTITEMCHANGE: UINT = TBN_FIRST - 13;
+pub const TBN_DRAGOUT: UINT = TBN_FIRST - 14;
+pub const TBN_DELETINGBUTTON: UINT = TBN_FIRST - 15;
+pub const TBN_GETDISPINFOA: UINT = TBN_FIRST - 16;
+pub const TBN_GETDISPINFOW: UINT = TBN_FIRST - 17;
+pub const TBN_GETINFOTIPA: UINT = TBN_FIRST - 18;
+pub const TBN_GETINFOTIPW: UINT = TBN_FIRST - 19;
+pub const TBN_GETBUTTONINFOW: UINT = TBN_FIRST - 20;
+pub const TBN_RESTORE: UINT = TBN_FIRST - 21;
+pub const TBN_SAVE: UINT = TBN_FIRST - 22;
+pub const TBN_INITCUSTOMIZE: UINT = TBN_FIRST - 23;
+pub const TBNRF_HIDEHELP: LRESULT = 0x00000001;
+pub const TBNRF_ENDCUSTOMIZE: LRESULT = 0x00000002;
+pub const TBN_WRAPHOTITEM: UINT = TBN_FIRST - 24;
+pub const TBN_DUPACCELERATOR: UINT = TBN_FIRST - 25;
+pub const TBN_WRAPACCELERATOR: UINT = TBN_FIRST - 26;
+pub const TBN_DRAGOVER: UINT = TBN_FIRST - 27;
+pub const TBN_MAPACCELERATOR: UINT = TBN_FIRST - 28;
+STRUCT!{struct NMTBSAVE {
+ hdr: NMHDR,
+ pData: *mut DWORD,
+ pCurrent: *mut DWORD,
+ cbData: UINT,
+ iItem: c_int,
+ cButtons: c_int,
+ tbButton: TBBUTTON,
+}}
+pub type LPNMTBSAVE = *mut NMTBSAVE;
+STRUCT!{struct NMTBRESTORE {
+ hdr: NMHDR,
+ pData: *mut DWORD,
+ pCurrent: *mut DWORD,
+ cbData: UINT,
+ iItem: c_int,
+ cButtons: c_int,
+ cbBytesPerRecord: c_int,
+ tbButton: TBBUTTON,
+}}
+pub type LPNMTBRESTORE = *mut NMTBRESTORE;
+STRUCT!{struct NMTBGETINFOTIPA {
+ hdr: NMHDR,
+ pszText: LPSTR,
+ cchTextMax: c_int,
+ iItem: c_int,
+ lParal: LPARAM,
+}}
+pub type LPNMTBGETINFOTIPA = *mut NMTBGETINFOTIPA;
+STRUCT!{struct NMTBGETINFOTIPW {
+ hdr: NMHDR,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iItem: c_int,
+ lParal: LPARAM,
+}}
+pub type LPNMTBGETINFOTIPW = *mut NMTBGETINFOTIPW;
+pub const TBNF_IMAGE: DWORD = 0x00000001;
+pub const TBNF_TEXT: DWORD = 0x00000002;
+pub const TBNF_DI_SETITEM: DWORD = 0x10000000;
+STRUCT!{struct NMTBDISPINFOA {
+ hdr: NMHDR,
+ dwMask: DWORD,
+ idCommand: c_int,
+ lParam: DWORD_PTR,
+ iImage: c_int,
+ pszText: LPSTR,
+ cchText: c_int,
+}}
+pub type LPNMTBDISPINFOA = *mut NMTBDISPINFOA;
+STRUCT!{struct NMTBDISPINFOW {
+ hdr: NMHDR,
+ dwMask: DWORD,
+ idCommand: c_int,
+ lParam: DWORD_PTR,
+ iImage: c_int,
+ pszText: LPWSTR,
+ cchText: c_int,
+}}
+pub type LPNMTBDISPINFOW = *mut NMTBDISPINFOW;
+pub const TBDDRET_DEFAULT: LRESULT = 0;
+pub const TBDDRET_NODEFAULT: LRESULT = 1;
+pub const TBDDRET_TREATPRESSED: LRESULT = 2;
+pub type TBNOTIFYA = NMTOOLBARA;
+pub type TBNOTIFYW = NMTOOLBARW;
+pub type LPTBNOTIFYA = LPNMTOOLBARA;
+pub type LPTBNOTIFYW = LPNMTOOLBARW;
+STRUCT!{struct NMTOOLBARA {
+ hdr: NMHDR,
+ iItem: c_int,
+ tbButton: TBBUTTON,
+ cchText: c_int,
+ pszText: LPSTR,
+ rcButton: RECT,
+}}
+pub type LPNMTOOLBARA = *mut NMTOOLBARA;
+STRUCT!{struct NMTOOLBARW {
+ hdr: NMHDR,
+ iItem: c_int,
+ tbButton: TBBUTTON,
+ cchText: c_int,
+ pszText: LPWSTR,
+ rcButton: RECT,
+}}
+pub type LPNMTOOLBARW = *mut NMTOOLBARW;
+pub const REBARCLASSNAME: &'static str = "ReBarWindow32";
+pub const RBIM_IMAGELIST: UINT = 0x00000001;
+pub const RBS_TOOLTIPS: DWORD = 0x00000100;
+pub const RBS_VARHEIGHT: DWORD = 0x00000200;
+pub const RBS_BANDBORDERS: DWORD = 0x00000400;
+pub const RBS_FIXEDORDER: DWORD = 0x00000800;
+pub const RBS_REGISTERDROP: DWORD = 0x00001000;
+pub const RBS_AUTOSIZE: DWORD = 0x00002000;
+pub const RBS_VERTICALGRIPPER: DWORD = 0x00004000;
+pub const RBS_DBLCLKTOGGLE: DWORD = 0x00008000;
+STRUCT!{struct REBARINFO {
+ cbSize: UINT,
+ fMask: UINT,
+ himl: HIMAGELIST,
+}}
+pub type LPREBARINFO = *mut REBARINFO;
+pub const RBBS_BREAK: UINT = 0x00000001;
+pub const RBBS_FIXEDSIZE: UINT = 0x00000002;
+pub const RBBS_CHILDEDGE: UINT = 0x00000004;
+pub const RBBS_HIDDEN: UINT = 0x00000008;
+pub const RBBS_NOVERT: UINT = 0x00000010;
+pub const RBBS_FIXEDBMP: UINT = 0x00000020;
+pub const RBBS_VARIABLEHEIGHT: UINT = 0x00000040;
+pub const RBBS_GRIPPERALWAYS: UINT = 0x00000080;
+pub const RBBS_NOGRIPPER: UINT = 0x00000100;
+pub const RBBS_USECHEVRON: UINT = 0x00000200;
+pub const RBBS_HIDETITLE: UINT = 0x00000400;
+pub const RBBS_TOPALIGN: UINT = 0x00000800;
+pub const RBBIM_STYLE: UINT = 0x00000001;
+pub const RBBIM_COLORS: UINT = 0x00000002;
+pub const RBBIM_TEXT: UINT = 0x00000004;
+pub const RBBIM_IMAGE: UINT = 0x00000008;
+pub const RBBIM_CHILD: UINT = 0x00000010;
+pub const RBBIM_CHILDSIZE: UINT = 0x00000020;
+pub const RBBIM_SIZE: UINT = 0x00000040;
+pub const RBBIM_BACKGROUND: UINT = 0x00000080;
+pub const RBBIM_ID: UINT = 0x00000100;
+pub const RBBIM_IDEALSIZE: UINT = 0x00000200;
+pub const RBBIM_LPARAM: UINT = 0x00000400;
+pub const RBBIM_HEADERSIZE: UINT = 0x00000800;
+pub const RBBIM_CHEVRONLOCATION: UINT = 0x00001000;
+pub const RBBIM_CHEVRONSTATE: UINT = 0x00002000;
+STRUCT!{struct REBARBANDINFOA {
+ cbSize: UINT,
+ fMask: UINT,
+ fStyle: UINT,
+ clrFore: COLORREF,
+ clrBack: COLORREF,
+ lpText: LPSTR,
+ cch: UINT,
+ iImage: c_int,
+ hwndChild: HWND,
+ cxMinChild: UINT,
+ cyMinChild: UINT,
+ cx: UINT,
+ hbmBack: HBITMAP,
+ wID: UINT,
+ cyChild: UINT,
+ cyMaxChild: UINT,
+ cyIntegral: UINT,
+ cxIdeal: UINT,
+ lParam: LPARAM,
+ cxHeader: UINT,
+ rcChevronLocation: RECT,
+ uChevronState: UINT,
+}}
+pub type LPREBARBANDINFOA = *mut REBARBANDINFOA;
+pub type LPCREBARBANDINFOA = *const REBARBANDINFOA;
+STRUCT!{struct REBARBANDINFOW {
+ cbSize: UINT,
+ fMask: UINT,
+ fStyle: UINT,
+ clrFore: COLORREF,
+ clrBack: COLORREF,
+ lpText: LPWSTR,
+ cch: UINT,
+ iImage: c_int,
+ hwndChild: HWND,
+ cxMinChild: UINT,
+ cyMinChild: UINT,
+ cx: UINT,
+ hbmBack: HBITMAP,
+ wID: UINT,
+ cyChild: UINT,
+ cyMaxChild: UINT,
+ cyIntegral: UINT,
+ cxIdeal: UINT,
+ lParam: LPARAM,
+ cxHeader: UINT,
+ rcChevronLocation: RECT,
+ uChevronState: UINT,
+}}
+pub type LPREBARBANDINFOW = *mut REBARBANDINFOW;
+pub type LPCREBARBANDINFOW = *const REBARBANDINFOW;
+pub const RB_INSERTBANDA: UINT = WM_USER + 1;
+pub const RB_DELETEBAND: UINT = WM_USER + 2;
+pub const RB_GETBARINFO: UINT = WM_USER + 3;
+pub const RB_SETBARINFO: UINT = WM_USER + 4;
+pub const RB_SETBANDINFOA: UINT = WM_USER + 6;
+pub const RB_SETPARENT: UINT = WM_USER + 7;
+pub const RB_HITTEST: UINT = WM_USER + 8;
+pub const RB_GETRECT: UINT = WM_USER + 9;
+pub const RB_INSERTBANDW: UINT = WM_USER + 10;
+pub const RB_SETBANDINFOW: UINT = WM_USER + 11;
+pub const RB_GETBANDCOUNT: UINT = WM_USER + 12;
+pub const RB_GETROWCOUNT: UINT = WM_USER + 13;
+pub const RB_GETROWHEIGHT: UINT = WM_USER + 14;
+pub const RB_IDTOINDEX: UINT = WM_USER + 16;
+pub const RB_GETTOOLTIPS: UINT = WM_USER + 17;
+pub const RB_SETTOOLTIPS: UINT = WM_USER + 18;
+pub const RB_SETBKCOLOR: UINT = WM_USER + 19;
+pub const RB_GETBKCOLOR: UINT = WM_USER + 20;
+pub const RB_SETTEXTCOLOR: UINT = WM_USER + 21;
+pub const RB_GETTEXTCOLOR: UINT = WM_USER + 22;
+pub const RBSTR_CHANGERECT: WPARAM = 0x0001;
+pub const RB_SIZETORECT: UINT = WM_USER + 23;
+pub const RB_SETCOLORSCHEME: UINT = CCM_SETCOLORSCHEME;
+pub const RB_GETCOLORSCHEME: UINT = CCM_GETCOLORSCHEME;
+pub const RB_BEGINDRAG: UINT = WM_USER + 24;
+pub const RB_ENDDRAG: UINT = WM_USER + 25;
+pub const RB_DRAGMOVE: UINT = WM_USER + 26;
+pub const RB_GETBARHEIGHT: UINT = WM_USER + 27;
+pub const RB_GETBANDINFOW: UINT = WM_USER + 28;
+pub const RB_GETBANDINFOA: UINT = WM_USER + 29;
+pub const RB_MINIMIZEBAND: UINT = WM_USER + 30;
+pub const RB_MAXIMIZEBAND: UINT = WM_USER + 31;
+pub const RB_GETDROPTARGET: UINT = CCM_GETDROPTARGET;
+pub const RB_GETBANDBORDERS: UINT = WM_USER + 34;
+pub const RB_SHOWBAND: UINT = WM_USER + 35;
+pub const RB_SETPALETTE: UINT = WM_USER + 37;
+pub const RB_GETPALETTE: UINT = WM_USER + 38;
+pub const RB_MOVEBAND: UINT = WM_USER + 39;
+pub const RB_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
+pub const RB_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
+pub const RB_GETBANDMARGINS: UINT = WM_USER + 40;
+pub const RB_SETWINDOWTHEME: UINT = CCM_SETWINDOWTHEME;
+pub const RB_SETEXTENDEDSTYLE: UINT = WM_USER + 41;
+pub const RB_GETEXTENDEDSTYLE: UINT = WM_USER + 42;
+pub const RB_PUSHCHEVRON: UINT = WM_USER + 43;
+pub const RB_SETBANDWIDTH: UINT = WM_USER + 44;
+pub const RBN_HEIGHTCHANGE: UINT = RBN_FIRST - 0;
+pub const RBN_GETOBJECT: UINT = RBN_FIRST - 1;
+pub const RBN_LAYOUTCHANGED: UINT = RBN_FIRST - 2;
+pub const RBN_AUTOSIZE: UINT = RBN_FIRST - 3;
+pub const RBN_BEGINDRAG: UINT = RBN_FIRST - 4;
+pub const RBN_ENDDRAG: UINT = RBN_FIRST - 5;
+pub const RBN_DELETINGBAND: UINT = RBN_FIRST - 6;
+pub const RBN_DELETEDBAND: UINT = RBN_FIRST - 7;
+pub const RBN_CHILDSIZE: UINT = RBN_FIRST - 8;
+pub const RBN_CHEVRONPUSHED: UINT = RBN_FIRST - 10;
+pub const RBN_SPLITTERDRAG: UINT = RBN_FIRST - 11;
+pub const RBN_MINMAX: UINT = RBN_FIRST - 21;
+pub const RBN_AUTOBREAK: UINT = RBN_FIRST - 22;
+STRUCT!{struct NMREBARCHILDSIZE {
+ hdr: NMHDR,
+ uBand: UINT,
+ wID: UINT,
+ rcChild: RECT,
+ rcBand: RECT,
+}}
+pub type LPNMREBARCHILDSIZE = *mut NMREBARCHILDSIZE;
+STRUCT!{struct NMREBAR {
+ hdr: NMHDR,
+ dwMask: DWORD,
+ uBand: UINT,
+ fStyle: UINT,
+ wID: UINT,
+ lParam: LPARAM,
+}}
+pub type LPNMREBAR = *mut NMREBAR;
+pub const RBNM_ID: DWORD = 0x00000001;
+pub const RBNM_STYLE: DWORD = 0x00000002;
+pub const RBNM_LPARAM: DWORD = 0x00000004;
+STRUCT!{struct NMRBAUTOSIZE {
+ hdr: NMHDR,
+ fChanged: BOOL,
+ rcTarget: RECT,
+ rcActual: RECT,
+}}
+pub type LPNMRBAUTOSIZE = *mut NMRBAUTOSIZE;
+STRUCT!{struct NMREBARCHEVRON {
+ hdr: NMHDR,
+ uBand: UINT,
+ wID: UINT,
+ lParam: LPARAM,
+ rc: RECT,
+ lParamNM: LPARAM,
+}}
+pub type LPNMREBARCHEVRON = *mut NMREBARCHEVRON;
+STRUCT!{struct NMREBARSPLITTER {
+ hdr: NMHDR,
+ rcSizing: RECT,
+}}
+pub type LPNMREBARSPLITTER = *mut NMREBARSPLITTER;
+pub const RBAB_AUTOSIZE: UINT = 0x0001;
+pub const RBAB_ADDBAND: UINT = 0x0002;
+STRUCT!{struct NMREBARAUTOBREAK {
+ hdr: NMHDR,
+ uBand: UINT,
+ wID: UINT,
+ lParam: LPARAM,
+ uMsg: UINT,
+ fStyleCurrent: UINT,
+ fAutoBreak: UINT,
+}}
+pub type LPNMREBARAUTOBREAK = *mut NMREBARAUTOBREAK;
+pub const RBHT_NOWHERE: UINT = 0x0001;
+pub const RBHT_CAPTION: UINT = 0x0002;
+pub const RBHT_CLIENT: UINT = 0x0003;
+pub const RBHT_GRABBER: UINT = 0x0004;
+pub const RBHT_CHEVRON: UINT = 0x0008;
+pub const RBHT_SPLITTER: UINT = 0x0010;
+STRUCT!{struct RBHITTESTINFO {
+ pt: POINT,
+ flags: UINT,
+ iBand: c_int,
+}}
+pub type LPRBHITTESTINFO = *mut RBHITTESTINFO;
+pub const TOOLTIPS_CLASS: &'static str = "tooltips_class32";
+pub type LPTOOLINFOA = LPTTTOOLINFOA;
+pub type LPTOOLINFOW = LPTTTOOLINFOW;
+pub type TOOLINFOA = TTTOOLINFOA;
+pub type TOOLINFOW = TTTOOLINFOW;
+STRUCT!{struct TTTOOLINFOA {
+ cbSize: UINT,
+ uFlags: UINT,
+ hwnd: HWND,
+ uId: UINT_PTR,
+ rect: RECT,
+ hinst: HINSTANCE,
+ lpszText: LPSTR,
+ lParam: LPARAM,
+ lpReserved: *mut c_void,
+}}
+pub type PTTTOOLINFOA = *mut TTTOOLINFOA;
+pub type LPTTTOOLINFOA = *mut TTTOOLINFOA;
+STRUCT!{struct TTTOOLINFOW {
+ cbSize: UINT,
+ uFlags: UINT,
+ hwnd: HWND,
+ uId: UINT_PTR,
+ rect: RECT,
+ hinst: HINSTANCE,
+ lpszText: LPWSTR,
+ lParam: LPARAM,
+ lpReserved: *mut c_void,
+}}
+pub type PTTTOOLINFOW = *mut TTTOOLINFOW;
+pub type LPTTTOOLINFOW = *mut TTTOOLINFOW;
+pub const TTS_ALWAYSTIP: DWORD = 0x01;
+pub const TTS_NOPREFIX: DWORD = 0x02;
+pub const TTS_NOANIMATE: DWORD = 0x10;
+pub const TTS_NOFADE: DWORD = 0x20;
+pub const TTS_BALLOON: DWORD = 0x40;
+pub const TTS_CLOSE: DWORD = 0x80;
+pub const TTS_USEVISUALSTYLE: DWORD = 0x100;
+pub const TTF_IDISHWND: UINT = 0x0001;
+pub const TTF_CENTERTIP: UINT = 0x0002;
+pub const TTF_RTLREADING: UINT = 0x0004;
+pub const TTF_SUBCLASS: UINT = 0x0010;
+pub const TTF_TRACK: UINT = 0x0020;
+pub const TTF_ABSOLUTE: UINT = 0x0080;
+pub const TTF_TRANSPARENT: UINT = 0x0100;
+pub const TTF_PARSELINKS: UINT = 0x1000;
+pub const TTF_DI_SETITEM: UINT = 0x8000;
+pub const TTDT_AUTOMATIC: WPARAM = 0;
+pub const TTDT_RESHOW: WPARAM = 1;
+pub const TTDT_AUTOPOP: WPARAM = 2;
+pub const TTDT_INITIAL: WPARAM = 3;
+pub const TTI_NONE: WPARAM = 0;
+pub const TTI_INFO: WPARAM = 1;
+pub const TTI_WARNING: WPARAM = 2;
+pub const TTI_ERROR: WPARAM = 3;
+pub const TTI_INFO_LARGE: WPARAM = 4;
+pub const TTI_WARNING_LARGE: WPARAM = 5;
+pub const TTI_ERROR_LARGE: WPARAM = 6;
+pub const TTM_ACTIVATE: UINT = WM_USER + 1;
+pub const TTM_SETDELAYTIME: UINT = WM_USER + 3;
+pub const TTM_ADDTOOLA: UINT = WM_USER + 4;
+pub const TTM_ADDTOOLW: UINT = WM_USER + 50;
+pub const TTM_DELTOOLA: UINT = WM_USER + 5;
+pub const TTM_DELTOOLW: UINT = WM_USER + 51;
+pub const TTM_NEWTOOLRECTA: UINT = WM_USER + 6;
+pub const TTM_NEWTOOLRECTW: UINT = WM_USER + 52;
+pub const TTM_RELAYEVENT: UINT = WM_USER + 7;
+pub const TTM_GETTOOLINFOA: UINT = WM_USER + 8;
+pub const TTM_GETTOOLINFOW: UINT = WM_USER + 53;
+pub const TTM_SETTOOLINFOA: UINT = WM_USER + 9;
+pub const TTM_SETTOOLINFOW: UINT = WM_USER + 54;
+pub const TTM_HITTESTA: UINT = WM_USER + 10;
+pub const TTM_HITTESTW: UINT = WM_USER + 55;
+pub const TTM_GETTEXTA: UINT = WM_USER + 11;
+pub const TTM_GETTEXTW: UINT = WM_USER + 56;
+pub const TTM_UPDATETIPTEXTA: UINT = WM_USER + 12;
+pub const TTM_UPDATETIPTEXTW: UINT = WM_USER + 57;
+pub const TTM_GETTOOLCOUNT: UINT = WM_USER + 13;
+pub const TTM_ENUMTOOLSA: UINT = WM_USER + 14;
+pub const TTM_ENUMTOOLSW: UINT = WM_USER + 58;
+pub const TTM_GETCURRENTTOOLA: UINT = WM_USER + 15;
+pub const TTM_GETCURRENTTOOLW: UINT = WM_USER + 59;
+pub const TTM_WINDOWFROMPOINT: UINT = WM_USER + 16;
+pub const TTM_TRACKACTIVATE: UINT = WM_USER + 17;
+pub const TTM_TRACKPOSITION: UINT = WM_USER + 18;
+pub const TTM_SETTIPBKCOLOR: UINT = WM_USER + 19;
+pub const TTM_SETTIPTEXTCOLOR: UINT = WM_USER + 20;
+pub const TTM_GETDELAYTIME: UINT = WM_USER + 21;
+pub const TTM_GETTIPBKCOLOR: UINT = WM_USER + 22;
+pub const TTM_GETTIPTEXTCOLOR: UINT = WM_USER + 23;
+pub const TTM_SETMAXTIPWIDTH: UINT = WM_USER + 24;
+pub const TTM_GETMAXTIPWIDTH: UINT = WM_USER + 25;
+pub const TTM_SETMARGIN: UINT = WM_USER + 26;
+pub const TTM_GETMARGIN: UINT = WM_USER + 27;
+pub const TTM_POP: UINT = WM_USER + 28;
+pub const TTM_UPDATE: UINT = WM_USER + 29;
+pub const TTM_GETBUBBLESIZE: UINT = WM_USER + 30;
+pub const TTM_ADJUSTRECT: UINT = WM_USER + 31;
+pub const TTM_SETTITLEA: UINT = WM_USER + 32;
+pub const TTM_SETTITLEW: UINT = WM_USER + 33;
+pub const TTM_POPUP: UINT = WM_USER + 34;
+pub const TTM_GETTITLE: UINT = WM_USER + 35;
+STRUCT!{struct TTGETTITLE {
+ dwSize: DWORD,
+ uTitleBitmap: UINT,
+ cch: UINT,
+ pszTitle: *mut WCHAR,
+}}
+pub type LPTTGETTITLE = *mut TTGETTITLE;
+pub const TTM_SETWINDOWTHEME: UINT = CCM_SETWINDOWTHEME;
+pub type LPHITTESTINFOW = LPTTHITTESTINFOW;
+pub type LPHITTESTINFOA = LPTTHITTESTINFOA;
+STRUCT!{struct TTHITTESTINFOA {
+ hwnd: HWND,
+ pt: POINT,
+ ti: TTTOOLINFOA,
+}}
+pub type LPTTHITTESTINFOA = *mut TTHITTESTINFOA;
+STRUCT!{struct TTHITTESTINFOW {
+ hwnd: HWND,
+ pt: POINT,
+ ti: TTTOOLINFOW,
+}}
+pub type LPTTHITTESTINFOW = *mut TTHITTESTINFOW;
+pub const TTN_GETDISPINFOA: UINT = TTN_FIRST - 0;
+pub const TTN_GETDISPINFOW: UINT = TTN_FIRST - 10;
+pub const TTN_SHOW: UINT = TTN_FIRST - 1;
+pub const TTN_POP: UINT = TTN_FIRST - 2;
+pub const TTN_LINKCLICK: UINT = TTN_FIRST - 3;
+pub const TTN_NEEDTEXTA: UINT = TTN_GETDISPINFOA;
+pub const TTN_NEEDTEXTW: UINT = TTN_GETDISPINFOW;
+pub type TOOLTIPTEXTW = NMTTDISPINFOW;
+pub type TOOLTIPTEXTA = NMTTDISPINFOA;
+pub type LPTOOLTIPTEXTA = LPNMTTDISPINFOA;
+pub type LPTOOLTIPTEXTW = LPNMTTDISPINFOW;
+STRUCT!{struct NMTTDISPINFOA {
+ hdr: NMHDR,
+ lpszText: LPSTR,
+ szText: [c_char; 80],
+ hinst: HINSTANCE,
+ uFlags: UINT,
+ lParam: LPARAM,
+}}
+pub type LPNMTTDISPINFOA = *mut NMTTDISPINFOA;
+STRUCT!{struct NMTTDISPINFOW {
+ hdr: NMHDR,
+ lpszText: LPWSTR,
+ szText: [WCHAR; 80],
+ hinst: HINSTANCE,
+ uFlags: UINT,
+ lParam: LPARAM,
+}}
+pub type LPNMTTDISPINFOW = *mut NMTTDISPINFOW;
+pub const SBARS_SIZEGRIP: DWORD = 0x0100;
+pub const SBARS_TOOLTIPS: DWORD = 0x0800;
+pub const SBT_TOOLTIPS: DWORD = 0x0800;
+extern "system" {
+ pub fn DrawStatusTextA(
+ hDC: HDC,
+ lprc: LPCRECT,
+ pszText: LPCSTR,
+ uFlags: UINT,
+ );
+ pub fn DrawStatusTextW(
+ hDC: HDC,
+ lprc: LPCRECT,
+ pszText: LPCWSTR,
+ uFlags: UINT,
+ );
+ pub fn CreateStatusWindowA(
+ style: LONG,
+ lpszText: LPCSTR,
+ hwndParent: HWND,
+ wID: UINT,
+ ) -> HWND;
+ pub fn CreateStatusWindowW(
+ style: LONG,
+ lpszText: LPCWSTR,
+ hwndParent: HWND,
+ wID: UINT,
+ ) -> HWND;
+}
+pub const STATUSCLASSNAME: &'static str = "msctls_statusbar32";
+pub const SB_SETTEXTA: UINT = WM_USER + 1;
+pub const SB_SETTEXTW: UINT = WM_USER + 11;
+pub const SB_GETTEXTA: UINT = WM_USER + 2;
+pub const SB_GETTEXTW: UINT = WM_USER + 13;
+pub const SB_GETTEXTLENGTHA: UINT = WM_USER + 3;
+pub const SB_GETTEXTLENGTHW: UINT = WM_USER + 12;
+pub const SB_SETPARTS: UINT = WM_USER + 4;
+pub const SB_GETPARTS: UINT = WM_USER + 6;
+pub const SB_GETBORDERS: UINT = WM_USER + 7;
+pub const SB_SETMINHEIGHT: UINT = WM_USER + 8;
+pub const SB_SIMPLE: UINT = WM_USER + 9;
+pub const SB_GETRECT: UINT = WM_USER + 10;
+pub const SB_ISSIMPLE: UINT = WM_USER + 14;
+pub const SB_SETICON: UINT = WM_USER + 15;
+pub const SB_SETTIPTEXTA: UINT = WM_USER + 16;
+pub const SB_SETTIPTEXTW: UINT = WM_USER + 17;
+pub const SB_GETTIPTEXTA: UINT = WM_USER + 18;
+pub const SB_GETTIPTEXTW: UINT = WM_USER + 19;
+pub const SB_GETICON: UINT = WM_USER + 20;
+pub const SB_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
+pub const SB_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
+pub const SBT_OWNERDRAW: WPARAM = 0x1000;
+pub const SBT_NOBORDERS: WPARAM = 0x0100;
+pub const SBT_POPOUT: WPARAM = 0x0200;
+pub const SBT_RTLREADING: WPARAM = 0x0400;
+pub const SBT_NOTABPARSING: WPARAM = 0x0800;
+pub const SB_SETBKCOLOR: UINT = CCM_SETBKCOLOR;
+pub const SBN_SIMPLEMODECHANGE: UINT = SBN_FIRST - 0;
+pub const SB_SIMPLEID: WPARAM = 0x00ff;
+extern "system" {
+ pub fn MenuHelp(
+ uMsg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ hMainMenu: HMENU,
+ hInst: HINSTANCE,
+ hwndStatus: HWND,
+ lpwIDs: *mut UINT,
+ );
+ pub fn ShowHideMenuCtl(
+ hWnd: HWND,
+ uFlags: UINT_PTR,
+ lpInfo: LPINT,
+ ) -> BOOL;
+ pub fn GetEffectiveClientRect(
+ hWnd: HWND,
+ lprc: LPRECT,
+ lpInfo: *const INT,
+ );
+}
+pub const TRACKBAR_CLASS: &'static str = "msctls_trackbar32";
+pub const TBS_AUTOTICKS: DWORD = 0x0001;
+pub const TBS_VERT: DWORD = 0x0002;
+pub const TBS_HORZ: DWORD = 0x0000;
+pub const TBS_TOP: DWORD = 0x0004;
+pub const TBS_BOTTOM: DWORD = 0x0000;
+pub const TBS_LEFT: DWORD = 0x0004;
+pub const TBS_RIGHT: DWORD = 0x0000;
+pub const TBS_BOTH: DWORD = 0x0008;
+pub const TBS_NOTICKS: DWORD = 0x0010;
+pub const TBS_ENABLESELRANGE: DWORD = 0x0020;
+pub const TBS_FIXEDLENGTH: DWORD = 0x0040;
+pub const TBS_NOTHUMB: DWORD = 0x0080;
+pub const TBS_TOOLTIPS: DWORD = 0x0100;
+pub const TBS_REVERSED: DWORD = 0x0200;
+pub const TBS_DOWNISLEFT: DWORD = 0x0400;
+pub const TBS_NOTIFYBEFOREMOVE: DWORD = 0x0800;
+pub const TBS_TRANSPARENTBKGND: DWORD = 0x1000;
+pub const TBM_GETPOS: UINT = WM_USER;
+pub const TBM_GETRANGEMIN: UINT = WM_USER + 1;
+pub const TBM_GETRANGEMAX: UINT = WM_USER + 2;
+pub const TBM_GETTIC: UINT = WM_USER + 3;
+pub const TBM_SETTIC: UINT = WM_USER + 4;
+pub const TBM_SETPOS: UINT = WM_USER + 5;
+pub const TBM_SETRANGE: UINT = WM_USER + 6;
+pub const TBM_SETRANGEMIN: UINT = WM_USER + 7;
+pub const TBM_SETRANGEMAX: UINT = WM_USER + 8;
+pub const TBM_CLEARTICS: UINT = WM_USER + 9;
+pub const TBM_SETSEL: UINT = WM_USER + 10;
+pub const TBM_SETSELSTART: UINT = WM_USER + 11;
+pub const TBM_SETSELEND: UINT = WM_USER + 12;
+pub const TBM_GETPTICS: UINT = WM_USER + 14;
+pub const TBM_GETTICPOS: UINT = WM_USER + 15;
+pub const TBM_GETNUMTICS: UINT = WM_USER + 16;
+pub const TBM_GETSELSTART: UINT = WM_USER + 17;
+pub const TBM_GETSELEND: UINT = WM_USER + 18;
+pub const TBM_CLEARSEL: UINT = WM_USER + 19;
+pub const TBM_SETTICFREQ: UINT = WM_USER + 20;
+pub const TBM_SETPAGESIZE: UINT = WM_USER + 21;
+pub const TBM_GETPAGESIZE: UINT = WM_USER + 22;
+pub const TBM_SETLINESIZE: UINT = WM_USER + 23;
+pub const TBM_GETLINESIZE: UINT = WM_USER + 24;
+pub const TBM_GETTHUMBRECT: UINT = WM_USER + 25;
+pub const TBM_GETCHANNELRECT: UINT = WM_USER + 26;
+pub const TBM_SETTHUMBLENGTH: UINT = WM_USER + 27;
+pub const TBM_GETTHUMBLENGTH: UINT = WM_USER + 28;
+pub const TBM_SETTOOLTIPS: UINT = WM_USER + 29;
+pub const TBM_GETTOOLTIPS: UINT = WM_USER + 30;
+pub const TBM_SETTIPSIDE: UINT = WM_USER + 31;
+pub const TBTS_TOP: WPARAM = 0;
+pub const TBTS_LEFT: WPARAM = 1;
+pub const TBTS_BOTTOM: WPARAM = 2;
+pub const TBTS_RIGHT: WPARAM = 3;
+pub const TBM_SETBUDDY: UINT = WM_USER + 32;
+pub const TBM_GETBUDDY: UINT = WM_USER + 33;
+pub const TBM_SETPOSNOTIFY: UINT = WM_USER + 34;
+pub const TBM_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
+pub const TBM_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
+pub const TB_LINEUP: WPARAM = 0;
+pub const TB_LINEDOWN: WPARAM = 1;
+pub const TB_PAGEUP: WPARAM = 2;
+pub const TB_PAGEDOWN: WPARAM = 3;
+pub const TB_THUMBPOSITION: WPARAM = 4;
+pub const TB_THUMBTRACK: WPARAM = 5;
+pub const TB_TOP: WPARAM = 6;
+pub const TB_BOTTOM: WPARAM = 7;
+pub const TB_ENDTRACK: WPARAM = 8;
+pub const TBCD_TICS: DWORD_PTR = 0x0001;
+pub const TBCD_THUMB: DWORD_PTR = 0x0001;
+pub const TBCD_CHANNEL: DWORD_PTR = 0x0001;
+pub const TRBN_THUMBPOSCHANGING: UINT = TRBN_FIRST - 1;
+STRUCT!{struct NMTRBTHUMBPOSCHANGING {
+ hdr: NMHDR,
+ dwPos: DWORD,
+ nReason: c_int,
+}}
+STRUCT!{struct DRAGLISTINFO {
+ uNotification: UINT,
+ hWnd: HWND,
+ ptCursor: POINT,
+}}
+pub type LPDRAGLISTINFO = *mut DRAGLISTINFO;
+pub const DL_BEGINDRAG: UINT = WM_USER + 133;
+pub const DL_DRAGGING: UINT = WM_USER + 134;
+pub const DL_DROPPED: UINT = WM_USER + 135;
+pub const DL_CANCELDRAG: UINT = WM_USER + 136;
+pub const DL_CURSORSET: UINT = 0;
+pub const DL_STOPCURSOR: UINT = 1;
+pub const DL_COPYCURSOR: UINT = 2;
+pub const DL_MOVECURSOR: UINT = 3;
+pub const DRAGLISTMSGSTRING: &'static str = "commctrl_DragListMsg";
+extern "system" {
+ pub fn MakeDragList(
+ hLB: HWND,
+ ) -> BOOL;
+ pub fn DrawInsert(
+ handParent: HWND,
+ hLB: HWND,
+ nItem: c_int,
+ );
+ pub fn LBItemFromPt(
+ hLB: HWND,
+ pt: POINT,
+ bAutoScroll: BOOL,
+ ) -> c_int;
+}
+pub const UPDOWN_CLASS: &'static str = "msctls_updown32";
+STRUCT!{struct UDACCEL {
+ nSec: UINT,
+ nInc: UINT,
+}}
+pub type LPUDACCEL = *mut UDACCEL;
+pub const UD_MAXVAL: c_short = 0x7fff;
+pub const UD_MINVAL: c_short = 0 - UD_MAXVAL;
+pub const UDS_WRAP: DWORD = 0x0001;
+pub const UDS_SETBUDDYINT: DWORD = 0x0002;
+pub const UDS_ALIGNRIGHT: DWORD = 0x0004;
+pub const UDS_ALIGNLEFT: DWORD = 0x0008;
+pub const UDS_AUTOBUDDY: DWORD = 0x0010;
+pub const UDS_ARROWKEYS: DWORD = 0x0020;
+pub const UDS_HORZ: DWORD = 0x0040;
+pub const UDS_NOTHOUSANDS: DWORD = 0x0080;
+pub const UDS_HOTTRACK: DWORD = 0x0100;
+pub const UDM_SETRANGE: UINT = WM_USER + 101;
+pub const UDM_GETRANGE: UINT = WM_USER + 102;
+pub const UDM_SETPOS: UINT = WM_USER + 103;
+pub const UDM_GETPOS: UINT = WM_USER + 104;
+pub const UDM_SETBUDDY: UINT = WM_USER + 105;
+pub const UDM_GETBUDDY: UINT = WM_USER + 106;
+pub const UDM_SETACCEL: UINT = WM_USER + 107;
+pub const UDM_GETACCEL: UINT = WM_USER + 108;
+pub const UDM_SETBASE: UINT = WM_USER + 109;
+pub const UDM_GETBASE: UINT = WM_USER + 110;
+pub const UDM_SETRANGE32: UINT = WM_USER + 111;
+pub const UDM_GETRANGE32: UINT = WM_USER + 112;
+pub const UDM_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
+pub const UDM_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
+pub const UDM_SETPOS32: UINT = WM_USER + 113;
+pub const UDM_GETPOS32: UINT = WM_USER + 114;
+extern "system" {
+ pub fn CreateUpDownControl(
+ dwStyle: DWORD,
+ x: c_int,
+ y: c_int,
+ cx: c_int,
+ cy: c_int,
+ hParent: HWND,
+ nID: c_int,
+ hInst: HINSTANCE,
+ nBuddy: HWND,
+ nUpper: c_int,
+ nLower: c_int,
+ nPos: c_int,
+ ) -> HWND;
+}
+pub type NM_UPDOWN = NMUPDOWN;
+pub type LPNM_UPDOWN = LPNMUPDOWN;
+STRUCT!{struct NMUPDOWN {
+ hdr: NMHDR,
+ iPos: c_int,
+ iDelta: c_int,
+}}
+pub type LPNMUPDOWN = *mut NMUPDOWN;
+pub const UDN_DELTAPOS: UINT = UDN_FIRST - 1;
+pub const PROGRESS_CLASS: &'static str = "msctls_progress32";
+pub const PBS_SMOOTH: DWORD = 0x01;
+pub const PBS_VERTICAL: DWORD = 0x04;
+pub const PBM_SETRANGE: UINT = WM_USER + 1;
+pub const PBM_SETPOS: UINT = WM_USER + 2;
+pub const PBM_DELTAPOS: UINT = WM_USER + 3;
+pub const PBM_SETSTEP: UINT = WM_USER + 4;
+pub const PBM_STEPIT: UINT = WM_USER + 5;
+pub const PBM_SETRANGE32: UINT = WM_USER + 6;
+STRUCT!{struct PBRANGE {
+ iLow: c_int,
+ iHigh: c_int,
+}}
+pub type LPPBRANGE = *mut PBRANGE;
+pub const PBM_GETRANGE: UINT = WM_USER + 7;
+pub const PBM_GETPOS: UINT = WM_USER + 8;
+pub const PBM_SETBARCOLOR: UINT = WM_USER + 9;
+pub const PBM_SETBKCOLOR: UINT = CCM_SETBKCOLOR;
+pub const PBS_MARQUEE: DWORD = 0x08;
+pub const PBM_SETMARQUEE: UINT = WM_USER + 10;
+pub const PBS_SMOOTHREVERSE: DWORD = 0x10;
+pub const PBM_GETSTEP: UINT = WM_USER + 13;
+pub const PBM_GETBKCOLOR: UINT = WM_USER + 14;
+pub const PBM_GETBARCOLOR: UINT = WM_USER + 15;
+pub const PBM_SETSTATE: UINT = WM_USER + 16;
+pub const PBM_GETSTATE: UINT = WM_USER + 17;
+pub const PBST_NORMAL: c_int = 0x0001;
+pub const PBST_ERROR: c_int = 0x0002;
+pub const PBST_PAUSED: c_int = 0x0003;
+pub const HOTKEYF_SHIFT: BYTE = 0x01;
+pub const HOTKEYF_CONTROL: BYTE = 0x02;
+pub const HOTKEYF_ALT: BYTE = 0x04;
+pub const HOTKEYF_EXT: BYTE = 0x08;
+pub const HKCOMB_NONE: WPARAM = 0x0001;
+pub const HKCOMB_S: WPARAM = 0x0002;
+pub const HKCOMB_C: WPARAM = 0x0004;
+pub const HKCOMB_A: WPARAM = 0x0008;
+pub const HKCOMB_SC: WPARAM = 0x0010;
+pub const HKCOMB_SA: WPARAM = 0x0020;
+pub const HKCOMB_CA: WPARAM = 0x0040;
+pub const HKCOMB_SCA: WPARAM = 0x0080;
+pub const HKM_SETHOTKEY: UINT = WM_USER + 1;
+pub const HKM_GETHOTKEY: UINT = WM_USER + 2;
+pub const HKM_SETRULES: UINT = WM_USER + 3;
+pub const HOTKEY_CLASS: &'static str = "msctls_hotkey32";
+pub const CCS_TOP: DWORD = 0x00000001;
+pub const CCS_NOMOVEY: DWORD = 0x00000002;
+pub const CCS_BOTTOM: DWORD = 0x00000003;
+pub const CCS_NORESIZE: DWORD = 0x00000004;
+pub const CCS_NOPARENTALIGN: DWORD = 0x00000008;
+pub const CCS_ADJUSTABLE: DWORD = 0x00000020;
+pub const CCS_NODIVIDER: DWORD = 0x00000040;
+pub const CCS_VERT: DWORD = 0x00000080;
+pub const CCS_LEFT: DWORD = CCS_VERT | CCS_TOP;
+pub const CCS_RIGHT: DWORD = CCS_VERT | CCS_BOTTOM;
+pub const CCS_NOMOVEX: DWORD = CCS_VERT | CCS_NOMOVEY;
+pub const INVALID_LINK_INDEX: c_int = -1;
+pub const MAX_LINKID_TEXT: usize = 48;
+pub const L_MAX_URL_LENGTH: usize = 2048 + 32 + 4;
+pub const WC_LINK: &'static str = "SysLink";
+pub const LWS_TRANSPARENT: DWORD = 0x0001;
+pub const LWS_IGNORERETURN: DWORD = 0x0002;
+pub const LWS_NOPREFIX: DWORD = 0x0004;
+pub const LWS_USEVISUALSTYLE: DWORD = 0x0008;
+pub const LWS_USECUSTOMTEXT: DWORD = 0x0010;
+pub const LWS_RIGHT: DWORD = 0x0020;
+pub const LIF_ITEMINDEX: UINT = 0x00000001;
+pub const LIF_STATE: UINT = 0x00000002;
+pub const LIF_ITEMID: UINT = 0x00000004;
+pub const LIF_URL: UINT = 0x00000008;
+pub const LIS_FOCUSED: UINT = 0x00000001;
+pub const LIS_ENABLED: UINT = 0x00000002;
+pub const LIS_VISITED: UINT = 0x00000004;
+pub const LIS_HOTTRACK: UINT = 0x00000008;
+pub const LIS_DEFAULTCOLORS: UINT = 0x00000010;
+STRUCT!{struct LITEM {
+ mask: UINT,
+ iLink: c_int,
+ state: UINT,
+ stateMask: UINT,
+ szID: [WCHAR; MAX_LINKID_TEXT],
+ szUrl: [WCHAR; L_MAX_URL_LENGTH],
+}}
+pub type PLITEM = *mut LITEM;
+STRUCT!{struct LHITTESTINFO {
+ pt: POINT,
+ item: LITEM,
+}}
+pub type PLHITTESTINFO = *mut LHITTESTINFO;
+STRUCT!{struct NMLINK {
+ hdr: NMHDR,
+ item: LITEM,
+}}
+pub type PNMLINK = *mut NMLINK;
+pub const LM_HITTEST: UINT = WM_USER + 0x300;
+pub const LM_GETIDEALHEIGHT: UINT = WM_USER + 0x301;
+pub const LM_SETITEM: UINT = WM_USER + 0x302;
+pub const LM_GETITEM: UINT = WM_USER + 0x303;
+pub const LM_GETIDEALSIZE: UINT = LM_GETIDEALHEIGHT;
+pub const WC_LISTVIEW: &'static str = "SysListView32";
+pub const LVS_ICON: DWORD = 0x0000;
+pub const LVS_REPORT: DWORD = 0x0001;
+pub const LVS_SMALLICON: DWORD = 0x0002;
+pub const LVS_LIST: DWORD = 0x0003;
+pub const LVS_TYPEMASK: DWORD = 0x0003;
+pub const LVS_SINGLESEL: DWORD = 0x0004;
+pub const LVS_SHOWSELALWAYS: DWORD = 0x0008;
+pub const LVS_SORTASCENDING: DWORD = 0x0010;
+pub const LVS_SORTDESCENDING: DWORD = 0x0020;
+pub const LVS_SHAREIMAGELISTS: DWORD = 0x0040;
+pub const LVS_NOLABELWRAP: DWORD = 0x0080;
+pub const LVS_AUTOARRANGE: DWORD = 0x0100;
+pub const LVS_EDITLABELS: DWORD = 0x0200;
+pub const LVS_OWNERDATA: DWORD = 0x1000;
+pub const LVS_NOSCROLL: DWORD = 0x2000;
+pub const LVS_TYPESTYLEMASK: DWORD = 0xfc00;
+pub const LVS_ALIGNTOP: DWORD = 0x0000;
+pub const LVS_ALIGNLEFT: DWORD = 0x0800;
+pub const LVS_ALIGNMASK: DWORD = 0x0c00;
+pub const LVS_OWNERDRAWFIXED: DWORD = 0x0400;
+pub const LVS_NOCOLUMNHEADER: DWORD = 0x4000;
+pub const LVS_NOSORTHEADER: DWORD = 0x8000;
+pub const LVM_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
+pub const LVM_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
+pub const LVM_GETBKCOLOR: UINT = LVM_FIRST + 0;
+pub const LVM_SETBKCOLOR: UINT = LVM_FIRST + 1;
+pub const LVM_GETIMAGELIST: UINT = LVM_FIRST + 2;
+pub const LVSIL_NORMAL: c_int = 0;
+pub const LVSIL_SMALL: c_int = 1;
+pub const LVSIL_STATE: c_int = 2;
+pub const LVSIL_GROUPHEADER: c_int = 3;
+pub const LVM_SETIMAGELIST: UINT = LVM_FIRST + 3;
+pub const LVM_GETITEMCOUNT: UINT = LVM_FIRST + 4;
+pub const LVIF_TEXT: UINT = 0x00000001;
+pub const LVIF_IMAGE: UINT = 0x00000002;
+pub const LVIF_PARAM: UINT = 0x00000004;
+pub const LVIF_STATE: UINT = 0x00000008;
+pub const LVIF_INDENT: UINT = 0x00000010;
+pub const LVIF_NORECOMPUTE: UINT = 0x00000800;
+pub const LVIF_GROUPID: UINT = 0x00000100;
+pub const LVIF_COLUMNS: UINT = 0x00000200;
+pub const LVIF_COLFMT: UINT = 0x00010000;
+pub const LVIS_FOCUSED: UINT = 0x0001;
+pub const LVIS_SELECTED: UINT = 0x0002;
+pub const LVIS_CUT: UINT = 0x0004;
+pub const LVIS_DROPHILITED: UINT = 0x0008;
+pub const LVIS_GLOW: UINT = 0x0010;
+pub const LVIS_ACTIVATING: UINT = 0x0020;
+pub const LVIS_OVERLAYMASK: UINT = 0x0F00;
+pub const LVIS_STATEIMAGEMASK: UINT = 0xF000;
+#[inline]
+pub fn INDEXTOSTATEIMAGEMASK(i: UINT) -> UINT {
+ i << 12
+}
+pub const I_INDENTCALLBACK: c_int = -1;
+pub type LV_ITEMA = LVITEMA;
+pub type LV_ITEMW = LVITEMW;
+pub const I_GROUPIDCALLBACK: c_int = -1;
+pub const I_GROUPIDNONE: c_int = -2;
+STRUCT!{struct LVITEMA {
+ mask: UINT,
+ iItem: c_int,
+ iSubItem: c_int,
+ state: UINT,
+ stateMask: UINT,
+ pszText: LPSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ lParam: LPARAM,
+ iIndent: c_int,
+ iGroupId: c_int,
+ cColumns: UINT,
+ puColumns: PUINT,
+ piColFmt: *mut c_int,
+ iGroup: c_int,
+}}
+pub type LPLVITEMA = *mut LVITEMA;
+STRUCT!{struct LVITEMW {
+ mask: UINT,
+ iItem: c_int,
+ iSubItem: c_int,
+ state: UINT,
+ stateMask: UINT,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ lParam: LPARAM,
+ iIndent: c_int,
+ iGroupId: c_int,
+ cColumns: UINT,
+ puColumns: PUINT,
+ piColFmt: *mut c_int,
+ iGroup: c_int,
+}}
+pub type LPLVITEMW = *mut LVITEMW;
+pub const LPSTR_TEXTCALLBACKW: LPWSTR = -1isize as LPWSTR;
+pub const LPSTR_TEXTCALLBACKA: LPSTR = -1isize as LPSTR;
+pub const I_IMAGECALLBACK: c_int = -1;
+pub const I_IMAGENONE: c_int = -2;
+pub const I_COLUMNSCALLBACK: UINT = -1i32 as u32;
+pub const LVM_GETITEMA: UINT = LVM_FIRST + 5;
+pub const LVM_GETITEMW: UINT = LVM_FIRST + 75;
+pub const LVM_SETITEMA: UINT = LVM_FIRST + 6;
+pub const LVM_SETITEMW: UINT = LVM_FIRST + 76;
+pub const LVM_INSERTITEMA: UINT = LVM_FIRST + 7;
+pub const LVM_INSERTITEMW: UINT = LVM_FIRST + 77;
+pub const LVM_DELETEITEM: UINT = LVM_FIRST + 8;
+pub const LVM_DELETEALLITEMS: UINT = LVM_FIRST + 9;
+pub const LVM_GETCALLBACKMASK: UINT = LVM_FIRST + 10;
+pub const LVM_SETCALLBACKMASK: UINT = LVM_FIRST + 11;
+pub const LVNI_ALL: LPARAM = 0x0000;
+pub const LVNI_FOCUSED: LPARAM = 0x0001;
+pub const LVNI_SELECTED: LPARAM = 0x0002;
+pub const LVNI_CUT: LPARAM = 0x0004;
+pub const LVNI_DROPHILITED: LPARAM = 0x0008;
+pub const LVNI_STATEMASK: LPARAM = LVNI_FOCUSED | LVNI_SELECTED | LVNI_CUT | LVNI_DROPHILITED;
+pub const LVNI_VISIBLEORDER: LPARAM = 0x0010;
+pub const LVNI_PREVIOUS: LPARAM = 0x0020;
+pub const LVNI_VISIBLEONLY: LPARAM = 0x0040;
+pub const LVNI_SAMEGROUPONLY: LPARAM = 0x0080;
+pub const LVNI_ABOVE: LPARAM = 0x0100;
+pub const LVNI_BELOW: LPARAM = 0x0200;
+pub const LVNI_TOLEFT: LPARAM = 0x0400;
+pub const LVNI_TORIGHT: LPARAM = 0x0800;
+pub const LVNI_DIRECTIONMASK: LPARAM = LVNI_ABOVE | LVNI_BELOW | LVNI_TOLEFT | LVNI_TORIGHT;
+pub const LVM_GETNEXTITEM: UINT = LVM_FIRST + 12;
+pub const LVFI_PARAM: UINT = 0x0001;
+pub const LVFI_STRING: UINT = 0x0002;
+pub const LVFI_SUBSTRING: UINT = 0x0004;
+pub const LVFI_PARTIAL: UINT = 0x0008;
+pub const LVFI_WRAP: UINT = 0x0020;
+pub const LVFI_NEARESTXY: UINT = 0x0040;
+pub type LV_FINDINFOA = LVFINDINFOA;
+pub type LV_FINDINFOW = LVFINDINFOW;
+STRUCT!{struct LVFINDINFOA {
+ flags: UINT,
+ psz: LPCSTR,
+ lParam: LPARAM,
+ pt: POINT,
+ vkDirection: UINT,
+}}
+pub type LPFINDINFOA = *mut LVFINDINFOA;
+STRUCT!{struct LVFINDINFOW {
+ flags: UINT,
+ psz: LPCWSTR,
+ lParam: LPARAM,
+ pt: POINT,
+ vkDirection: UINT,
+}}
+pub type LPFINDINFOW = *mut LVFINDINFOW;
+pub const LVM_FINDITEMA: UINT = LVM_FIRST + 13;
+pub const LVM_FINDITEMW: UINT = LVM_FIRST + 83;
+pub const LVIR_BOUNDS: c_int = 0;
+pub const LVIR_ICON: c_int = 1;
+pub const LVIR_LABEL: c_int = 2;
+pub const LVIR_SELECTBOUNDS: c_int = 3;
+pub const LVM_GETITEMRECT: UINT = LVM_FIRST + 14;
+pub const LVM_SETITEMPOSITION: UINT = LVM_FIRST + 15;
+pub const LVM_GETITEMPOSITION: UINT = LVM_FIRST + 16;
+pub const LVM_GETSTRINGWIDTHA: UINT = LVM_FIRST + 17;
+pub const LVM_GETSTRINGWIDTHW: UINT = LVM_FIRST + 87;
+pub const LVHT_NOWHERE: UINT = 0x00000001;
+pub const LVHT_ONITEMICON: UINT = 0x00000002;
+pub const LVHT_ONITEMLABEL: UINT = 0x00000004;
+pub const LVHT_ONITEMSTATEICON: UINT = 0x00000008;
+pub const LVHT_ONITEM: UINT = LVHT_ONITEMICON | LVHT_ONITEMLABEL | LVHT_ONITEMSTATEICON;
+pub const LVHT_ABOVE: UINT = 0x00000008;
+pub const LVHT_BELOW: UINT = 0x00000010;
+pub const LVHT_TORIGHT: UINT = 0x00000020;
+pub const LVHT_TOLEFT: UINT = 0x00000040;
+pub const LVHT_EX_GROUP_HEADER: UINT = 0x10000000;
+pub const LVHT_EX_GROUP_FOOTER: UINT = 0x20000000;
+pub const LVHT_EX_GROUP_COLLAPSE: UINT = 0x40000000;
+pub const LVHT_EX_GROUP_BACKGROUND: UINT = 0x80000000;
+pub const LVHT_EX_GROUP_STATEICON: UINT = 0x01000000;
+pub const LVHT_EX_GROUP_SUBSETLINK: UINT = 0x02000000;
+pub const LVHT_EX_GROUP: UINT = LVHT_EX_GROUP_BACKGROUND | LVHT_EX_GROUP_COLLAPSE
+ | LVHT_EX_GROUP_FOOTER | LVHT_EX_GROUP_HEADER | LVHT_EX_GROUP_STATEICON
+ | LVHT_EX_GROUP_SUBSETLINK;
+pub const LVHT_EX_ONCONTENTS: UINT = 0x04000000;
+pub const LVHT_EX_FOOTER: UINT = 0x08000000;
+pub type LV_HITTESTINFO = LVHITTESTINFO;
+STRUCT!{struct LVHITTESTINFO {
+ pt: POINT,
+ flags: UINT,
+ iItem: c_int,
+ iSubItem: c_int,
+ iGroup: c_int,
+}}
+pub type LPLVHITTESTINFO = *mut LVHITTESTINFO;
+pub const LVM_HITTEST: UINT = LVM_FIRST + 18;
+pub const LVM_ENSUREVISIBLE: UINT = LVM_FIRST + 19;
+pub const LVM_SCROLL: UINT = LVM_FIRST + 20;
+pub const LVM_REDRAWITEMS: UINT = LVM_FIRST + 21;
+pub const LVA_DEFAULT: WPARAM = 0x0000;
+pub const LVA_ALIGNLEFT: WPARAM = 0x0001;
+pub const LVA_ALIGNTOP: WPARAM = 0x0002;
+pub const LVA_SNAPTOGRID: WPARAM = 0x0005;
+pub const LVM_ARRANGE: UINT = LVM_FIRST + 22;
+pub const LVM_EDITLABELA: UINT = LVM_FIRST + 23;
+pub const LVM_EDITLABELW: UINT = LVM_FIRST + 118;
+pub const LVM_GETEDITCONTROL: UINT = LVM_FIRST + 24;
+pub type LV_COLUMNA = LVCOLUMNA;
+pub type LV_COLUMNW = LVCOLUMNW;
+STRUCT!{struct LVCOLUMNA {
+ mask: UINT,
+ fmt: c_int,
+ cx: c_int,
+ pszText: LPSTR,
+ cchTextMax: c_int,
+ iSubItem: c_int,
+ iImage: c_int,
+ iOrder: c_int,
+ cxMin: c_int,
+ cxDefault: c_int,
+ cxIdeal: c_int,
+}}
+pub type LPLVCOLUMNA = *mut LVCOLUMNA;
+STRUCT!{struct LVCOLUMNW {
+ mask: UINT,
+ fmt: c_int,
+ cx: c_int,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iSubItem: c_int,
+ iImage: c_int,
+ iOrder: c_int,
+ cxMin: c_int,
+ cxDefault: c_int,
+ cxIdeal: c_int,
+}}
+pub type LPLVCOLUMNW = *mut LVCOLUMNW;
+pub const LVCF_FMT: UINT = 0x0001;
+pub const LVCF_WIDTH: UINT = 0x0002;
+pub const LVCF_TEXT: UINT = 0x0004;
+pub const LVCF_SUBITEM: UINT = 0x0008;
+pub const LVCF_IMAGE: UINT = 0x0010;
+pub const LVCF_ORDER: UINT = 0x0020;
+pub const LVCF_MINWIDTH: UINT = 0x0040;
+pub const LVCF_DEFAULTWIDTH: UINT = 0x0080;
+pub const LVCF_IDEALWIDTH: UINT = 0x0100;
+pub const LVCFMT_LEFT: c_int = 0x0000;
+pub const LVCFMT_RIGHT: c_int = 0x0001;
+pub const LVCFMT_CENTER: c_int = 0x0002;
+pub const LVCFMT_JUSTIFYMASK: c_int = 0x0003;
+pub const LVCFMT_IMAGE: c_int = 0x0800;
+pub const LVCFMT_BITMAP_ON_RIGHT: c_int = 0x1000;
+pub const LVCFMT_COL_HAS_IMAGES: c_int = 0x8000;
+pub const LVCFMT_FIXED_WIDTH: c_int = 0x00100;
+pub const LVCFMT_NO_DPI_SCALE: c_int = 0x40000;
+pub const LVCFMT_FIXED_RATIO: c_int = 0x80000;
+pub const LVCFMT_LINE_BREAK: c_int = 0x100000;
+pub const LVCFMT_FILL: c_int = 0x200000;
+pub const LVCFMT_WRAP: c_int = 0x400000;
+pub const LVCFMT_NO_TITLE: c_int = 0x800000;
+pub const LVCFMT_TILE_PLACEMENTMASK: c_int = LVCFMT_LINE_BREAK | LVCFMT_FILL;
+pub const LVCFMT_SPLITBUTTON: c_int = 0x1000000;
+pub const LVM_GETCOLUMNA: UINT = LVM_FIRST + 25;
+pub const LVM_GETCOLUMNW: UINT = LVM_FIRST + 95;
+pub const LVM_SETCOLUMNA: UINT = LVM_FIRST + 26;
+pub const LVM_SETCOLUMNW: UINT = LVM_FIRST + 96;
+pub const LVM_INSERTCOLUMNA: UINT = LVM_FIRST + 27;
+pub const LVM_INSERTCOLUMNW: UINT = LVM_FIRST + 97;
+pub const LVM_DELETECOLUMN: UINT = LVM_FIRST + 28;
+pub const LVM_GETCOLUMNWIDTH: UINT = LVM_FIRST + 29;
+pub const LVSCW_AUTOSIZE: c_int = -1;
+pub const LVSCW_AUTOSIZE_USEHEADER: c_int = -2;
+pub const LVM_SETCOLUMNWIDTH: UINT = LVM_FIRST + 30;
+pub const LVM_GETHEADER: UINT = LVM_FIRST + 31;
+pub const LVM_CREATEDRAGIMAGE: UINT = LVM_FIRST + 33;
+pub const LVM_GETVIEWRECT: UINT = LVM_FIRST + 34;
+pub const LVM_GETTEXTCOLOR: UINT = LVM_FIRST + 35;
+pub const LVM_SETTEXTCOLOR: UINT = LVM_FIRST + 36;
+pub const LVM_GETTEXTBKCOLOR: UINT = LVM_FIRST + 37;
+pub const LVM_SETTEXTBKCOLOR: UINT = LVM_FIRST + 38;
+pub const LVM_GETTOPINDEX: UINT = LVM_FIRST + 39;
+pub const LVM_GETCOUNTPERPAGE: UINT = LVM_FIRST + 40;
+pub const LVM_GETORIGIN: UINT = LVM_FIRST + 41;
+pub const LVM_UPDATE: UINT = LVM_FIRST + 42;
+pub const LVM_SETITEMSTATE: UINT = LVM_FIRST + 43;
+pub const LVM_GETITEMSTATE: UINT = LVM_FIRST + 44;
+pub const LVM_GETITEMTEXTA: UINT = LVM_FIRST + 45;
+pub const LVM_GETITEMTEXTW: UINT = LVM_FIRST + 115;
+pub const LVM_SETITEMTEXTA: UINT = LVM_FIRST + 46;
+pub const LVM_SETITEMTEXTW: UINT = LVM_FIRST + 116;
+pub const LVSICF_NOINVALIDATEALL: LPARAM = 0x00000001;
+pub const LVSICF_NOSCROLL: LPARAM = 0x00000002;
+pub const LVM_SETITEMCOUNT: UINT = LVM_FIRST + 47;
+FN!{stdcall PFNLVCOMPARE(
+ LPARAM,
+ LPARAM,
+ LPARAM,
+) -> c_int}
+pub const LVM_SORTITEMS: UINT = LVM_FIRST + 48;
+pub const LVM_SETITEMPOSITION32: UINT = LVM_FIRST + 49;
+pub const LVM_GETSELECTEDCOUNT: UINT = LVM_FIRST + 50;
+pub const LVM_GETITEMSPACING: UINT = LVM_FIRST + 51;
+pub const LVM_GETISEARCHSTRINGA: UINT = LVM_FIRST + 52;
+pub const LVM_GETISEARCHSTRINGW: UINT = LVM_FIRST + 117;
+pub const LVM_SETICONSPACING: UINT = LVM_FIRST + 53;
+pub const LVM_SETEXTENDEDLISTVIEWSTYLE: UINT = LVM_FIRST + 54;
+pub const LVM_GETEXTENDEDLISTVIEWSTYLE: UINT = LVM_FIRST + 55;
+pub const LVS_EX_GRIDLINES: DWORD = 0x00000001;
+pub const LVS_EX_SUBITEMIMAGES: DWORD = 0x00000002;
+pub const LVS_EX_CHECKBOXES: DWORD = 0x00000004;
+pub const LVS_EX_TRACKSELECT: DWORD = 0x00000008;
+pub const LVS_EX_HEADERDRAGDROP: DWORD = 0x00000010;
+pub const LVS_EX_FULLROWSELECT: DWORD = 0x00000020;
+pub const LVS_EX_ONECLICKACTIVATE: DWORD = 0x00000040;
+pub const LVS_EX_TWOCLICKACTIVATE: DWORD = 0x00000080;
+pub const LVS_EX_FLATSB: DWORD = 0x00000100;
+pub const LVS_EX_REGIONAL: DWORD = 0x00000200;
+pub const LVS_EX_INFOTIP: DWORD = 0x00000400;
+pub const LVS_EX_UNDERLINEHOT: DWORD = 0x00000800;
+pub const LVS_EX_UNDERLINECOLD: DWORD = 0x00001000;
+pub const LVS_EX_MULTIWORKAREAS: DWORD = 0x00002000;
+pub const LVS_EX_LABELTIP: DWORD = 0x00004000;
+pub const LVS_EX_BORDERSELECT: DWORD = 0x00008000;
+pub const LVS_EX_DOUBLEBUFFER: DWORD = 0x00010000;
+pub const LVS_EX_HIDELABELS: DWORD = 0x00020000;
+pub const LVS_EX_SINGLEROW: DWORD = 0x00040000;
+pub const LVS_EX_SNAPTOGRID: DWORD = 0x00080000;
+pub const LVS_EX_SIMPLESELECT: DWORD = 0x00100000;
+pub const LVS_EX_JUSTIFYCOLUMNS: DWORD = 0x00200000;
+pub const LVS_EX_TRANSPARENTBKGND: DWORD = 0x00400000;
+pub const LVS_EX_TRANSPARENTSHADOWTEXT: DWORD = 0x00800000;
+pub const LVS_EX_AUTOAUTOARRANGE: DWORD = 0x01000000;
+pub const LVS_EX_HEADERINALLVIEWS: DWORD = 0x02000000;
+pub const LVS_EX_AUTOCHECKSELECT: DWORD = 0x08000000;
+pub const LVS_EX_AUTOSIZECOLUMNS: DWORD = 0x10000000;
+pub const LVS_EX_COLUMNSNAPPOINTS: DWORD = 0x40000000;
+pub const LVS_EX_COLUMNOVERFLOW: DWORD = 0x80000000;
+pub const LVM_GETSUBITEMRECT: UINT = LVM_FIRST + 56;
+pub const LVM_SUBITEMHITTEST: UINT = LVM_FIRST + 57;
+pub const LVM_SETCOLUMNORDERARRAY: UINT = LVM_FIRST + 58;
+pub const LVM_GETCOLUMNORDERARRAY: UINT = LVM_FIRST + 59;
+pub const LVM_SETHOTITEM: UINT = LVM_FIRST + 60;
+pub const LVM_GETHOTITEM: UINT = LVM_FIRST + 61;
+pub const LVM_SETHOTCURSOR: UINT = LVM_FIRST + 62;
+pub const LVM_GETHOTCURSOR: UINT = LVM_FIRST + 63;
+pub const LVM_APPROXIMATEVIEWRECT: UINT = LVM_FIRST + 64;
+pub const LV_MAX_WORKAREAS: WPARAM = 16;
+pub const LVM_SETWORKAREAS: UINT = LVM_FIRST + 65;
+pub const LVM_GETWORKAREAS: UINT = LVM_FIRST + 70;
+pub const LVM_GETNUMBEROFWORKAREAS: UINT = LVM_FIRST + 73;
+pub const LVM_GETSELECTIONMARK: UINT = LVM_FIRST + 66;
+pub const LVM_SETSELECTIONMARK: UINT = LVM_FIRST + 67;
+pub const LVM_SETHOVERTIME: UINT = LVM_FIRST + 71;
+pub const LVM_GETHOVERTIME: UINT = LVM_FIRST + 72;
+pub const LVM_SETTOOLTIPS: UINT = LVM_FIRST + 74;
+pub const LVM_GETTOOLTIPS: UINT = LVM_FIRST + 78;
+pub const LVM_SORTITEMSEX: UINT = LVM_FIRST + 81;
+STRUCT!{struct LVBKIMAGEA {
+ ulFlags: ULONG,
+ hbm: HBITMAP,
+ pszImage: LPSTR,
+ cchImageMax: UINT,
+ xOffsetPercent: c_int,
+ yOffsetPercent: c_int,
+}}
+pub type LPLVBKIMAGEA = *mut LVBKIMAGEA;
+STRUCT!{struct LVBKIMAGEW {
+ ulFlags: ULONG,
+ hbm: HBITMAP,
+ pszImage: LPWSTR,
+ cchImageMax: UINT,
+ xOffsetPercent: c_int,
+ yOffsetPercent: c_int,
+}}
+pub type LPLVBKIMAGEW = *mut LVBKIMAGEW;
+pub const LVBKIF_SOURCE_NONE: ULONG = 0x00000000;
+pub const LVBKIF_SOURCE_HBITMAP: ULONG = 0x00000001;
+pub const LVBKIF_SOURCE_URL: ULONG = 0x00000002;
+pub const LVBKIF_SOURCE_MASK: ULONG = 0x00000003;
+pub const LVBKIF_STYLE_NORMAL: ULONG = 0x00000000;
+pub const LVBKIF_STYLE_TILE: ULONG = 0x00000010;
+pub const LVBKIF_STYLE_MASK: ULONG = 0x00000010;
+pub const LVBKIF_FLAG_TILEOFFSET: ULONG = 0x00000100;
+pub const LVBKIF_TYPE_WATERMARK: ULONG = 0x10000000;
+pub const LVBKIF_FLAG_ALPHABLEND: ULONG = 0x20000000;
+pub const LVM_SETBKIMAGEA: UINT = LVM_FIRST + 68;
+pub const LVM_SETBKIMAGEW: UINT = LVM_FIRST + 138;
+pub const LVM_GETBKIMAGEA: UINT = LVM_FIRST + 69;
+pub const LVM_GETBKIMAGEW: UINT = LVM_FIRST + 139;
+pub const LVM_SETSELECTEDCOLUMN: UINT = LVM_FIRST + 140;
+pub const LV_VIEW_ICON: DWORD = 0x0000;
+pub const LV_VIEW_DETAILS: DWORD = 0x0001;
+pub const LV_VIEW_SMALLICON: DWORD = 0x0002;
+pub const LV_VIEW_LIST: DWORD = 0x0003;
+pub const LV_VIEW_TILE: DWORD = 0x0004;
+pub const LV_VIEW_MAX: DWORD = 0x0004;
+pub const LVM_SETVIEW: UINT = LVM_FIRST + 142;
+pub const LVM_GETVIEW: UINT = LVM_FIRST + 143;
+pub const LVGF_NONE: UINT = 0x00000000;
+pub const LVGF_HEADER: UINT = 0x00000001;
+pub const LVGF_FOOTER: UINT = 0x00000002;
+pub const LVGF_STATE: UINT = 0x00000004;
+pub const LVGF_ALIGN: UINT = 0x00000008;
+pub const LVGF_GROUPID: UINT = 0x00000010;
+pub const LVGF_SUBTITLE: UINT = 0x00000100;
+pub const LVGF_TASK: UINT = 0x00000200;
+pub const LVGF_DESCRIPTIONTOP: UINT = 0x00000400;
+pub const LVGF_DESCRIPTIONBOTTOM: UINT = 0x00000800;
+pub const LVGF_TITLEIMAGE: UINT = 0x00001000;
+pub const LVGF_EXTENDEDIMAGE: UINT = 0x00002000;
+pub const LVGF_ITEMS: UINT = 0x00004000;
+pub const LVGF_SUBSET: UINT = 0x00008000;
+pub const LVGF_SUBSETITEMS: UINT = 0x00010000;
+pub const LVGS_NORMAL: UINT = 0x00000000;
+pub const LVGS_COLLAPSED: UINT = 0x00000001;
+pub const LVGS_HIDDEN: UINT = 0x00000002;
+pub const LVGS_NOHEADER: UINT = 0x00000004;
+pub const LVGS_COLLAPSIBLE: UINT = 0x00000008;
+pub const LVGS_FOCUSED: UINT = 0x00000010;
+pub const LVGS_SELECTED: UINT = 0x00000020;
+pub const LVGS_SUBSETED: UINT = 0x00000040;
+pub const LVGS_SUBSETLINKFOCUSED: UINT = 0x00000080;
+pub const LVGA_HEADER_LEFT: UINT = 0x00000001;
+pub const LVGA_HEADER_CENTER: UINT = 0x00000002;
+pub const LVGA_HEADER_RIGHT: UINT = 0x00000004;
+pub const LVGA_FOOTER_LEFT: UINT = 0x00000008;
+pub const LVGA_FOOTER_CENTER: UINT = 0x00000010;
+pub const LVGA_FOOTER_RIGHT: UINT = 0x00000020;
+STRUCT!{struct LVGROUP {
+ cbSize: UINT,
+ mask: UINT,
+ pszHeader: LPWSTR,
+ cchHeader: c_int,
+ pszFooter: LPWSTR,
+ cchFooter: c_int,
+ iGroupId: c_int,
+ stateMask: UINT,
+ state: UINT,
+ uAlign: UINT,
+ pszSubtitle: LPWSTR,
+ cchSubtitle: UINT,
+ pszTask: LPWSTR,
+ cchTask: UINT,
+ pszDescriptionTop: LPWSTR,
+ cchDescriptionTop: UINT,
+ pszDescriptionBottom: LPWSTR,
+ cchDescriptionBottom: UINT,
+ iTitleImage: c_int,
+ iExtendedImage: c_int,
+ iFirstItem: c_int,
+ cItems: UINT,
+ pszSubsetTitle: LPWSTR,
+ cchSubsetTitle: UINT,
+}}
+pub type PLVGROUP = *mut LVGROUP;
+pub const LVM_INSERTGROUP: UINT = LVM_FIRST + 145;
+pub const LVM_SETGROUPINFO: UINT = LVM_FIRST + 147;
+pub const LVM_GETGROUPINFO: UINT = LVM_FIRST + 149;
+pub const LVM_REMOVEGROUP: UINT = LVM_FIRST + 150;
+pub const LVM_MOVEGROUP: UINT = LVM_FIRST + 151;
+pub const LVM_GETGROUPCOUNT: UINT = LVM_FIRST + 152;
+pub const LVM_GETGROUPINFOBYINDEX: UINT = LVM_FIRST + 153;
+pub const LVM_MOVEITEMTOGROUP: UINT = LVM_FIRST + 154;
+pub const LVGGR_GROUP: LPARAM = 0;
+pub const LVGGR_HEADER: LPARAM = 1;
+pub const LVGGR_LABEL: LPARAM = 2;
+pub const LVGGR_SUBSETLINK: LPARAM = 3;
+pub const LVM_GETGROUPRECT: UINT = LVM_FIRST + 98;
+pub const LVGMF_NONE: UINT = 0x00000000;
+pub const LVGMF_BORDERSIZE: UINT = 0x00000001;
+pub const LVGMF_BORDERCOLOR: UINT = 0x00000002;
+pub const LVGMF_TEXTCOLOR: UINT = 0x00000004;
+STRUCT!{struct LVGROUPMETRICS {
+ cbSize: UINT,
+ mask: UINT,
+ Left: UINT,
+ Top: UINT,
+ Right: UINT,
+ Bottom: UINT,
+ crLeft: COLORREF,
+ crTop: COLORREF,
+ crRight: COLORREF,
+ crBottom: COLORREF,
+ crHeader: COLORREF,
+ crFooter: COLORREF,
+}}
+pub type PLVGROUPMETRICS = *mut LVGROUPMETRICS;
+pub const LVM_SETGROUPMETRICS: UINT = LVM_FIRST + 155;
+pub const LVM_GETGROUPMETRICS: UINT = LVM_FIRST + 156;
+pub const LVM_ENABLEGROUPVIEW: UINT = LVM_FIRST + 157;
+FN!{stdcall PFNLVGROUPCOMPARE(
+ c_int,
+ c_int,
+ *mut c_void,
+) -> c_int}
+pub const LVM_SORTGROUPS: UINT = LVM_FIRST + 158;
+STRUCT!{struct LVINSERTGROUPSORTED {
+ pfnGroupCompare: PFNLVGROUPCOMPARE,
+ pvData: *mut c_void,
+ lvGroup: LVGROUP,
+}}
+pub type PLVINSERTGROUPSORTED = *mut LVINSERTGROUPSORTED;
+pub const LVM_INSERTGROUPSORTED: UINT = LVM_FIRST + 159;
+pub const LVM_REMOVEALLGROUPS: UINT = LVM_FIRST + 160;
+pub const LVM_HASGROUP: UINT = LVM_FIRST + 161;
+pub const LVM_GETGROUPSTATE: UINT = LVM_FIRST + 92;
+pub const LVM_GETFOCUSEDGROUP: UINT = LVM_FIRST + 93;
+pub const LVTVIF_AUTOSIZE: DWORD = 0x00000000;
+pub const LVTVIF_FIXEDWIDTH: DWORD = 0x00000001;
+pub const LVTVIF_FIXEDHEIGHT: DWORD = 0x00000002;
+pub const LVTVIF_FIXEDSIZE: DWORD = 0x00000003;
+pub const LVTVIF_EXTENDED: DWORD = 0x00000004;
+pub const LVTVIM_TILESIZE: DWORD = 0x00000001;
+pub const LVTVIM_COLUMNS: DWORD = 0x00000002;
+pub const LVTVIM_LABELMARGIN: DWORD = 0x00000004;
+STRUCT!{struct LVTILEVIEWINFO {
+ cbSize: UINT,
+ dwMask: DWORD,
+ dwFlags: DWORD,
+ sizeTile: SIZE,
+ cLines: c_int,
+ rcLabelMargin: RECT,
+}}
+pub type PLVTILEVIEWINFO = *mut LVTILEVIEWINFO;
+STRUCT!{struct LVTILEINFO {
+ cbSize: UINT,
+ iItem: c_int,
+ cColumns: UINT,
+ puColumns: PUINT,
+ piColFmt: *mut c_int,
+}}
+pub type PLVTILEINFO = *mut LVTILEINFO;
+pub const LVM_SETTILEVIEWINFO: UINT = LVM_FIRST + 162;
+pub const LVM_GETTILEVIEWINFO: UINT = LVM_FIRST + 163;
+pub const LVM_SETTILEINFO: UINT = LVM_FIRST + 164;
+pub const LVM_GETTILEINFO: UINT = LVM_FIRST + 165;
+STRUCT!{struct LVINSERTMARK {
+ cbSize: UINT,
+ dwFlags: DWORD,
+ iItem: c_int,
+ dwReserved: DWORD,
+}}
+pub type LPLVINSERTMARK = *mut LVINSERTMARK;
+pub const LVIM_AFTER: DWORD = 0x00000001;
+pub const LVM_SETINSERTMARK: UINT = LVM_FIRST + 166;
+pub const LVM_GETINSERTMARK: UINT = LVM_FIRST + 167;
+pub const LVM_INSERTMARKHITTEST: UINT = LVM_FIRST + 168;
+pub const LVM_GETINSERTMARKRECT: UINT = LVM_FIRST + 169;
+pub const LVM_SETINSERTMARKCOLOR: UINT = LVM_FIRST + 170;
+pub const LVM_GETINSERTMARKCOLOR: UINT = LVM_FIRST + 171;
+STRUCT!{struct LVSETINFOTIP {
+ cbSize: UINT,
+ dwFlags: DWORD,
+ pszText: LPWSTR,
+ iItem: c_int,
+ iSubItem: c_int,
+}}
+pub type PLVSETINFOTIP = *mut LVSETINFOTIP;
+pub const LVM_SETINFOTIP: UINT = LVM_FIRST + 173;
+pub const LVM_GETSELECTEDCOLUMN: UINT = LVM_FIRST + 174;
+pub const LVM_ISGROUPVIEWENABLED: UINT = LVM_FIRST + 175;
+pub const LVM_GETOUTLINECOLOR: UINT = LVM_FIRST + 176;
+pub const LVM_SETOUTLINECOLOR: UINT = LVM_FIRST + 177;
+pub const LVM_CANCELEDITLABEL: UINT = LVM_FIRST + 179;
+pub const LVM_MAPINDEXTOID: UINT = LVM_FIRST + 180;
+pub const LVM_MAPIDTOINDEX: UINT = LVM_FIRST + 181;
+pub const LVM_ISITEMVISIBLE: UINT = LVM_FIRST + 182;
+pub const LVM_GETEMPTYTEXT: UINT = LVM_FIRST + 204;
+pub const LVM_GETFOOTERRECT: UINT = LVM_FIRST + 205;
+pub const LVFF_ITEMCOUNT: UINT = 0x00000001;
+STRUCT!{struct LVFOOTERINFO {
+ mask: UINT,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ cItems: UINT,
+}}
+pub type LPLVFOOTERINFO = *mut LVFOOTERINFO;
+pub const LVM_GETFOOTERINFO: UINT = LVM_FIRST + 206;
+pub const LVM_GETFOOTERITEMRECT: UINT = LVM_FIRST + 207;
+pub const LVFIF_TEXT: UINT = 0x00000001;
+pub const LVFIF_STATE: UINT = 0x00000002;
+pub const LVFIS_FOCUSED: UINT = 0x0001;
+STRUCT!{struct LVFOOTERITEM {
+ mask: UINT,
+ iItem: c_int,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ state: UINT,
+ stateMask: UINT,
+}}
+pub type LPLVFOOTERITEM = *mut LVFOOTERITEM;
+pub const LVM_GETFOOTERITEM: UINT = LVM_FIRST + 208;
+STRUCT!{struct LVITEMINDEX {
+ iItem: c_int,
+ iGroup: c_int,
+}}
+pub type PLVITEMINDEX = *mut LVITEMINDEX;
+pub const LVM_GETITEMINDEXRECT: UINT = LVM_FIRST + 209;
+pub const LVM_SETITEMINDEXSTATE: UINT = LVM_FIRST + 210;
+pub const LVM_GETNEXTITEMINDEX: UINT = LVM_FIRST + 211;
+pub type LPNM_LISTVIEW = LPNMLISTVIEW;
+pub type NM_LISTVIEW = NMLISTVIEW;
+STRUCT!{struct NMLISTVIEW {
+ hdr: NMHDR,
+ iItem: c_int,
+ iSubItem: c_int,
+ uNewState: UINT,
+ uOldState: UINT,
+ uChanged: UINT,
+ ptAction: POINT,
+ lParam: LPARAM,
+}}
+pub type LPNMLISTVIEW = *mut NMLISTVIEW;
+STRUCT!{struct NMITEMACTIVATE {
+ hdr: NMHDR,
+ iItem: c_int,
+ iSubItem: c_int,
+ uNewState: UINT,
+ uOldState: UINT,
+ uChanged: UINT,
+ ptAction: POINT,
+ lParam: LPARAM,
+ uKeyFlags: UINT,
+}}
+pub type LPNMITEMACTIVATE = *mut NMITEMACTIVATE;
+pub const LVKF_ALT: UINT = 0x0001;
+pub const LVKF_CONTROL: UINT = 0x0002;
+pub const LVKF_SHIFT: UINT = 0x0004;
+STRUCT!{struct NMLVCUSTOMDRAW {
+ nmcd: NMCUSTOMDRAW,
+ clrText: COLORREF,
+ clrTextBk: COLORREF,
+ iSubItem: c_int,
+ dwItemType: DWORD,
+ clrFace: COLORREF,
+ iIconEffect: c_int,
+ iIconPhase: c_int,
+ iPartId: c_int,
+ iStateId: c_int,
+ rcText: RECT,
+ uAlign: UINT,
+}}
+pub type LPNMLVCUSTOMDRAW = *mut NMLVCUSTOMDRAW;
+pub const LVCDI_ITEM: DWORD = 0x00000000;
+pub const LVCDI_GROUP: DWORD = 0x00000001;
+pub const LVCDI_ITEMSLIST: DWORD = 0x00000002;
+pub const LVCDRF_NOSELECT: LRESULT = 0x00010000;
+pub const LVCDRF_NOGROUPFRAME: LRESULT = 0x00020000;
+STRUCT!{struct NMLVCACHEHINT {
+ hdr: NMHDR,
+ iFrom: c_int,
+ iTo: c_int,
+}}
+pub type LPNMLVCACHEHINT = *mut NMLVCACHEHINT;
+pub type LPNM_CACHEHINT = LPNMLVCACHEHINT;
+pub type PNM_CACHEHINT = LPNMLVCACHEHINT;
+pub type NM_CACHEHINT = NMLVCACHEHINT;
+STRUCT!{struct NMLVFINDITEMA {
+ hdr: NMHDR,
+ iStart: c_int,
+ lvfi: LVFINDINFOA,
+}}
+pub type LPNMLVFINDITEMA = *mut NMLVFINDITEMA;
+STRUCT!{struct NMLVFINDITEMW {
+ hdr: NMHDR,
+ iStart: c_int,
+ lvfi: LVFINDINFOW,
+}}
+pub type LPNMLVFINDITEMW = *mut NMLVFINDITEMW;
+pub type PNM_FINDITEMA = LPNMLVFINDITEMA;
+pub type LPNM_FINDITEMA = LPNMLVFINDITEMA;
+pub type NM_FINDITEMA = NMLVFINDITEMA;
+pub type PNM_FINDITEMW = LPNMLVFINDITEMW;
+pub type LPNM_FINDITEMW = LPNMLVFINDITEMW;
+pub type NM_FINDITEMW = NMLVFINDITEMW;
+STRUCT!{struct NMLVODSTATECHANGE {
+ hdr: NMHDR,
+ iFrom: c_int,
+ iTo: c_int,
+ uNewState: UINT,
+ uOldState: UINT,
+}}
+pub type LPNMLVODSTATECHANGE = *mut NMLVODSTATECHANGE;
+pub type PNM_ODSTATECHANGE = LPNMLVODSTATECHANGE;
+pub type LPNM_ODSTATECHANGE = LPNMLVODSTATECHANGE;
+pub type NM_ODSTATECHANGE = NMLVODSTATECHANGE;
+pub const LVN_ITEMCHANGING: UINT = LVN_FIRST - 0;
+pub const LVN_ITEMCHANGED: UINT = LVN_FIRST - 1;
+pub const LVN_INSERTITEM: UINT = LVN_FIRST - 2;
+pub const LVN_DELETEITEM: UINT = LVN_FIRST - 3;
+pub const LVN_DELETEALLITEMS: UINT = LVN_FIRST - 4;
+pub const LVN_BEGINLABELEDITA: UINT = LVN_FIRST - 5;
+pub const LVN_BEGINLABELEDITW: UINT = LVN_FIRST - 75;
+pub const LVN_ENDLABELEDITA: UINT = LVN_FIRST - 6;
+pub const LVN_ENDLABELEDITW: UINT = LVN_FIRST - 76;
+pub const LVN_COLUMNCLICK: UINT = LVN_FIRST - 8;
+pub const LVN_BEGINDRAG: UINT = LVN_FIRST - 9;
+pub const LVN_BEGINRDRAG: UINT = LVN_FIRST - 11;
+pub const LVN_ODCACHEHINT: UINT = LVN_FIRST - 13;
+pub const LVN_ODFINDITEMA: UINT = LVN_FIRST - 52;
+pub const LVN_ODFINDITEMW: UINT = LVN_FIRST - 79;
+pub const LVN_ITEMACTIVATE: UINT = LVN_FIRST - 14;
+pub const LVN_ODSTATECHANGED: UINT = LVN_FIRST - 15;
+pub const LVN_HOTTRACK: UINT = LVN_FIRST - 21;
+pub const LVN_GETDISPINFOA: UINT = LVN_FIRST - 50;
+pub const LVN_GETDISPINFOW: UINT = LVN_FIRST - 77;
+pub const LVN_SETDISPINFOA: UINT = LVN_FIRST - 51;
+pub const LVN_SETDISPINFOW: UINT = LVN_FIRST - 78;
+pub const LVIF_DI_SETITEM: UINT = 0x1000;
+pub type LV_DISPINFOA = NMLVDISPINFOA;
+pub type LV_DISPINFOW = NMLVDISPINFOW;
+STRUCT!{struct NMLVDISPINFOA {
+ hdr: NMHDR,
+ item: LVITEMA,
+}}
+pub type LPNMLVDISPINFOA = *mut NMLVDISPINFOA;
+STRUCT!{struct NMLVDISPINFOW {
+ hdr: NMHDR,
+ item: LVITEMW,
+}}
+pub type LPNMLVDISPINFOW = *mut NMLVDISPINFOW;
+pub const LVN_KEYDOWN: UINT = LVN_FIRST - 55;
+pub type LV_KEYDOWN = NMLVKEYDOWN;
+STRUCT!{#[repr(packed)] struct NMLVKEYDOWN {
+ hdr: NMHDR,
+ wVKey: WORD,
+ flags: UINT,
+}}
+pub type LPNMLVKEYDOWN = *mut NMLVKEYDOWN;
+pub const LVN_MARQUEEBEGIN: UINT = LVN_FIRST - 56;
+STRUCT!{struct NMLVLINK {
+ hdr: NMHDR,
+ link: LITEM,
+ iItem: c_int,
+ iSubItem: c_int,
+}}
+pub type PNMLVLINK = *mut NMLVLINK;
+STRUCT!{struct NMLVGETINFOTIPA {
+ hdr: NMHDR,
+ dwFlags: DWORD,
+ pszText: LPSTR,
+ cchTextMax: c_int,
+ iItem: c_int,
+ iSubItem: c_int,
+ lParam: LPARAM,
+}}
+pub type LPNMLVGETINFOTIPA = *mut NMLVGETINFOTIPA;
+STRUCT!{struct NMLVGETINFOTIPW {
+ hdr: NMHDR,
+ dwFlags: DWORD,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iItem: c_int,
+ iSubItem: c_int,
+ lParam: LPARAM,
+}}
+pub type LPNMLVGETINFOTIPW = *mut NMLVGETINFOTIPW;
+pub const LVGIT_UNFOLDED: DWORD = 0x0001;
+pub const LVN_GETINFOTIPA: UINT = LVN_FIRST - 57;
+pub const LVN_GETINFOTIPW: UINT = LVN_FIRST - 58;
+pub const LVNSCH_DEFAULT: LPARAM = -1;
+pub const LVNSCH_ERROR: LPARAM = -2;
+pub const LVNSCH_IGNORE: LPARAM = -3;
+pub const LVN_INCREMENTALSEARCHA: UINT = LVN_FIRST - 62;
+pub const LVN_INCREMENTALSEARCHW: UINT = LVN_FIRST - 63;
+pub const LVN_COLUMNDROPDOWN: UINT = LVN_FIRST - 64;
+pub const LVN_COLUMNOVERFLOWCLICK: UINT = LVN_FIRST - 66;
+STRUCT!{struct NMLVSCROLL {
+ hdr: NMHDR,
+ dx: c_int,
+ dy: c_int,
+}}
+pub type LPNMLVSCROLL = *mut NMLVSCROLL;
+pub const LVN_BEGINSCROLL: UINT = LVN_FIRST - 80;
+pub const LVN_ENDSCROLL: UINT = LVN_FIRST - 81;
+pub const LVN_LINKCLICK: UINT = LVN_FIRST - 84;
+pub const EMF_CENTERED: DWORD = 0x00000001;
+STRUCT!{struct NMLVEMPTYMARKUP {
+ hdr: NMHDR,
+ dwFlags: DWORD,
+ szMarkup: [WCHAR; L_MAX_URL_LENGTH],
+}}
+pub const LVN_GETEMPTYMARKUP: UINT = LVN_FIRST - 87;
+pub const WC_TREEVIEW: &'static str = "SysTreeView32";
+pub const TVS_HASBUTTONS: DWORD = 0x0001;
+pub const TVS_HASLINES: DWORD = 0x0002;
+pub const TVS_LINESATROOT: DWORD = 0x0004;
+pub const TVS_EDITLABELS: DWORD = 0x0008;
+pub const TVS_DISABLEDRAGDROP: DWORD = 0x0010;
+pub const TVS_SHOWSELALWAYS: DWORD = 0x0020;
+pub const TVS_RTLREADING: DWORD = 0x0040;
+pub const TVS_NOTOOLTIPS: DWORD = 0x0080;
+pub const TVS_CHECKBOXES: DWORD = 0x0100;
+pub const TVS_TRACKSELECT: DWORD = 0x0200;
+pub const TVS_SINGLEEXPAND: DWORD = 0x0400;
+pub const TVS_INFOTIP: DWORD = 0x0800;
+pub const TVS_FULLROWSELECT: DWORD = 0x1000;
+pub const TVS_NOSCROLL: DWORD = 0x2000;
+pub const TVS_NONEVENHEIGHT: DWORD = 0x4000;
+pub const TVS_NOHSCROLL: DWORD = 0x8000;
+pub const TVS_EX_NOSINGLECOLLAPSE: DWORD = 0x0001;
+pub const TVS_EX_MULTISELECT: DWORD = 0x0002;
+pub const TVS_EX_DOUBLEBUFFER: DWORD = 0x0004;
+pub const TVS_EX_NOINDENTSTATE: DWORD = 0x0008;
+pub const TVS_EX_RICHTOOLTIP: DWORD = 0x0010;
+pub const TVS_EX_AUTOHSCROLL: DWORD = 0x0020;
+pub const TVS_EX_FADEINOUTEXPANDOS: DWORD = 0x0040;
+pub const TVS_EX_PARTIALCHECKBOXES: DWORD = 0x0080;
+pub const TVS_EX_EXCLUSIONCHECKBOXES: DWORD = 0x0100;
+pub const TVS_EX_DIMMEDCHECKBOXES: DWORD = 0x0200;
+pub const TVS_EX_DRAWIMAGEASYNC: DWORD = 0x0400;
+pub enum TREEITEM {}
+pub type HTREEITEM = *mut TREEITEM;
+pub const TVIF_TEXT: UINT = 0x0001;
+pub const TVIF_IMAGE: UINT = 0x0002;
+pub const TVIF_PARAM: UINT = 0x0004;
+pub const TVIF_STATE: UINT = 0x0008;
+pub const TVIF_HANDLE: UINT = 0x0010;
+pub const TVIF_SELECTEDIMAGE: UINT = 0x0020;
+pub const TVIF_CHILDREN: UINT = 0x0040;
+pub const TVIF_INTEGRAL: UINT = 0x0080;
+pub const TVIF_STATEEX: UINT = 0x0100;
+pub const TVIF_EXPANDEDIMAGE: UINT = 0x0200;
+pub const TVIS_SELECTED: UINT = 0x0002;
+pub const TVIS_CUT: UINT = 0x0004;
+pub const TVIS_DROPHILITED: UINT = 0x0008;
+pub const TVIS_BOLD: UINT = 0x0010;
+pub const TVIS_EXPANDED: UINT = 0x0020;
+pub const TVIS_EXPANDEDONCE: UINT = 0x0040;
+pub const TVIS_EXPANDPARTIAL: UINT = 0x0080;
+pub const TVIS_OVERLAYMASK: UINT = 0x0F00;
+pub const TVIS_STATEIMAGEMASK: UINT = 0xF000;
+pub const TVIS_USERMASK: UINT = 0xF000;
+pub const TVIS_EX_FLAT: UINT = 0x0001;
+pub const TVIS_EX_DISABLED: UINT = 0x0002;
+pub const TVIS_EX_ALL: UINT = 0x0002;
+STRUCT!{struct NMTVSTATEIMAGECHANGING {
+ hdr: NMHDR,
+ hti: HTREEITEM,
+ iOldStateImageIndex: c_int,
+ iNewStateImageIndex: c_int,
+}}
+pub type LPNMTVSTATEIMAGECHANGING = *mut NMTVSTATEIMAGECHANGING;
+pub const I_CHILDRENCALLBACK: c_int = -1;
+pub const I_CHILDRENAUTO: c_int = -2;
+pub type LPTV_ITEMW = LPTVITEMW;
+pub type LPTV_ITEMA = LPTVITEMA;
+pub type TV_ITEMW = TVITEMW;
+pub type TV_ITEMA = TVITEMA;
+STRUCT!{struct TVITEMA {
+ mask: UINT,
+ hItem: HTREEITEM,
+ state: UINT,
+ stateMask: UINT,
+ pszText: LPSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ iSelectedImage: c_int,
+ cChildren: c_int,
+ lParam: LPARAM,
+}}
+pub type LPTVITEMA = *mut TVITEMA;
+STRUCT!{struct TVITEMW {
+ mask: UINT,
+ hItem: HTREEITEM,
+ state: UINT,
+ stateMask: UINT,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ iSelectedImage: c_int,
+ cChildren: c_int,
+ lParam: LPARAM,
+}}
+pub type LPTVITEMW = *mut TVITEMW;
+STRUCT!{struct TVITEMEXA {
+ mask: UINT,
+ hItem: HTREEITEM,
+ state: UINT,
+ stateMask: UINT,
+ pszText: LPSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ iSelectedImage: c_int,
+ cChildren: c_int,
+ lParam: LPARAM,
+ iIntegral: c_int,
+ uStateEx: UINT,
+ hwnd: HWND,
+ iExpandedImage: c_int,
+ iReserved: c_int,
+}}
+pub type LPTVITEMEXA = *mut TVITEMEXA;
+STRUCT!{struct TVITEMEXW {
+ mask: UINT,
+ hItem: HTREEITEM,
+ state: UINT,
+ stateMask: UINT,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ iSelectedImage: c_int,
+ cChildren: c_int,
+ lParam: LPARAM,
+ iIntegral: c_int,
+ uStateEx: UINT,
+ hwnd: HWND,
+ iExpandedImage: c_int,
+ iReserved: c_int,
+}}
+pub type LPTVITEMEXW = *mut TVITEMEXW;
+pub const TVI_ROOT: HTREEITEM = -0x10000isize as HTREEITEM;
+pub const TVI_FIRST: HTREEITEM = -0x0FFFFisize as HTREEITEM;
+pub const TVI_LAST: HTREEITEM = -0x0FFFEisize as HTREEITEM;
+pub const TVI_SORT: HTREEITEM = -0x0FFFDisize as HTREEITEM;
+pub type LPTV_INSERTSTRUCTA = LPTVINSERTSTRUCTA;
+pub type LPTV_INSERTSTRUCTW = LPTVINSERTSTRUCTW;
+pub type TV_INSERTSTRUCTA = TVINSERTSTRUCTA;
+pub type TV_INSERTSTRUCTW = TVINSERTSTRUCTW;
+UNION!{union TVINSERTSTRUCTA_u {
+ [u32; 15] [u64; 10],
+ itemex itemex_mut: TVITEMEXA,
+ item item_mut: TV_ITEMA,
+}}
+STRUCT!{struct TVINSERTSTRUCTA {
+ hParent: HTREEITEM,
+ hInsertAfter: HTREEITEM,
+ u: TVINSERTSTRUCTA_u,
+}}
+pub type LPTVINSERTSTRUCTA = *mut TVINSERTSTRUCTA;
+UNION!{union TVINSERTSTRUCTW_u {
+ [u32; 15] [u64; 10],
+ itemex itemex_mut: TVITEMEXW,
+ item item_mut: TV_ITEMW,
+}}
+STRUCT!{struct TVINSERTSTRUCTW {
+ hParent: HTREEITEM,
+ hInsertAfter: HTREEITEM,
+ u: TVINSERTSTRUCTW_u,
+}}
+pub type LPTVINSERTSTRUCTW = *mut TVINSERTSTRUCTW;
+pub const TVM_INSERTITEMA: UINT = TV_FIRST + 0;
+pub const TVM_INSERTITEMW: UINT = TV_FIRST + 50;
+pub const TVM_DELETEITEM: UINT = TV_FIRST + 1;
+pub const TVM_EXPAND: UINT = TV_FIRST + 2;
+pub const TVE_COLLAPSE: WPARAM = 0x0001;
+pub const TVE_EXPAND: WPARAM = 0x0002;
+pub const TVE_TOGGLE: WPARAM = 0x0003;
+pub const TVE_EXPANDPARTIAL: WPARAM = 0x4000;
+pub const TVE_COLLAPSERESET: WPARAM = 0x8000;
+pub const TVM_GETITEMRECT: UINT = TV_FIRST + 4;
+pub const TVM_GETCOUNT: UINT = TV_FIRST + 5;
+pub const TVM_GETINDENT: UINT = TV_FIRST + 6;
+pub const TVM_SETINDENT: UINT = TV_FIRST + 7;
+pub const TVM_GETIMAGELIST: UINT = TV_FIRST + 8;
+pub const TVSIL_NORMAL: WPARAM = 0;
+pub const TVSIL_STATE: WPARAM = 2;
+pub const TVM_SETIMAGELIST: UINT = TV_FIRST + 9;
+pub const TVM_GETNEXTITEM: UINT = TV_FIRST + 10;
+pub const TVGN_ROOT: WPARAM = 0x0000;
+pub const TVGN_NEXT: WPARAM = 0x0001;
+pub const TVGN_PREVIOUS: WPARAM = 0x0002;
+pub const TVGN_PARENT: WPARAM = 0x0003;
+pub const TVGN_CHILD: WPARAM = 0x0004;
+pub const TVGN_FIRSTVISIBLE: WPARAM = 0x0005;
+pub const TVGN_NEXTVISIBLE: WPARAM = 0x0006;
+pub const TVGN_PREVIOUSVISIBLE: WPARAM = 0x0007;
+pub const TVGN_DROPHILITE: WPARAM = 0x0008;
+pub const TVGN_CARET: WPARAM = 0x0009;
+pub const TVGN_LASTVISIBLE: WPARAM = 0x000A;
+pub const TVGN_NEXTSELECTED: WPARAM = 0x000B;
+pub const TVSI_NOSINGLEEXPAND: WPARAM = 0x8000;
+pub const TVM_SELECTITEM: UINT = TV_FIRST + 11;
+pub const TVM_GETITEMA: UINT = TV_FIRST + 12;
+pub const TVM_GETITEMW: UINT = TV_FIRST + 62;
+pub const TVM_SETITEMA: UINT = TV_FIRST + 13;
+pub const TVM_SETITEMW: UINT = TV_FIRST + 63;
+pub const TVM_EDITLABELA: UINT = TV_FIRST + 14;
+pub const TVM_EDITLABELW: UINT = TV_FIRST + 65;
+pub const TVM_GETEDITCONTROL: UINT = TV_FIRST + 15;
+pub const TVM_GETVISIBLECOUNT: UINT = TV_FIRST + 16;
+pub const TVM_HITTEST: UINT = TV_FIRST + 17;
+pub type LPTV_HITTESTINFO = LPTVHITTESTINFO;
+pub type TV_HITTESTINFO = TVHITTESTINFO;
+STRUCT!{struct TVHITTESTINFO {
+ pt: POINT,
+ flags: UINT,
+ hItem: HTREEITEM,
+}}
+pub type LPTVHITTESTINFO = *mut TVHITTESTINFO;
+pub const TVHT_NOWHERE: UINT = 0x0001;
+pub const TVHT_ONITEMICON: UINT = 0x0002;
+pub const TVHT_ONITEMLABEL: UINT = 0x0004;
+pub const TVHT_ONITEM: UINT = TVHT_ONITEMICON | TVHT_ONITEMLABEL | TVHT_ONITEMSTATEICON;
+pub const TVHT_ONITEMINDENT: UINT = 0x0008;
+pub const TVHT_ONITEMBUTTON: UINT = 0x0010;
+pub const TVHT_ONITEMRIGHT: UINT = 0x0020;
+pub const TVHT_ONITEMSTATEICON: UINT = 0x0040;
+pub const TVHT_ABOVE: UINT = 0x0100;
+pub const TVHT_BELOW: UINT = 0x0200;
+pub const TVHT_TORIGHT: UINT = 0x0400;
+pub const TVHT_TOLEFT: UINT = 0x0800;
+pub const TVM_CREATEDRAGIMAGE: UINT = TV_FIRST + 18;
+pub const TVM_SORTCHILDREN: UINT = TV_FIRST + 19;
+pub const TVM_ENSUREVISIBLE: UINT = TV_FIRST + 20;
+pub const TVM_SORTCHILDRENCB: UINT = TV_FIRST + 21;
+pub const TVM_ENDEDITLABELNOW: UINT = TV_FIRST + 22;
+pub const TVM_GETISEARCHSTRINGA: UINT = TV_FIRST + 23;
+pub const TVM_GETISEARCHSTRINGW: UINT = TV_FIRST + 64;
+pub const TVM_SETTOOLTIPS: UINT = TV_FIRST + 24;
+pub const TVM_GETTOOLTIPS: UINT = TV_FIRST + 25;
+pub const TVM_SETINSERTMARK: UINT = TV_FIRST + 26;
+pub const TVM_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
+pub const TVM_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
+pub const TVM_SETITEMHEIGHT: UINT = TV_FIRST + 27;
+pub const TVM_GETITEMHEIGHT: UINT = TV_FIRST + 28;
+pub const TVM_SETBKCOLOR: UINT = TV_FIRST + 29;
+pub const TVM_SETTEXTCOLOR: UINT = TV_FIRST + 30;
+pub const TVM_GETBKCOLOR: UINT = TV_FIRST + 31;
+pub const TVM_GETTEXTCOLOR: UINT = TV_FIRST + 32;
+pub const TVM_SETSCROLLTIME: UINT = TV_FIRST + 33;
+pub const TVM_GETSCROLLTIME: UINT = TV_FIRST + 34;
+pub const TVM_SETINSERTMARKCOLOR: UINT = TV_FIRST + 37;
+pub const TVM_GETINSERTMARKCOLOR: UINT = TV_FIRST + 38;
+pub const TVM_SETBORDER: UINT = TV_FIRST + 35;
+pub const TVSBF_XBORDER: WPARAM = 0x00000001;
+pub const TVSBF_YBORDER: WPARAM = 0x00000002;
+pub const TVM_GETITEMSTATE: UINT = TV_FIRST + 39;
+pub const TVM_SETLINECOLOR: UINT = TV_FIRST + 40;
+pub const TVM_GETLINECOLOR: UINT = TV_FIRST + 41;
+pub const TVM_MAPACCIDTOHTREEITEM: UINT = TV_FIRST + 42;
+pub const TVM_MAPHTREEITEMTOACCID: UINT = TV_FIRST + 43;
+pub const TVM_SETEXTENDEDSTYLE: UINT = TV_FIRST + 44;
+pub const TVM_GETEXTENDEDSTYLE: UINT = TV_FIRST + 45;
+pub const TVM_SETAUTOSCROLLINFO: UINT = TV_FIRST + 59;
+pub const TVM_SETHOT: UINT = TV_FIRST + 58;
+pub const TVM_GETSELECTEDCOUNT: UINT = TV_FIRST + 70;
+pub const TVM_SHOWINFOTIP: UINT = TV_FIRST + 71;
+ENUM!{enum TVITEMPART {
+ TVGIPR_BUTTON = 0x0001,
+}}
+STRUCT!{struct TVGETITEMPARTRECTINFO {
+ hti: HTREEITEM,
+ prc: *mut RECT,
+ partID: TVITEMPART,
+}}
+pub const TVM_GETITEMPARTRECT: UINT = TV_FIRST + 72;
+FN!{stdcall PFNTVCOMPARE(
+ lParam1: LPARAM,
+ lParam2: LPARAM,
+ lParamSort: LPARAM,
+) -> c_int}
+pub type LPTV_SORTCB = LPTVSORTCB;
+pub type TV_SORTCB = TVSORTCB;
+STRUCT!{struct TVSORTCB {
+ hParent: HTREEITEM,
+ lpfnCompare: PFNTVCOMPARE,
+ lParam: LPARAM,
+}}
+pub type LPTVSORTCB = *mut TVSORTCB;
+pub type LPNM_TREEVIEWA = LPNMTREEVIEWA;
+pub type LPNM_TREEVIEWW = LPNMTREEVIEWW;
+pub type NM_TREEVIEWA = NMTREEVIEWA;
+pub type NM_TREEVIEWW = NMTREEVIEWW;
+STRUCT!{struct NMTREEVIEWA {
+ hdr: NMHDR,
+ action: UINT,
+ itemOld: TVITEMA,
+ itemNew: TVITEMA,
+ ptDrag: POINT,
+}}
+pub type LPNMTREEVIEWA = *mut NMTREEVIEWA;
+STRUCT!{struct NMTREEVIEWW {
+ hdr: NMHDR,
+ action: UINT,
+ itemOld: TVITEMW,
+ itemNew: TVITEMW,
+ ptDrag: POINT,
+}}
+pub type LPNMTREEVIEWW = *mut NMTREEVIEWW;
+pub const TVN_SELCHANGINGA: UINT = TVN_FIRST - 1;
+pub const TVN_SELCHANGINGW: UINT = TVN_FIRST - 50;
+pub const TVN_SELCHANGEDA: UINT = TVN_FIRST - 2;
+pub const TVN_SELCHANGEDW: UINT = TVN_FIRST - 51;
+pub const TVC_UNKNOWN: LPARAM = 0x0000;
+pub const TVC_BYMOUSE: LPARAM = 0x0001;
+pub const TVC_BYKEYBOARD: LPARAM = 0x0002;
+pub const TVN_GETDISPINFOA: UINT = TVN_FIRST - 3;
+pub const TVN_GETDISPINFOW: UINT = TVN_FIRST - 52;
+pub const TVN_SETDISPINFOA: UINT = TVN_FIRST - 4;
+pub const TVN_SETDISPINFOW: UINT = TVN_FIRST - 53;
+pub const TVIF_DI_SETITEM: UINT = 0x1000;
+pub type TV_DISPINFOA = NMTVDISPINFOA;
+pub type TV_DISPINFOW = NMTVDISPINFOW;
+STRUCT!{struct NMTVDISPINFOA {
+ hdr: NMHDR,
+ item: TVITEMA,
+}}
+pub type LPNMTVDISPINFOA = *mut NMTVDISPINFOA;
+STRUCT!{struct NMTVDISPINFOW {
+ hdr: NMHDR,
+ item: TVITEMW,
+}}
+pub type LPNMTVDISPINFOW = *mut NMTVDISPINFOW;
+STRUCT!{struct NMTVDISPINFOEXA {
+ hdr: NMHDR,
+ item: TVITEMEXA,
+}}
+pub type LPNMTVDISPINFOEXA = *mut NMTVDISPINFOEXA;
+STRUCT!{struct NMTVDISPINFOEXW {
+ hdr: NMHDR,
+ item: TVITEMEXW,
+}}
+pub type LPNMTVDISPINFOEXW = *mut NMTVDISPINFOEXW;
+pub type TV_DISPINFOEXA = NMTVDISPINFOEXA;
+pub type TV_DISPINFOEXW = NMTVDISPINFOEXW;
+pub const TVN_ITEMEXPANDINGA: UINT = TVN_FIRST - 5;
+pub const TVN_ITEMEXPANDINGW: UINT = TVN_FIRST - 54;
+pub const TVN_ITEMEXPANDEDA: UINT = TVN_FIRST - 6;
+pub const TVN_ITEMEXPANDEDW: UINT = TVN_FIRST - 55;
+pub const TVN_BEGINDRAGA: UINT = TVN_FIRST - 7;
+pub const TVN_BEGINDRAGW: UINT = TVN_FIRST - 56;
+pub const TVN_BEGINRDRAGA: UINT = TVN_FIRST - 8;
+pub const TVN_BEGINRDRAGW: UINT = TVN_FIRST - 57;
+pub const TVN_DELETEITEMA: UINT = TVN_FIRST - 9;
+pub const TVN_DELETEITEMW: UINT = TVN_FIRST - 58;
+pub const TVN_BEGINLABELEDITA: UINT = TVN_FIRST - 10;
+pub const TVN_BEGINLABELEDITW: UINT = TVN_FIRST - 59;
+pub const TVN_ENDLABELEDITA: UINT = TVN_FIRST - 11;
+pub const TVN_ENDLABELEDITW: UINT = TVN_FIRST - 60;
+pub const TVN_KEYDOWN: UINT = TVN_FIRST - 12;
+pub const TVN_GETINFOTIPA: UINT = TVN_FIRST - 13;
+pub const TVN_GETINFOTIPW: UINT = TVN_FIRST - 14;
+pub const TVN_SINGLEEXPAND: UINT = TVN_FIRST - 15;
+pub const TVNRET_DEFAULT: LRESULT = 0;
+pub const TVNRET_SKIPOLD: LRESULT = 1;
+pub const TVNRET_SKIPNEW: LRESULT = 2;
+pub const TVN_ITEMCHANGINGA: UINT = TVN_FIRST - 16;
+pub const TVN_ITEMCHANGINGW: UINT = TVN_FIRST - 17;
+pub const TVN_ITEMCHANGEDA: UINT = TVN_FIRST - 18;
+pub const TVN_ITEMCHANGEDW: UINT = TVN_FIRST - 19;
+pub const TVN_ASYNCDRAW: UINT = TVN_FIRST - 20;
+pub type TV_KEYDOWN = NMTVKEYDOWN;
+STRUCT!{#[repr(packed)] struct NMTVKEYDOWN {
+ hdr: NMHDR,
+ wVKey: WORD,
+ flags: UINT,
+}}
+pub type LPNMTVKEYDOWN = *mut NMTVKEYDOWN;
+STRUCT!{struct NMTVCUSTOMDRAW {
+ nmcd: NMCUSTOMDRAW,
+ clrText: COLORREF,
+ clrTextBk: COLORREF,
+ iLevel: c_int,
+}}
+pub type LPNMTVCUSTOMDRAW = *mut NMTVCUSTOMDRAW;
+STRUCT!{struct NMTVGETINFOTIPA {
+ hdr: NMHDR,
+ pszText: LPSTR,
+ cchTextMax: c_int,
+ hItem: HTREEITEM,
+ lParam: LPARAM,
+}}
+pub type LPNMTVGETINFOTIPA = *mut NMTVGETINFOTIPA;
+STRUCT!{struct NMTVGETINFOTIPW {
+ hdr: NMHDR,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ hItem: HTREEITEM,
+ lParam: LPARAM,
+}}
+pub type LPNMTVGETINFOTIPW = *mut NMTVGETINFOTIPW;
+pub const TVCDRF_NOIMAGES: LRESULT = 0x00010000;
+STRUCT!{struct NMTVITEMCHANGE {
+ hdr: NMHDR,
+ uChanged: UINT,
+ hItem: HTREEITEM,
+ uStateNew: UINT,
+ uStateOld: UINT,
+ lParam: LPARAM,
+}}
+STRUCT!{struct NMTVASYNCDRAW {
+ hdr: NMHDR,
+ pimldp: *mut IMAGELISTDRAWPARAMS,
+ hr: HRESULT,
+ hItem: HTREEITEM,
+ lParam: LPARAM,
+ dwRetFlags: DWORD,
+ iRetImageIndex: c_int,
+}}
+pub const WC_COMBOBOXEX: &'static str = "ComboBoxEx32";
+pub const CBEIF_TEXT: UINT = 0x00000001;
+pub const CBEIF_IMAGE: UINT = 0x00000002;
+pub const CBEIF_SELECTEDIMAGE: UINT = 0x00000004;
+pub const CBEIF_OVERLAY: UINT = 0x00000008;
+pub const CBEIF_INDENT: UINT = 0x00000010;
+pub const CBEIF_LPARAM: UINT = 0x00000020;
+pub const CBEIF_DI_SETITEM: UINT = 0x10000000;
+STRUCT!{struct COMBOBOXEXITEMA {
+ mask: UINT,
+ iItem: INT_PTR,
+ pszText: LPSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ iSelectedImage: c_int,
+ iOverlay: c_int,
+ iIndent: c_int,
+ lParam: LPARAM,
+}}
+pub type PCOMBOBOXEXITEMA = *mut COMBOBOXEXITEMA;
+pub type PCCOMBOBOXEXITEMA = *const COMBOBOXEXITEMA;
+STRUCT!{struct COMBOBOXEXITEMW {
+ mask: UINT,
+ iItem: INT_PTR,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ iSelectedImage: c_int,
+ iOverlay: c_int,
+ iIndent: c_int,
+ lParam: LPARAM,
+}}
+pub type PCOMBOBOXEXITEMW = *mut COMBOBOXEXITEMW;
+pub type PCCOMBOBOXEXITEMW = *const COMBOBOXEXITEMW;
+pub const CBEM_INSERTITEMA: UINT = WM_USER + 1;
+pub const CBEM_SETIMAGELIST: UINT = WM_USER + 2;
+pub const CBEM_GETIMAGELIST: UINT = WM_USER + 3;
+pub const CBEM_GETITEMA: UINT = WM_USER + 4;
+pub const CBEM_SETITEMA: UINT = WM_USER + 5;
+pub const CBEM_DELETEITEM: UINT = CB_DELETESTRING;
+pub const CBEM_GETCOMBOCONTROL: UINT = WM_USER + 6;
+pub const CBEM_GETEDITCONTROL: UINT = WM_USER + 7;
+pub const CBEM_SETEXSTYLE: UINT = WM_USER + 8;
+pub const CBEM_SETEXTENDEDSTYLE: UINT = WM_USER + 14;
+pub const CBEM_GETEXSTYLE: UINT = WM_USER + 9;
+pub const CBEM_GETEXTENDEDSTYLE: UINT = WM_USER + 9;
+pub const CBEM_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
+pub const CBEM_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
+pub const CBEM_HASEDITCHANGED: UINT = WM_USER + 10;
+pub const CBEM_INSERTITEMW: UINT = WM_USER + 11;
+pub const CBEM_SETITEMW: UINT = WM_USER + 12;
+pub const CBEM_GETITEMW: UINT = WM_USER + 13;
+pub const CBEM_SETWINDOWTHEME: UINT = CCM_SETWINDOWTHEME;
+pub const CBES_EX_NOEDITIMAGE: DWORD = 0x00000001;
+pub const CBES_EX_NOEDITIMAGEINDENT: DWORD = 0x00000002;
+pub const CBES_EX_PATHWORDBREAKPROC: DWORD = 0x00000004;
+pub const CBES_EX_NOSIZELIMIT: DWORD = 0x00000008;
+pub const CBES_EX_CASESENSITIVE: DWORD = 0x00000010;
+pub const CBES_EX_TEXTENDELLIPSIS: DWORD = 0x00000020;
+STRUCT!{struct NMCOMBOBOXEXA {
+ hdr: NMHDR,
+ ceItem: COMBOBOXEXITEMA,
+}}
+pub type PNMCOMBOBOXEXA = *mut NMCOMBOBOXEXA;
+STRUCT!{struct NMCOMBOBOXEXW {
+ hdr: NMHDR,
+ ceItem: COMBOBOXEXITEMW,
+}}
+pub type PNMCOMBOBOXEXW = *mut NMCOMBOBOXEXW;
+pub const CBEN_GETDISPINFOA: UINT = CBEN_FIRST - 0;
+pub const CBEN_INSERTITEM: UINT = CBEN_FIRST - 1;
+pub const CBEN_DELETEITEM: UINT = CBEN_FIRST - 2;
+pub const CBEN_BEGINEDIT: UINT = CBEN_FIRST - 4;
+pub const CBEN_ENDEDITA: UINT = CBEN_FIRST - 5;
+pub const CBEN_ENDEDITW: UINT = CBEN_FIRST - 6;
+pub const CBEN_GETDISPINFOW: UINT = CBEN_FIRST - 7;
+pub const CBEN_DRAGBEGINA: UINT = CBEN_FIRST - 8;
+pub const CBEN_DRAGBEGINW: UINT = CBEN_FIRST - 9;
+pub const CBENF_KILLFOCUS: c_int = 1;
+pub const CBENF_RETURN: c_int = 2;
+pub const CBENF_ESCAPE: c_int = 3;
+pub const CBENF_DROPDOWN: c_int = 4;
+pub const CBEMAXSTRLEN: usize = 260;
+STRUCT!{struct NMCBEDRAGBEGINW {
+ hdr: NMHDR,
+ iItemid: c_int,
+ szText: [WCHAR; CBEMAXSTRLEN],
+}}
+pub type PNMCBEDRAGBEGINW = *mut NMCBEDRAGBEGINW;
+pub type LPNMCBEDRAGBEGINW = *mut NMCBEDRAGBEGINW;
+STRUCT!{struct NMCBEDRAGBEGINA {
+ hdr: NMHDR,
+ iItemid: c_int,
+ szText: [c_char; CBEMAXSTRLEN],
+}}
+pub type PNMCBEDRAGBEGINA = *mut NMCBEDRAGBEGINA;
+pub type LPNMCBEDRAGBEGINA = *mut NMCBEDRAGBEGINA;
+STRUCT!{struct NMCBEENDEDITW {
+ hdr: NMHDR,
+ fChanged: BOOL,
+ iNewSelection: c_int,
+ szText: [WCHAR; CBEMAXSTRLEN],
+ iWhy: c_int,
+}}
+pub type PNMCBEENDEDITW = *mut NMCBEENDEDITW;
+pub type LPNMCBEENDEDITW = *mut NMCBEENDEDITW;
+STRUCT!{struct NMCBEENDEDITA {
+ hdr: NMHDR,
+ fChanged: BOOL,
+ iNewSelection: c_int,
+ szText: [c_char; CBEMAXSTRLEN],
+ iWhy: c_int,
+}}
+pub type PNMCBEENDEDITA = *mut NMCBEENDEDITA;
+pub type LPNMCBEENDEDITA = *mut NMCBEENDEDITA;
+pub const WC_TABCONTROL: &'static str = "SysTabControl32";
+pub const TCS_SCROLLOPPOSITE: DWORD = 0x0001;
+pub const TCS_BOTTOM: DWORD = 0x0002;
+pub const TCS_RIGHT: DWORD = 0x0002;
+pub const TCS_MULTISELECT: DWORD = 0x0004;
+pub const TCS_FLATBUTTONS: DWORD = 0x0008;
+pub const TCS_FORCEICONLEFT: DWORD = 0x0010;
+pub const TCS_FORCELABELLEFT: DWORD = 0x0020;
+pub const TCS_HOTTRACK: DWORD = 0x0040;
+pub const TCS_VERTICAL: DWORD = 0x0080;
+pub const TCS_TABS: DWORD = 0x0000;
+pub const TCS_BUTTONS: DWORD = 0x0100;
+pub const TCS_SINGLELINE: DWORD = 0x0000;
+pub const TCS_MULTILINE: DWORD = 0x0200;
+pub const TCS_RIGHTJUSTIFY: DWORD = 0x0000;
+pub const TCS_FIXEDWIDTH: DWORD = 0x0400;
+pub const TCS_RAGGEDRIGHT: DWORD = 0x0800;
+pub const TCS_FOCUSONBUTTONDOWN: DWORD = 0x1000;
+pub const TCS_OWNERDRAWFIXED: DWORD = 0x2000;
+pub const TCS_TOOLTIPS: DWORD = 0x4000;
+pub const TCS_FOCUSNEVER: DWORD = 0x8000;
+pub const TCS_EX_FLATSEPARATORS: DWORD = 0x00000001;
+pub const TCS_EX_REGISTERDROP: DWORD = 0x00000002;
+pub const TCM_GETIMAGELIST: UINT = TCM_FIRST + 2;
+pub const TCM_SETIMAGELIST: UINT = TCM_FIRST + 3;
+pub const TCM_GETITEMCOUNT: UINT = TCM_FIRST + 4;
+pub const TCIF_TEXT: UINT = 0x0001;
+pub const TCIF_IMAGE: UINT = 0x0002;
+pub const TCIF_RTLREADING: UINT = 0x0004;
+pub const TCIF_PARAM: UINT = 0x0008;
+pub const TCIF_STATE: UINT = 0x0010;
+pub const TCIS_BUTTONPRESSED: DWORD = 0x0001;
+pub const TCIS_HIGHLIGHTED: DWORD = 0x0002;
+pub type TC_ITEMHEADERA = TCITEMHEADERA;
+pub type TC_ITEMHEADERW = TCITEMHEADERW;
+STRUCT!{struct TCITEMHEADERA {
+ mask: UINT,
+ lpReserved1: UINT,
+ lpReserved2: UINT,
+ pszText: LPSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+}}
+pub type LPTCITEMHEADERA = *mut TCITEMHEADERA;
+STRUCT!{struct TCITEMHEADERW {
+ mask: UINT,
+ lpReserved1: UINT,
+ lpReserved2: UINT,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+}}
+pub type LPTCITEMHEADERW = *mut TCITEMHEADERW;
+pub type TC_ITEMA = TCITEMA;
+pub type TC_ITEMW = TCITEMW;
+STRUCT!{struct TCITEMA {
+ mask: UINT,
+ dwState: DWORD,
+ dwStateMask: DWORD,
+ pszText: LPSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ lParam: LPARAM,
+}}
+pub type LPTCITEMA = *mut TCITEMA;
+STRUCT!{struct TCITEMW {
+ mask: UINT,
+ dwState: DWORD,
+ dwStateMask: DWORD,
+ pszText: LPWSTR,
+ cchTextMax: c_int,
+ iImage: c_int,
+ lParam: LPARAM,
+}}
+pub type LPTCITEMW = *mut TCITEMW;
+pub const TCM_GETITEMA: UINT = TCM_FIRST + 5;
+pub const TCM_GETITEMW: UINT = TCM_FIRST + 60;
+pub const TCM_SETITEMA: UINT = TCM_FIRST + 6;
+pub const TCM_SETITEMW: UINT = TCM_FIRST + 61;
+pub const TCM_INSERTITEMA: UINT = TCM_FIRST + 7;
+pub const TCM_INSERTITEMW: UINT = TCM_FIRST + 62;
+pub const TCM_DELETEITEM: UINT = TCM_FIRST + 8;
+pub const TCM_DELETEALLITEMS: UINT = TCM_FIRST + 9;
+pub const TCM_GETITEMRECT: UINT = TCM_FIRST + 10;
+pub const TCM_GETCURSEL: UINT = TCM_FIRST + 11;
+pub const TCM_SETCURSEL: UINT = TCM_FIRST + 12;
+pub const TCHT_NOWHERE: UINT = 0x0001;
+pub const TCHT_ONITEMICON: UINT = 0x0002;
+pub const TCHT_ONITEMLABEL: UINT = 0x0004;
+pub const TCHT_ONITEM: UINT = TCHT_ONITEMICON | TCHT_ONITEMLABEL;
+pub type LPTC_HITTESTINFO = LPTCHITTESTINFO;
+pub type TC_HITTESTINFO = TCHITTESTINFO;
+STRUCT!{struct TCHITTESTINFO {
+ pt: POINT,
+ flags: UINT,
+}}
+pub type LPTCHITTESTINFO = *mut TCHITTESTINFO;
+pub const TCM_HITTEST: UINT = TCM_FIRST + 13;
+pub const TCM_SETITEMEXTRA: UINT = TCM_FIRST + 14;
+pub const TCM_ADJUSTRECT: UINT = TCM_FIRST + 40;
+pub const TCM_SETITEMSIZE: UINT = TCM_FIRST + 41;
+pub const TCM_REMOVEIMAGE: UINT = TCM_FIRST + 42;
+pub const TCM_SETPADDING: UINT = TCM_FIRST + 43;
+pub const TCM_GETROWCOUNT: UINT = TCM_FIRST + 44;
+pub const TCM_GETTOOLTIPS: UINT = TCM_FIRST + 45;
+pub const TCM_SETTOOLTIPS: UINT = TCM_FIRST + 46;
+pub const TCM_GETCURFOCUS: UINT = TCM_FIRST + 47;
+pub const TCM_SETCURFOCUS: UINT = TCM_FIRST + 48;
+pub const TCM_SETMINTABWIDTH: UINT = TCM_FIRST + 49;
+pub const TCM_DESELECTALL: UINT = TCM_FIRST + 50;
+pub const TCM_HIGHLIGHTITEM: UINT = TCM_FIRST + 51;
+pub const TCM_SETEXTENDEDSTYLE: UINT = TCM_FIRST + 52;
+pub const TCM_GETEXTENDEDSTYLE: UINT = TCM_FIRST + 53;
+pub const TCM_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
+pub const TCM_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
+pub const TCN_KEYDOWN: UINT = TCN_FIRST - 0;
+pub type TC_KEYDOWN = NMTCKEYDOWN;
+STRUCT!{#[repr(packed)] struct NMTCKEYDOWN {
+ hdr: NMHDR,
+ wVKey: WORD,
+ flags: UINT,
+}}
+pub const TCN_SELCHANGE: UINT = TCN_FIRST - 1;
+pub const TCN_SELCHANGING: UINT = TCN_FIRST - 2;
+pub const TCN_GETOBJECT: UINT = TCN_FIRST - 3;
+pub const TCN_FOCUSCHANGE: UINT = TCN_FIRST - 4;
+pub const ANIMATE_CLASS: &'static str = "SysAnimate32";
+pub const ACS_CENTER: DWORD = 0x0001;
+pub const ACS_TRANSPARENT: DWORD = 0x0002;
+pub const ACS_AUTOPLAY: DWORD = 0x0004;
+pub const ACS_TIMER: DWORD = 0x0008;
+pub const ACM_OPENA: UINT = WM_USER + 100;
+pub const ACM_OPENW: UINT = WM_USER + 103;
+pub const ACM_PLAY: UINT = WM_USER + 101;
+pub const ACM_STOP: UINT = WM_USER + 102;
+pub const ACM_ISPLAYING: UINT = WM_USER + 104;
+pub const ACN_START: WPARAM = 1;
+pub const ACN_STOP: WPARAM = 2;
+pub const MONTHCAL_CLASS: &'static str = "SysMonthCal32";
+pub type MONTHDAYSTATE = DWORD;
+pub type LPMONTHDAYSTATE = *mut DWORD;
+pub const MCM_FIRST: UINT = 0x1000;
+pub const MCM_GETCURSEL: UINT = MCM_FIRST + 1;
+pub const MCM_SETCURSEL: UINT = MCM_FIRST + 2;
+pub const MCM_GETMAXSELCOUNT: UINT = MCM_FIRST + 3;
+pub const MCM_SETMAXSELCOUNT: UINT = MCM_FIRST + 4;
+pub const MCM_GETSELRANGE: UINT = MCM_FIRST + 5;
+pub const MCM_SETSELRANGE: UINT = MCM_FIRST + 6;
+pub const MCM_GETMONTHRANGE: UINT = MCM_FIRST + 7;
+pub const MCM_SETDAYSTATE: UINT = MCM_FIRST + 8;
+pub const MCM_GETMINREQRECT: UINT = MCM_FIRST + 9;
+pub const MCM_SETCOLOR: UINT = MCM_FIRST + 10;
+pub const MCM_GETCOLOR: UINT = MCM_FIRST + 11;
+pub const MCSC_BACKGROUND: WPARAM = 0;
+pub const MCSC_TEXT: WPARAM = 1;
+pub const MCSC_TITLEBK: WPARAM = 2;
+pub const MCSC_TITLETEXT: WPARAM = 3;
+pub const MCSC_MONTHBK: WPARAM = 4;
+pub const MCSC_TRAILINGTEXT: WPARAM = 5;
+pub const MCM_SETTODAY: UINT = MCM_FIRST + 12;
+pub const MCM_GETTODAY: UINT = MCM_FIRST + 13;
+pub const MCM_HITTEST: UINT = MCM_FIRST + 14;
+STRUCT!{struct MCHITTESTINFO {
+ cbSize: UINT,
+ pt: POINT,
+ uHit: UINT,
+ st: SYSTEMTIME,
+ rc: RECT,
+ iOffset: c_int,
+ iRow: c_int,
+ iCol: c_int,
+}}
+pub type PMCHITTESTINFO = *mut MCHITTESTINFO;
+pub const MCHT_TITLE: UINT = 0x00010000;
+pub const MCHT_CALENDAR: UINT = 0x00020000;
+pub const MCHT_TODAYLINK: UINT = 0x00030000;
+pub const MCHT_CALENDARCONTROL: UINT = 0x00100000;
+pub const MCHT_NEXT: UINT = 0x01000000;
+pub const MCHT_PREV: UINT = 0x02000000;
+pub const MCHT_NOWHERE: UINT = 0x00000000;
+pub const MCHT_TITLEBK: UINT = MCHT_TITLE;
+pub const MCHT_TITLEMONTH: UINT = MCHT_TITLE | 0x0001;
+pub const MCHT_TITLEYEAR: UINT = MCHT_TITLE | 0x0002;
+pub const MCHT_TITLEBTNNEXT: UINT = MCHT_TITLE | MCHT_NEXT | 0x0003;
+pub const MCHT_TITLEBTNPREV: UINT = MCHT_TITLE | MCHT_PREV | 0x0003;
+pub const MCHT_CALENDARBK: UINT = MCHT_CALENDAR;
+pub const MCHT_CALENDARDATE: UINT = MCHT_CALENDAR | 0x0001;
+pub const MCHT_CALENDARDATENEXT: UINT = MCHT_CALENDARDATE | MCHT_NEXT;
+pub const MCHT_CALENDARDATEPREV: UINT = MCHT_CALENDARDATE | MCHT_PREV;
+pub const MCHT_CALENDARDAY: UINT = MCHT_CALENDAR | 0x0002;
+pub const MCHT_CALENDARWEEKNUM: UINT = MCHT_CALENDAR | 0x0003;
+pub const MCHT_CALENDARDATEMIN: UINT = MCHT_CALENDAR | 0x0004;
+pub const MCHT_CALENDARDATEMAX: UINT = MCHT_CALENDAR | 0x0005;
+pub const MCM_SETFIRSTDAYOFWEEK: UINT = MCM_FIRST + 15;
+pub const MCM_GETFIRSTDAYOFWEEK: UINT = MCM_FIRST + 16;
+pub const MCM_GETRANGE: UINT = MCM_FIRST + 17;
+pub const MCM_SETRANGE: UINT = MCM_FIRST + 18;
+pub const MCM_GETMONTHDELTA: UINT = MCM_FIRST + 19;
+pub const MCM_SETMONTHDELTA: UINT = MCM_FIRST + 20;
+pub const MCM_GETMAXTODAYWIDTH: UINT = MCM_FIRST + 21;
+pub const MCM_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
+pub const MCM_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
+pub const MCMV_MONTH: DWORD = 0;
+pub const MCMV_YEAR: DWORD = 1;
+pub const MCMV_DECADE: DWORD = 2;
+pub const MCMV_CENTURY: DWORD = 3;
+pub const MCMV_MAX: DWORD = MCMV_CENTURY;
+pub const MCM_GETCURRENTVIEW: UINT = MCM_FIRST + 22;
+pub const MCM_GETCALENDARCOUNT: UINT = MCM_FIRST + 23;
+pub const MCGIP_CALENDARCONTROL: DWORD = 0;
+pub const MCGIP_NEXT: DWORD = 1;
+pub const MCGIP_PREV: DWORD = 2;
+pub const MCGIP_FOOTER: DWORD = 3;
+pub const MCGIP_CALENDAR: DWORD = 4;
+pub const MCGIP_CALENDARHEADER: DWORD = 5;
+pub const MCGIP_CALENDARBODY: DWORD = 6;
+pub const MCGIP_CALENDARROW: DWORD = 7;
+pub const MCGIP_CALENDARCELL: DWORD = 8;
+pub const MCGIF_DATE: DWORD = 0x00000001;
+pub const MCGIF_RECT: DWORD = 0x00000002;
+pub const MCGIF_NAME: DWORD = 0x00000004;
+STRUCT!{struct MCGRIDINFO {
+ cbSize: UINT,
+ dwPart: DWORD,
+ dwFlags: DWORD,
+ iCalendar: c_int,
+ iRow: c_int,
+ iCol: c_int,
+ bSelected: BOOL,
+ stStart: SYSTEMTIME,
+ stEnd: SYSTEMTIME,
+ rc: RECT,
+ pszName: PWSTR,
+ cchName: size_t,
+}}
+pub type PMCGRIDINFO = *mut MCGRIDINFO;
+pub const MCM_GETCALENDARGRIDINFO: UINT = MCM_FIRST + 24;
+pub const MCM_GETCALID: UINT = MCM_FIRST + 27;
+pub const MCM_SETCALID: UINT = MCM_FIRST + 28;
+pub const MCM_SIZERECTTOMIN: UINT = MCM_FIRST + 29;
+pub const MCM_SETCALENDARBORDER: UINT = MCM_FIRST + 30;
+pub const MCM_GETCALENDARBORDER: UINT = MCM_FIRST + 31;
+pub const MCM_SETCURRENTVIEW: UINT = MCM_FIRST + 32;
+STRUCT!{struct NMSELCHANGE {
+ nmhdr: NMHDR,
+ stSelStart: SYSTEMTIME,
+ stSelEnd: SYSTEMTIME,
+}}
+pub type LPNMSELCHANGE = *mut NMSELCHANGE;
+pub const MCN_SELCHANGE: UINT = MCN_FIRST - 3;
+STRUCT!{struct NMDAYSTATE {
+ nmhdr: NMHDR,
+ stStart: SYSTEMTIME,
+ cDayState: c_int,
+ prgDayState: LPMONTHDAYSTATE,
+}}
+pub type LPNMDAYSTATE = *mut NMDAYSTATE;
+pub const MCN_GETDAYSTATE: UINT = MCN_FIRST - 1;
+pub type NMSELECT = NMSELCHANGE;
+pub type LPNMSELECT = *mut NMSELCHANGE;
+pub const MCN_SELECT: UINT = MCN_FIRST;
+STRUCT!{struct NMVIEWCHANGE {
+ nmhdr: NMHDR,
+ dwOldView: DWORD,
+ dwNewView: DWORD,
+}}
+pub type LPNMVIEWCHANGE = *mut NMVIEWCHANGE;
+pub const MCN_VIEWCHANGE: UINT = MCN_FIRST - 4;
+pub const MCS_DAYSTATE: DWORD = 0x0001;
+pub const MCS_MULTISELECT: DWORD = 0x0002;
+pub const MCS_WEEKNUMBERS: DWORD = 0x0004;
+pub const MCS_NOTODAYCIRCLE: DWORD = 0x0008;
+pub const MCS_NOTODAY: DWORD = 0x0010;
+pub const MCS_NOTRAILINGDATES: DWORD = 0x0040;
+pub const MCS_SHORTDAYSOFWEEK: DWORD = 0x0080;
+pub const MCS_NOSELCHANGEONNAV: DWORD = 0x0100;
+pub const GMR_VISIBLE: DWORD = 0;
+pub const GMR_DAYSTATE: DWORD = 1;
+pub const DATETIMEPICK_CLASS: &'static str = "SysDateTimePick32";
+STRUCT!{struct DATETIMEPICKERINFO {
+ cbSize: UINT,
+ rcCheck: RECT,
+ stateCheck: DWORD,
+ rcButton: RECT,
+ stateButton: DWORD,
+ hwndEdit: HWND,
+ hwndUD: HWND,
+ hwndDropDown: HWND,
+}}
+pub type LPDATETIMEPICKERINFO = *mut DATETIMEPICKERINFO;
+pub const DTM_FIRST: UINT = 0x1000;
+pub const DTM_GETSYSTEMTIME: UINT = DTM_FIRST + 1;
+pub const DTM_SETSYSTEMTIME: UINT = DTM_FIRST + 2;
+pub const DTM_GETRANGE: UINT = DTM_FIRST + 3;
+pub const DTM_SETRANGE: UINT = DTM_FIRST + 4;
+pub const DTM_SETFORMATA: UINT = DTM_FIRST + 5;
+pub const DTM_SETFORMATW: UINT = DTM_FIRST + 50;
+pub const DTM_SETMCCOLOR: UINT = DTM_FIRST + 6;
+pub const DTM_GETMCCOLOR: UINT = DTM_FIRST + 7;
+pub const DTM_GETMONTHCAL: UINT = DTM_FIRST + 8;
+pub const DTM_SETMCFONT: UINT = DTM_FIRST + 9;
+pub const DTM_GETMCFONT: UINT = DTM_FIRST + 10;
+pub const DTM_SETMCSTYLE: UINT = DTM_FIRST + 11;
+pub const DTM_GETMCSTYLE: UINT = DTM_FIRST + 12;
+pub const DTM_CLOSEMONTHCAL: UINT = DTM_FIRST + 13;
+pub const DTM_GETDATETIMEPICKERINFO: UINT = DTM_FIRST + 14;
+pub const DTM_GETIDEALSIZE: UINT = DTM_FIRST + 15;
+pub const DTS_UPDOWN: DWORD = 0x0001;
+pub const DTS_SHOWNONE: DWORD = 0x0002;
+pub const DTS_SHORTDATEFORMAT: DWORD = 0x0000;
+pub const DTS_LONGDATEFORMAT: DWORD = 0x0004;
+pub const DTS_SHORTDATECENTURYFORMAT: DWORD = 0x000C;
+pub const DTS_TIMEFORMAT: DWORD = 0x0009;
+pub const DTS_APPCANPARSE: DWORD = 0x0010;
+pub const DTS_RIGHTALIGN: DWORD = 0x0020;
+pub const DTN_DATETIMECHANGE: UINT = DTN_FIRST2 - 6;
+STRUCT!{struct NMDATETIMECHANGE {
+ nmhdr: NMHDR,
+ dwFlags: DWORD,
+ st: SYSTEMTIME,
+}}
+pub type LPNMDATETIMECHANGE = *mut NMDATETIMECHANGE;
+pub const DTN_USERSTRINGA: UINT = DTN_FIRST2 - 5;
+pub const DTN_USERSTRINGW: UINT = DTN_FIRST - 5;
+STRUCT!{struct NMDATETIMESTRINGA {
+ nmhdr: NMHDR,
+ pszUserString: LPCSTR,
+ st: SYSTEMTIME,
+ dwFlags: DWORD,
+}}
+pub type LPNMDATETIMESTRINGA = *mut NMDATETIMESTRINGA;
+STRUCT!{struct NMDATETIMESTRINGW {
+ nmhdr: NMHDR,
+ pszUserString: LPCWSTR,
+ st: SYSTEMTIME,
+ dwFlags: DWORD,
+}}
+pub type LPNMDATETIMESTRINGW = *mut NMDATETIMESTRINGW;
+pub const DTN_WMKEYDOWNA: UINT = DTN_FIRST2 - 4;
+pub const DTN_WMKEYDOWNW: UINT = DTN_FIRST - 4;
+STRUCT!{struct NMDATETIMEWMKEYDOWNA {
+ nmhdr: NMHDR,
+ nVirtKey: c_int,
+ pszFormat: LPCSTR,
+ st: SYSTEMTIME,
+}}
+pub type LPNMDATETIMEWMKEYDOWNA = *mut NMDATETIMEWMKEYDOWNA;
+STRUCT!{struct NMDATETIMEWMKEYDOWNW {
+ nmhdr: NMHDR,
+ nVirtKey: c_int,
+ pszFormat: LPCWSTR,
+ st: SYSTEMTIME,
+}}
+pub type LPNMDATETIMEWMKEYDOWNW = *mut NMDATETIMEWMKEYDOWNW;
+pub const DTN_FORMATA: UINT = DTN_FIRST2 - 3;
+pub const DTN_FORMATW: UINT = DTN_FIRST - 3;
+STRUCT!{struct NMDATETIMEFORMATA {
+ nmhdr: NMHDR,
+ pszFormat: LPCSTR,
+ st: SYSTEMTIME,
+ pszDisplay: LPCSTR,
+ szDisplay: [CHAR; 64],
+}}
+pub type LPNMDATETIMEFORMATA = *mut NMDATETIMEFORMATA;
+STRUCT!{struct NMDATETIMEFORMATW {
+ nmhdr: NMHDR,
+ pszFormat: LPCWSTR,
+ st: SYSTEMTIME,
+ pszDisplay: LPCWSTR,
+ szDisplay: [WCHAR; 64],
+}}
+pub type LPNMDATETIMEFORMATW = *mut NMDATETIMEFORMATW;
+pub const DTN_FORMATQUERYA: UINT = DTN_FIRST2 - 2;
+pub const DTN_FORMATQUERYW: UINT = DTN_FIRST - 2;
+STRUCT!{struct NMDATETIMEFORMATQUERYA {
+ nmhdr: NMHDR,
+ pszFormat: LPCSTR,
+ szMax: SIZE,
+}}
+pub type LPNMDATETIMEFORMATQUERYA = *mut NMDATETIMEFORMATQUERYA;
+STRUCT!{struct NMDATETIMEFORMATQUERYW {
+ nmhdr: NMHDR,
+ pszFormat: LPCWSTR,
+ szMax: SIZE,
+}}
+pub type LPNMDATETIMEFORMATQUERYW = *mut NMDATETIMEFORMATQUERYW;
+pub const DTN_DROPDOWN: UINT = DTN_FIRST2 - 1;
+pub const DTN_CLOSEUP: UINT = DTN_FIRST2;
+pub const GDTR_MIN: WPARAM = 0x0001;
+pub const GDTR_MAX: WPARAM = 0x0002;
+pub const GDT_ERROR: LRESULT = -1;
+pub const GDT_VALID: LRESULT = 0;
+pub const GDT_NONE: LRESULT = 1;
+pub const IPM_CLEARADDRESS: UINT = WM_USER + 100;
+pub const IPM_SETADDRESS: UINT = WM_USER + 101;
+pub const IPM_GETADDRESS: UINT = WM_USER + 102;
+pub const IPM_SETRANGE: UINT = WM_USER + 103;
+pub const IPM_SETFOCUS: UINT = WM_USER + 104;
+pub const IPM_ISBLANK: UINT = WM_USER + 105;
+pub const WC_IPADDRESS: &'static str = "SysIPAddress32";
+pub const IPN_FIELDCHANGED: UINT = IPN_FIRST - 0;
+STRUCT!{struct NMIPADDRESS {
+ hdr: NMHDR,
+ iField: c_int,
+ iValue: c_int,
+}}
+pub type LPNMIPADDRESS = *mut NMIPADDRESS;
+#[inline]
+pub fn MAKEIPRANGE(low: BYTE, high: BYTE) -> LPARAM {
+ (((high as WORD) << 8) + low as WORD) as LPARAM
+}
+#[inline]
+pub fn MAKEIPADDRESS(b1: DWORD, b2: DWORD, b3: DWORD, b4: DWORD) -> LPARAM {
+ ((b1 << 24) + (b2 << 16) + (b3 << 8) + b4) as LPARAM
+}
+#[inline]
+pub fn FIRST_IPADDRESS(x: LPARAM) -> BYTE {
+ ((x >> 24) & 0xff) as BYTE
+}
+#[inline]
+pub fn SECOND_IPADDRESS(x: LPARAM) -> BYTE {
+ ((x >> 16) & 0xff) as BYTE
+}
+#[inline]
+pub fn THIRD_IPADDRESS(x: LPARAM) -> BYTE {
+ ((x >> 8) & 0xff) as BYTE
+}
+#[inline]
+pub fn FOURTH_IPADDRESS(x: LPARAM) -> BYTE {
+ (x & 0xff) as BYTE
+}
+pub const WC_PAGESCROLLER: &'static str = "SysPager";
+pub const PGS_VERT: DWORD = 0x00000000;
+pub const PGS_HORZ: DWORD = 0x00000001;
+pub const PGS_AUTOSCROLL: DWORD = 0x00000002;
+pub const PGS_DRAGNDROP: DWORD = 0x00000004;
+pub const PGF_INVISIBLE: DWORD = 0;
+pub const PGF_NORMAL: DWORD = 1;
+pub const PGF_GRAYED: DWORD = 2;
+pub const PGF_DEPRESSED: DWORD = 4;
+pub const PGF_HOT: DWORD = 8;
+pub const PGB_TOPORLEFT: c_int = 0;
+pub const PGB_BOTTOMORRIGHT: c_int = 1;
+pub const PGM_SETCHILD: UINT = PGM_FIRST + 1;
+pub const PGM_RECALCSIZE: UINT = PGM_FIRST + 2;
+pub const PGM_FORWARDMOUSE: UINT = PGM_FIRST + 3;
+pub const PGM_SETBKCOLOR: UINT = PGM_FIRST + 4;
+pub const PGM_GETBKCOLOR: UINT = PGM_FIRST + 5;
+pub const PGM_SETBORDER: UINT = PGM_FIRST + 6;
+pub const PGM_GETBORDER: UINT = PGM_FIRST + 7;
+pub const PGM_SETPOS: UINT = PGM_FIRST + 8;
+pub const PGM_GETPOS: UINT = PGM_FIRST + 9;
+pub const PGM_SETBUTTONSIZE: UINT = PGM_FIRST + 10;
+pub const PGM_GETBUTTONSIZE: UINT = PGM_FIRST + 11;
+pub const PGM_GETBUTTONSTATE: UINT = PGM_FIRST + 12;
+pub const PGM_GETDROPTARGET: UINT = CCM_GETDROPTARGET;
+pub const PGM_SETSCROLLINFO: UINT = PGM_FIRST + 13;
+pub const PGN_SCROLL: UINT = PGN_FIRST - 1;
+pub const PGF_SCROLLUP: c_int = 1;
+pub const PGF_SCROLLDOWN: c_int = 2;
+pub const PGF_SCROLLLEFT: c_int = 4;
+pub const PGF_SCROLLRIGHT: c_int = 8;
+pub const PGK_SHIFT: BOOL = 1;
+pub const PGK_CONTROL: BOOL = 2;
+pub const PGK_MENU: BOOL = 4;
+STRUCT!{#[repr(packed)] struct NMPGSCROLL {
+ hdr: NMHDR,
+ fwKeys: WORD,
+ rcParent: RECT,
+ iDir: c_int,
+ iXpos: c_int,
+ iYpos: c_int,
+ iScroll: c_int,
+}}
+pub type LPNMPGSCROLL = *mut NMPGSCROLL;
+pub const PGN_CALCSIZE: UINT = PGN_FIRST - 2;
+pub const PGF_CALCWIDTH: DWORD = 1;
+pub const PGF_CALCHEIGHT: DWORD = 2;
+STRUCT!{struct NMPGCALCSIZE {
+ hdr: NMHDR,
+ dwFlag: DWORD,
+ iWidth: c_int,
+ iHeight: c_int,
+}}
+pub type LPNMPGCALCSIZE = *mut NMPGCALCSIZE;
+pub const PGN_HOTITEMCHANGE: UINT = PGN_FIRST - 3;
+STRUCT!{struct NMPGHOTITEM {
+ hdr: NMHDR,
+ idOld: c_int,
+ idNew: c_int,
+ dwFlags: DWORD,
+}}
+pub type LPNMPGHOTITEM = *mut NMPGHOTITEM;
+pub const WC_NATIVEFONTCTL: &'static str = "NativeFontCtl";
+pub const NFS_EDIT: DWORD = 0x0001;
+pub const NFS_STATIC: DWORD = 0x0002;
+pub const NFS_LISTCOMBO: DWORD = 0x0004;
+pub const NFS_BUTTON: DWORD = 0x0008;
+pub const NFS_ALL: DWORD = 0x0010;
+pub const NFS_USEFONTASSOC: DWORD = 0x0020;
+pub const WC_BUTTONA: &'static str = "Button";
+pub const BUTTON_IMAGELIST_ALIGN_LEFT: UINT = 0;
+pub const BUTTON_IMAGELIST_ALIGN_RIGHT: UINT = 1;
+pub const BUTTON_IMAGELIST_ALIGN_TOP: UINT = 2;
+pub const BUTTON_IMAGELIST_ALIGN_BOTTOM: UINT = 3;
+pub const BUTTON_IMAGELIST_ALIGN_CENTER: UINT = 4;
+STRUCT!{struct BUTTON_IMAGELIST {
+ himl: HIMAGELIST,
+ margin: RECT,
+ uAlign: UINT,
+}}
+pub type PBUTTON_IMAGELIST = *mut BUTTON_IMAGELIST;
+pub const BCM_GETIDEALSIZE: UINT = BCM_FIRST + 0x0001;
+pub const BCM_SETIMAGELIST: UINT = BCM_FIRST + 0x0002;
+pub const BCM_GETIMAGELIST: UINT = BCM_FIRST + 0x0003;
+pub const BCM_SETTEXTMARGIN: UINT = BCM_FIRST + 0x0004;
+pub const BCM_GETTEXTMARGIN: UINT = BCM_FIRST + 0x0005;
+STRUCT!{struct NMBCHOTITEM {
+ hdr: NMHDR,
+ dwFlags: DWORD,
+}}
+pub type LPNMBCHOTITEM = *mut NMBCHOTITEM;
+pub const BCN_HOTITEMCHANGE: UINT = BCN_FIRST + 0x0001;
+pub const BS_SPLITBUTTON: UINT = 0x0000000C;
+pub const BS_DEFSPLITBUTTON: UINT = 0x0000000D;
+pub const BS_COMMANDLINK: UINT = 0x0000000E;
+pub const BS_DEFCOMMANDLINK: UINT = 0x0000000F;
+pub const BCSIF_GLYPH: UINT = 0x0001;
+pub const BCSIF_IMAGE: UINT = 0x0002;
+pub const BCSIF_STYLE: UINT = 0x0004;
+pub const BCSIF_SIZE: UINT = 0x0008;
+pub const BCSS_NOSPLIT: UINT = 0x0001;
+pub const BCSS_STRETCH: UINT = 0x0002;
+pub const BCSS_ALIGNLEFT: UINT = 0x0004;
+pub const BCSS_IMAGE: UINT = 0x0008;
+STRUCT!{struct BUTTON_SPLITINFO {
+ mask: UINT,
+ himlGlyph: HIMAGELIST,
+ uSplitStyle: UINT,
+ size: SIZE,
+}}
+pub type PBUTTON_SPLITINFO = *mut BUTTON_SPLITINFO;
+pub const BCM_SETDROPDOWNSTATE: UINT = BCM_FIRST + 0x0006;
+pub const BCM_SETSPLITINFO: UINT = BCM_FIRST + 0x0007;
+pub const BCM_GETSPLITINFO: UINT = BCM_FIRST + 0x0008;
+pub const BCM_SETNOTE: UINT = BCM_FIRST + 0x0009;
+pub const BCM_GETNOTE: UINT = BCM_FIRST + 0x000A;
+pub const BCM_GETNOTELENGTH: UINT = BCM_FIRST + 0x000B;
+pub const BCM_SETSHIELD: UINT = BCM_FIRST + 0x000C;
+pub const BCCL_NOGLYPH: HIMAGELIST = -1isize as HIMAGELIST;
+STRUCT!{struct NMBCDROPDOWN {
+ hdr: NMHDR,
+ rcButton: RECT,
+}}
+pub type LPNMBCDROPDOWN = *mut NMBCDROPDOWN;
+pub const BCN_DROPDOWN: UINT = BCN_FIRST + 0x0002;
+pub const WC_STATIC: &'static str = "Static";
+pub const WC_EDIT: &'static str = "Edit";
+pub const EM_SETCUEBANNER: UINT = ECM_FIRST + 1;
+pub const EM_GETCUEBANNER: UINT = ECM_FIRST + 2;
+STRUCT!{struct EDITBALLOONTIP {
+ cbStruct: DWORD,
+ pszTitle: LPCWSTR,
+ pszText: LPCWSTR,
+ ttiIcon: INT,
+}}
+pub type PEDITBALLOONTIP = *mut EDITBALLOONTIP;
+pub const EM_SHOWBALLOONTIP: UINT = ECM_FIRST + 3;
+pub const EM_HIDEBALLOONTIP: UINT = ECM_FIRST + 4;
+pub const EM_SETHILITE: UINT = ECM_FIRST + 5;
+pub const EM_GETHILITE: UINT = ECM_FIRST + 6;
+pub const EM_NOSETFOCUS: UINT = ECM_FIRST + 7;
+pub const EM_TAKEFOCUS: UINT = ECM_FIRST + 8;
+pub const WC_LISTBOX: &'static str = "ListBox";
+pub const WC_COMBOBOX: &'static str = "ComboBox";
+pub const CB_SETMINVISIBLE: UINT = CBM_FIRST + 1;
+pub const CB_GETMINVISIBLE: UINT = CBM_FIRST + 2;
+pub const CB_SETCUEBANNER: UINT = CBM_FIRST + 3;
+pub const CB_GETCUEBANNER: UINT = CBM_FIRST + 4;
+pub const WC_SCROLLBAR: &'static str = "ScrollBar";
+FN!{stdcall PFTASKDIALOGCALLBACK(
+ hwnd: HWND,
+ msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ lpRefData: LONG_PTR,
+) -> HRESULT}
+ENUM!{enum TASKDIALOG_FLAGS {
+ TDF_ENABLE_HYPERLINKS = 0x0001,
+ TDF_USE_HICON_MAIN = 0x0002,
+ TDF_USE_HICON_FOOTER = 0x0004,
+ TDF_ALLOW_DIALOG_CANCELLATION = 0x0008,
+ TDF_USE_COMMAND_LINKS = 0x0010,
+ TDF_USE_COMMAND_LINKS_NO_ICON = 0x0020,
+ TDF_EXPAND_FOOTER_AREA = 0x0040,
+ TDF_EXPANDED_BY_DEFAULT = 0x0080,
+ TDF_VERIFICATION_FLAG_CHECKED = 0x0100,
+ TDF_SHOW_PROGRESS_BAR = 0x0200,
+ TDF_SHOW_MARQUEE_PROGRESS_BAR = 0x0400,
+ TDF_CALLBACK_TIMER = 0x0800,
+ TDF_POSITION_RELATIVE_TO_WINDOW = 0x1000,
+ TDF_RTL_LAYOUT = 0x2000,
+ TDF_NO_DEFAULT_RADIO_BUTTON = 0x4000,
+ TDF_CAN_BE_MINIMIZED = 0x8000,
+ TDF_NO_SET_FOREGROUND = 0x00010000,
+ TDF_SIZE_TO_CONTENT = 0x01000000,
+}}
+ENUM!{enum TASKDIALOG_MESSAGES {
+ TDM_NAVIGATE_PAGE = WM_USER + 101,
+ TDM_CLICK_BUTTON = WM_USER + 102,
+ TDM_SET_MARQUEE_PROGRESS_BAR = WM_USER + 103,
+ TDM_SET_PROGRESS_BAR_STATE = WM_USER + 104,
+ TDM_SET_PROGRESS_BAR_RANGE = WM_USER + 105,
+ TDM_SET_PROGRESS_BAR_POS = WM_USER + 106,
+ TDM_SET_PROGRESS_BAR_MARQUEE = WM_USER + 107,
+ TDM_SET_ELEMENT_TEXT = WM_USER + 108,
+ TDM_CLICK_RADIO_BUTTON = WM_USER + 110,
+ TDM_ENABLE_BUTTON = WM_USER + 111,
+ TDM_ENABLE_RADIO_BUTTON = WM_USER + 112,
+ TDM_CLICK_VERIFICATION = WM_USER + 113,
+ TDM_UPDATE_ELEMENT_TEXT = WM_USER + 114,
+ TDM_SET_BUTTON_ELEVATION_REQUIRED_STATE = WM_USER + 115,
+ TDM_UPDATE_ICON = WM_USER + 116,
+}}
+ENUM!{enum TASKDIALOG_NOTIFICATIONS {
+ TDN_CREATED = 0,
+ TDN_NAVIGATED = 1,
+ TDN_BUTTON_CLICKED = 2,
+ TDN_HYPERLINK_CLICKED = 3,
+ TDN_TIMER = 4,
+ TDN_DESTROYED = 5,
+ TDN_RADIO_BUTTON_CLICKED = 6,
+ TDN_DIALOG_CONSTRUCTED = 7,
+ TDN_VERIFICATION_CLICKED = 8,
+ TDN_HELP = 9,
+ TDN_EXPANDO_BUTTON_CLICKED = 10,
+}}
+STRUCT!{#[repr(packed)] struct TASKDIALOG_BUTTON {
+ nButtonID: c_int,
+ pszButtonText: PCWSTR,
+}}
+ENUM!{enum TASKDIALOG_ELEMENTS {
+ TDE_CONTENT,
+ TDE_EXPANDED_INFORMATION,
+ TDE_FOOTER,
+ TDE_MAIN_INSTRUCTION,
+}}
+ENUM!{enum TASKDIALOG_ICON_ELEMENTS {
+ TDIE_ICON_MAIN,
+ TDIE_ICON_FOOTER,
+}}
+pub const TD_WARNING_ICON: LPWSTR = MAKEINTRESOURCE!(-1i16);
+pub const TD_ERROR_ICON: LPWSTR = MAKEINTRESOURCE!(-2i16);
+pub const TD_INFORMATION_ICON: LPWSTR = MAKEINTRESOURCE!(-3i16);
+pub const TD_SHIELD_ICON: LPWSTR = MAKEINTRESOURCE!(-4i16);
+ENUM!{enum TASKDIALOG_COMMON_BUTTON_FLAGS {
+ TDCBF_OK_BUTTON = 0x0001,
+ TDCBF_YES_BUTTON = 0x0002,
+ TDCBF_NO_BUTTON = 0x0004,
+ TDCBF_CANCEL_BUTTON = 0x0008,
+ TDCBF_RETRY_BUTTON = 0x0010,
+ TDCBF_CLOSE_BUTTON = 0x0020,
+}}
+UNION!{#[repr(packed)] union TASKDIALOGCONFIG_u1 {
+ [usize; 1],
+ hMainIcon hMainIcon_mut: HICON,
+ pszMainIcon pszMainIcon_mut: PCWSTR,
+}}
+UNION!{#[repr(packed)] union TASKDIALOGCONFIG_u2 {
+ [usize; 1],
+ hFooterIcon hFooterIcon_mut: HICON,
+ pszFooterIcon pszFooterIcon_mut: PCWSTR,
+}}
+STRUCT!{#[repr(packed)] struct TASKDIALOGCONFIG {
+ cbSize: UINT,
+ hwndParent: HWND,
+ hInstance: HINSTANCE,
+ dwFlags: TASKDIALOG_FLAGS,
+ dwCommonButtons: TASKDIALOG_COMMON_BUTTON_FLAGS,
+ pszWindowTitle: PCWSTR,
+ u1: TASKDIALOGCONFIG_u1,
+ pszMainInstruction: PCWSTR,
+ pszContent: PCWSTR,
+ cButtons: UINT,
+ pButtons: *const TASKDIALOG_BUTTON,
+ nDefaultButton: c_int,
+ cRadioButtons: UINT,
+ pRadioButtons: *const TASKDIALOG_BUTTON,
+ nDefaultRadioButton: c_int,
+ pszVerificationText: PCWSTR,
+ pszExpandedInformation: PCWSTR,
+ pszExpandedControlText: PCWSTR,
+ pszCollapsedControlText: PCWSTR,
+ u2: TASKDIALOGCONFIG_u2,
+ pszFooter: PCWSTR,
+ pfCallback: PFTASKDIALOGCALLBACK,
+ lpCallbackData: LONG_PTR,
+ cxWidth: UINT,
+}}
+extern "system" {
+ pub fn TaskDialogIndirect(
+ pTaskConfig: *const TASKDIALOGCONFIG,
+ pnButton: *mut c_int,
+ pnRadioButton: *mut c_int,
+ pfVerificationFlagChecked: *mut BOOL,
+ ) -> HRESULT;
+ pub fn TaskDialog(
+ hwndOwner: HWND,
+ hInstance: HINSTANCE,
+ pszWindowTitle: PCWSTR,
+ pszMainInstruction: PCWSTR,
+ pszContent: PCWSTR,
+ dwCommonButtons: TASKDIALOG_COMMON_BUTTON_FLAGS,
+ pszIcon: PCWSTR,
+ pnButton: *mut c_int,
+ ) -> HRESULT;
+ pub fn InitMUILanguage(
+ uiLang: LANGID,
+ );
+ pub fn GetMUILanguage() -> LANGID;
+ pub fn _TrackMouseEvent(
+ lpEventTrack: LPTRACKMOUSEEVENT,
+ ) -> BOOL;
+}
+pub const WSB_PROP_CYVSCROLL: UINT = 0x00000001;
+pub const WSB_PROP_CXHSCROLL: UINT = 0x00000002;
+pub const WSB_PROP_CYHSCROLL: UINT = 0x00000004;
+pub const WSB_PROP_CXVSCROLL: UINT = 0x00000008;
+pub const WSB_PROP_CXHTHUMB: UINT = 0x00000010;
+pub const WSB_PROP_CYVTHUMB: UINT = 0x00000020;
+pub const WSB_PROP_VBKGCOLOR: UINT = 0x00000040;
+pub const WSB_PROP_HBKGCOLOR: UINT = 0x00000080;
+pub const WSB_PROP_VSTYLE: UINT = 0x00000100;
+pub const WSB_PROP_HSTYLE: UINT = 0x00000200;
+pub const WSB_PROP_WINSTYLE: UINT = 0x00000400;
+pub const WSB_PROP_PALETTE: UINT = 0x00000800;
+pub const WSB_PROP_MASK: UINT = 0x00000FFF;
+pub const FSB_FLAT_MODE: INT_PTR = 2;
+pub const FSB_ENCARTA_MODE: INT_PTR = 1;
+pub const FSB_REGULAR_MODE: INT_PTR = 0;
+extern "system" {
+ pub fn FlatSB_EnableScrollBar(
+ hWnd: HWND,
+ wSBflags: c_int,
+ wArrows: UINT,
+ ) -> BOOL;
+ pub fn FlatSB_ShowScrollBar(
+ hWnd: HWND,
+ code: c_int,
+ fShow: BOOL,
+ ) -> BOOL;
+ pub fn FlatSB_GetScrollRange(
+ hWnd: HWND,
+ code: c_int,
+ lpMinPos: LPINT,
+ lpMaxPos: LPINT,
+ ) -> BOOL;
+ pub fn FlatSB_GetScrollInfo(
+ hwnd: HWND,
+ code: c_int,
+ lpsi: LPSCROLLINFO,
+ ) -> BOOL;
+ pub fn FlatSB_GetScrollPos(
+ hWnd: HWND,
+ code: c_int,
+ ) -> c_int;
+ pub fn FlatSB_GetScrollProp(hWnd: HWND,
+ propIndex: c_int,
+ pValue: LPINT,
+ ) -> BOOL;
+ #[cfg(target_pointer_width = "64")]
+ pub fn FlatSB_GetScrollPropPtr(
+ hWnd: HWND,
+ propIndex: c_int,
+ pValue: PINT_PTR,
+ ) -> BOOL;
+ pub fn FlatSB_SetScrollPos(
+ hWnd: HWND,
+ code: c_int,
+ pos: c_int,
+ fRedraw: BOOL,
+ ) -> c_int;
+ pub fn FlatSB_SetScrollInfo(
+ hWnd: HWND,
+ code: c_int,
+ psi: LPSCROLLINFO,
+ fRedraw: BOOL,
+ ) -> c_int;
+ pub fn FlatSB_SetScrollRange(
+ hWnd: HWND,
+ code: c_int,
+ min: c_int,
+ max: c_int,
+ fRedraw: BOOL,
+ ) -> c_int;
+ pub fn FlatSB_SetScrollProp(
+ hWnd: HWND,
+ index: UINT,
+ newValue: INT_PTR,
+ fRedraw: BOOL,
+ ) -> BOOL;
+ pub fn InitializeFlatSB(
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn UninitializeFlatSB(
+ hWnd: HWND,
+ ) -> HRESULT;
+}
+FN!{stdcall SUBCLASSPROC(
+ hWnd: HWND,
+ uMsg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ uIdSubclass: UINT_PTR,
+ dwRefData: DWORD_PTR,
+) -> LRESULT}
+extern "system" {
+ pub fn SetWindowSubclass(
+ hWnd: HWND,
+ pfnSubclass: SUBCLASSPROC,
+ uIdSubclass: UINT_PTR,
+ dwRefData: DWORD_PTR,
+ ) -> BOOL;
+ pub fn GetWindowSubclass(
+ hWnd: HWND,
+ pfnSubclass: SUBCLASSPROC,
+ uIdSubclass: UINT_PTR,
+ pdwRefData: *mut DWORD_PTR,
+ ) -> BOOL;
+ pub fn RemoveWindowSubclass(
+ hWnd: HWND,
+ pfnSubclass: SUBCLASSPROC,
+ uIdSubclass: UINT_PTR,
+ ) -> BOOL;
+ pub fn DefSubclassProc(
+ hWnd: HWND,
+ uMsg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LRESULT;
+}
+ENUM!{enum REGCLS {
+ LIM_SMALL,
+ LIM_LARGE,
+}}
+extern "system" {
+ pub fn LoadIconMetric(
+ hinst: HINSTANCE,
+ pszName: PCWSTR,
+ lims: c_int,
+ phico: *mut HICON,
+ ) -> HRESULT;
+ pub fn LoadIconWithScaleDown(
+ hinst: HINSTANCE,
+ pszName: PCWSTR,
+ cx: c_int,
+ cy: c_int,
+ phico: *mut HICON,
+ ) -> HRESULT;
+ pub fn DrawShadowText(
+ hdc: HDC,
+ pszText: LPCWSTR,
+ cch: UINT,
+ prc: *mut RECT,
+ dwFlags: DWORD,
+ crText: COLORREF,
+ crShadow: COLORREF,
+ ixOffset: c_int,
+ iyOffset: c_int,
+ ) -> c_int;
+}
diff --git a/vendor/winapi/src/um/commdlg.rs b/vendor/winapi/src/um/commdlg.rs
new file mode 100644
index 000000000..c9326a6fc
--- /dev/null
+++ b/vendor/winapi/src/um/commdlg.rs
@@ -0,0 +1,712 @@
+// 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.
+//! 32-Bit Common Dialog APIs
+use ctypes::{c_short, c_void};
+use shared::basetsd::UINT_PTR;
+use shared::minwindef::{
+ BOOL, DWORD, HGLOBAL, HINSTANCE, INT, LPARAM, LPVOID, LRESULT, UINT, WORD, WPARAM,
+};
+use shared::windef::{COLORREF, HDC, HWND, POINT, RECT};
+use um::prsht::HPROPSHEETPAGE;
+use um::unknwnbase::{IUnknown, IUnknownVtbl, LPUNKNOWN};
+use um::wingdi::{DM_COLLATE, DM_COPIES, LPDEVMODEW, LPLOGFONTA, LPLOGFONTW};
+use um::winnt::{HRESULT, LPCSTR, LPCWSTR, LPSTR, LPWSTR};
+use um::winuser::{NMHDR, WM_USER};
+FN!{stdcall LPOFNHOOKPROC(
+ HWND,
+ UINT,
+ WPARAM,
+ LPARAM,
+) -> UINT_PTR}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OPENFILENAME_NT4A {
+ lStructSize: DWORD,
+ hwndOwner: HWND,
+ hInstance: HINSTANCE,
+ lpstrFilter: LPCSTR,
+ lpstrCustomFilter: LPSTR,
+ nMaxCustFilter: DWORD,
+ nFilterIndex: DWORD,
+ lpstrFile: LPSTR,
+ nMaxFile: DWORD,
+ lpstrFileTitle: LPSTR,
+ nMaxFileTitle: DWORD,
+ lpstrInitialDir: LPCSTR,
+ lpstrTitle: LPCSTR,
+ Flags: DWORD,
+ nFileOffset: WORD,
+ nFileExtension: WORD,
+ lpstrDefExt: LPCSTR,
+ lCustData: LPARAM,
+ lpfnHook: LPOFNHOOKPROC,
+ lpTemplateName: LPCSTR,
+}}
+pub type LPOPENFILENAME_NT4A = *mut OPENFILENAME_NT4A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OPENFILENAME_NT4W {
+ lStructSize: DWORD,
+ hwndOwner: HWND,
+ hInstance: HINSTANCE,
+ lpstrFilter: LPCWSTR,
+ lpstrCustomFilter: LPWSTR,
+ nMaxCustFilter: DWORD,
+ nFilterIndex: DWORD,
+ lpstrFile: LPWSTR,
+ nMaxFile: DWORD,
+ lpstrFileTitle: LPWSTR,
+ nMaxFileTitle: DWORD,
+ lpstrInitialDir: LPCWSTR,
+ lpstrTitle: LPCWSTR,
+ Flags: DWORD,
+ nFileOffset: WORD,
+ nFileExtension: WORD,
+ lpstrDefExt: LPCWSTR,
+ lCustData: LPARAM,
+ lpfnHook: LPOFNHOOKPROC,
+ lpTemplateName: LPCWSTR,
+}}
+pub type LPOPENFILENAME_NT4W = *mut OPENFILENAME_NT4W;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OPENFILENAMEA {
+ lStructSize: DWORD,
+ hwndOwner: HWND,
+ hInstance: HINSTANCE,
+ lpstrFilter: LPCSTR,
+ lpstrCustomFilter: LPSTR,
+ nMaxCustFilter: DWORD,
+ nFilterIndex: DWORD,
+ lpstrFile: LPSTR,
+ nMaxFile: DWORD,
+ lpstrFileTitle: LPSTR,
+ nMaxFileTitle: DWORD,
+ lpstrInitialDir: LPCSTR,
+ lpstrTitle: LPCSTR,
+ Flags: DWORD,
+ nFileOffset: WORD,
+ nFileExtension: WORD,
+ lpstrDefExt: LPCSTR,
+ lCustData: LPARAM,
+ lpfnHook: LPOFNHOOKPROC,
+ lpTemplateName: LPCSTR,
+ pvReserved: *mut c_void,
+ dwReserved: DWORD,
+ FlagsEx: DWORD,
+}}
+pub type LPOPENFILENAMEA = *mut OPENFILENAMEA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OPENFILENAMEW {
+ lStructSize: DWORD,
+ hwndOwner: HWND,
+ hInstance: HINSTANCE,
+ lpstrFilter: LPCWSTR,
+ lpstrCustomFilter: LPWSTR,
+ nMaxCustFilter: DWORD,
+ nFilterIndex: DWORD,
+ lpstrFile: LPWSTR,
+ nMaxFile: DWORD,
+ lpstrFileTitle: LPWSTR,
+ nMaxFileTitle: DWORD,
+ lpstrInitialDir: LPCWSTR,
+ lpstrTitle: LPCWSTR,
+ Flags: DWORD,
+ nFileOffset: WORD,
+ nFileExtension: WORD,
+ lpstrDefExt: LPCWSTR,
+ lCustData: LPARAM,
+ lpfnHook: LPOFNHOOKPROC,
+ lpTemplateName: LPCWSTR,
+ pvReserved: *mut c_void,
+ dwReserved: DWORD,
+ FlagsEx: DWORD,
+}}
+pub type LPOPENFILENAMEW = *mut OPENFILENAMEW;
+extern "system" {
+ pub fn GetOpenFileNameA(
+ lpofn: LPOPENFILENAMEA,
+ ) -> BOOL;
+ pub fn GetOpenFileNameW(
+ lpofn: LPOPENFILENAMEW,
+ ) -> BOOL;
+ pub fn GetSaveFileNameA(
+ lpofn: LPOPENFILENAMEA,
+ ) -> BOOL;
+ pub fn GetSaveFileNameW(
+ lpofn: LPOPENFILENAMEW,
+ ) -> BOOL;
+ pub fn GetFileTitleA(
+ lpszFile: LPCSTR,
+ Buf: LPSTR,
+ cchSize: WORD,
+ ) -> c_short;
+ pub fn GetFileTitleW(
+ lpszFile: LPCWSTR,
+ Buf: LPWSTR,
+ cchSize: WORD,
+ ) -> c_short;
+}
+pub const OFN_READONLY: DWORD = 0x00000001;
+pub const OFN_OVERWRITEPROMPT: DWORD = 0x00000002;
+pub const OFN_HIDEREADONLY: DWORD = 0x00000004;
+pub const OFN_NOCHANGEDIR: DWORD = 0x00000008;
+pub const OFN_SHOWHELP: DWORD = 0x00000010;
+pub const OFN_ENABLEHOOK: DWORD = 0x00000020;
+pub const OFN_ENABLETEMPLATE: DWORD = 0x00000040;
+pub const OFN_ENABLETEMPLATEHANDLE: DWORD = 0x00000080;
+pub const OFN_NOVALIDATE: DWORD = 0x00000100;
+pub const OFN_ALLOWMULTISELECT: DWORD = 0x00000200;
+pub const OFN_EXTENSIONDIFFERENT: DWORD = 0x00000400;
+pub const OFN_PATHMUSTEXIST: DWORD = 0x00000800;
+pub const OFN_FILEMUSTEXIST: DWORD = 0x00001000;
+pub const OFN_CREATEPROMPT: DWORD = 0x00002000;
+pub const OFN_SHAREAWARE: DWORD = 0x00004000;
+pub const OFN_NOREADONLYRETURN: DWORD = 0x00008000;
+pub const OFN_NOTESTFILECREATE: DWORD = 0x00010000;
+pub const OFN_NONETWORKBUTTON: DWORD = 0x00020000;
+pub const OFN_NOLONGNAMES: DWORD = 0x00040000;
+pub const OFN_EXPLORER: DWORD = 0x00080000;
+pub const OFN_NODEREFERENCELINKS: DWORD = 0x00100000;
+pub const OFN_LONGNAMES: DWORD = 0x00200000;
+pub const OFN_ENABLEINCLUDENOTIFY: DWORD = 0x00400000;
+pub const OFN_ENABLESIZING: DWORD = 0x00800000;
+pub const OFN_DONTADDTORECENT: DWORD = 0x02000000;
+pub const OFN_FORCESHOWHIDDEN: DWORD = 0x10000000;
+pub const OFN_EX_NOPLACESBAR: DWORD = 0x00000001;
+pub const OFN_SHAREFALLTHROUGH: UINT_PTR = 2;
+pub const OFN_SHARENOWARN: UINT_PTR = 1;
+pub const OFN_SHAREWARN: UINT_PTR = 0;
+FN!{stdcall LPCCHOOKPROC(
+ HWND,
+ UINT,
+ WPARAM,
+ LPARAM,
+) -> UINT_PTR}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OFNOTIFYA {
+ hdr: NMHDR,
+ lpOFN: LPOPENFILENAMEA,
+ pszFile: LPSTR,
+}}
+pub type LPOFNOTIFYA = *mut OFNOTIFYA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OFNOTIFYW {
+ hdr: NMHDR,
+ lpOFN: LPOPENFILENAMEW,
+ pszFile: LPWSTR,
+}}
+pub type LPOFNOTIFYW = *mut OFNOTIFYW;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OFNOTIFYEXA {
+ hdr: NMHDR,
+ lpOFN: LPOPENFILENAMEA,
+ psf: LPVOID,
+ pidl: LPVOID,
+}}
+pub type LPOFNOTIFYEXA = *mut OFNOTIFYEXA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OFNOTIFYEXW {
+ hdr: NMHDR,
+ lpOFN: LPOPENFILENAMEW,
+ psf: LPVOID,
+ pidl: LPVOID,
+}}
+pub type LPOFNOTIFYEXW = *mut OFNOTIFYEXW;
+pub const CDN_FIRST: UINT = -601i32 as u32;
+pub const CDN_LAST: UINT = -699i32 as u32;
+pub const CDN_INITDONE: UINT = CDN_FIRST - 0x0000;
+pub const CDN_SELCHANGE: UINT = CDN_FIRST - 0x0001;
+pub const CDN_FOLDERCHANGE: UINT = CDN_FIRST - 0x0002;
+pub const CDN_SHAREVIOLATION: UINT = CDN_FIRST - 0x0003;
+pub const CDN_HELP: UINT = CDN_FIRST - 0x0004;
+pub const CDN_FILEOK: UINT = CDN_FIRST - 0x0005;
+pub const CDN_TYPECHANGE: UINT = CDN_FIRST - 0x0006;
+pub const CDN_INCLUDEITEM: UINT = CDN_FIRST - 0x0007;
+pub const CDM_FIRST: UINT = WM_USER + 100;
+pub const CDM_LAST: UINT = WM_USER + 200;
+pub const CDM_GETSPEC: UINT = CDM_FIRST + 0x0000;
+pub const CDM_GETFILEPATH: UINT = CDM_FIRST + 0x0001;
+pub const CDM_GETFOLDERPATH: UINT = CDM_FIRST + 0x0002;
+pub const CDM_GETFOLDERIDLIST: UINT = CDM_FIRST + 0x0003;
+pub const CDM_SETCONTROLTEXT: UINT = CDM_FIRST + 0x0004;
+pub const CDM_HIDECONTROL: UINT = CDM_FIRST + 0x0005;
+pub const CDM_SETDEFEXT: UINT = CDM_FIRST + 0x0006;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct CHOOSECOLORA {
+ lStructSize: DWORD,
+ hwndOwner: HWND,
+ hInstance: HWND,
+ rgbResult: COLORREF,
+ lpCustColors: *mut COLORREF,
+ Flags: DWORD,
+ lCustData: LPARAM,
+ lpfnHook: LPCCHOOKPROC,
+ lpTemplateName: LPCSTR,
+}}
+pub type LPCHOOSECOLORA = *mut CHOOSECOLORA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct CHOOSECOLORW {
+ lStructSize: DWORD,
+ hwndOwner: HWND,
+ hInstance: HWND,
+ rgbResult: COLORREF,
+ lpCustColors: *mut COLORREF,
+ Flags: DWORD,
+ lCustData: LPARAM,
+ lpfnHook: LPCCHOOKPROC,
+ lpTemplateName: LPCWSTR,
+}}
+pub type LPCHOOSECOLORW = *mut CHOOSECOLORW;
+extern "system" {
+ pub fn ChooseColorA(
+ lpcc: LPCHOOSECOLORA,
+ ) -> BOOL;
+ pub fn ChooseColorW(
+ lpcc: LPCHOOSECOLORW,
+ ) -> BOOL;
+}
+pub const CC_RGBINIT: DWORD = 0x00000001;
+pub const CC_FULLOPEN: DWORD = 0x00000002;
+pub const CC_PREVENTFULLOPEN: DWORD = 0x00000004;
+pub const CC_SHOWHELP: DWORD = 0x00000008;
+pub const CC_ENABLEHOOK: DWORD = 0x00000010;
+pub const CC_ENABLETEMPLATE: DWORD = 0x00000020;
+pub const CC_ENABLETEMPLATEHANDLE: DWORD = 0x00000040;
+pub const CC_SOLIDCOLOR: DWORD = 0x00000080;
+pub const CC_ANYCOLOR: DWORD = 0x00000100;
+FN!{stdcall LPFRHOOKPROC(
+ HWND,
+ UINT,
+ WPARAM,
+ LPARAM,
+) -> UINT_PTR}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FINDREPLACEA {
+ lStructSize: DWORD,
+ hwndOwner: HWND,
+ hInstance: HINSTANCE,
+ Flags: DWORD,
+ lpstrFindWhat: LPSTR,
+ lpstrReplaceWith: LPSTR,
+ wFindWhatLen: WORD,
+ wReplaceWithLen: WORD,
+ lCustData: LPARAM,
+ lpfnHook: LPFRHOOKPROC,
+ lpTemplateName: LPCSTR,
+}}
+pub type LPFINDREPLACEA = *mut FINDREPLACEA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FINDREPLACEW {
+ lStructSize: DWORD,
+ hwndOwner: HWND,
+ hInstance: HINSTANCE,
+ Flags: DWORD,
+ lpstrFindWhat: LPWSTR,
+ lpstrReplaceWith: LPWSTR,
+ wFindWhatLen: WORD,
+ wReplaceWithLen: WORD,
+ lCustData: LPARAM,
+ lpfnHook: LPFRHOOKPROC,
+ lpTemplateName: LPCWSTR,
+}}
+pub type LPFINDREPLACEW = *mut FINDREPLACEW;
+pub const FR_DOWN: DWORD = 0x00000001;
+pub const FR_WHOLEWORD: DWORD = 0x00000002;
+pub const FR_MATCHCASE: DWORD = 0x00000004;
+pub const FR_FINDNEXT: DWORD = 0x00000008;
+pub const FR_REPLACE: DWORD = 0x00000010;
+pub const FR_REPLACEALL: DWORD = 0x00000020;
+pub const FR_DIALOGTERM: DWORD = 0x00000040;
+pub const FR_SHOWHELP: DWORD = 0x00000080;
+pub const FR_ENABLEHOOK: DWORD = 0x00000100;
+pub const FR_ENABLETEMPLATE: DWORD = 0x00000200;
+pub const FR_NOUPDOWN: DWORD = 0x00000400;
+pub const FR_NOMATCHCASE: DWORD = 0x00000800;
+pub const FR_NOWHOLEWORD: DWORD = 0x00001000;
+pub const FR_ENABLETEMPLATEHANDLE: DWORD = 0x00002000;
+pub const FR_HIDEUPDOWN: DWORD = 0x00004000;
+pub const FR_HIDEMATCHCASE: DWORD = 0x00008000;
+pub const FR_HIDEWHOLEWORD: DWORD = 0x00010000;
+pub const FR_RAW: DWORD = 0x00020000;
+pub const FR_MATCHDIAC: DWORD = 0x20000000;
+pub const FR_MATCHKASHIDA: DWORD = 0x40000000;
+pub const FR_MATCHALEFHAMZA: DWORD = 0x80000000;
+extern "system" {
+ pub fn FindTextA(
+ lpfr: LPFINDREPLACEA,
+ ) -> HWND;
+ pub fn FindTextW(
+ lpfr: LPFINDREPLACEW,
+ ) -> HWND;
+ pub fn ReplaceTextA(
+ lpfr: LPFINDREPLACEA,
+ ) -> HWND;
+ pub fn ReplaceTextW(
+ lpfr: LPFINDREPLACEW,
+ ) -> HWND;
+}
+FN!{stdcall LPCFHOOKPROC(
+ HWND,
+ UINT,
+ WPARAM,
+ LPARAM,
+) -> UINT_PTR}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct CHOOSEFONTA {
+ lStructSize: DWORD,
+ hwndOwner: HWND,
+ hDC: HDC,
+ lpLogFont: LPLOGFONTA,
+ iPointSize: INT,
+ Flags: DWORD,
+ rgbColors: COLORREF,
+ lCustData: LPARAM,
+ lpfnHook: LPCFHOOKPROC,
+ lpTemplateName: LPCSTR,
+ hInstance: HINSTANCE,
+ lpszStyle: LPSTR,
+ nFontType: WORD,
+ ___MISSING_ALIGNMENT__: WORD,
+ nSizeMin: INT,
+ nSizeMax: INT,
+}}
+pub type LPCHOOSEFONTA = *mut CHOOSEFONTA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct CHOOSEFONTW {
+ lStructSize: DWORD,
+ hwndOwner: HWND,
+ hDC: HDC,
+ lpLogFont: LPLOGFONTW,
+ iPointSize: INT,
+ Flags: DWORD,
+ rgbColors: COLORREF,
+ lCustData: LPARAM,
+ lpfnHook: LPCFHOOKPROC,
+ lpTemplateName: LPCWSTR,
+ hInstance: HINSTANCE,
+ lpszStyle: LPWSTR,
+ nFontType: WORD,
+ ___MISSING_ALIGNMENT__: WORD,
+ nSizeMin: INT,
+ nSizeMax: INT,
+}}
+pub type LPCHOOSEFONTW = *mut CHOOSEFONTW;
+extern "system" {
+ pub fn ChooseFontA(
+ lpcf: LPCHOOSEFONTA,
+ ) -> BOOL;
+ pub fn ChooseFontW(
+ lpcf: LPCHOOSEFONTW,
+ ) -> BOOL;
+}
+pub const CF_SCREENFONTS: DWORD = 0x00000001;
+pub const CF_PRINTERFONTS: DWORD = 0x00000002;
+pub const CF_BOTH: DWORD = CF_SCREENFONTS | CF_PRINTERFONTS;
+pub const CF_SHOWHELP: DWORD = 0x00000004;
+pub const CF_ENABLEHOOK: DWORD = 0x00000008;
+pub const CF_ENABLETEMPLATE: DWORD = 0x00000010;
+pub const CF_ENABLETEMPLATEHANDLE: DWORD = 0x00000020;
+pub const CF_INITTOLOGFONTSTRUCT: DWORD = 0x00000040;
+pub const CF_USESTYLE: DWORD = 0x00000080;
+pub const CF_EFFECTS: DWORD = 0x00000100;
+pub const CF_APPLY: DWORD = 0x00000200;
+pub const CF_ANSIONLY: DWORD = 0x00000400;
+pub const CF_SCRIPTSONLY: DWORD = CF_ANSIONLY;
+pub const CF_NOVECTORFONTS: DWORD = 0x00000800;
+pub const CF_NOOEMFONTS: DWORD = CF_NOVECTORFONTS;
+pub const CF_NOSIMULATIONS: DWORD = 0x00001000;
+pub const CF_LIMITSIZE: DWORD = 0x00002000;
+pub const CF_FIXEDPITCHONLY: DWORD = 0x00004000;
+pub const CF_WYSIWYG: DWORD = 0x00008000;
+pub const CF_FORCEFONTEXIST: DWORD = 0x00010000;
+pub const CF_SCALABLEONLY: DWORD = 0x00020000;
+pub const CF_TTONLY: DWORD = 0x00040000;
+pub const CF_NOFACESEL: DWORD = 0x00080000;
+pub const CF_NOSTYLESEL: DWORD = 0x00100000;
+pub const CF_NOSIZESEL: DWORD = 0x00200000;
+pub const CF_SELECTSCRIPT: DWORD = 0x00400000;
+pub const CF_NOSCRIPTSEL: DWORD = 0x00800000;
+pub const CF_NOVERTFONTS: DWORD = 0x01000000;
+pub const CF_INACTIVEFONTS: DWORD = 0x02000000;
+pub const SIMULATED_FONTTYPE: WORD = 0x8000;
+pub const PRINTER_FONTTYPE: WORD = 0x4000;
+pub const SCREEN_FONTTYPE: WORD = 0x2000;
+pub const BOLD_FONTTYPE: WORD = 0x0100;
+pub const ITALIC_FONTTYPE: WORD = 0x0200;
+pub const REGULAR_FONTTYPE: WORD = 0x0400;
+pub const PS_OPENTYPE_FONTTYPE: DWORD = 0x10000;
+pub const TT_OPENTYPE_FONTTYPE: DWORD = 0x20000;
+pub const TYPE1_FONTTYPE: DWORD = 0x40000;
+pub const SYMBOL_FONTTYPE: DWORD = 0x80000;
+pub const WM_CHOOSEFONT_GETLOGFONT: UINT = WM_USER + 1;
+pub const WM_CHOOSEFONT_SETLOGFONT: UINT = WM_USER + 101;
+pub const WM_CHOOSEFONT_SETFLAGS: UINT = WM_USER + 102;
+pub const CD_LBSELNOITEMS: WORD = -1i16 as u16;
+pub const CD_LBSELCHANGE: WORD = 0;
+pub const CD_LBSELSUB: WORD = 1;
+pub const CD_LBSELADD: WORD = 2;
+FN!{stdcall LPPRINTHOOKPROC(
+ HWND,
+ UINT,
+ WPARAM,
+ LPARAM,
+) -> UINT_PTR}
+FN!{stdcall LPSETUPHOOKPROC(
+ HWND,
+ UINT,
+ WPARAM,
+ LPARAM,
+) -> UINT_PTR}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct PRINTDLGA {
+ lStructSize: DWORD,
+ hwndOwner: HWND,
+ hDevMode: HGLOBAL,
+ hDevNames: HGLOBAL,
+ hDC: HDC,
+ Flags: DWORD,
+ nFromPage: WORD,
+ nToPage: WORD,
+ nMinPage: WORD,
+ nMaxPage: WORD,
+ nCopies: WORD,
+ hInstance: HINSTANCE,
+ lCustData: LPARAM,
+ lpfnPrintHook: LPPRINTHOOKPROC,
+ lpfnSetupHook: LPSETUPHOOKPROC,
+ lpPrintTemplateName: LPCSTR,
+ lpSetupTemplateName: LPCSTR,
+ hPrintTemplate: HGLOBAL,
+ hSetupTemplate: HGLOBAL,
+}}
+pub type LPPRINTDLGA = *mut PRINTDLGA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct PRINTDLGW {
+ lStructSize: DWORD,
+ hwndOwner: HWND,
+ hDevMode: HGLOBAL,
+ hDevNames: HGLOBAL,
+ hDC: HDC,
+ Flags: DWORD,
+ nFromPage: WORD,
+ nToPage: WORD,
+ nMinPage: WORD,
+ nMaxPage: WORD,
+ nCopies: WORD,
+ hInstance: HINSTANCE,
+ lCustData: LPARAM,
+ lpfnPrintHook: LPPRINTHOOKPROC,
+ lpfnSetupHook: LPSETUPHOOKPROC,
+ lpPrintTemplateName: LPCWSTR,
+ lpSetupTemplateName: LPCWSTR,
+ hPrintTemplate: HGLOBAL,
+ hSetupTemplate: HGLOBAL,
+}}
+pub type LPPRINTDLGW = *mut PRINTDLGW;
+extern "system" {
+ pub fn PrintDlgA(
+ pPD: LPPRINTDLGA,
+ ) -> BOOL;
+ pub fn PrintDlgW(
+ pPD: LPPRINTDLGW,
+ ) -> BOOL;
+}
+RIDL!{#[uuid(0x5852a2c3, 0x6530, 0x11d1, 0xb6, 0xa3, 0x0, 0x0, 0xf8, 0x75, 0x7b, 0xf9)]
+interface IPrintDialogCallback(IPrintDialogCallbackVtbl): IUnknown(IUnknownVtbl) {
+ fn InitDone() -> HRESULT,
+ fn SelectionChange() -> HRESULT,
+ fn HandleMessage(
+ hDlg: HWND,
+ uMsg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ pResult: *mut LRESULT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x509aaeda, 0x5639, 0x11d1, 0xb6, 0xa1, 0x0, 0x0, 0xf8, 0x75, 0x7b, 0xf9)]
+interface IPrintDialogServices(IPrintDialogServicesVtbl): IUnknown(IUnknownVtbl) {
+ fn GetCurrentDevMode(
+ pDevMode: LPDEVMODEW,
+ pcbSize: *mut UINT,
+ ) -> HRESULT,
+ fn GetCurrentPrinterName(
+ pPrinterName: LPWSTR,
+ pcchSize: *mut UINT,
+ ) -> HRESULT,
+ fn GetCurrentPortName(
+ pPortName: LPWSTR,
+ pcchSize: *mut UINT,
+ ) -> HRESULT,
+}}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct PRINTPAGERANGE {
+ nFromPage: DWORD,
+ nToPage: DWORD,
+}}
+pub type LPPRINTPAGERANGE = *mut PRINTPAGERANGE;
+pub type PCPRINTPAGERANGE = *const PRINTPAGERANGE;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct PRINTDLGEXA {
+ lStructSize: DWORD,
+ hwndOwner: HWND,
+ hDevMode: HGLOBAL,
+ hDevNames: HGLOBAL,
+ hDC: HDC,
+ Flags: DWORD,
+ Flags2: DWORD,
+ ExclusionFlags: DWORD,
+ nPageRanges: DWORD,
+ nMaxPageRanges: DWORD,
+ lpPageRanges: LPPRINTPAGERANGE,
+ nMinPage: DWORD,
+ nMaxPage: DWORD,
+ nCopies: DWORD,
+ hInstance: HINSTANCE,
+ lpPrintTemplateName: LPCSTR,
+ lpCallback: LPUNKNOWN,
+ nPropertyPages: DWORD,
+ lphPropertyPages: *mut HPROPSHEETPAGE,
+ nStartPage: DWORD,
+ dwResultAction: DWORD,
+}}
+pub type LPPRINTDLGEXA = *mut PRINTDLGEXA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct PRINTDLGEXW {
+ lStructSize: DWORD,
+ hwndOwner: HWND,
+ hDevMode: HGLOBAL,
+ hDevNames: HGLOBAL,
+ hDC: HDC,
+ Flags: DWORD,
+ Flags2: DWORD,
+ ExclusionFlags: DWORD,
+ nPageRanges: DWORD,
+ nMaxPageRanges: DWORD,
+ lpPageRanges: LPPRINTPAGERANGE,
+ nMinPage: DWORD,
+ nMaxPage: DWORD,
+ nCopies: DWORD,
+ hInstance: HINSTANCE,
+ lpPrintTemplateName: LPCWSTR,
+ lpCallback: LPUNKNOWN,
+ nPropertyPages: DWORD,
+ lphPropertyPages: *mut HPROPSHEETPAGE,
+ nStartPage: DWORD,
+ dwResultAction: DWORD,
+}}
+pub type LPPRINTDLGEXW = *mut PRINTDLGEXW;
+extern "system" {
+ pub fn PrintDlgExA(
+ pPD: LPPRINTDLGEXA,
+ ) -> HRESULT;
+ pub fn PrintDlgExW(
+ pPD: LPPRINTDLGEXW,
+ ) -> HRESULT;
+}
+pub const PD_ALLPAGES: DWORD = 0x00000000;
+pub const PD_SELECTION: DWORD = 0x00000001;
+pub const PD_PAGENUMS: DWORD = 0x00000002;
+pub const PD_NOSELECTION: DWORD = 0x00000004;
+pub const PD_NOPAGENUMS: DWORD = 0x00000008;
+pub const PD_COLLATE: DWORD = 0x00000010;
+pub const PD_PRINTTOFILE: DWORD = 0x00000020;
+pub const PD_PRINTSETUP: DWORD = 0x00000040;
+pub const PD_NOWARNING: DWORD = 0x00000080;
+pub const PD_RETURNDC: DWORD = 0x00000100;
+pub const PD_RETURNIC: DWORD = 0x00000200;
+pub const PD_RETURNDEFAULT: DWORD = 0x00000400;
+pub const PD_SHOWHELP: DWORD = 0x00000800;
+pub const PD_ENABLEPRINTHOOK: DWORD = 0x00001000;
+pub const PD_ENABLESETUPHOOK: DWORD = 0x00002000;
+pub const PD_ENABLEPRINTTEMPLATE: DWORD = 0x00004000;
+pub const PD_ENABLESETUPTEMPLATE: DWORD = 0x00008000;
+pub const PD_ENABLEPRINTTEMPLATEHANDLE: DWORD = 0x00010000;
+pub const PD_ENABLESETUPTEMPLATEHANDLE: DWORD = 0x00020000;
+pub const PD_USEDEVMODECOPIES: DWORD = 0x00040000;
+pub const PD_USEDEVMODECOPIESANDCOLLATE: DWORD = 0x00040000;
+pub const PD_DISABLEPRINTTOFILE: DWORD = 0x00080000;
+pub const PD_HIDEPRINTTOFILE: DWORD = 0x00100000;
+pub const PD_NONETWORKBUTTON: DWORD = 0x00200000;
+pub const PD_CURRENTPAGE: DWORD = 0x00400000;
+pub const PD_NOCURRENTPAGE: DWORD = 0x00800000;
+pub const PD_EXCLUSIONFLAGS: DWORD = 0x01000000;
+pub const PD_USELARGETEMPLATE: DWORD = 0x10000000;
+pub const PD_EXCL_COPIESANDCOLLATE: DWORD = DM_COPIES | DM_COLLATE;
+pub const START_PAGE_GENERAL: DWORD = 0xffffffff;
+pub const PD_RESULT_CANCEL: DWORD = 0;
+pub const PD_RESULT_PRINT: DWORD = 1;
+pub const PD_RESULT_APPLY: DWORD = 2;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct DEVNAMES {
+ wDriverOffset: WORD,
+ wDeviceOffset: WORD,
+ wOutputOffset: WORD,
+ wDefault: WORD,
+}}
+pub type LPDEVNAMES = *mut DEVNAMES;
+pub type PCDEVNAMES = *const DEVNAMES;
+pub const DN_DEFAULTPRN: WORD = 0x0001;
+extern "system" {
+ pub fn CommDlgExtendedError() -> DWORD;
+}
+pub const WM_PSD_PAGESETUPDLG: UINT = WM_USER;
+pub const WM_PSD_FULLPAGERECT: UINT = WM_USER + 1;
+pub const WM_PSD_MINMARGINRECT: UINT = WM_USER + 2;
+pub const WM_PSD_MARGINRECT: UINT = WM_USER + 3;
+pub const WM_PSD_GREEKTEXTRECT: UINT = WM_USER + 4;
+pub const WM_PSD_ENVSTAMPRECT: UINT = WM_USER + 5;
+pub const WM_PSD_YAFULLPAGERECT: UINT = WM_USER + 6;
+FN!{stdcall LPPAGEPAINTHOOK(
+ HWND,
+ UINT,
+ WPARAM,
+ LPARAM,
+) -> UINT_PTR}
+FN!{stdcall LPPAGESETUPHOOK(
+ HWND,
+ UINT,
+ WPARAM,
+ LPARAM,
+) -> UINT_PTR}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct PAGESETUPDLGA {
+ lStructSize: DWORD,
+ hwndOwner: HWND,
+ hDevMode: HGLOBAL,
+ hDevNames: HGLOBAL,
+ Flags: DWORD,
+ ptPaperSize: POINT,
+ rtMinMargin: RECT,
+ rtMargin: RECT,
+ hInstance: HINSTANCE,
+ lCustData: LPARAM,
+ lpfnPageSetupHook: LPPAGESETUPHOOK,
+ lpfnPagePaintHook: LPPAGEPAINTHOOK,
+ lpPageSetupTemplateName: LPCSTR,
+ hPageSetupTemplate: HGLOBAL,
+}}
+pub type LPPAGESETUPDLGA = *mut PAGESETUPDLGA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct PAGESETUPDLGW {
+ lStructSize: DWORD,
+ hwndOwner: HWND,
+ hDevMode: HGLOBAL,
+ hDevNames: HGLOBAL,
+ Flags: DWORD,
+ ptPaperSize: POINT,
+ rtMinMargin: RECT,
+ rtMargin: RECT,
+ hInstance: HINSTANCE,
+ lCustData: LPARAM,
+ lpfnPageSetupHook: LPPAGESETUPHOOK,
+ lpfnPagePaintHook: LPPAGEPAINTHOOK,
+ lpPageSetupTemplateName: LPCWSTR,
+ hPageSetupTemplate: HGLOBAL,
+}}
+pub type LPPAGESETUPDLGW = *mut PAGESETUPDLGW;
+extern "system" {
+ pub fn PageSetupDlgA(
+ lppsd: LPPAGESETUPDLGA,
+ ) -> BOOL;
+ pub fn PageSetupDlgW(
+ lppsd: LPPAGESETUPDLGW,
+ ) -> BOOL;
+}
+pub const PSD_DEFAULTMINMARGINS: DWORD = 0x00000000;
+pub const PSD_INWININIINTLMEASURE: DWORD = 0x00000000;
+pub const PSD_MINMARGINS: DWORD = 0x00000001;
+pub const PSD_MARGINS: DWORD = 0x00000002;
+pub const PSD_INTHOUSANDTHSOFINCHES: DWORD = 0x00000004;
+pub const PSD_INHUNDREDTHSOFMILLIMETERS: DWORD = 0x00000008;
+pub const PSD_DISABLEMARGINS: DWORD = 0x00000010;
+pub const PSD_DISABLEPRINTER: DWORD = 0x00000020;
+pub const PSD_NOWARNING: DWORD = 0x00000080;
+pub const PSD_DISABLEORIENTATION: DWORD = 0x00000100;
+pub const PSD_RETURNDEFAULT: DWORD = 0x00000400;
+pub const PSD_DISABLEPAPER: DWORD = 0x00000200;
+pub const PSD_SHOWHELP: DWORD = 0x00000800;
+pub const PSD_ENABLEPAGESETUPHOOK: DWORD = 0x00002000;
+pub const PSD_ENABLEPAGESETUPTEMPLATE: DWORD = 0x00008000;
+pub const PSD_ENABLEPAGESETUPTEMPLATEHANDLE: DWORD = 0x00020000;
+pub const PSD_ENABLEPAGEPAINTHOOK: DWORD = 0x00040000;
+pub const PSD_DISABLEPAGEPAINTING: DWORD = 0x00080000;
+pub const PSD_NONETWORKBUTTON: DWORD = 0x00200000;
diff --git a/vendor/winapi/src/um/commoncontrols.rs b/vendor/winapi/src/um/commoncontrols.rs
new file mode 100644
index 000000000..d659e046a
--- /dev/null
+++ b/vendor/winapi/src/um/commoncontrols.rs
@@ -0,0 +1,232 @@
+// 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 ctypes::{c_int, c_void};
+use shared::guiddef::{REFCLSID, REFIID};
+use shared::minwindef::{BOOL, DWORD, LRESULT, UINT};
+use shared::windef::{COLORREF, HBITMAP, HICON, HWND, POINT, RECT};
+use um::commctrl::{IMAGEINFO, IMAGELISTDRAWPARAMS};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::HRESULT;
+extern "system" {
+ pub fn ImageList_CoCreateInstance(
+ rclsid: REFCLSID,
+ punkOuter: *const IUnknown,
+ riid: REFIID,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT;
+}
+pub const ILIF_ALPHA: DWORD = 0x00000001;
+pub const ILIF_LOWQUALITY: DWORD = 0x00000001;
+pub const ILDRF_IMAGELOWQUALITY: LRESULT = 0x00000001;
+pub const ILDRF_OVERLAYLOWQUALITY: LRESULT = 0x00000010;
+RIDL!{#[uuid(0x46eb5926, 0x582e, 0x4017, 0x9f, 0xdf, 0xe8, 0x99, 0x8d, 0xaa, 0x09, 0x50)]
+interface IImageList(IImageListVtbl): IUnknown(IUnknownVtbl) {
+ fn Add(
+ hbmImage: HBITMAP,
+ hbmMask: HBITMAP,
+ pi: *mut c_int,
+ ) -> HRESULT,
+ fn ReplaceIcon(
+ hicon: HICON,
+ pi: *mut c_int,
+ ) -> HRESULT,
+ fn SetOverlayImage(
+ iImage: c_int,
+ iOverlay: c_int,
+ ) -> HRESULT,
+ fn Replace(
+ hbmImage: HBITMAP,
+ hbmMask: HBITMAP,
+ ) -> HRESULT,
+ fn AddMasked(
+ hbmImage: HBITMAP,
+ crMask: COLORREF,
+ pi: *mut c_int,
+ ) -> HRESULT,
+ fn Draw(
+ pimldp: *mut IMAGELISTDRAWPARAMS,
+ ) -> HRESULT,
+ fn Remove(
+ i: c_int,
+ ) -> HRESULT,
+ fn GetIcon(
+ i: c_int,
+ flags: UINT,
+ picon: *mut HICON,
+ ) -> HRESULT,
+ fn GetImageInfo(
+ i: c_int,
+ pImageInfo: *mut IMAGEINFO,
+ ) -> HRESULT,
+ fn Copy(
+ iDst: c_int,
+ punkSrc: *mut IUnknown,
+ iSrc: c_int,
+ uFlags: UINT,
+ ) -> HRESULT,
+ fn Merge(
+ i1: c_int,
+ punk2: *mut IUnknown,
+ i2: c_int,
+ dx: c_int,
+ dy: c_int,
+ riid: REFIID,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT,
+ fn Clone(
+ riid: REFIID,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT,
+ fn GetImageRect(
+ i: c_int,
+ prc: *mut RECT,
+ ) -> HRESULT,
+ fn GetIconSize(
+ cx: *mut c_int,
+ cy: *mut c_int,
+ ) -> HRESULT,
+ fn SetIconSize(
+ cx: c_int,
+ cy: c_int,
+ ) -> HRESULT,
+ fn GetImageCount(
+ pi: *mut c_int,
+ ) -> HRESULT,
+ fn SetImageCount(
+ uNewCount: UINT,
+ ) -> HRESULT,
+ fn SetBkColor(
+ clrBk: COLORREF,
+ pclr: *mut COLORREF,
+ ) -> HRESULT,
+ fn GetBkColor(
+ pclr: *mut COLORREF,
+ ) -> HRESULT,
+ fn BeginDrag(
+ iTrack: c_int,
+ dxHotspot: c_int,
+ dyHotspot: c_int,
+ ) -> HRESULT,
+ fn EndDrag() -> HRESULT,
+ fn DragEnter(
+ hwndLock: HWND,
+ x: c_int,
+ y: c_int,
+ ) -> HRESULT,
+ fn DragLeave(
+ hwndLock: HWND,
+ ) -> HRESULT,
+ fn DragMove(
+ x: c_int,
+ y: c_int,
+ ) -> HRESULT,
+ fn SetDragCursorImage(
+ punk: *mut IUnknown,
+ iDrag: c_int,
+ dxHotspot: c_int,
+ dyHotspot: c_int,
+ ) -> HRESULT,
+ fn DragShowNolock(
+ fShow: BOOL,
+ ) -> HRESULT,
+ fn GetDragImage(
+ ppt: *mut POINT,
+ pptHotspot: *mut POINT,
+ riid: REFIID,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT,
+ fn GetItemFlags(
+ dwFlags: *mut DWORD,
+ ) -> HRESULT,
+ fn GetOverlayImage(
+ iOverlay: c_int,
+ piIndex: *mut c_int,
+ ) -> HRESULT,
+}}
+pub const ILR_DEFAULT: DWORD = 0x0000;
+pub const ILR_HORIZONTAL_LEFT: DWORD = 0x0000;
+pub const ILR_HORIZONTAL_CENTER: DWORD = 0x0001;
+pub const ILR_HORIZONTAL_RIGHT: DWORD = 0x0002;
+pub const ILR_VERTICAL_TOP: DWORD = 0x0000;
+pub const ILR_VERTICAL_CENTER: DWORD = 0x0010;
+pub const ILR_VERTICAL_BOTTOM: DWORD = 0x0020;
+pub const ILR_SCALE_CLIP: DWORD = 0x0000;
+pub const ILR_SCALE_ASPECTRATIO: DWORD = 0x0100;
+pub const ILGOS_ALWAYS: DWORD = 0x00000000;
+pub const ILGOS_FROMSTANDBY: DWORD = 0x00000001;
+pub const ILFIP_ALWAYS: DWORD = 0x00000000;
+pub const ILFIP_FROMSTANDBY: DWORD = 0x00000001;
+pub const ILDI_PURGE: DWORD = 0x00000001;
+pub const ILDI_STANDBY: DWORD = 0x00000002;
+pub const ILDI_RESETACCESS: DWORD = 0x00000004;
+pub const ILDI_QUERYACCESS: DWORD = 0x00000008;
+STRUCT!{struct IMAGELISTSTATS {
+ cbSize: DWORD,
+ cAlloc: c_int,
+ cUsed: c_int,
+ cStandby: c_int,
+}}
+RIDL!{#[uuid(0x192b9d83, 0x58fc, 0x457b, 0x90, 0xa0, 0x2b, 0x82, 0xa8, 0xb5, 0xda, 0xe1)]
+interface IImageList2(IImageList2Vtbl): IImageList(IImageListVtbl) {
+ fn Resize(
+ cxNewIconSize: c_int,
+ cyNewIconSize: c_int,
+ ) -> HRESULT,
+ fn GetOriginalSize(
+ iImage: c_int,
+ dwFlags: DWORD,
+ pcx: *mut c_int,
+ pcy: *mut c_int,
+ ) -> HRESULT,
+ fn SetOriginalSize(
+ iImage: c_int,
+ cx: c_int,
+ cy: c_int,
+ ) -> HRESULT,
+ fn SetCallback(
+ punk: *mut IUnknown,
+ ) -> HRESULT,
+ fn GetCallback(
+ riid: REFIID,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT,
+ fn ForceImagePresent(
+ iImage: c_int,
+ dwFlags: DWORD,
+ ) -> HRESULT,
+ fn DiscardImages(
+ iFirstImage: c_int,
+ iLastImage: c_int,
+ dwFlags: DWORD,
+ ) -> HRESULT,
+ fn PreloadImages(
+ pimldp: *mut IMAGELISTDRAWPARAMS,
+ ) -> HRESULT,
+ fn GetStatistics(
+ pils: *mut IMAGELISTSTATS,
+ ) -> HRESULT,
+ fn Initialize(
+ cx: c_int,
+ cy: c_int,
+ flags: UINT,
+ cInitial: c_int,
+ cGrow: c_int,
+ ) -> HRESULT,
+ fn Replace2(
+ i: c_int,
+ hbmImage: HBITMAP,
+ hbmMask: HBITMAP,
+ punk: *mut IUnknown,
+ dwFlags: DWORD,
+ ) -> HRESULT,
+ fn ReplaceFromImageList(
+ i: c_int,
+ pil: *mut IImageList,
+ iSrc: c_int,
+ punk: *mut IUnknown,
+ dwFlags: DWORD,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/consoleapi.rs b/vendor/winapi/src/um/consoleapi.rs
new file mode 100644
index 000000000..3f5496b95
--- /dev/null
+++ b/vendor/winapi/src/um/consoleapi.rs
@@ -0,0 +1,91 @@
+// 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.
+//! ApiSet Contract for api-ms-win-core-console-l1
+use shared::minwindef::{BOOL, DWORD, LPDWORD, LPVOID, UINT};
+use um::wincon::{PCONSOLE_READCONSOLE_CONTROL, PHANDLER_ROUTINE};
+use um::wincontypes::{COORD, HPCON, PINPUT_RECORD};
+use um::winnt::{HANDLE, HRESULT, VOID};
+extern "system" {
+ pub fn AllocConsole() -> BOOL;
+ pub fn GetConsoleCP() -> UINT;
+ pub fn GetConsoleMode(
+ hConsoleHandle: HANDLE,
+ lpMode: LPDWORD,
+ ) -> BOOL;
+ pub fn GetConsoleOutputCP() -> UINT;
+ pub fn GetNumberOfConsoleInputEvents(
+ hConsoleInput: HANDLE,
+ lpNumberOfEvents: LPDWORD,
+ ) -> BOOL;
+ pub fn PeekConsoleInputA(
+ hConsoleInput: HANDLE,
+ lpBuffer: PINPUT_RECORD,
+ nLength: DWORD,
+ lpNumberOfEventsRead: LPDWORD,
+ ) -> BOOL;
+ pub fn ReadConsoleA(
+ hConsoleInput: HANDLE,
+ lpBuffer: LPVOID,
+ nNumberOfCharsToRead: DWORD,
+ lpNumberOfCharsRead: LPDWORD,
+ pInputControl: PCONSOLE_READCONSOLE_CONTROL,
+ ) -> BOOL;
+ pub fn ReadConsoleW(
+ hConsoleInput: HANDLE,
+ lpBuffer: LPVOID,
+ nNumberOfCharsToRead: DWORD,
+ lpNumberOfCharsRead: LPDWORD,
+ pInputControl: PCONSOLE_READCONSOLE_CONTROL,
+ ) -> BOOL;
+ pub fn ReadConsoleInputA(
+ hConsoleInput: HANDLE,
+ lpBuffer: PINPUT_RECORD,
+ nLength: DWORD,
+ lpNumberOfEventsRead: LPDWORD,
+ ) -> BOOL;
+ pub fn ReadConsoleInputW(
+ hConsoleInput: HANDLE,
+ lpBuffer: PINPUT_RECORD,
+ nLength: DWORD,
+ lpNumberOfEventsRead: LPDWORD,
+ ) -> BOOL;
+ pub fn SetConsoleCtrlHandler(
+ HandlerRoutine: PHANDLER_ROUTINE,
+ Add: BOOL,
+ ) -> BOOL;
+ pub fn SetConsoleMode(
+ hConsoleHandle: HANDLE,
+ dwMode: DWORD,
+ ) -> BOOL;
+ pub fn WriteConsoleA(
+ hConsoleOutput: HANDLE,
+ lpBuffer: *const VOID,
+ nNumberOfCharsToWrite: DWORD,
+ lpNumberOfCharsWritten: LPDWORD,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn WriteConsoleW(
+ hConsoleOutput: HANDLE,
+ lpBuffer: *const VOID,
+ nNumberOfCharsToWrite: DWORD,
+ lpNumberOfCharsWritten: LPDWORD,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn CreatePseudoConsole(
+ size: COORD,
+ hInput: HANDLE,
+ hOutput: HANDLE,
+ dwFlags: DWORD,
+ phPC: *mut HPCON,
+ ) -> HRESULT;
+ pub fn ResizePseudoConsole(
+ hPC: HPCON,
+ size: COORD,
+ ) -> HRESULT;
+ pub fn ClosePseudoConsole(
+ hPC: HPCON,
+ );
+}
diff --git a/vendor/winapi/src/um/corsym.rs b/vendor/winapi/src/um/corsym.rs
new file mode 100644
index 000000000..2e7c0f983
--- /dev/null
+++ b/vendor/winapi/src/um/corsym.rs
@@ -0,0 +1,89 @@
+// 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
+//! Common Language Runtime Debugging Symbol Reader/Writer/Binder Interfaces
+use shared::basetsd::ULONG32;
+use um::objidlbase::IStream;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, WCHAR};
+DEFINE_GUID!{CorSym_LanguageType_C,
+ 0x63a08714, 0xfc37, 0x11d2, 0x90, 0x4c, 0x0, 0xc0, 0x4f, 0xa3, 0x02, 0xa1}
+DEFINE_GUID!{CorSym_LanguageType_CPlusPlus,
+ 0x3a12d0b7, 0xc26c, 0x11d0, 0xb4, 0x42, 0x0, 0xa0, 0x24, 0x4a, 0x1d, 0xd2}
+DEFINE_GUID!{CorSym_LanguageType_CSharp,
+ 0x3f5162f8, 0x07c6, 0x11d3, 0x90, 0x53, 0x0, 0xc0, 0x4f, 0xa3, 0x02, 0xa1}
+DEFINE_GUID!{CorSym_LanguageType_Basic,
+ 0x3a12d0b8, 0xc26c, 0x11d0, 0xb4, 0x42, 0x0, 0xa0, 0x24, 0x4a, 0x1d, 0xd2}
+DEFINE_GUID!{CorSym_LanguageType_Java,
+ 0x3a12d0b4, 0xc26c, 0x11d0, 0xb4, 0x42, 0x0, 0xa0, 0x24, 0x4a, 0x1d, 0xd2}
+DEFINE_GUID!{CorSym_LanguageType_Cobol,
+ 0xaf046cd1, 0xd0e1, 0x11d2, 0x97, 0x7c, 0x0, 0xa0, 0xc9, 0xb4, 0xd5, 0xc}
+DEFINE_GUID!{CorSym_LanguageType_Pascal,
+ 0xaf046cd2, 0xd0e1, 0x11d2, 0x97, 0x7c, 0x0, 0xa0, 0xc9, 0xb4, 0xd5, 0xc}
+DEFINE_GUID!{CorSym_LanguageType_ILAssembly,
+ 0xaf046cd3, 0xd0e1, 0x11d2, 0x97, 0x7c, 0x0, 0xa0, 0xc9, 0xb4, 0xd5, 0xc}
+DEFINE_GUID!{CorSym_LanguageType_JScript,
+ 0x3a12d0b6, 0xc26c, 0x11d0, 0xb4, 0x42, 0x00, 0xa0, 0x24, 0x4a, 0x1d, 0xd2}
+DEFINE_GUID!{CorSym_LanguageType_SMC,
+ 0xd9b9f7b, 0x6611, 0x11d3, 0xbd, 0x2a, 0x0, 0x0, 0xf8, 0x8, 0x49, 0xbd}
+DEFINE_GUID!{CorSym_LanguageType_MCPlusPlus,
+ 0x4b35fde8, 0x07c6, 0x11d3, 0x90, 0x53, 0x0, 0xc0, 0x4f, 0xa3, 0x02, 0xa1}
+DEFINE_GUID!{CorSym_LanguageVendor_Microsoft,
+ 0x994b45c4, 0xe6e9, 0x11d2, 0x90, 0x3f, 0x00, 0xc0, 0x4f, 0xa3, 0x02, 0xa1}
+DEFINE_GUID!{CorSym_DocumentType_Text,
+ 0x5a869d0b, 0x6611, 0x11d3, 0xbd, 0x2a, 0x0, 0x0, 0xf8, 0x8, 0x49, 0xbd}
+DEFINE_GUID!{CorSym_DocumentType_MC,
+ 0xeb40cb65, 0x3c1f, 0x4352, 0x9d, 0x7b, 0xba, 0xf, 0xc4, 0x7a, 0x9d, 0x77}
+DEFINE_GUID!{CorSym_SourceHash_MD5,
+ 0x406ea660, 0x64cf, 0x4c82, 0xb6, 0xf0, 0x42, 0xd4, 0x81, 0x72, 0xa7, 0x99}
+DEFINE_GUID!{CorSym_SourceHash_SHA1,
+ 0xff1816ec, 0xaa5e, 0x4d10, 0x87, 0xf7, 0x6f, 0x49, 0x63, 0x83, 0x34, 0x60}
+ENUM!{enum CorSymAddrKind {
+ ADDR_IL_OFFSET = 1,
+ ADDR_NATIVE_RVA = 2,
+ ADDR_NATIVE_REGISTER = 3,
+ ADDR_NATIVE_REGREL = 4,
+ ADDR_NATIVE_OFFSET = 5,
+ ADDR_NATIVE_REGREG = 6,
+ ADDR_NATIVE_REGSTK = 7,
+ ADDR_NATIVE_STKREG = 8,
+ ADDR_BITFIELD = 9,
+ ADDR_NATIVE_ISECTOFFSET = 10,
+}}
+ENUM!{enum CorSymVarFlag {
+ VAR_IS_COMP_GEN = 1,
+}}
+RIDL!{#[uuid(0xaa544d42, 0x28cb, 0x11d3, 0xbd, 0x22, 0x00, 0x00, 0xf8, 0x08, 0x49, 0xbd)]
+interface ISymUnmanagedBinder(ISymUnmanagedBinderVtbl): IUnknown(IUnknownVtbl) {
+ fn GetReaderForFile(
+ importer: *mut IUnknown,
+ fileName: *const WCHAR,
+ searchPath: *const WCHAR,
+ pRetVal: *mut *mut ISymUnmanagedReader,
+ ) -> HRESULT,
+ fn GetReaderFromStream(
+ importer: *mut IUnknown,
+ pstream: *mut IStream,
+ pRetVal: *mut *mut ISymUnmanagedReader,
+ ) -> HRESULT,
+}}
+ENUM!{enum CorSymSearchPolicyAttributes {
+ AllowRegistryAccess = 0x1,
+ AllowSymbolServerAccess = 0x2,
+ AllowOriginalPathAccess = 0x4,
+ AllowReferencePathAccess = 0x8,
+}}
+RIDL!{#[uuid(0xaccee350, 0x89af, 0x4ccb, 0x8b, 0x40, 0x1c, 0x2c, 0x4c, 0x6f, 0x94, 0x34)]
+interface ISymUnmanagedBinder2(ISymUnmanagedBinder2Vtbl):
+ ISymUnmanagedBinder(ISymUnmanagedBinderVtbl) {
+ fn GetReaderForFile2(
+ importer: *mut IUnknown,
+ fileName: *const WCHAR,
+ searchPath: *const WCHAR,
+ searchPolicy: ULONG32,
+ pRetVal: *mut *mut ISymUnmanagedReader,
+ ) -> HRESULT,
+}}
+pub enum ISymUnmanagedReader {} // TODO
diff --git a/vendor/winapi/src/um/d2d1.rs b/vendor/winapi/src/um/d2d1.rs
new file mode 100644
index 000000000..0632e6891
--- /dev/null
+++ b/vendor/winapi/src/um/d2d1.rs
@@ -0,0 +1,982 @@
+// 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 d2d1.h
+use ctypes::c_void;
+use shared::basetsd::{UINT32, UINT64};
+use shared::dxgi::IDXGISurface;
+use shared::guiddef::REFIID;
+use shared::minwindef::{BOOL, DWORD, FLOAT};
+use shared::windef::{HDC, HWND, RECT};
+use um::d2dbasetypes::{
+ D2D_COLOR_F, D2D_MATRIX_3X2_F, D2D_POINT_2F, D2D_POINT_2U, D2D_RECT_F, D2D_RECT_U, D2D_SIZE_F,
+ D2D_SIZE_U,
+};
+use um::d3dcommon::{D3D_FEATURE_LEVEL_10_0, D3D_FEATURE_LEVEL_9_1};
+use um::dcommon::{D2D1_PIXEL_FORMAT, DWRITE_MEASURING_MODE};
+use um::dwrite::{DWRITE_GLYPH_RUN, IDWriteRenderingParams, IDWriteTextFormat, IDWriteTextLayout};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::wincodec::{IWICBitmap, IWICBitmapSource};
+use um::winnt::{HRESULT, WCHAR};
+// Types confirmed affected by the ABI issue:
+// D2D1_SIZE_F, D2D1_SIZE_U, D2D1_COLOR_F, D2D1_PIXEL_FORMAT, D2D1_POINT_2F
+pub const D2D1_DEFAULT_FLATTENING_TOLERANCE: FLOAT = 0.25;
+pub const D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR: DWORD = 0;
+pub const D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR: DWORD = 1;
+pub const D2D1_INTERPOLATION_MODE_DEFINITION_CUBIC: DWORD = 2;
+pub const D2D1_INTERPOLATION_MODE_DEFINITION_MULTI_SAMPLE_LINEAR: DWORD = 3;
+pub const D2D1_INTERPOLATION_MODE_DEFINITION_ANISOTROPIC: DWORD = 4;
+pub const D2D1_INTERPOLATION_MODE_DEFINITION_HIGH_QUALITY_CUBIC: DWORD = 5;
+pub const D2D1_INTERPOLATION_MODE_DEFINITION_FANT: DWORD = 6;
+pub const D2D1_INTERPOLATION_MODE_DEFINITION_MIPMAP_LINEAR: DWORD = 7;
+ENUM!{enum D2D1_GAMMA {
+ D2D1_GAMMA_2_2 = 0,
+ D2D1_GAMMA_1_0 = 1,
+}}
+ENUM!{enum D2D1_OPACITY_MASK_CONTENT {
+ D2D1_OPACITY_MASK_CONTENT_GRAPHICS = 0,
+ D2D1_OPACITY_MASK_CONTENT_TEXT_NATURAL = 1,
+ D2D1_OPACITY_MASK_CONTENT_TEXT_GDI_COMPATIBLE = 2,
+}}
+ENUM!{enum D2D1_EXTEND_MODE {
+ D2D1_EXTEND_MODE_CLAMP = 0,
+ D2D1_EXTEND_MODE_WRAP = 1,
+ D2D1_EXTEND_MODE_MIRROR = 2,
+}}
+ENUM!{enum D2D1_ANTIALIAS_MODE {
+ D2D1_ANTIALIAS_MODE_PER_PRIMITIVE = 0,
+ D2D1_ANTIALIAS_MODE_ALIASED = 1,
+}}
+ENUM!{enum D2D1_TEXT_ANTIALIAS_MODE {
+ D2D1_TEXT_ANTIALIAS_MODE_DEFAULT = 0,
+ D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE = 1,
+ D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE = 2,
+ D2D1_TEXT_ANTIALIAS_MODE_ALIASED = 3,
+}}
+ENUM!{enum D2D1_BITMAP_INTERPOLATION_MODE {
+ D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR =
+ D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR,
+ D2D1_BITMAP_INTERPOLATION_MODE_LINEAR =
+ D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR,
+}}
+ENUM!{enum D2D1_DRAW_TEXT_OPTIONS {
+ D2D1_DRAW_TEXT_OPTIONS_NO_SNAP = 0x00000001,
+ D2D1_DRAW_TEXT_OPTIONS_CLIP = 0x00000002,
+ D2D1_DRAW_TEXT_OPTIONS_ENABLE_COLOR_FONT = 0x00000004,
+ D2D1_DRAW_TEXT_OPTIONS_NONE = 0x00000000,
+}}
+pub type D2D1_POINT_2U = D2D_POINT_2U;
+pub type D2D1_POINT_2F = D2D_POINT_2F;
+pub type D2D1_RECT_F = D2D_RECT_F;
+pub type D2D1_RECT_U = D2D_RECT_U;
+pub type D2D1_SIZE_F = D2D_SIZE_F;
+pub type D2D1_SIZE_U = D2D_SIZE_U;
+pub type D2D1_COLOR_F = D2D_COLOR_F;
+pub type D2D1_MATRIX_3X2_F = D2D_MATRIX_3X2_F;
+pub type D2D1_TAG = UINT64;
+STRUCT!{struct D2D1_BITMAP_PROPERTIES {
+ pixelFormat: D2D1_PIXEL_FORMAT,
+ dpiX: FLOAT,
+ dpiY: FLOAT,
+}}
+STRUCT!{struct D2D1_GRADIENT_STOP {
+ position: FLOAT,
+ color: D2D1_COLOR_F,
+}}
+STRUCT!{struct D2D1_BRUSH_PROPERTIES {
+ opacity: FLOAT,
+ transform: D2D1_MATRIX_3X2_F,
+}}
+STRUCT!{struct D2D1_BITMAP_BRUSH_PROPERTIES {
+ extendModeX: D2D1_EXTEND_MODE,
+ extendModeY: D2D1_EXTEND_MODE,
+ interpolationMode: D2D1_BITMAP_INTERPOLATION_MODE,
+}}
+STRUCT!{struct D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES {
+ startPoint: D2D1_POINT_2F,
+ endPoint: D2D1_POINT_2F,
+}}
+STRUCT!{struct D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES {
+ center: D2D1_POINT_2F,
+ gradientOriginOffset: D2D1_POINT_2F,
+ radiusX: FLOAT,
+ radiusY: FLOAT,
+}}
+ENUM!{enum D2D1_ARC_SIZE {
+ D2D1_ARC_SIZE_SMALL = 0,
+ D2D1_ARC_SIZE_LARGE = 1,
+}}
+ENUM!{enum D2D1_CAP_STYLE {
+ D2D1_CAP_STYLE_FLAT = 0,
+ D2D1_CAP_STYLE_SQUARE = 1,
+ D2D1_CAP_STYLE_ROUND = 2,
+ D2D1_CAP_STYLE_TRIANGLE = 3,
+}}
+ENUM!{enum D2D1_DASH_STYLE {
+ D2D1_DASH_STYLE_SOLID = 0,
+ D2D1_DASH_STYLE_DASH = 1,
+ D2D1_DASH_STYLE_DOT = 2,
+ D2D1_DASH_STYLE_DASH_DOT = 3,
+ D2D1_DASH_STYLE_DASH_DOT_DOT = 4,
+ D2D1_DASH_STYLE_CUSTOM = 5,
+}}
+ENUM!{enum D2D1_LINE_JOIN {
+ D2D1_LINE_JOIN_MITER = 0,
+ D2D1_LINE_JOIN_BEVEL = 1,
+ D2D1_LINE_JOIN_ROUND = 2,
+ D2D1_LINE_JOIN_MITER_OR_BEVEL = 3,
+}}
+ENUM!{enum D2D1_COMBINE_MODE {
+ D2D1_COMBINE_MODE_UNION = 0,
+ D2D1_COMBINE_MODE_INTERSECT = 1,
+ D2D1_COMBINE_MODE_XOR = 2,
+ D2D1_COMBINE_MODE_EXCLUDE = 3,
+}}
+ENUM!{enum D2D1_GEOMETRY_RELATION {
+ D2D1_GEOMETRY_RELATION_UNKNOWN = 0,
+ D2D1_GEOMETRY_RELATION_DISJOINT = 1,
+ D2D1_GEOMETRY_RELATION_IS_CONTAINED = 2,
+ D2D1_GEOMETRY_RELATION_CONTAINS = 3,
+ D2D1_GEOMETRY_RELATION_OVERLAP = 4,
+}}
+ENUM!{enum D2D1_GEOMETRY_SIMPLIFICATION_OPTION {
+ D2D1_GEOMETRY_SIMPLIFICATION_OPTION_CUBICS_AND_LINES = 0,
+ D2D1_GEOMETRY_SIMPLIFICATION_OPTION_LINES = 1,
+}}
+ENUM!{enum D2D1_FIGURE_BEGIN {
+ D2D1_FIGURE_BEGIN_FILLED = 0,
+ D2D1_FIGURE_BEGIN_HOLLOW = 1,
+}}
+ENUM!{enum D2D1_FIGURE_END {
+ D2D1_FIGURE_END_OPEN = 0,
+ D2D1_FIGURE_END_CLOSED = 1,
+}}
+STRUCT!{struct D2D1_BEZIER_SEGMENT {
+ point1: D2D1_POINT_2F,
+ point2: D2D1_POINT_2F,
+ point3: D2D1_POINT_2F,
+}}
+STRUCT!{struct D2D1_TRIANGLE {
+ point1: D2D1_POINT_2F,
+ point2: D2D1_POINT_2F,
+ point3: D2D1_POINT_2F,
+}}
+ENUM!{enum D2D1_PATH_SEGMENT {
+ D2D1_PATH_SEGMENT_NONE = 0x00000000,
+ D2D1_PATH_SEGMENT_FORCE_UNSTROKED = 0x00000001,
+ D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN = 0x00000002,
+}}
+ENUM!{enum D2D1_SWEEP_DIRECTION {
+ D2D1_SWEEP_DIRECTION_COUNTER_CLOCKWISE = 0,
+ D2D1_SWEEP_DIRECTION_CLOCKWISE = 1,
+}}
+ENUM!{enum D2D1_FILL_MODE {
+ D2D1_FILL_MODE_ALTERNATE = 0,
+ D2D1_FILL_MODE_WINDING = 1,
+}}
+STRUCT!{struct D2D1_ARC_SEGMENT {
+ point: D2D1_POINT_2F,
+ size: D2D1_SIZE_F,
+ rotationAngle: FLOAT,
+ sweepDirection: D2D1_SWEEP_DIRECTION,
+ arcSize: D2D1_ARC_SIZE,
+}}
+STRUCT!{struct D2D1_QUADRATIC_BEZIER_SEGMENT {
+ point1: D2D1_POINT_2F,
+ point2: D2D1_POINT_2F,
+}}
+STRUCT!{struct D2D1_ELLIPSE {
+ point: D2D1_POINT_2F,
+ radiusX: FLOAT,
+ radiusY: FLOAT,
+}}
+STRUCT!{struct D2D1_ROUNDED_RECT {
+ rect: D2D1_RECT_F,
+ radiusX: FLOAT,
+ radiusY: FLOAT,
+}}
+STRUCT!{struct D2D1_STROKE_STYLE_PROPERTIES {
+ startCap: D2D1_CAP_STYLE,
+ endCap: D2D1_CAP_STYLE,
+ dashCap: D2D1_CAP_STYLE,
+ lineJoin: D2D1_LINE_JOIN,
+ miterLimit: FLOAT,
+ dashStyle: D2D1_DASH_STYLE,
+ dashOffset: FLOAT,
+}}
+ENUM!{enum D2D1_LAYER_OPTIONS {
+ D2D1_LAYER_OPTIONS_NONE = 0x00000000,
+ D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE = 0x00000001,
+}}
+STRUCT!{struct D2D1_LAYER_PARAMETERS {
+ contentBounds: D2D1_RECT_F,
+ geometricMask: *mut ID2D1Geometry,
+ maskAntialiasMode: D2D1_ANTIALIAS_MODE,
+ maskTransform: D2D1_MATRIX_3X2_F,
+ opacity: FLOAT,
+ opacityBrush: *mut ID2D1Brush,
+ layerOptions: D2D1_LAYER_OPTIONS,
+}}
+ENUM!{enum D2D1_WINDOW_STATE {
+ D2D1_WINDOW_STATE_NONE = 0x0000000,
+ D2D1_WINDOW_STATE_OCCLUDED = 0x0000001,
+}}
+ENUM!{enum D2D1_RENDER_TARGET_TYPE {
+ D2D1_RENDER_TARGET_TYPE_DEFAULT = 0,
+ D2D1_RENDER_TARGET_TYPE_SOFTWARE = 1,
+ D2D1_RENDER_TARGET_TYPE_HARDWARE = 2,
+}}
+ENUM!{enum D2D1_FEATURE_LEVEL {
+ D2D1_FEATURE_LEVEL_DEFAULT = 0,
+ D2D1_FEATURE_LEVEL_9 = D3D_FEATURE_LEVEL_9_1,
+ D2D1_FEATURE_LEVEL_10 = D3D_FEATURE_LEVEL_10_0,
+}}
+ENUM!{enum D2D1_RENDER_TARGET_USAGE {
+ D2D1_RENDER_TARGET_USAGE_NONE = 0x00000000,
+ D2D1_RENDER_TARGET_USAGE_FORCE_BITMAP_REMOTING = 0x00000001,
+ D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE = 0x00000002,
+}}
+ENUM!{enum D2D1_PRESENT_OPTIONS {
+ D2D1_PRESENT_OPTIONS_NONE = 0x00000000,
+ D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS = 0x00000001,
+ D2D1_PRESENT_OPTIONS_IMMEDIATELY = 0x00000002,
+}}
+STRUCT!{struct D2D1_RENDER_TARGET_PROPERTIES {
+ _type: D2D1_RENDER_TARGET_TYPE,
+ pixelFormat: D2D1_PIXEL_FORMAT,
+ dpiX: FLOAT,
+ dpiY: FLOAT,
+ usage: D2D1_RENDER_TARGET_USAGE,
+ minLevel: D2D1_FEATURE_LEVEL,
+}}
+STRUCT!{struct D2D1_HWND_RENDER_TARGET_PROPERTIES {
+ hwnd: HWND,
+ pixelSize: D2D1_SIZE_U,
+ presentOptions: D2D1_PRESENT_OPTIONS,
+}}
+ENUM!{enum D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS {
+ D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE = 0x00000000,
+ D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE = 0x00000001,
+}}
+STRUCT!{struct D2D1_DRAWING_STATE_DESCRIPTION {
+ antialiasMode: D2D1_ANTIALIAS_MODE,
+ textAntialiasMode: D2D1_TEXT_ANTIALIAS_MODE,
+ tag1: D2D1_TAG,
+ tag2: D2D1_TAG,
+ transform: D2D1_MATRIX_3X2_F,
+}}
+ENUM!{enum D2D1_DC_INITIALIZE_MODE {
+ D2D1_DC_INITIALIZE_MODE_COPY = 0,
+ D2D1_DC_INITIALIZE_MODE_CLEAR = 1,
+}}
+ENUM!{enum D2D1_DEBUG_LEVEL {
+ D2D1_DEBUG_LEVEL_NONE = 0,
+ D2D1_DEBUG_LEVEL_ERROR = 1,
+ D2D1_DEBUG_LEVEL_WARNING = 2,
+ D2D1_DEBUG_LEVEL_INFORMATION = 3,
+}}
+ENUM!{enum D2D1_FACTORY_TYPE {
+ D2D1_FACTORY_TYPE_SINGLE_THREADED = 0,
+ D2D1_FACTORY_TYPE_MULTI_THREADED = 1,
+}}
+STRUCT!{struct D2D1_FACTORY_OPTIONS {
+ debugLevel: D2D1_DEBUG_LEVEL,
+}}
+RIDL!{#[uuid(0x2cd90691, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1Resource(ID2D1ResourceVtbl): IUnknown(IUnknownVtbl) {
+ fn GetFactory(
+ factory: *mut *mut ID2D1Factory,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x65019f75, 0x8da2, 0x497c, 0xb3, 0x2c, 0xdf, 0xa3, 0x4e, 0x48, 0xed, 0xe6)]
+interface ID2D1Image(ID2D1ImageVtbl): ID2D1Resource(ID2D1ResourceVtbl) {}}
+RIDL!{#[uuid(0xa2296057, 0xea42, 0x4099, 0x98, 0x3b, 0x53, 0x9f, 0xb6, 0x50, 0x54, 0x26)]
+interface ID2D1Bitmap(ID2D1BitmapVtbl): ID2D1Image(ID2D1ImageVtbl) {
+ #[fixme] fn GetSize() -> D2D1_SIZE_F,
+ #[fixme] fn GetPixelSize() -> D2D1_SIZE_U,
+ #[fixme] fn GetPixelFormat() -> D2D1_PIXEL_FORMAT,
+ fn GetDpi(
+ dpiX: *mut FLOAT,
+ dpiY: *mut FLOAT,
+ ) -> (),
+ fn CopyFromBitmap(
+ destPoint: *const D2D1_POINT_2U,
+ bitmap: *mut ID2D1Bitmap,
+ srcRect: *const D2D1_RECT_U,
+ ) -> HRESULT,
+ fn CopyFromRenderTarget(
+ destPoint: *const D2D1_POINT_2U,
+ renderTarget: *mut ID2D1RenderTarget,
+ srcRect: *const D2D1_RECT_U,
+ ) -> HRESULT,
+ fn CopyFromMemory(
+ dstRect: *const D2D1_RECT_U,
+ srcData: *const c_void,
+ pitch: UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x2cd906a7, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1GradientStopCollection(ID2D1GradientStopCollectionVtbl):
+ ID2D1Resource(ID2D1ResourceVtbl) {
+ fn GetGradientStopCount() -> UINT32,
+ fn GetGradientStops(
+ gradientStops: *mut D2D1_GRADIENT_STOP,
+ gradientStopsCount: UINT32,
+ ) -> (),
+ fn GetColorInterpolationGamma() -> D2D1_GAMMA,
+ fn GetExtendMode() -> D2D1_EXTEND_MODE,
+}}
+RIDL!{#[uuid(0x2cd906a8, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1Brush(ID2D1BrushVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ fn SetOpacity(
+ opacity: FLOAT,
+ ) -> (),
+ fn SetTransform(
+ transform: *const D2D1_MATRIX_3X2_F,
+ ) -> (),
+ fn GetOpacity() -> FLOAT,
+ fn GetTransform(
+ transform: *mut D2D1_MATRIX_3X2_F,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x2cd906aa, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1BitmapBrush(ID2D1BitmapBrushVtbl): ID2D1Brush(ID2D1BrushVtbl) {
+ fn SetExtendModeX(
+ extendModeX: D2D1_EXTEND_MODE,
+ ) -> (),
+ fn SetExtendModeY(
+ extendModeY: D2D1_EXTEND_MODE,
+ ) -> (),
+ fn SetInterpolationMode(
+ interpolationMode: D2D1_BITMAP_INTERPOLATION_MODE,
+ ) -> (),
+ fn SetBitmap(
+ bitmap: *mut ID2D1Bitmap,
+ ) -> (),
+ fn GetExtendModeX() -> D2D1_EXTEND_MODE,
+ fn GetExtendModeY() -> D2D1_EXTEND_MODE,
+ fn GetInterpolationMode() -> D2D1_BITMAP_INTERPOLATION_MODE,
+ fn GetBitmap(
+ bitmap: *mut *mut ID2D1Bitmap,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x2cd906a9, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1SolidColorBrush(ID2D1SolidColorBrushVtbl): ID2D1Brush(ID2D1BrushVtbl) {
+ fn SetColor(
+ color: *const D2D1_COLOR_F,
+ ) -> (),
+ #[fixme] fn GetColor() -> D2D1_COLOR_F,
+}}
+RIDL!{#[uuid(0x2cd906ab, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1LinearGradientBrush(ID2D1LinearGradientBrushVtbl): ID2D1Brush(ID2D1BrushVtbl) {
+ fn SetStartPoint(
+ startPoint: D2D1_POINT_2F,
+ ) -> (),
+ fn SetEndPoint(
+ endPoint: D2D1_POINT_2F,
+ ) -> (),
+ #[fixme] fn GetStartPoint() -> D2D1_POINT_2F,
+ #[fixme] fn GetEndPoint() -> D2D1_POINT_2F,
+ fn GetGradientStopCollection(
+ gradientStopCollection: *mut *mut ID2D1GradientStopCollection,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x2cd906ac, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1RadialGradientBrush(ID2D1RadialGradientBrushVtbl): ID2D1Brush(ID2D1BrushVtbl) {
+ fn SetCenter(
+ center: D2D1_POINT_2F,
+ ) -> (),
+ fn SetGradientOriginOffset(
+ gradientOriginOffset: D2D1_POINT_2F,
+ ) -> (),
+ fn SetRadiusX(
+ radiusX: FLOAT,
+ ) -> (),
+ fn SetRadiusY(
+ radiusY: FLOAT,
+ ) -> (),
+ #[fixme] fn GetCenter() -> D2D1_POINT_2F,
+ #[fixme] fn GetGradientOriginOffset() -> D2D1_POINT_2F,
+ fn GetRadiusX() -> FLOAT,
+ fn GetRadiusY() -> FLOAT,
+ fn GetGradientStopCollection(
+ gradientStopCollection: *mut *mut ID2D1GradientStopCollection,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x2cd9069d, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1StrokeStyle(ID2D1StrokeStyleVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ fn GetStartCap() -> D2D1_CAP_STYLE,
+ fn GetEndCap() -> D2D1_CAP_STYLE,
+ fn GetDashCap() -> D2D1_CAP_STYLE,
+ fn GetMiterLimit() -> FLOAT,
+ fn GetLineJoin() -> D2D1_LINE_JOIN,
+ fn GetDashOffset() -> FLOAT,
+ fn GetDashStyle() -> D2D1_DASH_STYLE,
+ fn GetDashesCount() -> UINT32,
+ fn GetDashes(
+ dashes: *mut FLOAT,
+ dashesCount: UINT32,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x2cd906a1, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1Geometry(ID2D1GeometryVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ fn GetBounds(
+ worldTransform: *const D2D1_MATRIX_3X2_F,
+ bounds: *mut D2D1_RECT_F,
+ ) -> HRESULT,
+ fn GetWidenedBounds(
+ strokeWidth: FLOAT,
+ strokeStyle: *mut ID2D1StrokeStyle,
+ worldTransform: *const D2D1_MATRIX_3X2_F,
+ flatteningTolerance: FLOAT,
+ bounds: *mut D2D1_RECT_F,
+ ) -> HRESULT,
+ fn StrokeContainsPoint(
+ point: D2D1_POINT_2F,
+ strokeWidth: FLOAT,
+ strokeStyle: *mut ID2D1StrokeStyle,
+ worldTransform: *const D2D1_MATRIX_3X2_F,
+ flatteningTolerance: FLOAT,
+ contains: *mut BOOL,
+ ) -> HRESULT,
+ fn FillContainsPoint(
+ point: D2D1_POINT_2F,
+ worldTransform: *const D2D1_MATRIX_3X2_F,
+ flatteningTolerance: FLOAT,
+ contains: *mut BOOL,
+ ) -> HRESULT,
+ fn CompareWithGeometry(
+ inputGeometry: *mut ID2D1Geometry,
+ inputGeometryTransform: *const D2D1_MATRIX_3X2_F,
+ flatteningTolerance: FLOAT,
+ relation: *mut D2D1_GEOMETRY_RELATION,
+ ) -> HRESULT,
+ fn Simplify(
+ simplificationOption: D2D1_GEOMETRY_SIMPLIFICATION_OPTION,
+ worldTransform: *const D2D1_MATRIX_3X2_F,
+ flatteningTolerance: FLOAT,
+ geometrySink: *mut ID2D1SimplifiedGeometrySink,
+ ) -> HRESULT,
+ fn Tessellate(
+ worldTransform: *const D2D1_MATRIX_3X2_F,
+ flatteningTolerance: FLOAT,
+ tessellationSink: *mut ID2D1TessellationSink,
+ ) -> HRESULT,
+ fn CombineWithGeometry(
+ inputGeometry: *mut ID2D1Geometry,
+ combineMode: D2D1_COMBINE_MODE,
+ inputGeometryTransform: *const D2D1_MATRIX_3X2_F,
+ flatteningTolerance: FLOAT,
+ geometrySink: *mut ID2D1SimplifiedGeometrySink,
+ ) -> HRESULT,
+ fn Outline(
+ worldTransform: *const D2D1_MATRIX_3X2_F,
+ flatteningTolerance: FLOAT,
+ geometrySink: *mut ID2D1SimplifiedGeometrySink,
+ ) -> HRESULT,
+ fn ComputeArea(
+ worldTransform: *const D2D1_MATRIX_3X2_F,
+ flatteningTolerance: FLOAT,
+ area: *mut FLOAT,
+ ) -> HRESULT,
+ fn ComputeLength(
+ worldTransform: *const D2D1_MATRIX_3X2_F,
+ flatteningTolerance: FLOAT,
+ length: *mut FLOAT,
+ ) -> HRESULT,
+ fn ComputePointAtLength(
+ length: FLOAT,
+ worldTransform: *const D2D1_MATRIX_3X2_F,
+ flatteningTolerance: FLOAT,
+ point: *mut D2D1_POINT_2F,
+ unitTangentVector: *mut D2D1_POINT_2F,
+ ) -> HRESULT,
+ fn Widen(
+ strokeWidth: FLOAT,
+ strokeStyle: *mut ID2D1StrokeStyle,
+ worldTransform: *const D2D1_MATRIX_3X2_F,
+ flatteningTolerance: FLOAT,
+ geometrySink: *mut ID2D1SimplifiedGeometrySink,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x2cd906a2, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1RectangleGeometry(ID2D1RectangleGeometryVtbl): ID2D1Geometry(ID2D1GeometryVtbl) {
+ fn GetRect(
+ rect: *mut D2D1_RECT_F,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x2cd906a3, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1RoundedRectangleGeometry(ID2D1RoundedRectangleGeometryVtbl):
+ ID2D1Geometry(ID2D1GeometryVtbl) {
+ fn GetRoundedRect(
+ roundedRect: *mut D2D1_ROUNDED_RECT,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x2cd906a4, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1EllipseGeometry(ID2D1EllipseGeometryVtbl): ID2D1Geometry(ID2D1GeometryVtbl) {
+ fn GetEllipse(
+ ellipse: *mut D2D1_ELLIPSE,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x2cd906a6, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1GeometryGroup(ID2D1GeometryGroupVtbl): ID2D1Geometry(ID2D1GeometryVtbl) {
+ fn GetFillMode() -> D2D1_FILL_MODE,
+ fn GetSourceGeometryCount() -> UINT32,
+ fn GetSourceGeometries(
+ geometries: *mut *mut ID2D1Geometry,
+ geometriesCount: UINT32,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x2cd906bb, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1TransformedGeometry(ID2D1TransformedGeometryVtbl):
+ ID2D1Geometry(ID2D1GeometryVtbl) {
+ fn GetSourceGeometry(
+ sourceGeometry: *mut *mut ID2D1Geometry,
+ ) -> (),
+ fn GetTransform(
+ transform: *mut D2D1_MATRIX_3X2_F,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x2cd9069e, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1SimplifiedGeometrySink(ID2D1SimplifiedGeometrySinkVtbl): IUnknown(IUnknownVtbl) {
+ fn SetFillMode(
+ fillMode: D2D1_FILL_MODE,
+ ) -> (),
+ fn SetSegmentFlags(
+ vertexFlags: D2D1_PATH_SEGMENT,
+ ) -> (),
+ fn BeginFigure(
+ startPoint: D2D1_POINT_2F,
+ figureBegin: D2D1_FIGURE_BEGIN,
+ ) -> (),
+ fn AddLines(
+ points: *const D2D1_POINT_2F,
+ pointsCount: UINT32,
+ ) -> (),
+ fn AddBeziers(
+ beziers: *const D2D1_BEZIER_SEGMENT,
+ beziersCount: UINT32,
+ ) -> (),
+ fn EndFigure(
+ figureEnd: D2D1_FIGURE_END,
+ ) -> (),
+ fn Close() -> HRESULT,
+}}
+RIDL!{#[uuid(0x2cd9069f, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1GeometrySink(ID2D1GeometrySinkVtbl):
+ ID2D1SimplifiedGeometrySink(ID2D1SimplifiedGeometrySinkVtbl) {
+ fn AddLine(
+ point: D2D1_POINT_2F,
+ ) -> (),
+ fn AddBezier(
+ bezier: *const D2D1_BEZIER_SEGMENT,
+ ) -> (),
+ fn AddQuadraticBezier(
+ bezier: *const D2D1_QUADRATIC_BEZIER_SEGMENT,
+ ) -> (),
+ fn AddQuadraticBeziers(
+ beziers: *const D2D1_QUADRATIC_BEZIER_SEGMENT,
+ beziersCount: UINT32,
+ ) -> (),
+ fn AddArc(
+ arc: *const D2D1_ARC_SEGMENT,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x2cd906c1, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1TessellationSink(ID2D1TessellationSinkVtbl): IUnknown(IUnknownVtbl) {
+ fn AddTriangles(
+ triangles: *const D2D1_TRIANGLE,
+ triangleCount: UINT32,
+ ) -> (),
+ fn Close() -> HRESULT,
+}}
+RIDL!{#[uuid(0x2cd906a5, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1PathGeometry(ID2D1PathGeometryVtbl): ID2D1Geometry(ID2D1GeometryVtbl) {
+ fn Open(
+ geometrySink: *mut *mut ID2D1GeometrySink,
+ ) -> HRESULT,
+ fn Stream(
+ geometrySink: *mut ID2D1GeometrySink,
+ ) -> HRESULT,
+ fn GetSegmentCount(
+ count: *mut UINT32,
+ ) -> HRESULT,
+ fn GetFigureCount(
+ count: *mut UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x2cd906c2, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1Mesh(ID2D1MeshVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ fn Open(
+ tessellationSink: *mut *mut ID2D1TessellationSink,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x2cd9069b, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1Layer(ID2D1LayerVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ #[fixme] fn GetSize() -> D2D1_SIZE_F,
+}}
+RIDL!{#[uuid(0x28506e39, 0xebf6, 0x46a1, 0xbb, 0x47, 0xfd, 0x85, 0x56, 0x5a, 0xb9, 0x57)]
+interface ID2D1DrawingStateBlock(ID2D1DrawingStateBlockVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ fn GetDescription(
+ stateDescription: *mut D2D1_DRAWING_STATE_DESCRIPTION,
+ ) -> (),
+ fn SetDescription(
+ stateDescription: *const D2D1_DRAWING_STATE_DESCRIPTION,
+ ) -> (),
+ fn SetTextRenderingParams(
+ textRenderingParams: *mut IDWriteRenderingParams,
+ ) -> (),
+ fn GetTextRenderingParams(
+ textRenderingParams: *mut *mut IDWriteRenderingParams,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x2cd90694, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1RenderTarget(ID2D1RenderTargetVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ fn CreateBitmap(
+ size: D2D1_SIZE_U,
+ srcData: *const c_void,
+ pitch: UINT32,
+ bitmapProperties: *const D2D1_BITMAP_PROPERTIES,
+ bitmap: *mut *mut ID2D1Bitmap,
+ ) -> HRESULT,
+ fn CreateBitmapFromWicBitmap(
+ wicBitmapSource: *mut IWICBitmapSource,
+ bitmapProperties: *const D2D1_BITMAP_PROPERTIES,
+ bitmap: *mut *mut ID2D1Bitmap,
+ ) -> HRESULT,
+ fn CreateSharedBitmap(
+ riid: REFIID,
+ data: *const c_void,
+ bitmapProperties: *const D2D1_BITMAP_PROPERTIES,
+ bitmap: *mut *mut ID2D1Bitmap,
+ ) -> HRESULT,
+ fn CreateBitmapBrush(
+ bitmap: *mut ID2D1Bitmap,
+ bitmapBrushProperties: *const D2D1_BITMAP_BRUSH_PROPERTIES,
+ brushProperties: *const D2D1_BRUSH_PROPERTIES,
+ bitmapBrush: *mut *mut ID2D1BitmapBrush,
+ ) -> HRESULT,
+ fn CreateSolidColorBrush(
+ color: *const D2D1_COLOR_F,
+ brushProperties: *const D2D1_BRUSH_PROPERTIES,
+ solidColorBrush: *mut *mut ID2D1SolidColorBrush,
+ ) -> HRESULT,
+ fn CreateGradientStopCollection(
+ gradientStops: *const D2D1_GRADIENT_STOP,
+ gradientStopsCount: UINT32,
+ colorInterpolationGamma: D2D1_GAMMA,
+ extendMode: D2D1_EXTEND_MODE,
+ gradientStopCollection: *mut *mut ID2D1GradientStopCollection,
+ ) -> HRESULT,
+ fn CreateLinearGradientBrush(
+ linearGradientBrushProperties: *const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES,
+ brushProperties: *const D2D1_BRUSH_PROPERTIES,
+ gradientStopCollection: *mut ID2D1GradientStopCollection,
+ linearGradientBrush: *mut *mut ID2D1LinearGradientBrush,
+ ) -> HRESULT,
+ fn CreateRadialGradientBrush(
+ radialGradientBrushProperties: *const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES,
+ brushProperties: *const D2D1_BRUSH_PROPERTIES,
+ gradientStopCollection: *mut ID2D1GradientStopCollection,
+ radialGradientBrush: *mut *mut ID2D1RadialGradientBrush,
+ ) -> HRESULT,
+ fn CreateCompatibleRenderTarget(
+ desiredSize: *const D2D1_SIZE_F,
+ desiredPixelSize: *const D2D1_SIZE_U,
+ desiredFormat: *const D2D1_PIXEL_FORMAT,
+ options: D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS,
+ bitmapRenderTarget: *mut *mut ID2D1BitmapRenderTarget,
+ ) -> HRESULT,
+ fn CreateLayer(
+ size: *const D2D1_SIZE_F,
+ layer: *mut *mut ID2D1Layer,
+ ) -> HRESULT,
+ fn CreateMesh(
+ mesh: *mut *mut ID2D1Mesh,
+ ) -> HRESULT,
+ fn DrawLine(
+ point0: D2D1_POINT_2F,
+ point1: D2D1_POINT_2F,
+ brush: *mut ID2D1Brush,
+ strokeWidth: FLOAT,
+ strokeStype: *mut ID2D1StrokeStyle,
+ ) -> (),
+ fn DrawRectangle(
+ rect: *const D2D1_RECT_F,
+ brush: *mut ID2D1Brush,
+ strokeWidth: FLOAT,
+ strokeStyle: *mut ID2D1StrokeStyle,
+ ) -> (),
+ fn FillRectangle(
+ rect: *const D2D1_RECT_F,
+ brush: *mut ID2D1Brush,
+ ) -> (),
+ fn DrawRoundedRectangle(
+ roundedRect: *const D2D1_ROUNDED_RECT,
+ brush: *mut ID2D1Brush,
+ strokeWidth: FLOAT,
+ strokeStyle: *mut ID2D1StrokeStyle,
+ ) -> (),
+ fn FillRoundedRectangle(
+ roundedRect: *const D2D1_ROUNDED_RECT,
+ brush: *mut ID2D1Brush,
+ ) -> (),
+ fn DrawEllipse(
+ ellipse: *const D2D1_ELLIPSE,
+ brush: *mut ID2D1Brush,
+ strokeWidth: FLOAT,
+ strokeStyle: *mut ID2D1StrokeStyle,
+ ) -> (),
+ fn FillEllipse(
+ ellipse: *const D2D1_ELLIPSE,
+ brush: *mut ID2D1Brush,
+ ) -> (),
+ fn DrawGeometry(
+ geometry: *mut ID2D1Geometry,
+ brush: *mut ID2D1Brush,
+ strokeWidth: FLOAT,
+ strokeStyle: *mut ID2D1StrokeStyle,
+ ) -> (),
+ fn FillGeometry(
+ geometry: *mut ID2D1Geometry,
+ brush: *mut ID2D1Brush,
+ opacityBrush: *mut ID2D1Brush,
+ ) -> (),
+ fn FillMesh(
+ mesh: *mut ID2D1Mesh,
+ brush: *const ID2D1Brush,
+ ) -> (),
+ fn FillOpacityMask(
+ opacityMask: *mut ID2D1Bitmap,
+ brush: *mut ID2D1Brush,
+ content: D2D1_OPACITY_MASK_CONTENT,
+ destinationRectangle: *const D2D1_RECT_F,
+ sourceRectangle: *const D2D1_RECT_F,
+ ) -> (),
+ fn DrawBitmap(
+ bitmap: *mut ID2D1Bitmap,
+ destinationRectangle: *const D2D1_RECT_F,
+ opacity: FLOAT,
+ interpolationMode: D2D1_BITMAP_INTERPOLATION_MODE,
+ sourceRectangle: *const D2D1_RECT_F,
+ ) -> (),
+ fn DrawText(
+ string: *const WCHAR,
+ stringLength: UINT32,
+ textFormat: *mut IDWriteTextFormat,
+ layoutRect: *const D2D1_RECT_F,
+ defaultForegroundBrush: *mut ID2D1Brush,
+ options: D2D1_DRAW_TEXT_OPTIONS,
+ measuringMode: DWRITE_MEASURING_MODE,
+ ) -> (),
+ fn DrawTextLayout(
+ origin: D2D1_POINT_2F,
+ textLayout: *mut IDWriteTextLayout,
+ defaultForegroundBrush: *mut ID2D1Brush,
+ options: D2D1_DRAW_TEXT_OPTIONS,
+ ) -> (),
+ fn DrawGlyphRun(
+ baselineOrigin: D2D1_POINT_2F,
+ glyphRun: *const DWRITE_GLYPH_RUN,
+ foregroundBrush: *mut ID2D1Brush,
+ measuringMode: DWRITE_MEASURING_MODE,
+ ) -> (),
+ fn SetTransform(
+ transform: *const D2D1_MATRIX_3X2_F,
+ ) -> (),
+ fn GetTransform(
+ transform: *mut D2D1_MATRIX_3X2_F,
+ ) -> (),
+ fn SetAntialiasMode(
+ antialiasMode: D2D1_ANTIALIAS_MODE,
+ ) -> (),
+ fn GetAntialiasMode() -> D2D1_ANTIALIAS_MODE,
+ fn SetTextAntialiasMode(
+ textAntialiasMode: D2D1_TEXT_ANTIALIAS_MODE,
+ ) -> (),
+ fn GetTextAntialiasMode() -> D2D1_TEXT_ANTIALIAS_MODE,
+ fn SetTextRenderingParams(
+ textRenderingParams: *mut IDWriteRenderingParams,
+ ) -> (),
+ fn GetTextRenderingParams(
+ textRenderingParams: *mut *mut IDWriteRenderingParams,
+ ) -> (),
+ fn SetTags(
+ tag1: D2D1_TAG,
+ tag2: D2D1_TAG,
+ ) -> (),
+ fn GetTags(
+ tag1: *mut D2D1_TAG,
+ tag2: *mut D2D1_TAG,
+ ) -> (),
+ fn PushLayer(
+ layerParameters: *const D2D1_LAYER_PARAMETERS,
+ layer: *mut ID2D1Layer,
+ ) -> (),
+ fn PopLayer() -> (),
+ fn Flush(
+ tag1: *mut D2D1_TAG,
+ tag2: *mut D2D1_TAG,
+ ) -> HRESULT,
+ fn SaveDrawingState(
+ drawingStateBlock: *mut ID2D1DrawingStateBlock,
+ ) -> (),
+ fn RestoreDrawingState(
+ drawingStateBlock: *mut ID2D1DrawingStateBlock,
+ ) -> (),
+ fn PushAxisAlignedClip(
+ clipRect: *const D2D1_RECT_F,
+ antialiasMode: D2D1_ANTIALIAS_MODE,
+ ) -> (),
+ fn PopAxisAlignedClip() -> (),
+ fn Clear(
+ clearColor: *const D2D1_COLOR_F,
+ ) -> (),
+ fn BeginDraw() -> (),
+ fn EndDraw(
+ tag1: *mut D2D1_TAG,
+ tag2: *mut D2D1_TAG,
+ ) -> HRESULT,
+ #[fixme] fn GetPixelFormat() -> D2D1_PIXEL_FORMAT,
+ fn SetDpi(
+ dpiX: FLOAT,
+ dpiY: FLOAT,
+ ) -> (),
+ fn GetDpi(
+ dpiX: *mut FLOAT,
+ dpiY: *mut FLOAT,
+ ) -> (),
+ #[fixme] fn GetSize() -> D2D1_SIZE_F,
+ #[fixme] fn GetPixelSize() -> D2D1_SIZE_U,
+ fn GetMaximumBitmapSize() -> UINT32,
+ fn IsSupported(
+ renderTargetProperties: *const D2D1_RENDER_TARGET_PROPERTIES,
+ ) -> BOOL,
+}}
+RIDL!{#[uuid(0x2cd90695, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1BitmapRenderTarget(ID2D1BitmapRenderTargetVtbl):
+ ID2D1RenderTarget(ID2D1RenderTargetVtbl) {
+ fn GetBitmap(
+ bitmap: *mut *mut ID2D1Bitmap,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x2cd90698, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
+interface ID2D1HwndRenderTarget(ID2D1HwndRenderTargetVtbl):
+ ID2D1RenderTarget(ID2D1RenderTargetVtbl) {
+ fn CheckWindowState() -> D2D1_WINDOW_STATE,
+ fn Resize(
+ pixelSize: *const D2D1_SIZE_U,
+ ) -> HRESULT,
+ fn GetHwnd() -> HWND,
+}}
+RIDL!{#[uuid(0xe0db51c3, 0x6f77, 0x4bae, 0xb3, 0xd5, 0xe4, 0x75, 0x09, 0xb3, 0x58, 0x38)]
+interface ID2D1GdiInteropRenderTarget(ID2D1GdiInteropRenderTargetVtbl): IUnknown(IUnknownVtbl) {
+ fn GetDC(
+ mode: D2D1_DC_INITIALIZE_MODE,
+ hdc: *mut HDC,
+ ) -> HRESULT,
+ fn ReleaseDC(
+ update: *const RECT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x1c51bc64, 0xde61, 0x46fd, 0x98, 0x99, 0x63, 0xa5, 0xd8, 0xf0, 0x39, 0x50)]
+interface ID2D1DCRenderTarget(ID2D1DCRenderTargetVtbl): ID2D1RenderTarget(ID2D1RenderTargetVtbl) {
+ fn BindDC(
+ hDC: HDC,
+ pSubRect: *const RECT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x06152247, 0x6f50, 0x465a, 0x92, 0x45, 0x11, 0x8b, 0xfd, 0x3b, 0x60, 0x07)]
+interface ID2D1Factory(ID2D1FactoryVtbl): IUnknown(IUnknownVtbl) {
+ fn ReloadSystemMetrics() -> HRESULT,
+ fn GetDesktopDpi(
+ dpiX: *mut FLOAT,
+ dpiY: *mut FLOAT,
+ ) -> (),
+ fn CreateRectangleGeometry(
+ rectangle: *const D2D1_RECT_F,
+ rectangleGeometry: *mut *mut ID2D1RectangleGeometry,
+ ) -> HRESULT,
+ fn CreateRoundedRectangleGeometry(
+ roundedRectangle: *const D2D1_ROUNDED_RECT,
+ roundedRectangleGeometry: *mut *mut ID2D1RoundedRectangleGeometry,
+ ) -> HRESULT,
+ fn CreateEllipseGeometry(
+ ellipse: *const D2D1_ELLIPSE,
+ ellipseGeometry: *mut *mut ID2D1EllipseGeometry,
+ ) -> HRESULT,
+ fn CreateGeometryGroup(
+ fillMode: D2D1_FILL_MODE,
+ geometries: *mut *mut ID2D1Geometry,
+ geometriesCount: UINT32,
+ geometryGroup: *mut *mut ID2D1GeometryGroup,
+ ) -> HRESULT,
+ fn CreateTransformedGeometry(
+ sourceGeometry: *mut ID2D1Geometry,
+ transform: *const D2D1_MATRIX_3X2_F,
+ transformedGeometry: *mut *mut ID2D1TransformedGeometry,
+ ) -> HRESULT,
+ fn CreatePathGeometry(
+ pathGeometry: *mut *mut ID2D1PathGeometry,
+ ) -> HRESULT,
+ fn CreateStrokeStyle(
+ strokeStyleProperties: *const D2D1_STROKE_STYLE_PROPERTIES,
+ dashes: *const FLOAT,
+ dashesCount: UINT32,
+ strokeStyle: *mut *mut ID2D1StrokeStyle,
+ ) -> HRESULT,
+ fn CreateDrawingStateBlock(
+ drawingStateDescription: *const D2D1_DRAWING_STATE_DESCRIPTION,
+ textRenderingParams: *mut IDWriteRenderingParams,
+ drawingStateBlock: *mut *mut ID2D1DrawingStateBlock,
+ ) -> HRESULT,
+ fn CreateWicBitmapRenderTarget(
+ target: *mut IWICBitmap,
+ renderTargetProperties: *const D2D1_RENDER_TARGET_PROPERTIES,
+ renderTarget: *mut *mut ID2D1RenderTarget,
+ ) -> HRESULT,
+ fn CreateHwndRenderTarget(
+ renderTargetProperties: *const D2D1_RENDER_TARGET_PROPERTIES,
+ hwndRenderTargetProperties: *const D2D1_HWND_RENDER_TARGET_PROPERTIES,
+ hwndRenderTarget: *mut *mut ID2D1HwndRenderTarget,
+ ) -> HRESULT,
+ fn CreateDxgiSurfaceRenderTarget(
+ dxgiSurface: *mut IDXGISurface,
+ renderTargetProperties: *const D2D1_RENDER_TARGET_PROPERTIES,
+ renderTarget: *mut *mut ID2D1RenderTarget,
+ ) -> HRESULT,
+ fn CreateDCRenderTarget(
+ renderTargetProperties: *const D2D1_RENDER_TARGET_PROPERTIES,
+ dcRenderTarget: *mut *mut ID2D1DCRenderTarget,
+ ) -> HRESULT,
+}}
+extern "system" {
+ pub fn D2D1CreateFactory(
+ factoryType: D2D1_FACTORY_TYPE,
+ riid: REFIID,
+ pFactoryOptions: *const D2D1_FACTORY_OPTIONS,
+ ppIFactory: *mut *mut c_void,
+ ) -> HRESULT;
+ pub fn D2D1MakeRotateMatrix(
+ angle: FLOAT,
+ center: D2D1_POINT_2F,
+ matrix: *mut D2D1_MATRIX_3X2_F,
+ );
+ pub fn D2D1MakeSkewMatrix(
+ angleX: FLOAT,
+ angleY: FLOAT,
+ center: D2D1_POINT_2F,
+ matrix: *mut D2D1_MATRIX_3X2_F,
+ );
+ pub fn D2D1IsMatrixInvertible(
+ matrix: *const D2D1_MATRIX_3X2_F,
+ ) -> BOOL;
+ pub fn D2D1InvertMatrix(
+ matrix: *mut D2D1_MATRIX_3X2_F,
+ ) -> BOOL;
+ pub fn D2D1ComputeMaximumScaleFactor(
+ matrix: *const D2D1_MATRIX_3X2_F,
+ ) -> FLOAT;
+}
diff --git a/vendor/winapi/src/um/d2d1_1.rs b/vendor/winapi/src/um/d2d1_1.rs
new file mode 100644
index 000000000..8217e30ab
--- /dev/null
+++ b/vendor/winapi/src/um/d2d1_1.rs
@@ -0,0 +1,847 @@
+// 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 d2d1_1.h
+use ctypes::c_void;
+use shared::basetsd::{UINT32, UINT64};
+use shared::dxgi::{IDXGIDevice, IDXGISurface};
+use shared::dxgiformat::DXGI_FORMAT;
+use shared::guiddef::{CLSID, REFCLSID};
+use shared::minwindef::{BOOL, BYTE, DWORD, FLOAT};
+use um::d2d1::{
+ D2D1_ANTIALIAS_MODE, D2D1_BRUSH_PROPERTIES, D2D1_CAP_STYLE, D2D1_COLOR_F,
+ D2D1_DASH_STYLE, D2D1_DEBUG_LEVEL, D2D1_EXTEND_MODE, D2D1_GRADIENT_STOP,
+ D2D1_INTERPOLATION_MODE_DEFINITION_ANISOTROPIC, D2D1_INTERPOLATION_MODE_DEFINITION_CUBIC,
+ D2D1_INTERPOLATION_MODE_DEFINITION_HIGH_QUALITY_CUBIC,
+ D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR,
+ D2D1_INTERPOLATION_MODE_DEFINITION_MULTI_SAMPLE_LINEAR,
+ D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR, D2D1_LINE_JOIN, D2D1_MATRIX_3X2_F,
+ D2D1_POINT_2F, D2D1_RECT_F, D2D1_SIZE_U, D2D1_TAG, D2D1_TEXT_ANTIALIAS_MODE, ID2D1Bitmap,
+ ID2D1BitmapBrush, ID2D1BitmapBrushVtbl, ID2D1BitmapVtbl, ID2D1Brush, ID2D1BrushVtbl,
+ ID2D1DrawingStateBlock, ID2D1DrawingStateBlockVtbl, ID2D1Factory, ID2D1FactoryVtbl,
+ ID2D1Geometry, ID2D1GradientStopCollection, ID2D1GradientStopCollectionVtbl, ID2D1Image,
+ ID2D1ImageVtbl, ID2D1Layer, ID2D1Mesh, ID2D1PathGeometry, ID2D1PathGeometryVtbl,
+ ID2D1RenderTarget, ID2D1RenderTargetVtbl, ID2D1Resource, ID2D1ResourceVtbl, ID2D1StrokeStyle,
+ ID2D1StrokeStyleVtbl,
+};
+use um::d2d1effectauthor::D2D1_PROPERTY_BINDING;
+use um::d2dbasetypes::D2D_SIZE_F;
+use um::dcommon::{D2D1_PIXEL_FORMAT, DWRITE_MEASURING_MODE};
+use um::documenttarget::IPrintDocumentPackageTarget;
+use um::dwrite::{DWRITE_GLYPH_RUN, DWRITE_GLYPH_RUN_DESCRIPTION, IDWriteRenderingParams};
+use um::objidlbase::IStream;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::wincodec::{IWICBitmapSource, IWICColorContext, IWICImagingFactory};
+use um::winnt::{HRESULT, PCWSTR, PWSTR};
+FN!{stdcall PD2D1_EFFECT_FACTORY(
+ effectImpl: *mut *mut IUnknown,
+) -> HRESULT}
+pub use um::d2dbasetypes::D2D_RECT_L as D2D1_RECT_L;
+pub use um::d2dbasetypes::D2D_POINT_2L as D2D1_POINT_2L;
+ENUM!{enum D2D1_PROPERTY_TYPE {
+ D2D1_PROPERTY_TYPE_UNKNOWN = 0,
+ D2D1_PROPERTY_TYPE_STRING = 1,
+ D2D1_PROPERTY_TYPE_BOOL = 2,
+ D2D1_PROPERTY_TYPE_UINT32 = 3,
+ D2D1_PROPERTY_TYPE_INT32 = 4,
+ D2D1_PROPERTY_TYPE_FLOAT = 5,
+ D2D1_PROPERTY_TYPE_VECTOR2 = 6,
+ D2D1_PROPERTY_TYPE_VECTOR3 = 7,
+ D2D1_PROPERTY_TYPE_VECTOR4 = 8,
+ D2D1_PROPERTY_TYPE_BLOB = 9,
+ D2D1_PROPERTY_TYPE_IUNKNOWN = 10,
+ D2D1_PROPERTY_TYPE_ENUM = 11,
+ D2D1_PROPERTY_TYPE_ARRAY = 12,
+ D2D1_PROPERTY_TYPE_CLSID = 13,
+ D2D1_PROPERTY_TYPE_MATRIX_3X2 = 14,
+ D2D1_PROPERTY_TYPE_MATRIX_4X3 = 15,
+ D2D1_PROPERTY_TYPE_MATRIX_4X4 = 16,
+ D2D1_PROPERTY_TYPE_MATRIX_5X4 = 17,
+ D2D1_PROPERTY_TYPE_COLOR_CONTEXT = 18,
+ D2D1_PROPERTY_TYPE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_PROPERTY {
+ D2D1_PROPERTY_CLSID = 0x80000000,
+ D2D1_PROPERTY_DISPLAYNAME = 0x80000001,
+ D2D1_PROPERTY_AUTHOR = 0x80000002,
+ D2D1_PROPERTY_CATEGORY = 0x80000003,
+ D2D1_PROPERTY_DESCRIPTION = 0x80000004,
+ D2D1_PROPERTY_INPUTS = 0x80000005,
+ D2D1_PROPERTY_CACHED = 0x80000006,
+ D2D1_PROPERTY_PRECISION = 0x80000007,
+ D2D1_PROPERTY_MIN_INPUTS = 0x80000008,
+ D2D1_PROPERTY_MAX_INPUTS = 0x80000009,
+ D2D1_PROPERTY_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_SUBPROPERTY {
+ D2D1_SUBPROPERTY_DISPLAYNAME = 0x80000000,
+ D2D1_SUBPROPERTY_ISREADONLY = 0x80000001,
+ D2D1_SUBPROPERTY_MIN = 0x80000002,
+ D2D1_SUBPROPERTY_MAX = 0x80000003,
+ D2D1_SUBPROPERTY_DEFAULT = 0x80000004,
+ D2D1_SUBPROPERTY_FIELDS = 0x80000005,
+ D2D1_SUBPROPERTY_INDEX = 0x80000006,
+ D2D1_SUBPROPERTY_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_BITMAP_OPTIONS {
+ D2D1_BITMAP_OPTIONS_NONE = 0x00000000,
+ D2D1_BITMAP_OPTIONS_TARGET = 0x00000001,
+ D2D1_BITMAP_OPTIONS_CANNOT_DRAW = 0x00000002,
+ D2D1_BITMAP_OPTIONS_CPU_READ = 0x00000004,
+ D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE = 0x00000008,
+ D2D1_BITMAP_OPTIONS_FORCE_DWORD = 0xffffffff,
+}}
+// DEFINE_ENUM_FLAG_OPERATORS(D2D1_BITMAP_OPTIONS);
+ENUM!{enum D2D1_COMPOSITE_MODE {
+ D2D1_COMPOSITE_MODE_SOURCE_OVER = 0,
+ D2D1_COMPOSITE_MODE_DESTINATION_OVER = 1,
+ D2D1_COMPOSITE_MODE_SOURCE_IN = 2,
+ D2D1_COMPOSITE_MODE_DESTINATION_IN = 3,
+ D2D1_COMPOSITE_MODE_SOURCE_OUT = 4,
+ D2D1_COMPOSITE_MODE_DESTINATION_OUT = 5,
+ D2D1_COMPOSITE_MODE_SOURCE_ATOP = 6,
+ D2D1_COMPOSITE_MODE_DESTINATION_ATOP = 7,
+ D2D1_COMPOSITE_MODE_XOR = 8,
+ D2D1_COMPOSITE_MODE_PLUS = 9,
+ D2D1_COMPOSITE_MODE_SOURCE_COPY = 10,
+ D2D1_COMPOSITE_MODE_BOUNDED_SOURCE_COPY = 11,
+ D2D1_COMPOSITE_MODE_MASK_INVERT = 12,
+ D2D1_COMPOSITE_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_BUFFER_PRECISION {
+ D2D1_BUFFER_PRECISION_UNKNOWN = 0,
+ D2D1_BUFFER_PRECISION_8BPC_UNORM = 1,
+ D2D1_BUFFER_PRECISION_8BPC_UNORM_SRGB = 2,
+ D2D1_BUFFER_PRECISION_16BPC_UNORM = 3,
+ D2D1_BUFFER_PRECISION_16BPC_FLOAT = 4,
+ D2D1_BUFFER_PRECISION_32BPC_FLOAT = 5,
+ D2D1_BUFFER_PRECISION_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_MAP_OPTIONS {
+ D2D1_MAP_OPTIONS_NONE = 0,
+ D2D1_MAP_OPTIONS_READ = 1,
+ D2D1_MAP_OPTIONS_WRITE = 2,
+ D2D1_MAP_OPTIONS_DISCARD = 4,
+ D2D1_MAP_OPTIONS_FORCE_DWORD = 0xffffffff,
+}}
+//DEFINE_ENUM_FLAG_OPERATORS(D2D1_MAP_OPTIONS);
+ENUM!{enum D2D1_INTERPOLATION_MODE {
+ D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR = D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR,
+ D2D1_INTERPOLATION_MODE_LINEAR = D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR,
+ D2D1_INTERPOLATION_MODE_CUBIC = D2D1_INTERPOLATION_MODE_DEFINITION_CUBIC,
+ D2D1_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR
+ = D2D1_INTERPOLATION_MODE_DEFINITION_MULTI_SAMPLE_LINEAR,
+ D2D1_INTERPOLATION_MODE_ANISOTROPIC = D2D1_INTERPOLATION_MODE_DEFINITION_ANISOTROPIC,
+ D2D1_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC
+ = D2D1_INTERPOLATION_MODE_DEFINITION_HIGH_QUALITY_CUBIC,
+ D2D1_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_UNIT_MODE {
+ D2D1_UNIT_MODE_DIPS = 0,
+ D2D1_UNIT_MODE_PIXELS = 1,
+ D2D1_UNIT_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_COLOR_SPACE {
+ D2D1_COLOR_SPACE_CUSTOM = 0,
+ D2D1_COLOR_SPACE_SRGB = 1,
+ D2D1_COLOR_SPACE_SCRGB = 2,
+ D2D1_COLOR_SPACE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_DEVICE_CONTEXT_OPTIONS {
+ D2D1_DEVICE_CONTEXT_OPTIONS_NONE = 0,
+ D2D1_DEVICE_CONTEXT_OPTIONS_ENABLE_MULTITHREADED_OPTIMIZATIONS = 1,
+ D2D1_DEVICE_CONTEXT_OPTIONS_FORCE_DWORD = 0xffffffff,
+}}
+//DEFINE_ENUM_FLAG_OPERATORS(D2D1_DEVICE_CONTEXT_OPTIONS);
+ENUM!{enum D2D1_STROKE_TRANSFORM_TYPE {
+ D2D1_STROKE_TRANSFORM_TYPE_NORMAL = 0,
+ D2D1_STROKE_TRANSFORM_TYPE_FIXED = 1,
+ D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE = 2,
+ D2D1_STROKE_TRANSFORM_TYPE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_PRIMITIVE_BLEND {
+ D2D1_PRIMITIVE_BLEND_SOURCE_OVER = 0,
+ D2D1_PRIMITIVE_BLEND_COPY = 1,
+ D2D1_PRIMITIVE_BLEND_MIN = 2,
+ D2D1_PRIMITIVE_BLEND_ADD = 3,
+ D2D1_PRIMITIVE_BLEND_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_THREADING_MODE {
+ D2D1_THREADING_MODE_SINGLE_THREADED = super::d2d1::D2D1_FACTORY_TYPE_SINGLE_THREADED,
+ D2D1_THREADING_MODE_MULTI_THREADED = super::d2d1::D2D1_FACTORY_TYPE_MULTI_THREADED,
+ D2D1_THREADING_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_COLOR_INTERPOLATION_MODE {
+ D2D1_COLOR_INTERPOLATION_MODE_STRAIGHT = 0,
+ D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED = 1,
+ D2D1_COLOR_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff,
+}}
+pub use um::d2dbasetypes::D2D_VECTOR_2F as D2D1_VECTOR_2F;
+pub use um::d2dbasetypes::D2D_VECTOR_3F as D2D1_VECTOR_3F;
+pub use um::d2dbasetypes::D2D_VECTOR_4F as D2D1_VECTOR_4F;
+STRUCT!{struct D2D1_BITMAP_PROPERTIES1 {
+ pixelFormat: D2D1_PIXEL_FORMAT,
+ dpiX: FLOAT,
+ dpiY: FLOAT,
+ bitmapOptions: D2D1_BITMAP_OPTIONS,
+ colorContext: *const ID2D1ColorContext,
+}}
+STRUCT!{struct D2D1_MAPPED_RECT {
+ pitch: UINT32,
+ bits: *const BYTE,
+}}
+STRUCT!{struct D2D1_RENDERING_CONTROLS {
+ bufferPrecision: D2D1_BUFFER_PRECISION,
+ tileSize: D2D1_SIZE_U,
+}}
+STRUCT!{struct D2D1_EFFECT_INPUT_DESCRIPTION {
+ effect: *const ID2D1Effect,
+ inputIndex: UINT32,
+ inputRectangle: D2D1_RECT_F,
+}}
+pub use um::d2dbasetypes::D2D_MATRIX_4X3_F as D2D1_MATRIX_4X3_F;
+pub use um::d2dbasetypes::D2D_MATRIX_4X4_F as D2D1_MATRIX_4X4_F;
+pub use um::d2dbasetypes::D2D_MATRIX_5X4_F as D2D1_MATRIX_5X4_F;
+STRUCT!{struct D2D1_POINT_DESCRIPTION {
+ point: D2D1_POINT_2F,
+ unitTangentVector: D2D1_POINT_2F,
+ endSegment: UINT32,
+ endFigure: UINT32,
+ lengthToEndSegment: FLOAT,
+}}
+STRUCT!{struct D2D1_IMAGE_BRUSH_PROPERTIES {
+ sourceRectangle: D2D1_RECT_F,
+ extendModeX: D2D1_EXTEND_MODE,
+ extendModeY: D2D1_EXTEND_MODE,
+ interpolationMode: D2D1_INTERPOLATION_MODE,
+}}
+STRUCT!{struct D2D1_BITMAP_BRUSH_PROPERTIES1 {
+ extendModeX: D2D1_EXTEND_MODE,
+ extendModeY: D2D1_EXTEND_MODE,
+ interpolationMode: D2D1_INTERPOLATION_MODE,
+}}
+STRUCT!{struct D2D1_STROKE_STYLE_PROPERTIES1 {
+ startCap: D2D1_CAP_STYLE,
+ endCap: D2D1_CAP_STYLE,
+ dashCap: D2D1_CAP_STYLE,
+ lineJoin: D2D1_LINE_JOIN,
+ miterLimit: FLOAT,
+ dashStyle: D2D1_DASH_STYLE,
+ dashOffset: FLOAT,
+ transformType: D2D1_STROKE_TRANSFORM_TYPE,
+}}
+ENUM!{enum D2D1_LAYER_OPTIONS1 {
+ D2D1_LAYER_OPTIONS1_NONE = 0,
+ D2D1_LAYER_OPTIONS1_INITIALIZE_FROM_BACKGROUND = 1,
+ D2D1_LAYER_OPTIONS1_IGNORE_ALPHA = 2,
+ D2D1_LAYER_OPTIONS1_FORCE_DWORD = 0xffffffff,
+}}
+//DEFINE_ENUM_FLAG_OPERATORS(D2D1_LAYER_OPTIONS1);
+STRUCT!{struct D2D1_LAYER_PARAMETERS1 {
+ contentBounds: D2D1_RECT_F,
+ geometricMask: *const ID2D1Geometry,
+ maskAntialiasMode: D2D1_ANTIALIAS_MODE,
+ maskTransform: D2D1_MATRIX_3X2_F,
+ opacity: FLOAT,
+ opacityBrush: *const ID2D1Brush,
+ layerOptions: D2D1_LAYER_OPTIONS1,
+}}
+ENUM!{enum D2D1_PRINT_FONT_SUBSET_MODE {
+ D2D1_PRINT_FONT_SUBSET_MODE_DEFAULT = 0,
+ D2D1_PRINT_FONT_SUBSET_MODE_EACHPAGE = 1,
+ D2D1_PRINT_FONT_SUBSET_MODE_NONE = 2,
+ D2D1_PRINT_FONT_SUBSET_MODE_FORCE_DWORD = 0xffffffff,
+}}
+STRUCT!{struct D2D1_DRAWING_STATE_DESCRIPTION1 {
+ antialiasMode: D2D1_ANTIALIAS_MODE,
+ textAntialiasMode: D2D1_TEXT_ANTIALIAS_MODE,
+ tag1: D2D1_TAG,
+ tag2: D2D1_TAG,
+ transform: D2D1_MATRIX_3X2_F,
+ primitiveBlend: D2D1_PRIMITIVE_BLEND,
+ unitMode: D2D1_UNIT_MODE,
+}}
+STRUCT!{struct D2D1_PRINT_CONTROL_PROPERTIES {
+ fontSubset: D2D1_PRINT_FONT_SUBSET_MODE,
+ rasterDPI: FLOAT,
+ colorSpace: D2D1_COLOR_SPACE,
+}}
+STRUCT!{struct D2D1_CREATION_PROPERTIES {
+ threadingMode: D2D1_THREADING_MODE,
+ debugLevel: D2D1_DEBUG_LEVEL,
+ options: D2D1_DEVICE_CONTEXT_OPTIONS,
+}}
+RIDL!{#[uuid(0x82237326, 0x8111, 0x4f7c, 0xbc, 0xf4, 0xb5, 0xc1, 0x17, 0x55, 0x64, 0xfe)]
+interface ID2D1GdiMetafileSink(ID2D1GdiMetafileSinkVtbl): IUnknown(IUnknownVtbl) {
+ fn ProcessRecord(
+ recordType: DWORD,
+ recordData: *const c_void,
+ recordDataSize: DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x2f543dc3, 0xcfc1, 0x4211, 0x86, 0x4f, 0xcf, 0xd9, 0x1c, 0x6f, 0x33, 0x95)]
+interface ID2D1GdiMetafile(ID2D1GdiMetafileVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ fn Stream(
+ sink: *const ID2D1GdiMetafileSink,
+ ) -> HRESULT,
+ fn GetBounds(
+ bounds: *mut D2D1_RECT_F,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x54d7898a, 0xa061, 0x40a7, 0xbe, 0xc7, 0xe4, 0x65, 0xbc, 0xba, 0x2c, 0x4f)]
+interface ID2D1CommandSink(ID2D1CommandSinkVtbl): IUnknown(IUnknownVtbl) {
+ fn BeginDraw() -> HRESULT,
+ fn EndDraw() -> HRESULT,
+ fn SetAntialiasMode(
+ antialiasMode: D2D1_ANTIALIAS_MODE,
+ ) -> HRESULT,
+ fn SetTags(
+ tag1: D2D1_TAG,
+ tag2: D2D1_TAG,
+ ) -> HRESULT,
+ fn SetTextAntialiasMode(
+ textAntialiasMode: D2D1_TEXT_ANTIALIAS_MODE,
+ ) -> HRESULT,
+ fn SetTextRenderingParams(
+ textRenderingParams: *const IDWriteRenderingParams,
+ ) -> HRESULT,
+ fn SetTransform(
+ transform: *const D2D1_MATRIX_3X2_F,
+ ) -> HRESULT,
+ fn SetPrimitiveBlend(
+ primitiveBlend: D2D1_PRIMITIVE_BLEND,
+ ) -> HRESULT,
+ fn SetUnitMode(
+ unitMode: D2D1_UNIT_MODE,
+ ) -> HRESULT,
+ fn Clear(
+ color: *const D2D1_COLOR_F,
+ ) -> HRESULT,
+ fn DrawGlyphRun(
+ baselineOrigin: D2D1_POINT_2F,
+ glyphRun: *const DWRITE_GLYPH_RUN,
+ glyphRunDescription: *const DWRITE_GLYPH_RUN_DESCRIPTION,
+ foregroundBrush: *const ID2D1Brush,
+ measuringMode: DWRITE_MEASURING_MODE,
+ ) -> HRESULT,
+ fn DrawLine(
+ point0: D2D1_POINT_2F,
+ point1: D2D1_POINT_2F,
+ brush: *const ID2D1Brush,
+ strokeWidth: FLOAT,
+ strokeStyle: *const ID2D1StrokeStyle,
+ ) -> HRESULT,
+ fn DrawGeometry(
+ geometry: *const ID2D1Geometry,
+ brush: *const ID2D1Brush,
+ strokeWidth: FLOAT,
+ strokeStyle: *const ID2D1StrokeStyle,
+ ) -> HRESULT,
+ fn DrawRectangle(
+ rect: *const D2D1_RECT_F,
+ brush: *const ID2D1Brush,
+ strokeWidth: FLOAT,
+ strokeStyle: *const ID2D1StrokeStyle,
+ ) -> HRESULT,
+ fn DrawBitmap(
+ bitmap: *const ID2D1Bitmap,
+ destinationRectangle: *const D2D1_RECT_F,
+ opacity: FLOAT,
+ interpolationMode: D2D1_INTERPOLATION_MODE,
+ sourceRectangle: *const D2D1_RECT_F,
+ perspectiveTransform: *const D2D1_MATRIX_4X4_F,
+ ) -> HRESULT,
+ fn DrawImage(
+ image: *const ID2D1Image,
+ targetOffset: *const D2D1_POINT_2F,
+ imageRectangle: *const D2D1_RECT_F,
+ interpolationMode: D2D1_INTERPOLATION_MODE,
+ compositeMode: D2D1_COMPOSITE_MODE,
+ ) -> HRESULT,
+ fn DrawGdiMetafile(
+ gdiMetafile: *const ID2D1GdiMetafile,
+ targetOffset: *const D2D1_POINT_2F,
+ ) -> HRESULT,
+ fn FillMesh(
+ mesh: *const ID2D1Mesh,
+ brush: *const ID2D1Brush,
+ ) -> HRESULT,
+ fn FillOpacityMask(
+ opacityMask: *const ID2D1Bitmap,
+ brush: *const ID2D1Brush,
+ destinationRectangle: *const D2D1_RECT_F,
+ sourceRectangle: *const D2D1_RECT_F,
+ ) -> HRESULT,
+ fn FillGeometry(
+ geometry: *const ID2D1Geometry,
+ brush: *const ID2D1Brush,
+ opacityBrush: *const ID2D1Brush,
+ ) -> HRESULT,
+ fn FillRectangle(
+ rect: *const D2D1_RECT_F,
+ brush: *const ID2D1Brush,
+ ) -> HRESULT,
+ fn PushAxisAlignedClip(
+ clipRect: *const D2D1_RECT_F,
+ antialiasMode: D2D1_ANTIALIAS_MODE,
+ ) -> HRESULT,
+ fn PushLayer(
+ layerParameters1: *const D2D1_LAYER_PARAMETERS1,
+ layer: *const ID2D1Layer,
+ ) -> HRESULT,
+ fn PopAxisAlignedClip() -> HRESULT,
+ fn PopLayer() -> HRESULT,
+}}
+RIDL!{#[uuid(0xb4f34a19, 0x2383, 0x4d76, 0x94, 0xf6, 0xec, 0x34, 0x36, 0x57, 0xc3, 0xdc)]
+interface ID2D1CommandList(ID2D1CommandListVtbl): ID2D1Image(ID2D1ImageVtbl) {
+ fn Stream(
+ sink: *const ID2D1CommandSink,
+ ) -> HRESULT,
+ fn Close() -> HRESULT,
+}}
+RIDL!{#[uuid(0x2c1d867d, 0xc290, 0x41c8, 0xae, 0x7e, 0x34, 0xa9, 0x87, 0x02, 0xe9, 0xa5)]
+interface ID2D1PrintControl(ID2D1PrintControlVtbl): IUnknown(IUnknownVtbl) {
+ fn AddPage(
+ commandList: *const ID2D1CommandList,
+ pageSize: D2D_SIZE_F,
+ pagePrintTicketStream: *const IStream,
+ tag1: *mut D2D1_TAG,
+ tag2: *mut D2D1_TAG,
+ ) -> HRESULT,
+ fn Close() -> HRESULT,
+}}
+RIDL!{#[uuid(0xfe9e984d, 0x3f95, 0x407c, 0xb5, 0xdb, 0xcb, 0x94, 0xd4, 0xe8, 0xf8, 0x7c)]
+interface ID2D1ImageBrush(ID2D1ImageBrushVtbl): ID2D1Brush(ID2D1BrushVtbl) {
+ fn SetImage(
+ image: *const ID2D1Image,
+ ) -> (),
+ fn SetExtendModeX(
+ extendModeX: D2D1_EXTEND_MODE,
+ ) -> (),
+ fn SetExtendModeY(
+ extendModeY: D2D1_EXTEND_MODE,
+ ) -> (),
+ fn SetInterpolationMode(
+ interpolationMode: D2D1_INTERPOLATION_MODE,
+ ) -> (),
+ fn SetSourceRectangle(
+ sourceRectangle: *const D2D1_RECT_F,
+ ) -> (),
+ fn GetImage(
+ image: *mut *mut ID2D1Image,
+ ) -> (),
+ fn GetExtendModeX() -> D2D1_EXTEND_MODE,
+ fn GetExtendModeY() -> D2D1_EXTEND_MODE,
+ fn GetInterpolationMode() -> D2D1_INTERPOLATION_MODE,
+ fn GetSourceRectangle(
+ sourceRectangle: *mut D2D1_RECT_F,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x41343a53, 0xe41a, 0x49a2, 0x91, 0xcd, 0x21, 0x79, 0x3b, 0xbb, 0x62, 0xe5)]
+interface ID2D1BitmapBrush1(ID2D1BitmapBrush1Vtbl): ID2D1BitmapBrush(ID2D1BitmapBrushVtbl) {
+ fn SetInterpolationMode1(
+ interpolationMode: D2D1_INTERPOLATION_MODE,
+ ) -> (),
+ fn GetInterpolationMode1() -> D2D1_INTERPOLATION_MODE,
+}}
+RIDL!{#[uuid(0x10a72a66, 0xe91c, 0x43f4, 0x99, 0x3f, 0xdd, 0xf4, 0xb8, 0x2b, 0x0b, 0x4a)]
+interface ID2D1StrokeStyle1(ID2D1StrokeStyle1Vtbl): ID2D1StrokeStyle(ID2D1StrokeStyleVtbl) {
+ fn GetStrokeTransformType() -> D2D1_STROKE_TRANSFORM_TYPE,
+}}
+RIDL!{#[uuid(0x62baa2d2, 0xab54, 0x41b7, 0xb8, 0x72, 0x78, 0x7e, 0x01, 0x06, 0xa4, 0x21)]
+interface ID2D1PathGeometry1(ID2D1PathGeometry1Vtbl): ID2D1PathGeometry(ID2D1PathGeometryVtbl) {
+ fn ComputePointAndSegmentAtLength(
+ length: FLOAT,
+ startSegment: UINT32,
+ worldTransform: *const D2D1_MATRIX_3X2_F,
+ flatteningTolerance: FLOAT,
+ pointDescription: *mut D2D1_POINT_DESCRIPTION,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x483473d7, 0xcd46, 0x4f9d, 0x9d, 0x3a, 0x31, 0x12, 0xaa, 0x80, 0x15, 0x9d)]
+interface ID2D1Properties(ID2D1PropertiesVtbl): IUnknown(IUnknownVtbl) {
+ fn GetPropertyCount() -> UINT32,
+ fn GetPropertyName(
+ index: UINT32,
+ name: PWSTR,
+ nameCount: UINT32,
+ ) -> HRESULT,
+ fn GetPropertyNameLength(
+ index: UINT32,
+ ) -> UINT32,
+ fn GetType(
+ index: UINT32,
+ ) -> D2D1_PROPERTY_TYPE,
+ fn GetPropertyIndex(
+ name: PCWSTR,
+ ) -> UINT32,
+ fn SetValueByName(
+ name: PCWSTR,
+ prop_type: D2D1_PROPERTY_TYPE,
+ data: *const BYTE,
+ dataSize: UINT32,
+ ) -> HRESULT,
+ fn SetValue(
+ index: UINT32,
+ prop_type: D2D1_PROPERTY_TYPE,
+ data: *const BYTE,
+ dataSize: UINT32,
+ ) -> HRESULT,
+ fn GetValueByName(
+ name: PCWSTR,
+ prop_type: D2D1_PROPERTY_TYPE,
+ data: *mut BYTE,
+ dataSize: UINT32,
+ ) -> HRESULT,
+ fn GetValue(
+ index: UINT32,
+ prop_type: D2D1_PROPERTY_TYPE,
+ data: *mut BYTE,
+ dataSize: UINT32,
+ ) -> HRESULT,
+ fn GetValueSize(
+ index: UINT32,
+ ) -> UINT32,
+ fn GetSubProperties(
+ index: UINT32,
+ subProperties: *mut *mut ID2D1Properties,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x28211a43, 0x7d89, 0x476f, 0x81, 0x81, 0x2d, 0x61, 0x59, 0xb2, 0x20, 0xad)]
+interface ID2D1Effect(ID2D1EffectVtbl): ID2D1Properties(ID2D1PropertiesVtbl) {
+ fn SetInput(
+ index: UINT32,
+ input: *const ID2D1Image,
+ invalidate: BOOL,
+ ) -> (),
+ fn SetInputCount(
+ inputCount: UINT32,
+ ) -> HRESULT,
+ fn GetInput(
+ index: UINT32,
+ input: *mut *mut ID2D1Image,
+ ) -> (),
+ fn GetInputCount() -> UINT32,
+ fn GetOutput(
+ outputImage: *mut *mut ID2D1Image,
+ ) -> (),
+}}
+RIDL!{#[uuid(0xa898a84c, 0x3873, 0x4588, 0xb0, 0x8b, 0xeb, 0xbf, 0x97, 0x8d, 0xf0, 0x41)]
+interface ID2D1Bitmap1(ID2D1Bitmap1Vtbl): ID2D1Bitmap(ID2D1BitmapVtbl) {
+ fn GetColorContext(
+ colorContext: *mut *mut ID2D1ColorContext,
+ ) -> (),
+ fn GetOptions() -> D2D1_BITMAP_OPTIONS,
+ fn GetSurface(
+ dxgiSurface: *mut *mut IDXGISurface,
+ ) -> HRESULT,
+ fn Map(
+ options: D2D1_MAP_OPTIONS,
+ mappedRect: *mut D2D1_MAPPED_RECT,
+ ) -> HRESULT,
+ fn Unmap() -> HRESULT,
+}}
+RIDL!{#[uuid(0x1c4820bb, 0x5771, 0x4518, 0xa5, 0x81, 0x2f, 0xe4, 0xdd, 0x0e, 0xc6, 0x57)]
+interface ID2D1ColorContext(ID2D1ColorContextVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ fn GetColorSpace() -> D2D1_COLOR_SPACE,
+ fn GetProfileSize() -> UINT32,
+ fn GetProfile(
+ profile: *mut BYTE,
+ profileSize: UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xae1572f4, 0x5dd0, 0x4777, 0x99, 0x8b, 0x92, 0x79, 0x47, 0x2a, 0xe6, 0x3b)]
+interface ID2D1GradientStopCollection1(ID2D1GradientStopCollection1Vtbl):
+ ID2D1GradientStopCollection(ID2D1GradientStopCollectionVtbl) {
+ fn GetGradientStops1(
+ gradientStops: *mut D2D1_GRADIENT_STOP,
+ gradientStopsCount: UINT32,
+ ) -> (),
+ fn GetPreInterpolationSpace() -> D2D1_COLOR_SPACE,
+ fn GetPostInterpolationSpace() -> D2D1_COLOR_SPACE,
+ fn GetBufferPrecision() -> D2D1_BUFFER_PRECISION,
+ fn GetColorInterpolationMode() -> D2D1_COLOR_INTERPOLATION_MODE,
+}}
+RIDL!{#[uuid(0x689f1f85, 0xc72e, 0x4e33, 0x8f, 0x19, 0x85, 0x75, 0x4e, 0xfd, 0x5a, 0xce)]
+interface ID2D1DrawingStateBlock1(ID2D1DrawingStateBlock1Vtbl):
+ ID2D1DrawingStateBlock(ID2D1DrawingStateBlockVtbl) {
+ fn GetDescription(
+ stateDescription: *mut D2D1_DRAWING_STATE_DESCRIPTION1,
+ ) -> (),
+ fn SetDescription(
+ stateDescription: *const D2D1_DRAWING_STATE_DESCRIPTION1,
+ ) -> (),
+}}
+RIDL!{#[uuid(0xe8f7fe7a, 0x191c, 0x466d, 0xad, 0x95, 0x97, 0x56, 0x78, 0xbd, 0xa9, 0x98)]
+interface ID2D1DeviceContext(ID2D1DeviceContextVtbl): ID2D1RenderTarget(ID2D1RenderTargetVtbl) {
+ fn CreateBitmap(
+ size: D2D1_SIZE_U,
+ sourceData: *const c_void,
+ pitch: UINT32,
+ bitmapProperties: *const D2D1_BITMAP_PROPERTIES1,
+ bitmap: *mut *mut ID2D1Bitmap1,
+ ) -> HRESULT,
+ fn CreateBitmapFromWicBitmap(
+ wicBitmapSource: *const IWICBitmapSource,
+ bitmapProperties: *const D2D1_BITMAP_PROPERTIES1,
+ bitmap: *mut *mut ID2D1Bitmap1,
+ ) -> HRESULT,
+ fn CreateColorContext(
+ space: D2D1_COLOR_SPACE,
+ profile: *const BYTE,
+ profileSize: UINT32,
+ colorContext: *mut *mut ID2D1ColorContext,
+ ) -> HRESULT,
+ fn CreateColorContextFromFilename(
+ filename: PCWSTR,
+ colorContext: *mut *mut ID2D1ColorContext,
+ ) -> HRESULT,
+ fn CreateColorContextFromWicColorContext(
+ wicColorContext: *const IWICColorContext,
+ colorContext: *mut *mut ID2D1ColorContext,
+ ) -> HRESULT,
+ fn CreateBitmapFromDxgiSurface(
+ surface: *const IDXGISurface,
+ bitmapProperties: *const D2D1_BITMAP_PROPERTIES1,
+ bitmap: *mut *mut ID2D1Bitmap1,
+ ) -> HRESULT,
+ fn CreateEffect(
+ effectId: REFCLSID,
+ effect: *mut *mut ID2D1Effect,
+ ) -> HRESULT,
+ fn CreateGradientStopCollection(
+ straightAlphaGradientStops: *const D2D1_GRADIENT_STOP,
+ straightAlphaGradientStopsCount: UINT32,
+ preInterpolationSpace: D2D1_COLOR_SPACE,
+ postInterpolationSpace: D2D1_COLOR_SPACE,
+ bufferPrecision: D2D1_BUFFER_PRECISION,
+ extendMode: D2D1_EXTEND_MODE,
+ colorInterpolationMode: D2D1_COLOR_INTERPOLATION_MODE,
+ gradientStopCollection1: *mut *mut ID2D1GradientStopCollection1,
+ ) -> HRESULT,
+ fn CreateImageBrush(
+ image: *const ID2D1Image,
+ imageBrushProperties: *const D2D1_IMAGE_BRUSH_PROPERTIES,
+ brushProperties: *const D2D1_BRUSH_PROPERTIES,
+ imageBrush: *mut *mut ID2D1ImageBrush,
+ ) -> HRESULT,
+ fn CreateBitmapBrush(
+ bitmap: *const ID2D1Bitmap,
+ bitmapBrushProperties: *const D2D1_BITMAP_BRUSH_PROPERTIES1,
+ brushProperties: *const D2D1_BRUSH_PROPERTIES,
+ bitmapBrush: *mut *mut ID2D1BitmapBrush1,
+ ) -> HRESULT,
+ fn CreateCommandList(
+ commandList: *mut *mut ID2D1CommandList,
+ ) -> HRESULT,
+ fn IsDxgiFormatSupported(
+ format: DXGI_FORMAT,
+ ) -> BOOL,
+ fn IsBufferPrecisionSupported(
+ bufferPrecision: D2D1_BUFFER_PRECISION,
+ ) -> BOOL,
+ fn GetImageLocalBounds(
+ image: *const ID2D1Image,
+ localBounds: *mut D2D1_RECT_F,
+ ) -> HRESULT,
+ fn GetImageWorldBounds(
+ image: *const ID2D1Image,
+ worldBounds: *mut D2D1_RECT_F,
+ ) -> HRESULT,
+ fn GetGlyphRunWorldBounds(
+ baselineOrigin: D2D1_POINT_2F,
+ glyphRun: *const DWRITE_GLYPH_RUN,
+ measuringMode: DWRITE_MEASURING_MODE,
+ bounds: *mut D2D1_RECT_F,
+ ) -> HRESULT,
+ fn GetDevice(
+ device: *mut *mut ID2D1Device,
+ ) -> (),
+ fn SetTarget(
+ image: *const ID2D1Image,
+ ) -> (),
+ fn GetTarget(
+ image: *mut *mut ID2D1Image,
+ ) -> (),
+ fn SetRenderingControls(
+ renderingControls: *const D2D1_RENDERING_CONTROLS,
+ ) -> (),
+ fn GetRenderingControls(
+ renderingControls: *mut D2D1_RENDERING_CONTROLS,
+ ) -> (),
+ fn SetPrimitiveBlend(
+ primitiveBlend: D2D1_PRIMITIVE_BLEND,
+ ) -> (),
+ fn GetPrimitiveBlend() -> D2D1_PRIMITIVE_BLEND,
+ fn SetUnitMode(
+ unitMode: D2D1_UNIT_MODE,
+ ) -> (),
+ fn GetUnitMode() -> D2D1_UNIT_MODE,
+ fn DrawGlyphRun(
+ baselineOrigin: D2D1_POINT_2F,
+ glyphRun: *const DWRITE_GLYPH_RUN,
+ glyphRunDescription: *const DWRITE_GLYPH_RUN_DESCRIPTION,
+ foregroundBrush: *const ID2D1Brush,
+ measuringMode: DWRITE_MEASURING_MODE,
+ ) -> (),
+ fn DrawImage(
+ image: *const ID2D1Image,
+ targetOffset: *const D2D1_POINT_2F,
+ imageRectangle: *const D2D1_RECT_F,
+ interpolationMode: D2D1_INTERPOLATION_MODE,
+ compositeMode: D2D1_COMPOSITE_MODE,
+ ) -> (),
+ fn DrawGdiMetafile(
+ gdiMetafile: *const ID2D1GdiMetafile,
+ targetOffset: *const D2D1_POINT_2F,
+ ) -> (),
+ fn DrawBitmap(
+ bitmap: *const ID2D1Bitmap,
+ destinationRectangle: *const D2D1_RECT_F,
+ opacity: FLOAT,
+ interpolationMode: D2D1_INTERPOLATION_MODE,
+ sourceRectangle: *const D2D1_RECT_F,
+ perspectiveTransform: *const D2D1_MATRIX_4X4_F,
+ ) -> (),
+ fn PushLayer(
+ layerParameters: *const D2D1_LAYER_PARAMETERS1,
+ layer: *const ID2D1Layer,
+ ) -> (),
+ fn InvalidateEffectInputRectangle(
+ effect: *const ID2D1Effect,
+ input: UINT32,
+ inputRectangle: *const D2D1_RECT_F,
+ ) -> HRESULT,
+ fn GetEffectInvalidRectangleCount(
+ effect: *const ID2D1Effect,
+ rectangleCount: *mut UINT32,
+ ) -> HRESULT,
+ fn GetEffectInvalidRectangles(
+ effect: *const ID2D1Effect,
+ rectangles: *mut D2D1_RECT_F,
+ rectanglesCount: UINT32,
+ ) -> HRESULT,
+ fn GetEffectRequiredInputRectangles(
+ renderEffect: *const ID2D1Effect,
+ renderImageRectangle: *const D2D1_RECT_F,
+ inputDescriptions: *const D2D1_EFFECT_INPUT_DESCRIPTION,
+ requiredInputRects: *mut D2D1_RECT_F,
+ inputCount: UINT32,
+ ) -> HRESULT,
+ fn FillOpacityMask(
+ opacityMask: *const ID2D1Bitmap,
+ brush: *const ID2D1Brush,
+ destinationRectangle: *const D2D1_RECT_F,
+ sourceRectangle: *const D2D1_RECT_F,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x47dd575d, 0xac05, 0x4cdd, 0x80, 0x49, 0x9b, 0x02, 0xcd, 0x16, 0xf4, 0x4c)]
+interface ID2D1Device(ID2D1DeviceVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ fn CreateDeviceContext(
+ options: D2D1_DEVICE_CONTEXT_OPTIONS,
+ deviceContext: *mut *mut ID2D1DeviceContext,
+ ) -> HRESULT,
+ fn CreatePrintControl(
+ wicFactory: *const IWICImagingFactory,
+ documentTarget: *const IPrintDocumentPackageTarget,
+ printControlProperties: *const D2D1_PRINT_CONTROL_PROPERTIES,
+ printControl: *mut *mut ID2D1PrintControl,
+ ) -> HRESULT,
+ fn SetMaximumTextureMemory(
+ maximumInBytes: UINT64,
+ ) -> (),
+ fn GetMaximumTextureMemory() -> UINT64,
+ fn ClearResources(
+ millisecondsSinceUse: UINT32,
+ ) -> (),
+}}
+RIDL!{#[uuid(0xbb12d362, 0xdaee, 0x4b9a, 0xaa, 0x1d, 0x14, 0xba, 0x40, 0x1c, 0xfa, 0x1f)]
+interface ID2D1Factory1(ID2D1Factory1Vtbl): ID2D1Factory(ID2D1FactoryVtbl) {
+ fn CreateDevice(
+ dxgiDevice: *const IDXGIDevice,
+ d2dDevice: *mut *mut ID2D1Device,
+ ) -> HRESULT,
+ fn CreateStrokeStyle(
+ strokeStyleProperties: *const D2D1_STROKE_STYLE_PROPERTIES1,
+ dashes: *const FLOAT,
+ dashesCount: UINT32,
+ strokeStyle: *mut *mut ID2D1StrokeStyle1,
+ ) -> HRESULT,
+ fn CreatePathGeometry(
+ pathGeometry: *mut *mut ID2D1PathGeometry1,
+ ) -> HRESULT,
+ fn CreateDrawingStateBlock(
+ drawingStateDescription: *const D2D1_DRAWING_STATE_DESCRIPTION1,
+ textRenderingParams: *const IDWriteRenderingParams,
+ drawingStateBlock: *mut *mut ID2D1DrawingStateBlock1,
+ ) -> HRESULT,
+ fn CreateGdiMetafile(
+ metafileStream: *const IStream,
+ metafile: *mut *mut ID2D1GdiMetafile,
+ ) -> HRESULT,
+ fn RegisterEffectFromStream(
+ classId: REFCLSID,
+ propertyXml: *const IStream,
+ bindings: *const D2D1_PROPERTY_BINDING,
+ bindingsCount: UINT32,
+ effectFactory: PD2D1_EFFECT_FACTORY,
+ ) -> HRESULT,
+ fn RegisterEffectFromString(
+ classId: REFCLSID,
+ propertyXml: PCWSTR,
+ bindings: *const D2D1_PROPERTY_BINDING,
+ bindingsCount: UINT32,
+ effectFactory: PD2D1_EFFECT_FACTORY,
+ ) -> HRESULT,
+ fn UnregisterEffect(
+ classId: REFCLSID,
+ ) -> HRESULT,
+ fn GetRegisteredEffects(
+ effects: *mut CLSID,
+ effectsCount: UINT32,
+ effectsReturned: *mut UINT32,
+ effectsRegistered: *mut UINT32,
+ ) -> HRESULT,
+ fn GetEffectProperties(
+ effectId: REFCLSID,
+ properties: *mut *mut ID2D1Properties,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x31e6e7bc, 0xe0ff, 0x4d46, 0x8c, 0x64, 0xa0, 0xa8, 0xc4, 0x1c, 0x15, 0xd3)]
+interface ID2D1Multithread(ID2D1MultithreadVtbl): IUnknown(IUnknownVtbl) {
+ fn GetMultithreadProtected() -> BOOL,
+ fn Enter() -> (),
+ fn Leave() -> (),
+}}
+extern "system" {
+ pub fn D2D1CreateDevice(
+ dxgiDevice: *const IDXGIDevice,
+ creationProperties: *const D2D1_CREATION_PROPERTIES,
+ d2dDevice: *mut *mut ID2D1Device,
+ ) -> HRESULT;
+ pub fn D2D1CreateDeviceContext(
+ dxgiSurface: *const IDXGISurface,
+ creationProperties: *const D2D1_CREATION_PROPERTIES,
+ d2dDeviceContext: *mut *mut ID2D1DeviceContext,
+ ) -> HRESULT;
+ pub fn D2D1ConvertColorSpace(
+ sourceColorSpace: D2D1_COLOR_SPACE,
+ destinationColorSpace: D2D1_COLOR_SPACE,
+ color: *const D2D1_COLOR_F,
+ ) -> D2D1_COLOR_F;
+ pub fn D2D1SinCos(
+ angle: FLOAT,
+ s: *mut FLOAT,
+ c: *mut FLOAT,
+ ) -> ();
+ pub fn D2D1Tan(
+ angle: FLOAT,
+ ) -> FLOAT;
+ pub fn D2D1Vec3Length(
+ x: FLOAT,
+ y: FLOAT,
+ z: FLOAT,
+ ) -> FLOAT;
+}
diff --git a/vendor/winapi/src/um/d2d1_2.rs b/vendor/winapi/src/um/d2d1_2.rs
new file mode 100644
index 000000000..31b051390
--- /dev/null
+++ b/vendor/winapi/src/um/d2d1_2.rs
@@ -0,0 +1,68 @@
+// 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 d2d1_2.h
+use shared::dxgi::IDXGIDevice;
+use shared::minwindef::FLOAT;
+use um::d2d1::{ID2D1Brush, ID2D1Geometry, ID2D1StrokeStyle};
+use um::d2d1::{ID2D1Resource, ID2D1ResourceVtbl};
+use um::d2d1_1::{D2D1_DEVICE_CONTEXT_OPTIONS, D2D1_PRIMITIVE_BLEND};
+use um::d2d1_1::{ID2D1DeviceContext, ID2D1DeviceContextVtbl};
+use um::d2d1_1::{ID2D1Device, ID2D1DeviceVtbl};
+use um::d2d1_1::{ID2D1Factory1, ID2D1Factory1Vtbl};
+use um::d2d1_1::{ID2D1CommandSink, ID2D1CommandSinkVtbl};
+use um::winnt::HRESULT;
+ENUM!{enum D2D1_RENDERING_PRIORITY {
+ D2D1_RENDERING_PRIORITY_NORMAL = 0,
+ D2D1_RENDERING_PRIORITY_LOW = 1,
+ D2D1_RENDERING_PRIORITY_FORCE_DWORD = 0xffffffff,
+}}
+RIDL!{#[uuid(0xa16907d7, 0xbc02, 0x4801, 0x99, 0xe8, 0x8c, 0xf7, 0xf4, 0x85, 0xf7, 0x74)]
+interface ID2D1GeometryRealization(ID2D1GeometryRealizationVtbl):
+ ID2D1Resource(ID2D1ResourceVtbl) {}}
+RIDL!{#[uuid(0xd37f57e4, 0x6908, 0x459f, 0xa1, 0x99, 0xe7, 0x2f, 0x24, 0xf7, 0x99, 0x87)]
+interface ID2D1DeviceContext1(ID2D1DeviceContext1Vtbl):
+ ID2D1DeviceContext(ID2D1DeviceContextVtbl) {
+ fn CreateFilledGeometryRealization(
+ geometry: *mut ID2D1Geometry,
+ flatteningTolerance: FLOAT,
+ geometryRealization: *mut *mut ID2D1GeometryRealization,
+ ) -> HRESULT,
+ fn CreateStrokedGeometryRealization(
+ geometry: *mut ID2D1Geometry,
+ flatteningTolerance: FLOAT,
+ strokeWidth: FLOAT,
+ strokeStyle: *mut ID2D1StrokeStyle,
+ geometryRealization: *mut *mut ID2D1GeometryRealization,
+ ) -> HRESULT,
+ fn DrawGeometryRealization(
+ geometryRealization: *mut ID2D1GeometryRealization,
+ brush: *mut ID2D1Brush,
+ ) -> (),
+}}
+RIDL!{#[uuid(0xd21768e1, 0x23a4, 0x4823, 0xa1, 0x4b, 0x7c, 0x3e, 0xba, 0x85, 0xd6, 0x58)]
+interface ID2D1Device1(ID2D1Device1Vtbl): ID2D1Device(ID2D1DeviceVtbl) {
+ fn GetRenderingPriority() -> D2D1_RENDERING_PRIORITY,
+ fn SetRenderingPriority(
+ renderingPriority: D2D1_RENDERING_PRIORITY,
+ ) -> (),
+ fn CreateDeviceContext(
+ options: D2D1_DEVICE_CONTEXT_OPTIONS,
+ deviceContext1: *mut *mut ID2D1DeviceContext1,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x94f81a73, 0x9212, 0x4376, 0x9c, 0x58, 0xb1, 0x6a, 0x3a, 0x0d, 0x39, 0x92)]
+interface ID2D1Factory2(ID2D1Factory2Vtbl): ID2D1Factory1(ID2D1Factory1Vtbl) {
+ fn CreateDevice(
+ dxgiDevice: *mut IDXGIDevice,
+ d2dDevice1: *mut *mut ID2D1Device1,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x9eb767fd, 0x4269, 0x4467, 0xb8, 0xc2, 0xeb, 0x30, 0xcb, 0x30, 0x57, 0x43)]
+interface ID2D1CommandSink1(ID2D1CommandSink1Vtbl): ID2D1CommandSink(ID2D1CommandSinkVtbl) {
+ fn SetPrimitiveBlend1(
+ primitiveBlend: D2D1_PRIMITIVE_BLEND,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/d2d1_3.rs b/vendor/winapi/src/um/d2d1_3.rs
new file mode 100644
index 000000000..64b7bd394
--- /dev/null
+++ b/vendor/winapi/src/um/d2d1_3.rs
@@ -0,0 +1,698 @@
+// 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 d2d1_3.h
+use ctypes::c_void;
+use shared::basetsd::{UINT16, UINT32, UINT64};
+use shared::dxgi::{IDXGIDevice, IDXGISurface};
+use shared::dxgitype::DXGI_COLOR_SPACE_TYPE;
+use shared::minwindef::{BOOL, BYTE, DWORD, FLOAT};
+use shared::ntdef::WCHAR;
+use shared::winerror::HRESULT;
+use um::d2d1::{
+ D2D1_BITMAP_INTERPOLATION_MODE, D2D1_COLOR_F, D2D1_DRAW_TEXT_OPTIONS, D2D1_GAMMA_1_0,
+ D2D1_GAMMA_2_2, D2D1_MATRIX_3X2_F, D2D1_POINT_2F, D2D1_RECT_F, D2D1_RECT_U, D2D1_SIZE_F,
+ ID2D1Bitmap, ID2D1Brush, ID2D1Image, ID2D1ImageVtbl, ID2D1Resource, ID2D1ResourceVtbl,
+ ID2D1SimplifiedGeometrySink,
+};
+use um::d2d1_1::{
+ D2D1_BUFFER_PRECISION, D2D1_DEVICE_CONTEXT_OPTIONS, D2D1_INTERPOLATION_MODE,
+ D2D1_PRIMITIVE_BLEND, ID2D1ColorContext, ID2D1ColorContextVtbl, ID2D1CommandList,
+ ID2D1GdiMetafile, ID2D1GdiMetafileSink, ID2D1GdiMetafileSinkVtbl, ID2D1GdiMetafileVtbl,
+};
+use um::d2d1_2::{
+ ID2D1CommandSink1, ID2D1CommandSink1Vtbl, ID2D1Device1, ID2D1Device1Vtbl, ID2D1DeviceContext1,
+ ID2D1DeviceContext1Vtbl, ID2D1Factory2, ID2D1Factory2Vtbl,
+};
+use um::d2d1effects::D2D1_BLEND_MODE;
+use um::d2d1svg::ID2D1SvgDocument;
+use um::dcommon::{D2D1_ALPHA_MODE, DWRITE_GLYPH_IMAGE_FORMATS, DWRITE_MEASURING_MODE};
+use um::dwrite::{DWRITE_GLYPH_RUN, IDWriteFontFace, IDWriteTextFormat, IDWriteTextLayout};
+use um::objidlbase::IStream;
+use um::wincodec::IWICBitmapSource;
+ENUM!{enum D2D1_INK_NIB_SHAPE {
+ D2D1_INK_NIB_SHAPE_ROUND = 0,
+ D2D1_INK_NIB_SHAPE_SQUARE = 1,
+}}
+ENUM!{enum D2D1_ORIENTATION {
+ D2D1_ORIENTATION_DEFAULT = 1,
+ D2D1_ORIENTATION_FLIP_HORIZONTAL = 2,
+ D2D1_ORIENTATION_ROTATE_CLOCKWISE180 = 3,
+ D2D1_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL = 4,
+ D2D1_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL = 5,
+ D2D1_ORIENTATION_ROTATE_CLOCKWISE270 = 6,
+ D2D1_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL = 7,
+ D2D1_ORIENTATION_ROTATE_CLOCKWISE90 = 8,
+}}
+ENUM!{enum D2D1_IMAGE_SOURCE_LOADING_OPTIONS {
+ D2D1_IMAGE_SOURCE_LOADING_OPTIONS_NONE = 0,
+ D2D1_IMAGE_SOURCE_LOADING_OPTIONS_RELEASE_SOURCE = 1,
+ D2D1_IMAGE_SOURCE_LOADING_OPTIONS_CACHE_ON_DEMAND = 2,
+}}
+ENUM!{enum D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS {
+ D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS_NONE = 0,
+ D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS_LOW_QUALITY_PRIMARY_CONVERSION = 1,
+}}
+ENUM!{enum D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS {
+ D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS_NONE = 0,
+ D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS_DISABLE_DPI_SCALE = 1,
+}}
+STRUCT!{struct D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES {
+ orientation: D2D1_ORIENTATION,
+ scaleX: FLOAT,
+ scaleY: FLOAT,
+ interpolationMode: D2D1_INTERPOLATION_MODE,
+ options: D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS,
+}}
+STRUCT!{struct D2D1_INK_POINT {
+ x: FLOAT,
+ y: FLOAT,
+ radius: FLOAT,
+}}
+STRUCT!{struct D2D1_INK_BEZIER_SEGMENT {
+ point1: D2D1_INK_POINT,
+ point2: D2D1_INK_POINT,
+ point3: D2D1_INK_POINT,
+}}
+STRUCT!{struct D2D1_INK_STYLE_PROPERTIES {
+ nibShape: D2D1_INK_NIB_SHAPE,
+ nibTransform: D2D1_MATRIX_3X2_F,
+}}
+ENUM!{enum D2D1_PATCH_EDGE_MODE {
+ D2D1_PATCH_EDGE_MODE_ALIASED = 0,
+ D2D1_PATCH_EDGE_MODE_ANTIALIASED = 1,
+ D2D1_PATCH_EDGE_MODE_ALIASED_INFLATED = 2,
+}}
+STRUCT!{struct D2D1_GRADIENT_MESH_PATCH {
+ point00: D2D1_POINT_2F,
+ point01: D2D1_POINT_2F,
+ point02: D2D1_POINT_2F,
+ point03: D2D1_POINT_2F,
+ point10: D2D1_POINT_2F,
+ point11: D2D1_POINT_2F,
+ point12: D2D1_POINT_2F,
+ point13: D2D1_POINT_2F,
+ point20: D2D1_POINT_2F,
+ point21: D2D1_POINT_2F,
+ point22: D2D1_POINT_2F,
+ point23: D2D1_POINT_2F,
+ point30: D2D1_POINT_2F,
+ point31: D2D1_POINT_2F,
+ point32: D2D1_POINT_2F,
+ point33: D2D1_POINT_2F,
+ color00: D2D1_COLOR_F,
+ color03: D2D1_COLOR_F,
+ color30: D2D1_COLOR_F,
+ color33: D2D1_COLOR_F,
+ topEdgeMode: D2D1_PATCH_EDGE_MODE,
+ leftEdgeMode: D2D1_PATCH_EDGE_MODE,
+ bottomEdgeMode: D2D1_PATCH_EDGE_MODE,
+ rightEdgeMode: D2D1_PATCH_EDGE_MODE,
+}}
+ENUM!{enum D2D1_SPRITE_OPTIONS {
+ D2D1_SPRITE_OPTIONS_NONE = 0,
+ D2D1_SPRITE_OPTIONS_CLAMP_TO_SOURCE_RECTANGLE = 1,
+}}
+ENUM!{enum D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION {
+ D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION_DEFAULT = 0,
+ D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION_DISABLE = 1,
+}}
+ENUM!{enum D2D1_GAMMA1 {
+ D2D1_GAMMA1_G22 = D2D1_GAMMA_2_2,
+ D2D1_GAMMA1_G10 = D2D1_GAMMA_1_0,
+ D2D1_GAMMA1_G2084 = 2,
+}}
+STRUCT!{struct D2D1_SIMPLE_COLOR_PROFILE {
+ redPrimary: D2D1_POINT_2F,
+ greenPrimary: D2D1_POINT_2F,
+ bluePrimary: D2D1_POINT_2F,
+ whitePointXZ: D2D1_POINT_2F,
+ gamma: D2D1_GAMMA1,
+}}
+ENUM!{enum D2D1_COLOR_CONTEXT_TYPE {
+ D2D1_COLOR_CONTEXT_TYPE_ICC = 0,
+ D2D1_COLOR_CONTEXT_TYPE_SIMPLE = 1,
+ D2D1_COLOR_CONTEXT_TYPE_DXGI = 2,
+}}
+DEFINE_GUID!{IID_ID2D1InkStyle,
+ 0xbae8b344, 0x23fc, 0x4071, 0x8c, 0xb5, 0xd0, 0x5d, 0x6f, 0x07, 0x38, 0x48}
+DEFINE_GUID!{IID_ID2D1Ink,
+ 0xb499923b, 0x7029, 0x478f, 0xa8, 0xb3, 0x43, 0x2c, 0x7c, 0x5f, 0x53, 0x12}
+DEFINE_GUID!{IID_ID2D1GradientMesh,
+ 0xf292e401, 0xc050, 0x4cde, 0x83, 0xd7, 0x04, 0x96, 0x2d, 0x3b, 0x23, 0xc2}
+DEFINE_GUID!{IID_ID2D1ImageSource,
+ 0xc9b664e5, 0x74a1, 0x4378, 0x9a, 0xc2, 0xee, 0xfc, 0x37, 0xa3, 0xf4, 0xd8}
+DEFINE_GUID!{IID_ID2D1ImageSourceFromWic,
+ 0x77395441, 0x1c8f, 0x4555, 0x86, 0x83, 0xf5, 0x0d, 0xab, 0x0f, 0xe7, 0x92}
+DEFINE_GUID!{IID_ID2D1TransformedImageSource,
+ 0x7f1f79e5, 0x2796, 0x416c, 0x8f, 0x55, 0x70, 0x0f, 0x91, 0x14, 0x45, 0xe5}
+DEFINE_GUID!{IID_ID2D1LookupTable3D,
+ 0x53dd9855, 0xa3b0, 0x4d5b, 0x82, 0xe1, 0x26, 0xe2, 0x5c, 0x5e, 0x57, 0x97}
+DEFINE_GUID!{IID_ID2D1DeviceContext2,
+ 0x394ea6a3, 0x0c34, 0x4321, 0x95, 0x0b, 0x6c, 0xa2, 0x0f, 0x0b, 0xe6, 0xc7}
+DEFINE_GUID!{IID_ID2D1Device2,
+ 0xa44472e1, 0x8dfb, 0x4e60, 0x84, 0x92, 0x6e, 0x28, 0x61, 0xc9, 0xca, 0x8b}
+DEFINE_GUID!{IID_ID2D1Factory3,
+ 0x0869759f, 0x4f00, 0x413f, 0xb0, 0x3e, 0x2b, 0xda, 0x45, 0x40, 0x4d, 0x0f}
+DEFINE_GUID!{IID_ID2D1CommandSink2,
+ 0x3bab440e, 0x417e, 0x47df, 0xa2, 0xe2, 0xbc, 0x0b, 0xe6, 0xa0, 0x09, 0x16}
+DEFINE_GUID!{IID_ID2D1GdiMetafile1,
+ 0x2e69f9e8, 0xdd3f, 0x4bf9, 0x95, 0xba, 0xc0, 0x4f, 0x49, 0xd7, 0x88, 0xdf}
+DEFINE_GUID!{IID_ID2D1GdiMetafileSink1,
+ 0xfd0ecb6b, 0x91e6, 0x411e, 0x86, 0x55, 0x39, 0x5e, 0x76, 0x0f, 0x91, 0xb4}
+DEFINE_GUID!{IID_ID2D1SpriteBatch,
+ 0x4dc583bf, 0x3a10, 0x438a, 0x87, 0x22, 0xe9, 0x76, 0x52, 0x24, 0xf1, 0xf1}
+DEFINE_GUID!{IID_ID2D1DeviceContext3,
+ 0x235a7496, 0x8351, 0x414c, 0xbc, 0xd4, 0x66, 0x72, 0xab, 0x2d, 0x8e, 0x00}
+DEFINE_GUID!{IID_ID2D1Device3,
+ 0x852f2087, 0x802c, 0x4037, 0xab, 0x60, 0xff, 0x2e, 0x7e, 0xe6, 0xfc, 0x01}
+DEFINE_GUID!{IID_ID2D1Factory4,
+ 0xbd4ec2d2, 0x0662, 0x4bee, 0xba, 0x8e, 0x6f, 0x29, 0xf0, 0x32, 0xe0, 0x96}
+DEFINE_GUID!{IID_ID2D1CommandSink3,
+ 0x18079135, 0x4cf3, 0x4868, 0xbc, 0x8e, 0x06, 0x06, 0x7e, 0x6d, 0x24, 0x2d}
+DEFINE_GUID!{IID_ID2D1SvgGlyphStyle,
+ 0xaf671749, 0xd241, 0x4db8, 0x8e, 0x41, 0xdc, 0xc2, 0xe5, 0xc1, 0xa4, 0x38}
+DEFINE_GUID!{IID_ID2D1DeviceContext4,
+ 0x8c427831, 0x3d90, 0x4476, 0xb6, 0x47, 0xc4, 0xfa, 0xe3, 0x49, 0xe4, 0xdb}
+DEFINE_GUID!{IID_ID2D1Device4,
+ 0xd7bdb159, 0x5683, 0x4a46, 0xbc, 0x9c, 0x72, 0xdc, 0x72, 0x0b, 0x85, 0x8b}
+DEFINE_GUID!{IID_ID2D1Factory5,
+ 0xc4349994, 0x838e, 0x4b0f, 0x8c, 0xab, 0x44, 0x99, 0x7d, 0x9e, 0xea, 0xcc}
+DEFINE_GUID!{IID_ID2D1CommandSink4,
+ 0xc78a6519, 0x40d6, 0x4218, 0xb2, 0xde, 0xbe, 0xee, 0xb7, 0x44, 0xbb, 0x3e}
+DEFINE_GUID!{IID_ID2D1ColorContext1,
+ 0x1ab42875, 0xc57f, 0x4be9, 0xbd, 0x85, 0x9c, 0xd7, 0x8d, 0x6f, 0x55, 0xee}
+DEFINE_GUID!{IID_ID2D1DeviceContext5,
+ 0x7836d248, 0x68cc, 0x4df6, 0xb9, 0xe8, 0xde, 0x99, 0x1b, 0xf6, 0x2e, 0xb7}
+DEFINE_GUID!{IID_ID2D1Device5,
+ 0xd55ba0a4, 0x6405, 0x4694, 0xae, 0xf5, 0x08, 0xee, 0x1a, 0x43, 0x58, 0xb4}
+DEFINE_GUID!{IID_ID2D1Factory6,
+ 0xf9976f46, 0xf642, 0x44c1, 0x97, 0xca, 0xda, 0x32, 0xea, 0x2a, 0x26, 0x35}
+DEFINE_GUID!{IID_ID2D1CommandSink5,
+ 0x7047dd26, 0xb1e7, 0x44a7, 0x95, 0x9a, 0x83, 0x49, 0xe2, 0x14, 0x4f, 0xa8}
+DEFINE_GUID!{IID_ID2D1DeviceContext6,
+ 0x985f7e37, 0x4ed0, 0x4a19, 0x98, 0xa3, 0x15, 0xb0, 0xed, 0xfd, 0xe3, 0x06}
+DEFINE_GUID!{IID_ID2D1Device6,
+ 0x7bfef914, 0x2d75, 0x4bad, 0xbe, 0x87, 0xe1, 0x8d, 0xdb, 0x07, 0x7b, 0x6d}
+DEFINE_GUID!{IID_ID2D1Factory7,
+ 0xbdc2bdd3, 0xb96c, 0x4de6, 0xbd, 0xf7, 0x99, 0xd4, 0x74, 0x54, 0x54, 0xde}
+RIDL!{#[uuid(0xbae8b344, 0x23fc, 0x4071, 0x8c, 0xb5, 0xd0, 0x5d, 0x6f, 0x07, 0x38, 0x48)]
+interface ID2D1InkStyle(ID2D1InkStyleVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ fn SetNibTransform(
+ transform: *const D2D1_MATRIX_3X2_F,
+ ) -> (),
+ fn GetNibTransform(
+ transform: *mut D2D1_MATRIX_3X2_F,
+ ) -> (),
+ fn SetNibShape(
+ nibShape: D2D1_INK_NIB_SHAPE,
+ ) -> (),
+ fn GetNibShape() -> D2D1_INK_NIB_SHAPE,
+}}
+RIDL!{#[uuid(0xb499923b, 0x7029, 0x478f, 0xa8, 0xb3, 0x43, 0x2c, 0x7c, 0x5f, 0x53, 0x12)]
+interface ID2D1Ink(ID2D1InkVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ fn SetStartPoint(
+ startPoint: *const D2D1_INK_POINT,
+ ) -> (),
+ fn GetStartPoint() -> D2D1_INK_POINT,
+ fn AddSegments(
+ segments: *const D2D1_INK_BEZIER_SEGMENT,
+ segmentsCount: UINT32,
+ ) -> HRESULT,
+ fn RemoveSegmentsAtEnd(
+ segmentsCount: UINT32,
+ ) -> HRESULT,
+ fn SetSegments(
+ startSegment: UINT32,
+ segments: *const D2D1_INK_BEZIER_SEGMENT,
+ segmentsCount: UINT32,
+ ) -> HRESULT,
+ fn SetSegmentAtEnd(
+ segment: *const D2D1_INK_BEZIER_SEGMENT,
+ ) -> HRESULT,
+ fn GetSegmentCount() -> UINT32,
+ fn GetSegments(
+ startSegment: UINT32,
+ segments: *mut D2D1_INK_BEZIER_SEGMENT,
+ segmentsCount: UINT32,
+ ) -> HRESULT,
+ fn StreamAsGeometry(
+ inkStyle: *mut ID2D1InkStyle,
+ worldTransform: *const D2D1_MATRIX_3X2_F,
+ flatteningTolerance: FLOAT,
+ geometrySink: *mut ID2D1SimplifiedGeometrySink,
+ ) -> HRESULT,
+ fn GetBounds(
+ inkStyle: *mut ID2D1InkStyle,
+ worldTransform: *const D2D1_MATRIX_3X2_F,
+ bounds: *mut D2D1_RECT_F,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xf292e401, 0xc050, 0x4cde, 0x83, 0xd7, 0x04, 0x96, 0x2d, 0x3b, 0x23, 0xc2)]
+interface ID2D1GradientMesh(ID2D1GradientMeshVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ fn GetPatchCount() -> UINT32,
+ fn GetPatches(
+ startIndex: UINT32,
+ patches: *mut D2D1_GRADIENT_MESH_PATCH,
+ patchesCount: UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xc9b664e5, 0x74a1, 0x4378, 0x9a, 0xc2, 0xee, 0xfc, 0x37, 0xa3, 0xf4, 0xd8)]
+interface ID2D1ImageSource(ID2D1ImageSourceVtbl): ID2D1Image(ID2D1ImageVtbl) {
+ fn OfferResources() -> HRESULT,
+ fn TryReclaimResources(
+ resourcesDiscarded: *mut BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x77395441, 0x1c8f, 0x4555, 0x86, 0x83, 0xf5, 0x0d, 0xab, 0x0f, 0xe7, 0x92)]
+interface ID2D1ImageSourceFromWic(ID2D1ImageSourceFromWicVtbl):
+ ID2D1ImageSource(ID2D1ImageSourceVtbl) {
+ fn EnsureCached(
+ rectangleToFill: *const D2D1_RECT_U,
+ ) -> HRESULT,
+ fn TrimCache(
+ rectangleToPreserve: *const D2D1_RECT_U,
+ ) -> HRESULT,
+ fn GetSource(
+ wicBitmapSource: *mut *mut IWICBitmapSource,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x7f1f79e5, 0x2796, 0x416c, 0x8f, 0x55, 0x70, 0x0f, 0x91, 0x14, 0x45, 0xe5)]
+interface ID2D1TransformedImageSource(ID2D1TransformedImageSourceVtbl):
+ ID2D1Image(ID2D1ImageVtbl) {
+ fn GetSource(
+ imageSource: *mut *mut ID2D1ImageSource,
+ ) -> (),
+ fn GetProperties(
+ properties: *mut D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x53dd9855, 0xa3b0, 0x4d5b, 0x82, 0xe1, 0x26, 0xe2, 0x5c, 0x5e, 0x57, 0x97)]
+interface ID2D1LookupTable3D(ID2D1LookupTable3DVtbl): ID2D1Resource(ID2D1ResourceVtbl) {}}
+RIDL!{#[uuid(0x394ea6a3, 0x0c34, 0x4321, 0x95, 0x0b, 0x6c, 0xa2, 0x0f, 0x0b, 0xe6, 0xc7)]
+interface ID2D1DeviceContext2(ID2D1DeviceContext2Vtbl):
+ ID2D1DeviceContext1(ID2D1DeviceContext1Vtbl) {
+ fn CreateInk(
+ startPoint: *const D2D1_INK_POINT,
+ ink: *mut *mut ID2D1Ink,
+ ) -> HRESULT,
+ fn CreateInkStyle(
+ inkStyleProperties: *const D2D1_INK_STYLE_PROPERTIES,
+ inkStyle: *mut *mut ID2D1InkStyle,
+ ) -> HRESULT,
+ fn CreateGradientMesh(
+ patches: *const D2D1_GRADIENT_MESH_PATCH,
+ patchesCount: UINT32,
+ gradientMesh: *mut *mut ID2D1GradientMesh,
+ ) -> HRESULT,
+ fn CreateImageSourceFromWic(
+ wicBitmapSource: *mut IWICBitmapSource,
+ loadingOptions: D2D1_IMAGE_SOURCE_LOADING_OPTIONS,
+ alphaMode: D2D1_ALPHA_MODE,
+ imageSource: *mut *mut ID2D1ImageSourceFromWic,
+ ) -> HRESULT,
+ fn CreateLookupTable3D(
+ precision: D2D1_BUFFER_PRECISION,
+ extents: *const UINT32,
+ data: *const BYTE,
+ dataCount: UINT32,
+ strides: *const UINT32,
+ lookupTable: *mut *mut ID2D1LookupTable3D,
+ ) -> HRESULT,
+ fn CreateImageSourceFromDxgi(
+ surfaces: *const *mut IDXGISurface,
+ surfaceCount: UINT32,
+ colorSpace: DXGI_COLOR_SPACE_TYPE,
+ options: D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS,
+ imageSource: *mut *mut ID2D1ImageSource,
+ ) -> HRESULT,
+ fn GetGradientMeshWorldBounds(
+ gradientMesh: *mut ID2D1GradientMesh,
+ pBounds: *mut D2D1_RECT_F,
+ ) -> HRESULT,
+ fn DrawInk(
+ ink: *mut ID2D1Ink,
+ brush: *mut ID2D1Brush,
+ inkStyle: *mut ID2D1InkStyle,
+ ) -> (),
+ fn DrawGradientMesh(
+ gradientMesh: *mut ID2D1GradientMesh,
+ ) -> (),
+ fn DrawGdiMetafile(
+ gdiMetafile: *mut ID2D1GdiMetafile,
+ destinationRectangle: *const D2D1_RECT_F,
+ sourceRectangle: *const D2D1_RECT_F,
+ ) -> (),
+ fn CreateTransformedImageSource(
+ imageSource: *mut ID2D1ImageSource,
+ properties: *const D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES,
+ transformedImageSource: *mut *mut ID2D1TransformedImageSource,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa44472e1, 0x8dfb, 0x4e60, 0x84, 0x92, 0x6e, 0x28, 0x61, 0xc9, 0xca, 0x8b)]
+interface ID2D1Device2(ID2D1Device2Vtbl): ID2D1Device1(ID2D1Device1Vtbl) {
+ fn CreateDeviceContext(
+ options: D2D1_DEVICE_CONTEXT_OPTIONS,
+ deviceContext2: *mut *mut ID2D1DeviceContext2,
+ ) -> HRESULT,
+ fn FlushDeviceContexts(
+ bitmap: *mut ID2D1Bitmap,
+ ) -> (),
+ fn GetDxgiDevice(
+ dxgiDevice: *mut *mut IDXGIDevice,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x0869759f, 0x4f00, 0x413f, 0xb0, 0x3e, 0x2b, 0xda, 0x45, 0x40, 0x4d, 0x0f)]
+interface ID2D1Factory3(ID2D1Factory3Vtbl): ID2D1Factory2(ID2D1Factory2Vtbl) {
+ fn CreateDevice(
+ dxgiDevice: *mut IDXGIDevice,
+ d2dDevice2: *mut *mut ID2D1Device2,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3bab440e, 0x417e, 0x47df, 0xa2, 0xe2, 0xbc, 0x0b, 0xe6, 0xa0, 0x09, 0x16)]
+interface ID2D1CommandSink2(ID2D1CommandSink2Vtbl): ID2D1CommandSink1(ID2D1CommandSink1Vtbl) {
+ fn DrawInk(
+ ink: *mut ID2D1Ink,
+ brush: *mut ID2D1Brush,
+ inkStyle: *mut ID2D1InkStyle,
+ ) -> (),
+ fn DrawGradientMesh(
+ gradientMesh: *mut ID2D1GradientMesh,
+ ) -> (),
+ fn DrawGdiMetafile(
+ gdiMetafile: *mut ID2D1GdiMetafile,
+ destinationRectangle: *const D2D1_RECT_F,
+ sourceRectangle: *const D2D1_RECT_F,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x2e69f9e8, 0xdd3f, 0x4bf9, 0x95, 0xba, 0xc0, 0x4f, 0x49, 0xd7, 0x88, 0xdf)]
+interface ID2D1GdiMetafile1(ID2D1GdiMetafile1Vtbl): ID2D1GdiMetafile(ID2D1GdiMetafileVtbl) {
+ fn GetDpi(
+ dpiX: *mut FLOAT,
+ dpiY: *mut FLOAT,
+ ) -> HRESULT,
+ fn GetSourceBounds(
+ bounds: *mut D2D1_RECT_F,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xfd0ecb6b, 0x91e6, 0x411e, 0x86, 0x55, 0x39, 0x5e, 0x76, 0x0f, 0x91, 0xb4)]
+interface ID2D1GdiMetafileSink1(ID2D1GdiMetafileSink1Vtbl):
+ ID2D1GdiMetafileSink(ID2D1GdiMetafileSinkVtbl) {
+ fn ProcessRecord(
+ recordType: DWORD,
+ recordData: *const c_void,
+ recordDataSize: DWORD,
+ flags: UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x4dc583bf, 0x3a10, 0x438a, 0x87, 0x22, 0xe9, 0x76, 0x52, 0x24, 0xf1, 0xf1)]
+interface ID2D1SpriteBatch(ID2D1SpriteBatchVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ fn AddSprites(
+ spriteCount: UINT32,
+ destinationRectangle: *const D2D1_RECT_F,
+ sourceRectangles: *const D2D1_RECT_U,
+ colors: *const D2D1_COLOR_F,
+ transforms: *const D2D1_MATRIX_3X2_F,
+ destinationRectanglesStride: UINT32,
+ sourceRectanglesStride: UINT32,
+ colorsStride: UINT32,
+ transformsStride: D2D1_MATRIX_3X2_F,
+ ) -> HRESULT,
+ fn SetSprites(
+ startIndex: UINT32,
+ spriteCount: UINT32,
+ destinationRectangle: *const D2D1_RECT_F,
+ sourceRectangles: *const D2D1_RECT_U,
+ colors: *const D2D1_COLOR_F,
+ transforms: *const D2D1_MATRIX_3X2_F,
+ destinationRectanglesStride: UINT32,
+ sourceRectanglesStride: UINT32,
+ colorsStride: UINT32,
+ transformsStride: D2D1_MATRIX_3X2_F,
+ ) -> HRESULT,
+ fn GetSprites(
+ startIndex: UINT32,
+ spriteCount: UINT32,
+ destinationRectangle: *mut D2D1_RECT_F,
+ sourceRectangles: *mut D2D1_RECT_U,
+ colors: *mut D2D1_COLOR_F,
+ transforms: *mut D2D1_MATRIX_3X2_F,
+ ) -> HRESULT,
+ fn GetSpriteCount() -> UINT32,
+ fn Clear() -> (),
+}}
+RIDL!{#[uuid(0x235a7496, 0x8351, 0x414c, 0xbc, 0xd4, 0x66, 0x72, 0xab, 0x2d, 0x8e, 0x00)]
+interface ID2D1DeviceContext3(ID2D1DeviceContext3Vtbl):
+ ID2D1DeviceContext2(ID2D1DeviceContext2Vtbl) {
+ fn CreateSpriteBatch(
+ spriteBatch: *mut *mut ID2D1SpriteBatch,
+ ) -> HRESULT,
+ fn DrawSpriteBatch(
+ spriteBatch: *mut ID2D1SpriteBatch,
+ startIndex: UINT32,
+ spriteCount: UINT32,
+ bitmap: *mut ID2D1Bitmap,
+ interpolationMode: D2D1_BITMAP_INTERPOLATION_MODE,
+ spriteOptions: D2D1_SPRITE_OPTIONS,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x852f2087, 0x802c, 0x4037, 0xab, 0x60, 0xff, 0x2e, 0x7e, 0xe6, 0xfc, 0x01)]
+interface ID2D1Device3(ID2D1Device3Vtbl): ID2D1Device2(ID2D1Device2Vtbl) {
+ fn CreateDeviceContext(
+ options: D2D1_DEVICE_CONTEXT_OPTIONS,
+ deviceContext3: *mut *mut ID2D1DeviceContext3,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xbd4ec2d2, 0x0662, 0x4bee, 0xba, 0x8e, 0x6f, 0x29, 0xf0, 0x32, 0xe0, 0x96)]
+interface ID2D1Factory4(ID2D1Factory4Vtbl): ID2D1Factory3(ID2D1Factory3Vtbl) {
+ fn CreateDevice(
+ dxgiDevice: *mut IDXGIDevice,
+ d2dDevice3: *mut *mut ID2D1Device3,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x18079135, 0x4cf3, 0x4868, 0xbc, 0x8e, 0x06, 0x06, 0x7e, 0x6d, 0x24, 0x2d)]
+interface ID2D1CommandSink3(ID2D1CommandSink3Vtbl): ID2D1CommandSink2(ID2D1CommandSink2Vtbl) {
+ fn DrawSpriteBatch(
+ spriteBatch: *mut ID2D1SpriteBatch,
+ startIndex: UINT32,
+ spriteCount: UINT32,
+ bitmap: *mut ID2D1Bitmap,
+ interpolationMode: D2D1_BITMAP_INTERPOLATION_MODE,
+ spriteOptions: D2D1_SPRITE_OPTIONS,
+ ) -> (),
+}}
+RIDL!{#[uuid(0xaf671749, 0xd241, 0x4db8, 0x8e, 0x41, 0xdc, 0xc2, 0xe5, 0xc1, 0xa4, 0x38)]
+interface ID2D1SvgGlyphStyle(ID2D1SvgGlyphStyleVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ fn SetFill(
+ brush: *mut ID2D1Brush,
+ ) -> HRESULT,
+ fn GetFill(
+ brush: *mut *mut ID2D1Brush,
+ ) -> (),
+ fn SetStroke(
+ brush: *mut ID2D1Brush,
+ strokeWidth: FLOAT,
+ dashes: *const FLOAT,
+ dashesCount: UINT32,
+ dashOffset: FLOAT,
+ ) -> HRESULT,
+ fn GetStrokeDashesCount() -> UINT32,
+ fn GetStroke(
+ brush: *mut *mut ID2D1Brush,
+ strokeWidth: *mut FLOAT,
+ dashes: *mut FLOAT,
+ dashesCount: UINT32,
+ dashOffset: *mut FLOAT,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x8c427831, 0x3d90, 0x4476, 0xb6, 0x47, 0xc4, 0xfa, 0xe3, 0x49, 0xe4, 0xdb)]
+interface ID2D1DeviceContext4(ID2D1DeviceContext4Vtbl):
+ ID2D1DeviceContext3(ID2D1DeviceContext3Vtbl) {
+ fn CreateSvgGlyphStyle(
+ svgGlyphStyle: *mut *mut ID2D1SvgGlyphStyle,
+ ) -> HRESULT,
+ fn DrawText(
+ string: *const WCHAR,
+ stringLength: UINT32,
+ textFormat: *mut IDWriteTextFormat,
+ layoutRect: *const D2D1_RECT_F,
+ defaultFillBrush: *mut ID2D1Brush,
+ svgGlyphStyle: *mut ID2D1SvgGlyphStyle,
+ colorPaletteIndex: UINT32,
+ options: D2D1_DRAW_TEXT_OPTIONS,
+ measuringMode: DWRITE_MEASURING_MODE,
+ ) -> (),
+ fn DrawTextLayout(
+ origin: D2D1_POINT_2F,
+ textLayout: *mut IDWriteTextLayout,
+ defaultFillBrush: *mut ID2D1Brush,
+ svgGlyphStyle: *mut ID2D1SvgGlyphStyle,
+ colorPaletteIndex: UINT32,
+ options: D2D1_DRAW_TEXT_OPTIONS,
+ ) -> (),
+ fn DrawColorBitmapGlyphRun(
+ glyphImageFormat: DWRITE_GLYPH_IMAGE_FORMATS,
+ baselineOrigin: D2D1_POINT_2F,
+ glyphRun: *const DWRITE_GLYPH_RUN,
+ measuringMode: DWRITE_MEASURING_MODE,
+ bitmapSnapOption: D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION,
+ ) -> (),
+ fn DrawSvgGlyphRun(
+ baselineOrigin: D2D1_POINT_2F,
+ glyphRun: *const DWRITE_GLYPH_RUN,
+ defaultFillBrush: *mut ID2D1Brush,
+ svgGlyphStyle: *mut ID2D1SvgGlyphStyle,
+ colorPaletteIndex: UINT32,
+ measuringMode: DWRITE_MEASURING_MODE,
+ ) -> (),
+ fn GetColorBitmapGlyphImage(
+ glyphImageFormat: DWRITE_GLYPH_IMAGE_FORMATS,
+ glyphOrigin: D2D1_POINT_2F,
+ fontFace: *mut IDWriteFontFace,
+ fontEmSize: FLOAT,
+ glyphIndex: UINT16,
+ isSideways: BOOL,
+ worldTransform: *const D2D1_MATRIX_3X2_F,
+ dpiX: FLOAT,
+ dpiY: FLOAT,
+ glyphTransform: *mut D2D1_MATRIX_3X2_F,
+ glyphImage: *mut *mut ID2D1Image,
+ ) -> HRESULT,
+ fn GetSvgGlyphImage(
+ glyphImageFormat: DWRITE_GLYPH_IMAGE_FORMATS,
+ glyphOrigin: D2D1_POINT_2F,
+ fontFace: *mut IDWriteFontFace,
+ fontEmSize: FLOAT,
+ glyphIndex: UINT16,
+ isSideways: BOOL,
+ worldTransform: *const D2D1_MATRIX_3X2_F,
+ defaultFillBrush: *mut ID2D1Brush,
+ svgGlyphStyle: *mut ID2D1SvgGlyphStyle,
+ colorPaletteIndex: UINT32,
+ glyphTransform: *mut D2D1_MATRIX_3X2_F,
+ glyphImage: *mut *mut ID2D1CommandList,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xd7bdb159, 0x5683, 0x4a46, 0xbc, 0x9c, 0x72, 0xdc, 0x72, 0x0b, 0x85, 0x8b)]
+interface ID2D1Device4(ID2D1Device4Vtbl): ID2D1Device3(ID2D1Device3Vtbl) {
+ fn CreateDeviceContext(
+ options: D2D1_DEVICE_CONTEXT_OPTIONS,
+ deviceContext4: *mut *mut ID2D1DeviceContext4,
+ ) -> HRESULT,
+ fn SetMaximumColorGlyphCacheMemory(
+ maximumInBytes: UINT64,
+ ) -> (),
+ fn GetMaximumColorGlyphCacheMemory() -> UINT64,
+}}
+RIDL!{#[uuid(0xc4349994, 0x838e, 0x4b0f, 0x8c, 0xab, 0x44, 0x99, 0x7d, 0x9e, 0xea, 0xcc)]
+interface ID2D1Factory5(ID2D1Factory5Vtbl): ID2D1Factory4(ID2D1Factory4Vtbl) {
+ fn CreateDevice(
+ dxgiDevice: *mut IDXGIDevice,
+ d2dDevice4: *mut *mut ID2D1Device4,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xc78a6519, 0x40d6, 0x4218, 0xb2, 0xde, 0xbe, 0xee, 0xb7, 0x44, 0xbb, 0x3e)]
+interface ID2D1CommandSink4(ID2D1CommandSink4Vtbl): ID2D1CommandSink3(ID2D1CommandSink3Vtbl) {
+ fn SetPrimitiveBlend2(
+ primitiveBlend: D2D1_PRIMITIVE_BLEND,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x1ab42875, 0xc57f, 0x4be9, 0xbd, 0x85, 0x9c, 0xd7, 0x8d, 0x6f, 0x55, 0xee)]
+interface ID2D1ColorContext1(ID2D1ColorContext1Vtbl): ID2D1ColorContext(ID2D1ColorContextVtbl) {
+ fn GetColorContextType() -> D2D1_COLOR_CONTEXT_TYPE,
+ fn GetDXGIColorSpace() -> DXGI_COLOR_SPACE_TYPE,
+ fn GetSimpleColorProfile(
+ simpleProfile: *mut D2D1_SIMPLE_COLOR_PROFILE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x7836d248, 0x68cc, 0x4df6, 0xb9, 0xe8, 0xde, 0x99, 0x1b, 0xf6, 0x2e, 0xb7)]
+interface ID2D1DeviceContext5(ID2D1DeviceContext5Vtbl):
+ ID2D1DeviceContext4(ID2D1DeviceContext4Vtbl) {
+ fn CreateSvgDocument(
+ inputXmlStream: *mut IStream,
+ viewportSize: D2D1_SIZE_F,
+ svgDocument: *mut *mut ID2D1SvgDocument,
+ ) -> HRESULT,
+ fn DrawSvgDocument(
+ svgDocument: *mut ID2D1SvgDocument,
+ ) -> (),
+ fn CreateColorContextFromDxgiColorSpace(
+ colorSpace: DXGI_COLOR_SPACE_TYPE,
+ colorContext: *mut *mut ID2D1ColorContext1,
+ ) -> HRESULT,
+ fn CreateColorContextFromSimpleColorProfile(
+ simpleProfile: *const D2D1_SIMPLE_COLOR_PROFILE,
+ colorContext: *mut *mut ID2D1ColorContext1,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xd55ba0a4, 0x6405, 0x4694, 0xae, 0xf5, 0x08, 0xee, 0x1a, 0x43, 0x58, 0xb4)]
+interface ID2D1Device5(ID2D1Device5Vtbl): ID2D1Device4(ID2D1Device4Vtbl) {
+ fn CreateDeviceContext(
+ options: D2D1_DEVICE_CONTEXT_OPTIONS,
+ deviceContext5: *mut *mut ID2D1DeviceContext5,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xf9976f46, 0xf642, 0x44c1, 0x97, 0xca, 0xda, 0x32, 0xea, 0x2a, 0x26, 0x35)]
+interface ID2D1Factory6(ID2D1Factory6Vtbl): ID2D1Factory5(ID2D1Factory5Vtbl) {
+ fn CreateDevice(
+ dxgiDevice: *mut IDXGIDevice,
+ d2dDevice5: *mut *mut ID2D1Device5,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x7047dd26, 0xb1e7, 0x44a7, 0x95, 0x9a, 0x83, 0x49, 0xe2, 0x14, 0x4f, 0xa8)]
+interface ID2D1CommandSink5(ID2D1CommandSink5Vtbl): ID2D1CommandSink4(ID2D1CommandSink4Vtbl) {
+ fn BlendImage(
+ image: *mut ID2D1Image,
+ blendMode: D2D1_BLEND_MODE,
+ targetOffset: *const D2D1_POINT_2F,
+ imageRectangle: *const D2D1_RECT_F,
+ interpolationMode: D2D1_INTERPOLATION_MODE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x985f7e37, 0x4ed0, 0x4a19, 0x98, 0xa3, 0x15, 0xb0, 0xed, 0xfd, 0xe3, 0x06)]
+interface ID2D1DeviceContext6(ID2D1DeviceContext6Vtbl):
+ ID2D1DeviceContext5(ID2D1DeviceContext5Vtbl) {
+ fn BlendImage(
+ image: *mut ID2D1Image,
+ blendMode: D2D1_BLEND_MODE,
+ targetOffset: *const D2D1_POINT_2F,
+ imageRectangle: *const D2D1_RECT_F,
+ interpolationMode: D2D1_INTERPOLATION_MODE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x7bfef914, 0x2d75, 0x4bad, 0xbe, 0x87, 0xe1, 0x8d, 0xdb, 0x07, 0x7b, 0x6d)]
+interface ID2D1Device6(ID2D1Device6Vtbl): ID2D1Device5(ID2D1Device5Vtbl) {
+ fn CreateDeviceContext(
+ options: D2D1_DEVICE_CONTEXT_OPTIONS,
+ deviceContext6: *mut *mut ID2D1DeviceContext6,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xbdc2bdd3, 0xb96c, 0x4de6, 0xbd, 0xf7, 0x99, 0xd4, 0x74, 0x54, 0x54, 0xde)]
+interface ID2D1Factory7(ID2D1Factory7Vtbl): ID2D1Factory6(ID2D1Factory6Vtbl) {
+ fn CreateDevice(
+ dxgiDevice: *mut IDXGIDevice,
+ d2dDevice6: *mut *mut ID2D1Device6,
+ ) -> HRESULT,
+}}
+extern "system" {
+ pub fn D2D1GetGradientMeshInteriorPointsFromCoonsPatch(
+ pPoint0: *const D2D1_POINT_2F,
+ pPoint1: *const D2D1_POINT_2F,
+ pPoint2: *const D2D1_POINT_2F,
+ pPoint3: *const D2D1_POINT_2F,
+ pPoint4: *const D2D1_POINT_2F,
+ pPoint5: *const D2D1_POINT_2F,
+ pPoint6: *const D2D1_POINT_2F,
+ pPoint7: *const D2D1_POINT_2F,
+ pPoint8: *const D2D1_POINT_2F,
+ pPoint9: *const D2D1_POINT_2F,
+ pPoint10: *const D2D1_POINT_2F,
+ pPoint11: *const D2D1_POINT_2F,
+ pTensorPoint11: *mut D2D1_POINT_2F,
+ pTensorPoint12: *mut D2D1_POINT_2F,
+ pTensorPoint21: *mut D2D1_POINT_2F,
+ pTensorPoint22: *mut D2D1_POINT_2F,
+ );
+}
diff --git a/vendor/winapi/src/um/d2d1effectauthor.rs b/vendor/winapi/src/um/d2d1effectauthor.rs
new file mode 100644
index 000000000..c8322791c
--- /dev/null
+++ b/vendor/winapi/src/um/d2d1effectauthor.rs
@@ -0,0 +1,516 @@
+// 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 ctypes::c_void;
+use shared::basetsd::UINT32;
+use shared::dxgiformat::DXGI_FORMAT;
+use shared::guiddef::{GUID, REFCLSID, REFGUID};
+use shared::minwindef::{BOOL, BYTE, FLOAT};
+use shared::ntdef::{HRESULT, PCSTR, PCWSTR};
+use um::d2d1::D2D1_EXTEND_MODE;
+use um::d2d1_1::{
+ D2D1_BUFFER_PRECISION, D2D1_COLOR_SPACE, ID2D1Bitmap1, ID2D1ColorContext, ID2D1Effect,
+};
+use um::d2dbasetypes::{D2D_POINT_2L, D2D_POINT_2U, D2D_RECT_L};
+use um::d3dcommon::D3D_FEATURE_LEVEL;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::wincodec::IWICColorContext;
+FN!{stdcall PD2D1_PROPERTY_SET_FUNCTION(
+ effect: *const IUnknown,
+ data: *const BYTE,
+ dataSize: UINT32,
+) -> HRESULT}
+FN!{stdcall PD2D1_PROPERTY_GET_FUNCTION(
+ effect: *const IUnknown,
+ data: *mut BYTE,
+ dataSize: UINT32,
+ actualSize: *mut UINT32,
+) -> HRESULT}
+ENUM!{enum D2D1_CHANGE_TYPE {
+ D2D1_CHANGE_TYPE_NONE = 0,
+ D2D1_CHANGE_TYPE_PROPERTIES = 1,
+ D2D1_CHANGE_TYPE_CONTEXT = 2,
+ D2D1_CHANGE_TYPE_GRAPH = 3,
+}}
+ENUM!{enum D2D1_PIXEL_OPTIONS {
+ D2D1_PIXEL_OPTIONS_NONE = 0,
+ D2D1_PIXEL_OPTIONS_TRIVIAL_SAMPLING = 1,
+}}
+ENUM!{enum D2D1_VERTEX_OPTIONS {
+ D2D1_VERTEX_OPTIONS_NONE = 0,
+ D2D1_VERTEX_OPTIONS_DO_NOT_CLEAR = 1,
+ D2D1_VERTEX_OPTIONS_USE_DEPTH_BUFFER = 2,
+ D2D1_VERTEX_OPTIONS_ASSUME_NO_OVERLAP = 4,
+}}
+ENUM!{enum D2D1_VERTEX_USAGE {
+ D2D1_VERTEX_USAGE_STATIC = 0,
+ D2D1_VERTEX_USAGE_DYNAMIC = 1,
+}}
+ENUM!{enum D2D1_BLEND_OPERATION {
+ D2D1_BLEND_OPERATION_ADD = 1,
+ D2D1_BLEND_OPERATION_SUBTRACT = 2,
+ D2D1_BLEND_OPERATION_REV_SUBTRACT = 3,
+ D2D1_BLEND_OPERATION_MIN = 4,
+ D2D1_BLEND_OPERATION_MAX = 5,
+}}
+ENUM!{enum D2D1_BLEND {
+ D2D1_BLEND_ZERO = 1,
+ D2D1_BLEND_ONE = 2,
+ D2D1_BLEND_SRC_COLOR = 3,
+ D2D1_BLEND_INV_SRC_COLOR = 4,
+ D2D1_BLEND_SRC_ALPHA = 5,
+ D2D1_BLEND_INV_SRC_ALPHA = 6,
+ D2D1_BLEND_DEST_ALPHA = 7,
+ D2D1_BLEND_INV_DEST_ALPHA = 8,
+ D2D1_BLEND_DEST_COLOR = 9,
+ D2D1_BLEND_INV_DEST_COLOR = 10,
+ D2D1_BLEND_SRC_ALPHA_SAT = 11,
+ D2D1_BLEND_BLEND_FACTOR = 14,
+ D2D1_BLEND_INV_BLEND_FACTOR = 15,
+}}
+ENUM!{enum D2D1_CHANNEL_DEPTH {
+ D2D1_CHANNEL_DEPTH_DEFAULT = 0,
+ D2D1_CHANNEL_DEPTH_1 = 1,
+ D2D1_CHANNEL_DEPTH_4 = 4,
+}}
+ENUM!{enum D2D1_FILTER {
+ D2D1_FILTER_MIN_MAG_MIP_POINT = 0x00,
+ D2D1_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x01,
+ D2D1_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x04,
+ D2D1_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x05,
+ D2D1_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10,
+ D2D1_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11,
+ D2D1_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14,
+ D2D1_FILTER_MIN_MAG_MIP_LINEAR = 0x15,
+ D2D1_FILTER_ANISOTROPIC = 0x55,
+}}
+ENUM!{enum D2D1_FEATURE {
+ D2D1_FEATURE_DOUBLES = 0,
+ D2D1_FEATURE_D3D10_X_HARDWARE_OPTIONS = 1,
+}}
+STRUCT!{struct D2D1_PROPERTY_BINDING {
+ propertyName: PCWSTR,
+ setFunction: PD2D1_PROPERTY_SET_FUNCTION,
+ getFunction: PD2D1_PROPERTY_GET_FUNCTION,
+}}
+STRUCT!{struct D2D1_RESOURCE_TEXTURE_PROPERTIES {
+ extents: *const UINT32,
+ dimensions: UINT32,
+ bufferPrecision: D2D1_BUFFER_PRECISION,
+ channelDepth: D2D1_CHANNEL_DEPTH,
+ filter: D2D1_FILTER,
+ extendModes: *const D2D1_EXTEND_MODE,
+}}
+STRUCT!{struct D2D1_INPUT_ELEMENT_DESC {
+ semanticName: PCSTR,
+ semanticIndex: UINT32,
+ format: DXGI_FORMAT,
+ inputSlot: UINT32,
+ alignedByteOffset: UINT32,
+}}
+pub const D2D1_APPEND_ALIGNED_ELEMENT: UINT32 = 0xffffffff;
+STRUCT!{struct D2D1_VERTEX_BUFFER_PROPERTIES {
+ inputCount: UINT32,
+ usage: D2D1_VERTEX_USAGE,
+ data: *const BYTE,
+ byteWidth: UINT32,
+}}
+STRUCT!{struct D2D1_CUSTOM_VERTEX_BUFFER_PROPERTIES {
+ shaderBufferWithInputSignature: *const BYTE,
+ shaderBufferSize: UINT32,
+ inputElements: *const D2D1_INPUT_ELEMENT_DESC,
+ elementCount: UINT32,
+ stride: UINT32,
+}}
+STRUCT!{struct D2D1_VERTEX_RANGE {
+ startVertex: UINT32,
+ vertexCount: UINT32,
+}}
+STRUCT!{struct D2D1_BLEND_DESCRIPTION {
+ sourceBlend: D2D1_BLEND,
+ destinationBlend: D2D1_BLEND,
+ blendOperation: D2D1_BLEND_OPERATION,
+ sourceBlendAlpha: D2D1_BLEND,
+ destinationBlendAlpha: D2D1_BLEND,
+ blendOperationAlpha: D2D1_BLEND_OPERATION,
+ blendFactor: [FLOAT; 4],
+}}
+STRUCT!{struct D2D1_INPUT_DESCRIPTION {
+ filter: D2D1_FILTER,
+ leveOfDetailCount: UINT32,
+}}
+STRUCT!{struct D2D1_FEATURE_DATA_DOUBLES {
+ doublePrecisionFloatShaderOps: BOOL,
+}}
+STRUCT!{struct D2D1_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS {
+ computeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x: BOOL,
+}}
+DEFINE_GUID!{IID_ID2D1VertexBuffer,
+ 0x9b8b1336, 0x00a5, 0x4668, 0x92, 0xb7, 0xce, 0xd5, 0xd8, 0xbf, 0x9b, 0x7b}
+DEFINE_GUID!{IID_ID2D1ResourceTexture,
+ 0x688d15c3, 0x02b0, 0x438d, 0xb1, 0x3a, 0xd1, 0xb4, 0x4c, 0x32, 0xc3, 0x9a}
+DEFINE_GUID!{IID_ID2D1RenderInfo,
+ 0x519ae1bd, 0xd19a, 0x420d, 0xb8, 0x49, 0x36, 0x4f, 0x59, 0x47, 0x76, 0xb7}
+DEFINE_GUID!{IID_ID2D1DrawInfo,
+ 0x693ce632, 0x7f2f, 0x45de, 0x93, 0xfe, 0x18, 0xd8, 0x8b, 0x37, 0xaa, 0x21}
+DEFINE_GUID!{IID_ID2D1ComputeInfo,
+ 0x5598b14b, 0x9fd7, 0x48b7, 0x9b, 0xdb, 0x8f, 0x09, 0x64, 0xeb, 0x38, 0xbc}
+DEFINE_GUID!{IID_ID2D1TransformNode,
+ 0xb2efe1e7, 0x729f, 0x4102, 0x94, 0x9f, 0x50, 0x5f, 0xa2, 0x1b, 0xf6, 0x66}
+DEFINE_GUID!{IID_ID2D1TransformGraph,
+ 0x13d29038, 0xc3e6, 0x4034, 0x90, 0x81, 0x13, 0xb5, 0x3a, 0x41, 0x79, 0x92}
+DEFINE_GUID!{IID_ID2D1Transform,
+ 0xef1a287d, 0x342a, 0x4f76, 0x8f, 0xdb, 0xda, 0x0d, 0x6e, 0xa9, 0xf9, 0x2b}
+DEFINE_GUID!{IID_ID2D1DrawTransform,
+ 0x36bfdcb6, 0x9739, 0x435d, 0xa3, 0x0d, 0xa6, 0x53, 0xbe, 0xff, 0x6a, 0x6f}
+DEFINE_GUID!{IID_ID2D1ComputeTransform,
+ 0x0d85573c, 0x01e3, 0x4f7d, 0xbf, 0xd9, 0x0d, 0x60, 0x60, 0x8b, 0xf3, 0xc3}
+DEFINE_GUID!{IID_ID2D1AnalysisTransform,
+ 0x0359dc30, 0x95e6, 0x4568, 0x90, 0x55, 0x27, 0x72, 0x0d, 0x13, 0x0e, 0x93}
+DEFINE_GUID!{IID_ID2D1SourceTransform,
+ 0xdb1800dd, 0x0c34, 0x4cf9, 0xbe, 0x90, 0x31, 0xcc, 0x0a, 0x56, 0x53, 0xe1}
+DEFINE_GUID!{IID_ID2D1ConcreteTransform,
+ 0x1a799d8a, 0x69f7, 0x4e4c, 0x9f, 0xed, 0x43, 0x7c, 0xcc, 0x66, 0x84, 0xcc}
+DEFINE_GUID!{IID_ID2D1BlendTransform,
+ 0x63ac0b32, 0xba44, 0x450f, 0x88, 0x06, 0x7f, 0x4c, 0xa1, 0xff, 0x2f, 0x1b}
+DEFINE_GUID!{IID_ID2D1BorderTransform,
+ 0x4998735c, 0x3a19, 0x473c, 0x97, 0x81, 0x65, 0x68, 0x47, 0xe3, 0xa3, 0x47}
+DEFINE_GUID!{IID_ID2D1OffsetTransform,
+ 0x3fe6adea, 0x7643, 0x4f53, 0xbd, 0x14, 0xa0, 0xce, 0x63, 0xf2, 0x40, 0x42}
+DEFINE_GUID!{IID_ID2D1BoundsAdjustmentTransform,
+ 0x90f732e2, 0x5092, 0x4606, 0xa8, 0x19, 0x86, 0x51, 0x97, 0x0b, 0xac, 0xcd}
+DEFINE_GUID!{IID_ID2D1EffectImpl,
+ 0xa248fd3f, 0x3e6c, 0x4e63, 0x9f, 0x03, 0x7f, 0x68, 0xec, 0xc9, 0x1d, 0xb9}
+DEFINE_GUID!{IID_ID2D1EffectContext,
+ 0x3d9f916b, 0x27dc, 0x4ad7, 0xb4, 0xf1, 0x64, 0x94, 0x53, 0x40, 0xf5, 0x63}
+RIDL!{#[uuid(0x9b8b1336, 0x00a5, 0x4668, 0x92, 0xb7, 0xce, 0xd5, 0xd8, 0xbf, 0x9b, 0x7b)]
+interface ID2D1VertexBuffer(ID2D1VertexBufferVtbl): IUnknown(IUnknownVtbl) {
+ fn Map(
+ data: *mut *mut BYTE,
+ ) -> HRESULT,
+ fn Unmap() -> HRESULT,
+}}
+RIDL!{#[uuid(0x688d15c3, 0x02b0, 0x438d, 0xb1, 0x3a, 0xd1, 0xb4, 0x4c, 0x32, 0xc3, 0x9a)]
+interface ID2D1ResourceTexture(ID2D1ResourceTextureVtbl): IUnknown(IUnknownVtbl) {
+ fn Update(
+ minimumExtents: *const UINT32,
+ maximumExtents: *const UINT32,
+ strides: *const UINT32,
+ dimensions: UINT32,
+ data: *const BYTE,
+ dataCount: UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x519ae1bd, 0xd19a, 0x420d, 0xb8, 0x49, 0x36, 0x4f, 0x59, 0x47, 0x76, 0xb7)]
+interface ID2D1RenderInfo(ID2D1RenderInfoVtbl): IUnknown(IUnknownVtbl) {
+ fn SetInputDescription(
+ inputIndex: UINT32,
+ inputDescription: D2D1_INPUT_DESCRIPTION,
+ ) -> HRESULT,
+ fn SetOutputBuffer(
+ bufferPrecision: D2D1_BUFFER_PRECISION,
+ channelDepth: D2D1_CHANNEL_DEPTH,
+ ) -> HRESULT,
+ fn SetCached(
+ isCached: BOOL,
+ ) -> (),
+ fn SetInstructionCountHint(
+ instructionCount: UINT32,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x693ce632, 0x7f2f, 0x45de, 0x93, 0xfe, 0x18, 0xd8, 0x8b, 0x37, 0xaa, 0x21)]
+interface ID2D1DrawInfo(ID2D1DrawInfoVtbl): ID2D1RenderInfo(ID2D1RenderInfoVtbl) {
+ fn SetPixelShaderConstantBuffer(
+ buffer: *const BYTE,
+ bufferCount: UINT32,
+ ) -> HRESULT,
+ fn SetResourceTexture(
+ textureIndex: UINT32,
+ resourceTexture: *mut ID2D1ResourceTexture,
+ ) -> HRESULT,
+ fn SetVertexShaderConstantBuffer(
+ buffer: *const BYTE,
+ bufferCount: UINT32,
+ ) -> HRESULT,
+ fn SetPixelShader(
+ shaderId: REFGUID,
+ pixelOptions: D2D1_PIXEL_OPTIONS,
+ ) -> HRESULT,
+ fn SetVertexProcessing(
+ vertexBuffer: *mut ID2D1VertexBuffer,
+ vertexOptions: D2D1_VERTEX_OPTIONS,
+ blendDescription: *const D2D1_BLEND_DESCRIPTION,
+ vertexRange: *const D2D1_VERTEX_RANGE,
+ vertexShader: *const GUID,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x5598b14b, 0x9fd7, 0x48b7, 0x9b, 0xdb, 0x8f, 0x09, 0x64, 0xeb, 0x38, 0xbc)]
+interface ID2D1ComputeInfo(ID2D1ComputeInfoVtbl): ID2D1RenderInfo(ID2D1RenderInfoVtbl) {
+ fn SetComputeShaderConstantBuffer(
+ buffer: *const BYTE,
+ bufferCount: UINT32,
+ ) -> HRESULT,
+ fn SetComputeShader(
+ shaderId: REFGUID,
+ ) -> HRESULT,
+ fn SetResourceTexture(
+ textureIndex: UINT32,
+ resourceTexture: *mut ID2D1ResourceTexture,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xb2efe1e7, 0x729f, 0x4102, 0x94, 0x9f, 0x50, 0x5f, 0xa2, 0x1b, 0xf6, 0x66)]
+interface ID2D1TransformNode(ID2D1TransformNodeVtbl): IUnknown(IUnknownVtbl) {
+ fn GetInputCount() -> UINT32,
+}}
+RIDL!{#[uuid(0x13d29038, 0xc3e6, 0x4034, 0x90, 0x81, 0x13, 0xb5, 0x3a, 0x41, 0x79, 0x92)]
+interface ID2D1TransformGraph(ID2D1TransformGraphVtbl): IUnknown(IUnknownVtbl) {
+ fn GetInputCount() -> UINT32,
+ fn SetSingleTransformNode(
+ node: *mut ID2D1TransformNode,
+ ) -> HRESULT,
+ fn AddNode(
+ node: *mut ID2D1TransformNode,
+ ) -> HRESULT,
+ fn RemoveNode(
+ node: *mut ID2D1TransformNode,
+ ) -> HRESULT,
+ fn SetOutputNode(
+ node: *mut ID2D1TransformNode,
+ ) -> HRESULT,
+ fn ConnectNode(
+ fromNode: *mut ID2D1TransformNode,
+ toNode: *mut ID2D1TransformNode,
+ toNodeInputIndex: UINT32,
+ ) -> HRESULT,
+ fn ConnectToEffectInput(
+ toEffectInputIndex: UINT32,
+ node: *mut ID2D1TransformNode,
+ toNodeInputIndex: UINT32,
+ ) -> HRESULT,
+ fn Clear() -> (),
+ fn SetPassthroughGraph(
+ effectInputIndex: UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xef1a287d, 0x342a, 0x4f76, 0x8f, 0xdb, 0xda, 0x0d, 0x6e, 0xa9, 0xf9, 0x2b)]
+interface ID2D1Transform(ID2D1TransformVtbl): ID2D1TransformNode(ID2D1TransformNodeVtbl) {
+ fn MapOutputRectToInputRects(
+ outputRect: *const D2D_RECT_L,
+ inputRects: *mut D2D_RECT_L,
+ inputRectsCount: UINT32,
+ ) -> HRESULT,
+ fn MapInputRectsToOutputRect(
+ inputRects: *const D2D_RECT_L,
+ inputOpaqueSubRects: *const D2D_RECT_L,
+ inputRectCount: UINT32,
+ outputRect: *mut D2D_RECT_L,
+ outputOpaqueSubRect: *mut D2D_RECT_L,
+ ) -> HRESULT,
+ fn MapInvalidRect(
+ inputIndex: UINT32,
+ invalidInputRect: D2D_RECT_L,
+ invalidOutputRect: *mut D2D_RECT_L,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x36bfdcb6, 0x9739, 0x435d, 0xa3, 0x0d, 0xa6, 0x53, 0xbe, 0xff, 0x6a, 0x6f)]
+interface ID2D1DrawTransform(ID2D1DrawTransformVtbl): ID2D1Transform(ID2D1TransformVtbl) {
+ fn SetDrawInfo(
+ drawInfo: *mut ID2D1DrawInfo,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x0d85573c, 0x01e3, 0x4f7d, 0xbf, 0xd9, 0x0d, 0x60, 0x60, 0x8b, 0xf3, 0xc3)]
+interface ID2D1ComputeTransform(ID2D1ComputeTransformVtbl): ID2D1Transform(ID2D1TransformVtbl) {
+ fn SetComputeInfo(
+ computeInfo: *mut ID2D1ComputeInfo,
+ ) -> HRESULT,
+ fn CalculateThreadgroups(
+ outputRect: *const D2D_RECT_L,
+ dimensionX: *mut UINT32,
+ dimensionY: *mut UINT32,
+ dimensionZ: *mut UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x0359dc30, 0x95e6, 0x4568, 0x90, 0x55, 0x27, 0x72, 0x0d, 0x13, 0x0e, 0x93)]
+interface ID2D1AnalysisTransform(ID2D1AnalysisTransformVtbl): IUnknown(IUnknownVtbl) {
+ fn ProcessAnalysisResults(
+ analysisData: *const BYTE,
+ analysisDataCount: UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xdb1800dd, 0x0c34, 0x4cf9, 0xbe, 0x90, 0x31, 0xcc, 0x0a, 0x56, 0x53, 0xe1)]
+interface ID2D1SourceTransform(ID2D1SourceTransformVtbl): ID2D1Transform(ID2D1TransformVtbl) {
+ fn SetRenderInfo(
+ renderInfo: *mut ID2D1RenderInfo,
+ ) -> HRESULT,
+ fn Draw(
+ target: *mut ID2D1Bitmap1,
+ drawRect: *mut D2D_RECT_L,
+ targetOrigin: D2D_POINT_2U,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x1a799d8a, 0x69f7, 0x4e4c, 0x9f, 0xed, 0x43, 0x7c, 0xcc, 0x66, 0x84, 0xcc)]
+interface ID2D1ConcreteTransform(ID2D1ConcreteTransformVtbl):
+ ID2D1TransformNode(ID2D1TransformNodeVtbl) {
+ fn SetOutputBuffer(
+ bufferPrecision: D2D1_BUFFER_PRECISION,
+ channelDepth: D2D1_CHANNEL_DEPTH,
+ ) -> HRESULT,
+ fn SetCached(
+ isCached: BOOL,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x63ac0b32, 0xba44, 0x450f, 0x88, 0x06, 0x7f, 0x4c, 0xa1, 0xff, 0x2f, 0x1b)]
+interface ID2D1BlendTransform(ID2D1BlendTransformVtbl):
+ ID2D1ConcreteTransform(ID2D1ConcreteTransformVtbl) {
+ fn SetDescription(
+ description: *const D2D1_BLEND_DESCRIPTION,
+ ) -> (),
+ fn GetDescription(
+ description: *mut D2D1_BLEND_DESCRIPTION,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x4998735c, 0x3a19, 0x473c, 0x97, 0x81, 0x65, 0x68, 0x47, 0xe3, 0xa3, 0x47)]
+interface ID2D1BorderTransform(ID2D1BorderTransformVtbl):
+ ID2D1ConcreteTransform(ID2D1ConcreteTransformVtbl) {
+ fn SetExtendModeX(
+ extendMode: D2D1_EXTEND_MODE,
+ ) -> (),
+ fn SetExtendModeY(
+ extendMode: D2D1_EXTEND_MODE,
+ ) -> (),
+ fn GetExtendModeX() -> D2D1_EXTEND_MODE,
+ fn GetExtendModeY() -> D2D1_EXTEND_MODE,
+}}
+RIDL!{#[uuid(0x3fe6adea, 0x7643, 0x4f53, 0xbd, 0x14, 0xa0, 0xce, 0x63, 0xf2, 0x40, 0x42)]
+interface ID2D1OffsetTransform(ID2D1OffsetTransformVtbl):
+ ID2D1TransformNode(ID2D1TransformNodeVtbl) {
+ fn SetOffset(
+ offset: D2D_POINT_2L,
+ ) -> (),
+ fn GetOffset() -> D2D_POINT_2L,
+}}
+RIDL!{#[uuid(0x90f732e2, 0x5092, 0x4606, 0xa8, 0x19, 0x86, 0x51, 0x97, 0x0b, 0xac, 0xcd)]
+interface ID2D1BoundsAdjustmentTransform(ID2D1BoundsAdjustmentTransformVtbl):
+ ID2D1TransformNode(ID2D1TransformNodeVtbl) {
+ fn SetOutputBounds(
+ outputBounds: *const D2D_RECT_L,
+ ) -> (),
+ fn GetOutputBounds(
+ outputBounds: *mut D2D_RECT_L,
+ ) -> (),
+}}
+RIDL!{#[uuid(0xa248fd3f, 0x3e6c, 0x4e63, 0x9f, 0x03, 0x7f, 0x68, 0xec, 0xc9, 0x1d, 0xb9)]
+interface ID2D1EffectImpl(ID2D1EffectImplVtbl): IUnknown(IUnknownVtbl) {
+ fn Initialize(
+ effectContext: *mut ID2D1EffectContext,
+ transformGraph: *mut ID2D1TransformGraph,
+ ) -> HRESULT,
+ fn PrepareForRender(
+ changeType: D2D1_CHANGE_TYPE,
+ ) -> HRESULT,
+ fn SetGraph(
+ transformGraph: *mut ID2D1TransformGraph,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3d9f916b, 0x27dc, 0x4ad7, 0xb4, 0xf1, 0x64, 0x94, 0x53, 0x40, 0xf5, 0x63)]
+interface ID2D1EffectContext(ID2D1EffectContextVtbl): IUnknown(IUnknownVtbl) {
+ fn GetDpi(
+ dpiX: *mut FLOAT,
+ dpiY: *mut FLOAT,
+ ) -> (),
+ fn CreateEffect(
+ effectId: REFCLSID,
+ effect: *mut *mut ID2D1Effect,
+ ) -> HRESULT,
+ fn GetMaximumSupportedFeatureLevel(
+ featureLevels: *const D3D_FEATURE_LEVEL,
+ featureLevelsCount: UINT32,
+ maximumSupportedFeatureLevel: *mut D3D_FEATURE_LEVEL,
+ ) -> HRESULT,
+ fn CreateTransformNodeFromEffect(
+ effect: *mut ID2D1Effect,
+ transformNode: *mut *mut ID2D1TransformNode,
+ ) -> HRESULT,
+ fn CreateBlendTransform(
+ numInputs: UINT32,
+ blendDescription: D2D1_BLEND_DESCRIPTION,
+ transform: *mut *mut ID2D1BlendTransform,
+ ) -> HRESULT,
+ fn CreateBorderTransform(
+ extendModeX: D2D1_EXTEND_MODE,
+ extendModeY: D2D1_EXTEND_MODE,
+ transform: *mut *mut ID2D1BorderTransform,
+ ) -> HRESULT,
+ fn CreateOffsetTransform(
+ offset: D2D_POINT_2L,
+ transform: *mut *mut ID2D1OffsetTransform,
+ ) -> HRESULT,
+ fn CreateBoundsAdjustmentTransform(
+ outputRectangle: *mut D2D_RECT_L,
+ transform: ID2D1BoundsAdjustmentTransform,
+ ) -> HRESULT,
+ fn LoadPixelShader(
+ shaderId: REFGUID,
+ shaderBuffer: *const BYTE,
+ shaderBufferCount: UINT32,
+ ) -> HRESULT,
+ fn LoadVertexShader(
+ resourceId: REFGUID,
+ shaderBuffer: *const BYTE,
+ shaderBufferCount: UINT32,
+ ) -> HRESULT,
+ fn LoadComputeShader(
+ resourceId: REFGUID,
+ shaderBuffer: *const BYTE,
+ shaderBufferCount: UINT32,
+ ) -> HRESULT,
+ fn IsShaderLoaded(
+ shaderId: REFGUID,
+ ) -> BOOL,
+ fn CreateResourceTexture(
+ resourceId: *const GUID,
+ resourceTextureProperties: *const D2D1_RESOURCE_TEXTURE_PROPERTIES,
+ data: *const BYTE,
+ strides: *const UINT32,
+ dataSize: UINT32,
+ resourceTexture: *mut *mut ID2D1ResourceTexture,
+ ) -> HRESULT,
+ fn FindResourceTexture(
+ resourceId: *const GUID,
+ resourceTexture: *mut *mut ID2D1ResourceTexture,
+ ) -> HRESULT,
+ fn CreateVertexBuffer(
+ vertexBufferProperties: *const D2D1_VERTEX_BUFFER_PROPERTIES,
+ resourceId: *const GUID,
+ customVertexBufferProperties: *const D2D1_CUSTOM_VERTEX_BUFFER_PROPERTIES,
+ buffer: *mut *mut ID2D1VertexBuffer,
+ ) -> HRESULT,
+ fn FindVertexBuffer(
+ resourceId: *const GUID,
+ buffer: *mut *mut ID2D1VertexBuffer,
+ ) -> HRESULT,
+ fn CreateColorContext(
+ space: D2D1_COLOR_SPACE,
+ profile: *const BYTE,
+ profileSize: UINT32,
+ colorContext: *mut *mut ID2D1ColorContext,
+ ) -> HRESULT,
+ fn CreateColorContextFromFilename(
+ filename: PCWSTR,
+ colorContext: *mut *mut ID2D1ColorContext,
+ ) -> HRESULT,
+ fn CreateColorContextFromWicColorContext(
+ wicColorContext: *mut IWICColorContext,
+ colorContext: *mut *mut ID2D1ColorContext,
+ ) -> HRESULT,
+ fn CheckFeatureSupport(
+ feature: D2D1_FEATURE,
+ featureSupportData: *mut c_void,
+ featureSupportDataSize: UINT32,
+ ) -> HRESULT,
+ fn IsBufferPrecisionSupported(
+ bufferPrecision: D2D1_BUFFER_PRECISION,
+ ) -> BOOL,
+}}
diff --git a/vendor/winapi/src/um/d2d1effects.rs b/vendor/winapi/src/um/d2d1effects.rs
new file mode 100644
index 000000000..c2d1f58a1
--- /dev/null
+++ b/vendor/winapi/src/um/d2d1effects.rs
@@ -0,0 +1,617 @@
+// 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 d2d1effects.h
+DEFINE_GUID!{CLSID_D2D12DAffineTransform,
+ 0x6AA97485, 0x6354, 0x4cfc, 0x90, 0x8C, 0xE4, 0xA7, 0x4F, 0x62, 0xC9, 0x6C}
+DEFINE_GUID!{CLSID_D2D13DPerspectiveTransform,
+ 0xC2844D0B, 0x3D86, 0x46e7, 0x85, 0xBA, 0x52, 0x6C, 0x92, 0x40, 0xF3, 0xFB}
+DEFINE_GUID!{CLSID_D2D13DTransform,
+ 0xe8467b04, 0xec61, 0x4b8a, 0xb5, 0xde, 0xd4, 0xd7, 0x3d, 0xeb, 0xea, 0x5a}
+DEFINE_GUID!{CLSID_D2D1ArithmeticComposite,
+ 0xfc151437, 0x049a, 0x4784, 0xa2, 0x4a, 0xf1, 0xc4, 0xda, 0xf2, 0x09, 0x87}
+DEFINE_GUID!{CLSID_D2D1Atlas,
+ 0x913e2be4, 0xfdcf, 0x4fe2, 0xa5, 0xf0, 0x24, 0x54, 0xf1, 0x4f, 0xf4, 0x08}
+DEFINE_GUID!{CLSID_D2D1BitmapSource,
+ 0x5fb6c24d, 0xc6dd, 0x4231, 0x94, 0x4, 0x50, 0xf4, 0xd5, 0xc3, 0x25, 0x2d}
+DEFINE_GUID!{CLSID_D2D1Blend,
+ 0x81c5b77b, 0x13f8, 0x4cdd, 0xad, 0x20, 0xc8, 0x90, 0x54, 0x7a, 0xc6, 0x5d}
+DEFINE_GUID!{CLSID_D2D1Border,
+ 0x2A2D49C0, 0x4ACF, 0x43c7, 0x8C, 0x6A, 0x7C, 0x4A, 0x27, 0x87, 0x4D, 0x27}
+DEFINE_GUID!{CLSID_D2D1Brightness,
+ 0x8cea8d1e, 0x77b0, 0x4986, 0xb3, 0xb9, 0x2f, 0x0c, 0x0e, 0xae, 0x78, 0x87}
+DEFINE_GUID!{CLSID_D2D1ColorManagement,
+ 0x1A28524C, 0xFDD6, 0x4AA4, 0xAE, 0x8F, 0x83, 0x7E, 0xB8, 0x26, 0x7B, 0x37}
+DEFINE_GUID!{CLSID_D2D1ColorMatrix,
+ 0x921F03D6, 0x641C, 0x47DF, 0x85, 0x2D, 0xB4, 0xBB, 0x61, 0x53, 0xAE, 0x11}
+DEFINE_GUID!{CLSID_D2D1Composite,
+ 0x48fc9f51, 0xf6ac, 0x48f1, 0x8b, 0x58, 0x3b, 0x28, 0xac, 0x46, 0xf7, 0x6d}
+DEFINE_GUID!{CLSID_D2D1ConvolveMatrix,
+ 0x407f8c08, 0x5533, 0x4331, 0xa3, 0x41, 0x23, 0xcc, 0x38, 0x77, 0x84, 0x3e}
+DEFINE_GUID!{CLSID_D2D1Crop,
+ 0xE23F7110, 0x0E9A, 0x4324, 0xAF, 0x47, 0x6A, 0x2C, 0x0C, 0x46, 0xF3, 0x5B}
+DEFINE_GUID!{CLSID_D2D1DirectionalBlur,
+ 0x174319a6, 0x58e9, 0x49b2, 0xbb, 0x63, 0xca, 0xf2, 0xc8, 0x11, 0xa3, 0xdb}
+DEFINE_GUID!{CLSID_D2D1DiscreteTransfer,
+ 0x90866fcd, 0x488e, 0x454b, 0xaf, 0x06, 0xe5, 0x04, 0x1b, 0x66, 0xc3, 0x6c}
+DEFINE_GUID!{CLSID_D2D1DisplacementMap,
+ 0xedc48364, 0x417, 0x4111, 0x94, 0x50, 0x43, 0x84, 0x5f, 0xa9, 0xf8, 0x90}
+DEFINE_GUID!{CLSID_D2D1DistantDiffuse,
+ 0x3e7efd62, 0xa32d, 0x46d4, 0xa8, 0x3c, 0x52, 0x78, 0x88, 0x9a, 0xc9, 0x54}
+DEFINE_GUID!{CLSID_D2D1DistantSpecular,
+ 0x428c1ee5, 0x77b8, 0x4450, 0x8a, 0xb5, 0x72, 0x21, 0x9c, 0x21, 0xab, 0xda}
+DEFINE_GUID!{CLSID_D2D1DpiCompensation,
+ 0x6c26c5c7, 0x34e0, 0x46fc, 0x9c, 0xfd, 0xe5, 0x82, 0x37, 0x6, 0xe2, 0x28}
+DEFINE_GUID!{CLSID_D2D1Flood,
+ 0x61c23c20, 0xae69, 0x4d8e, 0x94, 0xcf, 0x50, 0x07, 0x8d, 0xf6, 0x38, 0xf2}
+DEFINE_GUID!{CLSID_D2D1GammaTransfer,
+ 0x409444c4, 0xc419, 0x41a0, 0xb0, 0xc1, 0x8c, 0xd0, 0xc0, 0xa1, 0x8e, 0x42}
+DEFINE_GUID!{CLSID_D2D1GaussianBlur,
+ 0x1feb6d69, 0x2fe6, 0x4ac9, 0x8c, 0x58, 0x1d, 0x7f, 0x93, 0xe7, 0xa6, 0xa5}
+DEFINE_GUID!{CLSID_D2D1Scale,
+ 0x9daf9369, 0x3846, 0x4d0e, 0xa4, 0x4e, 0xc, 0x60, 0x79, 0x34, 0xa5, 0xd7}
+DEFINE_GUID!{CLSID_D2D1Histogram,
+ 0x881db7d0, 0xf7ee, 0x4d4d, 0xa6, 0xd2, 0x46, 0x97, 0xac, 0xc6, 0x6e, 0xe8}
+DEFINE_GUID!{CLSID_D2D1HueRotation,
+ 0x0f4458ec, 0x4b32, 0x491b, 0x9e, 0x85, 0xbd, 0x73, 0xf4, 0x4d, 0x3e, 0xb6}
+DEFINE_GUID!{CLSID_D2D1LinearTransfer,
+ 0xad47c8fd, 0x63ef, 0x4acc, 0x9b, 0x51, 0x67, 0x97, 0x9c, 0x03, 0x6c, 0x06}
+DEFINE_GUID!{CLSID_D2D1LuminanceToAlpha,
+ 0x41251ab7, 0x0beb, 0x46f8, 0x9d, 0xa7, 0x59, 0xe9, 0x3f, 0xcc, 0xe5, 0xde}
+DEFINE_GUID!{CLSID_D2D1Morphology,
+ 0xeae6c40d, 0x626a, 0x4c2d, 0xbf, 0xcb, 0x39, 0x10, 0x01, 0xab, 0xe2, 0x02}
+DEFINE_GUID!{CLSID_D2D1OpacityMetadata,
+ 0x6c53006a, 0x4450, 0x4199, 0xaa, 0x5b, 0xad, 0x16, 0x56, 0xfe, 0xce, 0x5e}
+DEFINE_GUID!{CLSID_D2D1PointDiffuse,
+ 0xb9e303c3, 0xc08c, 0x4f91, 0x8b, 0x7b, 0x38, 0x65, 0x6b, 0xc4, 0x8c, 0x20}
+DEFINE_GUID!{CLSID_D2D1PointSpecular,
+ 0x09c3ca26, 0x3ae2, 0x4f09, 0x9e, 0xbc, 0xed, 0x38, 0x65, 0xd5, 0x3f, 0x22}
+DEFINE_GUID!{CLSID_D2D1Premultiply,
+ 0x06eab419, 0xdeed, 0x4018, 0x80, 0xd2, 0x3e, 0x1d, 0x47, 0x1a, 0xde, 0xb2}
+DEFINE_GUID!{CLSID_D2D1Saturation,
+ 0x5cb2d9cf, 0x327d, 0x459f, 0xa0, 0xce, 0x40, 0xc0, 0xb2, 0x08, 0x6b, 0xf7}
+DEFINE_GUID!{CLSID_D2D1Shadow,
+ 0xC67EA361, 0x1863, 0x4e69, 0x89, 0xDB, 0x69, 0x5D, 0x3E, 0x9A, 0x5B, 0x6B}
+DEFINE_GUID!{CLSID_D2D1SpotDiffuse,
+ 0x818a1105, 0x7932, 0x44f4, 0xaa, 0x86, 0x08, 0xae, 0x7b, 0x2f, 0x2c, 0x93}
+DEFINE_GUID!{CLSID_D2D1SpotSpecular,
+ 0xedae421e, 0x7654, 0x4a37, 0x9d, 0xb8, 0x71, 0xac, 0xc1, 0xbe, 0xb3, 0xc1}
+DEFINE_GUID!{CLSID_D2D1TableTransfer,
+ 0x5bf818c3, 0x5e43, 0x48cb, 0xb6, 0x31, 0x86, 0x83, 0x96, 0xd6, 0xa1, 0xd4}
+DEFINE_GUID!{CLSID_D2D1Tile,
+ 0xB0784138, 0x3B76, 0x4bc5, 0xB1, 0x3B, 0x0F, 0xA2, 0xAD, 0x02, 0x65, 0x9F}
+DEFINE_GUID!{CLSID_D2D1Turbulence,
+ 0xCF2BB6AE, 0x889A, 0x4ad7, 0xBA, 0x29, 0xA2, 0xFD, 0x73, 0x2C, 0x9F, 0xC9}
+DEFINE_GUID!{CLSID_D2D1UnPremultiply,
+ 0xfb9ac489, 0xad8d, 0x41ed, 0x99, 0x99, 0xbb, 0x63, 0x47, 0xd1, 0x10, 0xf7}
+ENUM!{enum D2D1_BORDER_MODE {
+ D2D1_BORDER_MODE_SOFT = 0,
+ D2D1_BORDER_MODE_HARD = 1,
+ D2D1_BORDER_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_CHANNEL_SELECTOR {
+ D2D1_CHANNEL_SELECTOR_R = 0,
+ D2D1_CHANNEL_SELECTOR_G = 1,
+ D2D1_CHANNEL_SELECTOR_B = 2,
+ D2D1_CHANNEL_SELECTOR_A = 3,
+ D2D1_CHANNEL_SELECTOR_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_BITMAPSOURCE_ORIENTATION {
+ D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT = 1,
+ D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL = 2,
+ D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180 = 3,
+ D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL = 4,
+ D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL = 5,
+ D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90 = 6,
+ D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL = 7,
+ D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270 = 8,
+ D2D1_BITMAPSOURCE_ORIENTATION_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_GAUSSIANBLUR_PROP {
+ D2D1_GAUSSIANBLUR_PROP_STANDARD_DEVIATION = 0,
+ D2D1_GAUSSIANBLUR_PROP_OPTIMIZATION = 1,
+ D2D1_GAUSSIANBLUR_PROP_BORDER_MODE = 2,
+ D2D1_GAUSSIANBLUR_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_GAUSSIANBLUR_OPTIMIZATION {
+ D2D1_GAUSSIANBLUR_OPTIMIZATION_SPEED = 0,
+ D2D1_GAUSSIANBLUR_OPTIMIZATION_BALANCED = 1,
+ D2D1_GAUSSIANBLUR_OPTIMIZATION_QUALITY = 2,
+ D2D1_GAUSSIANBLUR_OPTIMIZATION_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_DIRECTIONALBLUR_PROP {
+ D2D1_DIRECTIONALBLUR_PROP_STANDARD_DEVIATION = 0,
+ D2D1_DIRECTIONALBLUR_PROP_ANGLE = 1,
+ D2D1_DIRECTIONALBLUR_PROP_OPTIMIZATION = 2,
+ D2D1_DIRECTIONALBLUR_PROP_BORDER_MODE = 3,
+ D2D1_DIRECTIONALBLUR_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_DIRECTIONALBLUR_OPTIMIZATION {
+ D2D1_DIRECTIONALBLUR_OPTIMIZATION_SPEED = 0,
+ D2D1_DIRECTIONALBLUR_OPTIMIZATION_BALANCED = 1,
+ D2D1_DIRECTIONALBLUR_OPTIMIZATION_QUALITY = 2,
+ D2D1_DIRECTIONALBLUR_OPTIMIZATION_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_SHADOW_PROP {
+ D2D1_SHADOW_PROP_BLUR_STANDARD_DEVIATION = 0,
+ D2D1_SHADOW_PROP_COLOR = 1,
+ D2D1_SHADOW_PROP_OPTIMIZATION = 2,
+ D2D1_SHADOW_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_SHADOW_OPTIMIZATION {
+ D2D1_SHADOW_OPTIMIZATION_SPEED = 0,
+ D2D1_SHADOW_OPTIMIZATION_BALANCED = 1,
+ D2D1_SHADOW_OPTIMIZATION_QUALITY = 2,
+ D2D1_SHADOW_OPTIMIZATION_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_BLEND_PROP {
+ D2D1_BLEND_PROP_MODE = 0,
+ D2D1_BLEND_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_BLEND_MODE {
+ D2D1_BLEND_MODE_MULTIPLY = 0,
+ D2D1_BLEND_MODE_SCREEN = 1,
+ D2D1_BLEND_MODE_DARKEN = 2,
+ D2D1_BLEND_MODE_LIGHTEN = 3,
+ D2D1_BLEND_MODE_DISSOLVE = 4,
+ D2D1_BLEND_MODE_COLOR_BURN = 5,
+ D2D1_BLEND_MODE_LINEAR_BURN = 6,
+ D2D1_BLEND_MODE_DARKER_COLOR = 7,
+ D2D1_BLEND_MODE_LIGHTER_COLOR = 8,
+ D2D1_BLEND_MODE_COLOR_DODGE = 9,
+ D2D1_BLEND_MODE_LINEAR_DODGE = 10,
+ D2D1_BLEND_MODE_OVERLAY = 11,
+ D2D1_BLEND_MODE_SOFT_LIGHT = 12,
+ D2D1_BLEND_MODE_HARD_LIGHT = 13,
+ D2D1_BLEND_MODE_VIVID_LIGHT = 14,
+ D2D1_BLEND_MODE_LINEAR_LIGHT = 15,
+ D2D1_BLEND_MODE_PIN_LIGHT = 16,
+ D2D1_BLEND_MODE_HARD_MIX = 17,
+ D2D1_BLEND_MODE_DIFFERENCE = 18,
+ D2D1_BLEND_MODE_EXCLUSION = 19,
+ D2D1_BLEND_MODE_HUE = 20,
+ D2D1_BLEND_MODE_SATURATION = 21,
+ D2D1_BLEND_MODE_COLOR = 22,
+ D2D1_BLEND_MODE_LUMINOSITY = 23,
+ D2D1_BLEND_MODE_SUBTRACT = 24,
+ D2D1_BLEND_MODE_DIVISION = 25,
+ D2D1_BLEND_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_SATURATION_PROP {
+ D2D1_SATURATION_PROP_SATURATION = 0,
+ D2D1_SATURATION_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_HUEROTATION_PROP {
+ D2D1_HUEROTATION_PROP_ANGLE = 0,
+ D2D1_HUEROTATION_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_COLORMATRIX_PROP {
+ D2D1_COLORMATRIX_PROP_COLOR_MATRIX = 0,
+ D2D1_COLORMATRIX_PROP_ALPHA_MODE = 1,
+ D2D1_COLORMATRIX_PROP_CLAMP_OUTPUT = 2,
+ D2D1_COLORMATRIX_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_COLORMATRIX_ALPHA_MODE {
+ D2D1_COLORMATRIX_ALPHA_MODE_PREMULTIPLIED = 1,
+ D2D1_COLORMATRIX_ALPHA_MODE_STRAIGHT = 2,
+ D2D1_COLORMATRIX_ALPHA_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_BITMAPSOURCE_PROP {
+ D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE = 0,
+ D2D1_BITMAPSOURCE_PROP_SCALE = 1,
+ D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE = 2,
+ D2D1_BITMAPSOURCE_PROP_ENABLE_DPI_CORRECTION = 3,
+ D2D1_BITMAPSOURCE_PROP_ALPHA_MODE = 4,
+ D2D1_BITMAPSOURCE_PROP_ORIENTATION = 5,
+ D2D1_BITMAPSOURCE_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_BITMAPSOURCE_INTERPOLATION_MODE {
+ D2D1_BITMAPSOURCE_INTERPOLATION_MODE_NEAREST_NEIGHBOR = 0,
+ D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR = 1,
+ D2D1_BITMAPSOURCE_INTERPOLATION_MODE_CUBIC = 2,
+ D2D1_BITMAPSOURCE_INTERPOLATION_MODE_FANT = 6,
+ D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR = 7,
+ D2D1_BITMAPSOURCE_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_BITMAPSOURCE_ALPHA_MODE {
+ D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED = 1,
+ D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT = 2,
+ D2D1_BITMAPSOURCE_ALPHA_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_COMPOSITE_PROP {
+ D2D1_COMPOSITE_PROP_MODE = 0,
+ D2D1_COMPOSITE_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_3DTRANSFORM_PROP {
+ D2D1_3DTRANSFORM_PROP_INTERPOLATION_MODE = 0,
+ D2D1_3DTRANSFORM_PROP_BORDER_MODE = 1,
+ D2D1_3DTRANSFORM_PROP_TRANSFORM_MATRIX = 2,
+ D2D1_3DTRANSFORM_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_3DTRANSFORM_INTERPOLATION_MODE {
+ D2D1_3DTRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR = 0,
+ D2D1_3DTRANSFORM_INTERPOLATION_MODE_LINEAR = 1,
+ D2D1_3DTRANSFORM_INTERPOLATION_MODE_CUBIC = 2,
+ D2D1_3DTRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR = 3,
+ D2D1_3DTRANSFORM_INTERPOLATION_MODE_ANISOTROPIC = 4,
+ D2D1_3DTRANSFORM_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_3DPERSPECTIVETRANSFORM_PROP {
+ D2D1_3DPERSPECTIVETRANSFORM_PROP_INTERPOLATION_MODE = 0,
+ D2D1_3DPERSPECTIVETRANSFORM_PROP_BORDER_MODE = 1,
+ D2D1_3DPERSPECTIVETRANSFORM_PROP_DEPTH = 2,
+ D2D1_3DPERSPECTIVETRANSFORM_PROP_PERSPECTIVE_ORIGIN = 3,
+ D2D1_3DPERSPECTIVETRANSFORM_PROP_LOCAL_OFFSET = 4,
+ D2D1_3DPERSPECTIVETRANSFORM_PROP_GLOBAL_OFFSET = 5,
+ D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION_ORIGIN = 6,
+ D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION = 7,
+ D2D1_3DPERSPECTIVETRANSFORM_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE {
+ D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR = 0,
+ D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR = 1,
+ D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_CUBIC = 2,
+ D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR = 3,
+ D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC = 4,
+ D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_2DAFFINETRANSFORM_PROP {
+ D2D1_2DAFFINETRANSFORM_PROP_INTERPOLATION_MODE = 0,
+ D2D1_2DAFFINETRANSFORM_PROP_BORDER_MODE = 1,
+ D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX = 2,
+ D2D1_2DAFFINETRANSFORM_PROP_SHARPNESS = 3,
+ D2D1_2DAFFINETRANSFORM_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE {
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR = 0,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR = 1,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_CUBIC = 2,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR = 3,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC = 4,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC = 5,
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_DPICOMPENSATION_PROP {
+ D2D1_DPICOMPENSATION_PROP_INTERPOLATION_MODE = 0,
+ D2D1_DPICOMPENSATION_PROP_BORDER_MODE = 1,
+ D2D1_DPICOMPENSATION_PROP_INPUT_DPI = 2,
+ D2D1_DPICOMPENSATION_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_DPICOMPENSATION_INTERPOLATION_MODE {
+ D2D1_DPICOMPENSATION_INTERPOLATION_MODE_NEAREST_NEIGHBOR = 0,
+ D2D1_DPICOMPENSATION_INTERPOLATION_MODE_LINEAR = 1,
+ D2D1_DPICOMPENSATION_INTERPOLATION_MODE_CUBIC = 2,
+ D2D1_DPICOMPENSATION_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR = 3,
+ D2D1_DPICOMPENSATION_INTERPOLATION_MODE_ANISOTROPIC = 4,
+ D2D1_DPICOMPENSATION_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC = 5,
+ D2D1_DPICOMPENSATION_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_SCALE_PROP {
+ D2D1_SCALE_PROP_SCALE = 0,
+ D2D1_SCALE_PROP_CENTER_POINT = 1,
+ D2D1_SCALE_PROP_INTERPOLATION_MODE = 2,
+ D2D1_SCALE_PROP_BORDER_MODE = 3,
+ D2D1_SCALE_PROP_SHARPNESS = 4,
+ D2D1_SCALE_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_SCALE_INTERPOLATION_MODE {
+ D2D1_SCALE_INTERPOLATION_MODE_NEAREST_NEIGHBOR = 0,
+ D2D1_SCALE_INTERPOLATION_MODE_LINEAR = 1,
+ D2D1_SCALE_INTERPOLATION_MODE_CUBIC = 2,
+ D2D1_SCALE_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR = 3,
+ D2D1_SCALE_INTERPOLATION_MODE_ANISOTROPIC = 4,
+ D2D1_SCALE_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC = 5,
+ D2D1_SCALE_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_TURBULENCE_PROP {
+ D2D1_TURBULENCE_PROP_OFFSET = 0,
+ D2D1_TURBULENCE_PROP_SIZE = 1,
+ D2D1_TURBULENCE_PROP_BASE_FREQUENCY = 2,
+ D2D1_TURBULENCE_PROP_NUM_OCTAVES = 3,
+ D2D1_TURBULENCE_PROP_SEED = 4,
+ D2D1_TURBULENCE_PROP_NOISE = 5,
+ D2D1_TURBULENCE_PROP_STITCHABLE = 6,
+ D2D1_TURBULENCE_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_TURBULENCE_NOISE {
+ D2D1_TURBULENCE_NOISE_FRACTAL_SUM = 0,
+ D2D1_TURBULENCE_NOISE_TURBULENCE = 1,
+ D2D1_TURBULENCE_NOISE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_DISPLACEMENTMAP_PROP {
+ D2D1_DISPLACEMENTMAP_PROP_SCALE = 0,
+ D2D1_DISPLACEMENTMAP_PROP_X_CHANNEL_SELECT = 1,
+ D2D1_DISPLACEMENTMAP_PROP_Y_CHANNEL_SELECT = 2,
+ D2D1_DISPLACEMENTMAP_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_COLORMANAGEMENT_PROP {
+ D2D1_COLORMANAGEMENT_PROP_SOURCE_COLOR_CONTEXT = 0,
+ D2D1_COLORMANAGEMENT_PROP_SOURCE_RENDERING_INTENT = 1,
+ D2D1_COLORMANAGEMENT_PROP_DESTINATION_COLOR_CONTEXT = 2,
+ D2D1_COLORMANAGEMENT_PROP_DESTINATION_RENDERING_INTENT = 3,
+ D2D1_COLORMANAGEMENT_PROP_ALPHA_MODE = 4,
+ D2D1_COLORMANAGEMENT_PROP_QUALITY = 5,
+ D2D1_COLORMANAGEMENT_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_COLORMANAGEMENT_ALPHA_MODE {
+ D2D1_COLORMANAGEMENT_ALPHA_MODE_PREMULTIPLIED = 1,
+ D2D1_COLORMANAGEMENT_ALPHA_MODE_STRAIGHT = 2,
+ D2D1_COLORMANAGEMENT_ALPHA_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_COLORMANAGEMENT_QUALITY {
+ D2D1_COLORMANAGEMENT_QUALITY_PROOF = 0,
+ D2D1_COLORMANAGEMENT_QUALITY_NORMAL = 1,
+ D2D1_COLORMANAGEMENT_QUALITY_BEST = 2,
+ D2D1_COLORMANAGEMENT_QUALITY_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_COLORMANAGEMENT_RENDERING_INTENT {
+ D2D1_COLORMANAGEMENT_RENDERING_INTENT_PERCEPTUAL = 0,
+ D2D1_COLORMANAGEMENT_RENDERING_INTENT_RELATIVE_COLORIMETRIC = 1,
+ D2D1_COLORMANAGEMENT_RENDERING_INTENT_SATURATION = 2,
+ D2D1_COLORMANAGEMENT_RENDERING_INTENT_ABSOLUTE_COLORIMETRIC = 3,
+ D2D1_COLORMANAGEMENT_RENDERING_INTENT_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_HISTOGRAM_PROP {
+ D2D1_HISTOGRAM_PROP_NUM_BINS = 0,
+ D2D1_HISTOGRAM_PROP_CHANNEL_SELECT = 1,
+ D2D1_HISTOGRAM_PROP_HISTOGRAM_OUTPUT = 2,
+ D2D1_HISTOGRAM_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_POINTSPECULAR_PROP {
+ D2D1_POINTSPECULAR_PROP_LIGHT_POSITION = 0,
+ D2D1_POINTSPECULAR_PROP_SPECULAR_EXPONENT = 1,
+ D2D1_POINTSPECULAR_PROP_SPECULAR_CONSTANT = 2,
+ D2D1_POINTSPECULAR_PROP_SURFACE_SCALE = 3,
+ D2D1_POINTSPECULAR_PROP_COLOR = 4,
+ D2D1_POINTSPECULAR_PROP_KERNEL_UNIT_LENGTH = 5,
+ D2D1_POINTSPECULAR_PROP_SCALE_MODE = 6,
+ D2D1_POINTSPECULAR_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_POINTSPECULAR_SCALE_MODE {
+ D2D1_POINTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR = 0,
+ D2D1_POINTSPECULAR_SCALE_MODE_LINEAR = 1,
+ D2D1_POINTSPECULAR_SCALE_MODE_CUBIC = 2,
+ D2D1_POINTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR = 3,
+ D2D1_POINTSPECULAR_SCALE_MODE_ANISOTROPIC = 4,
+ D2D1_POINTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC = 5,
+ D2D1_POINTSPECULAR_SCALE_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_SPOTSPECULAR_PROP {
+ D2D1_SPOTSPECULAR_PROP_LIGHT_POSITION = 0,
+ D2D1_SPOTSPECULAR_PROP_POINTS_AT = 1,
+ D2D1_SPOTSPECULAR_PROP_FOCUS = 2,
+ D2D1_SPOTSPECULAR_PROP_LIMITING_CONE_ANGLE = 3,
+ D2D1_SPOTSPECULAR_PROP_SPECULAR_EXPONENT = 4,
+ D2D1_SPOTSPECULAR_PROP_SPECULAR_CONSTANT = 5,
+ D2D1_SPOTSPECULAR_PROP_SURFACE_SCALE = 6,
+ D2D1_SPOTSPECULAR_PROP_COLOR = 7,
+ D2D1_SPOTSPECULAR_PROP_KERNEL_UNIT_LENGTH = 8,
+ D2D1_SPOTSPECULAR_PROP_SCALE_MODE = 9,
+ D2D1_SPOTSPECULAR_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_SPOTSPECULAR_SCALE_MODE {
+ D2D1_SPOTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR = 0,
+ D2D1_SPOTSPECULAR_SCALE_MODE_LINEAR = 1,
+ D2D1_SPOTSPECULAR_SCALE_MODE_CUBIC = 2,
+ D2D1_SPOTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR = 3,
+ D2D1_SPOTSPECULAR_SCALE_MODE_ANISOTROPIC = 4,
+ D2D1_SPOTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC = 5,
+ D2D1_SPOTSPECULAR_SCALE_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_DISTANTSPECULAR_PROP {
+ D2D1_DISTANTSPECULAR_PROP_AZIMUTH = 0,
+ D2D1_DISTANTSPECULAR_PROP_ELEVATION = 1,
+ D2D1_DISTANTSPECULAR_PROP_SPECULAR_EXPONENT = 2,
+ D2D1_DISTANTSPECULAR_PROP_SPECULAR_CONSTANT = 3,
+ D2D1_DISTANTSPECULAR_PROP_SURFACE_SCALE = 4,
+ D2D1_DISTANTSPECULAR_PROP_COLOR = 5,
+ D2D1_DISTANTSPECULAR_PROP_KERNEL_UNIT_LENGTH = 6,
+ D2D1_DISTANTSPECULAR_PROP_SCALE_MODE = 7,
+ D2D1_DISTANTSPECULAR_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_DISTANTSPECULAR_SCALE_MODE {
+ D2D1_DISTANTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR = 0,
+ D2D1_DISTANTSPECULAR_SCALE_MODE_LINEAR = 1,
+ D2D1_DISTANTSPECULAR_SCALE_MODE_CUBIC = 2,
+ D2D1_DISTANTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR = 3,
+ D2D1_DISTANTSPECULAR_SCALE_MODE_ANISOTROPIC = 4,
+ D2D1_DISTANTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC = 5,
+ D2D1_DISTANTSPECULAR_SCALE_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_POINTDIFFUSE_PROP {
+ D2D1_POINTDIFFUSE_PROP_LIGHT_POSITION = 0,
+ D2D1_POINTDIFFUSE_PROP_DIFFUSE_CONSTANT = 1,
+ D2D1_POINTDIFFUSE_PROP_SURFACE_SCALE = 2,
+ D2D1_POINTDIFFUSE_PROP_COLOR = 3,
+ D2D1_POINTDIFFUSE_PROP_KERNEL_UNIT_LENGTH = 4,
+ D2D1_POINTDIFFUSE_PROP_SCALE_MODE = 5,
+ D2D1_POINTDIFFUSE_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_POINTDIFFUSE_SCALE_MODE {
+ D2D1_POINTDIFFUSE_SCALE_MODE_NEAREST_NEIGHBOR = 0,
+ D2D1_POINTDIFFUSE_SCALE_MODE_LINEAR = 1,
+ D2D1_POINTDIFFUSE_SCALE_MODE_CUBIC = 2,
+ D2D1_POINTDIFFUSE_SCALE_MODE_MULTI_SAMPLE_LINEAR = 3,
+ D2D1_POINTDIFFUSE_SCALE_MODE_ANISOTROPIC = 4,
+ D2D1_POINTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC = 5,
+ D2D1_POINTDIFFUSE_SCALE_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_SPOTDIFFUSE_PROP {
+ D2D1_SPOTDIFFUSE_PROP_LIGHT_POSITION = 0,
+ D2D1_SPOTDIFFUSE_PROP_POINTS_AT = 1,
+ D2D1_SPOTDIFFUSE_PROP_FOCUS = 2,
+ D2D1_SPOTDIFFUSE_PROP_LIMITING_CONE_ANGLE = 3,
+ D2D1_SPOTDIFFUSE_PROP_DIFFUSE_CONSTANT = 4,
+ D2D1_SPOTDIFFUSE_PROP_SURFACE_SCALE = 5,
+ D2D1_SPOTDIFFUSE_PROP_COLOR = 6,
+ D2D1_SPOTDIFFUSE_PROP_KERNEL_UNIT_LENGTH = 7,
+ D2D1_SPOTDIFFUSE_PROP_SCALE_MODE = 8,
+ D2D1_SPOTDIFFUSE_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_SPOTDIFFUSE_SCALE_MODE {
+ D2D1_SPOTDIFFUSE_SCALE_MODE_NEAREST_NEIGHBOR = 0,
+ D2D1_SPOTDIFFUSE_SCALE_MODE_LINEAR = 1,
+ D2D1_SPOTDIFFUSE_SCALE_MODE_CUBIC = 2,
+ D2D1_SPOTDIFFUSE_SCALE_MODE_MULTI_SAMPLE_LINEAR = 3,
+ D2D1_SPOTDIFFUSE_SCALE_MODE_ANISOTROPIC = 4,
+ D2D1_SPOTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC = 5,
+ D2D1_SPOTDIFFUSE_SCALE_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_DISTANTDIFFUSE_PROP {
+ D2D1_DISTANTDIFFUSE_PROP_AZIMUTH = 0,
+ D2D1_DISTANTDIFFUSE_PROP_ELEVATION = 1,
+ D2D1_DISTANTDIFFUSE_PROP_DIFFUSE_CONSTANT = 2,
+ D2D1_DISTANTDIFFUSE_PROP_SURFACE_SCALE = 3,
+ D2D1_DISTANTDIFFUSE_PROP_COLOR = 4,
+ D2D1_DISTANTDIFFUSE_PROP_KERNEL_UNIT_LENGTH = 5,
+ D2D1_DISTANTDIFFUSE_PROP_SCALE_MODE = 6,
+ D2D1_DISTANTDIFFUSE_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_DISTANTDIFFUSE_SCALE_MODE {
+ D2D1_DISTANTDIFFUSE_SCALE_MODE_NEAREST_NEIGHBOR = 0,
+ D2D1_DISTANTDIFFUSE_SCALE_MODE_LINEAR = 1,
+ D2D1_DISTANTDIFFUSE_SCALE_MODE_CUBIC = 2,
+ D2D1_DISTANTDIFFUSE_SCALE_MODE_MULTI_SAMPLE_LINEAR = 3,
+ D2D1_DISTANTDIFFUSE_SCALE_MODE_ANISOTROPIC = 4,
+ D2D1_DISTANTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC = 5,
+ D2D1_DISTANTDIFFUSE_SCALE_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_FLOOD_PROP {
+ D2D1_FLOOD_PROP_COLOR = 0,
+ D2D1_FLOOD_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_LINEARTRANSFER_PROP {
+ D2D1_LINEARTRANSFER_PROP_RED_Y_INTERCEPT = 0,
+ D2D1_LINEARTRANSFER_PROP_RED_SLOPE = 1,
+ D2D1_LINEARTRANSFER_PROP_RED_DISABLE = 2,
+ D2D1_LINEARTRANSFER_PROP_GREEN_Y_INTERCEPT = 3,
+ D2D1_LINEARTRANSFER_PROP_GREEN_SLOPE = 4,
+ D2D1_LINEARTRANSFER_PROP_GREEN_DISABLE = 5,
+ D2D1_LINEARTRANSFER_PROP_BLUE_Y_INTERCEPT = 6,
+ D2D1_LINEARTRANSFER_PROP_BLUE_SLOPE = 7,
+ D2D1_LINEARTRANSFER_PROP_BLUE_DISABLE = 8,
+ D2D1_LINEARTRANSFER_PROP_ALPHA_Y_INTERCEPT = 9,
+ D2D1_LINEARTRANSFER_PROP_ALPHA_SLOPE = 10,
+ D2D1_LINEARTRANSFER_PROP_ALPHA_DISABLE = 11,
+ D2D1_LINEARTRANSFER_PROP_CLAMP_OUTPUT = 12,
+ D2D1_LINEARTRANSFER_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_GAMMATRANSFER_PROP {
+ D2D1_GAMMATRANSFER_PROP_RED_AMPLITUDE = 0,
+ D2D1_GAMMATRANSFER_PROP_RED_EXPONENT = 1,
+ D2D1_GAMMATRANSFER_PROP_RED_OFFSET = 2,
+ D2D1_GAMMATRANSFER_PROP_RED_DISABLE = 3,
+ D2D1_GAMMATRANSFER_PROP_GREEN_AMPLITUDE = 4,
+ D2D1_GAMMATRANSFER_PROP_GREEN_EXPONENT = 5,
+ D2D1_GAMMATRANSFER_PROP_GREEN_OFFSET = 6,
+ D2D1_GAMMATRANSFER_PROP_GREEN_DISABLE = 7,
+ D2D1_GAMMATRANSFER_PROP_BLUE_AMPLITUDE = 8,
+ D2D1_GAMMATRANSFER_PROP_BLUE_EXPONENT = 9,
+ D2D1_GAMMATRANSFER_PROP_BLUE_OFFSET = 10,
+ D2D1_GAMMATRANSFER_PROP_BLUE_DISABLE = 11,
+ D2D1_GAMMATRANSFER_PROP_ALPHA_AMPLITUDE = 12,
+ D2D1_GAMMATRANSFER_PROP_ALPHA_EXPONENT = 13,
+ D2D1_GAMMATRANSFER_PROP_ALPHA_OFFSET = 14,
+ D2D1_GAMMATRANSFER_PROP_ALPHA_DISABLE = 15,
+ D2D1_GAMMATRANSFER_PROP_CLAMP_OUTPUT = 16,
+ D2D1_GAMMATRANSFER_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_TABLETRANSFER_PROP {
+ D2D1_TABLETRANSFER_PROP_RED_TABLE = 0,
+ D2D1_TABLETRANSFER_PROP_RED_DISABLE = 1,
+ D2D1_TABLETRANSFER_PROP_GREEN_TABLE = 2,
+ D2D1_TABLETRANSFER_PROP_GREEN_DISABLE = 3,
+ D2D1_TABLETRANSFER_PROP_BLUE_TABLE = 4,
+ D2D1_TABLETRANSFER_PROP_BLUE_DISABLE = 5,
+ D2D1_TABLETRANSFER_PROP_ALPHA_TABLE = 6,
+ D2D1_TABLETRANSFER_PROP_ALPHA_DISABLE = 7,
+ D2D1_TABLETRANSFER_PROP_CLAMP_OUTPUT = 8,
+ D2D1_TABLETRANSFER_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_DISCRETETRANSFER_PROP {
+ D2D1_DISCRETETRANSFER_PROP_RED_TABLE = 0,
+ D2D1_DISCRETETRANSFER_PROP_RED_DISABLE = 1,
+ D2D1_DISCRETETRANSFER_PROP_GREEN_TABLE = 2,
+ D2D1_DISCRETETRANSFER_PROP_GREEN_DISABLE = 3,
+ D2D1_DISCRETETRANSFER_PROP_BLUE_TABLE = 4,
+ D2D1_DISCRETETRANSFER_PROP_BLUE_DISABLE = 5,
+ D2D1_DISCRETETRANSFER_PROP_ALPHA_TABLE = 6,
+ D2D1_DISCRETETRANSFER_PROP_ALPHA_DISABLE = 7,
+ D2D1_DISCRETETRANSFER_PROP_CLAMP_OUTPUT = 8,
+ D2D1_DISCRETETRANSFER_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_CONVOLVEMATRIX_PROP {
+ D2D1_CONVOLVEMATRIX_PROP_KERNEL_UNIT_LENGTH = 0,
+ D2D1_CONVOLVEMATRIX_PROP_SCALE_MODE = 1,
+ D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_X = 2,
+ D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_Y = 3,
+ D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX = 4,
+ D2D1_CONVOLVEMATRIX_PROP_DIVISOR = 5,
+ D2D1_CONVOLVEMATRIX_PROP_BIAS = 6,
+ D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFFSET = 7,
+ D2D1_CONVOLVEMATRIX_PROP_PRESERVE_ALPHA = 8,
+ D2D1_CONVOLVEMATRIX_PROP_BORDER_MODE = 9,
+ D2D1_CONVOLVEMATRIX_PROP_CLAMP_OUTPUT = 10,
+ D2D1_CONVOLVEMATRIX_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_CONVOLVEMATRIX_SCALE_MODE {
+ D2D1_CONVOLVEMATRIX_SCALE_MODE_NEAREST_NEIGHBOR = 0,
+ D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR = 1,
+ D2D1_CONVOLVEMATRIX_SCALE_MODE_CUBIC = 2,
+ D2D1_CONVOLVEMATRIX_SCALE_MODE_MULTI_SAMPLE_LINEAR = 3,
+ D2D1_CONVOLVEMATRIX_SCALE_MODE_ANISOTROPIC = 4,
+ D2D1_CONVOLVEMATRIX_SCALE_MODE_HIGH_QUALITY_CUBIC = 5,
+ D2D1_CONVOLVEMATRIX_SCALE_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_BRIGHTNESS_PROP {
+ D2D1_BRIGHTNESS_PROP_WHITE_POINT = 0,
+ D2D1_BRIGHTNESS_PROP_BLACK_POINT = 1,
+ D2D1_BRIGHTNESS_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_ARITHMETICCOMPOSITE_PROP {
+ D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS = 0,
+ D2D1_ARITHMETICCOMPOSITE_PROP_CLAMP_OUTPUT = 1,
+ D2D1_ARITHMETICCOMPOSITE_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_CROP_PROP {
+ D2D1_CROP_PROP_RECT = 0,
+ D2D1_CROP_PROP_BORDER_MODE = 1,
+ D2D1_CROP_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_BORDER_PROP {
+ D2D1_BORDER_PROP_EDGE_MODE_X = 0,
+ D2D1_BORDER_PROP_EDGE_MODE_Y = 1,
+ D2D1_BORDER_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_BORDER_EDGE_MODE {
+ D2D1_BORDER_EDGE_MODE_CLAMP = 0,
+ D2D1_BORDER_EDGE_MODE_WRAP = 1,
+ D2D1_BORDER_EDGE_MODE_MIRROR = 2,
+ D2D1_BORDER_EDGE_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_MORPHOLOGY_PROP {
+ D2D1_MORPHOLOGY_PROP_MODE = 0,
+ D2D1_MORPHOLOGY_PROP_WIDTH = 1,
+ D2D1_MORPHOLOGY_PROP_HEIGHT = 2,
+ D2D1_MORPHOLOGY_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_MORPHOLOGY_MODE {
+ D2D1_MORPHOLOGY_MODE_ERODE = 0,
+ D2D1_MORPHOLOGY_MODE_DILATE = 1,
+ D2D1_MORPHOLOGY_MODE_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_TILE_PROP {
+ D2D1_TILE_PROP_RECT = 0,
+ D2D1_TILE_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_ATLAS_PROP {
+ D2D1_ATLAS_PROP_INPUT_RECT = 0,
+ D2D1_ATLAS_PROP_INPUT_PADDING_RECT = 1,
+ D2D1_ATLAS_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_OPACITYMETADATA_PROP {
+ D2D1_OPACITYMETADATA_PROP_INPUT_OPAQUE_RECT = 0,
+ D2D1_OPACITYMETADATA_PROP_FORCE_DWORD = 0xffffffff,
+}}
diff --git a/vendor/winapi/src/um/d2d1effects_1.rs b/vendor/winapi/src/um/d2d1effects_1.rs
new file mode 100644
index 000000000..ba97f0149
--- /dev/null
+++ b/vendor/winapi/src/um/d2d1effects_1.rs
@@ -0,0 +1,31 @@
+// 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 d2d1effects_1.h
+DEFINE_GUID!{CLSID_D2D1YCbCr,
+ 0x99503cc1, 0x66c7, 0x45c9, 0xa8, 0x75, 0x8a, 0xd8, 0xa7, 0x91, 0x44, 0x01}
+ENUM!{enum D2D1_YCBCR_PROP {
+ D2D1_YCBCR_PROP_CHROMA_SUBSAMPLING = 0,
+ D2D1_YCBCR_PROP_TRANSFORM_MATRIX = 1,
+ D2D1_YCBCR_PROP_INTERPOLATION_MODE = 2,
+ D2D1_YCBCR_PROP_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_YCBCR_CHROMA_SUBSAMPLING {
+ D2D1_YCBCR_CHROMA_SUBSAMPLING_AUTO = 0,
+ D2D1_YCBCR_CHROMA_SUBSAMPLING_420 = 1,
+ D2D1_YCBCR_CHROMA_SUBSAMPLING_422 = 2,
+ D2D1_YCBCR_CHROMA_SUBSAMPLING_444 = 3,
+ D2D1_YCBCR_CHROMA_SUBSAMPLING_440 = 4,
+ D2D1_YCBCR_CHROMA_SUBSAMPLING_FORCE_DWORD = 0xffffffff,
+}}
+ENUM!{enum D2D1_YCBCR_INTERPOLATION_MODE {
+ D2D1_YCBCR_INTERPOLATION_MODE_NEAREST_NEIGHBOR = 0,
+ D2D1_YCBCR_INTERPOLATION_MODE_LINEAR = 1,
+ D2D1_YCBCR_INTERPOLATION_MODE_CUBIC = 2,
+ D2D1_YCBCR_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR = 3,
+ D2D1_YCBCR_INTERPOLATION_MODE_ANISOTROPIC = 4,
+ D2D1_YCBCR_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC = 5,
+ D2D1_YCBCR_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff,
+}}
diff --git a/vendor/winapi/src/um/d2d1effects_2.rs b/vendor/winapi/src/um/d2d1effects_2.rs
new file mode 100644
index 000000000..40eea83a2
--- /dev/null
+++ b/vendor/winapi/src/um/d2d1effects_2.rs
@@ -0,0 +1,40 @@
+// 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 d2d1effects_2.h
+DEFINE_GUID!{CLSID_D2D1Contrast,
+ 0xb648a78a, 0x0ed5, 0x4f80, 0xa9, 0x4a, 0x8e, 0x82, 0x5a, 0xca, 0x6b, 0x77}
+DEFINE_GUID!{CLSID_D2D1RgbToHue,
+ 0x23f3e5ec, 0x91e8, 0x4d3d, 0xad, 0x0a, 0xaf, 0xad, 0xc1, 0x00, 0x4a, 0xa1}
+DEFINE_GUID!{CLSID_D2D1HueToRgb,
+ 0x7b78a6bd, 0x0141, 0x4def, 0x8a, 0x52, 0x63, 0x56, 0xee, 0x0c, 0xbd, 0xd5}
+DEFINE_GUID!{CLSID_D2D1ChromaKey,
+ 0x74c01f5b, 0x2a0d, 0x408c, 0x88, 0xe2, 0xc7, 0xa3, 0xc7, 0x19, 0x77, 0x42}
+DEFINE_GUID!{CLSID_D2D1Emboss,
+ 0xb1c5eb2b, 0x0348, 0x43f0, 0x81, 0x07, 0x49, 0x57, 0xca, 0xcb, 0xa2, 0xae}
+DEFINE_GUID!{CLSID_D2D1Exposure,
+ 0xb56c8cfa, 0xf634, 0x41ee, 0xbe, 0xe0, 0xff, 0xa6, 0x17, 0x10, 0x60, 0x04}
+DEFINE_GUID!{CLSID_D2D1Grayscale,
+ 0x36dde0eb, 0x3725, 0x42e0, 0x83, 0x6d, 0x52, 0xfb, 0x20, 0xae, 0xe6, 0x44}
+DEFINE_GUID!{CLSID_D2D1Invert,
+ 0xe0c3784d, 0xcb39, 0x4e84, 0xb6, 0xfd, 0x6b, 0x72, 0xf0, 0x81, 0x02, 0x63}
+DEFINE_GUID!{CLSID_D2D1Posterize,
+ 0x2188945e, 0x33a3, 0x4366, 0xb7, 0xbc, 0x08, 0x6b, 0xd0, 0x2d, 0x08, 0x84}
+DEFINE_GUID!{CLSID_D2D1Sepia,
+ 0x3a1af410, 0x5f1d, 0x4dbe, 0x84, 0xdf, 0x91, 0x5d, 0xa7, 0x9b, 0x71, 0x53}
+DEFINE_GUID!{CLSID_D2D1Sharpen,
+ 0xc9b887cb, 0xc5ff, 0x4dc5, 0x97, 0x79, 0x27, 0x3d, 0xcf, 0x41, 0x7c, 0x7d}
+DEFINE_GUID!{CLSID_D2D1Straighten,
+ 0x4da47b12, 0x79a3, 0x4fb0, 0x82, 0x37, 0xbb, 0xc3, 0xb2, 0xa4, 0xde, 0x08}
+DEFINE_GUID!{CLSID_D2D1TemperatureTint,
+ 0x89176087, 0x8af9, 0x4a08, 0xae, 0xb1, 0x89, 0x5f, 0x38, 0xdb, 0x17, 0x66}
+DEFINE_GUID!{CLSID_D2D1Vignette,
+ 0xc00c40be, 0x5e67, 0x4ca3, 0x95, 0xb4, 0xf4, 0xb0, 0x2c, 0x11, 0x51, 0x35}
+DEFINE_GUID!{CLSID_D2D1EdgeDetection,
+ 0xeff583ca, 0xcb07, 0x4aa9, 0xac, 0x5d, 0x2c, 0xc4, 0x4c, 0x76, 0x46, 0x0f}
+DEFINE_GUID!{CLSID_D2D1HighlightsShadows,
+ 0xcadc8384, 0x323f, 0x4c7e, 0xa3, 0x61, 0x2e, 0x2b, 0x24, 0xdf, 0x6e, 0xe4}
+DEFINE_GUID!{CLSID_D2D1LookupTable3D,
+ 0x349e0eda, 0x0088, 0x4a79, 0x9c, 0xa3, 0xc7, 0xe3, 0x00, 0x20, 0x20, 0x20}
diff --git a/vendor/winapi/src/um/d2d1svg.rs b/vendor/winapi/src/um/d2d1svg.rs
new file mode 100644
index 000000000..33e133ebe
--- /dev/null
+++ b/vendor/winapi/src/um/d2d1svg.rs
@@ -0,0 +1,411 @@
+// 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 d2d1svg.h
+use ctypes::c_void;
+use shared::basetsd::UINT32;
+use shared::guiddef::REFIID;
+use shared::minwindef::{BOOL, FLOAT};
+use shared::ntdef::{PCWSTR, PWSTR, WCHAR};
+use shared::winerror::HRESULT;
+use um::d2d1::{
+ D2D1_CAP_STYLE_FLAT, D2D1_CAP_STYLE_ROUND, D2D1_CAP_STYLE_SQUARE, D2D1_COLOR_F, D2D1_FILL_MODE,
+ D2D1_LINE_JOIN_BEVEL, D2D1_LINE_JOIN_MITER_OR_BEVEL, D2D1_LINE_JOIN_ROUND, D2D1_POINT_2F,
+ D2D1_SIZE_F, ID2D1Resource, ID2D1ResourceVtbl
+};
+use um::d2d1_1::ID2D1PathGeometry1;
+use um::objidlbase::IStream;
+ENUM!{enum D2D1_SVG_PAINT_TYPE {
+ D2D1_SVG_PAINT_TYPE_NONE = 0,
+ D2D1_SVG_PAINT_TYPE_COLOR = 1,
+ D2D1_SVG_PAINT_TYPE_CURRENT_COLOR = 2,
+ D2D1_SVG_PAINT_TYPE_URI = 3,
+ D2D1_SVG_PAINT_TYPE_URI_NONE = 4,
+ D2D1_SVG_PAINT_TYPE_URI_COLOR = 5,
+ D2D1_SVG_PAINT_TYPE_URI_CURRENT_COLOR = 6,
+}}
+ENUM!{enum D2D1_SVG_LENGTH_UNITS {
+ D2D1_SVG_LENGTH_UNITS_NUMBER = 0,
+ D2D1_SVG_LENGTH_UNITS_PERCENTAGE = 1,
+}}
+ENUM!{enum D2D1_SVG_DISPLAY {
+ D2D1_SVG_DISPLAY_INLINE = 0,
+ D2D1_SVG_DISPLAY_NONE = 1,
+}}
+ENUM!{enum D2D1_SVG_VISIBILITY {
+ D2D1_SVG_VISIBILITY_VISIBLE = 0,
+ D2D1_SVG_VISIBILITY_HIDDEN = 1,
+}}
+ENUM!{enum D2D1_SVG_OVERFLOW {
+ D2D1_SVG_OVERFLOW_VISIBLE = 0,
+ D2D1_SVG_OVERFLOW_HIDDEN = 1,
+}}
+ENUM!{enum D2D1_SVG_LINE_CAP {
+ D2D1_SVG_LINE_CAP_BUTT = D2D1_CAP_STYLE_FLAT,
+ D2D1_SVG_LINE_CAP_SQUARE = D2D1_CAP_STYLE_SQUARE,
+ D2D1_SVG_LINE_CAP_ROUND = D2D1_CAP_STYLE_ROUND,
+}}
+ENUM!{enum D2D1_SVG_LINE_JOIN {
+ D2D1_SVG_LINE_JOIN_BEVEL = D2D1_LINE_JOIN_BEVEL,
+ D2D1_SVG_LINE_JOIN_MITER = D2D1_LINE_JOIN_MITER_OR_BEVEL,
+ D2D1_SVG_LINE_JOIN_ROUND = D2D1_LINE_JOIN_ROUND,
+}}
+ENUM!{enum D2D1_SVG_ASPECT_ALIGN {
+ D2D1_SVG_ASPECT_ALIGN_NONE = 0,
+ D2D1_SVG_ASPECT_ALIGN_X_MIN_Y_MIN = 1,
+ D2D1_SVG_ASPECT_ALIGN_X_MID_Y_MIN = 2,
+ D2D1_SVG_ASPECT_ALIGN_X_MAX_Y_MIN = 3,
+ D2D1_SVG_ASPECT_ALIGN_X_MIN_Y_MID = 4,
+ D2D1_SVG_ASPECT_ALIGN_X_MID_Y_MID = 5,
+ D2D1_SVG_ASPECT_ALIGN_X_MAX_Y_MID = 6,
+ D2D1_SVG_ASPECT_ALIGN_X_MIN_Y_MAX = 7,
+ D2D1_SVG_ASPECT_ALIGN_X_MID_Y_MAX = 8,
+ D2D1_SVG_ASPECT_ALIGN_X_MAX_Y_MAX = 9,
+}}
+ENUM!{enum D2D1_SVG_ASPECT_SCALING {
+ D2D1_SVG_ASPECT_SCALING_MEET = 0,
+ D2D1_SVG_ASPECT_SCALING_SLICE = 1,
+}}
+ENUM!{enum D2D1_SVG_PATH_COMMAND {
+ D2D1_SVG_PATH_COMMAND_CLOSE_PATH = 0,
+ D2D1_SVG_PATH_COMMAND_MOVE_ABSOLUTE = 1,
+ D2D1_SVG_PATH_COMMAND_MOVE_RELATIVE = 2,
+ D2D1_SVG_PATH_COMMAND_LINE_ABSOLUTE = 3,
+ D2D1_SVG_PATH_COMMAND_LINE_RELATIVE = 4,
+ D2D1_SVG_PATH_COMMAND_CUBIC_ABSOLUTE = 5,
+ D2D1_SVG_PATH_COMMAND_CUBIC_RELATIVE = 6,
+ D2D1_SVG_PATH_COMMAND_QUADRADIC_ABSOLUTE = 7,
+ D2D1_SVG_PATH_COMMAND_QUADRADIC_RELATIVE = 8,
+ D2D1_SVG_PATH_COMMAND_ARC_ABSOLUTE = 9,
+ D2D1_SVG_PATH_COMMAND_ARC_RELATIVE = 10,
+ D2D1_SVG_PATH_COMMAND_HORIZONTAL_ABSOLUTE = 11,
+ D2D1_SVG_PATH_COMMAND_HORIZONTAL_RELATIVE = 12,
+ D2D1_SVG_PATH_COMMAND_VERTICAL_ABSOLUTE = 13,
+ D2D1_SVG_PATH_COMMAND_VERTICAL_RELATIVE = 14,
+ D2D1_SVG_PATH_COMMAND_CUBIC_SMOOTH_ABSOLUTE = 15,
+ D2D1_SVG_PATH_COMMAND_CUBIC_SMOOTH_RELATIVE = 16,
+ D2D1_SVG_PATH_COMMAND_QUADRADIC_SMOOTH_ABSOLUTE = 17,
+ D2D1_SVG_PATH_COMMAND_QUADRADIC_SMOOTH_RELATIVE = 18,
+}}
+ENUM!{enum D2D1_SVG_UNIT_TYPE {
+ D2D1_SVG_UNIT_TYPE_USER_SPACE_ON_USE = 0,
+ D2D1_SVG_UNIT_TYPE_OBJECT_BOUNDING_BOX = 1,
+}}
+ENUM!{enum D2D1_SVG_ATTRIBUTE_STRING_TYPE {
+ D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG = 0,
+ D2D1_SVG_ATTRIBUTE_STRING_TYPE_ID = 1,
+}}
+ENUM!{enum D2D1_SVG_ATTRIBUTE_POD_TYPE {
+ D2D1_SVG_ATTRIBUTE_POD_TYPE_FLOAT = 0,
+ D2D1_SVG_ATTRIBUTE_POD_TYPE_COLOR = 1,
+ D2D1_SVG_ATTRIBUTE_POD_TYPE_FILL_MODE = 2,
+ D2D1_SVG_ATTRIBUTE_POD_TYPE_DISPLAY = 3,
+ D2D1_SVG_ATTRIBUTE_POD_TYPE_OVERFLOW = 4,
+ D2D1_SVG_ATTRIBUTE_POD_TYPE_LINE_CAP = 5,
+ D2D1_SVG_ATTRIBUTE_POD_TYPE_LINE_JOIN = 6,
+ D2D1_SVG_ATTRIBUTE_POD_TYPE_VISIBILITY = 7,
+ D2D1_SVG_ATTRIBUTE_POD_TYPE_MATRIX = 8,
+ D2D1_SVG_ATTRIBUTE_POD_TYPE_UNIT_TYPE = 9,
+ D2D1_SVG_ATTRIBUTE_POD_TYPE_EXTEND_MODE = 10,
+ D2D1_SVG_ATTRIBUTE_POD_TYPE_PRESERVE_ASPECT_RATIO = 11,
+ D2D1_SVG_ATTRIBUTE_POD_TYPE_VIEWBOX = 12,
+ D2D1_SVG_ATTRIBUTE_POD_TYPE_LENGTH = 13,
+}}
+STRUCT!{struct D2D1_SVG_LENGTH {
+ value: FLOAT,
+ units: D2D1_SVG_LENGTH_UNITS,
+}}
+STRUCT!{struct D2D1_SVG_PRESERVE_ASPECT_RATIO {
+ defer: BOOL,
+ align: D2D1_SVG_ASPECT_ALIGN,
+ meetOrSlice: D2D1_SVG_ASPECT_SCALING,
+}}
+STRUCT!{struct D2D1_SVG_VIEWBOX {
+ x: FLOAT,
+ y: FLOAT,
+ width: FLOAT,
+ height: FLOAT,
+}}
+DEFINE_GUID!{IID_ID2D1SvgAttribute,
+ 0xc9cdb0dd, 0xf8c9, 0x4e70, 0xb7, 0xc2, 0x30, 0x1c, 0x80, 0x29, 0x2c, 0x5e}
+DEFINE_GUID!{IID_ID2D1SvgPaint,
+ 0xd59bab0a, 0x68a2, 0x455b, 0xa5, 0xdc, 0x9e, 0xb2, 0x85, 0x4e, 0x24, 0x90}
+DEFINE_GUID!{IID_ID2D1SvgStrokeDashArray,
+ 0xf1c0ca52, 0x92a3, 0x4f00, 0xb4, 0xce, 0xf3, 0x56, 0x91, 0xef, 0xd9, 0xd9}
+DEFINE_GUID!{IID_ID2D1SvgPointCollection,
+ 0x9dbe4c0d, 0x3572, 0x4dd9, 0x98, 0x25, 0x55, 0x30, 0x81, 0x3b, 0xb7, 0x12}
+DEFINE_GUID!{IID_ID2D1SvgPathData,
+ 0xc095e4f4, 0xbb98, 0x43d6, 0x97, 0x45, 0x4d, 0x1b, 0x84, 0xec, 0x98, 0x88}
+DEFINE_GUID!{IID_ID2D1SvgElement,
+ 0xac7b67a6, 0x183e, 0x49c1, 0xa8, 0x23, 0x0e, 0xbe, 0x40, 0xb0, 0xdb, 0x29}
+DEFINE_GUID!{IID_ID2D1SvgDocument,
+ 0x86b88e4d, 0xafa4, 0x4d7b, 0x88, 0xe4, 0x68, 0xa5, 0x1c, 0x4a, 0x0a, 0xec}
+RIDL!{#[uuid(0xc9cdb0dd, 0xf8c9, 0x4e70, 0xb7, 0xc2, 0x30, 0x1c, 0x80, 0x29, 0x2c, 0x5e)]
+interface ID2D1SvgAttribute(ID2D1SvgAttributeVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ fn GetElement(
+ element: *mut *mut ID2D1SvgElement,
+ ) -> (),
+ fn Clone(
+ attribute: *mut *mut ID2D1SvgAttribute,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xd59bab0a, 0x68a2, 0x455b, 0xa5, 0xdc, 0x9e, 0xb2, 0x85, 0x4e, 0x24, 0x90)]
+interface ID2D1SvgPaint(ID2D1SvgPaintVtbl): ID2D1SvgAttribute(ID2D1SvgAttributeVtbl) {
+ fn SetPaintType(
+ paintType: D2D1_SVG_PAINT_TYPE,
+ ) -> HRESULT,
+ fn GetPaintType() -> D2D1_SVG_PAINT_TYPE,
+ fn SetColor(
+ color: D2D1_COLOR_F,
+ ) -> HRESULT,
+ fn GetColor(
+ color: *mut D2D1_COLOR_F,
+ ) -> (),
+ fn SetId(
+ id: PCWSTR,
+ ) -> HRESULT,
+ fn GetId(
+ id: PWSTR,
+ idCount: UINT32,
+ ) -> HRESULT,
+ fn GetIdLength() -> UINT32,
+}}
+RIDL!{#[uuid(0xf1c0ca52, 0x92a3, 0x4f00, 0xb4, 0xce, 0xf3, 0x56, 0x91, 0xef, 0xd9, 0xd9)]
+interface ID2D1SvgStrokeDashArray(ID2D1SvgStrokeDashArrayVtbl):
+ ID2D1SvgAttribute(ID2D1SvgAttributeVtbl) {
+ fn RemoveDashesAtEnd(
+ dashesCount: UINT32,
+ ) -> HRESULT,
+ fn UpdateDashes_1(
+ dashes: *const D2D1_SVG_LENGTH,
+ dashesCount: UINT32,
+ startIndex: UINT32,
+ ) -> HRESULT,
+ fn UpdateDashes_2(
+ dashes: *const FLOAT,
+ dashesCount: UINT32,
+ startIndex: UINT32,
+ ) -> HRESULT,
+ fn GetDashes_1(
+ dashes: *mut D2D1_SVG_LENGTH,
+ dashesCount: UINT32,
+ startIndex: UINT32,
+ ) -> HRESULT,
+ fn GetDashes_2(
+ dashes: *mut FLOAT,
+ dashesCount: UINT32,
+ startIndex: UINT32,
+ ) -> HRESULT,
+ fn GetDashesCount() -> UINT32,
+}}
+RIDL!{#[uuid(0x9dbe4c0d, 0x3572, 0x4dd9, 0x98, 0x25, 0x55, 0x30, 0x81, 0x3b, 0xb7, 0x12)]
+interface ID2D1SvgPointCollection(ID2D1SvgPointCollectionVtbl):
+ ID2D1SvgAttribute(ID2D1SvgAttributeVtbl) {
+ fn RemovePointsAtEnd(
+ pointsCount: UINT32,
+ ) -> HRESULT,
+ fn UpdatePoints(
+ points: *const D2D1_POINT_2F,
+ pointsCount: UINT32,
+ startIndex: UINT32,
+ ) -> HRESULT,
+ fn GetPoints(
+ points: *mut D2D1_POINT_2F,
+ pointsCount: UINT32,
+ startIndex: UINT32,
+ ) -> HRESULT,
+ fn GetPointsCount() -> UINT32,
+}}
+RIDL!{#[uuid(0xc095e4f4, 0xbb98, 0x43d6, 0x97, 0x45, 0x4d, 0x1b, 0x84, 0xec, 0x98, 0x88)]
+interface ID2D1SvgPathData(ID2D1SvgPathDataVtbl): ID2D1SvgAttribute(ID2D1SvgAttributeVtbl) {
+ fn RemoveSegmentDataAtEnd(
+ dataCount: UINT32,
+ ) -> HRESULT,
+ fn UpdateSegmentData(
+ data: *const FLOAT,
+ dataCount: UINT32,
+ startIndex: UINT32,
+ ) -> HRESULT,
+ fn GetSegmentData(
+ data: *mut FLOAT,
+ dataCount: UINT32,
+ startIndex: UINT32,
+ ) -> HRESULT,
+ fn GetSegmentDataCount() -> UINT32,
+ fn RemoveCommandsAtEnd(
+ commandsCount: UINT32,
+ ) -> HRESULT,
+ fn UpdateCommands(
+ commands: *const D2D1_SVG_PATH_COMMAND,
+ commandsCount: UINT32,
+ startIndex: UINT32,
+ ) -> HRESULT,
+ fn GetCommands(
+ commands: *mut D2D1_SVG_PATH_COMMAND,
+ commandsCount: UINT32,
+ startIndex: UINT32,
+ ) -> HRESULT,
+ fn GetCommandsCount() -> UINT32,
+ fn CreatePathGeometry(
+ fillMode: D2D1_FILL_MODE,
+ pathGeometry: *mut *mut ID2D1PathGeometry1,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xac7b67a6, 0x183e, 0x49c1, 0xa8, 0x23, 0x0e, 0xbe, 0x40, 0xb0, 0xdb, 0x29)]
+interface ID2D1SvgElement(ID2D1SvgElementVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ fn GetDocument(
+ document: *mut *mut ID2D1SvgDocument,
+ ) -> (),
+ fn GetTagName(
+ name: PWSTR,
+ nameCount: UINT32,
+ ) -> HRESULT,
+ fn GetTagNameLength() -> UINT32,
+ fn IsTextContent() -> BOOL,
+ fn GetParent(
+ parent: *mut *mut ID2D1SvgElement,
+ ) -> (),
+ fn HasChildren() -> BOOL,
+ fn GetFirstChild(
+ child: *mut *mut ID2D1SvgElement,
+ ) -> (),
+ fn GetLastChild(
+ child: *mut *mut ID2D1SvgElement,
+ ) -> (),
+ fn GetPreviousChild(
+ referenceChild: *mut ID2D1SvgElement,
+ previousChild: *mut *mut ID2D1SvgElement,
+ ) -> HRESULT,
+ fn GetNextChild(
+ referenceChild: *mut ID2D1SvgElement,
+ nextChild: *mut *mut ID2D1SvgElement,
+ ) -> HRESULT,
+ fn InsertChildBefore(
+ newChild: *mut ID2D1SvgElement,
+ referenceChild: *mut ID2D1SvgElement,
+ ) -> HRESULT,
+ fn AppendChild(
+ newChild: *mut ID2D1SvgElement,
+ ) -> HRESULT,
+ fn ReplaceChild(
+ newChild: *mut ID2D1SvgElement,
+ oldChild: *mut ID2D1SvgElement,
+ ) -> HRESULT,
+ fn RemoveChild(
+ oldChild: *mut ID2D1SvgElement,
+ ) -> HRESULT,
+ fn IsAttributeSpecified(
+ name: PCWSTR, inherited: *mut BOOL,
+ ) -> BOOL,
+ fn GetSpecifiedAttributeCount() -> UINT32,
+ fn GetSpecifiedAttributeName(
+ index: UINT32,
+ name: PWSTR,
+ nameCount: UINT32,
+ inherited: *mut BOOL,
+ ) -> HRESULT,
+ fn GetSpecifiedAttributeNameLength(
+ index: UINT32,
+ nameLength: *mut UINT32,
+ inherited: *mut BOOL,
+ ) -> HRESULT,
+ fn RemoveAttribute(
+ name: PCWSTR,
+ ) -> HRESULT,
+ fn SetTextValue(
+ name: *const WCHAR,
+ nameCount: UINT32,
+ ) -> HRESULT,
+ fn GetTextValue(
+ name: PWSTR,
+ nameCount: UINT32,
+ ) -> HRESULT,
+ fn GetTextValueLength() -> UINT32,
+ fn SetAttributeValue_1(
+ name: PCWSTR,
+ value: *mut ID2D1SvgAttribute,
+ ) -> HRESULT,
+ fn SetAttributeValue_2(
+ name: PCWSTR,
+ type_: D2D1_SVG_ATTRIBUTE_POD_TYPE,
+ value: *const c_void,
+ valueSizeInBytes: UINT32,
+ ) -> HRESULT,
+ fn SetAttributeValue_3(
+ name: PCWSTR,
+ type_: D2D1_SVG_ATTRIBUTE_STRING_TYPE,
+ value: PCWSTR,
+ ) -> HRESULT,
+ fn GetAttributeValue_1(
+ name: PCWSTR,
+ riid: REFIID,
+ value: *mut *mut c_void,
+ ) -> HRESULT,
+ fn GetAttributeValue_2(
+ name: PCWSTR,
+ type_: D2D1_SVG_ATTRIBUTE_POD_TYPE,
+ value: *mut c_void,
+ valueSizeInBytes: UINT32,
+ ) -> HRESULT,
+ fn GetAttributeValue_3(
+ name: PCWSTR,
+ type_: D2D1_SVG_ATTRIBUTE_STRING_TYPE,
+ value: PWSTR,
+ valueCount: UINT32,
+ ) -> HRESULT,
+ fn GetAttributeValueLength(
+ name: PCWSTR,
+ type_: D2D1_SVG_ATTRIBUTE_STRING_TYPE,
+ valueLength: *mut UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x86b88e4d, 0xafa4, 0x4d7b, 0x88, 0xe4, 0x68, 0xa5, 0x1c, 0x4a, 0x0a, 0xec)]
+interface ID2D1SvgDocument(ID2D1SvgDocumentVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
+ fn SetViewportSize(
+ viewportSize: D2D1_SIZE_F,
+ ) -> HRESULT,
+ fn GetViewportSize() -> D2D1_SIZE_F,
+ fn SetRoot(
+ root: *mut ID2D1SvgElement,
+ ) -> HRESULT,
+ fn GetRoot(
+ root: *mut *mut ID2D1SvgElement,
+ ) -> (),
+ fn FindElementById(
+ id: PCWSTR,
+ svgElement: *mut *mut ID2D1SvgElement,
+ ) -> HRESULT,
+ fn Serialize(
+ outputXmlStream: *mut IStream,
+ subtree: *mut ID2D1SvgElement,
+ ) -> HRESULT,
+ fn Deserialize(
+ inputXmlStream: *mut IStream,
+ subtree: *mut *mut ID2D1SvgElement,
+ ) -> HRESULT,
+ fn CreatePaint(
+ paintType: D2D1_SVG_PAINT_TYPE,
+ color: *const D2D1_COLOR_F,
+ id: PCWSTR,
+ paint: *mut *mut ID2D1SvgPaint,
+ ) -> HRESULT,
+ fn CreateStrokeDashArray(
+ dashes: *const D2D1_SVG_LENGTH,
+ dashesCount: UINT32,
+ strokeDashArray: *mut *mut ID2D1SvgStrokeDashArray,
+ ) -> HRESULT,
+ fn CreatePointCollection(
+ points: *const D2D1_POINT_2F,
+ pountsCount: UINT32,
+ pointCollection: *mut ID2D1SvgPointCollection,
+ ) -> HRESULT,
+ fn CreatePathData(
+ segmentData: *const FLOAT,
+ segmentDataCount: UINT32,
+ commands: *const D2D1_SVG_PATH_COMMAND,
+ commandsCount: UINT32,
+ pathData: *mut *mut ID2D1SvgPathData,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/d2dbasetypes.rs b/vendor/winapi/src/um/d2dbasetypes.rs
new file mode 100644
index 000000000..754a05572
--- /dev/null
+++ b/vendor/winapi/src/um/d2dbasetypes.rs
@@ -0,0 +1,15 @@
+// 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 d2dbasetypes.h
+use shared::d3d9types::D3DCOLORVALUE;
+// FIXME: Remove in next major version
+pub use um::dcommon::{
+ D2D1_MATRIX_3X2_F, D2D1_POINT_2F, D2D1_POINT_2L, D2D1_POINT_2U, D2D1_RECT_F, D2D1_RECT_L,
+ D2D1_RECT_U, D2D1_SIZE_F, D2D1_SIZE_U, D2D_MATRIX_3X2_F, D2D_MATRIX_4X3_F, D2D_MATRIX_4X4_F,
+ D2D_MATRIX_5X4_F, D2D_POINT_2F, D2D_POINT_2L, D2D_POINT_2U, D2D_RECT_F, D2D_RECT_L, D2D_RECT_U,
+ D2D_SIZE_F, D2D_SIZE_U, D2D_VECTOR_2F, D2D_VECTOR_3F, D2D_VECTOR_4F,
+};
+pub type D2D_COLOR_F = D3DCOLORVALUE;
diff --git a/vendor/winapi/src/um/d3d.rs b/vendor/winapi/src/um/d3d.rs
new file mode 100644
index 000000000..e4b0250b6
--- /dev/null
+++ b/vendor/winapi/src/um/d3d.rs
@@ -0,0 +1,61 @@
+// 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.
+DEFINE_GUID!{IID_IDirect3D,
+ 0x3bba0080, 0x2421, 0x11cf, 0xa3, 0x1a, 0x00, 0xaa, 0x00, 0xb9, 0x33, 0x56}
+DEFINE_GUID!{IID_IDirect3D2,
+ 0x6aae1ec1, 0x662a, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a}
+DEFINE_GUID!{IID_IDirect3D3,
+ 0xbb223240, 0xe72b, 0x11d0, 0xa9, 0xb4, 0x00, 0xaa, 0x00, 0xc0, 0x99, 0x3e}
+DEFINE_GUID!{IID_IDirect3D7,
+ 0xf5049e77, 0x4861, 0x11d2, 0xa4, 0x07, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0xa8}
+DEFINE_GUID!{IID_IDirect3DRampDevice,
+ 0xf2086b20, 0x259f, 0x11cf, 0xa3, 0x1a, 0x00, 0xaa, 0x00, 0xb9, 0x33, 0x56}
+DEFINE_GUID!{IID_IDirect3DRGBDevice,
+ 0xa4665c60, 0x2673, 0x11cf, 0xa3, 0x1a, 0x00, 0xaa, 0x00, 0xb9, 0x33, 0x56}
+DEFINE_GUID!{IID_IDirect3DHALDevice,
+ 0x84e63de0, 0x46aa, 0x11cf, 0x81, 0x6f, 0x00, 0x00, 0xc0, 0x20, 0x15, 0x6e}
+DEFINE_GUID!{IID_IDirect3DMMXDevice,
+ 0x881949a1, 0xd6f3, 0x11d0, 0x89, 0xab, 0x00, 0xa0, 0xc9, 0x05, 0x41, 0x29}
+DEFINE_GUID!{IID_IDirect3DRefDevice,
+ 0x50936643, 0x13e9, 0x11d1, 0x89, 0xaa, 0x00, 0xa0, 0xc9, 0x05, 0x41, 0x29}
+DEFINE_GUID!{IID_IDirect3DNullDevice,
+ 0x8767df22, 0xbacc, 0x11d1, 0x89, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0xa8}
+DEFINE_GUID!{IID_IDirect3DTnLHalDevice,
+ 0xf5049e78, 0x4861, 0x11d2, 0xa4, 0x07, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0xa8}
+DEFINE_GUID!{IID_IDirect3DDevice,
+ 0x64108800, 0x957d, 0x11d0, 0x89, 0xab, 0x00, 0xa0, 0xc9, 0x05, 0x41, 0x29}
+DEFINE_GUID!{IID_IDirect3DDevice2,
+ 0x93281501, 0x8cf8, 0x11d0, 0x89, 0xab, 0x00, 0xa0, 0xc9, 0x05, 0x41, 0x29}
+DEFINE_GUID!{IID_IDirect3DDevice3,
+ 0xb0ab3b60, 0x33d7, 0x11d1, 0xa9, 0x81, 0x00, 0xc0, 0x4f, 0xd7, 0xb1, 0x74}
+DEFINE_GUID!{IID_IDirect3DDevice7,
+ 0xf5049e79, 0x4861, 0x11d2, 0xa4, 0x07, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0xa8}
+DEFINE_GUID!{IID_IDirect3DTexture,
+ 0x2cdcd9e0, 0x25a0, 0x11cf, 0xa3, 0x1a, 0x00, 0xaa, 0x00, 0xb9, 0x33, 0x56}
+DEFINE_GUID!{IID_IDirect3DTexture2,
+ 0x93281502, 0x8cf8, 0x11d0, 0x89, 0xab, 0x00, 0xa0, 0xc9, 0x05, 0x41, 0x29}
+DEFINE_GUID!{IID_IDirect3DLight,
+ 0x4417c142, 0x33ad, 0x11cf, 0x81, 0x6f, 0x00, 0x00, 0xc0, 0x20, 0x15, 0x6e}
+DEFINE_GUID!{IID_IDirect3DMaterial,
+ 0x4417c144, 0x33ad, 0x11cf, 0x81, 0x6f, 0x00, 0x00, 0xc0, 0x20, 0x15, 0x6e}
+DEFINE_GUID!{IID_IDirect3DIndexBuffer8,
+ 0x0e689c9a, 0x053d, 0x44a0, 0x9d, 0x92, 0xdb, 0x0e, 0x3d, 0x75, 0x0f, 0x86}
+DEFINE_GUID!{IID_IDirect3DMaterial2,
+ 0x93281503, 0x8cf8, 0x11d0, 0x89, 0xab, 0x00, 0xa0, 0xc9, 0x05, 0x41, 0x29}
+DEFINE_GUID!{IID_IDirect3DMaterial3,
+ 0xca9c46f4, 0xd3c5, 0x11d1, 0xb7, 0x5a, 0x00, 0x60, 0x08, 0x52, 0xb3, 0x12}
+DEFINE_GUID!{IID_IDirect3DExecuteBuffer,
+ 0x4417c145, 0x33ad, 0x11cf, 0x81, 0x6f, 0x00, 0x00, 0xc0, 0x20, 0x15, 0x6e}
+DEFINE_GUID!{IID_IDirect3DViewport,
+ 0x4417c146, 0x33ad, 0x11cf, 0x81, 0x6f, 0x00, 0x00, 0xc0, 0x20, 0x15, 0x6e}
+DEFINE_GUID!{IID_IDirect3DViewport2,
+ 0x93281500, 0x8cf8, 0x11d0, 0x89, 0xab, 0x00, 0xa0, 0xc9, 0x05, 0x41, 0x29}
+DEFINE_GUID!{IID_IDirect3DViewport3,
+ 0xb0ab3b61, 0x33d7, 0x11d1, 0xa9, 0x81, 0x00, 0xc0, 0x4f, 0xd7, 0xb1, 0x74}
+DEFINE_GUID!{IID_IDirect3DVertexBuffer,
+ 0x7a503555, 0x4a83, 0x11d1, 0xa5, 0xdb, 0x00, 0xa0, 0xc9, 0x03, 0x67, 0xf8}
+DEFINE_GUID!{IID_IDirect3DVertexBuffer7,
+ 0xf5049e7d, 0x4861, 0x11d2, 0xa4, 0x07, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0xa8}
diff --git a/vendor/winapi/src/um/d3d10.rs b/vendor/winapi/src/um/d3d10.rs
new file mode 100644
index 000000000..887b7a344
--- /dev/null
+++ b/vendor/winapi/src/um/d3d10.rs
@@ -0,0 +1,57 @@
+// 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 um::d3dcommon::{D3D_PRIMITIVE, D3D_PRIMITIVE_TOPOLOGY, D3D_SRV_DIMENSION};
+pub type D3D10_PRIMITIVE_TOPOLOGY = D3D_PRIMITIVE_TOPOLOGY;
+pub type D3D10_PRIMITIVE = D3D_PRIMITIVE;
+pub type D3D10_SRV_DIMENSION = D3D_SRV_DIMENSION;
+DEFINE_GUID!{IID_ID3D10DeviceChild,
+ 0x9b7e4c00, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10DepthStencilState,
+ 0x2b4b1cc8, 0xa4ad, 0x41f8, 0x83, 0x22, 0xca, 0x86, 0xfc, 0x3e, 0xc6, 0x75}
+DEFINE_GUID!{IID_ID3D10BlendState,
+ 0xedad8d19, 0x8a35, 0x4d6d, 0x85, 0x66, 0x2e, 0xa2, 0x76, 0xcd, 0xe1, 0x61}
+DEFINE_GUID!{IID_ID3D10RasterizerState,
+ 0xa2a07292, 0x89af, 0x4345, 0xbe, 0x2e, 0xc5, 0x3d, 0x9f, 0xbb, 0x6e, 0x9f}
+DEFINE_GUID!{IID_ID3D10Resource,
+ 0x9b7e4c01, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10Buffer,
+ 0x9b7e4c02, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10Texture1D,
+ 0x9b7e4c03, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10Texture2D,
+ 0x9b7e4c04, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10Texture3D,
+ 0x9b7e4c05, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10View,
+ 0xc902b03f, 0x60a7, 0x49ba, 0x99, 0x36, 0x2a, 0x3a, 0xb3, 0x7a, 0x7e, 0x33}
+DEFINE_GUID!{IID_ID3D10ShaderResourceView,
+ 0x9b7e4c07, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10RenderTargetView,
+ 0x9b7e4c08, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10DepthStencilView,
+ 0x9b7e4c09, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10VertexShader,
+ 0x9b7e4c0a, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10GeometryShader,
+ 0x6316be88, 0x54cd, 0x4040, 0xab, 0x44, 0x20, 0x46, 0x1b, 0xc8, 0x1f, 0x68}
+DEFINE_GUID!{IID_ID3D10PixelShader,
+ 0x4968b601, 0x9d00, 0x4cde, 0x83, 0x46, 0x8e, 0x7f, 0x67, 0x58, 0x19, 0xb6}
+DEFINE_GUID!{IID_ID3D10InputLayout,
+ 0x9b7e4c0b, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10SamplerState,
+ 0x9b7e4c0c, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10Asynchronous,
+ 0x9b7e4c0d, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10Query,
+ 0x9b7e4c0e, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10Predicate,
+ 0x9b7e4c10, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10Counter,
+ 0x9b7e4c11, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10Device,
+ 0x9b7e4c0f, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10Multithread,
+ 0x9b7e4e00, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
diff --git a/vendor/winapi/src/um/d3d10_1.rs b/vendor/winapi/src/um/d3d10_1.rs
new file mode 100644
index 000000000..3765ce309
--- /dev/null
+++ b/vendor/winapi/src/um/d3d10_1.rs
@@ -0,0 +1,11 @@
+// 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.
+DEFINE_GUID!{IID_ID3D10BlendState1,
+ 0xedad8d99, 0x8a35, 0x4d6d, 0x85, 0x66, 0x2e, 0xa2, 0x76, 0xcd, 0xe1, 0x61}
+DEFINE_GUID!{IID_ID3D10ShaderResourceView1,
+ 0x9b7e4c87, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10Device1,
+ 0x9b7e4c8f, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
diff --git a/vendor/winapi/src/um/d3d10_1shader.rs b/vendor/winapi/src/um/d3d10_1shader.rs
new file mode 100644
index 000000000..69d9583ce
--- /dev/null
+++ b/vendor/winapi/src/um/d3d10_1shader.rs
@@ -0,0 +1,7 @@
+// 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.
+DEFINE_GUID!{IID_ID3D10ShaderReflection1,
+ 0xc3457783, 0xa846, 0x47ce, 0x95, 0x20, 0xce, 0xa6, 0xf6, 0x6e, 0x74, 0x47}
diff --git a/vendor/winapi/src/um/d3d10effect.rs b/vendor/winapi/src/um/d3d10effect.rs
new file mode 100644
index 000000000..de93acec4
--- /dev/null
+++ b/vendor/winapi/src/um/d3d10effect.rs
@@ -0,0 +1,45 @@
+// 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.
+DEFINE_GUID!{IID_ID3D10StateBlock,
+ 0x0803425a, 0x57f5, 0x4dd6, 0x94, 0x65, 0xa8, 0x75, 0x70, 0x83, 0x4a, 0x08}
+DEFINE_GUID!{IID_ID3D10EffectType,
+ 0x4e9e1ddc, 0xcd9d, 0x4772, 0xa8, 0x37, 0x00, 0x18, 0x0b, 0x9b, 0x88, 0xfd}
+DEFINE_GUID!{IID_ID3D10EffectVariable,
+ 0xae897105, 0x00e6, 0x45bf, 0xbb, 0x8e, 0x28, 0x1d, 0xd6, 0xdb, 0x8e, 0x1b}
+DEFINE_GUID!{IID_ID3D10EffectScalarVariable,
+ 0x00e48f7b, 0xd2c8, 0x49e8, 0xa8, 0x6c, 0x02, 0x2d, 0xee, 0x53, 0x43, 0x1f}
+DEFINE_GUID!{IID_ID3D10EffectVectorVariable,
+ 0x62b98c44, 0x1f82, 0x4c67, 0xbc, 0xd0, 0x72, 0xcf, 0x8f, 0x21, 0x7e, 0x81}
+DEFINE_GUID!{IID_ID3D10EffectMatrixVariable,
+ 0x50666c24, 0xb82f, 0x4eed, 0xa1, 0x72, 0x5b, 0x6e, 0x7e, 0x85, 0x22, 0xe0}
+DEFINE_GUID!{IID_ID3D10EffectStringVariable,
+ 0x71417501, 0x8df9, 0x4e0a, 0xa7, 0x8a, 0x25, 0x5f, 0x97, 0x56, 0xba, 0xff}
+DEFINE_GUID!{IID_ID3D10EffectShaderResourceVariable,
+ 0xc0a7157b, 0xd872, 0x4b1d, 0x80, 0x73, 0xef, 0xc2, 0xac, 0xd4, 0xb1, 0xfc}
+DEFINE_GUID!{IID_ID3D10EffectRenderTargetViewVariable,
+ 0x28ca0cc3, 0xc2c9, 0x40bb, 0xb5, 0x7f, 0x67, 0xb7, 0x37, 0x12, 0x2b, 0x17}
+DEFINE_GUID!{IID_ID3D10EffectDepthStencilViewVariable,
+ 0x3e02c918, 0xcc79, 0x4985, 0xb6, 0x22, 0x2d, 0x92, 0xad, 0x70, 0x16, 0x23}
+DEFINE_GUID!{IID_ID3D10EffectConstantBuffer,
+ 0x56648f4d, 0xcc8b, 0x4444, 0xa5, 0xad, 0xb5, 0xa3, 0xd7, 0x6e, 0x91, 0xb3}
+DEFINE_GUID!{IID_ID3D10EffectShaderVariable,
+ 0x80849279, 0xc799, 0x4797, 0x8c, 0x33, 0x04, 0x07, 0xa0, 0x7d, 0x9e, 0x06}
+DEFINE_GUID!{IID_ID3D10EffectBlendVariable,
+ 0x1fcd2294, 0xdf6d, 0x4eae, 0x86, 0xb3, 0x0e, 0x91, 0x60, 0xcf, 0xb0, 0x7b}
+DEFINE_GUID!{IID_ID3D10EffectDepthStencilVariable,
+ 0xaf482368, 0x330a, 0x46a5, 0x9a, 0x5c, 0x01, 0xc7, 0x1a, 0xf2, 0x4c, 0x8d}
+DEFINE_GUID!{IID_ID3D10EffectRasterizerVariable,
+ 0x21af9f0e, 0x4d94, 0x4ea9, 0x97, 0x85, 0x2c, 0xb7, 0x6b, 0x8c, 0x0b, 0x34}
+DEFINE_GUID!{IID_ID3D10EffectSamplerVariable,
+ 0x6530d5c7, 0x07e9, 0x4271, 0xa4, 0x18, 0xe7, 0xce, 0x4b, 0xd1, 0xe4, 0x80}
+DEFINE_GUID!{IID_ID3D10EffectPass,
+ 0x5cfbeb89, 0x1a06, 0x46e0, 0xb2, 0x82, 0xe3, 0xf9, 0xbf, 0xa3, 0x6a, 0x54}
+DEFINE_GUID!{IID_ID3D10EffectTechnique,
+ 0xdb122ce8, 0xd1c9, 0x4292, 0xb2, 0x37, 0x24, 0xed, 0x3d, 0xe8, 0xb1, 0x75}
+DEFINE_GUID!{IID_ID3D10Effect,
+ 0x51b0ca8b, 0xec0b, 0x4519, 0x87, 0x0d, 0x8e, 0xe1, 0xcb, 0x50, 0x17, 0xc7}
+DEFINE_GUID!{IID_ID3D10EffectPool,
+ 0x9537ab04, 0x3250, 0x412e, 0x82, 0x13, 0xfc, 0xd2, 0xf8, 0x67, 0x79, 0x33}
diff --git a/vendor/winapi/src/um/d3d10misc.rs b/vendor/winapi/src/um/d3d10misc.rs
new file mode 100644
index 000000000..5303f2eb3
--- /dev/null
+++ b/vendor/winapi/src/um/d3d10misc.rs
@@ -0,0 +1,7 @@
+// 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.
+DEFINE_GUID!{GUID_DeviceType,
+ 0xd722fb4d, 0x7a68, 0x437a, 0xb2, 0x0c, 0x58, 0x04, 0xee, 0x24, 0x94, 0xa6}
diff --git a/vendor/winapi/src/um/d3d10sdklayers.rs b/vendor/winapi/src/um/d3d10sdklayers.rs
new file mode 100644
index 000000000..d71c483e4
--- /dev/null
+++ b/vendor/winapi/src/um/d3d10sdklayers.rs
@@ -0,0 +1,13 @@
+// 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.
+DEFINE_GUID!{DXGI_DEBUG_D3D10,
+ 0x243b4c52, 0x3606, 0x4d3a, 0x99, 0xd7, 0xa7, 0xe7, 0xb3, 0x3e, 0xd7, 0x06}
+DEFINE_GUID!{IID_ID3D10Debug,
+ 0x9b7e4e01, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10SwitchToRef,
+ 0x9b7e4e02, 0x342c, 0x4106, 0xa1, 0x9f, 0x4f, 0x27, 0x04, 0xf6, 0x89, 0xf0}
+DEFINE_GUID!{IID_ID3D10InfoQueue,
+ 0x1b940b17, 0x2642, 0x4d1f, 0xab, 0x1f, 0xb9, 0x9b, 0xad, 0x0c, 0x39, 0x5f}
diff --git a/vendor/winapi/src/um/d3d10shader.rs b/vendor/winapi/src/um/d3d10shader.rs
new file mode 100644
index 000000000..952fd6dc2
--- /dev/null
+++ b/vendor/winapi/src/um/d3d10shader.rs
@@ -0,0 +1,206 @@
+// 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::minwindef::{BYTE, LPVOID, UINT};
+use um::d3d10::{D3D10_PRIMITIVE_TOPOLOGY, D3D10_SRV_DIMENSION};
+use um::d3dcommon::{
+ D3D_CBUFFER_TYPE, D3D_INCLUDE_TYPE, D3D_NAME, D3D_REGISTER_COMPONENT_TYPE,
+ D3D_RESOURCE_RETURN_TYPE, D3D_SHADER_CBUFFER_FLAGS, D3D_SHADER_INPUT_FLAGS,
+ D3D_SHADER_INPUT_TYPE, D3D_SHADER_MACRO, D3D_SHADER_VARIABLE_CLASS, D3D_SHADER_VARIABLE_FLAGS,
+ D3D_SHADER_VARIABLE_TYPE, ID3DInclude,
+};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPCSTR};
+pub const D3D10_SHADER_DEBUG: UINT = 1 << 0;
+pub const D3D10_SHADER_SKIP_VALIDATION: UINT = 1 << 1;
+pub const D3D10_SHADER_SKIP_OPTIMIZATION: UINT = 1 << 2;
+pub const D3D10_SHADER_PACK_MATRIX_ROW_MAJOR: UINT = 1 << 3;
+pub const D3D10_SHADER_PACK_MATRIX_COLUMN_MAJOR: UINT = 1 << 4;
+pub const D3D10_SHADER_PARTIAL_PRECISION: UINT = 1 << 5;
+pub const D3D10_SHADER_FORCE_VS_SOFTWARE_NO_OPT: UINT = 1 << 6;
+pub const D3D10_SHADER_FORCE_PS_SOFTWARE_NO_OPT: UINT = 1 << 7;
+pub const D3D10_SHADER_NO_PRESHADER: UINT = 1 << 8;
+pub const D3D10_SHADER_AVOID_FLOW_CONTROL: UINT = 1 << 9;
+pub const D3D10_SHADER_PREFER_FLOW_CONTROL: UINT = 1 << 10;
+pub const D3D10_SHADER_ENABLE_STRICTNESS: UINT = 1 << 11;
+pub const D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY: UINT = 1 << 12;
+pub const D3D10_SHADER_IEEE_STRICTNESS: UINT = 1 << 13;
+pub const D3D10_SHADER_WARNINGS_ARE_ERRORS: UINT = 1 << 18;
+pub const D3D10_SHADER_RESOURCES_MAY_ALIAS: UINT = 1 << 19;
+pub const D3D10_ENABLE_UNBOUNDED_DESCRIPTOR_TABLES: UINT = 1 << 20;
+pub const D3D10_ALL_RESOURCES_BOUND: UINT = 1 << 21;
+pub const D3D10_SHADER_OPTIMIZATION_LEVEL0: UINT = 1 << 14;
+pub const D3D10_SHADER_OPTIMIZATION_LEVEL1: UINT = 0;
+pub const D3D10_SHADER_OPTIMIZATION_LEVEL2: UINT = (1 << 14) | (1 << 15);
+pub const D3D10_SHADER_OPTIMIZATION_LEVEL3: UINT = 1 << 15;
+pub const D3D10_SHADER_FLAGS2_FORCE_ROOT_SIGNATURE_LATEST: UINT = 0;
+pub const D3D10_SHADER_FLAGS2_FORCE_ROOT_SIGNATURE_1_0: UINT = 1 << 4;
+pub const D3D10_SHADER_FLAGS2_FORCE_ROOT_SIGNATURE_1_1: UINT = 1 << 5;
+pub type D3D10_SHADER_MACRO = D3D_SHADER_MACRO;
+pub type LPD3D10_SHADER_MACRO = *mut D3D10_SHADER_MACRO;
+pub type D3D10_SHADER_VARIABLE_CLASS = D3D_SHADER_VARIABLE_CLASS;
+pub type LPD3D10_SHADER_VARIABLE_CLASS = *mut D3D10_SHADER_VARIABLE_CLASS;
+pub type D3D10_SHADER_VARIABLE_FLAGS = D3D_SHADER_VARIABLE_FLAGS;
+pub type LPD3D10_SHADER_VARIABLE_FLAGS = *mut D3D10_SHADER_VARIABLE_FLAGS;
+pub type D3D10_SHADER_VARIABLE_TYPE = D3D_SHADER_VARIABLE_TYPE;
+pub type LPD3D10_SHADER_VARIABLE_TYPE = *mut D3D10_SHADER_VARIABLE_TYPE;
+pub type D3D10_SHADER_INPUT_FLAGS = D3D_SHADER_INPUT_FLAGS;
+pub type LPD3D10_SHADER_INPUT_FLAGS = *mut D3D10_SHADER_INPUT_FLAGS;
+pub type D3D10_SHADER_INPUT_TYPE = D3D_SHADER_INPUT_TYPE;
+pub type LPD3D10_SHADER_INPUT_TYPE = *mut D3D10_SHADER_INPUT_TYPE;
+pub type D3D10_SHADER_CBUFFER_FLAGS = D3D_SHADER_CBUFFER_FLAGS;
+pub type LPD3D10_SHADER_CBUFFER_FLAGS = *mut D3D10_SHADER_CBUFFER_FLAGS;
+pub type D3D10_CBUFFER_TYPE = D3D_CBUFFER_TYPE;
+pub type LPD3D10_CBUFFER_TYPE = *mut D3D10_CBUFFER_TYPE;
+pub type D3D10_NAME = D3D_NAME;
+pub type D3D10_RESOURCE_RETURN_TYPE = D3D_RESOURCE_RETURN_TYPE;
+pub type D3D10_REGISTER_COMPONENT_TYPE = D3D_REGISTER_COMPONENT_TYPE;
+pub type D3D10_INCLUDE_TYPE = D3D_INCLUDE_TYPE;
+pub type ID3D10Include = ID3DInclude;
+pub type LPD3D10INCLUDE = *mut ID3DInclude;
+// const IID_ID3D10Include: IID = IID_ID3DInclude;
+STRUCT!{struct D3D10_SHADER_DESC {
+ Version: UINT,
+ Creator: LPCSTR,
+ Flags: UINT,
+ ConstantBuffers: UINT,
+ BoundResources: UINT,
+ InputParameters: UINT,
+ OutputParameters: UINT,
+ InstructionCount: UINT,
+ TempRegisterCount: UINT,
+ TempArrayCount: UINT,
+ DefCount: UINT,
+ DclCount: UINT,
+ TextureNormalInstructions: UINT,
+ TextureLoadInstructions: UINT,
+ TextureCompInstructions: UINT,
+ TextureBiasInstructions: UINT,
+ TextureGradientInstructions: UINT,
+ FloatInstructionCount: UINT,
+ IntInstructionCount: UINT,
+ UintInstructionCount: UINT,
+ StaticFlowControlCount: UINT,
+ DynamicFlowControlCount: UINT,
+ MacroInstructionCount: UINT,
+ ArrayInstructionCount: UINT,
+ CutInstructionCount: UINT,
+ EmitInstructionCount: UINT,
+ GSOutputTopology: D3D10_PRIMITIVE_TOPOLOGY,
+ GSMaxOutputVertexCount: UINT,
+}}
+STRUCT!{struct D3D10_SHADER_BUFFER_DESC {
+ Name: LPCSTR,
+ Type: D3D10_CBUFFER_TYPE,
+ Variables: UINT,
+ Size: UINT,
+ uFlags: UINT,
+}}
+STRUCT!{struct D3D10_SHADER_VARIABLE_DESC {
+ Name: LPCSTR,
+ StartOffset: UINT,
+ Size: UINT,
+ uFlags: UINT,
+ DefaultValue: LPVOID,
+}}
+STRUCT!{struct D3D10_SHADER_TYPE_DESC {
+ Class: D3D10_SHADER_VARIABLE_CLASS,
+ Type: D3D10_SHADER_VARIABLE_TYPE,
+ Rows: UINT,
+ Columns: UINT,
+ Elements: UINT,
+ Members: UINT,
+ Offset: UINT,
+}}
+STRUCT!{struct D3D10_SHADER_INPUT_BIND_DESC {
+ Name: LPCSTR,
+ Type: D3D10_SHADER_INPUT_TYPE,
+ BindPoint: UINT,
+ BindCount: UINT,
+ uFlags: UINT,
+ ReturnType: D3D10_RESOURCE_RETURN_TYPE,
+ Dimension: D3D10_SRV_DIMENSION,
+ NumSamples: UINT,
+}}
+STRUCT!{struct D3D10_SIGNATURE_PARAMETER_DESC {
+ SemanticName: LPCSTR,
+ SemanticIndex: UINT,
+ Register: UINT,
+ SystemValueType: D3D10_NAME,
+ ComponentType: D3D10_REGISTER_COMPONENT_TYPE,
+ Mask: BYTE,
+ ReadWriteMask: BYTE,
+}}
+pub type LPD3D10SHADERREFLECTIONTYPE = *mut ID3D10ShaderReflectionType;
+DEFINE_GUID!{IID_ID3D10ShaderReflectionType,
+ 0xc530ad7d, 0x9b16, 0x4395, 0xa9, 0x79, 0xba, 0x2e, 0xcf, 0xf8, 0x3a, 0xdd}
+RIDL!{#[uuid(0xc530ad7d, 0x9b16, 0x4395, 0xa9, 0x79, 0xba, 0x2e, 0xcf, 0xf8, 0x3a, 0xdd)]
+interface ID3D10ShaderReflectionType(ID3D10ShaderReflectionTypeVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D10_SHADER_TYPE_DESC,
+ ) -> HRESULT,
+ fn GetMemberTypeByIndex(
+ Index: UINT,
+ ) -> *mut ID3D10ShaderReflectionType,
+ fn GetMemberTypeByName(
+ Name: LPCSTR,
+ ) -> *mut ID3D10ShaderReflectionType,
+ fn GetMemberTypeName(
+ Index: UINT,
+ ) -> LPCSTR,
+}}
+pub type LPD3D10SHADERREFLECTIONVARIABLE = *mut ID3D10ShaderReflectionVariable;
+DEFINE_GUID!{IID_ID3D10ShaderReflectionVariable,
+ 0x1bf63c95, 0x2650, 0x405d, 0x99, 0xc1, 0x36, 0x36, 0xbd, 0x1d, 0xa0, 0xa1}
+RIDL!{#[uuid(0x1bf63c95, 0x2650, 0x405d, 0x99, 0xc1, 0x36, 0x36, 0xbd, 0x1d, 0xa0, 0xa1)]
+interface ID3D10ShaderReflectionVariable(ID3D10ShaderReflectionVariableVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D10_SHADER_VARIABLE_DESC,
+ ) -> HRESULT,
+ fn GetType() -> *mut ID3D10ShaderReflectionType,
+}}
+pub type LPD3D10SHADERREFLECTIONCONSTANTBUFFER = *mut ID3D10ShaderReflectionConstantBuffer;
+DEFINE_GUID!{IID_ID3D10ShaderReflectionConstantBuffer,
+ 0x66c66a94, 0xdddd, 0x4b62, 0xa6, 0x6a, 0xf0, 0xda, 0x33, 0xc2, 0xb4, 0xd0}
+RIDL!{#[uuid(0x66c66a94, 0xdddd, 0x4b62, 0xa6, 0x6a, 0xf0, 0xda, 0x33, 0xc2, 0xb4, 0xd0)]
+interface ID3D10ShaderReflectionConstantBuffer(ID3D10ShaderReflectionConstantBufferVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D10_SHADER_BUFFER_DESC,
+ ) -> HRESULT,
+ fn GetVariableByIndex(
+ Index: UINT,
+ ) -> *mut ID3D10ShaderReflectionVariable,
+ fn GetVariableByName(
+ Name: LPCSTR,
+ ) -> *mut ID3D10ShaderReflectionVariable,
+}}
+pub type LPD3D10SHADERREFLECTION = *mut ID3D10ShaderReflection;
+DEFINE_GUID!{IID_ID3D10ShaderReflection,
+ 0xd40e20b6, 0xf8f7, 0x42ad, 0xab, 0x20, 0x4b, 0xaf, 0x8f, 0x15, 0xdf, 0xaa}
+RIDL!{#[uuid(0xd40e20b6, 0xf8f7, 0x42ad, 0xab, 0x20, 0x4b, 0xaf, 0x8f, 0x15, 0xdf, 0xaa)]
+interface ID3D10ShaderReflection(ID3D10ShaderReflectionVtbl): IUnknown(IUnknownVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D10_SHADER_DESC,
+ ) -> HRESULT,
+ fn GetConstantBufferByIndex(
+ Index: UINT,
+ ) -> *mut ID3D10ShaderReflectionConstantBuffer,
+ fn GetConstantBufferByName(
+ Name: LPCSTR,
+ ) -> *mut ID3D10ShaderReflectionConstantBuffer,
+ fn GetResourceBindingDesc(
+ ResourceIndex: UINT,
+ pDesc: *mut D3D10_SHADER_INPUT_BIND_DESC,
+ ) -> HRESULT,
+ fn GetInputParameterDesc(
+ ParameterIndex: UINT,
+ pDesc: *mut D3D10_SIGNATURE_PARAMETER_DESC,
+ ) -> HRESULT,
+ fn GetOutputParameterDesc(
+ ParameterIndex: UINT,
+ pDesc: *mut D3D10_SIGNATURE_PARAMETER_DESC,
+ ) -> HRESULT,
+}}
+// TODO Some functions
diff --git a/vendor/winapi/src/um/d3d11.rs b/vendor/winapi/src/um/d3d11.rs
new file mode 100644
index 000000000..79b5c4dff
--- /dev/null
+++ b/vendor/winapi/src/um/d3d11.rs
@@ -0,0 +1,3421 @@
+// 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 ctypes::{c_float, c_int, c_long, c_void};
+use shared::basetsd::{SIZE_T, UINT64, UINT8};
+use shared::dxgi::{DXGI_SWAP_CHAIN_DESC, IDXGIAdapter, IDXGISwapChain};
+use shared::dxgiformat::DXGI_FORMAT;
+use shared::dxgitype::{DXGI_RATIONAL, DXGI_SAMPLE_DESC};
+use shared::guiddef::{GUID, REFGUID, REFIID};
+use shared::minwindef::{BOOL, BYTE, DWORD, FLOAT, HMODULE, INT, UINT, USHORT};
+use shared::windef::{RECT, SIZE};
+use um::d3dcommon::{
+ D3D_DRIVER_TYPE, D3D_FEATURE_LEVEL, D3D_PRIMITIVE, D3D_PRIMITIVE_TOPOLOGY, D3D_SRV_DIMENSION,
+};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HANDLE, HRESULT, LPCSTR, LPSTR, ULONGLONG};
+pub const D3D11_16BIT_INDEX_STRIP_CUT_VALUE: DWORD = 0xffff;
+pub const D3D11_32BIT_INDEX_STRIP_CUT_VALUE: DWORD = 0xffffffff;
+pub const D3D11_8BIT_INDEX_STRIP_CUT_VALUE: DWORD = 0xff;
+pub const D3D11_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT: DWORD = 9;
+pub const D3D11_CLIP_OR_CULL_DISTANCE_COUNT: DWORD = 8;
+pub const D3D11_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT: DWORD = 2;
+pub const D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT: DWORD = 14;
+pub const D3D11_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS: DWORD = 4;
+pub const D3D11_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT: DWORD = 15;
+pub const D3D11_COMMONSHADER_CONSTANT_BUFFER_PARTIAL_UPDATE_EXTENTS_BYTE_ALIGNMENT: DWORD = 16;
+pub const D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS: DWORD = 4;
+pub const D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT: DWORD = 15;
+pub const D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST: DWORD = 1;
+pub const D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT: DWORD = 64;
+pub const D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS: DWORD = 4;
+pub const D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT: DWORD = 1;
+pub const D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST: DWORD = 1;
+pub const D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS: DWORD = 1;
+pub const D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT: DWORD = 128;
+pub const D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST: DWORD = 1;
+pub const D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT: DWORD = 128;
+pub const D3D11_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS: DWORD = 1;
+pub const D3D11_COMMONSHADER_SAMPLER_REGISTER_COUNT: DWORD = 16;
+pub const D3D11_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST: DWORD = 1;
+pub const D3D11_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT: DWORD = 16;
+pub const D3D11_COMMONSHADER_SUBROUTINE_NESTING_LIMIT: DWORD = 32;
+pub const D3D11_COMMONSHADER_TEMP_REGISTER_COMPONENTS: DWORD = 4;
+pub const D3D11_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_COMMONSHADER_TEMP_REGISTER_COUNT: DWORD = 4096;
+pub const D3D11_COMMONSHADER_TEMP_REGISTER_READS_PER_INST: DWORD = 3;
+pub const D3D11_COMMONSHADER_TEMP_REGISTER_READ_PORTS: DWORD = 3;
+pub const D3D11_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX: DWORD = 10;
+pub const D3D11_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN: c_long = -10;
+pub const D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE: c_long = -8;
+pub const D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE: DWORD = 7;
+pub const D3D11_CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: DWORD = 256;
+pub const D3D11_CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP: DWORD = 64;
+pub const D3D11_CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: DWORD = 240;
+pub const D3D11_CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP: DWORD = 68;
+pub const D3D11_CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: DWORD = 224;
+pub const D3D11_CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP: DWORD = 72;
+pub const D3D11_CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: DWORD = 208;
+pub const D3D11_CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP: DWORD = 76;
+pub const D3D11_CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: DWORD = 192;
+pub const D3D11_CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP: DWORD = 84;
+pub const D3D11_CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: DWORD = 176;
+pub const D3D11_CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP: DWORD = 92;
+pub const D3D11_CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: DWORD = 160;
+pub const D3D11_CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP: DWORD = 100;
+pub const D3D11_CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: DWORD = 144;
+pub const D3D11_CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP: DWORD = 112;
+pub const D3D11_CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: DWORD = 128;
+pub const D3D11_CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP: DWORD = 128;
+pub const D3D11_CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: DWORD = 112;
+pub const D3D11_CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP: DWORD = 144;
+pub const D3D11_CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: DWORD = 96;
+pub const D3D11_CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP: DWORD = 168;
+pub const D3D11_CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: DWORD = 80;
+pub const D3D11_CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP: DWORD = 204;
+pub const D3D11_CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: DWORD = 64;
+pub const D3D11_CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP: DWORD = 256;
+pub const D3D11_CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: DWORD = 48;
+pub const D3D11_CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP: DWORD = 340;
+pub const D3D11_CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: DWORD = 32;
+pub const D3D11_CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP: DWORD = 512;
+pub const D3D11_CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: DWORD = 16;
+pub const D3D11_CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP: DWORD = 768;
+pub const D3D11_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION: DWORD = 1;
+pub const D3D11_CS_4_X_RAW_UAV_BYTE_ALIGNMENT: DWORD = 256;
+pub const D3D11_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP: DWORD = 768;
+pub const D3D11_CS_4_X_THREAD_GROUP_MAX_X: DWORD = 768;
+pub const D3D11_CS_4_X_THREAD_GROUP_MAX_Y: DWORD = 768;
+pub const D3D11_CS_4_X_UAV_REGISTER_COUNT: DWORD = 1;
+pub const D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION: DWORD = 65535;
+pub const D3D11_CS_TGSM_REGISTER_COUNT: DWORD = 8192;
+pub const D3D11_CS_TGSM_REGISTER_READS_PER_INST: DWORD = 1;
+pub const D3D11_CS_TGSM_RESOURCE_REGISTER_COMPONENTS: DWORD = 1;
+pub const D3D11_CS_TGSM_RESOURCE_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_CS_THREADGROUPID_REGISTER_COMPONENTS: DWORD = 3;
+pub const D3D11_CS_THREADGROUPID_REGISTER_COUNT: DWORD = 1;
+pub const D3D11_CS_THREADIDINGROUPFLATTENED_REGISTER_COMPONENTS: DWORD = 1;
+pub const D3D11_CS_THREADIDINGROUPFLATTENED_REGISTER_COUNT: DWORD = 1;
+pub const D3D11_CS_THREADIDINGROUP_REGISTER_COMPONENTS: DWORD = 3;
+pub const D3D11_CS_THREADIDINGROUP_REGISTER_COUNT: DWORD = 1;
+pub const D3D11_CS_THREADID_REGISTER_COMPONENTS: DWORD = 3;
+pub const D3D11_CS_THREADID_REGISTER_COUNT: DWORD = 1;
+pub const D3D11_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP: DWORD = 1024;
+pub const D3D11_CS_THREAD_GROUP_MAX_X: DWORD = 1024;
+pub const D3D11_CS_THREAD_GROUP_MAX_Y: DWORD = 1024;
+pub const D3D11_CS_THREAD_GROUP_MAX_Z: DWORD = 64;
+pub const D3D11_CS_THREAD_GROUP_MIN_X: DWORD = 1;
+pub const D3D11_CS_THREAD_GROUP_MIN_Y: DWORD = 1;
+pub const D3D11_CS_THREAD_GROUP_MIN_Z: DWORD = 1;
+pub const D3D11_CS_THREAD_LOCAL_TEMP_REGISTER_POOL: DWORD = 16384;
+pub const D3D11_DEFAULT_BLEND_FACTOR_ALPHA: FLOAT = 1.0;
+pub const D3D11_DEFAULT_BLEND_FACTOR_BLUE: FLOAT = 1.0;
+pub const D3D11_DEFAULT_BLEND_FACTOR_GREEN: FLOAT = 1.0;
+pub const D3D11_DEFAULT_BLEND_FACTOR_RED: FLOAT = 1.0;
+pub const D3D11_DEFAULT_BORDER_COLOR_COMPONENT: FLOAT = 0.0;
+pub const D3D11_DEFAULT_DEPTH_BIAS: DWORD = 0;
+pub const D3D11_DEFAULT_DEPTH_BIAS_CLAMP: FLOAT = 0.0;
+pub const D3D11_DEFAULT_MAX_ANISOTROPY: DWORD = 16;
+pub const D3D11_DEFAULT_MIP_LOD_BIAS: FLOAT = 0.0;
+pub const D3D11_DEFAULT_RENDER_TARGET_ARRAY_INDEX: DWORD = 0;
+pub const D3D11_DEFAULT_SAMPLE_MASK: DWORD = 0xffffffff;
+pub const D3D11_DEFAULT_SCISSOR_ENDX: DWORD = 0;
+pub const D3D11_DEFAULT_SCISSOR_ENDY: DWORD = 0;
+pub const D3D11_DEFAULT_SCISSOR_STARTX: DWORD = 0;
+pub const D3D11_DEFAULT_SCISSOR_STARTY: DWORD = 0;
+pub const D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS: FLOAT = 0.0;
+pub const D3D11_DEFAULT_STENCIL_READ_MASK: DWORD = 0xff;
+pub const D3D11_DEFAULT_STENCIL_REFERENCE: DWORD = 0;
+pub const D3D11_DEFAULT_STENCIL_WRITE_MASK: DWORD = 0xff;
+pub const D3D11_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX: DWORD = 0;
+pub const D3D11_DEFAULT_VIEWPORT_HEIGHT: DWORD = 0;
+pub const D3D11_DEFAULT_VIEWPORT_MAX_DEPTH: FLOAT = 0.0;
+pub const D3D11_DEFAULT_VIEWPORT_MIN_DEPTH: FLOAT = 0.0;
+pub const D3D11_DEFAULT_VIEWPORT_TOPLEFTX: DWORD = 0;
+pub const D3D11_DEFAULT_VIEWPORT_TOPLEFTY: DWORD = 0;
+pub const D3D11_DEFAULT_VIEWPORT_WIDTH: DWORD = 0;
+pub const D3D11_DS_INPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS: DWORD = 3968;
+pub const D3D11_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENTS: DWORD = 4;
+pub const D3D11_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_DS_INPUT_CONTROL_POINT_REGISTER_COUNT: DWORD = 32;
+pub const D3D11_DS_INPUT_CONTROL_POINT_REGISTER_READS_PER_INST: DWORD = 2;
+pub const D3D11_DS_INPUT_CONTROL_POINT_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENTS: DWORD = 3;
+pub const D3D11_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_DS_INPUT_DOMAIN_POINT_REGISTER_COUNT: DWORD = 1;
+pub const D3D11_DS_INPUT_DOMAIN_POINT_REGISTER_READS_PER_INST: DWORD = 2;
+pub const D3D11_DS_INPUT_DOMAIN_POINT_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENTS: DWORD = 4;
+pub const D3D11_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_DS_INPUT_PATCH_CONSTANT_REGISTER_COUNT: DWORD = 32;
+pub const D3D11_DS_INPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST: DWORD = 2;
+pub const D3D11_DS_INPUT_PATCH_CONSTANT_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS: DWORD = 1;
+pub const D3D11_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_DS_INPUT_PRIMITIVE_ID_REGISTER_COUNT: DWORD = 1;
+pub const D3D11_DS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST: DWORD = 2;
+pub const D3D11_DS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_DS_OUTPUT_REGISTER_COMPONENTS: DWORD = 4;
+pub const D3D11_DS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_DS_OUTPUT_REGISTER_COUNT: DWORD = 32;
+pub const D3D11_FLOAT16_FUSED_TOLERANCE_IN_ULP: FLOAT = 0.6;
+pub const D3D11_FLOAT32_MAX: FLOAT = 3.402823466E+38;
+pub const D3D11_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP: FLOAT = 0.6;
+pub const D3D11_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR: FLOAT = 2.4;
+pub const D3D11_FLOAT_TO_SRGB_EXPONENT_NUMERATOR: FLOAT = 1.0;
+pub const D3D11_FLOAT_TO_SRGB_OFFSET: FLOAT = 0.055;
+pub const D3D11_FLOAT_TO_SRGB_SCALE_1: FLOAT = 12.92;
+pub const D3D11_FLOAT_TO_SRGB_SCALE_2: FLOAT = 1.055;
+pub const D3D11_FLOAT_TO_SRGB_THRESHOLD: FLOAT = 0.0031308;
+pub const D3D11_FTOI_INSTRUCTION_MAX_INPUT: FLOAT = 2147483647.999;
+pub const D3D11_FTOI_INSTRUCTION_MIN_INPUT: FLOAT = -2147483648.999;
+pub const D3D11_FTOU_INSTRUCTION_MAX_INPUT: FLOAT = 4294967295.999;
+pub const D3D11_FTOU_INSTRUCTION_MIN_INPUT: FLOAT = 0.0;
+pub const D3D11_GS_INPUT_INSTANCE_ID_READS_PER_INST: DWORD = 2;
+pub const D3D11_GS_INPUT_INSTANCE_ID_READ_PORTS: DWORD = 1;
+pub const D3D11_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENTS: DWORD = 1;
+pub const D3D11_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_GS_INPUT_INSTANCE_ID_REGISTER_COUNT: DWORD = 1;
+pub const D3D11_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS: DWORD = 1;
+pub const D3D11_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_GS_INPUT_PRIM_CONST_REGISTER_COUNT: DWORD = 1;
+pub const D3D11_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST: DWORD = 2;
+pub const D3D11_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_GS_INPUT_REGISTER_COMPONENTS: DWORD = 4;
+pub const D3D11_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_GS_INPUT_REGISTER_COUNT: DWORD = 32;
+pub const D3D11_GS_INPUT_REGISTER_READS_PER_INST: DWORD = 2;
+pub const D3D11_GS_INPUT_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_GS_INPUT_REGISTER_VERTICES: DWORD = 32;
+pub const D3D11_GS_MAX_INSTANCE_COUNT: DWORD = 32;
+pub const D3D11_GS_MAX_OUTPUT_VERTEX_COUNT_ACROSS_INSTANCES: DWORD = 1024;
+pub const D3D11_GS_OUTPUT_ELEMENTS: DWORD = 32;
+pub const D3D11_GS_OUTPUT_REGISTER_COMPONENTS: DWORD = 4;
+pub const D3D11_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_GS_OUTPUT_REGISTER_COUNT: DWORD = 32;
+pub const D3D11_HS_CONTROL_POINT_PHASE_INPUT_REGISTER_COUNT: DWORD = 32;
+pub const D3D11_HS_CONTROL_POINT_PHASE_OUTPUT_REGISTER_COUNT: DWORD = 32;
+pub const D3D11_HS_CONTROL_POINT_REGISTER_COMPONENTS: DWORD = 4;
+pub const D3D11_HS_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_HS_CONTROL_POINT_REGISTER_READS_PER_INST: DWORD = 2;
+pub const D3D11_HS_CONTROL_POINT_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_HS_FORK_PHASE_INSTANCE_COUNT_UPPER_BOUND: DWORD = 0xffffffff;
+pub const D3D11_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENTS: DWORD = 1;
+pub const D3D11_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COUNT: DWORD = 1;
+pub const D3D11_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READS_PER_INST: DWORD = 2;
+pub const D3D11_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENTS: DWORD = 1;
+pub const D3D11_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COUNT: DWORD = 1;
+pub const D3D11_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READS_PER_INST: DWORD = 2;
+pub const D3D11_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS: DWORD = 1;
+pub const D3D11_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_HS_INPUT_PRIMITIVE_ID_REGISTER_COUNT: DWORD = 1;
+pub const D3D11_HS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST: DWORD = 2;
+pub const D3D11_HS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_HS_JOIN_PHASE_INSTANCE_COUNT_UPPER_BOUND: DWORD = 0xffffffff;
+pub const D3D11_HS_MAXTESSFACTOR_LOWER_BOUND: FLOAT = 1.0;
+pub const D3D11_HS_MAXTESSFACTOR_UPPER_BOUND: FLOAT = 64.0;
+pub const D3D11_HS_OUTPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS: DWORD = 3968;
+pub const D3D11_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENTS: DWORD = 1;
+pub const D3D11_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COUNT: DWORD = 1;
+pub const D3D11_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READS_PER_INST: DWORD = 2;
+pub const D3D11_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENTS: DWORD = 4;
+pub const D3D11_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COUNT: DWORD = 32;
+pub const D3D11_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST: DWORD = 2;
+pub const D3D11_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_HS_OUTPUT_PATCH_CONSTANT_REGISTER_SCALAR_COMPONENTS: DWORD = 128;
+pub const D3D11_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES: DWORD = 0;
+pub const D3D11_IA_DEFAULT_PRIMITIVE_TOPOLOGY: DWORD = 0;
+pub const D3D11_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES: DWORD = 0;
+pub const D3D11_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT: DWORD = 1;
+pub const D3D11_IA_INSTANCE_ID_BIT_COUNT: DWORD = 32;
+pub const D3D11_IA_INTEGER_ARITHMETIC_BIT_COUNT: DWORD = 32;
+pub const D3D11_IA_PATCH_MAX_CONTROL_POINT_COUNT: DWORD = 32;
+pub const D3D11_IA_PRIMITIVE_ID_BIT_COUNT: DWORD = 32;
+pub const D3D11_IA_VERTEX_ID_BIT_COUNT: DWORD = 32;
+pub const D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT: DWORD = 32;
+pub const D3D11_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS: DWORD = 128;
+pub const D3D11_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT: DWORD = 32;
+pub const D3D11_INTEGER_DIVIDE_BY_ZERO_QUOTIENT: DWORD = 0xffffffff;
+pub const D3D11_INTEGER_DIVIDE_BY_ZERO_REMAINDER: DWORD = 0xffffffff;
+pub const D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL: DWORD = 0xffffffff;
+pub const D3D11_KEEP_UNORDERED_ACCESS_VIEWS: DWORD = 0xffffffff;
+pub const D3D11_LINEAR_GAMMA: FLOAT = 1.0;
+pub const D3D11_MAJOR_VERSION: DWORD = 11;
+pub const D3D11_MAX_BORDER_COLOR_COMPONENT: FLOAT = 1.0;
+pub const D3D11_MAX_DEPTH: FLOAT = 1.0;
+pub const D3D11_MAX_MAXANISOTROPY: DWORD = 16;
+pub const D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT: DWORD = 32;
+pub const D3D11_MAX_POSITION_VALUE: FLOAT = 3.402823466E+34;
+pub const D3D11_MAX_TEXTURE_DIMENSION_2_TO_EXP: DWORD = 17;
+pub const D3D11_MINOR_VERSION: DWORD = 0;
+pub const D3D11_MIN_BORDER_COLOR_COMPONENT: FLOAT = 0.0;
+pub const D3D11_MIN_DEPTH: FLOAT = 0.0;
+pub const D3D11_MIN_MAXANISOTROPY: DWORD = 0;
+pub const D3D11_MIP_LOD_BIAS_MAX: FLOAT = 15.99;
+pub const D3D11_MIP_LOD_BIAS_MIN: FLOAT = -16.0;
+pub const D3D11_MIP_LOD_FRACTIONAL_BIT_COUNT: DWORD = 8;
+pub const D3D11_MIP_LOD_RANGE_BIT_COUNT: DWORD = 8;
+pub const D3D11_MULTISAMPLE_ANTIALIAS_LINE_WIDTH: FLOAT = 1.4;
+pub const D3D11_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT: DWORD = 0;
+pub const D3D11_PIXEL_ADDRESS_RANGE_BIT_COUNT: DWORD = 15;
+pub const D3D11_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT: DWORD = 16;
+pub const D3D11_PS_CS_UAV_REGISTER_COMPONENTS: DWORD = 1;
+pub const D3D11_PS_CS_UAV_REGISTER_COUNT: DWORD = 8;
+pub const D3D11_PS_CS_UAV_REGISTER_READS_PER_INST: DWORD = 1;
+pub const D3D11_PS_CS_UAV_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_PS_FRONTFACING_DEFAULT_VALUE: DWORD = 0xffffffff;
+pub const D3D11_PS_FRONTFACING_FALSE_VALUE: DWORD = 0;
+pub const D3D11_PS_FRONTFACING_TRUE_VALUE: DWORD = 0xffffffff;
+pub const D3D11_PS_INPUT_REGISTER_COMPONENTS: DWORD = 4;
+pub const D3D11_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_PS_INPUT_REGISTER_COUNT: DWORD = 32;
+pub const D3D11_PS_INPUT_REGISTER_READS_PER_INST: DWORD = 2;
+pub const D3D11_PS_INPUT_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT: FLOAT = 0.0;
+pub const D3D11_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS: DWORD = 1;
+pub const D3D11_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_PS_OUTPUT_DEPTH_REGISTER_COUNT: DWORD = 1;
+pub const D3D11_PS_OUTPUT_MASK_REGISTER_COMPONENTS: DWORD = 1;
+pub const D3D11_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_PS_OUTPUT_MASK_REGISTER_COUNT: DWORD = 1;
+pub const D3D11_PS_OUTPUT_REGISTER_COMPONENTS: DWORD = 4;
+pub const D3D11_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_PS_OUTPUT_REGISTER_COUNT: DWORD = 8;
+pub const D3D11_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT: FLOAT = 0.5;
+pub const D3D11_RAW_UAV_SRV_BYTE_ALIGNMENT: DWORD = 16;
+pub const D3D11_REQ_BLEND_OBJECT_COUNT_PER_DEVICE: DWORD = 4096;
+pub const D3D11_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP: DWORD = 27;
+pub const D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT: DWORD = 4096;
+pub const D3D11_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE: DWORD = 4096;
+pub const D3D11_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP: DWORD = 32;
+pub const D3D11_REQ_DRAW_VERTEX_COUNT_2_TO_EXP: DWORD = 32;
+pub const D3D11_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION: DWORD = 16384;
+pub const D3D11_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT: DWORD = 1024;
+pub const D3D11_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT: DWORD = 4096;
+pub const D3D11_REQ_MAXANISOTROPY: DWORD = 16;
+pub const D3D11_REQ_MIP_LEVELS: DWORD = 15;
+pub const D3D11_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES: DWORD = 2048;
+pub const D3D11_REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE: DWORD = 4096;
+pub const D3D11_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH: DWORD = 16384;
+pub const D3D11_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM: DWORD = 128;
+pub const D3D11_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_B_TERM: FLOAT = 0.25;
+pub const D3D11_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_C_TERM: DWORD = 2048;
+pub const D3D11_REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP: DWORD = 20;
+pub const D3D11_REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE: DWORD = 4096;
+pub const D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION: DWORD = 2048;
+pub const D3D11_REQ_TEXTURE1D_U_DIMENSION: DWORD = 16384;
+pub const D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION: DWORD = 2048;
+pub const D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION: DWORD = 16384;
+pub const D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION: DWORD = 2048;
+pub const D3D11_REQ_TEXTURECUBE_DIMENSION: DWORD = 16384;
+pub const D3D11_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL: DWORD = 0;
+pub const D3D11_SHADER_MAJOR_VERSION: DWORD = 5;
+pub const D3D11_SHADER_MAX_INSTANCES: DWORD = 65535;
+pub const D3D11_SHADER_MAX_INTERFACES: DWORD = 253;
+pub const D3D11_SHADER_MAX_INTERFACE_CALL_SITES: DWORD = 4096;
+pub const D3D11_SHADER_MAX_TYPES: DWORD = 65535;
+pub const D3D11_SHADER_MINOR_VERSION: DWORD = 0;
+pub const D3D11_SHIFT_INSTRUCTION_PAD_VALUE: DWORD = 0;
+pub const D3D11_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT: DWORD = 5;
+pub const D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT: DWORD = 8;
+pub const D3D11_SO_BUFFER_MAX_STRIDE_IN_BYTES: DWORD = 2048;
+pub const D3D11_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES: DWORD = 512;
+pub const D3D11_SO_BUFFER_SLOT_COUNT: DWORD = 4;
+pub const D3D11_SO_DDI_REGISTER_INDEX_DENOTING_GAP: DWORD = 0xffffffff;
+pub const D3D11_SO_NO_RASTERIZED_STREAM: DWORD = 0xffffffff;
+pub const D3D11_SO_OUTPUT_COMPONENT_COUNT: DWORD = 128;
+pub const D3D11_SO_STREAM_COUNT: DWORD = 4;
+pub const D3D11_SPEC_DATE_DAY: DWORD = 16;
+pub const D3D11_SPEC_DATE_MONTH: DWORD = 0o5;
+pub const D3D11_SPEC_DATE_YEAR: DWORD = 2011;
+pub const D3D11_SPEC_VERSION: FLOAT = 1.07;
+pub const D3D11_SRGB_GAMMA: FLOAT = 2.2;
+pub const D3D11_SRGB_TO_FLOAT_DENOMINATOR_1: FLOAT = 12.92;
+pub const D3D11_SRGB_TO_FLOAT_DENOMINATOR_2: FLOAT = 1.055;
+pub const D3D11_SRGB_TO_FLOAT_EXPONENT: FLOAT = 2.4;
+pub const D3D11_SRGB_TO_FLOAT_OFFSET: FLOAT = 0.055;
+pub const D3D11_SRGB_TO_FLOAT_THRESHOLD: FLOAT = 0.04045;
+pub const D3D11_SRGB_TO_FLOAT_TOLERANCE_IN_ULP: FLOAT = 0.5;
+pub const D3D11_STANDARD_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_STANDARD_COMPONENT_BIT_COUNT_DOUBLED: DWORD = 64;
+pub const D3D11_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE: DWORD = 4;
+pub const D3D11_STANDARD_PIXEL_COMPONENT_COUNT: DWORD = 128;
+pub const D3D11_STANDARD_PIXEL_ELEMENT_COUNT: DWORD = 32;
+pub const D3D11_STANDARD_VECTOR_SIZE: DWORD = 4;
+pub const D3D11_STANDARD_VERTEX_ELEMENT_COUNT: DWORD = 32;
+pub const D3D11_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT: DWORD = 64;
+pub const D3D11_SUBPIXEL_FRACTIONAL_BIT_COUNT: DWORD = 8;
+pub const D3D11_SUBTEXEL_FRACTIONAL_BIT_COUNT: DWORD = 8;
+pub const D3D11_TESSELLATOR_MAX_EVEN_TESSELLATION_FACTOR: DWORD = 64;
+pub const D3D11_TESSELLATOR_MAX_ISOLINE_DENSITY_TESSELLATION_FACTOR: DWORD = 64;
+pub const D3D11_TESSELLATOR_MAX_ODD_TESSELLATION_FACTOR: DWORD = 63;
+pub const D3D11_TESSELLATOR_MAX_TESSELLATION_FACTOR: DWORD = 64;
+pub const D3D11_TESSELLATOR_MIN_EVEN_TESSELLATION_FACTOR: DWORD = 2;
+pub const D3D11_TESSELLATOR_MIN_ISOLINE_DENSITY_TESSELLATION_FACTOR: DWORD = 1;
+pub const D3D11_TESSELLATOR_MIN_ODD_TESSELLATION_FACTOR: DWORD = 1;
+pub const D3D11_TEXEL_ADDRESS_RANGE_BIT_COUNT: DWORD = 16;
+pub const D3D11_UNBOUND_MEMORY_ACCESS_RESULT: DWORD = 0;
+pub const D3D11_VIEWPORT_AND_SCISSORRECT_MAX_INDEX: DWORD = 15;
+pub const D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE: DWORD = 16;
+pub const D3D11_VIEWPORT_BOUNDS_MAX: DWORD = 32767;
+pub const D3D11_VIEWPORT_BOUNDS_MIN: c_long = -32768;
+pub const D3D11_VS_INPUT_REGISTER_COMPONENTS: DWORD = 4;
+pub const D3D11_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_VS_INPUT_REGISTER_COUNT: DWORD = 32;
+pub const D3D11_VS_INPUT_REGISTER_READS_PER_INST: DWORD = 2;
+pub const D3D11_VS_INPUT_REGISTER_READ_PORTS: DWORD = 1;
+pub const D3D11_VS_OUTPUT_REGISTER_COMPONENTS: DWORD = 4;
+pub const D3D11_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT: DWORD = 32;
+pub const D3D11_VS_OUTPUT_REGISTER_COUNT: DWORD = 32;
+pub const D3D11_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT: DWORD = 10;
+pub const D3D11_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP: DWORD = 25;
+pub const D3D11_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP: DWORD = 25;
+pub const D3D11_1_UAV_SLOT_COUNT: DWORD = 64;
+pub const D3D11_2_TILED_RESOURCE_TILE_SIZE_IN_BYTES: DWORD = 65536;
+ENUM!{enum D3D11_INPUT_CLASSIFICATION {
+ D3D11_INPUT_PER_VERTEX_DATA = 0,
+ D3D11_INPUT_PER_INSTANCE_DATA = 1,
+}}
+pub const D3D11_APPEND_ALIGNED_ELEMENT: DWORD = 0xffffffff;
+STRUCT!{struct D3D11_INPUT_ELEMENT_DESC {
+ SemanticName: LPCSTR,
+ SemanticIndex: UINT,
+ Format: DXGI_FORMAT,
+ InputSlot: UINT,
+ AlignedByteOffset: UINT,
+ InputSlotClass: D3D11_INPUT_CLASSIFICATION,
+ InstanceDataStepRate: UINT,
+}}
+ENUM!{enum D3D11_FILL_MODE {
+ D3D11_FILL_WIREFRAME = 2,
+ D3D11_FILL_SOLID = 3,
+}}
+pub type D3D11_PRIMITIVE_TOPOLOGY = D3D_PRIMITIVE_TOPOLOGY;
+pub type D3D11_PRIMITIVE = D3D_PRIMITIVE;
+ENUM!{enum D3D11_CULL_MODE {
+ D3D11_CULL_NONE = 1,
+ D3D11_CULL_FRONT = 2,
+ D3D11_CULL_BACK = 3,
+}}
+STRUCT!{struct D3D11_SO_DECLARATION_ENTRY {
+ Stream: UINT,
+ SemanticName: LPCSTR,
+ SemanticIndex: UINT,
+ StartComponent: BYTE,
+ ComponentCount: BYTE,
+ OutputSlot: BYTE,
+}}
+STRUCT!{struct D3D11_VIEWPORT {
+ TopLeftX: FLOAT,
+ TopLeftY: FLOAT,
+ Width: FLOAT,
+ Height: FLOAT,
+ MinDepth: FLOAT,
+ MaxDepth: FLOAT,
+}}
+STRUCT!{struct D3D11_DRAW_INSTANCED_INDIRECT_ARGS {
+ VertexCountPerInstance: UINT,
+ InstanceCount: UINT,
+ StartVertexLocation: UINT,
+ StartInstanceLocation: UINT,
+}}
+STRUCT!{struct D3D11_DRAW_INDEXED_INSTANCED_INDIRECT_ARGS {
+ IndexCountPerInstance: UINT,
+ InstanceCount: UINT,
+ StartIndexLocation: UINT,
+ BaseVertexLocation: INT,
+ StartInstanceLocation: UINT,
+}}
+ENUM!{enum D3D11_RESOURCE_DIMENSION {
+ D3D11_RESOURCE_DIMENSION_UNKNOWN = 0,
+ D3D11_RESOURCE_DIMENSION_BUFFER = 1,
+ D3D11_RESOURCE_DIMENSION_TEXTURE1D = 2,
+ D3D11_RESOURCE_DIMENSION_TEXTURE2D = 3,
+ D3D11_RESOURCE_DIMENSION_TEXTURE3D = 4,
+}}
+pub type D3D11_SRV_DIMENSION = D3D_SRV_DIMENSION;
+ENUM!{enum D3D11_DSV_DIMENSION {
+ D3D11_DSV_DIMENSION_UNKNOWN = 0,
+ D3D11_DSV_DIMENSION_TEXTURE1D = 1,
+ D3D11_DSV_DIMENSION_TEXTURE1DARRAY = 2,
+ D3D11_DSV_DIMENSION_TEXTURE2D = 3,
+ D3D11_DSV_DIMENSION_TEXTURE2DARRAY = 4,
+ D3D11_DSV_DIMENSION_TEXTURE2DMS = 5,
+ D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY = 6,
+}}
+ENUM!{enum D3D11_RTV_DIMENSION {
+ D3D11_RTV_DIMENSION_UNKNOWN = 0,
+ D3D11_RTV_DIMENSION_BUFFER = 1,
+ D3D11_RTV_DIMENSION_TEXTURE1D = 2,
+ D3D11_RTV_DIMENSION_TEXTURE1DARRAY = 3,
+ D3D11_RTV_DIMENSION_TEXTURE2D = 4,
+ D3D11_RTV_DIMENSION_TEXTURE2DARRAY = 5,
+ D3D11_RTV_DIMENSION_TEXTURE2DMS = 6,
+ D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY = 7,
+ D3D11_RTV_DIMENSION_TEXTURE3D = 8,
+}}
+ENUM!{enum D3D11_UAV_DIMENSION {
+ D3D11_UAV_DIMENSION_UNKNOWN = 0,
+ D3D11_UAV_DIMENSION_BUFFER = 1,
+ D3D11_UAV_DIMENSION_TEXTURE1D = 2,
+ D3D11_UAV_DIMENSION_TEXTURE1DARRAY = 3,
+ D3D11_UAV_DIMENSION_TEXTURE2D = 4,
+ D3D11_UAV_DIMENSION_TEXTURE2DARRAY = 5,
+ D3D11_UAV_DIMENSION_TEXTURE3D = 8,
+}}
+ENUM!{enum D3D11_USAGE {
+ D3D11_USAGE_DEFAULT = 0,
+ D3D11_USAGE_IMMUTABLE = 1,
+ D3D11_USAGE_DYNAMIC = 2,
+ D3D11_USAGE_STAGING = 3,
+}}
+ENUM!{enum D3D11_BIND_FLAG {
+ D3D11_BIND_VERTEX_BUFFER = 0x1,
+ D3D11_BIND_INDEX_BUFFER = 0x2,
+ D3D11_BIND_CONSTANT_BUFFER = 0x4,
+ D3D11_BIND_SHADER_RESOURCE = 0x8,
+ D3D11_BIND_STREAM_OUTPUT = 0x10,
+ D3D11_BIND_RENDER_TARGET = 0x20,
+ D3D11_BIND_DEPTH_STENCIL = 0x40,
+ D3D11_BIND_UNORDERED_ACCESS = 0x80,
+ D3D11_BIND_DECODER = 0x200,
+ D3D11_BIND_VIDEO_ENCODER = 0x400,
+}}
+ENUM!{enum D3D11_CPU_ACCESS_FLAG {
+ D3D11_CPU_ACCESS_WRITE = 0x10000,
+ D3D11_CPU_ACCESS_READ = 0x20000,
+}}
+ENUM!{enum D3D11_RESOURCE_MISC_FLAG {
+ D3D11_RESOURCE_MISC_GENERATE_MIPS = 0x1,
+ D3D11_RESOURCE_MISC_SHARED = 0x2,
+ D3D11_RESOURCE_MISC_TEXTURECUBE = 0x4,
+ D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS = 0x10,
+ D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS = 0x20,
+ D3D11_RESOURCE_MISC_BUFFER_STRUCTURED = 0x40,
+ D3D11_RESOURCE_MISC_RESOURCE_CLAMP = 0x80,
+ D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX = 0x100,
+ D3D11_RESOURCE_MISC_GDI_COMPATIBLE = 0x200,
+ D3D11_RESOURCE_MISC_SHARED_NTHANDLE = 0x800,
+ D3D11_RESOURCE_MISC_RESTRICTED_CONTENT = 0x1000,
+ D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE = 0x2000,
+ D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE_DRIVER = 0x4000,
+ D3D11_RESOURCE_MISC_GUARDED = 0x8000,
+ D3D11_RESOURCE_MISC_TILE_POOL = 0x20000,
+ D3D11_RESOURCE_MISC_TILED = 0x40000,
+ D3D11_RESOURCE_MISC_HW_PROTECTED = 0x80000,
+}}
+ENUM!{enum D3D11_MAP {
+ D3D11_MAP_READ = 1,
+ D3D11_MAP_WRITE = 2,
+ D3D11_MAP_READ_WRITE = 3,
+ D3D11_MAP_WRITE_DISCARD = 4,
+ D3D11_MAP_WRITE_NO_OVERWRITE = 5,
+}}
+ENUM!{enum D3D11_MAP_FLAG {
+ D3D11_MAP_FLAG_DO_NOT_WAIT = 0x100000,
+}}
+ENUM!{enum D3D11_RAISE_FLAG {
+ D3D11_RAISE_FLAG_DRIVER_INTERNAL_ERROR = 0x1,
+}}
+ENUM!{enum D3D11_CLEAR_FLAG {
+ D3D11_CLEAR_DEPTH = 0x1,
+ D3D11_CLEAR_STENCIL = 0x2,
+}}
+pub type D3D11_RECT = RECT;
+STRUCT!{struct D3D11_BOX {
+ left: UINT,
+ top: UINT,
+ front: UINT,
+ right: UINT,
+ bottom: UINT,
+ back: UINT,
+}}
+RIDL!{#[uuid(0x1841e5c8, 0x16b0, 0x489b, 0xbc, 0xc8, 0x44, 0xcf, 0xb0, 0xd5, 0xde, 0xae)]
+interface ID3D11DeviceChild(ID3D11DeviceChildVtbl): IUnknown(IUnknownVtbl) {
+ fn GetDevice(
+ ppDevice: *mut *mut ID3D11Device,
+ ) -> (),
+ fn GetPrivateData(
+ guid: REFGUID,
+ pDataSize: *mut UINT,
+ pData: *mut c_void,
+ ) -> HRESULT,
+ fn SetPrivateData(
+ guid: REFGUID,
+ DataSize: UINT,
+ pData: *const c_void,
+ ) -> HRESULT,
+ fn SetPrivateDataInterface(
+ guid: REFGUID,
+ pData: *const IUnknown,
+ ) -> HRESULT,
+}}
+ENUM!{enum D3D11_COMPARISON_FUNC {
+ D3D11_COMPARISON_NEVER = 1,
+ D3D11_COMPARISON_LESS = 2,
+ D3D11_COMPARISON_EQUAL = 3,
+ D3D11_COMPARISON_LESS_EQUAL = 4,
+ D3D11_COMPARISON_GREATER = 5,
+ D3D11_COMPARISON_NOT_EQUAL = 6,
+ D3D11_COMPARISON_GREATER_EQUAL = 7,
+ D3D11_COMPARISON_ALWAYS = 8,
+}}
+ENUM!{enum D3D11_DEPTH_WRITE_MASK {
+ D3D11_DEPTH_WRITE_MASK_ZERO = 0,
+ D3D11_DEPTH_WRITE_MASK_ALL = 1,
+}}
+ENUM!{enum D3D11_STENCIL_OP {
+ D3D11_STENCIL_OP_KEEP = 1,
+ D3D11_STENCIL_OP_ZERO = 2,
+ D3D11_STENCIL_OP_REPLACE = 3,
+ D3D11_STENCIL_OP_INCR_SAT = 4,
+ D3D11_STENCIL_OP_DECR_SAT = 5,
+ D3D11_STENCIL_OP_INVERT = 6,
+ D3D11_STENCIL_OP_INCR = 7,
+ D3D11_STENCIL_OP_DECR = 8,
+}}
+STRUCT!{struct D3D11_DEPTH_STENCILOP_DESC {
+ StencilFailOp: D3D11_STENCIL_OP,
+ StencilDepthFailOp: D3D11_STENCIL_OP,
+ StencilPassOp: D3D11_STENCIL_OP,
+ StencilFunc: D3D11_COMPARISON_FUNC,
+}}
+STRUCT!{struct D3D11_DEPTH_STENCIL_DESC {
+ DepthEnable: BOOL,
+ DepthWriteMask: D3D11_DEPTH_WRITE_MASK,
+ DepthFunc: D3D11_COMPARISON_FUNC,
+ StencilEnable: BOOL,
+ StencilReadMask: UINT8,
+ StencilWriteMask: UINT8,
+ FrontFace: D3D11_DEPTH_STENCILOP_DESC,
+ BackFace: D3D11_DEPTH_STENCILOP_DESC,
+}}
+RIDL!{#[uuid(0x03823efb, 0x8d8f, 0x4e1c, 0x9a, 0xa2, 0xf6, 0x4b, 0xb2, 0xcb, 0xfd, 0xf1)]
+interface ID3D11DepthStencilState(ID3D11DepthStencilStateVtbl):
+ ID3D11DeviceChild(ID3D11DeviceChildVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_DEPTH_STENCIL_DESC,
+ ) -> (),
+}}
+ENUM!{enum D3D11_BLEND {
+ D3D11_BLEND_ZERO = 1,
+ D3D11_BLEND_ONE = 2,
+ D3D11_BLEND_SRC_COLOR = 3,
+ D3D11_BLEND_INV_SRC_COLOR = 4,
+ D3D11_BLEND_SRC_ALPHA = 5,
+ D3D11_BLEND_INV_SRC_ALPHA = 6,
+ D3D11_BLEND_DEST_ALPHA = 7,
+ D3D11_BLEND_INV_DEST_ALPHA = 8,
+ D3D11_BLEND_DEST_COLOR = 9,
+ D3D11_BLEND_INV_DEST_COLOR = 10,
+ D3D11_BLEND_SRC_ALPHA_SAT = 11,
+ D3D11_BLEND_BLEND_FACTOR = 14,
+ D3D11_BLEND_INV_BLEND_FACTOR = 15,
+ D3D11_BLEND_SRC1_COLOR = 16,
+ D3D11_BLEND_INV_SRC1_COLOR = 17,
+ D3D11_BLEND_SRC1_ALPHA = 18,
+ D3D11_BLEND_INV_SRC1_ALPHA = 19,
+}}
+ENUM!{enum D3D11_BLEND_OP {
+ D3D11_BLEND_OP_ADD = 1,
+ D3D11_BLEND_OP_SUBTRACT = 2,
+ D3D11_BLEND_OP_REV_SUBTRACT = 3,
+ D3D11_BLEND_OP_MIN = 4,
+ D3D11_BLEND_OP_MAX = 5,
+}}
+ENUM!{enum D3D11_COLOR_WRITE_ENABLE {
+ D3D11_COLOR_WRITE_ENABLE_RED = 1,
+ D3D11_COLOR_WRITE_ENABLE_GREEN = 2,
+ D3D11_COLOR_WRITE_ENABLE_BLUE = 4,
+ D3D11_COLOR_WRITE_ENABLE_ALPHA = 8,
+ D3D11_COLOR_WRITE_ENABLE_ALL = D3D11_COLOR_WRITE_ENABLE_RED | D3D11_COLOR_WRITE_ENABLE_GREEN
+ | D3D11_COLOR_WRITE_ENABLE_BLUE | D3D11_COLOR_WRITE_ENABLE_ALPHA,
+}}
+STRUCT!{struct D3D11_RENDER_TARGET_BLEND_DESC {
+ BlendEnable: BOOL,
+ SrcBlend: D3D11_BLEND,
+ DestBlend: D3D11_BLEND,
+ BlendOp: D3D11_BLEND_OP,
+ SrcBlendAlpha: D3D11_BLEND,
+ DestBlendAlpha: D3D11_BLEND,
+ BlendOpAlpha: D3D11_BLEND_OP,
+ RenderTargetWriteMask: UINT8,
+}}
+STRUCT!{struct D3D11_BLEND_DESC {
+ AlphaToCoverageEnable: BOOL,
+ IndependentBlendEnable: BOOL,
+ RenderTarget: [D3D11_RENDER_TARGET_BLEND_DESC; 8],
+}}
+RIDL!{#[uuid(0x75b68faa, 0x347d, 0x4159, 0x8f, 0x45, 0xa0, 0x64, 0x0f, 0x01, 0xcd, 0x9a)]
+interface ID3D11BlendState(ID3D11BlendStateVtbl): ID3D11DeviceChild(ID3D11DeviceChildVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_BLEND_DESC,
+ ) -> (),
+}}
+STRUCT!{struct D3D11_RASTERIZER_DESC {
+ FillMode: D3D11_FILL_MODE,
+ CullMode: D3D11_CULL_MODE,
+ FrontCounterClockwise: BOOL,
+ DepthBias: INT,
+ DepthBiasClamp: FLOAT,
+ SlopeScaledDepthBias: FLOAT,
+ DepthClipEnable: BOOL,
+ ScissorEnable: BOOL,
+ MultisampleEnable: BOOL,
+ AntialiasedLineEnable: BOOL,
+}}
+RIDL!{#[uuid(0x9bb4ab81, 0xab1a, 0x4d8f, 0xb5, 0x06, 0xfc, 0x04, 0x20, 0x0b, 0x6e, 0xe7)]
+interface ID3D11RasterizerState(ID3D11RasterizerStateVtbl):
+ ID3D11DeviceChild(ID3D11DeviceChildVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_RASTERIZER_DESC,
+ ) -> (),
+}}
+STRUCT!{struct D3D11_SUBRESOURCE_DATA {
+ pSysMem: *const c_void,
+ SysMemPitch: UINT,
+ SysMemSlicePitch: UINT,
+}}
+STRUCT!{struct D3D11_MAPPED_SUBRESOURCE {
+ pData: *mut c_void,
+ RowPitch: UINT,
+ DepthPitch: UINT,
+}}
+RIDL!{#[uuid(0xdc8e63f3, 0xd12b, 0x4952, 0xb4, 0x7b, 0x5e, 0x45, 0x02, 0x6a, 0x86, 0x2d)]
+interface ID3D11Resource(ID3D11ResourceVtbl): ID3D11DeviceChild(ID3D11DeviceChildVtbl) {
+ fn GetType(
+ pResourceDimension: *mut D3D11_RESOURCE_DIMENSION,
+ ) -> (),
+ fn SetEvictionPriority(
+ EvictionPriority: UINT,
+ ) -> (),
+ fn GetEvictionPriority() -> UINT,
+}}
+STRUCT!{struct D3D11_BUFFER_DESC {
+ ByteWidth: UINT,
+ Usage: D3D11_USAGE,
+ BindFlags: UINT,
+ CPUAccessFlags: UINT,
+ MiscFlags: UINT,
+ StructureByteStride: UINT,
+}}
+RIDL!{#[uuid(0x48570b85, 0xd1ee, 0x4fcd, 0xa2, 0x50, 0xeb, 0x35, 0x07, 0x22, 0xb0, 0x37)]
+interface ID3D11Buffer(ID3D11BufferVtbl): ID3D11Resource(ID3D11ResourceVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_BUFFER_DESC,
+ ) -> (),
+}}
+STRUCT!{struct D3D11_TEXTURE1D_DESC {
+ Width: UINT,
+ MipLevels: UINT,
+ ArraySize: UINT,
+ Format: DXGI_FORMAT,
+ Usage: D3D11_USAGE,
+ BindFlags: UINT,
+ CPUAccessFlags: UINT,
+ MiscFlags: UINT,
+}}
+RIDL!{#[uuid(0xf8fb5c27, 0xc6b3, 0x4f75, 0xa4, 0xc8, 0x43, 0x9a, 0xf2, 0xef, 0x56, 0x4c)]
+interface ID3D11Texture1D(ID3D11Texture1DVtbl): ID3D11Resource(ID3D11ResourceVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_TEXTURE1D_DESC,
+ ) -> (),
+}}
+STRUCT!{struct D3D11_TEXTURE2D_DESC {
+ Width: UINT,
+ Height: UINT,
+ MipLevels: UINT,
+ ArraySize: UINT,
+ Format: DXGI_FORMAT,
+ SampleDesc: DXGI_SAMPLE_DESC,
+ Usage: D3D11_USAGE,
+ BindFlags: UINT,
+ CPUAccessFlags: UINT,
+ MiscFlags: UINT,
+}}
+RIDL!{#[uuid(0x6f15aaf2, 0xd208, 0x4e89, 0x9a, 0xb4, 0x48, 0x95, 0x35, 0xd3, 0x4f, 0x9c)]
+interface ID3D11Texture2D(ID3D11Texture2DVtbl): ID3D11Resource(ID3D11ResourceVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_TEXTURE2D_DESC,
+ ) -> (),
+}}
+STRUCT!{struct D3D11_TEXTURE3D_DESC {
+ Width: UINT,
+ Height: UINT,
+ Depth: UINT,
+ MipLevels: UINT,
+ Format: DXGI_FORMAT,
+ Usage: D3D11_USAGE,
+ BindFlags: UINT,
+ CPUAccessFlags: UINT,
+ MiscFlags: UINT,
+}}
+RIDL!{#[uuid(0x037e866e, 0xf56d, 0x4357, 0xa8, 0xaf, 0x9d, 0xab, 0xbe, 0x6e, 0x25, 0x0e)]
+interface ID3D11Texture3D(ID3D11Texture3DVtbl): ID3D11Resource(ID3D11ResourceVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_TEXTURE3D_DESC,
+ ) -> (),
+}}
+ENUM!{enum D3D11_TEXTURECUBE_FACE {
+ D3D11_TEXTURECUBE_FACE_POSITIVE_X = 0,
+ D3D11_TEXTURECUBE_FACE_NEGATIVE_X = 1,
+ D3D11_TEXTURECUBE_FACE_POSITIVE_Y = 2,
+ D3D11_TEXTURECUBE_FACE_NEGATIVE_Y = 3,
+ D3D11_TEXTURECUBE_FACE_POSITIVE_Z = 4,
+ D3D11_TEXTURECUBE_FACE_NEGATIVE_Z = 5,
+}}
+RIDL!{#[uuid(0x839d1216, 0xbb2e, 0x412b, 0xb7, 0xf4, 0xa9, 0xdb, 0xeb, 0xe0, 0x8e, 0xd1)]
+interface ID3D11View(ID3D11ViewVtbl): ID3D11DeviceChild(ID3D11DeviceChildVtbl) {
+ fn GetResource(
+ ppResource: *mut *mut ID3D11Resource,
+ ) -> (),
+}}
+UNION!{union D3D11_BUFFER_SRV_u1 {
+ [u32; 1],
+ FirstElement FirstElement_mut: UINT,
+ ElementOffset ElementOffset_mut: UINT,
+}}
+UNION!{union D3D11_BUFFER_SRV_u2 {
+ [u32; 1],
+ NumElements NumElements_mut: UINT,
+ ElementWidth ElementWidth_mut: UINT,
+}}
+STRUCT!{struct D3D11_BUFFER_SRV {
+ u1: D3D11_BUFFER_SRV_u1,
+ u2: D3D11_BUFFER_SRV_u2,
+}}
+ENUM!{enum D3D11_BUFFEREX_SRV_FLAG {
+ D3D11_BUFFEREX_SRV_FLAG_RAW = 0x1,
+}}
+STRUCT!{struct D3D11_BUFFEREX_SRV {
+ FirstElement: UINT,
+ NumElements: UINT,
+ Flags: UINT,
+}}
+STRUCT!{struct D3D11_TEX1D_SRV {
+ MostDetailedMip: UINT,
+ MipLevels: UINT,
+}}
+STRUCT!{struct D3D11_TEX1D_ARRAY_SRV {
+ MostDetailedMip: UINT,
+ MipLevels: UINT,
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+STRUCT!{struct D3D11_TEX2D_SRV {
+ MostDetailedMip: UINT,
+ MipLevels: UINT,
+}}
+STRUCT!{struct D3D11_TEX2D_ARRAY_SRV {
+ MostDetailedMip: UINT,
+ MipLevels: UINT,
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+STRUCT!{struct D3D11_TEX3D_SRV {
+ MostDetailedMip: UINT,
+ MipLevels: UINT,
+}}
+STRUCT!{struct D3D11_TEXCUBE_SRV {
+ MostDetailedMip: UINT,
+ MipLevels: UINT,
+}}
+STRUCT!{struct D3D11_TEXCUBE_ARRAY_SRV {
+ MostDetailedMip: UINT,
+ MipLevels: UINT,
+ First2DArrayFace: UINT,
+ NumCubes: UINT,
+}}
+STRUCT!{struct D3D11_TEX2DMS_SRV {
+ UnusedField_NothingToDefine: UINT,
+}}
+STRUCT!{struct D3D11_TEX2DMS_ARRAY_SRV {
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+UNION!{union D3D11_SHADER_RESOURCE_VIEW_DESC_u {
+ [u32; 4],
+ Buffer Buffer_mut: D3D11_BUFFER_SRV,
+ Texture1D Texture1D_mut: D3D11_TEX1D_SRV,
+ Texture1DArray Texture1DArray_mut: D3D11_TEX1D_ARRAY_SRV,
+ Texture2D Texture2D_mut: D3D11_TEX2D_SRV,
+ Texture2DArray Texture2DArray_mut: D3D11_TEX2D_ARRAY_SRV,
+ Texture2DMS Texture2DMS_mut: D3D11_TEX2DMS_SRV,
+ Texture2DMSArray Texture2DMSArray_mut: D3D11_TEX2DMS_ARRAY_SRV,
+ Texture3D Texture3D_mut: D3D11_TEX3D_SRV,
+ TextureCube TextureCube_mut: D3D11_TEXCUBE_SRV,
+ TextureCubeArray TextureCubeArray_mut: D3D11_TEXCUBE_ARRAY_SRV,
+ BufferEx BufferEx_mut: D3D11_BUFFEREX_SRV,
+}}
+STRUCT!{struct D3D11_SHADER_RESOURCE_VIEW_DESC {
+ Format: DXGI_FORMAT,
+ ViewDimension: D3D11_SRV_DIMENSION,
+ u: D3D11_SHADER_RESOURCE_VIEW_DESC_u,
+}}
+RIDL!{#[uuid(0xb0e06fe0, 0x8192, 0x4e1a, 0xb1, 0xca, 0x36, 0xd7, 0x41, 0x47, 0x10, 0xb2)]
+interface ID3D11ShaderResourceView(ID3D11ShaderResourceViewVtbl): ID3D11View(ID3D11ViewVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_SHADER_RESOURCE_VIEW_DESC,
+ ) -> (),
+}}
+UNION!{union D3D11_BUFFER_RTV_u1 {
+ [u32; 1],
+ FirstElement FirstElement_mut: UINT,
+ ElementOffset ElementOffset_mut: UINT,
+}}
+UNION!{union D3D11_BUFFER_RTV_u2 {
+ [u32; 1],
+ NumElements NumElements_mut: UINT,
+ ElementWidth ElementWidth_mut: UINT,
+}}
+STRUCT!{struct D3D11_BUFFER_RTV {
+ u1: D3D11_BUFFER_RTV_u1,
+ u2: D3D11_BUFFER_RTV_u2,
+}}
+STRUCT!{struct D3D11_TEX1D_RTV {
+ MipSlice: UINT,
+}}
+STRUCT!{struct D3D11_TEX1D_ARRAY_RTV {
+ MipSlice: UINT,
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+STRUCT!{struct D3D11_TEX2D_RTV {
+ MipSlice: UINT,
+}}
+STRUCT!{struct D3D11_TEX2DMS_RTV {
+ UnusedField_NothingToDefine: UINT,
+}}
+STRUCT!{struct D3D11_TEX2D_ARRAY_RTV {
+ MipSlice: UINT,
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+STRUCT!{struct D3D11_TEX2DMS_ARRAY_RTV {
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+STRUCT!{struct D3D11_TEX3D_RTV {
+ MipSlice: UINT,
+ FirstWSlice: UINT,
+ WSize: UINT,
+}}
+UNION!{union D3D11_RENDER_TARGET_VIEW_DESC_u {
+ [u32; 3],
+ Buffer Buffer_mut: D3D11_BUFFER_RTV,
+ Texture1D Texture1D_mut: D3D11_TEX1D_RTV,
+ Texture1DArray Texture1DArray_mut: D3D11_TEX1D_ARRAY_RTV,
+ Texture2D Texture2D_mut: D3D11_TEX2D_RTV,
+ Texture2DArray Texture2DArray_mut: D3D11_TEX2D_ARRAY_RTV,
+ Texture2DMS Texture2DMS_mut: D3D11_TEX2DMS_RTV,
+ Texture2DMSArray Texture2DMSArray_mut: D3D11_TEX2DMS_ARRAY_RTV,
+ Texture3D Texture3D_mut: D3D11_TEX3D_RTV,
+}}
+STRUCT!{struct D3D11_RENDER_TARGET_VIEW_DESC {
+ Format: DXGI_FORMAT,
+ ViewDimension: D3D11_RTV_DIMENSION,
+ u: D3D11_RENDER_TARGET_VIEW_DESC_u,
+}}
+RIDL!{#[uuid(0xdfdba067, 0x0b8d, 0x4865, 0x87, 0x5b, 0xd7, 0xb4, 0x51, 0x6c, 0xc1, 0x64)]
+interface ID3D11RenderTargetView(ID3D11RenderTargetViewVtbl): ID3D11View(ID3D11ViewVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_RENDER_TARGET_VIEW_DESC,
+ ) -> (),
+}}
+STRUCT!{struct D3D11_TEX1D_DSV {
+ MipSlice: UINT,
+}}
+STRUCT!{struct D3D11_TEX1D_ARRAY_DSV {
+ MipSlice: UINT,
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+STRUCT!{struct D3D11_TEX2D_DSV {
+ MipSlice: UINT,
+}}
+STRUCT!{struct D3D11_TEX2D_ARRAY_DSV {
+ MipSlice: UINT,
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+STRUCT!{struct D3D11_TEX2DMS_DSV {
+ UnusedField_NothingToDefine: UINT,
+}}
+STRUCT!{struct D3D11_TEX2DMS_ARRAY_DSV {
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+ENUM!{enum D3D11_DSV_FLAG {
+ D3D11_DSV_READ_ONLY_DEPTH = 0x1,
+ D3D11_DSV_READ_ONLY_STENCIL = 0x2,
+}}
+UNION!{union D3D11_DEPTH_STENCIL_VIEW_DESC_u {
+ [u32; 3],
+ Texture1D Texture1D_mut: D3D11_TEX1D_DSV,
+ Texture1DArray Texture1DArray_mut: D3D11_TEX1D_ARRAY_DSV,
+ Texture2D Texture2D_mut: D3D11_TEX2D_DSV,
+ Texture2DArray Texture2DArray_mut: D3D11_TEX2D_ARRAY_DSV,
+ Texture2DMS Texture2DMS_mut: D3D11_TEX2DMS_DSV,
+ Texture2DMSArray Texture2DMSArray_mut: D3D11_TEX2DMS_ARRAY_DSV,
+}}
+STRUCT!{struct D3D11_DEPTH_STENCIL_VIEW_DESC {
+ Format: DXGI_FORMAT,
+ ViewDimension: D3D11_DSV_DIMENSION,
+ Flags: UINT,
+ u: D3D11_DEPTH_STENCIL_VIEW_DESC_u,
+}}
+RIDL!{#[uuid(0x9fdac92a, 0x1876, 0x48c3, 0xaf, 0xad, 0x25, 0xb9, 0x4f, 0x84, 0xa9, 0xb6)]
+interface ID3D11DepthStencilView(ID3D11DepthStencilViewVtbl): ID3D11View(ID3D11ViewVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_DEPTH_STENCIL_VIEW_DESC,
+ ) -> (),
+}}
+ENUM!{enum D3D11_BUFFER_UAV_FLAG {
+ D3D11_BUFFER_UAV_FLAG_RAW = 0x1,
+ D3D11_BUFFER_UAV_FLAG_APPEND = 0x2,
+ D3D11_BUFFER_UAV_FLAG_COUNTER = 0x4,
+}}
+STRUCT!{struct D3D11_BUFFER_UAV {
+ FirstElement: UINT,
+ NumElements: UINT,
+ Flags: UINT,
+}}
+STRUCT!{struct D3D11_TEX1D_UAV {
+ MipSlice: UINT,
+}}
+STRUCT!{struct D3D11_TEX1D_ARRAY_UAV {
+ MipSlice: UINT,
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+STRUCT!{struct D3D11_TEX2D_UAV {
+ MipSlice: UINT,
+}}
+STRUCT!{struct D3D11_TEX2D_ARRAY_UAV {
+ MipSlice: UINT,
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+STRUCT!{struct D3D11_TEX3D_UAV {
+ MipSlice: UINT,
+ FirstWSlice: UINT,
+ WSize: UINT,
+}}
+UNION!{union D3D11_UNORDERED_ACCESS_VIEW_DESC_u {
+ [u32; 3],
+ Buffer Buffer_mut: D3D11_BUFFER_UAV,
+ Texture1D Texture1D_mut: D3D11_TEX1D_UAV,
+ Texture1DArray Texture1DArray_mut: D3D11_TEX1D_ARRAY_UAV,
+ Texture2D Texture2D_mut: D3D11_TEX2D_UAV,
+ Texture2DArray Texture2DArray_mut: D3D11_TEX2D_ARRAY_UAV,
+ Texture3D Texture3D_mut: D3D11_TEX3D_UAV,
+}}
+STRUCT!{struct D3D11_UNORDERED_ACCESS_VIEW_DESC {
+ Format: DXGI_FORMAT,
+ ViewDimension: D3D11_UAV_DIMENSION,
+ u: D3D11_UNORDERED_ACCESS_VIEW_DESC_u,
+}}
+RIDL!{#[uuid(0x28acf509, 0x7f5c, 0x48f6, 0x86, 0x11, 0xf3, 0x16, 0x01, 0x0a, 0x63, 0x80)]
+interface ID3D11UnorderedAccessView(ID3D11UnorderedAccessViewVtbl): ID3D11View(ID3D11ViewVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_UNORDERED_ACCESS_VIEW_DESC,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x3b301d64, 0xd678, 0x4289, 0x88, 0x97, 0x22, 0xf8, 0x92, 0x8b, 0x72, 0xf3)]
+interface ID3D11VertexShader(ID3D11VertexShaderVtbl):
+ ID3D11DeviceChild(ID3D11DeviceChildVtbl) {}}
+RIDL!{#[uuid(0x8e5c6061, 0x628a, 0x4c8e, 0x82, 0x64, 0xbb, 0xe4, 0x5c, 0xb3, 0xd5, 0xdd)]
+interface ID3D11HullShader(ID3D11HullShaderVtbl):
+ ID3D11DeviceChild(ID3D11DeviceChildVtbl) {}}
+RIDL!{#[uuid(0xf582c508, 0x0f36, 0x490c, 0x99, 0x77, 0x31, 0xee, 0xce, 0x26, 0x8c, 0xfa)]
+interface ID3D11DomainShader(ID3D11DomainShaderVtbl):
+ ID3D11DeviceChild(ID3D11DeviceChildVtbl) {}}
+RIDL!{#[uuid(0x38325b96, 0xeffb, 0x4022, 0xba, 0x02, 0x2e, 0x79, 0x5b, 0x70, 0x27, 0x5c)]
+interface ID3D11GeometryShader(ID3D11GeometryShaderVtbl):
+ ID3D11DeviceChild(ID3D11DeviceChildVtbl) {}}
+RIDL!{#[uuid(0xea82e40d, 0x51dc, 0x4f33, 0x93, 0xd4, 0xdb, 0x7c, 0x91, 0x25, 0xae, 0x8c)]
+interface ID3D11PixelShader(ID3D11PixelShaderVtbl):
+ ID3D11DeviceChild(ID3D11DeviceChildVtbl) {}}
+RIDL!{#[uuid(0x4f5b196e, 0xc2bd, 0x495e, 0xbd, 0x01, 0x1f, 0xde, 0xd3, 0x8e, 0x49, 0x69)]
+interface ID3D11ComputeShader(ID3D11ComputeShaderVtbl):
+ ID3D11DeviceChild(ID3D11DeviceChildVtbl) {}}
+RIDL!{#[uuid(0xe4819ddc, 0x4cf0, 0x4025, 0xbd, 0x26, 0x5d, 0xe8, 0x2a, 0x3e, 0x07, 0xb7)]
+interface ID3D11InputLayout(ID3D11InputLayoutVtbl):
+ ID3D11DeviceChild(ID3D11DeviceChildVtbl) {}}
+ENUM!{enum D3D11_FILTER {
+ D3D11_FILTER_MIN_MAG_MIP_POINT = 0,
+ D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x1,
+ D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x4,
+ D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x5,
+ D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10,
+ D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11,
+ D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14,
+ D3D11_FILTER_MIN_MAG_MIP_LINEAR = 0x15,
+ D3D11_FILTER_ANISOTROPIC = 0x55,
+ D3D11_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x80,
+ D3D11_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81,
+ D3D11_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84,
+ D3D11_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85,
+ D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90,
+ D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,
+ D3D11_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94,
+ D3D11_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x95,
+ D3D11_FILTER_COMPARISON_ANISOTROPIC = 0xd5,
+ D3D11_FILTER_MINIMUM_MIN_MAG_MIP_POINT = 0x100,
+ D3D11_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x101,
+ D3D11_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x104,
+ D3D11_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x105,
+ D3D11_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x110,
+ D3D11_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x111,
+ D3D11_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x114,
+ D3D11_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR = 0x115,
+ D3D11_FILTER_MINIMUM_ANISOTROPIC = 0x155,
+ D3D11_FILTER_MAXIMUM_MIN_MAG_MIP_POINT = 0x180,
+ D3D11_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x181,
+ D3D11_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x184,
+ D3D11_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x185,
+ D3D11_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x190,
+ D3D11_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x191,
+ D3D11_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x194,
+ D3D11_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR = 0x195,
+ D3D11_FILTER_MAXIMUM_ANISOTROPIC = 0x1d5,
+}}
+ENUM!{enum D3D11_FILTER_TYPE {
+ D3D11_FILTER_TYPE_POINT = 0,
+ D3D11_FILTER_TYPE_LINEAR = 1,
+}}
+ENUM!{enum D3D11_FILTER_REDUCTION_TYPE {
+ D3D11_FILTER_REDUCTION_TYPE_STANDARD = 0,
+ D3D11_FILTER_REDUCTION_TYPE_COMPARISON = 1,
+ D3D11_FILTER_REDUCTION_TYPE_MINIMUM = 2,
+ D3D11_FILTER_REDUCTION_TYPE_MAXIMUM = 3,
+}}
+pub const D3D11_FILTER_REDUCTION_TYPE_MASK: DWORD = 0x3;
+pub const D3D11_FILTER_REDUCTION_TYPE_SHIFT: DWORD = 7;
+pub const D3D11_FILTER_TYPE_MASK: DWORD = 0x3;
+pub const D3D11_MIN_FILTER_SHIFT: DWORD = 4;
+pub const D3D11_MAG_FILTER_SHIFT: DWORD = 2;
+pub const D3D11_MIP_FILTER_SHIFT: DWORD = 0;
+pub const D3D11_COMPARISON_FILTERING_BIT: DWORD = 0x80;
+pub const D3D11_ANISOTROPIC_FILTERING_BIT: DWORD = 0x40;
+ENUM!{enum D3D11_TEXTURE_ADDRESS_MODE {
+ D3D11_TEXTURE_ADDRESS_WRAP = 1,
+ D3D11_TEXTURE_ADDRESS_MIRROR = 2,
+ D3D11_TEXTURE_ADDRESS_CLAMP = 3,
+ D3D11_TEXTURE_ADDRESS_BORDER = 4,
+ D3D11_TEXTURE_ADDRESS_MIRROR_ONCE = 5,
+}}
+STRUCT!{struct D3D11_SAMPLER_DESC {
+ Filter: D3D11_FILTER,
+ AddressU: D3D11_TEXTURE_ADDRESS_MODE,
+ AddressV: D3D11_TEXTURE_ADDRESS_MODE,
+ AddressW: D3D11_TEXTURE_ADDRESS_MODE,
+ MipLODBias: FLOAT,
+ MaxAnisotropy: UINT,
+ ComparisonFunc: D3D11_COMPARISON_FUNC,
+ BorderColor: [FLOAT; 4],
+ MinLOD: FLOAT,
+ MaxLOD: FLOAT,
+}}
+RIDL!{#[uuid(0xda6fea51, 0x564c, 0x4487, 0x98, 0x10, 0xf0, 0xd0, 0xf9, 0xb4, 0xe3, 0xa5)]
+interface ID3D11SamplerState(ID3D11SamplerStateVtbl): ID3D11DeviceChild(ID3D11DeviceChildVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_SAMPLER_DESC,
+ ) -> (),
+}}
+ENUM!{enum D3D11_FORMAT_SUPPORT {
+ D3D11_FORMAT_SUPPORT_BUFFER = 0x1,
+ D3D11_FORMAT_SUPPORT_IA_VERTEX_BUFFER = 0x2,
+ D3D11_FORMAT_SUPPORT_IA_INDEX_BUFFER = 0x4,
+ D3D11_FORMAT_SUPPORT_SO_BUFFER = 0x8,
+ D3D11_FORMAT_SUPPORT_TEXTURE1D = 0x10,
+ D3D11_FORMAT_SUPPORT_TEXTURE2D = 0x20,
+ D3D11_FORMAT_SUPPORT_TEXTURE3D = 0x40,
+ D3D11_FORMAT_SUPPORT_TEXTURECUBE = 0x80,
+ D3D11_FORMAT_SUPPORT_SHADER_LOAD = 0x100,
+ D3D11_FORMAT_SUPPORT_SHADER_SAMPLE = 0x200,
+ D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON = 0x400,
+ D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT = 0x800,
+ D3D11_FORMAT_SUPPORT_MIP = 0x1000,
+ D3D11_FORMAT_SUPPORT_MIP_AUTOGEN = 0x2000,
+ D3D11_FORMAT_SUPPORT_RENDER_TARGET = 0x4000,
+ D3D11_FORMAT_SUPPORT_BLENDABLE = 0x8000,
+ D3D11_FORMAT_SUPPORT_DEPTH_STENCIL = 0x10000,
+ D3D11_FORMAT_SUPPORT_CPU_LOCKABLE = 0x20000,
+ D3D11_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE = 0x40000,
+ D3D11_FORMAT_SUPPORT_DISPLAY = 0x80000,
+ D3D11_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT = 0x100000,
+ D3D11_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET = 0x200000,
+ D3D11_FORMAT_SUPPORT_MULTISAMPLE_LOAD = 0x400000,
+ D3D11_FORMAT_SUPPORT_SHADER_GATHER = 0x800000,
+ D3D11_FORMAT_SUPPORT_BACK_BUFFER_CAST = 0x1000000,
+ D3D11_FORMAT_SUPPORT_TYPED_UNORDERED_ACCESS_VIEW = 0x2000000,
+ D3D11_FORMAT_SUPPORT_SHADER_GATHER_COMPARISON = 0x4000000,
+ D3D11_FORMAT_SUPPORT_DECODER_OUTPUT = 0x8000000,
+ D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_OUTPUT = 0x10000000,
+ D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_INPUT = 0x20000000,
+ D3D11_FORMAT_SUPPORT_VIDEO_ENCODER = 0x40000000,
+}}
+ENUM!{enum D3D11_FORMAT_SUPPORT2 {
+ D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_ADD = 0x1,
+ D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS = 0x2,
+ D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE = 0x4,
+ D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE = 0x8,
+ D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX = 0x10,
+ D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX = 0x20,
+ D3D11_FORMAT_SUPPORT2_UAV_TYPED_LOAD = 0x40,
+ D3D11_FORMAT_SUPPORT2_UAV_TYPED_STORE = 0x80,
+ D3D11_FORMAT_SUPPORT2_OUTPUT_MERGER_LOGIC_OP = 0x100,
+ D3D11_FORMAT_SUPPORT2_TILED = 0x200,
+ D3D11_FORMAT_SUPPORT2_SHAREABLE = 0x400,
+ D3D11_FORMAT_SUPPORT2_MULTIPLANE_OVERLAY = 0x4000,
+}}
+RIDL!{#[uuid(0x4b35d0cd, 0x1e15, 0x4258, 0x9c, 0x98, 0x1b, 0x13, 0x33, 0xf6, 0xdd, 0x3b)]
+interface ID3D11Asynchronous(ID3D11AsynchronousVtbl): ID3D11DeviceChild(ID3D11DeviceChildVtbl) {
+ fn GetDataSize() -> UINT,
+}}
+ENUM!{enum D3D11_ASYNC_GETDATA_FLAG {
+ D3D11_ASYNC_GETDATA_DONOTFLUSH = 0x1,
+}}
+ENUM!{enum D3D11_QUERY {
+ D3D11_QUERY_EVENT = 0,
+ D3D11_QUERY_OCCLUSION = D3D11_QUERY_EVENT + 1u32,
+ D3D11_QUERY_TIMESTAMP = D3D11_QUERY_OCCLUSION + 1u32,
+ D3D11_QUERY_TIMESTAMP_DISJOINT = D3D11_QUERY_TIMESTAMP + 1u32,
+ D3D11_QUERY_PIPELINE_STATISTICS = D3D11_QUERY_TIMESTAMP_DISJOINT + 1u32,
+ D3D11_QUERY_OCCLUSION_PREDICATE = D3D11_QUERY_PIPELINE_STATISTICS + 1u32,
+ D3D11_QUERY_SO_STATISTICS = D3D11_QUERY_OCCLUSION_PREDICATE + 1u32,
+ D3D11_QUERY_SO_OVERFLOW_PREDICATE = D3D11_QUERY_SO_STATISTICS + 1u32,
+ D3D11_QUERY_SO_STATISTICS_STREAM0 = D3D11_QUERY_SO_OVERFLOW_PREDICATE + 1u32,
+ D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM0 = D3D11_QUERY_SO_STATISTICS_STREAM0 + 1u32,
+ D3D11_QUERY_SO_STATISTICS_STREAM1 = D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM0 + 1u32,
+ D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM1 = D3D11_QUERY_SO_STATISTICS_STREAM1 + 1u32,
+ D3D11_QUERY_SO_STATISTICS_STREAM2 = D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM1 + 1u32,
+ D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM2 = D3D11_QUERY_SO_STATISTICS_STREAM2 + 1u32,
+ D3D11_QUERY_SO_STATISTICS_STREAM3 = D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM2 + 1u32,
+ D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM3 = D3D11_QUERY_SO_STATISTICS_STREAM3 + 1u32,
+}}
+ENUM!{enum D3D11_QUERY_MISC_FLAG {
+ D3D11_QUERY_MISC_PREDICATEHINT = 0x1,
+}}
+STRUCT!{struct D3D11_QUERY_DESC {
+ Query: D3D11_QUERY,
+ MiscFlags: UINT,
+}}
+RIDL!{#[uuid(0xd6c00747, 0x87b7, 0x425e, 0xb8, 0x4d, 0x44, 0xd1, 0x08, 0x56, 0x0a, 0xfd)]
+interface ID3D11Query(ID3D11QueryVtbl): ID3D11Asynchronous(ID3D11AsynchronousVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_QUERY_DESC,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x9eb576dd, 0x9f77, 0x4d86, 0x81, 0xaa, 0x8b, 0xab, 0x5f, 0xe4, 0x90, 0xe2)]
+interface ID3D11Predicate(ID3D11PredicateVtbl): ID3D11Query(ID3D11QueryVtbl) {}}
+STRUCT!{struct D3D11_QUERY_DATA_TIMESTAMP_DISJOINT {
+ Frequency: UINT64,
+ Disjoint: BOOL,
+}}
+STRUCT!{struct D3D11_QUERY_DATA_PIPELINE_STATISTICS {
+ IAVertices: UINT64,
+ IAPrimitives: UINT64,
+ VSInvocations: UINT64,
+ GSInvocations: UINT64,
+ GSPrimitives: UINT64,
+ CInvocations: UINT64,
+ CPrimitives: UINT64,
+ PSInvocations: UINT64,
+ HSInvocations: UINT64,
+ DSInvocations: UINT64,
+ CSInvocations: UINT64,
+}}
+STRUCT!{struct D3D11_QUERY_DATA_SO_STATISTICS {
+ NumPrimitivesWritten: UINT64,
+ PrimitivesStorageNeeded: UINT64,
+}}
+ENUM!{enum D3D11_COUNTER {
+ D3D11_COUNTER_DEVICE_DEPENDENT_0 = 0x40000000,
+}}
+ENUM!{enum D3D11_COUNTER_TYPE {
+ D3D11_COUNTER_TYPE_FLOAT32 = 0,
+ D3D11_COUNTER_TYPE_UINT16 = D3D11_COUNTER_TYPE_FLOAT32 + 1u32,
+ D3D11_COUNTER_TYPE_UINT32 = D3D11_COUNTER_TYPE_UINT16 + 1u32,
+ D3D11_COUNTER_TYPE_UINT64 = D3D11_COUNTER_TYPE_UINT32 + 1u32,
+}}
+STRUCT!{struct D3D11_COUNTER_DESC {
+ Counter: D3D11_COUNTER,
+ MiscFlags: UINT,
+}}
+STRUCT!{struct D3D11_COUNTER_INFO {
+ LastDeviceDependentCounter: D3D11_COUNTER,
+ NumSimultaneousCounters: UINT,
+ NumDetectableParallelUnits: UINT8,
+}}
+RIDL!{#[uuid(0x6e8c49fb, 0xa371, 0x4770, 0xb4, 0x40, 0x29, 0x08, 0x60, 0x22, 0xb7, 0x41)]
+interface ID3D11Counter(ID3D11CounterVtbl): ID3D11Asynchronous(ID3D11AsynchronousVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_COUNTER_DESC,
+ ) -> (),
+}}
+ENUM!{enum D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS {
+ D3D11_STANDARD_MULTISAMPLE_PATTERN = 0xffffffff,
+ D3D11_CENTER_MULTISAMPLE_PATTERN = 0xfffffffe,
+}}
+ENUM!{enum D3D11_DEVICE_CONTEXT_TYPE {
+ D3D11_DEVICE_CONTEXT_IMMEDIATE = 0,
+ D3D11_DEVICE_CONTEXT_DEFERRED = D3D11_DEVICE_CONTEXT_IMMEDIATE + 1u32,
+}}
+STRUCT!{struct D3D11_CLASS_INSTANCE_DESC {
+ InstanceId: UINT,
+ InstanceIndex: UINT,
+ TypeId: UINT,
+ ConstantBuffer: UINT,
+ BaseConstantBufferOffset: UINT,
+ BaseTexture: UINT,
+ BaseSampler: UINT,
+ Created: BOOL,
+}}
+RIDL!{#[uuid(0xa6cd7faa, 0xb0b7, 0x4a2f, 0x94, 0x36, 0x86, 0x62, 0xa6, 0x57, 0x97, 0xcb)]
+interface ID3D11ClassInstance(ID3D11ClassInstanceVtbl): ID3D11DeviceChild(ID3D11DeviceChildVtbl) {
+ fn GetClassLinkage(
+ ppLinkage: *mut *mut ID3D11ClassLinkage,
+ ) -> (),
+ fn GetDesc(
+ pDesc: *mut D3D11_CLASS_INSTANCE_DESC,
+ ) -> (),
+ fn GetInstanceName(
+ pInstanceName: LPSTR,
+ pBufferLength: *mut SIZE_T,
+ ) -> (),
+ fn GetTypeName(
+ pTypeName: LPSTR,
+ pBufferLength: *mut SIZE_T,
+ ) -> (),
+}}
+RIDL!{#[uuid(0xddf57cba, 0x9543, 0x46e4, 0xa1, 0x2b, 0xf2, 0x07, 0xa0, 0xfe, 0x7f, 0xed)]
+interface ID3D11ClassLinkage(ID3D11ClassLinkageVtbl): ID3D11DeviceChild(ID3D11DeviceChildVtbl) {
+ fn GetClassInstance(
+ GetClassInstance: LPCSTR,
+ InstanceIndex: UINT,
+ ppInstance: *mut *mut ID3D11ClassInstance,
+ ) -> HRESULT,
+ fn CreateClassInstance(
+ pClassTypeName: LPCSTR,
+ ConstantBufferOffset: UINT,
+ ConstantVectorOffset: UINT,
+ TextureOffset: UINT,
+ SamplerOffset: UINT,
+ ppInstance: *mut *mut ID3D11ClassInstance,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa24bc4d1, 0x769e, 0x43f7, 0x80, 0x13, 0x98, 0xff, 0x56, 0x6c, 0x18, 0xe2)]
+interface ID3D11CommandList(ID3D11CommandListVtbl): ID3D11DeviceChild(ID3D11DeviceChildVtbl) {
+ fn GetContextFlags() -> UINT,
+}}
+ENUM!{enum D3D11_FEATURE {
+ D3D11_FEATURE_THREADING = 0,
+ D3D11_FEATURE_DOUBLES = D3D11_FEATURE_THREADING + 1u32,
+ D3D11_FEATURE_FORMAT_SUPPORT = D3D11_FEATURE_DOUBLES + 1u32,
+ D3D11_FEATURE_FORMAT_SUPPORT2 = D3D11_FEATURE_FORMAT_SUPPORT + 1u32,
+ D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS = D3D11_FEATURE_FORMAT_SUPPORT2 + 1u32,
+ D3D11_FEATURE_D3D11_OPTIONS = D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS + 1u32,
+ D3D11_FEATURE_ARCHITECTURE_INFO = D3D11_FEATURE_D3D11_OPTIONS + 1u32,
+ D3D11_FEATURE_D3D9_OPTIONS = D3D11_FEATURE_ARCHITECTURE_INFO + 1u32,
+ D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT = D3D11_FEATURE_D3D9_OPTIONS + 1u32,
+ D3D11_FEATURE_D3D9_SHADOW_SUPPORT = D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT + 1u32,
+ D3D11_FEATURE_D3D11_OPTIONS1 = D3D11_FEATURE_D3D9_SHADOW_SUPPORT + 1u32,
+ D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT = D3D11_FEATURE_D3D11_OPTIONS1 + 1u32,
+ D3D11_FEATURE_MARKER_SUPPORT = D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT + 1u32,
+ D3D11_FEATURE_D3D9_OPTIONS1 = D3D11_FEATURE_MARKER_SUPPORT + 1u32,
+ D3D11_FEATURE_D3D11_OPTIONS2 = D3D11_FEATURE_D3D9_OPTIONS1 + 1u32,
+ D3D11_FEATURE_D3D11_OPTIONS3 = D3D11_FEATURE_D3D11_OPTIONS2 + 1u32,
+ D3D11_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT = D3D11_FEATURE_D3D11_OPTIONS3 + 1u32,
+}}
+STRUCT!{struct D3D11_FEATURE_DATA_THREADING {
+ DriverConcurrentCreates: BOOL,
+ DriverCommandLists: BOOL,
+}}
+STRUCT!{struct D3D11_FEATURE_DATA_DOUBLES {
+ DoublePrecisionFloatShaderOps: BOOL,
+}}
+STRUCT!{struct D3D11_FEATURE_DATA_FORMAT_SUPPORT {
+ InFormat: DXGI_FORMAT,
+ OutFormatSupport: UINT,
+}}
+STRUCT!{struct D3D11_FEATURE_DATA_FORMAT_SUPPORT2 {
+ InFormat: DXGI_FORMAT,
+ OutFormatSupport2: UINT,
+}}
+STRUCT!{struct D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS {
+ ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x: BOOL,
+}}
+STRUCT!{struct D3D11_FEATURE_DATA_D3D11_OPTIONS {
+ OutputMergerLogicOp: BOOL,
+ UAVOnlyRenderingForcedSampleCount: BOOL,
+ DiscardAPIsSeenByDriver: BOOL,
+ FlagsForUpdateAndCopySeenByDriver: BOOL,
+ ClearView: BOOL,
+ CopyWithOverlap: BOOL,
+ ConstantBufferPartialUpdate: BOOL,
+ ConstantBufferOffsetting: BOOL,
+ MapNoOverwriteOnDynamicConstantBuffer: BOOL,
+ MapNoOverwriteOnDynamicBufferSRV: BOOL,
+ MultisampleRTVWithForcedSampleCountOne: BOOL,
+ SAD4ShaderInstructions: BOOL,
+ ExtendedDoublesShaderInstructions: BOOL,
+ ExtendedResourceSharing: BOOL,
+}}
+STRUCT!{struct D3D11_FEATURE_DATA_ARCHITECTURE_INFO {
+ TileBasedDeferredRenderer: BOOL,
+}}
+STRUCT!{struct D3D11_FEATURE_DATA_D3D9_OPTIONS {
+ FullNonPow2TextureSupport: BOOL,
+}}
+STRUCT!{struct D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT {
+ SupportsDepthAsTextureWithLessEqualComparisonFilter: BOOL,
+}}
+ENUM!{enum D3D11_SHADER_MIN_PRECISION_SUPPORT {
+ D3D11_SHADER_MIN_PRECISION_10_BIT = 0x1,
+ D3D11_SHADER_MIN_PRECISION_16_BIT = 0x2,
+}}
+STRUCT!{struct D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT {
+ PixelShaderMinPrecision: UINT,
+ AllOtherShaderStagesMinPrecision: UINT,
+}}
+ENUM!{enum D3D11_TILED_RESOURCES_TIER {
+ D3D11_TILED_RESOURCES_NOT_SUPPORTED = 0,
+ D3D11_TILED_RESOURCES_TIER_1 = 1,
+ D3D11_TILED_RESOURCES_TIER_2 = 2,
+ D3D11_TILED_RESOURCES_TIER_3 = 3,
+}}
+STRUCT!{struct D3D11_FEATURE_DATA_D3D11_OPTIONS1 {
+ TiledResourcesTier: D3D11_TILED_RESOURCES_TIER,
+ MinMaxFiltering: BOOL,
+ ClearViewAlsoSupportsDepthOnlyFormats: BOOL,
+ MapOnDefaultBuffers: BOOL,
+}}
+STRUCT!{struct D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT {
+ SimpleInstancingSupported: BOOL,
+}}
+STRUCT!{struct D3D11_FEATURE_DATA_MARKER_SUPPORT {
+ Profile: BOOL,
+}}
+STRUCT!{struct D3D11_FEATURE_DATA_D3D9_OPTIONS1 {
+ FullNonPow2TextureSupported: BOOL,
+ DepthAsTextureWithLessEqualComparisonFilterSupported: BOOL,
+ SimpleInstancingSupported: BOOL,
+ TextureCubeFaceRenderTargetWithNonCubeDepthStencilSupported: BOOL,
+}}
+ENUM!{enum D3D11_CONSERVATIVE_RASTERIZATION_TIER {
+ D3D11_CONSERVATIVE_RASTERIZATION_NOT_SUPPORTED = 0,
+ D3D11_CONSERVATIVE_RASTERIZATION_TIER_1 = 1,
+ D3D11_CONSERVATIVE_RASTERIZATION_TIER_2 = 2,
+ D3D11_CONSERVATIVE_RASTERIZATION_TIER_3 = 3,
+}}
+STRUCT!{struct D3D11_FEATURE_DATA_D3D11_OPTIONS2 {
+ PSSpecifiedStencilRefSupported: BOOL,
+ TypedUAVLoadAdditionalFormats: BOOL,
+ ROVsSupported: BOOL,
+ ConservativeRasterizationTier: D3D11_CONSERVATIVE_RASTERIZATION_TIER,
+ TiledResourcesTier: D3D11_TILED_RESOURCES_TIER,
+ MapOnDefaultTextures: BOOL,
+ StandardSwizzle: BOOL,
+ UnifiedMemoryArchitecture: BOOL,
+}}
+STRUCT!{struct D3D11_FEATURE_DATA_D3D11_OPTIONS3 {
+ VPAndRTArrayIndexFromAnyShaderFeedingRasterizer: BOOL,
+}}
+STRUCT!{struct D3D11_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT {
+ MaxGPUVirtualAddressBitsPerResource: UINT,
+ MaxGPUVirtualAddressBitsPerProcess: UINT,
+}}
+RIDL!{#[uuid(0xc0bfa96c, 0xe089, 0x44fb, 0x8e, 0xaf, 0x26, 0xf8, 0x79, 0x61, 0x90, 0xda)]
+interface ID3D11DeviceContext(ID3D11DeviceContextVtbl): ID3D11DeviceChild(ID3D11DeviceChildVtbl) {
+ fn VSSetConstantBuffers(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *const *mut ID3D11Buffer,
+ ) -> (),
+ fn PSSetShaderResources(
+ StartSlot: UINT,
+ NumViews: UINT,
+ ppShaderResourceViews: *const *mut ID3D11ShaderResourceView,
+ ) -> (),
+ fn PSSetShader(
+ pPixelShader: *mut ID3D11PixelShader,
+ ppClassInstances: *const *mut ID3D11ClassInstance,
+ NumClassInstances: UINT,
+ ) -> (),
+ fn PSSetSamplers(
+ StartSlot: UINT,
+ NumSamplers: UINT,
+ ppSamplers: *const *mut ID3D11SamplerState,
+ ) -> (),
+ fn VSSetShader(
+ pVertexShader: *mut ID3D11VertexShader,
+ ppClassInstances: *const *mut ID3D11ClassInstance,
+ NumClassInstances: UINT,
+ ) -> (),
+ fn DrawIndexed(
+ IndexCount: UINT,
+ StartIndexLocation: UINT,
+ BaseVertexLocation: INT,
+ ) -> (),
+ fn Draw(
+ VertexCount: UINT,
+ StartVertexLocation: UINT,
+ ) -> (),
+ fn Map(
+ pResource: *mut ID3D11Resource,
+ Subresource: UINT,
+ MapType: D3D11_MAP,
+ MapFlags: UINT,
+ pMappedResource: *mut D3D11_MAPPED_SUBRESOURCE,
+ ) -> HRESULT,
+ fn Unmap(
+ pResource: *mut ID3D11Resource,
+ Subresource: UINT,
+ ) -> (),
+ fn PSSetConstantBuffers(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *const *mut ID3D11Buffer,
+ ) -> (),
+ fn IASetInputLayout(
+ pInputLayout: *mut ID3D11InputLayout,
+ ) -> (),
+ fn IASetVertexBuffers(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppVertexBuffers: *const *mut ID3D11Buffer,
+ pStrides: *const UINT,
+ pOffsets: *const UINT,
+ ) -> (),
+ fn IASetIndexBuffer(
+ pIndexBuffer: *mut ID3D11Buffer,
+ Format: DXGI_FORMAT,
+ Offset: UINT,
+ ) -> (),
+ fn DrawIndexedInstanced(
+ IndexCountPerInstance: UINT,
+ InstanceCount: UINT,
+ StartIndexLocation: UINT,
+ BaseVertexLocation: INT,
+ StartInstanceLocation: UINT,
+ ) -> (),
+ fn DrawInstanced(
+ VertexCountPerInstance: UINT,
+ InstanceCount: UINT,
+ StartVertexLocation: UINT,
+ StartInstanceLocation: UINT,
+ ) -> (),
+ fn GSSetConstantBuffers(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *const *mut ID3D11Buffer,
+ ) -> (),
+ fn GSSetShader(
+ pShader: *mut ID3D11GeometryShader,
+ ppClassInstances: *const *mut ID3D11ClassInstance,
+ NumClassInstances: UINT,
+ ) -> (),
+ fn IASetPrimitiveTopology(
+ Topology: D3D11_PRIMITIVE_TOPOLOGY,
+ ) -> (),
+ fn VSSetShaderResources(
+ StartSlot: UINT,
+ NumViews: UINT,
+ ppShaderResourceViews: *const *mut ID3D11ShaderResourceView,
+ ) -> (),
+ fn VSSetSamplers(
+ StartSlot: UINT,
+ NumSamplers: UINT,
+ ppSamplers: *const *mut ID3D11SamplerState,
+ ) -> (),
+ fn Begin(
+ pAsync: *mut ID3D11Asynchronous,
+ ) -> (),
+ fn End(
+ pAsync: *mut ID3D11Asynchronous,
+ ) -> (),
+ fn GetData(
+ pAsync: *mut ID3D11Asynchronous,
+ pData: *mut c_void,
+ DataSize: UINT,
+ GetDataFlags: UINT,
+ ) -> HRESULT,
+ fn SetPredication(
+ pPredicate: *mut ID3D11Predicate,
+ PredicateValue: BOOL,
+ ) -> (),
+ fn GSSetShaderResources(
+ StartSlot: UINT,
+ NumViews: UINT,
+ ppShaderResourceViews: *const *mut ID3D11ShaderResourceView,
+ ) -> (),
+ fn GSSetSamplers(
+ StartSlot: UINT,
+ NumSamplers: UINT,
+ ppSamplers: *const *mut ID3D11SamplerState,
+ ) -> (),
+ fn OMSetRenderTargets(
+ NumViews: UINT,
+ ppRenderTargetViews: *const *mut ID3D11RenderTargetView,
+ pDepthStencilView: *mut ID3D11DepthStencilView,
+ ) -> (),
+ fn OMSetRenderTargetsAndUnorderedAccessViews(
+ NumRTVs: UINT,
+ ppRenderTargetViews: *const *mut ID3D11RenderTargetView,
+ pDepthStencilView: *mut ID3D11DepthStencilView,
+ UAVStartSlot: UINT,
+ NumUAVs: UINT,
+ ppUnorderedAccessViews: *const *mut ID3D11UnorderedAccessView,
+ pUAVInitialCounts: *const UINT,
+ ) -> (),
+ fn OMSetBlendState(
+ pBlendState: *mut ID3D11BlendState,
+ BlendFactor: &[FLOAT; 4],
+ SampleMask: UINT,
+ ) -> (),
+ fn OMSetDepthStencilState(
+ pDepthStencilState: *mut ID3D11DepthStencilState,
+ StencilRef: UINT,
+ ) -> (),
+ fn SOSetTargets(
+ NumBuffers: UINT,
+ ppSOTargets: *const *mut ID3D11Buffer,
+ pOffsets: *const UINT,
+ ) -> (),
+ fn DrawAuto() -> (),
+ fn DrawIndexedInstancedIndirect(
+ pBufferForArgs: *mut ID3D11Buffer,
+ AlignedByteOffsetForArgs: UINT,
+ ) -> (),
+ fn DrawInstancedIndirect(
+ pBufferForArgs: *mut ID3D11Buffer,
+ AlignedByteOffsetForArgs: UINT,
+ ) -> (),
+ fn Dispatch(
+ ThreadGroupCountX: UINT,
+ ThreadGroupCountY: UINT,
+ ThreadGroupCountZ: UINT,
+ ) -> (),
+ fn DispatchIndirect(
+ pBufferForArgs: *mut ID3D11Buffer,
+ AlignedByteOffsetForArgs: UINT,
+ ) -> (),
+ fn RSSetState(
+ pRasterizerState: *mut ID3D11RasterizerState,
+ ) -> (),
+ fn RSSetViewports(
+ NumViewports: UINT,
+ pViewports: *const D3D11_VIEWPORT,
+ ) -> (),
+ fn RSSetScissorRects(
+ NumRects: UINT,
+ pRects: *const D3D11_RECT,
+ ) -> (),
+ fn CopySubresourceRegion(
+ pDstResource: *mut ID3D11Resource,
+ DstSubresource: UINT,
+ DstX: UINT,
+ DstY: UINT,
+ DstZ: UINT,
+ pSrcResource: *mut ID3D11Resource,
+ SrcSubresource: UINT,
+ pSrcBox: *const D3D11_BOX,
+ ) -> (),
+ fn CopyResource(
+ pDstResource: *mut ID3D11Resource,
+ pSrcResource: *mut ID3D11Resource,
+ ) -> (),
+ fn UpdateSubresource(
+ pDstResource: *mut ID3D11Resource,
+ DstSubresource: UINT,
+ pDstBox: *const D3D11_BOX,
+ pSrcData: *const c_void,
+ SrcRowPitch: UINT,
+ SrcDepthPitch: UINT,
+ ) -> (),
+ fn CopyStructureCount(
+ pDstBuffer: *mut ID3D11Buffer,
+ DstAlignedByteOffset: UINT,
+ pSrcView: *mut ID3D11UnorderedAccessView,
+ ) -> (),
+ fn ClearRenderTargetView(
+ pRenderTargetView: *mut ID3D11RenderTargetView,
+ ColorRGBA: &[FLOAT; 4],
+ ) -> (),
+ fn ClearUnorderedAccessViewUint(
+ pUnorderedAccessView: *mut ID3D11UnorderedAccessView,
+ Values: &[UINT; 4],
+ ) -> (),
+ fn ClearUnorderedAccessViewFloat(
+ pUnorderedAccessView: *mut ID3D11UnorderedAccessView,
+ Values: &[FLOAT; 4],
+ ) -> (),
+ fn ClearDepthStencilView(
+ pDepthStencilView: *mut ID3D11DepthStencilView,
+ ClearFlags: UINT,
+ Depth: FLOAT,
+ Stencil: UINT8,
+ ) -> (),
+ fn GenerateMips(
+ pShaderResourceView: *mut ID3D11ShaderResourceView,
+ ) -> (),
+ fn SetResourceMinLOD(
+ pResource: *mut ID3D11Resource,
+ MinLOD: FLOAT,
+ ) -> (),
+ fn GetResourceMinLOD(
+ pResource: *mut ID3D11Resource,
+ ) -> FLOAT,
+ fn ResolveSubresource(
+ pDstResource: *mut ID3D11Resource,
+ DstSubresource: UINT,
+ pSrcResource: *mut ID3D11Resource,
+ SrcSubresource: UINT,
+ Format: DXGI_FORMAT,
+ ) -> (),
+ fn ExecuteCommandList(
+ pCommandList: *mut ID3D11CommandList,
+ RestoreContextState: BOOL,
+ ) -> (),
+ fn HSSetShaderResources(
+ StartSlot: UINT,
+ NumViews: UINT,
+ ppShaderResourceViews: *const *mut ID3D11ShaderResourceView,
+ ) -> (),
+ fn HSSetShader(
+ pHullShader: *mut ID3D11HullShader,
+ ppClassInstances: *const *mut ID3D11ClassInstance,
+ NumClassInstances: UINT,
+ ) -> (),
+ fn HSSetSamplers(
+ StartSlot: UINT,
+ NumSamplers: UINT,
+ ppSamplers: *const *mut ID3D11SamplerState,
+ ) -> (),
+ fn HSSetConstantBuffers(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *const *mut ID3D11Buffer,
+ ) -> (),
+ fn DSSetShaderResources(
+ StartSlot: UINT,
+ NumViews: UINT,
+ ppShaderResourceViews: *const *mut ID3D11ShaderResourceView,
+ ) -> (),
+ fn DSSetShader(
+ pDomainShader: *mut ID3D11DomainShader,
+ ppClassInstances: *const *mut ID3D11ClassInstance,
+ NumClassInstances: UINT,
+ ) -> (),
+ fn DSSetSamplers(
+ StartSlot: UINT,
+ NumSamplers: UINT,
+ ppSamplers: *const *mut ID3D11SamplerState,
+ ) -> (),
+ fn DSSetConstantBuffers(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *const *mut ID3D11Buffer,
+ ) -> (),
+ fn CSSetShaderResources(
+ StartSlot: UINT,
+ NumViews: UINT,
+ ppShaderResourceViews: *const *mut ID3D11ShaderResourceView,
+ ) -> (),
+ fn CSSetUnorderedAccessViews(
+ StartSlot: UINT,
+ NumUAVs: UINT,
+ ppUnorderedAccessViews: *const *mut ID3D11UnorderedAccessView,
+ pUAVInitialCounts: *const UINT,
+ ) -> (),
+ fn CSSetShader(
+ pComputeShader: *mut ID3D11ComputeShader,
+ ppClassInstances: *const *mut ID3D11ClassInstance,
+ NumClassInstances: UINT,
+ ) -> (),
+ fn CSSetSamplers(
+ StartSlot: UINT,
+ NumSamplers: UINT,
+ ppSamplers: *const *mut ID3D11SamplerState,
+ ) -> (),
+ fn CSSetConstantBuffers(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *const *mut ID3D11Buffer,
+ ) -> (),
+ fn VSGetConstantBuffers(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *mut *mut ID3D11Buffer,
+ ) -> (),
+ fn PSGetShaderResources(
+ StartSlot: UINT,
+ NumViews: UINT,
+ ppShaderResourceViews: *mut *mut ID3D11ShaderResourceView,
+ ) -> (),
+ fn PSGetShader(
+ ppPixelShader: *mut *mut ID3D11PixelShader,
+ ppClassInstances: *mut *mut ID3D11ClassInstance,
+ pNumClassInstances: *mut UINT,
+ ) -> (),
+ fn PSGetSamplers(
+ StartSlot: UINT,
+ NumSamplers: UINT,
+ ppSamplers: *mut *mut ID3D11SamplerState,
+ ) -> (),
+ fn VSGetShader(
+ ppVertexShader: *mut *mut ID3D11VertexShader,
+ ppClassInstances: *mut *mut ID3D11ClassInstance,
+ pNumClassInstances: *mut UINT,
+ ) -> (),
+ fn PSGetConstantBuffers(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *mut *mut ID3D11Buffer,
+ ) -> (),
+ fn IAGetInputLayout(
+ ppInputLayout: *mut *mut ID3D11InputLayout,
+ ) -> (),
+ fn IAGetVertexBuffers(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppVertexBuffers: *mut *mut ID3D11Buffer,
+ pStrides: *mut UINT,
+ pOffsets: *mut UINT,
+ ) -> (),
+ fn IAGetIndexBuffer(
+ pIndexBuffer: *mut *mut ID3D11Buffer,
+ Format: *mut DXGI_FORMAT,
+ Offset: *mut UINT,
+ ) -> (),
+ fn GSGetConstantBuffers(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *mut *mut ID3D11Buffer,
+ ) -> (),
+ fn GSGetShader(
+ ppGeometryShader: *mut *mut ID3D11GeometryShader,
+ ppClassInstances: *mut *mut ID3D11ClassInstance,
+ pNumClassInstances: *mut UINT,
+ ) -> (),
+ fn IAGetPrimitiveTopology(
+ pTopology: *mut D3D11_PRIMITIVE_TOPOLOGY,
+ ) -> (),
+ fn VSGetShaderResources(
+ StartSlot: UINT,
+ NumViews: UINT,
+ ppShaderResourceViews: *mut *mut ID3D11ShaderResourceView,
+ ) -> (),
+ fn VSGetSamplers(
+ StartSlot: UINT,
+ NumSamplers: UINT,
+ ppSamplers: *mut *mut ID3D11SamplerState,
+ ) -> (),
+ fn GetPredication(
+ ppPredicate: *mut *mut ID3D11Predicate,
+ pPredicateValue: *mut BOOL,
+ ) -> (),
+ fn GSGetShaderResources(
+ StartSlot: UINT,
+ NumViews: UINT,
+ ppShaderResourceViews: *mut *mut ID3D11ShaderResourceView,
+ ) -> (),
+ fn GSGetSamplers(
+ StartSlot: UINT,
+ NumSamplers: UINT,
+ ppSamplers: *mut *mut ID3D11SamplerState,
+ ) -> (),
+ fn OMGetRenderTargets(
+ NumViews: UINT,
+ ppRenderTargetViews: *mut *mut ID3D11RenderTargetView,
+ ppDepthStencilView: *mut *mut ID3D11DepthStencilView,
+ ) -> (),
+ fn OMGetRenderTargetsAndUnorderedAccessViews(
+ NumRTVs: UINT,
+ ppRenderTargetViews: *mut *mut ID3D11RenderTargetView,
+ ppDepthStencilView: *mut *mut ID3D11DepthStencilView,
+ UAVStartSlot: UINT,
+ NumUAVs: UINT,
+ ppUnorderedAccessViews: *mut *mut ID3D11UnorderedAccessView,
+ ) -> (),
+ fn OMGetBlendState(
+ ppBlendState: *mut *mut ID3D11BlendState,
+ BlendFactor: &mut [FLOAT; 4],
+ pSampleMask: *mut UINT,
+ ) -> (),
+ fn OMGetDepthStencilState(
+ ppDepthStencilState: *mut *mut ID3D11DepthStencilState,
+ pStencilRef: *mut UINT,
+ ) -> (),
+ fn SOGetTargets(
+ NumBuffers: UINT,
+ ppSOTargets: *mut *mut ID3D11Buffer,
+ ) -> (),
+ fn RSGetState(
+ ppRasterizerState: *mut *mut ID3D11RasterizerState,
+ ) -> (),
+ fn RSGetViewports(
+ pNumViewports: *mut UINT,
+ pViewports: *mut D3D11_VIEWPORT,
+ ) -> (),
+ fn RSGetScissorRects(
+ pNumRects: *mut UINT,
+ pRects: *mut D3D11_RECT,
+ ) -> (),
+ fn HSGetShaderResources(
+ StartSlot: UINT,
+ NumViews: UINT,
+ ppShaderResourceViews: *mut *mut ID3D11ShaderResourceView,
+ ) -> (),
+ fn HSGetShader(
+ ppHullShader: *mut *mut ID3D11HullShader,
+ ppClassInstances: *mut *mut ID3D11ClassInstance,
+ pNumClassInstances: *mut UINT,
+ ) -> (),
+ fn HSGetSamplers(
+ StartSlot: UINT,
+ NumSamplers: UINT,
+ ppSamplers: *mut *mut ID3D11SamplerState,
+ ) -> (),
+ fn HSGetConstantBuffers(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *mut *mut ID3D11Buffer,
+ ) -> (),
+ fn DSGetShaderResources(
+ StartSlot: UINT,
+ NumViews: UINT,
+ ppShaderResourceViews: *mut *mut ID3D11ShaderResourceView,
+ ) -> (),
+ fn DSGetShader(
+ ppDomainShader: *mut *mut ID3D11DomainShader,
+ ppClassInstances: *mut *mut ID3D11ClassInstance,
+ pNumClassInstances: *mut UINT,
+ ) -> (),
+ fn DSGetSamplers(
+ StartSlot: UINT,
+ NumSamplers: UINT,
+ ppSamplers: *mut *mut ID3D11SamplerState,
+ ) -> (),
+ fn DSGetConstantBuffers(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *mut *mut ID3D11Buffer,
+ ) -> (),
+ fn CSGetShaderResources(
+ StartSlot: UINT,
+ NumViews: UINT,
+ ppShaderResourceViews: *mut *mut ID3D11ShaderResourceView,
+ ) -> (),
+ fn CSGetUnorderedAccessViews(
+ StartSlot: UINT,
+ NumUAVs: UINT,
+ ppUnorderedAccessViews: *mut *mut ID3D11UnorderedAccessView,
+ ) -> (),
+ fn CSGetShader(
+ ppComputeShader: *mut *mut ID3D11ComputeShader,
+ ppClassInstances: *mut *mut ID3D11ClassInstance,
+ pNumClassInstances: *mut UINT,
+ ) -> (),
+ fn CSGetSamplers(
+ StartSlot: UINT,
+ NumSamplers: UINT,
+ ppSamplers: *mut *mut ID3D11SamplerState,
+ ) -> (),
+ fn CSGetConstantBuffers(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *mut *mut ID3D11Buffer,
+ ) -> (),
+ fn ClearState() -> (),
+ fn Flush() -> (),
+ fn GetType() -> D3D11_DEVICE_CONTEXT_TYPE,
+ fn GetContextFlags() -> UINT,
+ fn FinishCommandList(
+ RestoreDeferredContextState: BOOL,
+ ppCommandList: *mut *mut ID3D11CommandList,
+ ) -> HRESULT,
+}}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_MPEG2_MOCOMP,
+ 0xe6a9f44b, 0x61b0, 0x4563, 0x9e, 0xa4, 0x63, 0xd2, 0xa3, 0xc6, 0xfe, 0x66}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_MPEG2_IDCT,
+ 0xbf22ad00, 0x03ea, 0x4690, 0x80, 0x77, 0x47, 0x33, 0x46, 0x20, 0x9b, 0x7e}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_MPEG2_VLD,
+ 0xee27417f, 0x5e28, 0x4e65, 0xbe, 0xea, 0x1d, 0x26, 0xb5, 0x08, 0xad, 0xc9}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_MPEG1_VLD,
+ 0x6f3ec719, 0x3735, 0x42cc, 0x80, 0x63, 0x65, 0xcc, 0x3c, 0xb3, 0x66, 0x16}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_MPEG2and1_VLD,
+ 0x86695f12, 0x340e, 0x4f04, 0x9f, 0xd3, 0x92, 0x53, 0xdd, 0x32, 0x74, 0x60}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_H264_MOCOMP_NOFGT,
+ 0x1b81be64, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_H264_MOCOMP_FGT,
+ 0x1b81be65, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_H264_IDCT_NOFGT,
+ 0x1b81be66, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_H264_IDCT_FGT,
+ 0x1b81be67, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_H264_VLD_NOFGT,
+ 0x1b81be68, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_H264_VLD_FGT,
+ 0x1b81be69, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_H264_VLD_WITHFMOASO_NOFGT,
+ 0xd5f04ff9, 0x3418, 0x45d8, 0x95, 0x61, 0x32, 0xa7, 0x6a, 0xae, 0x2d, 0xdd}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_H264_VLD_STEREO_PROGRESSIVE_NOFGT,
+ 0xd79be8da, 0x0cf1, 0x4c81, 0xb8, 0x2a, 0x69, 0xa4, 0xe2, 0x36, 0xf4, 0x3d}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_H264_VLD_STEREO_NOFGT,
+ 0xf9aaccbb, 0xc2b6, 0x4cfc, 0x87, 0x79, 0x57, 0x07, 0xb1, 0x76, 0x05, 0x52}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_H264_VLD_MULTIVIEW_NOFGT,
+ 0x705b9d82, 0x76cf, 0x49d6, 0xb7, 0xe6, 0xac, 0x88, 0x72, 0xdb, 0x01, 0x3c}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_WMV8_POSTPROC,
+ 0x1b81be80, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_WMV8_MOCOMP,
+ 0x1b81be81, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_WMV9_POSTPROC,
+ 0x1b81be90, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_WMV9_MOCOMP,
+ 0x1b81be91, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_WMV9_IDCT,
+ 0x1b81be94, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_VC1_POSTPROC,
+ 0x1b81bea0, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_VC1_MOCOMP,
+ 0x1b81bea1, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_VC1_IDCT,
+ 0x1b81bea2, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_VC1_VLD,
+ 0x1b81bea3, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_VC1_D2010,
+ 0x1b81bea4, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_MPEG4PT2_VLD_SIMPLE,
+ 0xefd64d74, 0xc9e8, 0x41d7, 0xa5, 0xe9, 0xe9, 0xb0, 0xe3, 0x9f, 0xa3, 0x19}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_MPEG4PT2_VLD_ADVSIMPLE_NOGMC,
+ 0xed418a9f, 0x010d, 0x4eda, 0x9a, 0xe3, 0x9a, 0x65, 0x35, 0x8d, 0x8d, 0x2e}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_MPEG4PT2_VLD_ADVSIMPLE_GMC,
+ 0xab998b5b, 0x4258, 0x44a9, 0x9f, 0xeb, 0x94, 0xe5, 0x97, 0xa6, 0xba, 0xae}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_HEVC_VLD_MAIN,
+ 0x5b11d51b, 0x2f4c, 0x4452, 0xbc, 0xc3, 0x09, 0xf2, 0xa1, 0x16, 0x0c, 0xc0}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_HEVC_VLD_MAIN10,
+ 0x107af0e0, 0xef1a, 0x4d19, 0xab, 0xa8, 0x67, 0xa1, 0x63, 0x07, 0x3d, 0x13}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_VP9_VLD_PROFILE0,
+ 0x463707f8, 0xa1d0, 0x4585, 0x87, 0x6d, 0x83, 0xaa, 0x6d, 0x60, 0xb8, 0x9e}
+DEFINE_GUID!{D3D11_DECODER_PROFILE_VP8_VLD,
+ 0x90b899ea, 0x3a62, 0x4705, 0x88, 0xb3, 0x8d, 0xf0, 0x4b, 0x27, 0x44, 0xe7}
+STRUCT!{struct D3D11_VIDEO_DECODER_DESC {
+ Guid: GUID,
+ SampleWidth: UINT,
+ SampleHeight: UINT,
+ OutputFormat: DXGI_FORMAT,
+}}
+STRUCT!{struct D3D11_VIDEO_DECODER_CONFIG {
+ guidConfigBitstreamEncryption: GUID,
+ guidConfigMBcontrolEncryption: GUID,
+ guidConfigResidDiffEncryption: GUID,
+ ConfigBitstreamRaw: UINT,
+ ConfigMBcontrolRasterOrder: UINT,
+ ConfigResidDiffHost: UINT,
+ ConfigSpatialResid8: UINT,
+ ConfigResid8Subtraction: UINT,
+ ConfigSpatialHost8or9Clipping: UINT,
+ ConfigSpatialResidInterleaved: UINT,
+ ConfigIntraResidUnsigned: UINT,
+ ConfigResidDiffAccelerator: UINT,
+ ConfigHostInverseScan: UINT,
+ ConfigSpecificIDCT: UINT,
+ Config4GroupedCoefs: UINT,
+ ConfigMinRenderTargetBuffCount: USHORT,
+ ConfigDecoderSpecific: USHORT,
+}}
+ENUM!{enum D3D11_VIDEO_DECODER_BUFFER_TYPE {
+ D3D11_VIDEO_DECODER_BUFFER_PICTURE_PARAMETERS = 0,
+ D3D11_VIDEO_DECODER_BUFFER_MACROBLOCK_CONTROL = 1,
+ D3D11_VIDEO_DECODER_BUFFER_RESIDUAL_DIFFERENCE = 2,
+ D3D11_VIDEO_DECODER_BUFFER_DEBLOCKING_CONTROL = 3,
+ D3D11_VIDEO_DECODER_BUFFER_INVERSE_QUANTIZATION_MATRIX = 4,
+ D3D11_VIDEO_DECODER_BUFFER_SLICE_CONTROL = 5,
+ D3D11_VIDEO_DECODER_BUFFER_BITSTREAM = 6,
+ D3D11_VIDEO_DECODER_BUFFER_MOTION_VECTOR = 7,
+ D3D11_VIDEO_DECODER_BUFFER_FILM_GRAIN = 8,
+}}
+STRUCT!{struct D3D11_AES_CTR_IV {
+ IV: UINT64,
+ Count: UINT64,
+}}
+STRUCT!{struct D3D11_ENCRYPTED_BLOCK_INFO {
+ NumEncryptedBytesAtBeginning: UINT,
+ NumBytesInSkipPattern: UINT,
+ NumBytesInEncryptPattern: UINT,
+}}
+STRUCT!{struct D3D11_VIDEO_DECODER_BUFFER_DESC {
+ BufferType: D3D11_VIDEO_DECODER_BUFFER_TYPE,
+ BufferIndex: UINT,
+ DataOffset: UINT,
+ DataSize: UINT,
+ FirstMBaddress: UINT,
+ NumMBsInBuffer: UINT,
+ Width: UINT,
+ Height: UINT,
+ Stride: UINT,
+ ReservedBits: UINT,
+ pIV: *mut c_void,
+ IVSize: UINT,
+ PartialEncryption: BOOL,
+ EncryptedBlockInfo: D3D11_ENCRYPTED_BLOCK_INFO,
+}}
+STRUCT!{struct D3D11_VIDEO_DECODER_EXTENSION {
+ Function: UINT,
+ pPrivateInputData: *mut c_void,
+ PrivateInputDataSize: UINT,
+ pPrivateOutputData: *mut c_void,
+ PrivateOutputDataSize: UINT,
+ ResourceCount: UINT,
+ ppResourceList: *mut *mut ID3D11Resource,
+}}
+RIDL!{#[uuid(0x3c9c5b51, 0x995d, 0x48d1, 0x9b, 0x8d, 0xfa, 0x5c, 0xae, 0xde, 0xd6, 0x5c)]
+interface ID3D11VideoDecoder(ID3D11VideoDecoderVtbl): ID3D11DeviceChild(ID3D11DeviceChildVtbl) {
+ fn GetCreationParameters(
+ pVideoDesc: *mut D3D11_VIDEO_DECODER_DESC,
+ pConfig: *mut D3D11_VIDEO_DECODER_CONFIG,
+ ) -> HRESULT,
+ fn GetDriverHandle(
+ pDriverHandle: *mut HANDLE,
+ ) -> HRESULT,
+}}
+ENUM!{enum D3D11_VIDEO_PROCESSOR_FORMAT_SUPPORT {
+ D3D11_VIDEO_PROCESSOR_FORMAT_SUPPORT_INPUT = 0x1,
+ D3D11_VIDEO_PROCESSOR_FORMAT_SUPPORT_OUTPUT = 0x2,
+}}
+ENUM!{enum D3D11_VIDEO_PROCESSOR_DEVICE_CAPS {
+ D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_LINEAR_SPACE = 0x1,
+ D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_xvYCC = 0x2,
+ D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_RGB_RANGE_CONVERSION = 0x4,
+ D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_YCbCr_MATRIX_CONVERSION = 0x8,
+ D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_NOMINAL_RANGE = 0x10,
+}}
+ENUM!{enum D3D11_VIDEO_PROCESSOR_FEATURE_CAPS {
+ D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_FILL = 0x1,
+ D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_CONSTRICTION = 0x2,
+ D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_LUMA_KEY = 0x4,
+ D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_PALETTE = 0x8,
+ D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_LEGACY = 0x10,
+ D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_STEREO = 0x20,
+ D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ROTATION = 0x40,
+ D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_STREAM = 0x80,
+ D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_PIXEL_ASPECT_RATIO = 0x100,
+ D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_MIRROR = 0x200,
+ D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_SHADER_USAGE = 0x400,
+}}
+ENUM!{enum D3D11_VIDEO_PROCESSOR_FILTER_CAPS {
+ D3D11_VIDEO_PROCESSOR_FILTER_CAPS_BRIGHTNESS = 0x1,
+ D3D11_VIDEO_PROCESSOR_FILTER_CAPS_CONTRAST = 0x2,
+ D3D11_VIDEO_PROCESSOR_FILTER_CAPS_HUE = 0x4,
+ D3D11_VIDEO_PROCESSOR_FILTER_CAPS_SATURATION = 0x8,
+ D3D11_VIDEO_PROCESSOR_FILTER_CAPS_NOISE_REDUCTION = 0x10,
+ D3D11_VIDEO_PROCESSOR_FILTER_CAPS_EDGE_ENHANCEMENT = 0x20,
+ D3D11_VIDEO_PROCESSOR_FILTER_CAPS_ANAMORPHIC_SCALING = 0x40,
+ D3D11_VIDEO_PROCESSOR_FILTER_CAPS_STEREO_ADJUSTMENT = 0x80,
+}}
+ENUM!{enum D3D11_VIDEO_PROCESSOR_FORMAT_CAPS {
+ D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_INTERLACED = 0x1,
+ D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_PROCAMP = 0x2,
+ D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_LUMA_KEY = 0x4,
+ D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_PALETTE_INTERLACED = 0x8,
+}}
+ENUM!{enum D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS {
+ D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_DENOISE = 0x1,
+ D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_DERINGING = 0x2,
+ D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_EDGE_ENHANCEMENT = 0x4,
+ D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_COLOR_CORRECTION = 0x8,
+ D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_FLESH_TONE_MAPPING = 0x10,
+ D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_IMAGE_STABILIZATION = 0x20,
+ D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_SUPER_RESOLUTION = 0x40,
+ D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_ANAMORPHIC_SCALING = 0x80,
+}}
+ENUM!{enum D3D11_VIDEO_PROCESSOR_STEREO_CAPS {
+ D3D11_VIDEO_PROCESSOR_STEREO_CAPS_MONO_OFFSET = 0x1,
+ D3D11_VIDEO_PROCESSOR_STEREO_CAPS_ROW_INTERLEAVED = 0x2,
+ D3D11_VIDEO_PROCESSOR_STEREO_CAPS_COLUMN_INTERLEAVED = 0x4,
+ D3D11_VIDEO_PROCESSOR_STEREO_CAPS_CHECKERBOARD = 0x8,
+ D3D11_VIDEO_PROCESSOR_STEREO_CAPS_FLIP_MODE = 0x10,
+}}
+STRUCT!{struct D3D11_VIDEO_PROCESSOR_CAPS {
+ DeviceCaps: UINT,
+ FeatureCaps: UINT,
+ FilterCaps: UINT,
+ InputFormatCaps: UINT,
+ AutoStreamCaps: UINT,
+ StereoCaps: UINT,
+ RateConversionCapsCount: UINT,
+ MaxInputStreams: UINT,
+ MaxStreamStates: UINT,
+}}
+ENUM!{enum D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS {
+ D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_BLEND = 0x1,
+ D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_BOB = 0x2,
+ D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_ADAPTIVE = 0x4,
+ D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_MOTION_COMPENSATION = 0x8,
+ D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_INVERSE_TELECINE = 0x10,
+ D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_FRAME_RATE_CONVERSION = 0x20,
+}}
+ENUM!{enum D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS {
+ D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_32 = 0x1,
+ D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_22 = 0x2,
+ D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_2224 = 0x4,
+ D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_2332 = 0x8,
+ D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_32322 = 0x10,
+ D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_55 = 0x20,
+ D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_64 = 0x40,
+ D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_87 = 0x80,
+ D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_222222222223 = 0x100,
+ D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_OTHER = 0x80000000,
+}}
+STRUCT!{struct D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS {
+ PastFrames: UINT,
+ FutureFrames: UINT,
+ ProcessorCaps: UINT,
+ ITelecineCaps: UINT,
+ CustomRateCount: UINT,
+}}
+ENUM!{enum D3D11_CONTENT_PROTECTION_CAPS {
+ D3D11_CONTENT_PROTECTION_CAPS_SOFTWARE = 0x1,
+ D3D11_CONTENT_PROTECTION_CAPS_HARDWARE = 0x2,
+ D3D11_CONTENT_PROTECTION_CAPS_PROTECTION_ALWAYS_ON = 0x4,
+ D3D11_CONTENT_PROTECTION_CAPS_PARTIAL_DECRYPTION = 0x8,
+ D3D11_CONTENT_PROTECTION_CAPS_CONTENT_KEY = 0x10,
+ D3D11_CONTENT_PROTECTION_CAPS_FRESHEN_SESSION_KEY = 0x20,
+ D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK = 0x40,
+ D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK_KEY = 0x80,
+ D3D11_CONTENT_PROTECTION_CAPS_SEQUENTIAL_CTR_IV = 0x100,
+ D3D11_CONTENT_PROTECTION_CAPS_ENCRYPT_SLICEDATA_ONLY = 0x200,
+ D3D11_CONTENT_PROTECTION_CAPS_DECRYPTION_BLT = 0x400,
+ D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_PROTECT_UNCOMPRESSED = 0x800,
+ D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_PROTECTED_MEMORY_PAGEABLE = 0x1000,
+ D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_TEARDOWN = 0x2000,
+ D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_DRM_COMMUNICATION = 0x4000,
+}}
+DEFINE_GUID!{D3D11_CRYPTO_TYPE_AES128_CTR,
+ 0x9b6bd711, 0x4f74, 0x41c9, 0x9e, 0x7b, 0x0b, 0xe2, 0xd7, 0xd9, 0x3b, 0x4f}
+DEFINE_GUID!{D3D11_DECODER_ENCRYPTION_HW_CENC,
+ 0x89d6ac4f, 0x09f2, 0x4229, 0xb2, 0xcd, 0x37, 0x74, 0x0a, 0x6d, 0xfd, 0x81}
+DEFINE_GUID!{D3D11_KEY_EXCHANGE_HW_PROTECTION,
+ 0xb1170d8a, 0x628d, 0x4da3, 0xad, 0x3b, 0x82, 0xdd, 0xb0, 0x8b, 0x49, 0x70}
+STRUCT!{struct D3D11_VIDEO_CONTENT_PROTECTION_CAPS {
+ Caps: UINT,
+ KeyExchangeTypeCount: UINT,
+ BlockAlignmentSize: UINT,
+ ProtectedMemorySize: ULONGLONG,
+}}
+STRUCT!{struct D3D11_VIDEO_PROCESSOR_CUSTOM_RATE {
+ CustomRate: DXGI_RATIONAL,
+ OutputFrames: UINT,
+ InputInterlaced: BOOL,
+ InputFramesOrFields: UINT,
+}}
+ENUM!{enum D3D11_VIDEO_PROCESSOR_FILTER {
+ D3D11_VIDEO_PROCESSOR_FILTER_BRIGHTNESS = 0,
+ D3D11_VIDEO_PROCESSOR_FILTER_CONTRAST = 1,
+ D3D11_VIDEO_PROCESSOR_FILTER_HUE = 2,
+ D3D11_VIDEO_PROCESSOR_FILTER_SATURATION = 3,
+ D3D11_VIDEO_PROCESSOR_FILTER_NOISE_REDUCTION = 4,
+ D3D11_VIDEO_PROCESSOR_FILTER_EDGE_ENHANCEMENT = 5,
+ D3D11_VIDEO_PROCESSOR_FILTER_ANAMORPHIC_SCALING = 6,
+ D3D11_VIDEO_PROCESSOR_FILTER_STEREO_ADJUSTMENT = 7,
+}}
+STRUCT!{struct D3D11_VIDEO_PROCESSOR_FILTER_RANGE {
+ Minimum: c_int,
+ Maximum: c_int,
+ Default: c_int,
+ Multiplier: c_float,
+}}
+ENUM!{enum D3D11_VIDEO_FRAME_FORMAT {
+ D3D11_VIDEO_FRAME_FORMAT_PROGRESSIVE = 0,
+ D3D11_VIDEO_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST = 1,
+ D3D11_VIDEO_FRAME_FORMAT_INTERLACED_BOTTOM_FIELD_FIRST = 2,
+}}
+ENUM!{enum D3D11_VIDEO_USAGE {
+ D3D11_VIDEO_USAGE_PLAYBACK_NORMAL = 0,
+ D3D11_VIDEO_USAGE_OPTIMAL_SPEED = 1,
+ D3D11_VIDEO_USAGE_OPTIMAL_QUALITY = 2,
+}}
+STRUCT!{struct D3D11_VIDEO_PROCESSOR_CONTENT_DESC {
+ InputFrameFormat: D3D11_VIDEO_FRAME_FORMAT,
+ InputFrameRate: DXGI_RATIONAL,
+ InputWidth: UINT,
+ InputHeight: UINT,
+ OutputFrameRate: DXGI_RATIONAL,
+ OutputWidth: UINT,
+ OutputHeight: UINT,
+ Usage: D3D11_VIDEO_USAGE,
+}}
+RIDL!{#[uuid(0x31627037, 0x53ab, 0x4200, 0x90, 0x61, 0x05, 0xfa, 0xa9, 0xab, 0x45, 0xf9)]
+interface ID3D11VideoProcessorEnumerator(ID3D11VideoProcessorEnumeratorVtbl):
+ ID3D11DeviceChild(ID3D11DeviceChildVtbl) {
+ fn GetVideoProcessorContentDesc(
+ pContentDesc: *mut D3D11_VIDEO_PROCESSOR_CONTENT_DESC,
+ ) -> HRESULT,
+ fn CheckVideoProcessorFormat(
+ Format: DXGI_FORMAT,
+ pFlags: *mut UINT,
+ ) -> HRESULT,
+ fn GetVideoProcessorCaps(
+ pCaps: *mut D3D11_VIDEO_PROCESSOR_CAPS,
+ ) -> HRESULT,
+ fn GetVideoProcessorRateConversionCaps(
+ TypeIndex: UINT,
+ pCaps: *mut D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS,
+ ) -> HRESULT,
+ fn GetVideoProcessorCustomRate(
+ TypeIndex: UINT,
+ CustomRateIndex: UINT,
+ pRate: *mut D3D11_VIDEO_PROCESSOR_CUSTOM_RATE,
+ ) -> HRESULT,
+ fn GetVideoProcessorFilterRange(
+ Filter: D3D11_VIDEO_PROCESSOR_FILTER,
+ Range: *mut D3D11_VIDEO_PROCESSOR_FILTER_RANGE,
+ ) -> HRESULT,
+}}
+STRUCT!{struct D3D11_VIDEO_COLOR_RGBA {
+ R: c_float,
+ G: c_float,
+ B: c_float,
+ A: c_float,
+}}
+STRUCT!{struct D3D11_VIDEO_COLOR_YCbCrA {
+ Y: c_float,
+ Cb: c_float,
+ Cr: c_float,
+ A: c_float,
+}}
+UNION!{union D3D11_VIDEO_COLOR {
+ [f32; 4],
+ YCbCr YCbCr_mut: D3D11_VIDEO_COLOR_YCbCrA,
+ RGBA RGBA_mut: D3D11_VIDEO_COLOR_RGBA,
+}}
+ENUM!{enum D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE {
+ D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_UNDEFINED = 0,
+ D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_16_235 = 1,
+ D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_0_255 = 2,
+}}
+STRUCT!{struct D3D11_VIDEO_PROCESSOR_COLOR_SPACE {
+ bitfield: UINT,
+}}
+BITFIELD!{D3D11_VIDEO_PROCESSOR_COLOR_SPACE bitfield: UINT [
+ Usage set_Usage[0..1],
+ RGB_Range set_RGB_Range[1..2],
+ YCbCr_Matrix set_YCbCr_Matrix[2..3],
+ YCbCr_xvYCC set_YCbCr_xvYCC[3..4],
+ Nominal_Range set_Nominal_Range[4..6],
+]}
+ENUM!{enum D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE {
+ D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_OPAQUE = 0,
+ D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_BACKGROUND = 1,
+ D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_DESTINATION = 2,
+ D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_SOURCE_STREAM = 3,
+}}
+ENUM!{enum D3D11_VIDEO_PROCESSOR_OUTPUT_RATE {
+ D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_NORMAL = 0,
+ D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_HALF = 1,
+ D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_CUSTOM = 2,
+}}
+ENUM!{enum D3D11_VIDEO_PROCESSOR_STEREO_FORMAT {
+ D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO = 0,
+ D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_HORIZONTAL = 1,
+ D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_VERTICAL = 2,
+ D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE = 3,
+ D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET = 4,
+ D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_ROW_INTERLEAVED = 5,
+ D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_COLUMN_INTERLEAVED = 6,
+ D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_CHECKERBOARD = 7,
+}}
+ENUM!{enum D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE {
+ D3D11_VIDEO_PROCESSOR_STEREO_FLIP_NONE = 0,
+ D3D11_VIDEO_PROCESSOR_STEREO_FLIP_FRAME0 = 1,
+ D3D11_VIDEO_PROCESSOR_STEREO_FLIP_FRAME1 = 2,
+}}
+ENUM!{enum D3D11_VIDEO_PROCESSOR_ROTATION {
+ D3D11_VIDEO_PROCESSOR_ROTATION_IDENTITY = 0,
+ D3D11_VIDEO_PROCESSOR_ROTATION_90 = 1,
+ D3D11_VIDEO_PROCESSOR_ROTATION_180 = 2,
+ D3D11_VIDEO_PROCESSOR_ROTATION_270 = 3,
+}}
+STRUCT!{struct D3D11_VIDEO_PROCESSOR_STREAM {
+ Enable: BOOL,
+ OutputIndex: UINT,
+ InputFrameOrField: UINT,
+ PastFrames: UINT,
+ FutureFrames: UINT,
+ ppPastSurfaces: *mut *mut ID3D11VideoProcessorInputView,
+ pInputSurface: *mut ID3D11VideoProcessorInputView,
+ ppFutureSurfaces: *mut *mut ID3D11VideoProcessorInputView,
+ ppPastSurfacesRight: *mut *mut ID3D11VideoProcessorInputView,
+ pInputSurfaceRight: *mut ID3D11VideoProcessorInputView,
+ ppFutureSurfacesRight: *mut *mut ID3D11VideoProcessorInputView,
+}}
+RIDL!{#[uuid(0x1d7b0652, 0x185f, 0x41c6, 0x85, 0xce, 0x0c, 0x5b, 0xe3, 0xd4, 0xae, 0x6c)]
+interface ID3D11VideoProcessor(ID3D11VideoProcessorVtbl):
+ ID3D11DeviceChild(ID3D11DeviceChildVtbl) {
+ fn GetContentDesc(
+ pDesc: *mut D3D11_VIDEO_PROCESSOR_CONTENT_DESC,
+ ) -> (),
+ fn GetRateConversionCaps(
+ pCaps: *mut D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS,
+ ) -> (),
+}}
+STRUCT!{struct D3D11_OMAC {
+ Omac: [BYTE; 16],
+}}
+ENUM!{enum D3D11_AUTHENTICATED_CHANNEL_TYPE {
+ D3D11_AUTHENTICATED_CHANNEL_D3D11 = 1,
+ D3D11_AUTHENTICATED_CHANNEL_DRIVER_SOFTWARE = 2,
+ D3D11_AUTHENTICATED_CHANNEL_DRIVER_HARDWARE = 3,
+}}
+RIDL!{#[uuid(0x3015a308, 0xdcbd, 0x47aa, 0xa7, 0x47, 0x19, 0x24, 0x86, 0xd1, 0x4d, 0x4a)]
+interface ID3D11AuthenticatedChannel(ID3D11AuthenticatedChannelVtbl):
+ ID3D11DeviceChild(ID3D11DeviceChildVtbl) {
+ fn GetCertificateSize(
+ pCertificateSize: *mut UINT,
+ ) -> HRESULT,
+ fn GetCertificate(
+ CertificateSize: UINT,
+ pCertificate: *mut BYTE,
+ ) -> HRESULT,
+ fn GetChannelHandle(
+ pChannelHandle: *mut HANDLE,
+ ) -> (),
+}}
+DEFINE_GUID!{D3D11_AUTHENTICATED_QUERY_PROTECTION,
+ 0xa84eb584, 0xc495, 0x48aa, 0xb9, 0x4d, 0x8b, 0xd2, 0xd6, 0xfb, 0xce, 0x05}
+DEFINE_GUID!{D3D11_AUTHENTICATED_QUERY_CHANNEL_TYPE,
+ 0xbc1b18a5, 0xb1fb, 0x42ab, 0xbd, 0x94, 0xb5, 0x82, 0x8b, 0x4b, 0xf7, 0xbe}
+DEFINE_GUID!{D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE,
+ 0xec1c539d, 0x8cff, 0x4e2a, 0xbc, 0xc4, 0xf5, 0x69, 0x2f, 0x99, 0xf4, 0x80}
+DEFINE_GUID!{D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION,
+ 0x2634499e, 0xd018, 0x4d74, 0xac, 0x17, 0x7f, 0x72, 0x40, 0x59, 0x52, 0x8d}
+DEFINE_GUID!{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_COUNT,
+ 0x0db207b3, 0x9450, 0x46a6, 0x82, 0xde, 0x1b, 0x96, 0xd4, 0x4f, 0x9c, 0xf2}
+DEFINE_GUID!{D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS,
+ 0x649bbadb, 0xf0f4, 0x4639, 0xa1, 0x5b, 0x24, 0x39, 0x3f, 0xc3, 0xab, 0xac}
+DEFINE_GUID!{D3D11_AUTHENTICATED_QUERY_UNRESTRICTED_PROTECTED_SHARED_RESOURCE_COUNT,
+ 0x012f0bd6, 0xe662, 0x4474, 0xbe, 0xfd, 0xaa, 0x53, 0xe5, 0x14, 0x3c, 0x6d}
+DEFINE_GUID!{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT,
+ 0x2c042b5e, 0x8c07, 0x46d5, 0xaa, 0xbe, 0x8f, 0x75, 0xcb, 0xad, 0x4c, 0x31}
+DEFINE_GUID!{D3D11_AUTHENTICATED_QUERY_OUTPUT_ID,
+ 0x839ddca3, 0x9b4e, 0x41e4, 0xb0, 0x53, 0x89, 0x2b, 0xd2, 0xa1, 0x1e, 0xe7}
+DEFINE_GUID!{D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ATTRIBUTES,
+ 0x6214d9d2, 0x432c, 0x4abb, 0x9f, 0xce, 0x21, 0x6e, 0xea, 0x26, 0x9e, 0x3b}
+DEFINE_GUID!{D3D11_AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID_COUNT,
+ 0xb30f7066, 0x203c, 0x4b07, 0x93, 0xfc, 0xce, 0xaa, 0xfd, 0x61, 0x24, 0x1e}
+DEFINE_GUID!{D3D11_AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID,
+ 0xf83a5958, 0xe986, 0x4bda, 0xbe, 0xb0, 0x41, 0x1f, 0x6a, 0x7a, 0x01, 0xb7}
+DEFINE_GUID!{D3D11_AUTHENTICATED_QUERY_CURRENT_ENCRYPTION_WHEN_ACCESSIBLE,
+ 0xec1791c7, 0xdad3, 0x4f15, 0x9e, 0xc3, 0xfa, 0xa9, 0x3d, 0x60, 0xd4, 0xf0}
+DEFINE_GUID!{D3D11_AUTHENTICATED_CONFIGURE_INITIALIZE,
+ 0x06114bdb, 0x3523, 0x470a, 0x8d, 0xca, 0xfb, 0xc2, 0x84, 0x51, 0x54, 0xf0}
+DEFINE_GUID!{D3D11_AUTHENTICATED_CONFIGURE_PROTECTION,
+ 0x50455658, 0x3f47, 0x4362, 0xbf, 0x99, 0xbf, 0xdf, 0xcd, 0xe9, 0xed, 0x29}
+DEFINE_GUID!{D3D11_AUTHENTICATED_CONFIGURE_CRYPTO_SESSION,
+ 0x6346cc54, 0x2cfc, 0x4ad4, 0x82, 0x24, 0xd1, 0x58, 0x37, 0xde, 0x77, 0x00}
+DEFINE_GUID!{D3D11_AUTHENTICATED_CONFIGURE_SHARED_RESOURCE,
+ 0x0772d047, 0x1b40, 0x48e8, 0x9c, 0xa6, 0xb5, 0xf5, 0x10, 0xde, 0x9f, 0x01}
+DEFINE_GUID!{D3D11_AUTHENTICATED_CONFIGURE_ENCRYPTION_WHEN_ACCESSIBLE,
+ 0x41fff286, 0x6ae0, 0x4d43, 0x9d, 0x55, 0xa4, 0x6e, 0x9e, 0xfd, 0x15, 0x8a}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_INPUT {
+ QueryType: GUID,
+ hChannel: HANDLE,
+ SequenceNumber: UINT,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_OUTPUT {
+ omac: D3D11_OMAC,
+ QueryType: GUID,
+ hChannel: HANDLE,
+ SequenceNumber: UINT,
+ ReturnCode: HRESULT,
+}}
+//FIXME bitfield
+STRUCT!{struct D3D11_AUTHENTICATED_PROTECTION_FLAGS {
+ u: UINT,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_PROTECTION_OUTPUT {
+ Output: D3D11_AUTHENTICATED_QUERY_OUTPUT,
+ ProtectionFlags: D3D11_AUTHENTICATED_PROTECTION_FLAGS,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_CHANNEL_TYPE_OUTPUT {
+ Output: D3D11_AUTHENTICATED_QUERY_OUTPUT,
+ ChannelType: D3D11_AUTHENTICATED_CHANNEL_TYPE,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE_OUTPUT {
+ Output: D3D11_AUTHENTICATED_QUERY_OUTPUT,
+ DeviceHandle: HANDLE,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_INPUT {
+ Input: D3D11_AUTHENTICATED_QUERY_INPUT,
+ DecoderHandle: HANDLE,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_OUTPUT {
+ Output: D3D11_AUTHENTICATED_QUERY_OUTPUT,
+ DecoderHandle: HANDLE,
+ CryptoSessionHandle: HANDLE,
+ DeviceHandle: HANDLE,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_COUNT_OUTPUT {
+ Output: D3D11_AUTHENTICATED_QUERY_OUTPUT,
+ RestrictedSharedResourceProcessCount: UINT,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_INPUT {
+ Input: D3D11_AUTHENTICATED_QUERY_INPUT,
+ ProcessIndex: UINT,
+}}
+ENUM!{enum D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE {
+ D3D11_PROCESSIDTYPE_UNKNOWN = 0,
+ D3D11_PROCESSIDTYPE_DWM = 1,
+ D3D11_PROCESSIDTYPE_HANDLE = 2,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_OUTPUT {
+ Output: D3D11_AUTHENTICATED_QUERY_OUTPUT,
+ ProcessIndex: UINT,
+ ProcessIdentifier: D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE,
+ ProcessHandle: HANDLE,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_UNRESTRICTED_PROTECTED_SHARED_RESOURCE_COUNT_OUTPUT {
+ Output: D3D11_AUTHENTICATED_QUERY_OUTPUT,
+ UnrestrictedProtectedSharedResourceCount: UINT,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_INPUT {
+ Input: D3D11_AUTHENTICATED_QUERY_INPUT,
+ DeviceHandle: HANDLE,
+ CryptoSessionHandle: HANDLE,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_OUTPUT {
+ Output: D3D11_AUTHENTICATED_QUERY_OUTPUT,
+ DeviceHandle: HANDLE,
+ CryptoSessionHandle: HANDLE,
+ OutputIDCount: UINT,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_INPUT {
+ Input: D3D11_AUTHENTICATED_QUERY_INPUT,
+ DeviceHandle: HANDLE,
+ CryptoSessionHandle: HANDLE,
+ OutputIDIndex: UINT,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_OUTPUT {
+ Output: D3D11_AUTHENTICATED_QUERY_OUTPUT,
+ DeviceHandle: HANDLE,
+ CryptoSessionHandle: HANDLE,
+ OutputIDIndex: UINT,
+ OutputID: UINT64,
+}}
+ENUM!{enum D3D11_BUS_TYPE {
+ D3D11_BUS_TYPE_OTHER = 0,
+ D3D11_BUS_TYPE_PCI = 0x1,
+ D3D11_BUS_TYPE_PCIX = 0x2,
+ D3D11_BUS_TYPE_PCIEXPRESS = 0x3,
+ D3D11_BUS_TYPE_AGP = 0x4,
+ D3D11_BUS_IMPL_MODIFIER_INSIDE_OF_CHIPSET = 0x10000,
+ D3D11_BUS_IMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_CHIP = 0x20000,
+ D3D11_BUS_IMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_SOCKET = 0x30000,
+ D3D11_BUS_IMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR = 0x40000,
+ D3D11_BUS_IMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR_INSIDE_OF_NUAE = 0x50000,
+ D3D11_BUS_IMPL_MODIFIER_NON_STANDARD = 0x80000000,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_ACESSIBILITY_OUTPUT {
+ Output: D3D11_AUTHENTICATED_QUERY_OUTPUT,
+ BusType: D3D11_BUS_TYPE,
+ AccessibleInContiguousBlocks: BOOL,
+ AccessibleInNonContiguousBlocks: BOOL,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_COUNT_OUTPUT {
+ Output: D3D11_AUTHENTICATED_QUERY_OUTPUT,
+ EncryptionGuidCount: UINT,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_INPUT {
+ Input: D3D11_AUTHENTICATED_QUERY_INPUT,
+ EncryptionGuidIndex: UINT,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_OUTPUT {
+ Output: D3D11_AUTHENTICATED_QUERY_OUTPUT,
+ EncryptionGuidIndex: UINT,
+ EncryptionGuid: GUID,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_QUERY_CURRENT_ACCESSIBILITY_ENCRYPTION_OUTPUT {
+ Output: D3D11_AUTHENTICATED_QUERY_OUTPUT,
+ EncryptionGuid: GUID,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_CONFIGURE_INPUT {
+ omac: D3D11_OMAC,
+ ConfigureType: GUID,
+ hChannel: HANDLE,
+ SequenceNumber: UINT,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_CONFIGURE_OUTPUT {
+ omac: D3D11_OMAC,
+ ConfigureType: GUID,
+ hChannel: HANDLE,
+ SequenceNumber: UINT,
+ ReturnCode: HRESULT,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_CONFIGURE_INITIALIZE_INPUT {
+ Parameters: D3D11_AUTHENTICATED_CONFIGURE_INPUT,
+ StartSequenceQuery: UINT,
+ StartSequenceConfigure: UINT,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_CONFIGURE_PROTECTION_INPUT {
+ Parameters: D3D11_AUTHENTICATED_CONFIGURE_INPUT,
+ Protections: D3D11_AUTHENTICATED_PROTECTION_FLAGS,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_CONFIGURE_CRYPTO_SESSION_INPUT {
+ Parameters: D3D11_AUTHENTICATED_CONFIGURE_INPUT,
+ DecoderHandle: HANDLE,
+ CryptoSessionHandle: HANDLE,
+ DeviceHandle: HANDLE,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_CONFIGURE_SHARED_RESOURCE_INPUT {
+ Parameters: D3D11_AUTHENTICATED_CONFIGURE_INPUT,
+ ProcessType: D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE,
+ ProcessHandle: HANDLE,
+ AllowAccess: BOOL,
+}}
+STRUCT!{struct D3D11_AUTHENTICATED_CONFIGURE_ACCESSIBLE_ENCRYPTION_INPUT {
+ Parameters: D3D11_AUTHENTICATED_CONFIGURE_INPUT,
+ EncryptionGuid: GUID,
+}}
+DEFINE_GUID!{D3D11_KEY_EXCHANGE_RSAES_OAEP,
+ 0xc1949895, 0xd72a, 0x4a1d, 0x8e, 0x5d, 0xed, 0x85, 0x7d, 0x17, 0x15, 0x20}
+RIDL!{#[uuid(0x9b32f9ad, 0xbdcc, 0x40a6, 0xa3, 0x9d, 0xd5, 0xc8, 0x65, 0x84, 0x57, 0x20)]
+interface ID3D11CryptoSession(ID3D11CryptoSessionVtbl): ID3D11DeviceChild(ID3D11DeviceChildVtbl) {
+ fn GetCryptoType(
+ pCryptoType: *mut GUID,
+ ) -> (),
+ fn GetDecoderProfile(
+ pDecoderProfile: *mut GUID,
+ ) -> (),
+ fn GetCertificateSize(
+ pCertificateSize: *mut UINT,
+ ) -> HRESULT,
+ fn GetCertificate(
+ CertificateSize: UINT,
+ pCertificate: *mut BYTE,
+ ) -> HRESULT,
+ fn GetCryptoSessionHandle(
+ pCertificate: *mut HANDLE,
+ ) -> (),
+}}
+ENUM!{enum D3D11_VDOV_DIMENSION {
+ D3D11_VDOV_DIMENSION_UNKNOWN = 0,
+ D3D11_VDOV_DIMENSION_TEXTURE2D = 1,
+}}
+STRUCT!{struct D3D11_TEX2D_VDOV {
+ ArraySlice: UINT,
+}}
+STRUCT!{struct D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC {
+ DecodeProfile: GUID,
+ ViewDimension: D3D11_VDOV_DIMENSION,
+ Texture2D: D3D11_TEX2D_VDOV,
+}}
+RIDL!{#[uuid(0xc2931aea, 0x2a85, 0x4f20, 0x86, 0x0f, 0xfb, 0xa1, 0xfd, 0x25, 0x6e, 0x18)]
+interface ID3D11VideoDecoderOutputView(ID3D11VideoDecoderOutputViewVtbl):
+ ID3D11View(ID3D11ViewVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC,
+ ) -> (),
+}}
+ENUM!{enum D3D11_VPIV_DIMENSION {
+ D3D11_VPIV_DIMENSION_UNKNOWN = 0,
+ D3D11_VPIV_DIMENSION_TEXTURE2D = 1,
+}}
+STRUCT!{struct D3D11_TEX2D_VPIV {
+ MipSlice: UINT,
+ ArraySlice: UINT,
+}}
+STRUCT!{struct D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC {
+ FourCC: UINT,
+ ViewDimension: D3D11_VPIV_DIMENSION,
+ Texture2D: D3D11_TEX2D_VPIV,
+}}
+RIDL!{#[uuid(0x11ec5a5f, 0x51dc, 0x4945, 0xab, 0x34, 0x6e, 0x8c, 0x21, 0x30, 0x0e, 0xa5)]
+interface ID3D11VideoProcessorInputView(ID3D11VideoProcessorInputViewVtbl):
+ ID3D11View(ID3D11ViewVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC,
+ ) -> (),
+}}
+ENUM!{enum D3D11_VPOV_DIMENSION {
+ D3D11_VPOV_DIMENSION_UNKNOWN = 0,
+ D3D11_VPOV_DIMENSION_TEXTURE2D = 1,
+ D3D11_VPOV_DIMENSION_TEXTURE2DARRAY = 2,
+}}
+STRUCT!{struct D3D11_TEX2D_VPOV {
+ MipSlice: UINT,
+}}
+STRUCT!{struct D3D11_TEX2D_ARRAY_VPOV {
+ MipSlice: UINT,
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+UNION!{union D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC_u {
+ [u32; 3],
+ Texture2D Texture2D_mut: D3D11_TEX2D_VPOV,
+ Texture2DArray Texture2DArray_mut: D3D11_TEX2D_ARRAY_VPOV,
+}}
+STRUCT!{struct D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC {
+ ViewDimension: D3D11_VPOV_DIMENSION,
+ u: D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC_u,
+}}
+RIDL!{#[uuid(0xa048285e, 0x25a9, 0x4527, 0xbd, 0x93, 0xd6, 0x8b, 0x68, 0xc4, 0x42, 0x54)]
+interface ID3D11VideoProcessorOutputView(ID3D11VideoProcessorOutputViewVtbl):
+ ID3D11View(ID3D11ViewVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x61f21c45, 0x3c0e, 0x4a74, 0x9c, 0xea, 0x67, 0x10, 0x0d, 0x9a, 0xd5, 0xe4)]
+interface ID3D11VideoContext(ID3D11VideoContextVtbl): ID3D11DeviceChild(ID3D11DeviceChildVtbl) {
+ fn GetDecoderBuffer(
+ pDecoder: *mut ID3D11VideoDecoder,
+ Type: D3D11_VIDEO_DECODER_BUFFER_TYPE,
+ pBufferSize: *mut UINT,
+ ppBuffer: *mut *mut c_void,
+ ) -> HRESULT,
+ fn ReleaseDecoderBuffer(
+ pDecoder: *mut ID3D11VideoDecoder,
+ Type: D3D11_VIDEO_DECODER_BUFFER_TYPE,
+ ) -> HRESULT,
+ fn DecoderBeginFrame(
+ pDecoder: *mut ID3D11VideoDecoder,
+ pView: *mut ID3D11VideoDecoderOutputView,
+ ContentKeySize: UINT,
+ pContentKey: *const c_void,
+ ) -> HRESULT,
+ fn DecoderEndFrame(
+ pDecoder: *mut ID3D11VideoDecoder,
+ ) -> HRESULT,
+ fn SubmitDecoderBuffers(
+ pDecoder: *mut ID3D11VideoDecoder,
+ NumBuffers: UINT,
+ pBufferDesc: *const D3D11_VIDEO_DECODER_BUFFER_DESC,
+ ) -> HRESULT,
+ fn DecoderExtension(
+ pDecoder: *mut ID3D11VideoDecoder,
+ pExtensionData: *const D3D11_VIDEO_DECODER_EXTENSION,
+ ) -> HRESULT,
+ fn VideoProcessorSetOutputTargetRect(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ Enable: BOOL,
+ pRect: *const RECT,
+ ) -> (),
+ fn VideoProcessorSetOutputBackgroundColor(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ YCbCr: BOOL,
+ pRect: *const RECT,
+ ) -> (),
+ fn VideoProcessorSetOutputColorSpace(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ pColorSpace: *const D3D11_VIDEO_PROCESSOR_COLOR_SPACE,
+ ) -> HRESULT,
+ fn VideoProcessorSetOutputAlphaFillMode(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ AlphaFillMode: D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE,
+ StreamIndex: UINT,
+ ) -> (),
+ fn VideoProcessorSetOutputConstriction(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ Enable: BOOL,
+ Size: SIZE,
+ ) -> (),
+ fn VideoProcessorSetOutputStereoMode(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ Enable: BOOL,
+ ) -> (),
+ fn VideoProcessorSetOutputExtension(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ pExtensionGuid: *const GUID,
+ DataSize: UINT,
+ pData: *mut c_void,
+ ) -> HRESULT,
+ fn VideoProcessorGetOutputTargetRect(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ Enabled: *mut BOOL,
+ pRect: *mut RECT,
+ ) -> (),
+ fn VideoProcessorGetOutputBackgroundColor(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ pYCbCr: *mut BOOL,
+ pColor: *mut D3D11_VIDEO_COLOR,
+ ) -> (),
+ fn VideoProcessorGetOutputColorSpace(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ pColorSpace: *mut D3D11_VIDEO_PROCESSOR_COLOR_SPACE,
+ ) -> (),
+ fn VideoProcessorGetOutputAlphaFillMode(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ pAlphaFillMode: *mut D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE,
+ pStreamIndex: *mut UINT,
+ ) -> (),
+ fn VideoProcessorGetOutputConstriction(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ pEnabled: *mut BOOL,
+ pSize: *mut SIZE,
+ ) -> (),
+ fn VideoProcessorGetOutputStereoMode(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ pEnabled: *mut BOOL,
+ ) -> (),
+ fn VideoProcessorGetOutputExtension(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ pExtensionGuid: *const GUID,
+ DataSize: UINT,
+ pData: *mut c_void,
+ ) -> HRESULT,
+ fn VideoProcessorSetStreamFrameFormat(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ FrameFormat: D3D11_VIDEO_FRAME_FORMAT,
+ ) -> (),
+ fn VideoProcessorSetStreamColorSpace(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ pColorSpace: *const D3D11_VIDEO_PROCESSOR_COLOR_SPACE,
+ ) -> (),
+ fn VideoProcessorSetStreamOutputRate(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ OutputRate: D3D11_VIDEO_PROCESSOR_OUTPUT_RATE,
+ RepeatFrame: BOOL,
+ pCustomRate: *const DXGI_RATIONAL,
+ ) -> (),
+ fn VideoProcessorSetStreamSourceRect(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ Enable: BOOL,
+ pRect: *const RECT,
+ ) -> (),
+ fn VideoProcessorSetStreamDestRect(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ Enable: BOOL,
+ pRect: *const RECT,
+ ) -> (),
+ fn VideoProcessorSetStreamAlpha(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ Enable: BOOL,
+ Alpha: FLOAT,
+ ) -> (),
+ fn VideoProcessorSetStreamPalette(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ Count: UINT,
+ pEntries: *const UINT,
+ ) -> (),
+ fn VideoProcessorSetStreamPixelAspectRatio(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ Enable: BOOL,
+ pSourceAspectRatio: *const DXGI_RATIONAL,
+ pDestinationAspectRatio: *const DXGI_RATIONAL,
+ ) -> (),
+ fn VideoProcessorSetStreamLumaKey(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ Enable: BOOL,
+ Lower: FLOAT,
+ Upper: FLOAT,
+ ) -> (),
+ fn VideoProcessorSetStreamStereoFormat(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ Enable: BOOL,
+ Format: D3D11_VIDEO_PROCESSOR_STEREO_FORMAT,
+ LeftViewFrame0: BOOL,
+ BaseViewFrame0: BOOL,
+ FlipMode: D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE,
+ ) -> (),
+ fn VideoProcessorSetStreamAutoProcessingMode(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ Enable: BOOL,
+ ) -> (),
+ fn VideoProcessorSetStreamFilter(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ Filter: D3D11_VIDEO_PROCESSOR_FILTER,
+ Enable: BOOL,
+ Level: c_int,
+ ) -> (),
+ fn VideoProcessorSetStreamExtension(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ pExtensionGuid: *const GUID,
+ DataSize: UINT,
+ pData: *mut c_void,
+ ) -> HRESULT,
+ fn VideoProcessorGetStreamFrameFormat(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ pFrameFormat: *mut D3D11_VIDEO_FRAME_FORMAT,
+ ) -> (),
+ fn VideoProcessorGetStreamColorSpace(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ pColorSpace: *mut D3D11_VIDEO_PROCESSOR_COLOR_SPACE,
+ ) -> (),
+ fn VideoProcessorGetStreamOutputRate(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ pOutputRate: *mut D3D11_VIDEO_PROCESSOR_OUTPUT_RATE,
+ pRepeatFrame: *mut BOOL,
+ pCustomRate: *mut DXGI_RATIONAL,
+ ) -> (),
+ fn VideoProcessorGetStreamSourceRect(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ pEnabled: *mut BOOL,
+ pRect: *mut RECT,
+ ) -> (),
+ fn VideoProcessorGetStreamDestRect(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ pEnabled: *mut BOOL,
+ pRect: *mut RECT,
+ ) -> (),
+ fn VideoProcessorGetStreamAlpha(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ pEnabled: *mut BOOL,
+ pAlpha: *mut FLOAT,
+ ) -> (),
+ fn VideoProcessorGetStreamPalette(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ Count: UINT,
+ pEntries: *mut UINT,
+ ) -> (),
+ fn VideoProcessorGetStreamPixelAspectRatio(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ pEnabled: *mut BOOL,
+ pSourceAspectRatio: *mut DXGI_RATIONAL,
+ pDestinationAspectRatio: *mut DXGI_RATIONAL,
+ ) -> (),
+ fn VideoProcessorGetStreamLumaKey(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ pEnabled: *mut BOOL,
+ pLower: *mut FLOAT,
+ pUpper: *mut FLOAT,
+ ) -> (),
+ fn VideoProcessorGetStreamStereoFormat(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ pEnabled: *mut BOOL,
+ pFormat: *mut D3D11_VIDEO_PROCESSOR_STEREO_FORMAT,
+ pLeftViewFrame0: *mut BOOL,
+ pBaseViewFrame0: *mut BOOL,
+ pFlipMode: *mut D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE,
+ MonoOffset: *mut c_int,
+ ) -> (),
+ fn VideoProcessorGetStreamAutoProcessingMode(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ pEnabled: *mut BOOL,
+ ) -> (),
+ fn VideoProcessorGetStreamFilter(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ Filter: D3D11_VIDEO_PROCESSOR_FILTER,
+ pEnabled: *mut BOOL,
+ pLevel: *mut c_int,
+ ) -> (),
+ fn VideoProcessorGetStreamExtension(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ pExtensionGuid: *const GUID,
+ DataSize: UINT,
+ pData: *mut c_void,
+ ) -> HRESULT,
+ fn VideoProcessorBlt(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ pView: *mut ID3D11VideoProcessorOutputView,
+ OutputFrame: UINT,
+ StreamCount: UINT,
+ pStreams: *const D3D11_VIDEO_PROCESSOR_STREAM,
+ ) -> HRESULT,
+ fn NegotiateCryptoSessionKeyExchange(
+ pCryptoSession: *mut ID3D11CryptoSession,
+ DataSize: UINT,
+ pData: *mut c_void,
+ ) -> HRESULT,
+ fn EncryptionBlt(
+ pCryptoSession: *mut ID3D11CryptoSession,
+ pSrcSurface: *mut ID3D11Texture2D,
+ pDstSurface: *mut ID3D11Texture2D,
+ IVSize: UINT,
+ pIV: *mut c_void,
+ ) -> HRESULT,
+ fn DecryptionBlt(
+ pCryptoSession: *mut ID3D11CryptoSession,
+ pSrcSurface: *mut ID3D11Texture2D,
+ pDstSurface: *mut ID3D11Texture2D,
+ pEncryptedBlockInfo: *mut D3D11_ENCRYPTED_BLOCK_INFO,
+ ContentKeySize: UINT,
+ pContentKey: *const c_void,
+ IVSize: UINT,
+ pIV: *mut c_void,
+ ) -> HRESULT,
+ fn StartSessionKeyRefresh(
+ pCryptoSession: *mut ID3D11CryptoSession,
+ RandomNumberSize: UINT,
+ pRandomNumber: *mut c_void,
+ ) -> HRESULT,
+ fn FinishSessionKeyRefresh(
+ pCryptoSession: *mut ID3D11CryptoSession,
+ ) -> HRESULT,
+ fn GetEncryptionBltKey(
+ pCryptoSession: *mut ID3D11CryptoSession,
+ KeySize: UINT,
+ pReadbackKey: *mut c_void,
+ ) -> HRESULT,
+ fn NegotiateAuthenticatedChannelKeyExchange(
+ pChannel: *mut ID3D11AuthenticatedChannel,
+ DataSize: UINT,
+ pData: *mut c_void,
+ ) -> HRESULT,
+ fn QueryAuthenticatedChannel(
+ pChannel: *mut ID3D11AuthenticatedChannel,
+ InputSize: UINT,
+ pInput: *const c_void,
+ OutputSize: UINT,
+ pOutput: *mut c_void,
+ ) -> HRESULT,
+ fn ConfigureAuthenticatedChannel(
+ pChannel: *mut ID3D11AuthenticatedChannel,
+ InputSize: UINT,
+ pInput: *const c_void,
+ pOutput: *mut D3D11_AUTHENTICATED_CONFIGURE_OUTPUT,
+ ) -> HRESULT,
+ fn VideoProcessorSetStreamRotation(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ Enable: BOOL,
+ Rotation: D3D11_VIDEO_PROCESSOR_ROTATION,
+ ) -> HRESULT,
+ fn VideoProcessorGetStreamRotation(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ pEnable: *mut BOOL,
+ pRotation: *mut D3D11_VIDEO_PROCESSOR_ROTATION,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x10ec4d5b, 0x975a, 0x4689, 0xb9, 0xe4, 0xd0, 0xaa, 0xc3, 0x0f, 0xe3, 0x33)]
+interface ID3D11VideoDevice(ID3D11VideoDeviceVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateVideoDecoder(
+ pVideoDesc: *const D3D11_VIDEO_DECODER_DESC,
+ pConfig: *const D3D11_VIDEO_DECODER_CONFIG,
+ ppDecoder: *mut *mut ID3D11VideoDecoder,
+ ) -> HRESULT,
+ fn CreateVideoProcessor(
+ pEnum: *mut ID3D11VideoProcessorEnumerator,
+ RateConversionIndex: UINT,
+ ppVideoProcessor: *mut *mut ID3D11VideoProcessor,
+ ) -> HRESULT,
+ fn CreateAuthenticatedChannel(
+ ChannelType: D3D11_AUTHENTICATED_CHANNEL_TYPE,
+ ppAuthenticatedChannel: *mut *mut ID3D11AuthenticatedChannel,
+ ) -> HRESULT,
+ fn CreateCryptoSession(
+ pCryptoType: *const GUID,
+ pDecoderProfile: *const GUID,
+ pKeyExchangeType: *const GUID,
+ ppCryptoSession: *mut *mut ID3D11CryptoSession,
+ ) -> HRESULT,
+ fn CreateVideoDecoderOutputView(
+ pResource: *mut ID3D11Resource,
+ pDesc: *const D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC,
+ ppVDOVView: *mut *mut ID3D11VideoDecoderOutputView,
+ ) -> HRESULT,
+ fn CreateVideoProcessorInputView(
+ pResource: *mut ID3D11Resource,
+ pEnum: *mut ID3D11VideoProcessorEnumerator,
+ pDesc: *const D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC,
+ ppVPIView: *mut *mut ID3D11VideoProcessorInputView,
+ ) -> HRESULT,
+ fn CreateVideoProcessorOutputView(
+ pResource: *mut ID3D11Resource,
+ pEnum: *mut ID3D11VideoProcessorEnumerator,
+ pDesc: *const D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC,
+ ppVPOView: *mut *mut ID3D11VideoProcessorOutputView,
+ ) -> HRESULT,
+ fn CreateVideoProcessorEnumerator(
+ pDesc: *const D3D11_VIDEO_PROCESSOR_CONTENT_DESC,
+ ppEnum: *mut *mut ID3D11VideoProcessorEnumerator,
+ ) -> HRESULT,
+ fn GetVideoDecoderProfileCount() -> UINT,
+ fn GetVideoDecoderProfile(
+ Index: UINT,
+ pDecoderProfile: *mut GUID,
+ ) -> HRESULT,
+ fn CheckVideoDecoderFormat(
+ pDecoderProfile: *const GUID,
+ Format: DXGI_FORMAT,
+ pSupported: *mut BOOL,
+ ) -> HRESULT,
+ fn GetVideoDecoderConfigCount(
+ pDesc: *const D3D11_VIDEO_DECODER_DESC,
+ pCount: *mut UINT,
+ ) -> HRESULT,
+ fn GetVideoDecoderConfig(
+ pDesc: *const D3D11_VIDEO_DECODER_DESC,
+ Index: UINT,
+ pConfig: *mut D3D11_VIDEO_DECODER_CONFIG,
+ ) -> HRESULT,
+ fn GetContentProtectionCaps(
+ pCryptoType: *const GUID,
+ pDecoderProfile: *const GUID,
+ pCaps: *mut D3D11_VIDEO_CONTENT_PROTECTION_CAPS,
+ ) -> HRESULT,
+ fn CheckCryptoKeyExchange(
+ pCryptoType: *const GUID,
+ pDecoderProfile: *const GUID,
+ Index: UINT,
+ pKeyExchangeType: *mut GUID,
+ ) -> HRESULT,
+ fn SetPrivateData(
+ guid: REFGUID,
+ DataSize: UINT,
+ pData: *const c_void,
+ ) -> HRESULT,
+ fn SetPrivateDataInterface(
+ guid: REFGUID,
+ pData: *const IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xdb6f6ddb, 0xac77, 0x4e88, 0x82, 0x53, 0x81, 0x9d, 0xf9, 0xbb, 0xf1, 0x40)]
+interface ID3D11Device(ID3D11DeviceVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateBuffer(
+ pDesc: *const D3D11_BUFFER_DESC,
+ pInitialData: *const D3D11_SUBRESOURCE_DATA,
+ ppBuffer: *mut *mut ID3D11Buffer,
+ ) -> HRESULT,
+ fn CreateTexture1D(
+ pDesc: *const D3D11_TEXTURE1D_DESC,
+ pInitialData: *const D3D11_SUBRESOURCE_DATA,
+ ppTexture1D: *mut *mut ID3D11Texture1D,
+ ) -> HRESULT,
+ fn CreateTexture2D(
+ pDesc: *const D3D11_TEXTURE2D_DESC,
+ pInitialData: *const D3D11_SUBRESOURCE_DATA,
+ ppTexture2D: *mut *mut ID3D11Texture2D,
+ ) -> HRESULT,
+ fn CreateTexture3D(
+ pDesc: *const D3D11_TEXTURE3D_DESC,
+ pInitialData: *const D3D11_SUBRESOURCE_DATA,
+ ppTexture3D: *mut *mut ID3D11Texture3D,
+ ) -> HRESULT,
+ fn CreateShaderResourceView(
+ pResource: *mut ID3D11Resource,
+ pDesc: *const D3D11_SHADER_RESOURCE_VIEW_DESC,
+ ppSRView: *mut *mut ID3D11ShaderResourceView,
+ ) -> HRESULT,
+ fn CreateUnorderedAccessView(
+ pResource: *mut ID3D11Resource,
+ pDesc: *const D3D11_UNORDERED_ACCESS_VIEW_DESC,
+ ppUAView: *mut *mut ID3D11UnorderedAccessView,
+ ) -> HRESULT,
+ fn CreateRenderTargetView(
+ pResource: *mut ID3D11Resource,
+ pDesc: *const D3D11_RENDER_TARGET_VIEW_DESC,
+ ppRTView: *mut *mut ID3D11RenderTargetView,
+ ) -> HRESULT,
+ fn CreateDepthStencilView(
+ pResource: *mut ID3D11Resource,
+ pDesc: *const D3D11_DEPTH_STENCIL_VIEW_DESC,
+ ppDepthStencilView: *mut *mut ID3D11DepthStencilView,
+ ) -> HRESULT,
+ fn CreateInputLayout(
+ pInputElementDescs: *const D3D11_INPUT_ELEMENT_DESC,
+ NumElements: UINT,
+ pShaderBytecodeWithInputSignature: *const c_void,
+ BytecodeLength: SIZE_T,
+ ppInputLayout: *mut *mut ID3D11InputLayout,
+ ) -> HRESULT,
+ fn CreateVertexShader(
+ pShaderBytecode: *const c_void,
+ BytecodeLength: SIZE_T,
+ pClassLinkage: *mut ID3D11ClassLinkage,
+ ppVertexShader: *mut *mut ID3D11VertexShader,
+ ) -> HRESULT,
+ fn CreateGeometryShader(
+ pShaderBytecode: *const c_void,
+ BytecodeLength: SIZE_T,
+ pClassLinkage: *mut ID3D11ClassLinkage,
+ ppGeometryShader: *mut *mut ID3D11GeometryShader,
+ ) -> HRESULT,
+ fn CreateGeometryShaderWithStreamOutput(
+ pShaderBytecode: *const c_void,
+ BytecodeLength: SIZE_T,
+ pSODeclaration: *const D3D11_SO_DECLARATION_ENTRY,
+ NumEntries: UINT,
+ pBufferStrides: *const UINT,
+ NumStrides: UINT,
+ RasterizedStream: UINT,
+ pClassLinkage: *mut ID3D11ClassLinkage,
+ ppGeometryShader: *mut *mut ID3D11GeometryShader,
+ ) -> HRESULT,
+ fn CreatePixelShader(
+ pShaderBytecode: *const c_void,
+ BytecodeLength: SIZE_T,
+ pClassLinkage: *mut ID3D11ClassLinkage,
+ ppPixelShader: *mut *mut ID3D11PixelShader,
+ ) -> HRESULT,
+ fn CreateHullShader(
+ pShaderBytecode: *const c_void,
+ BytecodeLength: SIZE_T,
+ pClassLinkage: *mut ID3D11ClassLinkage,
+ ppHullShader: *mut *mut ID3D11HullShader,
+ ) -> HRESULT,
+ fn CreateDomainShader(
+ pShaderBytecode: *const c_void,
+ BytecodeLength: SIZE_T,
+ pClassLinkage: *mut ID3D11ClassLinkage,
+ ppDomainShader: *mut *mut ID3D11DomainShader,
+ ) -> HRESULT,
+ fn CreateComputeShader(
+ pShaderBytecode: *const c_void,
+ BytecodeLength: SIZE_T,
+ pClassLinkage: *mut ID3D11ClassLinkage,
+ ppComputeShader: *mut *mut ID3D11ComputeShader,
+ ) -> HRESULT,
+ fn CreateClassLinkage(
+ ppLinkage: *mut *mut ID3D11ClassLinkage,
+ ) -> HRESULT,
+ fn CreateBlendState(
+ pBlendStateDesc: *const D3D11_BLEND_DESC,
+ ppBlendState: *mut *mut ID3D11BlendState,
+ ) -> HRESULT,
+ fn CreateDepthStencilState(
+ pDepthStencilDesc: *const D3D11_DEPTH_STENCIL_DESC,
+ ppDepthStencilState: *mut *mut ID3D11DepthStencilState,
+ ) -> HRESULT,
+ fn CreateRasterizerState(
+ pRasterizerDesc: *const D3D11_RASTERIZER_DESC,
+ ppRasterizerState: *mut *mut ID3D11RasterizerState,
+ ) -> HRESULT,
+ fn CreateSamplerState(
+ pSamplerDesc: *const D3D11_SAMPLER_DESC,
+ ppSamplerState: *mut *mut ID3D11SamplerState,
+ ) -> HRESULT,
+ fn CreateQuery(
+ pQueryDesc: *const D3D11_QUERY_DESC,
+ ppQuery: *mut *mut ID3D11Query,
+ ) -> HRESULT,
+ fn CreatePredicate(
+ pPredicateDesc: *const D3D11_QUERY_DESC,
+ ppPredicate: *mut *mut ID3D11Predicate,
+ ) -> HRESULT,
+ fn CreateCounter(
+ pCounterDesc: *const D3D11_COUNTER_DESC,
+ ppCounter: *mut *mut ID3D11Counter,
+ ) -> HRESULT,
+ fn CreateDeferredContext(
+ ContextFlags: UINT,
+ ppDeferredContext: *mut *mut ID3D11DeviceContext,
+ ) -> HRESULT,
+ fn OpenSharedResource(
+ hResource: HANDLE,
+ ReturnedInterface: REFIID,
+ ppResource: *mut *mut c_void,
+ ) -> HRESULT,
+ fn CheckFormatSupport(
+ Format: DXGI_FORMAT,
+ pFormatSupport: *mut UINT,
+ ) -> HRESULT,
+ fn CheckMultisampleQualityLevels(
+ Format: DXGI_FORMAT,
+ SampleCount: UINT,
+ pNumQualityLevels: *mut UINT,
+ ) -> HRESULT,
+ fn CheckCounterInfo(
+ pCounterInfo: *mut D3D11_COUNTER_INFO,
+ ) -> (),
+ fn CheckCounter(
+ pDesc: *const D3D11_COUNTER_DESC,
+ pType: *mut D3D11_COUNTER_TYPE,
+ pActiveCounters: *mut UINT,
+ szName: LPSTR,
+ pNameLength: *mut UINT,
+ szUnits: LPSTR,
+ pUnitsLength: *mut UINT,
+ szDescription: LPSTR,
+ pDescriptionLength: *mut UINT,
+ ) -> HRESULT,
+ fn CheckFeatureSupport(
+ Feature: D3D11_FEATURE,
+ pFeatureSupportData: *mut c_void,
+ FeatureSupportDataSize: UINT,
+ ) -> HRESULT,
+ fn GetPrivateData(
+ guid: REFGUID,
+ pDataSize: *mut UINT,
+ pData: *mut c_void,
+ ) -> HRESULT,
+ fn SetPrivateData(
+ guid: REFGUID,
+ DataSize: UINT,
+ pData: *const c_void,
+ ) -> HRESULT,
+ fn SetPrivateDataInterface(
+ guid: REFGUID,
+ pData: *const IUnknown,
+ ) -> HRESULT,
+ fn GetFeatureLevel() -> D3D_FEATURE_LEVEL,
+ fn GetCreationFlags() -> UINT,
+ fn GetDeviceRemovedReason() -> HRESULT,
+ fn GetImmediateContext(
+ ppImmediateContext: *mut *mut ID3D11DeviceContext,
+ ) -> (),
+ fn SetExceptionMode(
+ RaiseFlags: UINT,
+ ) -> HRESULT,
+ fn GetExceptionMode() -> UINT,
+}}
+ENUM!{enum D3D11_CREATE_DEVICE_FLAG {
+ D3D11_CREATE_DEVICE_SINGLETHREADED = 0x1,
+ D3D11_CREATE_DEVICE_DEBUG = 0x2,
+ D3D11_CREATE_DEVICE_SWITCH_TO_REF = 0x4,
+ D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS = 0x8,
+ D3D11_CREATE_DEVICE_BGRA_SUPPORT = 0x20,
+ D3D11_CREATE_DEVICE_DEBUGGABLE = 0x40,
+ D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY = 0x80,
+ D3D11_CREATE_DEVICE_DISABLE_GPU_TIMEOUT = 0x100,
+ D3D11_CREATE_DEVICE_VIDEO_SUPPORT = 0x800,
+}}
+pub const D3D11_SDK_VERSION: DWORD = 7;
+#[inline]
+pub fn D3D11CalcSubresource(MipSlice: UINT, ArraySlice: UINT, MipLevels: UINT) -> UINT {
+ MipSlice + ArraySlice * MipLevels
+}
+extern "system" {
+ pub fn D3D11CreateDevice(
+ pAdapter: *mut IDXGIAdapter,
+ DriverType: D3D_DRIVER_TYPE,
+ Software: HMODULE,
+ Flags: UINT,
+ pFeatureLevels: *const D3D_FEATURE_LEVEL,
+ FeatureLevels: UINT,
+ SDKVersion: UINT,
+ ppDevice: *mut *mut ID3D11Device,
+ pFeatureLevel: *mut D3D_FEATURE_LEVEL,
+ ppImmediateContext: *mut *mut ID3D11DeviceContext,
+ ) -> HRESULT;
+ pub fn D3D11CreateDeviceAndSwapChain(
+ pAdapter: *mut IDXGIAdapter,
+ DriverType: D3D_DRIVER_TYPE,
+ Software: HMODULE,
+ Flags: UINT,
+ pFeatureLevels: *const D3D_FEATURE_LEVEL,
+ FeatureLevels: UINT,
+ SDKVersion: UINT,
+ pSwapChainDesc: *const DXGI_SWAP_CHAIN_DESC,
+ ppSwapChain: *mut *mut IDXGISwapChain,
+ ppDevice: *mut *mut ID3D11Device,
+ pFeatureLevel: *mut D3D_FEATURE_LEVEL,
+ ppImmediateContext: *mut *mut ID3D11DeviceContext,
+ ) -> HRESULT;
+}
+DEFINE_GUID!{IID_ID3D11DeviceChild,
+ 0x1841e5c8, 0x16b0, 0x489b, 0xbc, 0xc8, 0x44, 0xcf, 0xb0, 0xd5, 0xde, 0xae}
+DEFINE_GUID!{IID_ID3D11DepthStencilState,
+ 0x03823efb, 0x8d8f, 0x4e1c, 0x9a, 0xa2, 0xf6, 0x4b, 0xb2, 0xcb, 0xfd, 0xf1}
+DEFINE_GUID!{IID_ID3D11BlendState,
+ 0x75b68faa, 0x347d, 0x4159, 0x8f, 0x45, 0xa0, 0x64, 0x0f, 0x01, 0xcd, 0x9a}
+DEFINE_GUID!{IID_ID3D11RasterizerState,
+ 0x9bb4ab81, 0xab1a, 0x4d8f, 0xb5, 0x06, 0xfc, 0x04, 0x20, 0x0b, 0x6e, 0xe7}
+DEFINE_GUID!{IID_ID3D11Resource,
+ 0xdc8e63f3, 0xd12b, 0x4952, 0xb4, 0x7b, 0x5e, 0x45, 0x02, 0x6a, 0x86, 0x2d}
+DEFINE_GUID!{IID_ID3D11Buffer,
+ 0x48570b85, 0xd1ee, 0x4fcd, 0xa2, 0x50, 0xeb, 0x35, 0x07, 0x22, 0xb0, 0x37}
+DEFINE_GUID!{IID_ID3D11Texture1D,
+ 0xf8fb5c27, 0xc6b3, 0x4f75, 0xa4, 0xc8, 0x43, 0x9a, 0xf2, 0xef, 0x56, 0x4c}
+DEFINE_GUID!{IID_ID3D11Texture2D,
+ 0x6f15aaf2, 0xd208, 0x4e89, 0x9a, 0xb4, 0x48, 0x95, 0x35, 0xd3, 0x4f, 0x9c}
+DEFINE_GUID!{IID_ID3D11Texture3D,
+ 0x037e866e, 0xf56d, 0x4357, 0xa8, 0xaf, 0x9d, 0xab, 0xbe, 0x6e, 0x25, 0x0e}
+DEFINE_GUID!{IID_ID3D11View,
+ 0x839d1216, 0xbb2e, 0x412b, 0xb7, 0xf4, 0xa9, 0xdb, 0xeb, 0xe0, 0x8e, 0xd1}
+DEFINE_GUID!{IID_ID3D11ShaderResourceView,
+ 0xb0e06fe0, 0x8192, 0x4e1a, 0xb1, 0xca, 0x36, 0xd7, 0x41, 0x47, 0x10, 0xb2}
+DEFINE_GUID!{IID_ID3D11RenderTargetView,
+ 0xdfdba067, 0x0b8d, 0x4865, 0x87, 0x5b, 0xd7, 0xb4, 0x51, 0x6c, 0xc1, 0x64}
+DEFINE_GUID!{IID_ID3D11DepthStencilView,
+ 0x9fdac92a, 0x1876, 0x48c3, 0xaf, 0xad, 0x25, 0xb9, 0x4f, 0x84, 0xa9, 0xb6}
+DEFINE_GUID!{IID_ID3D11UnorderedAccessView,
+ 0x28acf509, 0x7f5c, 0x48f6, 0x86, 0x11, 0xf3, 0x16, 0x01, 0x0a, 0x63, 0x80}
+DEFINE_GUID!{IID_ID3D11VertexShader,
+ 0x3b301d64, 0xd678, 0x4289, 0x88, 0x97, 0x22, 0xf8, 0x92, 0x8b, 0x72, 0xf3}
+DEFINE_GUID!{IID_ID3D11HullShader,
+ 0x8e5c6061, 0x628a, 0x4c8e, 0x82, 0x64, 0xbb, 0xe4, 0x5c, 0xb3, 0xd5, 0xdd}
+DEFINE_GUID!{IID_ID3D11DomainShader,
+ 0xf582c508, 0x0f36, 0x490c, 0x99, 0x77, 0x31, 0xee, 0xce, 0x26, 0x8c, 0xfa}
+DEFINE_GUID!{IID_ID3D11GeometryShader,
+ 0x38325b96, 0xeffb, 0x4022, 0xba, 0x02, 0x2e, 0x79, 0x5b, 0x70, 0x27, 0x5c}
+DEFINE_GUID!{IID_ID3D11PixelShader,
+ 0xea82e40d, 0x51dc, 0x4f33, 0x93, 0xd4, 0xdb, 0x7c, 0x91, 0x25, 0xae, 0x8c}
+DEFINE_GUID!{IID_ID3D11ComputeShader,
+ 0x4f5b196e, 0xc2bd, 0x495e, 0xbd, 0x01, 0x1f, 0xde, 0xd3, 0x8e, 0x49, 0x69}
+DEFINE_GUID!{IID_ID3D11InputLayout,
+ 0xe4819ddc, 0x4cf0, 0x4025, 0xbd, 0x26, 0x5d, 0xe8, 0x2a, 0x3e, 0x07, 0xb7}
+DEFINE_GUID!{IID_ID3D11SamplerState,
+ 0xda6fea51, 0x564c, 0x4487, 0x98, 0x10, 0xf0, 0xd0, 0xf9, 0xb4, 0xe3, 0xa5}
+DEFINE_GUID!{IID_ID3D11Asynchronous,
+ 0x4b35d0cd, 0x1e15, 0x4258, 0x9c, 0x98, 0x1b, 0x13, 0x33, 0xf6, 0xdd, 0x3b}
+DEFINE_GUID!{IID_ID3D11Query,
+ 0xd6c00747, 0x87b7, 0x425e, 0xb8, 0x4d, 0x44, 0xd1, 0x08, 0x56, 0x0a, 0xfd}
+DEFINE_GUID!{IID_ID3D11Predicate,
+ 0x9eb576dd, 0x9f77, 0x4d86, 0x81, 0xaa, 0x8b, 0xab, 0x5f, 0xe4, 0x90, 0xe2}
+DEFINE_GUID!{IID_ID3D11Counter,
+ 0x6e8c49fb, 0xa371, 0x4770, 0xb4, 0x40, 0x29, 0x08, 0x60, 0x22, 0xb7, 0x41}
+DEFINE_GUID!{IID_ID3D11ClassInstance,
+ 0xa6cd7faa, 0xb0b7, 0x4a2f, 0x94, 0x36, 0x86, 0x62, 0xa6, 0x57, 0x97, 0xcb}
+DEFINE_GUID!{IID_ID3D11ClassLinkage,
+ 0xddf57cba, 0x9543, 0x46e4, 0xa1, 0x2b, 0xf2, 0x07, 0xa0, 0xfe, 0x7f, 0xed}
+DEFINE_GUID!{IID_ID3D11CommandList,
+ 0xa24bc4d1, 0x769e, 0x43f7, 0x80, 0x13, 0x98, 0xff, 0x56, 0x6c, 0x18, 0xe2}
+DEFINE_GUID!{IID_ID3D11DeviceContext,
+ 0xc0bfa96c, 0xe089, 0x44fb, 0x8e, 0xaf, 0x26, 0xf8, 0x79, 0x61, 0x90, 0xda}
+DEFINE_GUID!{IID_ID3D11VideoDecoder,
+ 0x3c9c5b51, 0x995d, 0x48d1, 0x9b, 0x8d, 0xfa, 0x5c, 0xae, 0xde, 0xd6, 0x5c}
+DEFINE_GUID!{IID_ID3D11VideoProcessorEnumerator,
+ 0x31627037, 0x53ab, 0x4200, 0x90, 0x61, 0x05, 0xfa, 0xa9, 0xab, 0x45, 0xf9}
+DEFINE_GUID!{IID_ID3D11VideoProcessor,
+ 0x1d7b0652, 0x185f, 0x41c6, 0x85, 0xce, 0x0c, 0x5b, 0xe3, 0xd4, 0xae, 0x6c}
+DEFINE_GUID!{IID_ID3D11AuthenticatedChannel,
+ 0x3015a308, 0xdcbd, 0x47aa, 0xa7, 0x47, 0x19, 0x24, 0x86, 0xd1, 0x4d, 0x4a}
+DEFINE_GUID!{IID_ID3D11CryptoSession,
+ 0x9b32f9ad, 0xbdcc, 0x40a6, 0xa3, 0x9d, 0xd5, 0xc8, 0x65, 0x84, 0x57, 0x20}
+DEFINE_GUID!{IID_ID3D11VideoDecoderOutputView,
+ 0xc2931aea, 0x2a85, 0x4f20, 0x86, 0x0f, 0xfb, 0xa1, 0xfd, 0x25, 0x6e, 0x18}
+DEFINE_GUID!{IID_ID3D11VideoProcessorInputView,
+ 0x11ec5a5f, 0x51dc, 0x4945, 0xab, 0x34, 0x6e, 0x8c, 0x21, 0x30, 0x0e, 0xa5}
+DEFINE_GUID!{IID_ID3D11VideoProcessorOutputView,
+ 0xa048285e, 0x25a9, 0x4527, 0xbd, 0x93, 0xd6, 0x8b, 0x68, 0xc4, 0x42, 0x54}
+DEFINE_GUID!{IID_ID3D11VideoContext,
+ 0x61f21c45, 0x3c0e, 0x4a74, 0x9c, 0xea, 0x67, 0x10, 0x0d, 0x9a, 0xd5, 0xe4}
+DEFINE_GUID!{IID_ID3D11VideoDevice,
+ 0x10ec4d5b, 0x975a, 0x4689, 0xb9, 0xe4, 0xd0, 0xaa, 0xc3, 0x0f, 0xe3, 0x33}
+DEFINE_GUID!{IID_ID3D11Device,
+ 0xdb6f6ddb, 0xac77, 0x4e88, 0x82, 0x53, 0x81, 0x9d, 0xf9, 0xbb, 0xf1, 0x40}
diff --git a/vendor/winapi/src/um/d3d11_1.rs b/vendor/winapi/src/um/d3d11_1.rs
new file mode 100644
index 000000000..7b0b46ec2
--- /dev/null
+++ b/vendor/winapi/src/um/d3d11_1.rs
@@ -0,0 +1,484 @@
+// 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 ctypes::c_void;
+use shared::basetsd::{UINT64, UINT8};
+use shared::dxgiformat::DXGI_FORMAT;
+use shared::dxgitype::{DXGI_COLOR_SPACE_TYPE, DXGI_RATIONAL};
+use shared::guiddef::{GUID, REFIID};
+use shared::minwindef::{BOOL, BYTE, DWORD, FLOAT, INT, UINT};
+use um::d3d11::{
+ D3D11_BLEND, D3D11_BLEND_OP, D3D11_BOX, D3D11_CULL_MODE, D3D11_FILL_MODE, D3D11_RECT,
+ D3D11_VIDEO_DECODER_BUFFER_TYPE, D3D11_VIDEO_DECODER_CONFIG, D3D11_VIDEO_DECODER_DESC,
+ ID3D11BlendState, ID3D11BlendStateVtbl, ID3D11Buffer, ID3D11CryptoSession, ID3D11Device,
+ ID3D11DeviceChild, ID3D11DeviceChildVtbl, ID3D11DeviceContext, ID3D11DeviceContextVtbl,
+ ID3D11DeviceVtbl, ID3D11RasterizerState, ID3D11RasterizerStateVtbl, ID3D11Resource,
+ ID3D11VideoContext, ID3D11VideoContextVtbl, ID3D11VideoDecoder, ID3D11VideoDevice,
+ ID3D11VideoDeviceVtbl, ID3D11VideoProcessor, ID3D11VideoProcessorEnumerator,
+ ID3D11VideoProcessorEnumeratorVtbl, ID3D11View
+};
+use um::d3dcommon::D3D_FEATURE_LEVEL;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HANDLE, HRESULT, LPCWSTR};
+DEFINE_GUID!{IID_ID3D11BlendState1,
+ 0xcc86fabe, 0xda55, 0x401d, 0x85, 0xe7, 0xe3, 0xc9, 0xde, 0x28, 0x77, 0xe9}
+DEFINE_GUID!{IID_ID3D11RasterizerState1,
+ 0x1217d7a6, 0x5039, 0x418c, 0xb0, 0x42, 0x9c, 0xbe, 0x25, 0x6a, 0xfd, 0x6e}
+DEFINE_GUID!{IID_ID3DDeviceContextState,
+ 0x5c1e0d8a, 0x7c23, 0x48f9, 0x8c, 0x59, 0xa9, 0x29, 0x58, 0xce, 0xff, 0x11}
+DEFINE_GUID!{IID_ID3D11DeviceContext1,
+ 0xbb2c6faa, 0xb5fb, 0x4082, 0x8e, 0x6b, 0x38, 0x8b, 0x8c, 0xfa, 0x90, 0xe1}
+DEFINE_GUID!{IID_ID3D11VideoContext1,
+ 0xa7f026da, 0xa5f8, 0x4487, 0xa5, 0x64, 0x15, 0xe3, 0x43, 0x57, 0x65, 0x1e}
+DEFINE_GUID!{IID_ID3D11VideoDevice1,
+ 0x29da1d51, 0x1321, 0x4454, 0x80, 0x4b, 0xf5, 0xfc, 0x9f, 0x86, 0x1f, 0x0f}
+DEFINE_GUID!{IID_ID3D11VideoProcessorEnumerator1,
+ 0x465217f2, 0x5568, 0x43cf, 0xb5, 0xb9, 0xf6, 0x1d, 0x54, 0x53, 0x1c, 0xa1}
+DEFINE_GUID!{IID_ID3D11Device1,
+ 0xa04bfb29, 0x08ef, 0x43d6, 0xa4, 0x9c, 0xa9, 0xbd, 0xbd, 0xcb, 0xe6, 0x86}
+DEFINE_GUID!{IID_ID3DUserDefinedAnnotation,
+ 0xb2daad8b, 0x03d4, 0x4dbf, 0x95, 0xeb, 0x32, 0xab, 0x4b, 0x63, 0xd0, 0xab}
+ENUM!{enum D3D11_COPY_FLAGS {
+ D3D11_COPY_NO_OVERWRITE = 0x00000001,
+ D3D11_COPY_DISCARD = 0x00000002,
+}}
+ENUM!{enum D3D11_LOGIC_OP {
+ D3D11_LOGIC_OP_CLEAR = 0,
+ D3D11_LOGIC_OP_SET = 1,
+ D3D11_LOGIC_OP_COPY = 2,
+ D3D11_LOGIC_OP_COPY_INVERTED = 3,
+ D3D11_LOGIC_OP_NOOP = 4,
+ D3D11_LOGIC_OP_INVERT = 5,
+ D3D11_LOGIC_OP_AND = 6,
+ D3D11_LOGIC_OP_NAND = 7,
+ D3D11_LOGIC_OP_OR = 8,
+ D3D11_LOGIC_OP_NOR = 9,
+ D3D11_LOGIC_OP_XOR = 10,
+ D3D11_LOGIC_OP_EQUIV = 11,
+ D3D11_LOGIC_OP_AND_REVERSE = 12,
+ D3D11_LOGIC_OP_AND_INVERTED = 13,
+ D3D11_LOGIC_OP_OR_REVERSE = 14,
+ D3D11_LOGIC_OP_OR_INVERTED = 15,
+}}
+STRUCT!{struct D3D11_RENDER_TARGET_BLEND_DESC1 {
+ BlendEnable: BOOL,
+ LogicOpEnable: BOOL,
+ SrcBlend: D3D11_BLEND,
+ DestBlend: D3D11_BLEND,
+ BlendOp: D3D11_BLEND_OP,
+ SrcBlendAlpha: D3D11_BLEND,
+ DestBlendAlpha: D3D11_BLEND,
+ BlendOpAlpha: D3D11_BLEND_OP,
+ LogicOp: D3D11_LOGIC_OP,
+ RenderTargetWriteMask: UINT8,
+}}
+STRUCT!{struct D3D11_BLEND_DESC1 {
+ AlphaToCoverageEnable: BOOL,
+ IndependentBlendEnable: BOOL,
+ RenderTarget: [D3D11_RENDER_TARGET_BLEND_DESC1; 8],
+}}
+RIDL!{#[uuid(0xcc86fabe, 0xda55, 0x401d, 0x85, 0xe7, 0xe3, 0xc9, 0xde, 0x28, 0x77, 0xe9)]
+interface ID3D11BlendState1(ID3D11BlendState1Vtbl): ID3D11BlendState(ID3D11BlendStateVtbl) {
+ fn GetDesc1(
+ pDesc: *mut D3D11_BLEND_DESC1,
+ ) -> (),
+}}
+STRUCT!{struct D3D11_RASTERIZER_DESC1 {
+ FillMode: D3D11_FILL_MODE,
+ CullMode: D3D11_CULL_MODE,
+ FrontCounterClockwise: BOOL,
+ DepthBias: INT,
+ DepthBiasClamp: FLOAT,
+ SlopeScaledDepthBias: FLOAT,
+ DepthClipEnable: BOOL,
+ ScissorEnable: BOOL,
+ MultisampleEnable: BOOL,
+ AntialiasedLineEnable: BOOL,
+ ForcedSampleCount: UINT,
+}}
+RIDL!{#[uuid(0x1217d7a6, 0x5039, 0x418c, 0xb0, 0x42, 0x9c, 0xbe, 0x25, 0x6a, 0xfd, 0x6e)]
+interface ID3D11RasterizerState1(ID3D11RasterizerState1Vtbl):
+ ID3D11RasterizerState(ID3D11RasterizerStateVtbl) {
+ fn GetDesc1(
+ pDesc: *mut D3D11_RASTERIZER_DESC1,
+ ) -> (),
+}}
+ENUM!{enum D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG {
+ D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED = 0x1,
+}}
+RIDL!{#[uuid(0x5c1e0d8a, 0x7c23, 0x48f9, 0x8c, 0x59, 0xa9, 0x29, 0x58, 0xce, 0xff, 0x11)]
+interface ID3DDeviceContextState(ID3DDeviceContextStateVtbl):
+ ID3D11DeviceChild(ID3D11DeviceChildVtbl) {}}
+RIDL!{#[uuid(0xbb2c6faa, 0xb5fb, 0x4082, 0x8e, 0x6b, 0x38, 0x8b, 0x8c, 0xfa, 0x90, 0xe1)]
+interface ID3D11DeviceContext1(ID3D11DeviceContext1Vtbl):
+ ID3D11DeviceContext(ID3D11DeviceContextVtbl) {
+ fn CopySubresourceRegion1(
+ pDstResource: *mut ID3D11Resource,
+ DstSubresource: UINT,
+ DstX: UINT,
+ DstY: UINT,
+ DstZ: UINT,
+ pSrcResource: *mut ID3D11Resource,
+ SrcSubresource: UINT,
+ pSrcBox: *const D3D11_BOX,
+ CopyFlags: UINT,
+ ) -> (),
+ fn UpdateSubresource1(
+ pDstResource: *mut ID3D11Resource,
+ DstSubresource: UINT,
+ pDstBox: *const D3D11_BOX,
+ pSrcData: *mut c_void,
+ SrcRowPitch: UINT,
+ SrcDepthPitch: UINT,
+ CopyFlags: UINT,
+ ) -> (),
+ fn DiscardResource(
+ pResource: *mut ID3D11Resource,
+ ) -> (),
+ fn DiscardView(
+ pResource: *mut ID3D11Resource,
+ ) -> (),
+ fn VSSetConstantBuffers1(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *const *mut ID3D11Buffer,
+ pFirstConstant: *const UINT,
+ pNumConstants: *const UINT,
+ ) -> (),
+ fn HSSetConstantBuffers1(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *const *mut ID3D11Buffer,
+ pFirstConstant: *const UINT,
+ pNumConstants: *const UINT,
+ ) -> (),
+ fn DSSetConstantBuffers1(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *const *mut ID3D11Buffer,
+ pFirstConstant: *const UINT,
+ pNumConstants: *const UINT,
+ ) -> (),
+ fn GSSetConstantBuffers1(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *const *mut ID3D11Buffer,
+ pFirstConstant: *const UINT,
+ pNumConstants: *const UINT,
+ ) -> (),
+ fn PSSetConstantBuffers1(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *const *mut ID3D11Buffer,
+ pFirstConstant: *const UINT,
+ pNumConstants: *const UINT,
+ ) -> (),
+ fn CSSetConstantBuffers1(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *const *mut ID3D11Buffer,
+ pFirstConstant: *const UINT,
+ pNumConstants: *const UINT,
+ ) -> (),
+ fn VSGetConstantBuffers1(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *mut *mut ID3D11Buffer,
+ pFirstConstant: *mut UINT,
+ pNumConstants: *mut UINT,
+ ) -> (),
+ fn HSGetConstantBuffers1(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *mut *mut ID3D11Buffer,
+ pFirstConstant: *mut UINT,
+ pNumConstants: *mut UINT,
+ ) -> (),
+ fn DSGetConstantBuffers1(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *mut *mut ID3D11Buffer,
+ pFirstConstant: *mut UINT,
+ pNumConstants: *mut UINT,
+ ) -> (),
+ fn GSGetConstantBuffers1(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *mut *mut ID3D11Buffer,
+ pFirstConstant: *mut UINT,
+ pNumConstants: *mut UINT,
+ ) -> (),
+ fn PSGetConstantBuffers1(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *mut *mut ID3D11Buffer,
+ pFirstConstant: *mut UINT,
+ pNumConstants: *mut UINT,
+ ) -> (),
+ fn CSGetConstantBuffers1(
+ StartSlot: UINT,
+ NumBuffers: UINT,
+ ppConstantBuffers: *mut *mut ID3D11Buffer,
+ pFirstConstant: *mut UINT,
+ pNumConstants: *mut UINT,
+ ) -> (),
+ fn SwapDeviceContextState(
+ pState: *mut ID3DDeviceContextState,
+ ppPreviousState: *mut *mut ID3DDeviceContextState,
+ ) -> (),
+ fn ClearView(
+ pView: *mut ID3D11View,
+ Color: [FLOAT; 4],
+ pRect: *const D3D11_RECT,
+ NumRects: UINT,
+ ) -> (),
+ fn DiscardView1(
+ pResourceView: *mut ID3D11View,
+ pRects: *const D3D11_RECT,
+ NumRects: UINT,
+ ) -> (),
+}}
+STRUCT!{struct D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK {
+ ClearSize: UINT,
+ EncryptedSize: UINT,
+}}
+STRUCT!{struct D3D11_VIDEO_DECODER_BUFFER_DESC1 {
+ BufferType: D3D11_VIDEO_DECODER_BUFFER_TYPE,
+ DataOffset: UINT,
+ DataSize: UINT,
+ pIV: *mut c_void,
+ IVSize: UINT,
+ pSubSampleMappingBlock: *mut D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK,
+ SubSampleMappingCount: UINT,
+}}
+STRUCT!{struct D3D11_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION {
+ pCryptoSession: *mut ID3D11CryptoSession,
+ BlobSize: UINT,
+ pBlob: *mut c_void,
+ pKeyInfoId: *mut GUID,
+ PrivateDataSize: UINT,
+ pPrivateData: *mut c_void,
+}}
+ENUM!{enum D3D11_VIDEO_DECODER_CAPS {
+ D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE = 0x1,
+ D3D11_VIDEO_DECODER_CAPS_NON_REAL_TIME = 0x02,
+ D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_DYNAMIC = 0x04,
+ D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_REQUIRED = 0x08,
+ D3D11_VIDEO_DECODER_CAPS_UNSUPPORTED = 0x10,
+}}
+ENUM!{enum D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINTS {
+ D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_ROTATION = 0x01,
+ D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_RESIZE = 0x02,
+ D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_COLOR_SPACE_CONVERSION = 0x04,
+ D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_TRIPLE_BUFFER_OUTPUT = 0x08,
+}}
+STRUCT!{struct D3D11_VIDEO_PROCESSOR_STREAM_BEHAVIOR_HINT {
+ Enable: BOOL,
+ Width: UINT,
+ Height: UINT,
+ Format: DXGI_FORMAT,
+}}
+ENUM!{enum D3D11_CRYPTO_SESSION_STATUS {
+ D3D11_CRYPTO_SESSION_STATUS_OK = 0,
+ D3D11_CRYPTO_SESSION_STATUS_KEY_LOST = 1,
+ D3D11_CRYPTO_SESSION_STATUS_KEY_AND_CONTENT_LOST = 2,
+}}
+STRUCT!{struct D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA {
+ PrivateDataSize: UINT,
+ HWProtectionDataSize: UINT,
+ pbInput: [BYTE; 4],
+}}
+STRUCT!{struct D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA {
+ PrivateDataSize: UINT,
+ MaxHWProtectionDataSize: UINT,
+ HWProtectionDataSize: UINT,
+ TransportTime: UINT64,
+ ExecutionTime: UINT64,
+ pbOutput: [BYTE; 4],
+}}
+STRUCT!{struct D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA {
+ HWProtectionFunctionID: UINT,
+ pInputData: *mut D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA,
+ pOutputData: *mut D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA,
+ Status: HRESULT,
+}}
+STRUCT!{struct D3D11_VIDEO_SAMPLE_DESC {
+ Width: UINT,
+ Height: UINT,
+ Format: DXGI_FORMAT,
+ ColorSpace: DXGI_COLOR_SPACE_TYPE,
+}}
+RIDL!{#[uuid(0xa7f026da, 0xa5f8, 0x4487, 0xa5, 0x64, 0x15, 0xe3, 0x43, 0x57, 0x65, 0x1e)]
+interface ID3D11VideoContext1(ID3D11VideoContext1Vtbl):
+ ID3D11VideoContext(ID3D11VideoContextVtbl) {
+ fn SubmitDecoderBuffers1(
+ pDecoder: *mut ID3D11VideoDecoder,
+ NumBuffers: UINT,
+ pBufferDesc: *const D3D11_VIDEO_DECODER_BUFFER_DESC1,
+ ) -> HRESULT,
+ fn GetDataForNewHardwareKey(
+ pCryptoSession: *mut ID3D11CryptoSession,
+ PrivateInputSize: UINT,
+ pPrivateInputData: *const c_void,
+ pPrivateOutputData: *mut UINT64,
+ ) -> HRESULT,
+ fn CheckCryptoSessionStatus(
+ pCryptoSession: *mut ID3D11CryptoSession,
+ pStatus: *mut D3D11_CRYPTO_SESSION_STATUS,
+ ) -> HRESULT,
+ fn DecoderEnableDownsampling(
+ pDecoder: *mut ID3D11VideoDecoder,
+ InputColorSpace: DXGI_COLOR_SPACE_TYPE,
+ pOutputDesc: *const D3D11_VIDEO_SAMPLE_DESC,
+ ReferenceFrameCount: UINT,
+ ) -> HRESULT,
+ fn DecoderUpdateDownsampling(
+ pDecoder: *mut ID3D11VideoDecoder,
+ pOutputDesc: *const D3D11_VIDEO_SAMPLE_DESC,
+ ) -> HRESULT,
+ fn VideoProcessorSetOutputColorSpace1(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ ColorSpace: DXGI_COLOR_SPACE_TYPE,
+ ) -> (),
+ fn VideoProcessorSetOutputShaderUsage(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ ShaderUsage: BOOL,
+ ) -> (),
+ fn VideoProcessorGetOutputColorSpace1(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ pColorSpace: *mut DXGI_COLOR_SPACE_TYPE,
+ ) -> (),
+ fn VideoProcessorGetOutputShaderUsage(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ pShaderUsage: *mut BOOL,
+ ) -> (),
+ fn VideoProcessorSetStreamColorSpace1(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ ColorSpace: DXGI_COLOR_SPACE_TYPE,
+ ) -> (),
+ fn VideoProcessorSetStreamMirror(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ Enable: BOOL,
+ FlipHorizontal: BOOL,
+ FlipVertical: BOOL,
+ ) -> (),
+ fn VideoProcessorGetStreamColorSpace1(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ pColorSpace: *mut DXGI_COLOR_SPACE_TYPE,
+ ) -> (),
+ fn VideoProcessorGetStreamMirror(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ StreamIndex: UINT,
+ pEnable: *mut BOOL,
+ pFlipHorizontal: *mut BOOL,
+ pFlipVertical: *mut BOOL,
+ ) -> (),
+ fn VideoProcessorGetBehaviorHints(
+ pVideoProcessor: *mut ID3D11VideoProcessor,
+ OutputWidth: UINT,
+ OutputHeight: UINT,
+ OutputFormat: DXGI_FORMAT,
+ StreamCount: UINT,
+ pStreams: *const D3D11_VIDEO_PROCESSOR_STREAM_BEHAVIOR_HINT,
+ pBehaviorHints: *mut UINT,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x29da1d51, 0x1321, 0x4454, 0x80, 0x4b, 0xf5, 0xfc, 0x9f, 0x86, 0x1f, 0x0f)]
+interface ID3D11VideoDevice1(ID3D11VideoDevice1Vtbl): ID3D11VideoDevice(ID3D11VideoDeviceVtbl) {
+ fn GetCryptoSessionPrivateDataSize(
+ pCryptoType: *const GUID,
+ pDecoderProfile: *const GUID,
+ pKeyExchangeType: *const GUID,
+ pPrivateInputSize: *mut UINT,
+ pPrivateOutputSize: *mut UINT,
+ ) -> HRESULT,
+ fn GetVideoDecoderCaps(
+ pDecoderProfile: *const GUID,
+ SampleWidth: UINT,
+ SampleHeight: UINT,
+ pFrameRate: *const DXGI_RATIONAL,
+ BitRate: UINT,
+ pCryptoType: *const GUID,
+ pDecoderCaps: *mut UINT,
+ ) -> HRESULT,
+ fn CheckVideoDecoderDownsampling(
+ pInputDesc: *const D3D11_VIDEO_DECODER_DESC,
+ InputColorSpace: DXGI_COLOR_SPACE_TYPE,
+ pInputConfig: *const D3D11_VIDEO_DECODER_CONFIG,
+ pFrameRate: *const DXGI_RATIONAL,
+ pOutputDesc: *const D3D11_VIDEO_SAMPLE_DESC,
+ pSupported: *mut BOOL,
+ pRealTimeHint: *mut BOOL,
+ ) -> HRESULT,
+ fn RecommendVideoDecoderDownsampleParameters(
+ pInputDesc: *const D3D11_VIDEO_DECODER_DESC,
+ InputColorSpace: DXGI_COLOR_SPACE_TYPE,
+ pInputConfig: *const D3D11_VIDEO_DECODER_CONFIG,
+ pRecommendedOutputDesc: *mut D3D11_VIDEO_SAMPLE_DESC,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x465217f2, 0x5568, 0x43cf, 0xb5, 0xb9, 0xf6, 0x1d, 0x54, 0x53, 0x1c, 0xa1)]
+interface ID3D11VideoProcessorEnumerator1(ID3D11VideoProcessorEnumerator1Vtbl):
+ ID3D11VideoProcessorEnumerator(ID3D11VideoProcessorEnumeratorVtbl) {
+ fn CheckVideoProcessorFormatConversion(
+ InputFormat: DXGI_FORMAT,
+ InputCOlorSpace: DXGI_COLOR_SPACE_TYPE,
+ OutputFormat: DXGI_FORMAT,
+ OutputColorSpace: DXGI_COLOR_SPACE_TYPE,
+ pSupported: *mut BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa04bfb29, 0x08ef, 0x43d6, 0xa4, 0x9c, 0xa9, 0xbd, 0xbd, 0xcb, 0xe6, 0x86)]
+interface ID3D11Device1(ID3D11Device1Vtbl): ID3D11Device(ID3D11DeviceVtbl) {
+ fn GetImmediateContext1(
+ ppImmediateContext: *mut *mut ID3D11DeviceContext1,
+ ) -> (),
+ fn CreateDeferredContext1(
+ ContextFlags: UINT,
+ ppDeferredContext: *mut *mut ID3D11DeviceContext1,
+ ) -> HRESULT,
+ fn CreateBlendState(
+ pBlendStateDesc: *const D3D11_BLEND_DESC1,
+ ppBlendState: *mut *mut ID3D11BlendState1,
+ ) -> HRESULT,
+ fn CreateRasterizerState(
+ pRasterizerDesc: *const D3D11_RASTERIZER_DESC1,
+ ppRasterizerState: *mut *mut ID3D11RasterizerState1,
+ ) -> HRESULT,
+ fn CreateDeviceContextState(
+ Flags: UINT,
+ pFeatureLevels: *const D3D_FEATURE_LEVEL,
+ FeatureLevels: UINT,
+ SDKVersion: UINT,
+ EmulatedInterface: REFIID,
+ pChosenFeatureLevel: *mut D3D_FEATURE_LEVEL,
+ ppContextState: *mut *mut ID3DDeviceContextState,
+ ) -> HRESULT,
+ fn OpenSharedResource1(
+ hResource: HANDLE,
+ returnedInterface: REFIID,
+ ppResource: *mut *mut c_void,
+ ) -> HRESULT,
+ fn OpenSharedResourceByName(
+ Name: LPCWSTR,
+ dwDesiredAccess: DWORD,
+ returnedInterface: REFIID,
+ ppResource: *mut *mut c_void,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xb2daad8b, 0x03d4, 0x4dbf, 0x95, 0xeb, 0x32, 0xab, 0x4b, 0x63, 0xd0, 0xab)]
+interface ID3DUserDefinedAnnotation(ID3DUserDefinedAnnotationVtbl): IUnknown(IUnknownVtbl) {
+ fn BeginEvent(
+ Name: LPCWSTR,
+ ) -> INT,
+ fn EndEvent() -> INT,
+ fn SetMarker(
+ Name: LPCWSTR,
+ ) -> (),
+ fn GetStatus() -> BOOL,
+}}
diff --git a/vendor/winapi/src/um/d3d11_2.rs b/vendor/winapi/src/um/d3d11_2.rs
new file mode 100644
index 000000000..28b655a05
--- /dev/null
+++ b/vendor/winapi/src/um/d3d11_2.rs
@@ -0,0 +1,146 @@
+// 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 ctypes::c_void;
+use shared::basetsd::{UINT16, UINT64, UINT8};
+use shared::dxgiformat::DXGI_FORMAT;
+use shared::minwindef::{BOOL, INT, UINT};
+use um::d3d11::{ID3D11Buffer, ID3D11DeviceChild, ID3D11Resource};
+use um::d3d11_1::{
+ ID3D11Device1, ID3D11Device1Vtbl, ID3D11DeviceContext1, ID3D11DeviceContext1Vtbl,
+};
+use um::winnt::{HRESULT, LPCWSTR};
+DEFINE_GUID!{IID_ID3D11DeviceContext2,
+ 0x420d5b32, 0xb90c, 0x4da4, 0xbe, 0xf0, 0x35, 0x9f, 0x6a, 0x24, 0xa8, 0x3a}
+DEFINE_GUID!{IID_ID3D11Device2,
+ 0x9d06dffa, 0xd1e5, 0x4d07, 0x83, 0xa8, 0x1b, 0xb1, 0x23, 0xf2, 0xf8, 0x41}
+STRUCT!{struct D3D11_TILED_RESOURCE_COORDINATE {
+ X: UINT,
+ Y: UINT,
+ Z: UINT,
+ Subresource: UINT,
+}}
+STRUCT!{struct D3D11_TILE_REGION_SIZE {
+ NumTiles: UINT,
+ bUseBox: BOOL,
+ Width: UINT,
+ Height: UINT16,
+ Depth: UINT16,
+}}
+ENUM!{enum D3D11_TILE_MAPPING_FLAG {
+ D3D11_TILE_MAPPING_NO_OVERWRITE = 0x00000001,
+}}
+ENUM!{enum D3D11_TILE_RANGE_FLAG {
+ D3D11_TILE_RANGE_NULL = 0x00000001,
+ D3D11_TILE_RANGE_SKIP = 0x00000002,
+ D3D11_TILE_RANGE_REUSE_SINGLE_TILE = 0x00000004,
+}}
+STRUCT!{struct D3D11_SUBRESOURCE_TILING {
+ WidthInTiles: UINT,
+ HeightInTiles: UINT16,
+ DepthInTiles: UINT16,
+ StartTileIndexInOverallResource: UINT,
+}}
+STRUCT!{struct D3D11_TILE_SHAPE {
+ WidthInTexels: UINT,
+ HeightInTexels: UINT,
+ DepthInTexels: UINT,
+}}
+STRUCT!{struct D3D11_PACKED_MIP_DESC {
+ NumStandardMips: UINT8,
+ NumPackedMips: UINT8,
+ NumTilesForPackedMips: UINT,
+ StartTileIndexInOverallResource: UINT,
+}}
+ENUM!{enum D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAG {
+ D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_TILED_RESOURCE = 0x00000001,
+}}
+ENUM!{enum D3D11_TILE_COPY_FLAG {
+ D3D11_TILE_COPY_NO_OVERWRITE = 0x00000001,
+ D3D11_TILE_COPY_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE = 0x00000002,
+ D3D11_TILE_COPY_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER = 0x00000004,
+}}
+RIDL!{#[uuid(0x420d5b32, 0xb90c, 0x4da4, 0xbe, 0xf0, 0x35, 0x9f, 0x6a, 0x24, 0xa8, 0x3a)]
+interface ID3D11DeviceContext2(ID3D11DeviceContext2Vtbl):
+ ID3D11DeviceContext1(ID3D11DeviceContext1Vtbl) {
+ fn UpdateTileMappings(
+ pTiledResource: *mut ID3D11Resource,
+ NumTiledResourceRegions: UINT,
+ pTiledResourceRegionStartCoordinates: *const D3D11_TILED_RESOURCE_COORDINATE,
+ pTiledResourceRegionSizes: *const D3D11_TILE_REGION_SIZE,
+ pTilePool: *mut ID3D11Buffer,
+ NumRanges: UINT,
+ pRangeFlags: *const UINT,
+ pTilePoolStartOffsets: *const UINT,
+ pRangeTileCounts: *const UINT,
+ Flags: UINT,
+ ) -> HRESULT,
+ fn CopyTileMappings(
+ pDestTiledResource: *mut ID3D11Resource,
+ pDestRegionStartCoordinate: *const D3D11_TILED_RESOURCE_COORDINATE,
+ pSourceTiledResource: *mut ID3D11Resource,
+ pSourceRegionStartCoordinate: *const D3D11_TILED_RESOURCE_COORDINATE,
+ pTileRegionSize: *const D3D11_TILE_REGION_SIZE,
+ Flags: UINT,
+ ) -> HRESULT,
+ fn CopyTiles(
+ pTiledResource: *mut ID3D11Resource,
+ pTileRegionStartCoordinate: *const D3D11_TILED_RESOURCE_COORDINATE,
+ pTileRegionSize: *const D3D11_TILE_REGION_SIZE,
+ pBuffer: *mut ID3D11Buffer,
+ BufferStartOffsetInBytes: UINT64,
+ Flags: UINT,
+ ) -> (),
+ fn UpdateTiles(
+ pDestTiledResource: *mut ID3D11Resource,
+ pDestTileRegionStartCoordinate: *const D3D11_TILED_RESOURCE_COORDINATE,
+ pDestTileRegionSize: *const D3D11_TILE_REGION_SIZE,
+ pSourceTileData: *const c_void,
+ Flags: UINT,
+ ) -> (),
+ fn ResizeTilePool(
+ pTilePool: *mut ID3D11Buffer,
+ NewSizeInBytes: UINT64,
+ ) -> HRESULT,
+ fn TiledResourceBarrier(
+ pTiledResourceOrViewAccessBeforeBarrier: *mut ID3D11DeviceChild,
+ pTiledResourceOrViewAccessAfterBarrier: *mut ID3D11DeviceChild,
+ ) -> (),
+ fn IsAnnotationEnabled() -> BOOL,
+ fn SetMarkerInt(
+ pLabel: LPCWSTR,
+ Data: INT,
+ ) -> (),
+ fn BeginEventInt(
+ pLabel: LPCWSTR,
+ Data: INT,
+ ) -> (),
+ fn EndEvent() -> (),
+}}
+RIDL!{#[uuid(0x9d06dffa, 0xd1e5, 0x4d07, 0x83, 0xa8, 0x1b, 0xb1, 0x23, 0xf2, 0xf8, 0x41)]
+interface ID3D11Device2(ID3D11Device2Vtbl): ID3D11Device1(ID3D11Device1Vtbl) {
+ fn GetImmediateContext2(
+ ppImmediateContext: *mut *mut ID3D11DeviceContext2,
+ ) -> (),
+ fn CreateDeferredContext2(
+ ContextFlags: UINT,
+ ppDeferredContext: *mut *mut ID3D11DeviceContext2,
+ ) -> HRESULT,
+ fn GetResourceTiling(
+ pTiledResource: *mut ID3D11Resource,
+ pNumTilesForEntireResource: *mut UINT,
+ pPackedMipDesc: *mut D3D11_PACKED_MIP_DESC,
+ pStandardTileShapeForNonPackedMips: *mut D3D11_TILE_SHAPE,
+ pNumSubresourceTilings: *mut UINT,
+ FirstSubresourceTilingToGet: UINT,
+ pSubresourceTilingsForNonPackedMips: *mut D3D11_SUBRESOURCE_TILING,
+ ) -> (),
+ fn CheckMultisampleQualityLevels1(
+ Format: DXGI_FORMAT,
+ SampleCount: UINT,
+ Flags: UINT,
+ pNumQualityLevels: *mut UINT,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/d3d11_3.rs b/vendor/winapi/src/um/d3d11_3.rs
new file mode 100644
index 000000000..5ae721380
--- /dev/null
+++ b/vendor/winapi/src/um/d3d11_3.rs
@@ -0,0 +1,23 @@
+// 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.
+DEFINE_GUID!{IID_ID3D11Texture2D1,
+ 0x51218251, 0x1e33, 0x4617, 0x9c, 0xcb, 0x4d, 0x3a, 0x43, 0x67, 0xe7, 0xbb}
+DEFINE_GUID!{IID_ID3D11Texture3D1,
+ 0x0c711683, 0x2853, 0x4846, 0x9b, 0xb0, 0xf3, 0xe6, 0x06, 0x39, 0xe4, 0x6a}
+DEFINE_GUID!{IID_ID3D11RasterizerState2,
+ 0x6fbd02fb, 0x209f, 0x46c4, 0xb0, 0x59, 0x2e, 0xd1, 0x55, 0x86, 0xa6, 0xac}
+DEFINE_GUID!{IID_ID3D11ShaderResourceView1,
+ 0x91308b87, 0x9040, 0x411d, 0x8c, 0x67, 0xc3, 0x92, 0x53, 0xce, 0x38, 0x02}
+DEFINE_GUID!{IID_ID3D11RenderTargetView1,
+ 0xffbe2e23, 0xf011, 0x418a, 0xac, 0x56, 0x5c, 0xee, 0xd7, 0xc5, 0xb9, 0x4b}
+DEFINE_GUID!{IID_ID3D11UnorderedAccessView1,
+ 0x7b3b6153, 0xa886, 0x4544, 0xab, 0x37, 0x65, 0x37, 0xc8, 0x50, 0x04, 0x03}
+DEFINE_GUID!{IID_ID3D11Query1,
+ 0x631b4766, 0x36dc, 0x461d, 0x8d, 0xb6, 0xc4, 0x7e, 0x13, 0xe6, 0x09, 0x16}
+DEFINE_GUID!{IID_ID3D11DeviceContext3,
+ 0xb4e3c01d, 0xe79e, 0x4637, 0x91, 0xb2, 0x51, 0x0e, 0x9f, 0x4c, 0x9b, 0x8f}
+DEFINE_GUID!{IID_ID3D11Device3,
+ 0xa05c8c37, 0xd2c6, 0x4732, 0xb3, 0xa0, 0x9c, 0xe0, 0xb0, 0xdc, 0x9a, 0xe6}
diff --git a/vendor/winapi/src/um/d3d11_4.rs b/vendor/winapi/src/um/d3d11_4.rs
new file mode 100644
index 000000000..5d0da98b5
--- /dev/null
+++ b/vendor/winapi/src/um/d3d11_4.rs
@@ -0,0 +1,7 @@
+// 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.
+DEFINE_GUID!{IID_ID3D11Device4,
+ 0x8992ab71, 0x02e6, 0x4b8d, 0xba, 0x48, 0xb0, 0x56, 0xdc, 0xda, 0x42, 0xc4}
diff --git a/vendor/winapi/src/um/d3d11on12.rs b/vendor/winapi/src/um/d3d11on12.rs
new file mode 100644
index 000000000..bf106a38b
--- /dev/null
+++ b/vendor/winapi/src/um/d3d11on12.rs
@@ -0,0 +1,67 @@
+// 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 content of d3d11on12.h
+use ctypes::c_void;
+use shared::guiddef::IID;
+use shared::minwindef::UINT;
+use um::d3d11::{ID3D11Device, ID3D11DeviceContext, ID3D11Resource};
+use um::d3d12::D3D12_RESOURCE_STATES;
+use um::d3dcommon::D3D_FEATURE_LEVEL;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::HRESULT;
+FN!{stdcall PFN_D3D11ON12_CREATE_DEVICE(
+ *mut IUnknown,
+ UINT,
+ *const D3D_FEATURE_LEVEL,
+ UINT,
+ *mut *mut IUnknown,
+ UINT,
+ UINT,
+ *mut *mut ID3D11Device,
+ *mut *mut ID3D11DeviceContext,
+ *mut D3D_FEATURE_LEVEL,
+) -> HRESULT}
+extern "system" {
+ pub fn D3D11On12CreateDevice(
+ pDevice: *mut IUnknown,
+ Flags: UINT,
+ pFeatureLevels: *const D3D_FEATURE_LEVEL,
+ FeatureLevels: UINT,
+ ppCommandQueues: *mut *mut IUnknown,
+ NumQueues: UINT,
+ NodeMask: UINT,
+ ppDevice: *mut *mut ID3D11Device,
+ ppImmediateContext: *mut *mut ID3D11DeviceContext,
+ pChosenFeatureLevel: *mut D3D_FEATURE_LEVEL,
+ ) -> HRESULT;
+}
+STRUCT!{struct D3D11_RESOURCE_FLAGS {
+ BindFlags: UINT,
+ MiscFlags: UINT,
+ CPUAccessFlags: UINT,
+ StructureByteStride: UINT,
+}}
+RIDL!{#[uuid(0x85611e73, 0x70a9, 0x490e, 0x96, 0x14, 0xa9, 0xe3, 0x02, 0x77, 0x79, 0x04)]
+interface ID3D11On12Device(ID3D11On12DeviceVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateWrappedResource(
+ pResource12: *mut IUnknown,
+ pFlags11: *const D3D11_RESOURCE_FLAGS,
+ InState: D3D12_RESOURCE_STATES,
+ OutState: D3D12_RESOURCE_STATES,
+ riid: *const IID,
+ ppResource11: *mut *mut c_void,
+ ) -> HRESULT,
+ fn ReleaseWrappedResources(
+ ppResources: *mut *mut ID3D11Resource,
+ NumResources: UINT,
+ ) -> (),
+ fn AcquireWrappedResources(
+ ppResources: *mut *mut ID3D11Resource,
+ NumResources: UINT,
+ ) -> (),
+}}
+DEFINE_GUID!{IID_ID3D11On12Device,
+ 0x85611e73, 0x70a9, 0x490e, 0x96, 0x14, 0xa9, 0xe3, 0x02, 0x77, 0x79, 0x04}
diff --git a/vendor/winapi/src/um/d3d11sdklayers.rs b/vendor/winapi/src/um/d3d11sdklayers.rs
new file mode 100644
index 000000000..e70b6686e
--- /dev/null
+++ b/vendor/winapi/src/um/d3d11sdklayers.rs
@@ -0,0 +1,2679 @@
+// 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 ctypes::c_char;
+use shared::basetsd::{SIZE_T, UINT64};
+use shared::dxgi::IDXGISwapChain;
+use shared::minwindef::{BOOL, UINT};
+use um::d3d11::ID3D11DeviceContext;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPCSTR};
+pub const D3D11_SDK_LAYERS_VERSION: UINT = 0x1;
+pub const D3D11_DEBUG_FEATURE_FLUSH_PER_RENDER_OP: UINT = 0x1;
+pub const D3D11_DEBUG_FEATURE_FINISH_PER_RENDER_OP: UINT = 0x2;
+pub const D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP: UINT = 0x4;
+pub const D3D11_DEBUG_FEATURE_ALWAYS_DISCARD_OFFERED_RESOURCE: UINT = 0x8;
+pub const D3D11_DEBUG_FEATURE_NEVER_DISCARD_OFFERED_RESOURCE: UINT = 0x10;
+pub const D3D11_DEBUG_FEATURE_AVOID_BEHAVIOR_CHANGING_DEBUG_AIDS: UINT = 0x40;
+pub const D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION: UINT = 0x80;
+ENUM!{enum D3D11_RLDO_FLAGS {
+ D3D11_RLDO_SUMMARY = 0x1,
+ D3D11_RLDO_DETAIL = 0x2,
+ D3D11_RLDO_IGNORE_INTERNAL = 0x4,
+}}
+RIDL!{#[uuid(0x79cf2233, 0x7536, 0x4948, 0x9d, 0x36, 0x1e, 0x46, 0x92, 0xdc, 0x57, 0x60)]
+interface ID3D11Debug(ID3D11DebugVtbl): IUnknown(IUnknownVtbl) {
+ fn SetFeatureMask(
+ Mask: UINT,
+ ) -> HRESULT,
+ fn GetFeatureMask() -> UINT,
+ fn SetPresentPerRenderOpDelay(
+ Milliseconds: UINT,
+ ) -> HRESULT,
+ fn GetPresentPerRenderOpDelay() -> UINT,
+ fn SetSwapChain(
+ pSwapChain: *mut IDXGISwapChain,
+ ) -> HRESULT,
+ fn GetSwapChain(
+ ppSwapChain: *mut *mut IDXGISwapChain,
+ ) -> HRESULT,
+ fn ValidateContext(
+ pContext: *const ID3D11DeviceContext,
+ ) -> HRESULT,
+ fn ReportLiveDeviceObjects(
+ Flags: D3D11_RLDO_FLAGS,
+ ) -> HRESULT,
+ fn ValidateContextForDispatch(
+ pContext: *mut ID3D11DeviceContext,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x1ef337e3, 0x58e7, 0x4f83, 0xa6, 0x92, 0xdb, 0x22, 0x1f, 0x5e, 0xd4, 0x7e)]
+interface ID3D11SwitchToRef(ID3D11SwitchToRefVtbl): IUnknown(IUnknownVtbl) {
+ fn SetUseRef(
+ UseRef: BOOL,
+ ) -> BOOL,
+ fn GetUseRef() -> BOOL,
+}}
+ENUM!{enum D3D11_SHADER_TRACKING_RESOURCE_TYPE {
+ D3D11_SHADER_TRACKING_RESOURCE_TYPE_NONE = 0,
+ D3D11_SHADER_TRACKING_RESOURCE_TYPE_UAV_DEVICEMEMORY = 1,
+ D3D11_SHADER_TRACKING_RESOURCE_TYPE_NON_UAV_DEVICEMEMORY = 2,
+ D3D11_SHADER_TRACKING_RESOURCE_TYPE_ALL_DEVICEMEMORY = 3,
+ D3D11_SHADER_TRACKING_RESOURCE_TYPE_GROUPSHARED_MEMORY = 4,
+ D3D11_SHADER_TRACKING_RESOURCE_TYPE_ALL_SHARED_MEMORY = 5,
+ D3D11_SHADER_TRACKING_RESOURCE_TYPE_GROUPSHARED_NON_UAV = 6,
+ D3D11_SHADER_TRACKING_RESOURCE_TYPE_ALL = 7,
+}}
+ENUM!{enum D3D11_SHADER_TRACKING_OPTION {
+ D3D11_SHADER_TRACKING_OPTION_IGNORE = 0,
+ D3D11_SHADER_TRACKING_OPTION_TRACK_UNINITIALIZED = 0x1,
+ D3D11_SHADER_TRACKING_OPTION_TRACK_RAW = 0x2,
+ D3D11_SHADER_TRACKING_OPTION_TRACK_WAR = 0x4,
+ D3D11_SHADER_TRACKING_OPTION_TRACK_WAW = 0x8,
+ D3D11_SHADER_TRACKING_OPTION_ALLOW_SAME = 0x10,
+ D3D11_SHADER_TRACKING_OPTION_TRACK_ATOMIC_CONSISTENCY = 0x20,
+ D3D11_SHADER_TRACKING_OPTION_TRACK_RAW_ACROSS_THREADGROUPS = 0x40,
+ D3D11_SHADER_TRACKING_OPTION_TRACK_WAR_ACROSS_THREADGROUPS = 0x80,
+ D3D11_SHADER_TRACKING_OPTION_TRACK_WAW_ACROSS_THREADGROUPS = 0x100,
+ D3D11_SHADER_TRACKING_OPTION_TRACK_ATOMIC_CONSISTENCY_ACROSS_THREADGROUPS = 0x200,
+ D3D11_SHADER_TRACKING_OPTION_UAV_SPECIFIC_FLAGS
+ = D3D11_SHADER_TRACKING_OPTION_TRACK_RAW_ACROSS_THREADGROUPS
+ | D3D11_SHADER_TRACKING_OPTION_TRACK_WAR_ACROSS_THREADGROUPS
+ | D3D11_SHADER_TRACKING_OPTION_TRACK_WAW_ACROSS_THREADGROUPS
+ | D3D11_SHADER_TRACKING_OPTION_TRACK_ATOMIC_CONSISTENCY_ACROSS_THREADGROUPS,
+ D3D11_SHADER_TRACKING_OPTION_ALL_HAZARDS = D3D11_SHADER_TRACKING_OPTION_TRACK_RAW
+ | D3D11_SHADER_TRACKING_OPTION_TRACK_WAR | D3D11_SHADER_TRACKING_OPTION_TRACK_WAW
+ | D3D11_SHADER_TRACKING_OPTION_TRACK_ATOMIC_CONSISTENCY
+ | D3D11_SHADER_TRACKING_OPTION_TRACK_RAW_ACROSS_THREADGROUPS
+ | D3D11_SHADER_TRACKING_OPTION_TRACK_WAR_ACROSS_THREADGROUPS
+ | D3D11_SHADER_TRACKING_OPTION_TRACK_WAW_ACROSS_THREADGROUPS
+ | D3D11_SHADER_TRACKING_OPTION_TRACK_ATOMIC_CONSISTENCY_ACROSS_THREADGROUPS,
+ D3D11_SHADER_TRACKING_OPTION_ALL_HAZARDS_ALLOWING_SAME
+ = D3D11_SHADER_TRACKING_OPTION_ALL_HAZARDS | D3D11_SHADER_TRACKING_OPTION_ALLOW_SAME,
+ D3D11_SHADER_TRACKING_OPTION_ALL_OPTIONS
+ = D3D11_SHADER_TRACKING_OPTION_ALL_HAZARDS_ALLOWING_SAME
+ | D3D11_SHADER_TRACKING_OPTION_TRACK_UNINITIALIZED,
+}}
+RIDL!{#[uuid(0x1911c771, 0x1587, 0x413e, 0xa7, 0xe0, 0xfb, 0x26, 0xc3, 0xde, 0x02, 0x68)]
+interface ID3D11TracingDevice(ID3D11TracingDeviceVtbl): IUnknown(IUnknownVtbl) {
+ fn SetShaderTrackingOptionsByType(
+ ResourceTypeFlags: UINT,
+ Options: UINT,
+ ) -> HRESULT,
+ fn SetShaderTrackingOptions(
+ pShader: *const IUnknown,
+ Options: UINT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x193dacdf, 0x0db2, 0x4c05, 0xa5, 0x5c, 0xef, 0x06, 0xca, 0xc5, 0x6f, 0xd9)]
+interface ID3D11RefTrackingOptions(ID3D11RefTrackingOptionsVtbl): IUnknown(IUnknownVtbl) {
+ fn SetTrackingOptions(
+ Options: UINT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x03916615, 0xc644, 0x418c, 0x9b, 0xf4, 0x75, 0xdb, 0x5b, 0xe6, 0x3c, 0xa0)]
+interface ID3D11RefDefaultTrackingOptions(ID3D11RefDefaultTrackingOptionsVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn SetTrackingOptions(
+ ResourceTypeFlags: UINT,
+ Options: UINT,
+ ) -> HRESULT,
+}}
+DEFINE_GUID!{DXGI_DEBUG_D3D11,
+ 0x4b99317b, 0xac39, 0x4aa6, 0xbb, 0x0b, 0xba, 0xa0, 0x47, 0x84, 0x79, 0x8f}
+pub const D3D11_REGKEY_PATH: &'static str = "Software\\Microsoft\\Direct3D";
+pub const D3D11_MUTE_DEBUG_OUTPUT: &'static str = "MuteDebugOutput";
+pub const D3D11_ENABLE_BREAK_ON_MESSAGE: &'static str = "EnableBreakOnMessage";
+pub const D3D11_INFOQUEUE_STORAGE_FILTER_OVERRIDE: &'static str = "InfoQueueStorageFilterOverride";
+pub const D3D11_MUTE_CATEGORY: &'static str = "Mute_CATEGORY_%s";
+pub const D3D11_MUTE_SEVERITY: &'static str = "Mute_SEVERITY_%s";
+pub const D3D11_MUTE_ID_STRING: &'static str = "Mute_ID_%s";
+pub const D3D11_MUTE_ID_DECIMAL: &'static str = "Mute_ID_%d";
+pub const D3D11_UNMUTE_SEVERITY_INFO: &'static str = "Unmute_SEVERITY_INFO";
+pub const D3D11_BREAKON_CATEGORY: &'static str = "BreakOn_CATEGORY_%s";
+pub const D3D11_BREAKON_SEVERITY: &'static str = "BreakOn_SEVERITY_%s";
+pub const D3D11_BREAKON_ID_STRING: &'static str = "BreakOn_ID_%s";
+pub const D3D11_BREAKON_ID_DECIMAL: &'static str = "BreakOn_ID_%d";
+pub const D3D11_APPSIZE_STRING: &'static str = "Size";
+pub const D3D11_APPNAME_STRING: &'static str = "Name";
+pub const D3D11_FORCE_DEBUGGABLE: &'static str = "ForceDebuggable";
+pub const D3D11_FORCE_SHADER_SKIP_OPTIMIZATION: &'static str = "ForceShaderSkipOptimization";
+ENUM!{enum D3D11_MESSAGE_CATEGORY {
+ D3D11_MESSAGE_CATEGORY_APPLICATION_DEFINED = 0,
+ D3D11_MESSAGE_CATEGORY_MISCELLANEOUS = D3D11_MESSAGE_CATEGORY_APPLICATION_DEFINED + 1,
+ D3D11_MESSAGE_CATEGORY_INITIALIZATION = D3D11_MESSAGE_CATEGORY_MISCELLANEOUS + 1,
+ D3D11_MESSAGE_CATEGORY_CLEANUP = D3D11_MESSAGE_CATEGORY_INITIALIZATION + 1,
+ D3D11_MESSAGE_CATEGORY_COMPILATION = D3D11_MESSAGE_CATEGORY_CLEANUP + 1,
+ D3D11_MESSAGE_CATEGORY_STATE_CREATION = D3D11_MESSAGE_CATEGORY_COMPILATION + 1,
+ D3D11_MESSAGE_CATEGORY_STATE_SETTING = D3D11_MESSAGE_CATEGORY_STATE_CREATION + 1,
+ D3D11_MESSAGE_CATEGORY_STATE_GETTING = D3D11_MESSAGE_CATEGORY_STATE_SETTING + 1,
+ D3D11_MESSAGE_CATEGORY_RESOURCE_MANIPULATION = D3D11_MESSAGE_CATEGORY_STATE_GETTING + 1,
+ D3D11_MESSAGE_CATEGORY_EXECUTION = D3D11_MESSAGE_CATEGORY_RESOURCE_MANIPULATION + 1,
+ D3D11_MESSAGE_CATEGORY_SHADER = D3D11_MESSAGE_CATEGORY_EXECUTION + 1,
+}}
+ENUM!{enum D3D11_MESSAGE_SEVERITY {
+ D3D11_MESSAGE_SEVERITY_CORRUPTION = 0,
+ D3D11_MESSAGE_SEVERITY_ERROR = D3D11_MESSAGE_SEVERITY_CORRUPTION + 1,
+ D3D11_MESSAGE_SEVERITY_WARNING = D3D11_MESSAGE_SEVERITY_ERROR + 1,
+ D3D11_MESSAGE_SEVERITY_INFO = D3D11_MESSAGE_SEVERITY_WARNING + 1,
+ D3D11_MESSAGE_SEVERITY_MESSAGE = D3D11_MESSAGE_SEVERITY_INFO + 1,
+}}
+ENUM!{enum D3D11_MESSAGE_ID {
+ D3D11_MESSAGE_ID_UNKNOWN = 0,
+ D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD = D3D11_MESSAGE_ID_UNKNOWN + 1,
+ D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD
+ = D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD + 1,
+ D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD
+ = D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD + 1,
+ D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD
+ = D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD + 1,
+ D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD
+ = D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD + 1,
+ D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD
+ = D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD + 1,
+ D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD
+ = D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD + 1,
+ D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD
+ = D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD + 1,
+ D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD
+ = D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD + 1,
+ D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD
+ = D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD + 1,
+ D3D11_MESSAGE_ID_STRING_FROM_APPLICATION = D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD + 1,
+ D3D11_MESSAGE_ID_CORRUPTED_THIS = D3D11_MESSAGE_ID_STRING_FROM_APPLICATION + 1,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER1 = D3D11_MESSAGE_ID_CORRUPTED_THIS + 1,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER2 = D3D11_MESSAGE_ID_CORRUPTED_PARAMETER1 + 1,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER3 = D3D11_MESSAGE_ID_CORRUPTED_PARAMETER2 + 1,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER4 = D3D11_MESSAGE_ID_CORRUPTED_PARAMETER3 + 1,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER5 = D3D11_MESSAGE_ID_CORRUPTED_PARAMETER4 + 1,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER6 = D3D11_MESSAGE_ID_CORRUPTED_PARAMETER5 + 1,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER7 = D3D11_MESSAGE_ID_CORRUPTED_PARAMETER6 + 1,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER8 = D3D11_MESSAGE_ID_CORRUPTED_PARAMETER7 + 1,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER9 = D3D11_MESSAGE_ID_CORRUPTED_PARAMETER8 + 1,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER10 = D3D11_MESSAGE_ID_CORRUPTED_PARAMETER9 + 1,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER11 = D3D11_MESSAGE_ID_CORRUPTED_PARAMETER10 + 1,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER12 = D3D11_MESSAGE_ID_CORRUPTED_PARAMETER11 + 1,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER13 = D3D11_MESSAGE_ID_CORRUPTED_PARAMETER12 + 1,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER14 = D3D11_MESSAGE_ID_CORRUPTED_PARAMETER13 + 1,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER15 = D3D11_MESSAGE_ID_CORRUPTED_PARAMETER14 + 1,
+ D3D11_MESSAGE_ID_CORRUPTED_MULTITHREADING = D3D11_MESSAGE_ID_CORRUPTED_PARAMETER15 + 1,
+ D3D11_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY
+ = D3D11_MESSAGE_ID_CORRUPTED_MULTITHREADING + 1,
+ D3D11_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY + 1,
+ D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_GETPRIVATEDATA_MOREDATA
+ = D3D11_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA = D3D11_MESSAGE_ID_GETPRIVATEDATA_MOREDATA + 1,
+ D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN
+ = D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA + 1,
+ D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS
+ = D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN + 1,
+ D3D11_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS
+ = D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS + 1,
+ D3D11_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY
+ = D3D11_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT
+ = D3D11_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES
+ = D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE
+ = D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS
+ = D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS
+ = D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS
+ = D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS
+ = D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS
+ = D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA
+ = D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS
+ = D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS
+ = D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS
+ = D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN
+ = D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_NULLDESC = D3D11_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS
+ = D3D11_MESSAGE_ID_CREATEBUFFER_NULLDESC + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION
+ = D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT
+ = D3D11_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_NULLDESC
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_NULLDESC + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_NULLDESC
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_NULLDESC + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT
+ = D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES
+ = D3D11_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE
+ = D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA
+ = D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS
+ = D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS
+ = D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS
+ = D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN
+ = D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_NULLDESC
+ = D3D11_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION
+ = D3D11_MESSAGE_ID_CREATETEXTURE3D_NULLDESC + 1,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT
+ = D3D11_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION + 1,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC
+ = D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT
+ = D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC + 1,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS
+ = D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE
+ = D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS + 1,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS
+ = D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE + 1,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN
+ = D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS + 1,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT
+ = D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT
+ = D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC
+ = D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT
+ = D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC + 1,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS
+ = D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE
+ = D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS + 1,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS
+ = D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE + 1,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN
+ = D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS + 1,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT
+ = D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT + 1,
+ D3D11_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC + 1,
+ D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE
+ = D3D11_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY + 1,
+ D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE
+ = D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY
+ = D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION =
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT
+ + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX + 1,
+ D3D11_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE + 1,
+ D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE
+ = D3D11_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY + 1,
+ D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE
+ = D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE + 1,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE
+ = D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE + 1,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE
+ = D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE + 1,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP
+ = D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE + 1,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS
+ = D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP + 1,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS
+ = D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS + 1,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC
+ = D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK
+ = D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC + 1,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS + 1,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC + 1,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND
+ = D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND + 1,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP
+ = D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND + 1,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA
+ = D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP + 1,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA
+ = D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA + 1,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA
+ = D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA + 1,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK
+ = D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA + 1,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS
+ = D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK + 1,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC
+ = D3D11_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER
+ = D3D11_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS + 1,
+ D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC + 1,
+ D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS
+ = D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY + 1,
+ D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG
+ = D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC
+ = D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG + 1,
+ D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED
+ = D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC + 1,
+ D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED
+ = D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED + 1,
+ D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER
+ = D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED + 1,
+ D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE
+ = D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER + 1,
+ D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE + 1,
+ D3D11_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER
+ = D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID
+ = D3D11_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER + 1,
+ D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE
+ = D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID + 1,
+ D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED
+ = D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE + 1,
+ D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED + 1,
+ D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER
+ = D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY
+ = D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER + 1,
+ D3D11_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER
+ = D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY
+ = D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER + 1,
+ D3D11_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER
+ = D3D11_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED
+ = D3D11_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER + 1,
+ D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED + 1,
+ D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER
+ = D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY
+ = D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER + 1,
+ D3D11_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT
+ = D3D11_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR
+ = D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT + 1,
+ D3D11_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH
+ = D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR + 1,
+ D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH
+ = D3D11_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH + 1,
+ D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID
+ = D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH + 1,
+ D3D11_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY
+ = D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID + 1,
+ D3D11_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID
+ = D3D11_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY + 1,
+ D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE
+ = D3D11_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID + 1,
+ D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE
+ = D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE + 1,
+ D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX
+ = D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE + 1,
+ D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE
+ = D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX + 1,
+ D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE
+ = D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE + 1,
+ D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE
+ = D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE + 1,
+ D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE
+ = D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE + 1,
+ D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE
+ = D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE + 1,
+ D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE
+ = D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE + 1,
+ D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE
+ = D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE + 1,
+ D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX
+ = D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE + 1,
+ D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE
+ = D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX + 1,
+ D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID
+ = D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE + 1,
+ D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID
+ = D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID + 1,
+ D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID
+ = D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID + 1,
+ D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID
+ = D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID + 1,
+ D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID
+ = D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID + 1,
+ D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE
+ = D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID + 1,
+ D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS = D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE + 1,
+ D3D11_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED = D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS + 1,
+ D3D11_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN
+ = D3D11_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED + 1,
+ D3D11_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED = D3D11_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN + 1,
+ D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE = D3D11_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED + 1,
+ D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE
+ = D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE + 1,
+ D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS
+ = D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE + 1,
+ D3D11_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED = D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS + 1,
+ D3D11_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN
+ = D3D11_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED + 1,
+ D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE
+ = D3D11_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN + 1,
+ D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED
+ = D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE + 1,
+ D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE = D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED + 1,
+ D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE
+ = D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE + 1,
+ D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS
+ = D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE + 1,
+ D3D11_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED
+ = D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS + 1,
+ D3D11_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN
+ = D3D11_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED + 1,
+ D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE
+ = D3D11_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN + 1,
+ D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED
+ = D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE + 1,
+ D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE = D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED + 1,
+ D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE
+ = D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE + 1,
+ D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS
+ = D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE + 1,
+ D3D11_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED = D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS + 1,
+ D3D11_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN
+ = D3D11_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED + 1,
+ D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE
+ = D3D11_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN + 1,
+ D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED
+ = D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE + 1,
+ D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED
+ = D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED + 1,
+ D3D11_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED
+ = D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED + 1,
+ D3D11_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS
+ = D3D11_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED + 1,
+ D3D11_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN
+ = D3D11_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS + 1,
+ D3D11_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN
+ = D3D11_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN + 1,
+ D3D11_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE
+ = D3D11_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN + 1,
+ D3D11_MESSAGE_ID_REF_THREADING_MODE
+ = D3D11_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE + 1,
+ D3D11_MESSAGE_ID_REF_UMDRIVER_EXCEPTION = D3D11_MESSAGE_ID_REF_THREADING_MODE + 1,
+ D3D11_MESSAGE_ID_REF_KMDRIVER_EXCEPTION = D3D11_MESSAGE_ID_REF_UMDRIVER_EXCEPTION + 1,
+ D3D11_MESSAGE_ID_REF_HARDWARE_EXCEPTION = D3D11_MESSAGE_ID_REF_KMDRIVER_EXCEPTION + 1,
+ D3D11_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE
+ = D3D11_MESSAGE_ID_REF_HARDWARE_EXCEPTION + 1,
+ D3D11_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER
+ = D3D11_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE + 1,
+ D3D11_MESSAGE_ID_REF_OUT_OF_MEMORY = D3D11_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER + 1,
+ D3D11_MESSAGE_ID_REF_INFO = D3D11_MESSAGE_ID_REF_OUT_OF_MEMORY + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW = D3D11_MESSAGE_ID_REF_INFO + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW
+ = D3D11_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW
+ = D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW
+ = D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW
+ = D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET
+ = D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW + 1,
+ D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET + 1,
+ D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX
+ = D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND + 1,
+ D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE
+ = D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX + 1,
+ D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK
+ = D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE + 1,
+ D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE
+ = D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK + 1,
+ D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS
+ = D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET
+ = D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING + 1,
+ D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0 + 1,
+ D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT
+ = D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT + 1,
+ D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT
+ = D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT + 1,
+ D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN
+ = D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT + 1,
+ D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN + 1,
+ D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN
+ = D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET
+ = D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC + 1,
+ D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC + 1,
+ D3D11_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW
+ = D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH + 1,
+ D3D11_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS
+ = D3D11_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH
+ = D3D11_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH + 1,
+ D3D11_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH + 1,
+ D3D11_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY
+ = D3D11_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY + 1,
+ D3D11_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY + 1,
+ D3D11_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER
+ = D3D11_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED
+ = D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER + 1,
+ D3D11_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER
+ = D3D11_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED + 1,
+ D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + 1,
+ D3D11_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN
+ = D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATECOUNTER_NULLDESC
+ = D3D11_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN + 1,
+ D3D11_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER = D3D11_MESSAGE_ID_CREATECOUNTER_NULLDESC + 1,
+ D3D11_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER
+ = D3D11_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER + 1,
+ D3D11_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE
+ = D3D11_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + 1,
+ D3D11_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED
+ = D3D11_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE + 1,
+ D3D11_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION
+ = D3D11_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_QUERY_BEGIN_DUPLICATE
+ = D3D11_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION + 1,
+ D3D11_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS
+ = D3D11_MESSAGE_ID_QUERY_BEGIN_DUPLICATE + 1,
+ D3D11_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION
+ = D3D11_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS + 1,
+ D3D11_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS
+ = D3D11_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION + 1,
+ D3D11_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN
+ = D3D11_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS + 1,
+ D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE = D3D11_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN + 1,
+ D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS
+ = D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE + 1,
+ D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL = D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH
+ = D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN + 1,
+ D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE
+ = D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT
+ = D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT + 1,
+ D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH + 1,
+ D3D11_MESSAGE_ID_LIVE_BUFFER = D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY + 1,
+ D3D11_MESSAGE_ID_LIVE_TEXTURE1D = D3D11_MESSAGE_ID_LIVE_BUFFER + 1,
+ D3D11_MESSAGE_ID_LIVE_TEXTURE2D = D3D11_MESSAGE_ID_LIVE_TEXTURE1D + 1,
+ D3D11_MESSAGE_ID_LIVE_TEXTURE3D = D3D11_MESSAGE_ID_LIVE_TEXTURE2D + 1,
+ D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW = D3D11_MESSAGE_ID_LIVE_TEXTURE3D + 1,
+ D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW = D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW + 1,
+ D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW = D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW + 1,
+ D3D11_MESSAGE_ID_LIVE_VERTEXSHADER = D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW + 1,
+ D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER = D3D11_MESSAGE_ID_LIVE_VERTEXSHADER + 1,
+ D3D11_MESSAGE_ID_LIVE_PIXELSHADER = D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER + 1,
+ D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT = D3D11_MESSAGE_ID_LIVE_PIXELSHADER + 1,
+ D3D11_MESSAGE_ID_LIVE_SAMPLER = D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT + 1,
+ D3D11_MESSAGE_ID_LIVE_BLENDSTATE = D3D11_MESSAGE_ID_LIVE_SAMPLER + 1,
+ D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE = D3D11_MESSAGE_ID_LIVE_BLENDSTATE + 1,
+ D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE = D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE + 1,
+ D3D11_MESSAGE_ID_LIVE_QUERY = D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE + 1,
+ D3D11_MESSAGE_ID_LIVE_PREDICATE = D3D11_MESSAGE_ID_LIVE_QUERY + 1,
+ D3D11_MESSAGE_ID_LIVE_COUNTER = D3D11_MESSAGE_ID_LIVE_PREDICATE + 1,
+ D3D11_MESSAGE_ID_LIVE_DEVICE = D3D11_MESSAGE_ID_LIVE_COUNTER + 1,
+ D3D11_MESSAGE_ID_LIVE_SWAPCHAIN = D3D11_MESSAGE_ID_LIVE_DEVICE + 1,
+ D3D11_MESSAGE_ID_D3D10_MESSAGES_END = D3D11_MESSAGE_ID_LIVE_SWAPCHAIN + 1,
+ D3D11_MESSAGE_ID_D3D10L9_MESSAGES_START = 0x100000,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED
+ = D3D11_MESSAGE_ID_D3D10L9_MESSAGES_START + 1,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT
+ = D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY + 1,
+ D3D11_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE + 1,
+ D3D11_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS
+ = D3D11_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED + 1,
+ D3D11_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS
+ = D3D11_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS + 1,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS
+ = D3D11_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS + 1,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND
+ = D3D11_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS + 1,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D
+ = D3D11_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND + 1,
+ D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE
+ = D3D11_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D + 1,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE
+ = D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE + 1,
+ D3D11_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS
+ = D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE + 1,
+ D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS
+ = D3D11_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS + 1,
+ D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX
+ = D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS + 1,
+ D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS
+ = D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX + 1,
+ D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS + 1,
+ D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS
+ = D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY
+ = D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS + 1,
+ D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK
+ = D3D11_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY + 1,
+ D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK
+ = D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT
+ = D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK + 1,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT + 1,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE
+ = D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE + 1,
+ D3D11_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE
+ = D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE + 1,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD
+ = D3D11_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL
+ = D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL + 1,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX + 1,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES
+ = D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO + 1,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET
+ = D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES + 1,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER
+ = D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET + 1,
+ D3D11_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE
+ = D3D11_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER + 1,
+ D3D11_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE
+ = D3D11_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE + 1,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE
+ = D3D11_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE + 1,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS
+ = D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE + 1,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT
+ = D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS + 1,
+ D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS
+ = D3D11_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT + 1,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES
+ = D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS + 1,
+ D3D11_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED
+ = D3D11_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES + 1,
+ D3D11_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED
+ = D3D11_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED + 1,
+ D3D11_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED
+ = D3D11_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED + 1,
+ D3D11_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED = D3D11_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED + 1,
+ D3D11_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED = D3D11_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED + 1,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND
+ = D3D11_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED + 1,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND
+ = D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND + 1,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED
+ = D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE
+ = D3D11_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED + 1,
+ D3D11_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE + 1,
+ D3D11_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3
+ = D3D11_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED + 1,
+ D3D11_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3 + 1,
+ D3D11_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO
+ = D3D11_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION
+ = D3D11_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO + 1,
+ D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED
+ = D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION + 1,
+ D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR
+ = D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED + 1,
+ D3D11_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA
+ = D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR + 1,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP
+ = D3D11_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA + 1,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED
+ = D3D11_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP + 1,
+ D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT
+ = D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED + 1,
+ D3D11_MESSAGE_ID_COPYRESOURCE_NO_3D_MISMATCHED_UPDATES
+ = D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT + 1,
+ D3D11_MESSAGE_ID_D3D10L9_MESSAGES_END
+ = D3D11_MESSAGE_ID_COPYRESOURCE_NO_3D_MISMATCHED_UPDATES + 1,
+ D3D11_MESSAGE_ID_D3D11_MESSAGES_START = 0x200000,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFLAGS
+ = D3D11_MESSAGE_ID_D3D11_MESSAGES_START + 1,
+ D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDCLASSLINKAGE
+ = D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDCLASSLINKAGE
+ = D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDCLASSLINKAGE + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTREAMS
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDCLASSLINKAGE + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAMTORASTERIZER
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTREAMS + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTREAMS
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAMTORASTERIZER + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCLASSLINKAGE
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTREAMS + 1,
+ D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDCLASSLINKAGE
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCLASSLINKAGE + 1,
+ D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_COMMANDLISTFLAGS
+ = D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDCLASSLINKAGE + 1,
+ D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_SINGLETHREADED
+ = D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_COMMANDLISTFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALIDARG_RETURN
+ = D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_SINGLETHREADED + 1,
+ D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_CALL_RETURN
+ = D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALIDARG_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_CALL_RETURN + 1,
+ D3D11_MESSAGE_ID_FINISHDISPLAYLIST_ONIMMEDIATECONTEXT
+ = D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_FINISHDISPLAYLIST_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_FINISHDISPLAYLIST_ONIMMEDIATECONTEXT + 1,
+ D3D11_MESSAGE_ID_FINISHDISPLAYLIST_INVALID_CALL_RETURN
+ = D3D11_MESSAGE_ID_FINISHDISPLAYLIST_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_FINISHDISPLAYLIST_INVALID_CALL_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDENTRIES
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTRIDES
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDENTRIES + 1,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTRIDES
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTRIDES + 1,
+ D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_HAZARD
+ = D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTRIDES + 1,
+ D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_HAZARD
+ = D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_HAZARD + 1,
+ D3D11_MESSAGE_ID_HSSETSHADERRESOURCES_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_HAZARD + 1,
+ D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_HSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCALL
+ = D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_CREATEHULLSHADER_OUTOFMEMORY
+ = D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCALL + 1,
+ D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERBYTECODE
+ = D3D11_MESSAGE_ID_CREATEHULLSHADER_OUTOFMEMORY + 1,
+ D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERTYPE
+ = D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERBYTECODE + 1,
+ D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCLASSLINKAGE
+ = D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERTYPE + 1,
+ D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_VIEWS_EMPTY
+ = D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCLASSLINKAGE + 1,
+ D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFER
+ = D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_VIEWS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_BUFFERS_EMPTY
+ = D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFER + 1,
+ D3D11_MESSAGE_ID_DEVICE_HSSETSAMPLERS_SAMPLERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_HSGETSHADERRESOURCES_VIEWS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_HSSETSAMPLERS_SAMPLERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_HSGETCONSTANTBUFFERS_BUFFERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_HSGETSHADERRESOURCES_VIEWS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_HSGETSAMPLERS_SAMPLERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_HSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_HAZARD
+ = D3D11_MESSAGE_ID_DEVICE_HSGETSAMPLERS_SAMPLERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_HAZARD
+ = D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_HAZARD + 1,
+ D3D11_MESSAGE_ID_DSSETSHADERRESOURCES_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_HAZARD + 1,
+ D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_DSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCALL
+ = D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_CREATEDOMAINSHADER_OUTOFMEMORY
+ = D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCALL + 1,
+ D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERBYTECODE
+ = D3D11_MESSAGE_ID_CREATEDOMAINSHADER_OUTOFMEMORY + 1,
+ D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERTYPE
+ = D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERBYTECODE + 1,
+ D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCLASSLINKAGE
+ = D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERTYPE + 1,
+ D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_VIEWS_EMPTY
+ = D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCLASSLINKAGE + 1,
+ D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFER
+ = D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_VIEWS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_BUFFERS_EMPTY
+ = D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFER + 1,
+ D3D11_MESSAGE_ID_DEVICE_DSSETSAMPLERS_SAMPLERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_DSGETSHADERRESOURCES_VIEWS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_DSSETSAMPLERS_SAMPLERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_DSGETCONSTANTBUFFERS_BUFFERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_DSGETSHADERRESOURCES_VIEWS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_DSGETSAMPLERS_SAMPLERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_DSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_HS_XOR_DS_MISMATCH
+ = D3D11_MESSAGE_ID_DEVICE_DSGETSAMPLERS_SAMPLERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEFERRED_CONTEXT_REMOVAL_PROCESS_AT_FAULT
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_HS_XOR_DS_MISMATCH + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_INVALID_ARG_BUFFER
+ = D3D11_MESSAGE_ID_DEFERRED_CONTEXT_REMOVAL_PROCESS_AT_FAULT + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_UNALIGNED
+ = D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_INVALID_ARG_BUFFER + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_OVERFLOW
+ = D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_UNALIGNED + 1,
+ D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDMAPTYPE
+ = D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_OVERFLOW + 1,
+ D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDSUBRESOURCE
+ = D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDMAPTYPE + 1,
+ D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDFLAGS
+ = D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDSUBRESOURCE + 1,
+ D3D11_MESSAGE_ID_RESOURCE_MAP_ALREADYMAPPED = D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDFLAGS + 1,
+ D3D11_MESSAGE_ID_RESOURCE_MAP_DEVICEREMOVED_RETURN
+ = D3D11_MESSAGE_ID_RESOURCE_MAP_ALREADYMAPPED + 1,
+ D3D11_MESSAGE_ID_RESOURCE_MAP_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_RESOURCE_MAP_DEVICEREMOVED_RETURN + 1,
+ D3D11_MESSAGE_ID_RESOURCE_MAP_WITHOUT_INITIAL_DISCARD
+ = D3D11_MESSAGE_ID_RESOURCE_MAP_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_RESOURCE_UNMAP_INVALIDSUBRESOURCE
+ = D3D11_MESSAGE_ID_RESOURCE_MAP_WITHOUT_INITIAL_DISCARD + 1,
+ D3D11_MESSAGE_ID_RESOURCE_UNMAP_NOTMAPPED
+ = D3D11_MESSAGE_ID_RESOURCE_UNMAP_INVALIDSUBRESOURCE + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RASTERIZING_CONTROL_POINTS
+ = D3D11_MESSAGE_ID_RESOURCE_UNMAP_NOTMAPPED + 1,
+ D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_RASTERIZING_CONTROL_POINTS + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_SIGNATURE_MISMATCH
+ = D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_SIGNATURE_MISMATCH + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_CONTROL_POINT_COUNT_MISMATCH
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_TESSELLATOR_DOMAIN_MISMATCH
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_CONTROL_POINT_COUNT_MISMATCH + 1,
+ D3D11_MESSAGE_ID_CREATE_CONTEXT
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_TESSELLATOR_DOMAIN_MISMATCH + 1,
+ D3D11_MESSAGE_ID_LIVE_CONTEXT = D3D11_MESSAGE_ID_CREATE_CONTEXT + 1,
+ D3D11_MESSAGE_ID_DESTROY_CONTEXT = D3D11_MESSAGE_ID_LIVE_CONTEXT + 1,
+ D3D11_MESSAGE_ID_CREATE_BUFFER = D3D11_MESSAGE_ID_DESTROY_CONTEXT + 1,
+ D3D11_MESSAGE_ID_LIVE_BUFFER_WIN7 = D3D11_MESSAGE_ID_CREATE_BUFFER + 1,
+ D3D11_MESSAGE_ID_DESTROY_BUFFER = D3D11_MESSAGE_ID_LIVE_BUFFER_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_TEXTURE1D = D3D11_MESSAGE_ID_DESTROY_BUFFER + 1,
+ D3D11_MESSAGE_ID_LIVE_TEXTURE1D_WIN7 = D3D11_MESSAGE_ID_CREATE_TEXTURE1D + 1,
+ D3D11_MESSAGE_ID_DESTROY_TEXTURE1D = D3D11_MESSAGE_ID_LIVE_TEXTURE1D_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_TEXTURE2D = D3D11_MESSAGE_ID_DESTROY_TEXTURE1D + 1,
+ D3D11_MESSAGE_ID_LIVE_TEXTURE2D_WIN7 = D3D11_MESSAGE_ID_CREATE_TEXTURE2D + 1,
+ D3D11_MESSAGE_ID_DESTROY_TEXTURE2D = D3D11_MESSAGE_ID_LIVE_TEXTURE2D_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_TEXTURE3D = D3D11_MESSAGE_ID_DESTROY_TEXTURE2D + 1,
+ D3D11_MESSAGE_ID_LIVE_TEXTURE3D_WIN7 = D3D11_MESSAGE_ID_CREATE_TEXTURE3D + 1,
+ D3D11_MESSAGE_ID_DESTROY_TEXTURE3D = D3D11_MESSAGE_ID_LIVE_TEXTURE3D_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_SHADERRESOURCEVIEW = D3D11_MESSAGE_ID_DESTROY_TEXTURE3D + 1,
+ D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW_WIN7 = D3D11_MESSAGE_ID_CREATE_SHADERRESOURCEVIEW + 1,
+ D3D11_MESSAGE_ID_DESTROY_SHADERRESOURCEVIEW
+ = D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_RENDERTARGETVIEW = D3D11_MESSAGE_ID_DESTROY_SHADERRESOURCEVIEW + 1,
+ D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW_WIN7 = D3D11_MESSAGE_ID_CREATE_RENDERTARGETVIEW + 1,
+ D3D11_MESSAGE_ID_DESTROY_RENDERTARGETVIEW = D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILVIEW = D3D11_MESSAGE_ID_DESTROY_RENDERTARGETVIEW + 1,
+ D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW_WIN7 = D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILVIEW + 1,
+ D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILVIEW = D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_VERTEXSHADER = D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILVIEW + 1,
+ D3D11_MESSAGE_ID_LIVE_VERTEXSHADER_WIN7 = D3D11_MESSAGE_ID_CREATE_VERTEXSHADER + 1,
+ D3D11_MESSAGE_ID_DESTROY_VERTEXSHADER = D3D11_MESSAGE_ID_LIVE_VERTEXSHADER_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_HULLSHADER = D3D11_MESSAGE_ID_DESTROY_VERTEXSHADER + 1,
+ D3D11_MESSAGE_ID_LIVE_HULLSHADER = D3D11_MESSAGE_ID_CREATE_HULLSHADER + 1,
+ D3D11_MESSAGE_ID_DESTROY_HULLSHADER = D3D11_MESSAGE_ID_LIVE_HULLSHADER + 1,
+ D3D11_MESSAGE_ID_CREATE_DOMAINSHADER = D3D11_MESSAGE_ID_DESTROY_HULLSHADER + 1,
+ D3D11_MESSAGE_ID_LIVE_DOMAINSHADER = D3D11_MESSAGE_ID_CREATE_DOMAINSHADER + 1,
+ D3D11_MESSAGE_ID_DESTROY_DOMAINSHADER = D3D11_MESSAGE_ID_LIVE_DOMAINSHADER + 1,
+ D3D11_MESSAGE_ID_CREATE_GEOMETRYSHADER = D3D11_MESSAGE_ID_DESTROY_DOMAINSHADER + 1,
+ D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER_WIN7 = D3D11_MESSAGE_ID_CREATE_GEOMETRYSHADER + 1,
+ D3D11_MESSAGE_ID_DESTROY_GEOMETRYSHADER = D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_PIXELSHADER = D3D11_MESSAGE_ID_DESTROY_GEOMETRYSHADER + 1,
+ D3D11_MESSAGE_ID_LIVE_PIXELSHADER_WIN7 = D3D11_MESSAGE_ID_CREATE_PIXELSHADER + 1,
+ D3D11_MESSAGE_ID_DESTROY_PIXELSHADER = D3D11_MESSAGE_ID_LIVE_PIXELSHADER_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_INPUTLAYOUT = D3D11_MESSAGE_ID_DESTROY_PIXELSHADER + 1,
+ D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT_WIN7 = D3D11_MESSAGE_ID_CREATE_INPUTLAYOUT + 1,
+ D3D11_MESSAGE_ID_DESTROY_INPUTLAYOUT = D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_SAMPLER = D3D11_MESSAGE_ID_DESTROY_INPUTLAYOUT + 1,
+ D3D11_MESSAGE_ID_LIVE_SAMPLER_WIN7 = D3D11_MESSAGE_ID_CREATE_SAMPLER + 1,
+ D3D11_MESSAGE_ID_DESTROY_SAMPLER = D3D11_MESSAGE_ID_LIVE_SAMPLER_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_BLENDSTATE = D3D11_MESSAGE_ID_DESTROY_SAMPLER + 1,
+ D3D11_MESSAGE_ID_LIVE_BLENDSTATE_WIN7 = D3D11_MESSAGE_ID_CREATE_BLENDSTATE + 1,
+ D3D11_MESSAGE_ID_DESTROY_BLENDSTATE = D3D11_MESSAGE_ID_LIVE_BLENDSTATE_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILSTATE = D3D11_MESSAGE_ID_DESTROY_BLENDSTATE + 1,
+ D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE_WIN7 = D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILSTATE + 1,
+ D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILSTATE = D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_RASTERIZERSTATE = D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILSTATE + 1,
+ D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE_WIN7 = D3D11_MESSAGE_ID_CREATE_RASTERIZERSTATE + 1,
+ D3D11_MESSAGE_ID_DESTROY_RASTERIZERSTATE = D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_QUERY = D3D11_MESSAGE_ID_DESTROY_RASTERIZERSTATE + 1,
+ D3D11_MESSAGE_ID_LIVE_QUERY_WIN7 = D3D11_MESSAGE_ID_CREATE_QUERY + 1,
+ D3D11_MESSAGE_ID_DESTROY_QUERY = D3D11_MESSAGE_ID_LIVE_QUERY_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_PREDICATE = D3D11_MESSAGE_ID_DESTROY_QUERY + 1,
+ D3D11_MESSAGE_ID_LIVE_PREDICATE_WIN7 = D3D11_MESSAGE_ID_CREATE_PREDICATE + 1,
+ D3D11_MESSAGE_ID_DESTROY_PREDICATE = D3D11_MESSAGE_ID_LIVE_PREDICATE_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_COUNTER = D3D11_MESSAGE_ID_DESTROY_PREDICATE + 1,
+ D3D11_MESSAGE_ID_DESTROY_COUNTER = D3D11_MESSAGE_ID_CREATE_COUNTER + 1,
+ D3D11_MESSAGE_ID_CREATE_COMMANDLIST = D3D11_MESSAGE_ID_DESTROY_COUNTER + 1,
+ D3D11_MESSAGE_ID_LIVE_COMMANDLIST = D3D11_MESSAGE_ID_CREATE_COMMANDLIST + 1,
+ D3D11_MESSAGE_ID_DESTROY_COMMANDLIST = D3D11_MESSAGE_ID_LIVE_COMMANDLIST + 1,
+ D3D11_MESSAGE_ID_CREATE_CLASSINSTANCE = D3D11_MESSAGE_ID_DESTROY_COMMANDLIST + 1,
+ D3D11_MESSAGE_ID_LIVE_CLASSINSTANCE = D3D11_MESSAGE_ID_CREATE_CLASSINSTANCE + 1,
+ D3D11_MESSAGE_ID_DESTROY_CLASSINSTANCE = D3D11_MESSAGE_ID_LIVE_CLASSINSTANCE + 1,
+ D3D11_MESSAGE_ID_CREATE_CLASSLINKAGE = D3D11_MESSAGE_ID_DESTROY_CLASSINSTANCE + 1,
+ D3D11_MESSAGE_ID_LIVE_CLASSLINKAGE = D3D11_MESSAGE_ID_CREATE_CLASSLINKAGE + 1,
+ D3D11_MESSAGE_ID_DESTROY_CLASSLINKAGE = D3D11_MESSAGE_ID_LIVE_CLASSLINKAGE + 1,
+ D3D11_MESSAGE_ID_LIVE_DEVICE_WIN7 = D3D11_MESSAGE_ID_DESTROY_CLASSLINKAGE + 1,
+ D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY_WIN7 = D3D11_MESSAGE_ID_LIVE_DEVICE_WIN7 + 1,
+ D3D11_MESSAGE_ID_CREATE_COMPUTESHADER = D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY_WIN7 + 1,
+ D3D11_MESSAGE_ID_LIVE_COMPUTESHADER = D3D11_MESSAGE_ID_CREATE_COMPUTESHADER + 1,
+ D3D11_MESSAGE_ID_DESTROY_COMPUTESHADER = D3D11_MESSAGE_ID_LIVE_COMPUTESHADER + 1,
+ D3D11_MESSAGE_ID_CREATE_UNORDEREDACCESSVIEW = D3D11_MESSAGE_ID_DESTROY_COMPUTESHADER + 1,
+ D3D11_MESSAGE_ID_LIVE_UNORDEREDACCESSVIEW = D3D11_MESSAGE_ID_CREATE_UNORDEREDACCESSVIEW + 1,
+ D3D11_MESSAGE_ID_DESTROY_UNORDEREDACCESSVIEW = D3D11_MESSAGE_ID_LIVE_UNORDEREDACCESSVIEW + 1,
+ D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACES_FEATURELEVEL
+ = D3D11_MESSAGE_ID_DESTROY_UNORDEREDACCESSVIEW + 1,
+ D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACE_COUNT_MISMATCH
+ = D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACES_FEATURELEVEL + 1,
+ D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE
+ = D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACE_COUNT_MISMATCH + 1,
+ D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_INDEX
+ = D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE + 1,
+ D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_TYPE
+ = D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_INDEX + 1,
+ D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_DATA
+ = D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_TYPE + 1,
+ D3D11_MESSAGE_ID_DEVICE_SETSHADER_UNBOUND_INSTANCE_DATA
+ = D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_DATA + 1,
+ D3D11_MESSAGE_ID_DEVICE_SETSHADER_INSTANCE_DATA_BINDINGS
+ = D3D11_MESSAGE_ID_DEVICE_SETSHADER_UNBOUND_INSTANCE_DATA + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATESHADER_CLASSLINKAGE_FULL
+ = D3D11_MESSAGE_ID_DEVICE_SETSHADER_INSTANCE_DATA_BINDINGS + 1,
+ D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_UNRECOGNIZED_FEATURE
+ = D3D11_MESSAGE_ID_DEVICE_CREATESHADER_CLASSLINKAGE_FULL + 1,
+ D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_MISMATCHED_DATA_SIZE
+ = D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_UNRECOGNIZED_FEATURE + 1,
+ D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_INVALIDARG_RETURN
+ = D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_MISMATCHED_DATA_SIZE + 1,
+ D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_HAZARD
+ = D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_INVALIDARG_RETURN + 1,
+ D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_HAZARD
+ = D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_HAZARD + 1,
+ D3D11_MESSAGE_ID_CSSETSHADERRESOURCES_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_HAZARD + 1,
+ D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_CSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCALL
+ = D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_CREATECOMPUTESHADER_OUTOFMEMORY
+ = D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCALL + 1,
+ D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERBYTECODE
+ = D3D11_MESSAGE_ID_CREATECOMPUTESHADER_OUTOFMEMORY + 1,
+ D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERTYPE
+ = D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERBYTECODE + 1,
+ D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCLASSLINKAGE
+ = D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERTYPE + 1,
+ D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_VIEWS_EMPTY
+ = D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCLASSLINKAGE + 1,
+ D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFER
+ = D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_VIEWS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_BUFFERS_EMPTY
+ = D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFER + 1,
+ D3D11_MESSAGE_ID_DEVICE_CSSETSAMPLERS_SAMPLERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_CSGETSHADERRESOURCES_VIEWS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_CSSETSAMPLERS_SAMPLERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_CSGETCONSTANTBUFFERS_BUFFERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_CSGETSHADERRESOURCES_VIEWS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_CSGETSAMPLERS_SAMPLERS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_CSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEFLOATOPSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CSGETSAMPLERS_SAMPLERS_EMPTY + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEFLOATOPSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEFLOATOPSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEFLOATOPSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEFLOATOPSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEFLOATOPSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEFLOATOPSNOTSUPPORTED
+ + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEFLOATOPSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSTRUCTURESTRIDE
+ = D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFLAGS
+ = D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSTRUCTURESTRIDE + 1,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDRESOURCE
+ = D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDESC
+ = D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDRESOURCE + 1,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT
+ = D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDESC + 1,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDIMENSIONS
+ = D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_UNRECOGNIZEDFORMAT
+ = D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDIMENSIONS + 1,
+ D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_HAZARD
+ = D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_UNRECOGNIZEDFORMAT + 1,
+ D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_OVERLAPPING_OLD_SLOTS
+ = D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_HAZARD + 1,
+ D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NO_OP
+ = D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_OVERLAPPING_OLD_SLOTS
+ + 1,
+ D3D11_MESSAGE_ID_CSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NO_OP + 1,
+ D3D11_MESSAGE_ID_PSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_CSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDARG_RETURN
+ = D3D11_MESSAGE_ID_PSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDARG_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_TOOMANYOBJECTS
+ = D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_HAZARD
+ = D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_TOOMANYOBJECTS + 1,
+ D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_DENORMFLUSH
+ = D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_HAZARD + 1,
+ D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSS_VIEWS_EMPTY
+ = D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_DENORMFLUSH + 1,
+ D3D11_MESSAGE_ID_DEVICE_CSGETUNORDEREDACCESSS_VIEWS_EMPTY
+ = D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSS_VIEWS_EMPTY + 1,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFLAGS
+ = D3D11_MESSAGE_ID_DEVICE_CSGETUNORDEREDACCESSS_VIEWS_EMPTY + 1,
+ D3D11_MESSAGE_ID_CREATESHADERRESESOURCEVIEW_TOOMANYOBJECTS
+ = D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFLAGS + 1,
+ D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_INVALID_ARG_BUFFER
+ = D3D11_MESSAGE_ID_CREATESHADERRESESOURCEVIEW_TOOMANYOBJECTS + 1,
+ D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_UNALIGNED
+ = D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_INVALID_ARG_BUFFER + 1,
+ D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_OVERFLOW
+ = D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_UNALIGNED + 1,
+ D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDCONTEXT
+ = D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_OVERFLOW + 1,
+ D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDRESOURCE
+ = D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDCONTEXT + 1,
+ D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDMINLOD
+ = D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDRESOURCE + 1,
+ D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDCONTEXT
+ = D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDMINLOD + 1,
+ D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDRESOURCE
+ = D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDCONTEXT + 1,
+ D3D11_MESSAGE_ID_OMSETDEPTHSTENCIL_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDRESOURCE + 1,
+ D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DEPTH_READONLY
+ = D3D11_MESSAGE_ID_OMSETDEPTHSTENCIL_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_STENCIL_READONLY
+ = D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DEPTH_READONLY + 1,
+ D3D11_MESSAGE_ID_CHECKFEATURESUPPORT_FORMAT_DEPRECATED
+ = D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_STENCIL_READONLY + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RETURN_TYPE_MISMATCH
+ = D3D11_MESSAGE_ID_CHECKFEATURESUPPORT_FORMAT_DEPRECATED + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RETURN_TYPE_MISMATCH + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_UNORDEREDACCESSVIEW_RENDERTARGETVIEW_OVERLAP
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_DIMENSION_MISMATCH
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_UNORDEREDACCESSVIEW_RENDERTARGETVIEW_OVERLAP + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_APPEND_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_DIMENSION_MISMATCH + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMICS_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_APPEND_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_STRUCTURE_STRIDE_MISMATCH
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMICS_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_BUFFER_TYPE_MISMATCH
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_STRUCTURE_STRIDE_MISMATCH + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RAW_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_BUFFER_TYPE_MISMATCH + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_LD_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RAW_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_STORE_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_LD_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_ADD_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_STORE_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_BITWISE_OPS_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_ADD_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_CMPSTORE_CMPEXCHANGE_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_BITWISE_OPS_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_EXCHANGE_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_CMPSTORE_CMPEXCHANGE_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_SIGNED_MINMAX_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_EXCHANGE_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_UNSIGNED_MINMAX_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_SIGNED_MINMAX_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_DISPATCH_BOUND_RESOURCE_MAPPED
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_UNSIGNED_MINMAX_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_OVERFLOW
+ = D3D11_MESSAGE_ID_DEVICE_DISPATCH_BOUND_RESOURCE_MAPPED + 1,
+ D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_ZERO
+ = D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_OVERFLOW + 1,
+ D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_STRUCTURE_STRIDE_MISMATCH
+ = D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_ZERO + 1,
+ D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_BUFFER_TYPE_MISMATCH
+ = D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_STRUCTURE_STRIDE_MISMATCH + 1,
+ D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_RAW_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_BUFFER_TYPE_MISMATCH + 1,
+ D3D11_MESSAGE_ID_DEVICE_DISPATCH_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_RAW_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_DISPATCH_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDOFFSET
+ = D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_LARGEOFFSET
+ = D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDOFFSET + 1,
+ D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDDESTINATIONSTATE
+ = D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_LARGEOFFSET + 1,
+ D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDSOURCESTATE
+ = D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDDESTINATIONSTATE + 1,
+ D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_NOT_SUPPORTED
+ = D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDSOURCESTATE + 1,
+ D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDVIEW
+ = D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_NOT_SUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDOFFSET
+ = D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDVIEW + 1,
+ D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_TOOMANYVIEWS
+ = D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDOFFSET + 1,
+ D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_INVALIDFORMAT
+ = D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_TOOMANYVIEWS + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_COUNTER_UNSUPPORTED
+ = D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_INVALIDFORMAT + 1,
+ D3D11_MESSAGE_ID_REF_WARNING
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_COUNTER_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_PIXEL_SHADER_WITHOUT_RTV_OR_DSV
+ = D3D11_MESSAGE_ID_REF_WARNING + 1,
+ D3D11_MESSAGE_ID_SHADER_ABORT
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_PIXEL_SHADER_WITHOUT_RTV_OR_DSV + 1,
+ D3D11_MESSAGE_ID_SHADER_MESSAGE = D3D11_MESSAGE_ID_SHADER_ABORT + 1,
+ D3D11_MESSAGE_ID_SHADER_ERROR = D3D11_MESSAGE_ID_SHADER_MESSAGE + 1,
+ D3D11_MESSAGE_ID_OFFERRESOURCES_INVALIDRESOURCE = D3D11_MESSAGE_ID_SHADER_ERROR + 1,
+ D3D11_MESSAGE_ID_HSSETSAMPLERS_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_OFFERRESOURCES_INVALIDRESOURCE + 1,
+ D3D11_MESSAGE_ID_DSSETSAMPLERS_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_HSSETSAMPLERS_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_CSSETSAMPLERS_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_DSSETSAMPLERS_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_HSSETSHADER_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_CSSETSAMPLERS_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_DSSETSHADER_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_HSSETSHADER_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_CSSETSHADER_UNBINDDELETINGOBJECT
+ = D3D11_MESSAGE_ID_DSSETSHADER_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_ENQUEUESETEVENT_INVALIDARG_RETURN
+ = D3D11_MESSAGE_ID_CSSETSHADER_UNBINDDELETINGOBJECT + 1,
+ D3D11_MESSAGE_ID_ENQUEUESETEVENT_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_ENQUEUESETEVENT_INVALIDARG_RETURN + 1,
+ D3D11_MESSAGE_ID_ENQUEUESETEVENT_ACCESSDENIED_RETURN
+ = D3D11_MESSAGE_ID_ENQUEUESETEVENT_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NUMUAVS_INVALIDRANGE
+ = D3D11_MESSAGE_ID_ENQUEUESETEVENT_ACCESSDENIED_RETURN + 1,
+ D3D11_MESSAGE_ID_USE_OF_ZERO_REFCOUNT_OBJECT
+ = D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NUMUAVS_INVALIDRANGE
+ + 1,
+ D3D11_MESSAGE_ID_D3D11_MESSAGES_END = D3D11_MESSAGE_ID_USE_OF_ZERO_REFCOUNT_OBJECT + 1,
+ D3D11_MESSAGE_ID_D3D11_1_MESSAGES_START = 0x300000,
+ D3D11_MESSAGE_ID_CREATE_VIDEODECODER = D3D11_MESSAGE_ID_D3D11_1_MESSAGES_START + 1,
+ D3D11_MESSAGE_ID_CREATE_VIDEOPROCESSORENUM = D3D11_MESSAGE_ID_CREATE_VIDEODECODER + 1,
+ D3D11_MESSAGE_ID_CREATE_VIDEOPROCESSOR = D3D11_MESSAGE_ID_CREATE_VIDEOPROCESSORENUM + 1,
+ D3D11_MESSAGE_ID_CREATE_DECODEROUTPUTVIEW = D3D11_MESSAGE_ID_CREATE_VIDEOPROCESSOR + 1,
+ D3D11_MESSAGE_ID_CREATE_PROCESSORINPUTVIEW = D3D11_MESSAGE_ID_CREATE_DECODEROUTPUTVIEW + 1,
+ D3D11_MESSAGE_ID_CREATE_PROCESSOROUTPUTVIEW = D3D11_MESSAGE_ID_CREATE_PROCESSORINPUTVIEW + 1,
+ D3D11_MESSAGE_ID_CREATE_DEVICECONTEXTSTATE = D3D11_MESSAGE_ID_CREATE_PROCESSOROUTPUTVIEW + 1,
+ D3D11_MESSAGE_ID_LIVE_VIDEODECODER = D3D11_MESSAGE_ID_CREATE_DEVICECONTEXTSTATE + 1,
+ D3D11_MESSAGE_ID_LIVE_VIDEOPROCESSORENUM = D3D11_MESSAGE_ID_LIVE_VIDEODECODER + 1,
+ D3D11_MESSAGE_ID_LIVE_VIDEOPROCESSOR = D3D11_MESSAGE_ID_LIVE_VIDEOPROCESSORENUM + 1,
+ D3D11_MESSAGE_ID_LIVE_DECODEROUTPUTVIEW = D3D11_MESSAGE_ID_LIVE_VIDEOPROCESSOR + 1,
+ D3D11_MESSAGE_ID_LIVE_PROCESSORINPUTVIEW = D3D11_MESSAGE_ID_LIVE_DECODEROUTPUTVIEW + 1,
+ D3D11_MESSAGE_ID_LIVE_PROCESSOROUTPUTVIEW = D3D11_MESSAGE_ID_LIVE_PROCESSORINPUTVIEW + 1,
+ D3D11_MESSAGE_ID_LIVE_DEVICECONTEXTSTATE = D3D11_MESSAGE_ID_LIVE_PROCESSOROUTPUTVIEW + 1,
+ D3D11_MESSAGE_ID_DESTROY_VIDEODECODER = D3D11_MESSAGE_ID_LIVE_DEVICECONTEXTSTATE + 1,
+ D3D11_MESSAGE_ID_DESTROY_VIDEOPROCESSORENUM = D3D11_MESSAGE_ID_DESTROY_VIDEODECODER + 1,
+ D3D11_MESSAGE_ID_DESTROY_VIDEOPROCESSOR = D3D11_MESSAGE_ID_DESTROY_VIDEOPROCESSORENUM + 1,
+ D3D11_MESSAGE_ID_DESTROY_DECODEROUTPUTVIEW = D3D11_MESSAGE_ID_DESTROY_VIDEOPROCESSOR + 1,
+ D3D11_MESSAGE_ID_DESTROY_PROCESSORINPUTVIEW = D3D11_MESSAGE_ID_DESTROY_DECODEROUTPUTVIEW + 1,
+ D3D11_MESSAGE_ID_DESTROY_PROCESSOROUTPUTVIEW = D3D11_MESSAGE_ID_DESTROY_PROCESSORINPUTVIEW + 1,
+ D3D11_MESSAGE_ID_DESTROY_DEVICECONTEXTSTATE = D3D11_MESSAGE_ID_DESTROY_PROCESSOROUTPUTVIEW + 1,
+ D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDFLAGS
+ = D3D11_MESSAGE_ID_DESTROY_DEVICECONTEXTSTATE + 1,
+ D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDFEATURELEVEL
+ = D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_FEATURELEVELS_NOT_SUPPORTED
+ = D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDFEATURELEVEL + 1,
+ D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDREFIID
+ = D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_FEATURELEVELS_NOT_SUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_DISCARDVIEW_INVALIDVIEW
+ = D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDREFIID + 1,
+ D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION1_INVALIDCOPYFLAGS
+ = D3D11_MESSAGE_ID_DEVICE_DISCARDVIEW_INVALIDVIEW + 1,
+ D3D11_MESSAGE_ID_UPDATESUBRESOURCE1_INVALIDCOPYFLAGS
+ = D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION1_INVALIDCOPYFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFORCEDSAMPLECOUNT
+ = D3D11_MESSAGE_ID_UPDATESUBRESOURCE1_INVALIDCOPYFLAGS + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODER_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFORCEDSAMPLECOUNT + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODER_NULLPARAM
+ = D3D11_MESSAGE_ID_CREATEVIDEODECODER_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODER_INVALIDFORMAT
+ = D3D11_MESSAGE_ID_CREATEVIDEODECODER_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODER_ZEROWIDTHHEIGHT
+ = D3D11_MESSAGE_ID_CREATEVIDEODECODER_INVALIDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODER_DRIVER_INVALIDBUFFERSIZE
+ = D3D11_MESSAGE_ID_CREATEVIDEODECODER_ZEROWIDTHHEIGHT + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODER_DRIVER_INVALIDBUFFERUSAGE
+ = D3D11_MESSAGE_ID_CREATEVIDEODECODER_DRIVER_INVALIDBUFFERSIZE + 1,
+ D3D11_MESSAGE_ID_GETVIDEODECODERPROFILECOUNT_OUTOFMEMORY
+ = D3D11_MESSAGE_ID_CREATEVIDEODECODER_DRIVER_INVALIDBUFFERUSAGE + 1,
+ D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_NULLPARAM
+ = D3D11_MESSAGE_ID_GETVIDEODECODERPROFILECOUNT_OUTOFMEMORY + 1,
+ D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_INVALIDINDEX
+ = D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_INVALIDINDEX + 1,
+ D3D11_MESSAGE_ID_CHECKVIDEODECODERFORMAT_NULLPARAM
+ = D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_CHECKVIDEODECODERFORMAT_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_CHECKVIDEODECODERFORMAT_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETVIDEODECODERCONFIGCOUNT_NULLPARAM
+ = D3D11_MESSAGE_ID_CHECKVIDEODECODERFORMAT_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_GETVIDEODECODERCONFIGCOUNT_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_GETVIDEODECODERCONFIGCOUNT_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_NULLPARAM
+ = D3D11_MESSAGE_ID_GETVIDEODECODERCONFIGCOUNT_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_INVALIDINDEX
+ = D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_INVALIDINDEX + 1,
+ D3D11_MESSAGE_ID_GETDECODERCREATIONPARAMS_NULLPARAM
+ = D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_GETDECODERDRIVERHANDLE_NULLPARAM
+ = D3D11_MESSAGE_ID_GETDECODERCREATIONPARAMS_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETDECODERBUFFER_NULLPARAM
+ = D3D11_MESSAGE_ID_GETDECODERDRIVERHANDLE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETDECODERBUFFER_INVALIDBUFFER
+ = D3D11_MESSAGE_ID_GETDECODERBUFFER_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETDECODERBUFFER_INVALIDTYPE
+ = D3D11_MESSAGE_ID_GETDECODERBUFFER_INVALIDBUFFER + 1,
+ D3D11_MESSAGE_ID_GETDECODERBUFFER_LOCKED = D3D11_MESSAGE_ID_GETDECODERBUFFER_INVALIDTYPE + 1,
+ D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_NULLPARAM = D3D11_MESSAGE_ID_GETDECODERBUFFER_LOCKED + 1,
+ D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_INVALIDTYPE
+ = D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_NOTLOCKED
+ = D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_INVALIDTYPE + 1,
+ D3D11_MESSAGE_ID_DECODERBEGINFRAME_NULLPARAM
+ = D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_NOTLOCKED + 1,
+ D3D11_MESSAGE_ID_DECODERBEGINFRAME_HAZARD = D3D11_MESSAGE_ID_DECODERBEGINFRAME_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_DECODERENDFRAME_NULLPARAM = D3D11_MESSAGE_ID_DECODERBEGINFRAME_HAZARD + 1,
+ D3D11_MESSAGE_ID_SUBMITDECODERBUFFERS_NULLPARAM
+ = D3D11_MESSAGE_ID_DECODERENDFRAME_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_SUBMITDECODERBUFFERS_INVALIDTYPE
+ = D3D11_MESSAGE_ID_SUBMITDECODERBUFFERS_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_DECODEREXTENSION_NULLPARAM
+ = D3D11_MESSAGE_ID_SUBMITDECODERBUFFERS_INVALIDTYPE + 1,
+ D3D11_MESSAGE_ID_DECODEREXTENSION_INVALIDRESOURCE
+ = D3D11_MESSAGE_ID_DECODEREXTENSION_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_DECODEREXTENSION_INVALIDRESOURCE + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_NULLPARAM
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDFRAMEFORMAT
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDUSAGE
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDFRAMEFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDINPUTFRAMERATE
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDUSAGE + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDOUTPUTFRAMERATE
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDINPUTFRAMERATE + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDWIDTHHEIGHT
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDOUTPUTFRAMERATE + 1,
+ D3D11_MESSAGE_ID_GETVIDEOPROCESSORCONTENTDESC_NULLPARAM
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDWIDTHHEIGHT + 1,
+ D3D11_MESSAGE_ID_CHECKVIDEOPROCESSORFORMAT_NULLPARAM
+ = D3D11_MESSAGE_ID_GETVIDEOPROCESSORCONTENTDESC_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETVIDEOPROCESSORCAPS_NULLPARAM
+ = D3D11_MESSAGE_ID_CHECKVIDEOPROCESSORFORMAT_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETVIDEOPROCESSORRATECONVERSIONCAPS_NULLPARAM
+ = D3D11_MESSAGE_ID_GETVIDEOPROCESSORCAPS_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETVIDEOPROCESSORRATECONVERSIONCAPS_INVALIDINDEX
+ = D3D11_MESSAGE_ID_GETVIDEOPROCESSORRATECONVERSIONCAPS_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETVIDEOPROCESSORCUSTOMRATE_NULLPARAM
+ = D3D11_MESSAGE_ID_GETVIDEOPROCESSORRATECONVERSIONCAPS_INVALIDINDEX + 1,
+ D3D11_MESSAGE_ID_GETVIDEOPROCESSORCUSTOMRATE_INVALIDINDEX
+ = D3D11_MESSAGE_ID_GETVIDEOPROCESSORCUSTOMRATE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETVIDEOPROCESSORFILTERRANGE_NULLPARAM
+ = D3D11_MESSAGE_ID_GETVIDEOPROCESSORCUSTOMRATE_INVALIDINDEX + 1,
+ D3D11_MESSAGE_ID_GETVIDEOPROCESSORFILTERRANGE_UNSUPPORTED
+ = D3D11_MESSAGE_ID_GETVIDEOPROCESSORFILTERRANGE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOR_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_GETVIDEOPROCESSORFILTERRANGE_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOR_NULLPARAM
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOR_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTTARGETRECT_NULLPARAM
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOR_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTBACKGROUNDCOLOR_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTTARGETRECT_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTBACKGROUNDCOLOR_INVALIDALPHA
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTBACKGROUNDCOLOR_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCOLORSPACE_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTBACKGROUNDCOLOR_INVALIDALPHA + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCOLORSPACE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_UNSUPPORTED
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_INVALIDFILLMODE
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_INVALIDFILLMODE + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSTEREOMODE_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSTEREOMODE_UNSUPPORTED
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSTEREOMODE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTEXTENSION_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSTEREOMODE_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTTARGETRECT_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTEXTENSION_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTBACKGROUNDCOLOR_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTTARGETRECT_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCOLORSPACE_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTBACKGROUNDCOLOR_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTALPHAFILLMODE_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCOLORSPACE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCONSTRICTION_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTALPHAFILLMODE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_UNSUPPORTED
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCONSTRICTION_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_INVALIDSIZE
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTSTEREOMODE_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_INVALIDSIZE + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTEXTENSION_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTSTEREOMODE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTEXTENSION_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_INVALIDFORMAT
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_INVALIDFORMAT + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDRATE
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDFLAG
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDRATE + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDFLAG + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_INVALIDRECT
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_INVALIDRECT + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_INVALIDRECT
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_INVALIDRECT + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_INVALIDALPHA
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_INVALIDALPHA + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDCOUNT
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDALPHA
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDCOUNT + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDALPHA + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_INVALIDRATIO
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_INVALIDRATIO + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_INVALIDRANGE
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_UNSUPPORTED
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_INVALIDRANGE + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_UNSUPPORTED
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_FLIPUNSUPPORTED
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_MONOOFFSETUNSUPPORTED
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_FLIPUNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_FORMATUNSUPPORTED
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_MONOOFFSETUNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_INVALIDFORMAT
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_FORMATUNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMAUTOPROCESSINGMODE_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_INVALIDFORMAT + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMAUTOPROCESSINGMODE_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMAUTOPROCESSINGMODE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMAUTOPROCESSINGMODE_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDFILTER
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_UNSUPPORTED
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDFILTER + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDLEVEL
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMEXTENSION_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDLEVEL + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMEXTENSION_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMEXTENSION_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFRAMEFORMAT_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMEXTENSION_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFRAMEFORMAT_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMOUTPUTRATE_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSOURCERECT_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMOUTPUTRATE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMDESTRECT_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSOURCERECT_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMALPHA_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMDESTRECT_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPALETTE_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMALPHA_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPIXELASPECTRATIO_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPALETTE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMLUMAKEY_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPIXELASPECTRATIO_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSTEREOFORMAT_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMLUMAKEY_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMAUTOPROCESSINGMODE_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSTEREOFORMAT_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFILTER_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMAUTOPROCESSINGMODE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMEXTENSION_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFILTER_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMEXTENSION_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMEXTENSION_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMEXTENSION_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDSTREAMCOUNT
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_TARGETRECT
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDSTREAMCOUNT + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDOUTPUT
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_TARGETRECT + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDPASTFRAMES
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDOUTPUT + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDFUTUREFRAMES
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDPASTFRAMES + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDSOURCERECT
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDFUTUREFRAMES + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDDESTRECT
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDSOURCERECT + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDINPUTRESOURCE
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDDESTRECT + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDARRAYSIZE
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDINPUTRESOURCE + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDARRAY
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDARRAYSIZE + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_RIGHTEXPECTED
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDARRAY + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_RIGHTNOTEXPECTED
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_RIGHTEXPECTED + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_STEREONOTENABLED
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_RIGHTNOTEXPECTED + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDRIGHTRESOURCE
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_STEREONOTENABLED + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_NOSTEREOSTREAMS
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDRIGHTRESOURCE + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INPUTHAZARD
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_NOSTEREOSTREAMS + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_OUTPUTHAZARD
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INPUTHAZARD + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_OUTPUTHAZARD + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_NULLPARAM
+ = D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDTYPE
+ = D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDBIND
+ = D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDTYPE + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_UNSUPPORTEDFORMAT
+ = D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDBIND + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDMIP
+ = D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_UNSUPPORTEDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_UNSUPPORTEMIP
+ = D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDMIP + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDARRAYSIZE
+ = D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_UNSUPPORTEMIP + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDARRAY
+ = D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDARRAYSIZE + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDDIMENSION
+ = D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDARRAY + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDDIMENSION + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_NULLPARAM
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDTYPE
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDBIND
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDTYPE + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMISC
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDBIND + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDUSAGE
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMISC + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDFORMAT
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDUSAGE + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDFOURCC
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMIP
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDFOURCC + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_UNSUPPORTEDMIP
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMIP + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDARRAYSIZE
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_UNSUPPORTEDMIP + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDARRAY
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDARRAYSIZE + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDDIMENSION
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDARRAY + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDDIMENSION + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_NULLPARAM
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDTYPE
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDBIND
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDTYPE + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDFORMAT
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDBIND + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDMIP
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDFORMAT + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_UNSUPPORTEDMIP
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDMIP + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_UNSUPPORTEDARRAY
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_UNSUPPORTEDMIP + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDARRAY
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_UNSUPPORTEDARRAY + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDDIMENSION
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDARRAY + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_FORCED_SAMPLE_COUNT
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDDIMENSION + 1,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDLOGICOPS
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_FORCED_SAMPLE_COUNT + 1,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDARRAYWITHDECODER
+ = D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDLOGICOPS + 1,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDARRAYWITHDECODER
+ = D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDARRAYWITHDECODER + 1,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDARRAYWITHDECODER
+ = D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDARRAYWITHDECODER + 1,
+ D3D11_MESSAGE_ID_DEVICE_LOCKEDOUT_INTERFACE
+ = D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDARRAYWITHDECODER + 1,
+ D3D11_MESSAGE_ID_REF_WARNING_ATOMIC_INCONSISTENT
+ = D3D11_MESSAGE_ID_DEVICE_LOCKEDOUT_INTERFACE + 1,
+ D3D11_MESSAGE_ID_REF_WARNING_READING_UNINITIALIZED_RESOURCE
+ = D3D11_MESSAGE_ID_REF_WARNING_ATOMIC_INCONSISTENT + 1,
+ D3D11_MESSAGE_ID_REF_WARNING_RAW_HAZARD
+ = D3D11_MESSAGE_ID_REF_WARNING_READING_UNINITIALIZED_RESOURCE + 1,
+ D3D11_MESSAGE_ID_REF_WARNING_WAR_HAZARD = D3D11_MESSAGE_ID_REF_WARNING_RAW_HAZARD + 1,
+ D3D11_MESSAGE_ID_REF_WARNING_WAW_HAZARD = D3D11_MESSAGE_ID_REF_WARNING_WAR_HAZARD + 1,
+ D3D11_MESSAGE_ID_CREATECRYPTOSESSION_NULLPARAM = D3D11_MESSAGE_ID_REF_WARNING_WAW_HAZARD + 1,
+ D3D11_MESSAGE_ID_CREATECRYPTOSESSION_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_CREATECRYPTOSESSION_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETCRYPTOTYPE_NULLPARAM
+ = D3D11_MESSAGE_ID_CREATECRYPTOSESSION_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_GETDECODERPROFILE_NULLPARAM = D3D11_MESSAGE_ID_GETCRYPTOTYPE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATESIZE_NULLPARAM
+ = D3D11_MESSAGE_ID_GETDECODERPROFILE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATE_NULLPARAM
+ = D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATESIZE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATE_WRONGSIZE
+ = D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETCRYPTOSESSIONHANDLE_WRONGSIZE
+ = D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATE_WRONGSIZE + 1,
+ D3D11_MESSAGE_ID_NEGOTIATECRPYTOSESSIONKEYEXCHANGE_NULLPARAM
+ = D3D11_MESSAGE_ID_GETCRYPTOSESSIONHANDLE_WRONGSIZE + 1,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_UNSUPPORTED
+ = D3D11_MESSAGE_ID_NEGOTIATECRPYTOSESSIONKEYEXCHANGE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_NULLPARAM = D3D11_MESSAGE_ID_ENCRYPTIONBLT_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_WRONGDEVICE = D3D11_MESSAGE_ID_ENCRYPTIONBLT_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_WRONGDEVICE
+ = D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_WRONGDEVICE + 1,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_FORMAT_MISMATCH
+ = D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_WRONGDEVICE + 1,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_SIZE_MISMATCH
+ = D3D11_MESSAGE_ID_ENCRYPTIONBLT_FORMAT_MISMATCH + 1,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_MULTISAMPLED
+ = D3D11_MESSAGE_ID_ENCRYPTIONBLT_SIZE_MISMATCH + 1,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_NOT_STAGING
+ = D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_MULTISAMPLED + 1,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_MAPPED = D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_NOT_STAGING + 1,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_MAPPED = D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_MAPPED + 1,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_OFFERED = D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_MAPPED + 1,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_OFFERED = D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_OFFERED + 1,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_CONTENT_UNDEFINED
+ = D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_OFFERED + 1,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_UNSUPPORTED
+ = D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_CONTENT_UNDEFINED + 1,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_NULLPARAM = D3D11_MESSAGE_ID_DECRYPTIONBLT_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_WRONGDEVICE = D3D11_MESSAGE_ID_DECRYPTIONBLT_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_WRONGDEVICE
+ = D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_WRONGDEVICE + 1,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_FORMAT_MISMATCH
+ = D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_WRONGDEVICE + 1,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_SIZE_MISMATCH
+ = D3D11_MESSAGE_ID_DECRYPTIONBLT_FORMAT_MISMATCH + 1,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_MULTISAMPLED
+ = D3D11_MESSAGE_ID_DECRYPTIONBLT_SIZE_MISMATCH + 1,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_NOT_STAGING
+ = D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_MULTISAMPLED + 1,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_NOT_RENDER_TARGET
+ = D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_NOT_STAGING + 1,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_MAPPED
+ = D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_NOT_RENDER_TARGET + 1,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_MAPPED = D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_MAPPED + 1,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_OFFERED = D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_MAPPED + 1,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_OFFERED = D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_OFFERED + 1,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_CONTENT_UNDEFINED
+ = D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_OFFERED + 1,
+ D3D11_MESSAGE_ID_STARTSESSIONKEYREFRESH_NULLPARAM
+ = D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_CONTENT_UNDEFINED + 1,
+ D3D11_MESSAGE_ID_STARTSESSIONKEYREFRESH_INVALIDSIZE
+ = D3D11_MESSAGE_ID_STARTSESSIONKEYREFRESH_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_FINISHSESSIONKEYREFRESH_NULLPARAM
+ = D3D11_MESSAGE_ID_STARTSESSIONKEYREFRESH_INVALIDSIZE + 1,
+ D3D11_MESSAGE_ID_GETENCRYPTIONBLTKEY_NULLPARAM
+ = D3D11_MESSAGE_ID_FINISHSESSIONKEYREFRESH_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETENCRYPTIONBLTKEY_INVALIDSIZE
+ = D3D11_MESSAGE_ID_GETENCRYPTIONBLTKEY_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETCONTENTPROTECTIONCAPS_NULLPARAM
+ = D3D11_MESSAGE_ID_GETENCRYPTIONBLTKEY_INVALIDSIZE + 1,
+ D3D11_MESSAGE_ID_CHECKCRYPTOKEYEXCHANGE_NULLPARAM
+ = D3D11_MESSAGE_ID_GETCONTENTPROTECTIONCAPS_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_CHECKCRYPTOKEYEXCHANGE_INVALIDINDEX
+ = D3D11_MESSAGE_ID_CHECKCRYPTOKEYEXCHANGE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_NULLPARAM
+ = D3D11_MESSAGE_ID_CHECKCRYPTOKEYEXCHANGE_INVALIDINDEX + 1,
+ D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_UNSUPPORTED
+ = D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_INVALIDTYPE
+ = D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_OUTOFMEMORY_RETURN
+ = D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_INVALIDTYPE + 1,
+ D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATESIZE_INVALIDCHANNEL
+ = D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_OUTOFMEMORY_RETURN + 1,
+ D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATESIZE_NULLPARAM
+ = D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATESIZE_INVALIDCHANNEL + 1,
+ D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_INVALIDCHANNEL
+ = D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATESIZE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_NULLPARAM
+ = D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_INVALIDCHANNEL + 1,
+ D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_WRONGSIZE
+ = D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_INVALIDCHANNEL
+ = D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_WRONGSIZE + 1,
+ D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_NULLPARAM
+ = D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_INVALIDCHANNEL + 1,
+ D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_NULLPARAM
+ = D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_WRONGCHANNEL
+ = D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_UNSUPPORTEDQUERY
+ = D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_WRONGCHANNEL + 1,
+ D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_WRONGSIZE
+ = D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_UNSUPPORTEDQUERY + 1,
+ D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_INVALIDPROCESSINDEX
+ = D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_WRONGSIZE + 1,
+ D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_NULLPARAM
+ = D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_INVALIDPROCESSINDEX + 1,
+ D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_WRONGCHANNEL
+ = D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_UNSUPPORTEDCONFIGURE
+ = D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_WRONGCHANNEL + 1,
+ D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_WRONGSIZE
+ = D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_UNSUPPORTEDCONFIGURE + 1,
+ D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_INVALIDPROCESSIDTYPE
+ = D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_WRONGSIZE + 1,
+ D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT
+ = D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_INVALIDPROCESSIDTYPE + 1,
+ D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT
+ = D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + 1,
+ D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT
+ = D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + 1,
+ D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT
+ = D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + 1,
+ D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT
+ = D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + 1,
+ D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT
+ = D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + 1,
+ D3D11_MESSAGE_ID_NEGOTIATECRPYTOSESSIONKEYEXCHANGE_INVALIDSIZE
+ = D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + 1,
+ D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_INVALIDSIZE
+ = D3D11_MESSAGE_ID_NEGOTIATECRPYTOSESSIONKEYEXCHANGE_INVALIDSIZE + 1,
+ D3D11_MESSAGE_ID_OFFERRESOURCES_INVALIDPRIORITY
+ = D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_INVALIDSIZE + 1,
+ D3D11_MESSAGE_ID_GETCRYPTOSESSIONHANDLE_OUTOFMEMORY
+ = D3D11_MESSAGE_ID_OFFERRESOURCES_INVALIDPRIORITY + 1,
+ D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_NULLPARAM
+ = D3D11_MESSAGE_ID_GETCRYPTOSESSIONHANDLE_OUTOFMEMORY + 1,
+ D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDTYPE
+ = D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDBIND
+ = D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDTYPE + 1,
+ D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDARRAY
+ = D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDBIND + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_NULLPARAM
+ = D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDARRAY + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_INVALID
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_UNSUPPORTED
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_INVALID + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMROTATION_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDVIEW
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMROTATION_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEEXTENSIONSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDVIEW + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_SHADEREXTENSIONSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEEXTENSIONSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEEXTENSIONSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_SHADEREXTENSIONSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_SHADEREXTENSIONSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEEXTENSIONSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEEXTENSIONSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_SHADEREXTENSIONSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_SHADEREXTENSIONSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEEXTENSIONSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEEXTENSIONSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_SHADEREXTENSIONSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_SHADEREXTENSIONSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEEXTENSIONSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEEXTENSIONSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_SHADEREXTENSIONSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_SHADEREXTENSIONSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEEXTENSIONSNOTSUPPORTED
+ + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEEXTENSIONSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_SHADEREXTENSIONSNOTSUPPORTED
+ + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_SHADEREXTENSIONSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEEXTENSIONSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEEXTENSIONSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_SHADEREXTENSIONSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_SHADEREXTENSIONSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEEXTENSIONSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_MINPRECISION
+ = D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_SHADEREXTENSIONSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_UNSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_MINPRECISION + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_UNSUPPORTED
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_UAVSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_UAVSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_UAVSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_UAVSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_UAVSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_UAVSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_UAVSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UAVSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_UAVSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_UAVSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UAVSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_UAVSNOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_UAVSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_INVALIDOFFSET
+ = D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_UAVSNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_TOOMANYVIEWS
+ = D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_INVALIDOFFSET + 1,
+ D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_NOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_TOOMANYVIEWS + 1,
+ D3D11_MESSAGE_ID_SWAPDEVICECONTEXTSTATE_NOTSUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_NOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_UPDATESUBRESOURCE_PREFERUPDATESUBRESOURCE1
+ = D3D11_MESSAGE_ID_SWAPDEVICECONTEXTSTATE_NOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_GETDC_INACCESSIBLE
+ = D3D11_MESSAGE_ID_UPDATESUBRESOURCE_PREFERUPDATESUBRESOURCE1 + 1,
+ D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDRECT = D3D11_MESSAGE_ID_GETDC_INACCESSIBLE + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLE_MASK_IGNORED_ON_FL9
+ = D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDRECT + 1,
+ D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE1_NOT_SUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLE_MASK_IGNORED_ON_FL9 + 1,
+ D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BY_NAME_NOT_SUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE1_NOT_SUPPORTED + 1,
+ D3D11_MESSAGE_ID_ENQUEUESETEVENT_NOT_SUPPORTED
+ = D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BY_NAME_NOT_SUPPORTED + 1,
+ D3D11_MESSAGE_ID_OFFERRELEASE_NOT_SUPPORTED
+ = D3D11_MESSAGE_ID_ENQUEUESETEVENT_NOT_SUPPORTED + 1,
+ D3D11_MESSAGE_ID_OFFERRESOURCES_INACCESSIBLE = D3D11_MESSAGE_ID_OFFERRELEASE_NOT_SUPPORTED + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMSAA
+ = D3D11_MESSAGE_ID_OFFERRESOURCES_INACCESSIBLE + 1,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDMSAA
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMSAA + 1,
+ D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDSOURCERECT
+ = D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDMSAA + 1,
+ D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_EMPTYRECT
+ = D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDSOURCERECT + 1,
+ D3D11_MESSAGE_ID_UPDATESUBRESOURCE_EMPTYDESTBOX
+ = D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_EMPTYRECT + 1,
+ D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_EMPTYSOURCEBOX
+ = D3D11_MESSAGE_ID_UPDATESUBRESOURCE_EMPTYDESTBOX + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_LOGIC_OPS
+ = D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_EMPTYSOURCEBOX + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_DEPTHSTENCILVIEW_NOT_SET
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_LOGIC_OPS + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_DEPTHSTENCILVIEW_NOT_SET + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET_DUE_TO_FLIP_PRESENT
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET + 1,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET_DUE_TO_FLIP_PRESENT
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET_DUE_TO_FLIP_PRESENT + 1,
+ D3D11_MESSAGE_ID_GETDATAFORNEWHARDWAREKEY_NULLPARAM
+ = D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET_DUE_TO_FLIP_PRESENT + 1,
+ D3D11_MESSAGE_ID_CHECKCRYPTOSESSIONSTATUS_NULLPARAM
+ = D3D11_MESSAGE_ID_GETDATAFORNEWHARDWAREKEY_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETCRYPTOSESSIONPRIVATEDATASIZE_NULLPARAM
+ = D3D11_MESSAGE_ID_CHECKCRYPTOSESSIONSTATUS_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETVIDEODECODERCAPS_NULLPARAM
+ = D3D11_MESSAGE_ID_GETCRYPTOSESSIONPRIVATEDATASIZE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_GETVIDEODECODERCAPS_ZEROWIDTHHEIGHT
+ = D3D11_MESSAGE_ID_GETVIDEODECODERCAPS_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_CHECKVIDEODECODERDOWNSAMPLING_NULLPARAM
+ = D3D11_MESSAGE_ID_GETVIDEODECODERCAPS_ZEROWIDTHHEIGHT + 1,
+ D3D11_MESSAGE_ID_CHECKVIDEODECODERDOWNSAMPLING_INVALIDCOLORSPACE
+ = D3D11_MESSAGE_ID_CHECKVIDEODECODERDOWNSAMPLING_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_CHECKVIDEODECODERDOWNSAMPLING_ZEROWIDTHHEIGHT
+ = D3D11_MESSAGE_ID_CHECKVIDEODECODERDOWNSAMPLING_INVALIDCOLORSPACE + 1,
+ D3D11_MESSAGE_ID_VIDEODECODERENABLEDOWNSAMPLING_NULLPARAM
+ = D3D11_MESSAGE_ID_CHECKVIDEODECODERDOWNSAMPLING_ZEROWIDTHHEIGHT + 1,
+ D3D11_MESSAGE_ID_VIDEODECODERENABLEDOWNSAMPLING_UNSUPPORTED
+ = D3D11_MESSAGE_ID_VIDEODECODERENABLEDOWNSAMPLING_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEODECODERUPDATEDOWNSAMPLING_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEODECODERENABLEDOWNSAMPLING_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_VIDEODECODERUPDATEDOWNSAMPLING_UNSUPPORTED
+ = D3D11_MESSAGE_ID_VIDEODECODERUPDATEDOWNSAMPLING_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_CHECKVIDEOPROCESSORFORMATCONVERSION_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEODECODERUPDATEDOWNSAMPLING_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCOLORSPACE1_NULLPARAM
+ = D3D11_MESSAGE_ID_CHECKVIDEOPROCESSORFORMATCONVERSION_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCOLORSPACE1_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCOLORSPACE1_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE1_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCOLORSPACE1_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE1_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE1_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMMIRROR_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE1_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMMIRROR_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMMIRROR_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMMIRROR_UNSUPPORTED
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMMIRROR_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE1_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMMIRROR_UNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMMIRROR_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE1_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMMIRROR_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_INVALIDCOLORSPACE
+ = D3D11_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_ZEROWIDTHHEIGHT
+ = D3D11_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_INVALIDCOLORSPACE + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSHADERUSAGE_NULLPARAM
+ = D3D11_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_ZEROWIDTHHEIGHT + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTSHADERUSAGE_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSHADERUSAGE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTSHADERUSAGE_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_INVALIDSTREAMCOUNT
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_TARGETRECT
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_INVALIDSTREAMCOUNT + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_INVALIDSOURCERECT
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_TARGETRECT + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_INVALIDDESTRECT
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_INVALIDSOURCERECT + 1,
+ D3D11_MESSAGE_ID_GETCRYPTOSESSIONPRIVATEDATASIZE_INVALID_KEY_EXCHANGE_TYPE
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_INVALIDDESTRECT + 1,
+ D3D11_MESSAGE_ID_D3D11_1_MESSAGES_END
+ = D3D11_MESSAGE_ID_GETCRYPTOSESSIONPRIVATEDATASIZE_INVALID_KEY_EXCHANGE_TYPE + 1,
+ D3D11_MESSAGE_ID_D3D11_2_MESSAGES_START = D3D11_MESSAGE_ID_D3D11_1_MESSAGES_END + 1,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDUSAGE = D3D11_MESSAGE_ID_D3D11_2_MESSAGES_START + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDUSAGE = D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDUSAGE + 1,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDUSAGE
+ = D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDUSAGE + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_LEVEL9_STEPRATE_NOT_1
+ = D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDUSAGE + 1,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_LEVEL9_INSTANCING_NOT_SUPPORTED
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_LEVEL9_STEPRATE_NOT_1 + 1,
+ D3D11_MESSAGE_ID_UPDATETILEMAPPINGS_INVALID_PARAMETER
+ = D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_LEVEL9_INSTANCING_NOT_SUPPORTED + 1,
+ D3D11_MESSAGE_ID_COPYTILEMAPPINGS_INVALID_PARAMETER
+ = D3D11_MESSAGE_ID_UPDATETILEMAPPINGS_INVALID_PARAMETER + 1,
+ D3D11_MESSAGE_ID_COPYTILES_INVALID_PARAMETER
+ = D3D11_MESSAGE_ID_COPYTILEMAPPINGS_INVALID_PARAMETER + 1,
+ D3D11_MESSAGE_ID_UPDATETILES_INVALID_PARAMETER
+ = D3D11_MESSAGE_ID_COPYTILES_INVALID_PARAMETER + 1,
+ D3D11_MESSAGE_ID_RESIZETILEPOOL_INVALID_PARAMETER
+ = D3D11_MESSAGE_ID_UPDATETILES_INVALID_PARAMETER + 1,
+ D3D11_MESSAGE_ID_TILEDRESOURCEBARRIER_INVALID_PARAMETER
+ = D3D11_MESSAGE_ID_RESIZETILEPOOL_INVALID_PARAMETER + 1,
+ D3D11_MESSAGE_ID_NULL_TILE_MAPPING_ACCESS_WARNING
+ = D3D11_MESSAGE_ID_TILEDRESOURCEBARRIER_INVALID_PARAMETER + 1,
+ D3D11_MESSAGE_ID_NULL_TILE_MAPPING_ACCESS_ERROR
+ = D3D11_MESSAGE_ID_NULL_TILE_MAPPING_ACCESS_WARNING + 1,
+ D3D11_MESSAGE_ID_DIRTY_TILE_MAPPING_ACCESS
+ = D3D11_MESSAGE_ID_NULL_TILE_MAPPING_ACCESS_ERROR + 1,
+ D3D11_MESSAGE_ID_DUPLICATE_TILE_MAPPINGS_IN_COVERED_AREA
+ = D3D11_MESSAGE_ID_DIRTY_TILE_MAPPING_ACCESS + 1,
+ D3D11_MESSAGE_ID_TILE_MAPPINGS_IN_COVERED_AREA_DUPLICATED_OUTSIDE
+ = D3D11_MESSAGE_ID_DUPLICATE_TILE_MAPPINGS_IN_COVERED_AREA + 1,
+ D3D11_MESSAGE_ID_TILE_MAPPINGS_SHARED_BETWEEN_INCOMPATIBLE_RESOURCES
+ = D3D11_MESSAGE_ID_TILE_MAPPINGS_IN_COVERED_AREA_DUPLICATED_OUTSIDE + 1,
+ D3D11_MESSAGE_ID_TILE_MAPPINGS_SHARED_BETWEEN_INPUT_AND_OUTPUT
+ = D3D11_MESSAGE_ID_TILE_MAPPINGS_SHARED_BETWEEN_INCOMPATIBLE_RESOURCES + 1,
+ D3D11_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_INVALIDFLAGS
+ = D3D11_MESSAGE_ID_TILE_MAPPINGS_SHARED_BETWEEN_INPUT_AND_OUTPUT + 1,
+ D3D11_MESSAGE_ID_GETRESOURCETILING_NONTILED_RESOURCE
+ = D3D11_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_INVALIDFLAGS + 1,
+ D3D11_MESSAGE_ID_RESIZETILEPOOL_SHRINK_WITH_MAPPINGS_STILL_DEFINED_PAST_END
+ = D3D11_MESSAGE_ID_GETRESOURCETILING_NONTILED_RESOURCE + 1,
+ D3D11_MESSAGE_ID_NEED_TO_CALL_TILEDRESOURCEBARRIER
+ = D3D11_MESSAGE_ID_RESIZETILEPOOL_SHRINK_WITH_MAPPINGS_STILL_DEFINED_PAST_END + 1,
+ D3D11_MESSAGE_ID_CREATEDEVICE_INVALIDARGS
+ = D3D11_MESSAGE_ID_NEED_TO_CALL_TILEDRESOURCEBARRIER + 1,
+ D3D11_MESSAGE_ID_CREATEDEVICE_WARNING = D3D11_MESSAGE_ID_CREATEDEVICE_INVALIDARGS + 1,
+ D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWUINT_HAZARD
+ = D3D11_MESSAGE_ID_CREATEDEVICE_WARNING + 1,
+ D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_HAZARD
+ = D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWUINT_HAZARD + 1,
+ D3D11_MESSAGE_ID_TILED_RESOURCE_TIER_1_BUFFER_TEXTURE_MISMATCH
+ = D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_HAZARD + 1,
+ D3D11_MESSAGE_ID_CREATE_CRYPTOSESSION
+ = D3D11_MESSAGE_ID_TILED_RESOURCE_TIER_1_BUFFER_TEXTURE_MISMATCH + 1,
+ D3D11_MESSAGE_ID_CREATE_AUTHENTICATEDCHANNEL = D3D11_MESSAGE_ID_CREATE_CRYPTOSESSION + 1,
+ D3D11_MESSAGE_ID_LIVE_CRYPTOSESSION = D3D11_MESSAGE_ID_CREATE_AUTHENTICATEDCHANNEL + 1,
+ D3D11_MESSAGE_ID_LIVE_AUTHENTICATEDCHANNEL = D3D11_MESSAGE_ID_LIVE_CRYPTOSESSION + 1,
+ D3D11_MESSAGE_ID_DESTROY_CRYPTOSESSION = D3D11_MESSAGE_ID_LIVE_AUTHENTICATEDCHANNEL + 1,
+ D3D11_MESSAGE_ID_DESTROY_AUTHENTICATEDCHANNEL = D3D11_MESSAGE_ID_DESTROY_CRYPTOSESSION + 1,
+ D3D11_MESSAGE_ID_D3D11_2_MESSAGES_END = D3D11_MESSAGE_ID_DESTROY_AUTHENTICATEDCHANNEL + 1,
+ D3D11_MESSAGE_ID_D3D11_3_MESSAGES_START = D3D11_MESSAGE_ID_D3D11_2_MESSAGES_END + 1,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALID_CONSERVATIVERASTERMODE
+ = D3D11_MESSAGE_ID_D3D11_3_MESSAGES_START + 1,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_SYSTEMVALUE
+ = D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALID_CONSERVATIVERASTERMODE + 1,
+ D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDCONTEXTTYPE
+ = D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_SYSTEMVALUE + 1,
+ D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_DECODENOTSUPPORTED
+ = D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDCONTEXTTYPE + 1,
+ D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_ENCODENOTSUPPORTED
+ = D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_DECODENOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDPLANEINDEX
+ = D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_ENCODENOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDVIDEOPLANEINDEX
+ = D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDPLANEINDEX + 1,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_AMBIGUOUSVIDEOPLANEINDEX
+ = D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDVIDEOPLANEINDEX + 1,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDPLANEINDEX
+ = D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_AMBIGUOUSVIDEOPLANEINDEX + 1,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDVIDEOPLANEINDEX
+ = D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDPLANEINDEX + 1,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_AMBIGUOUSVIDEOPLANEINDEX
+ = D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDVIDEOPLANEINDEX + 1,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDPLANEINDEX
+ = D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_AMBIGUOUSVIDEOPLANEINDEX + 1,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDVIDEOPLANEINDEX
+ = D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDPLANEINDEX + 1,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_AMBIGUOUSVIDEOPLANEINDEX
+ = D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDVIDEOPLANEINDEX + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_INVALIDSCANDATAOFFSET
+ = D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_AMBIGUOUSVIDEOPLANEINDEX + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_NOTSUPPORTED
+ = D3D11_MESSAGE_ID_JPEGDECODE_INVALIDSCANDATAOFFSET + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_DIMENSIONSTOOLARGE = D3D11_MESSAGE_ID_JPEGDECODE_NOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_INVALIDCOMPONENTS
+ = D3D11_MESSAGE_ID_JPEGDECODE_DIMENSIONSTOOLARGE + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_DESTINATIONNOT2D
+ = D3D11_MESSAGE_ID_JPEGDECODE_INVALIDCOMPONENTS + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_TILEDRESOURCESUNSUPPORTED
+ = D3D11_MESSAGE_ID_JPEGDECODE_DESTINATIONNOT2D + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_GUARDRECTSUNSUPPORTED
+ = D3D11_MESSAGE_ID_JPEGDECODE_TILEDRESOURCESUNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_FORMATUNSUPPORTED
+ = D3D11_MESSAGE_ID_JPEGDECODE_GUARDRECTSUNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_INVALIDSUBRESOURCE
+ = D3D11_MESSAGE_ID_JPEGDECODE_FORMATUNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_INVALIDMIPLEVEL
+ = D3D11_MESSAGE_ID_JPEGDECODE_INVALIDSUBRESOURCE + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_EMPTYDESTBOX = D3D11_MESSAGE_ID_JPEGDECODE_INVALIDMIPLEVEL + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_DESTBOXNOT2D = D3D11_MESSAGE_ID_JPEGDECODE_EMPTYDESTBOX + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_DESTBOXNOTSUB = D3D11_MESSAGE_ID_JPEGDECODE_DESTBOXNOT2D + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_DESTBOXESINTERSECT = D3D11_MESSAGE_ID_JPEGDECODE_DESTBOXNOTSUB + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_XSUBSAMPLEMISMATCH
+ = D3D11_MESSAGE_ID_JPEGDECODE_DESTBOXESINTERSECT + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_YSUBSAMPLEMISMATCH
+ = D3D11_MESSAGE_ID_JPEGDECODE_XSUBSAMPLEMISMATCH + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_XSUBSAMPLEODD = D3D11_MESSAGE_ID_JPEGDECODE_YSUBSAMPLEMISMATCH + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_YSUBSAMPLEODD = D3D11_MESSAGE_ID_JPEGDECODE_XSUBSAMPLEODD + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_OUTPUTDIMENSIONSTOOLARGE
+ = D3D11_MESSAGE_ID_JPEGDECODE_YSUBSAMPLEODD + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_NONPOW2SCALEUNSUPPORTED
+ = D3D11_MESSAGE_ID_JPEGDECODE_OUTPUTDIMENSIONSTOOLARGE + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_FRACTIONALDOWNSCALETOLARGE
+ = D3D11_MESSAGE_ID_JPEGDECODE_NONPOW2SCALEUNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_CHROMASIZEMISMATCH
+ = D3D11_MESSAGE_ID_JPEGDECODE_FRACTIONALDOWNSCALETOLARGE + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_LUMACHROMASIZEMISMATCH
+ = D3D11_MESSAGE_ID_JPEGDECODE_CHROMASIZEMISMATCH + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_INVALIDNUMDESTINATIONS
+ = D3D11_MESSAGE_ID_JPEGDECODE_LUMACHROMASIZEMISMATCH + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_SUBBOXUNSUPPORTED
+ = D3D11_MESSAGE_ID_JPEGDECODE_INVALIDNUMDESTINATIONS + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_1DESTUNSUPPORTEDFORMAT
+ = D3D11_MESSAGE_ID_JPEGDECODE_SUBBOXUNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_3DESTUNSUPPORTEDFORMAT
+ = D3D11_MESSAGE_ID_JPEGDECODE_1DESTUNSUPPORTEDFORMAT + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_SCALEUNSUPPORTED
+ = D3D11_MESSAGE_ID_JPEGDECODE_3DESTUNSUPPORTEDFORMAT + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_INVALIDSOURCESIZE
+ = D3D11_MESSAGE_ID_JPEGDECODE_SCALEUNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_INVALIDCOPYFLAGS
+ = D3D11_MESSAGE_ID_JPEGDECODE_INVALIDSOURCESIZE + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_HAZARD = D3D11_MESSAGE_ID_JPEGDECODE_INVALIDCOPYFLAGS + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPORTEDSRCBUFFERUSAGE = D3D11_MESSAGE_ID_JPEGDECODE_HAZARD + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPORTEDSRCBUFFERMISCFLAGS
+ = D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPORTEDSRCBUFFERUSAGE + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPORTEDDSTTEXTUREUSAGE
+ = D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPORTEDSRCBUFFERMISCFLAGS + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_BACKBUFFERNOTSUPPORTED
+ = D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPORTEDDSTTEXTUREUSAGE + 1,
+ D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPRTEDCOPYFLAGS
+ = D3D11_MESSAGE_ID_JPEGDECODE_BACKBUFFERNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_JPEGENCODE_NOTSUPPORTED = D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPRTEDCOPYFLAGS + 1,
+ D3D11_MESSAGE_ID_JPEGENCODE_INVALIDSCANDATAOFFSET
+ = D3D11_MESSAGE_ID_JPEGENCODE_NOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_JPEGENCODE_INVALIDCOMPONENTS
+ = D3D11_MESSAGE_ID_JPEGENCODE_INVALIDSCANDATAOFFSET + 1,
+ D3D11_MESSAGE_ID_JPEGENCODE_SOURCENOT2D = D3D11_MESSAGE_ID_JPEGENCODE_INVALIDCOMPONENTS + 1,
+ D3D11_MESSAGE_ID_JPEGENCODE_TILEDRESOURCESUNSUPPORTED
+ = D3D11_MESSAGE_ID_JPEGENCODE_SOURCENOT2D + 1,
+ D3D11_MESSAGE_ID_JPEGENCODE_GUARDRECTSUNSUPPORTED
+ = D3D11_MESSAGE_ID_JPEGENCODE_TILEDRESOURCESUNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_JPEGENCODE_XSUBSAMPLEMISMATCH
+ = D3D11_MESSAGE_ID_JPEGENCODE_GUARDRECTSUNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_JPEGENCODE_YSUBSAMPLEMISMATCH
+ = D3D11_MESSAGE_ID_JPEGENCODE_XSUBSAMPLEMISMATCH + 1,
+ D3D11_MESSAGE_ID_JPEGENCODE_FORMATUNSUPPORTED
+ = D3D11_MESSAGE_ID_JPEGENCODE_YSUBSAMPLEMISMATCH + 1,
+ D3D11_MESSAGE_ID_JPEGENCODE_INVALIDSUBRESOURCE
+ = D3D11_MESSAGE_ID_JPEGENCODE_FORMATUNSUPPORTED + 1,
+ D3D11_MESSAGE_ID_JPEGENCODE_INVALIDMIPLEVEL
+ = D3D11_MESSAGE_ID_JPEGENCODE_INVALIDSUBRESOURCE + 1,
+ D3D11_MESSAGE_ID_JPEGENCODE_DIMENSIONSTOOLARGE
+ = D3D11_MESSAGE_ID_JPEGENCODE_INVALIDMIPLEVEL + 1,
+ D3D11_MESSAGE_ID_JPEGENCODE_HAZARD = D3D11_MESSAGE_ID_JPEGENCODE_DIMENSIONSTOOLARGE + 1,
+ D3D11_MESSAGE_ID_JPEGENCODE_UNSUPPORTEDDSTBUFFERUSAGE = D3D11_MESSAGE_ID_JPEGENCODE_HAZARD + 1,
+ D3D11_MESSAGE_ID_JPEGENCODE_UNSUPPORTEDDSTBUFFERMISCFLAGS
+ = D3D11_MESSAGE_ID_JPEGENCODE_UNSUPPORTEDDSTBUFFERUSAGE + 1,
+ D3D11_MESSAGE_ID_JPEGENCODE_UNSUPPORTEDSRCTEXTUREUSAGE
+ = D3D11_MESSAGE_ID_JPEGENCODE_UNSUPPORTEDDSTBUFFERMISCFLAGS + 1,
+ D3D11_MESSAGE_ID_JPEGENCODE_BACKBUFFERNOTSUPPORTED
+ = D3D11_MESSAGE_ID_JPEGENCODE_UNSUPPORTEDSRCTEXTUREUSAGE + 1,
+ D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNSUPPORTEDCONTEXTTTYPEFORQUERY
+ = D3D11_MESSAGE_ID_JPEGENCODE_BACKBUFFERNOTSUPPORTED + 1,
+ D3D11_MESSAGE_ID_FLUSH1_INVALIDCONTEXTTYPE
+ = D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNSUPPORTEDCONTEXTTTYPEFORQUERY + 1,
+ D3D11_MESSAGE_ID_DEVICE_SETHARDWAREPROTECTION_INVALIDCONTEXT
+ = D3D11_MESSAGE_ID_FLUSH1_INVALIDCONTEXTTYPE + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTHDRMETADATA_NULLPARAM
+ = D3D11_MESSAGE_ID_DEVICE_SETHARDWAREPROTECTION_INVALIDCONTEXT + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTHDRMETADATA_INVALIDSIZE
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTHDRMETADATA_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTHDRMETADATA_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTHDRMETADATA_INVALIDSIZE + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTHDRMETADATA_INVALIDSIZE
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTHDRMETADATA_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMHDRMETADATA_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTHDRMETADATA_INVALIDSIZE + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMHDRMETADATA_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMHDRMETADATA_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMHDRMETADATA_INVALIDSIZE
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMHDRMETADATA_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMHDRMETADATA_NULLPARAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMHDRMETADATA_INVALIDSIZE + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMHDRMETADATA_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMHDRMETADATA_NULLPARAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMHDRMETADATA_INVALIDSIZE
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMHDRMETADATA_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFRAMEFORMAT_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMHDRMETADATA_INVALIDSIZE + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFRAMEFORMAT_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMOUTPUTRATE_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSOURCERECT_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMOUTPUTRATE_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMDESTRECT_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSOURCERECT_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMALPHA_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMDESTRECT_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPALETTE_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMALPHA_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPIXELASPECTRATIO_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPALETTE_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMLUMAKEY_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPIXELASPECTRATIO_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSTEREOFORMAT_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMLUMAKEY_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMAUTOPROCESSINGMODE_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSTEREOFORMAT_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFILTER_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMAUTOPROCESSINGMODE_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMROTATION_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFILTER_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE1_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMROTATION_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMMIRROR_INVALIDSTREAM
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE1_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_CREATE_FENCE
+ = D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMMIRROR_INVALIDSTREAM + 1,
+ D3D11_MESSAGE_ID_LIVE_FENCE = D3D11_MESSAGE_ID_CREATE_FENCE + 1,
+ D3D11_MESSAGE_ID_DESTROY_FENCE = D3D11_MESSAGE_ID_LIVE_FENCE + 1,
+ D3D11_MESSAGE_ID_D3D11_3_MESSAGES_END = D3D11_MESSAGE_ID_DESTROY_FENCE + 1,
+}}
+STRUCT!{struct D3D11_MESSAGE {
+ Category: D3D11_MESSAGE_CATEGORY,
+ Severity: D3D11_MESSAGE_SEVERITY,
+ ID: D3D11_MESSAGE_ID,
+ pDescription: *const c_char,
+ DescriptionByteLength: SIZE_T,
+}}
+STRUCT!{struct D3D11_INFO_QUEUE_FILTER_DESC {
+ NumCategories: UINT,
+ pCategoryList: *const D3D11_MESSAGE_CATEGORY,
+ NumSeverities: UINT,
+ pSeverityList: *const D3D11_MESSAGE_SEVERITY,
+ NumIDs: UINT,
+ pIDList: *const D3D11_MESSAGE_ID,
+}}
+STRUCT!{struct D3D11_INFO_QUEUE_FILTER {
+ AllowList: D3D11_INFO_QUEUE_FILTER_DESC,
+ DenyList: D3D11_INFO_QUEUE_FILTER_DESC,
+}}
+pub const D3D11_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT: UINT64 = 1024;
+RIDL!{#[uuid(0x6543dbb6, 0x1b48, 0x42f5, 0xab, 0x82, 0xe9, 0x7e, 0xc7, 0x43, 0x26, 0xf6)]
+interface ID3D11InfoQueue(ID3D11InfoQueueVtbl): IUnknown(IUnknownVtbl) {
+ fn SetMessageCountLimit(
+ MessageCountLimit: UINT64,
+ ) -> HRESULT,
+ fn ClearStoredMessages() -> (),
+ fn GetMessage(
+ MessageIndex: UINT64,
+ pMessage: *mut D3D11_MESSAGE,
+ pMessageByteLength: *mut SIZE_T,
+ ) -> HRESULT,
+ fn GetNumMessagesAllowedByStorageFilter() -> UINT64,
+ fn GetNumMessagesDeniedByStorageFilter() -> UINT64,
+ fn GetNumStoredMessages() -> UINT64,
+ fn GetNumStoredMessagesAllowedByRetrievalFilter() -> UINT64,
+ fn GetNumMessagesDiscardedByMessageCountLimit() -> UINT64,
+ fn GetMessageCountLimit() -> UINT64,
+ fn AddStorageFilterEntries(
+ pFilter: *const D3D11_INFO_QUEUE_FILTER,
+ ) -> HRESULT,
+ fn GetStorageFilter(
+ pFilter: *mut D3D11_INFO_QUEUE_FILTER,
+ pFilterByteLength: *mut SIZE_T,
+ ) -> HRESULT,
+ fn ClearStorageFilter() -> (),
+ fn PushEmptyStorageFilter() -> HRESULT,
+ fn PushCopyOfStorageFilter() -> HRESULT,
+ fn PushStorageFilter(
+ pFilter: *const D3D11_INFO_QUEUE_FILTER,
+ ) -> HRESULT,
+ fn PopStorageFilter() -> (),
+ fn GetStorageFilterStackSize() -> UINT,
+ fn AddRetrievalFilterEntries(
+ pFilter: *const D3D11_INFO_QUEUE_FILTER,
+ ) -> HRESULT,
+ fn GetRetrievalFilter(
+ pFilter: *mut D3D11_INFO_QUEUE_FILTER,
+ pFilterByteLength: *mut SIZE_T,
+ ) -> HRESULT,
+ fn ClearRetrievalFilter() -> (),
+ fn PushEmptyRetrievalFilter() -> HRESULT,
+ fn PushCopyOfRetrievalFilter() -> HRESULT,
+ fn PushRetrievalFilter(
+ pFilter: *const D3D11_INFO_QUEUE_FILTER,
+ ) -> HRESULT,
+ fn PopRetrievalFilter() -> (),
+ fn GetRetrievalFilterStackSize() -> UINT,
+ fn AddMessage(
+ Category: D3D11_MESSAGE_CATEGORY,
+ Severity: D3D11_MESSAGE_SEVERITY,
+ ID: D3D11_MESSAGE_ID,
+ pDescription: LPCSTR,
+ ) -> HRESULT,
+ fn AddApplicationMessage(
+ Severity: D3D11_MESSAGE_SEVERITY,
+ pDescription: LPCSTR,
+ ) -> HRESULT,
+ fn SetBreakOnCategory(
+ Category: D3D11_MESSAGE_CATEGORY,
+ bEnable: BOOL,
+ ) -> HRESULT,
+ fn SetBreakOnSeverity(
+ ID: D3D11_MESSAGE_ID,
+ bEnable: BOOL,
+ ) -> HRESULT,
+ fn SetBreakOnID(
+ Severity: D3D11_MESSAGE_SEVERITY,
+ bEnable: BOOL,
+ ) -> HRESULT,
+ fn GetBreakOnCategory(
+ Category: D3D11_MESSAGE_CATEGORY,
+ ) -> BOOL,
+ fn GetBreakOnSeverity(
+ Severity: D3D11_MESSAGE_SEVERITY,
+ ) -> BOOL,
+ fn GetBreakOnID(
+ ID: D3D11_MESSAGE_ID,
+ ) -> BOOL,
+ fn SetMuteDebugOutput(
+ bMute: BOOL,
+ ) -> (),
+ fn GetMuteDebugOutput() -> BOOL,
+}}
+DEFINE_GUID!{IID_ID3D11Debug,
+ 0x79cf2233, 0x7536, 0x4948, 0x9d, 0x36, 0x1e, 0x46, 0x92, 0xdc, 0x57, 0x60}
+DEFINE_GUID!{IID_ID3D11SwitchToRef,
+ 0x1ef337e3, 0x58e7, 0x4f83, 0xa6, 0x92, 0xdb, 0x22, 0x1f, 0x5e, 0xd4, 0x7e}
+DEFINE_GUID!{IID_ID3D11TracingDevice,
+ 0x1911c771, 0x1587, 0x413e, 0xa7, 0xe0, 0xfb, 0x26, 0xc3, 0xde, 0x02, 0x68}
+DEFINE_GUID!{IID_ID3D11RefTrackingOptions,
+ 0x193dacdf, 0x0db2, 0x4c05, 0xa5, 0x5c, 0xef, 0x06, 0xca, 0xc5, 0x6f, 0xd9}
+DEFINE_GUID!{IID_ID3D11RefDefaultTrackingOptions,
+ 0x03916615, 0xc644, 0x418c, 0x9b, 0xf4, 0x75, 0xdb, 0x5b, 0xe6, 0x3c, 0xa0}
+DEFINE_GUID!{IID_ID3D11InfoQueue,
+ 0x6543dbb6, 0x1b48, 0x42f5, 0xab, 0x82, 0xe9, 0x7e, 0xc7, 0x43, 0x26, 0xf6}
diff --git a/vendor/winapi/src/um/d3d11shader.rs b/vendor/winapi/src/um/d3d11shader.rs
new file mode 100644
index 000000000..ebe06b424
--- /dev/null
+++ b/vendor/winapi/src/um/d3d11shader.rs
@@ -0,0 +1,477 @@
+// 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 ctypes::c_int;
+use shared::basetsd::UINT64;
+use shared::minwindef::{BOOL, BYTE, INT, LPVOID, UINT};
+use um::d3dcommon::{
+ D3D_CBUFFER_TYPE, D3D_FEATURE_LEVEL, D3D_INTERPOLATION_MODE, D3D_MIN_PRECISION, D3D_NAME,
+ D3D_PARAMETER_FLAGS, D3D_PRIMITIVE, D3D_PRIMITIVE_TOPOLOGY, D3D_REGISTER_COMPONENT_TYPE,
+ D3D_RESOURCE_RETURN_TYPE, D3D_SHADER_INPUT_TYPE, D3D_SHADER_VARIABLE_CLASS,
+ D3D_SHADER_VARIABLE_TYPE, D3D_SRV_DIMENSION, D3D_TESSELLATOR_DOMAIN,
+ D3D_TESSELLATOR_OUTPUT_PRIMITIVE, D3D_TESSELLATOR_PARTITIONING, ID3DBlob,
+};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPCSTR};
+ENUM!{enum D3D11_SHADER_VERSION_TYPE {
+ D3D11_SHVER_PIXEL_SHADER = 0,
+ D3D11_SHVER_VERTEX_SHADER = 1,
+ D3D11_SHVER_GEOMETRY_SHADER = 2,
+ D3D11_SHVER_HULL_SHADER = 3,
+ D3D11_SHVER_DOMAIN_SHADER = 4,
+ D3D11_SHVER_COMPUTE_SHADER = 5,
+ D3D11_SHVER_RESERVED0 = 0xFFF0,
+}}
+pub const D3D_RETURN_PARAMETER_INDEX: c_int = -1;
+pub type D3D11_RESOURCE_RETURN_TYPE = D3D_RESOURCE_RETURN_TYPE;
+pub type D3D11_CBUFFER_TYPE = D3D_CBUFFER_TYPE;
+STRUCT!{struct D3D11_SIGNATURE_PARAMETER_DESC {
+ SemanticName: LPCSTR,
+ SemanticIndex: UINT,
+ Register: UINT,
+ SystemValueType: D3D_NAME,
+ ComponentType: D3D_REGISTER_COMPONENT_TYPE,
+ Mask: BYTE,
+ ReadWriteMask: BYTE,
+ Stream: UINT,
+ MinPrecision: D3D_MIN_PRECISION,
+}}
+STRUCT!{struct D3D11_SHADER_BUFFER_DESC {
+ Name: LPCSTR,
+ Type: D3D_CBUFFER_TYPE,
+ Variables: UINT,
+ Size: UINT,
+ uFlags: UINT,
+}}
+STRUCT!{struct D3D11_SHADER_VARIABLE_DESC {
+ Name: LPCSTR,
+ StartOffset: UINT,
+ Size: UINT,
+ uFlags: UINT,
+ DefaultValue: LPVOID,
+ StartTexture: UINT,
+ TextureSize: UINT,
+ StartSampler: UINT,
+ SamplerSize: UINT,
+}}
+STRUCT!{struct D3D11_SHADER_TYPE_DESC {
+ Class: D3D_SHADER_VARIABLE_CLASS,
+ Type: D3D_SHADER_VARIABLE_TYPE,
+ Rows: UINT,
+ Columns: UINT,
+ Elements: UINT,
+ Members: UINT,
+ Offset: UINT,
+ Name: LPCSTR,
+}}
+pub type D3D11_TESSELLATOR_DOMAIN = D3D_TESSELLATOR_DOMAIN;
+pub type D3D11_TESSELLATOR_PARTITIONING = D3D_TESSELLATOR_PARTITIONING;
+pub type D3D11_TESSELLATOR_OUTPUT_PRIMITIVE = D3D_TESSELLATOR_OUTPUT_PRIMITIVE;
+STRUCT!{struct D3D11_SHADER_DESC {
+ Version: UINT,
+ Creator: LPCSTR,
+ Flags: UINT,
+ ConstantBuffers: UINT,
+ BoundResources: UINT,
+ InputParameters: UINT,
+ OutputParameters: UINT,
+ InstructionCount: UINT,
+ TempRegisterCount: UINT,
+ TempArrayCount: UINT,
+ DefCount: UINT,
+ DclCount: UINT,
+ TextureNormalInstructions: UINT,
+ TextureLoadInstructions: UINT,
+ TextureCompInstructions: UINT,
+ TextureBiasInstructions: UINT,
+ TextureGradientInstructions: UINT,
+ FloatInstructionCount: UINT,
+ IntInstructionCount: UINT,
+ UintInstructionCount: UINT,
+ StaticFlowControlCount: UINT,
+ DynamicFlowControlCount: UINT,
+ MacroInstructionCount: UINT,
+ ArrayInstructionCount: UINT,
+ CutInstructionCount: UINT,
+ EmitInstructionCount: UINT,
+ GSOutputTopology: D3D_PRIMITIVE_TOPOLOGY,
+ GSMaxOutputVertexCount: UINT,
+ InputPrimitive: D3D_PRIMITIVE,
+ PatchConstantParameters: UINT,
+ cGSInstanceCount: UINT,
+ cControlPoints: UINT,
+ HSOutputPrimitive: D3D_TESSELLATOR_OUTPUT_PRIMITIVE,
+ HSPartitioning: D3D_TESSELLATOR_PARTITIONING,
+ TessellatorDomain: D3D_TESSELLATOR_DOMAIN,
+ cBarrierInstructions: UINT,
+ cInterlockedInstructions: UINT,
+ cTextureStoreInstructions: UINT,
+}}
+STRUCT!{struct D3D11_SHADER_INPUT_BIND_DESC {
+ Name: LPCSTR,
+ Type: D3D_SHADER_INPUT_TYPE,
+ BindPoint: UINT,
+ BindCount: UINT,
+ uFlags: UINT,
+ ReturnType: D3D_RESOURCE_RETURN_TYPE,
+ Dimension: D3D_SRV_DIMENSION,
+ NumSamples: UINT,
+}}
+pub const D3D_SHADER_REQUIRES_DOUBLES: UINT64 = 0x00000001;
+pub const D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL: UINT64 = 0x00000002;
+pub const D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE: UINT64 = 0x00000004;
+pub const D3D_SHADER_REQUIRES_64_UAVS: UINT64 = 0x00000008;
+pub const D3D_SHADER_REQUIRES_MINIMUM_PRECISION: UINT64 = 0x00000010;
+pub const D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS: UINT64 = 0x00000020;
+pub const D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS: UINT64 = 0x00000040;
+pub const D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING: UINT64 = 0x00000080;
+pub const D3D_SHADER_REQUIRES_TILED_RESOURCES: UINT64 = 0x00000100;
+STRUCT!{struct D3D11_LIBRARY_DESC {
+ Creator: LPCSTR,
+ Flags: UINT,
+ FunctionCount: UINT,
+}}
+STRUCT!{struct D3D11_FUNCTION_DESC {
+ Version: UINT,
+ Creator: LPCSTR,
+ Flags: UINT,
+ ConstantBuffers: UINT,
+ BoundResources: UINT,
+ InstructionCount: UINT,
+ TempRegisterCount: UINT,
+ TempArrayCount: UINT,
+ DefCount: UINT,
+ DclCount: UINT,
+ TextureNormalInstructions: UINT,
+ TextureLoadInstructions: UINT,
+ TextureCompInstructions: UINT,
+ TextureBiasInstructions: UINT,
+ TextureGradientInstructions: UINT,
+ FloatInstructionCount: UINT,
+ IntInstructionCount: UINT,
+ UintInstructionCount: UINT,
+ StaticFlowControlCount: UINT,
+ DynamicFlowControlCount: UINT,
+ MacroInstructionCount: UINT,
+ ArrayInstructionCount: UINT,
+ MovInstructionCount: UINT,
+ MovcInstructionCount: UINT,
+ ConversionInstructionCount: UINT,
+ BitwiseInstructionCount: UINT,
+ MinFeatureLevel: D3D_FEATURE_LEVEL,
+ RequiredFeatureFlags: UINT64,
+ Name: LPCSTR,
+ FunctionParameterCount: INT,
+ HasReturn: BOOL,
+ Has10Level9VertexShader: BOOL,
+ Has10Level9PixelShader: BOOL,
+}}
+STRUCT!{struct D3D11_PARAMETER_DESC {
+ Name: LPCSTR,
+ SemanticName: LPCSTR,
+ Type: D3D_SHADER_VARIABLE_TYPE,
+ Class: D3D_SHADER_VARIABLE_CLASS,
+ Rows: UINT,
+ Columns: UINT,
+ InterpolationMode: D3D_INTERPOLATION_MODE,
+ Flags: D3D_PARAMETER_FLAGS,
+ FirstInRegister: UINT,
+ FirstInComponent: UINT,
+ FirstOutRegister: UINT,
+ FirstOutComponent: UINT,
+}}
+DEFINE_GUID!{IID_ID3D11ShaderReflectionType,
+ 0x6e6ffa6a, 0x9bae, 0x4613, 0xa5, 0x1e, 0x91, 0x65, 0x2d, 0x50, 0x8c, 0x21}
+RIDL!{#[uuid(0x6e6ffa6a, 0x9bae, 0x4613, 0xa5, 0x1e, 0x91, 0x65, 0x2d, 0x50, 0x8c, 0x21)]
+interface ID3D11ShaderReflectionType(ID3D11ShaderReflectionTypeVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_SHADER_TYPE_DESC,
+ ) -> HRESULT,
+ fn GetMemberTypeByIndex(
+ Index: UINT,
+ ) -> *mut ID3D11ShaderReflectionType,
+ fn GetMemberTypeByName(
+ Name: LPCSTR,
+ ) -> *mut ID3D11ShaderReflectionType,
+ fn GetMemberTypeName(
+ Index: UINT,
+ ) -> LPCSTR,
+ fn IsEqual(
+ pType: *mut ID3D11ShaderReflectionType,
+ ) -> HRESULT,
+ fn GetSubType() -> *mut ID3D11ShaderReflectionType,
+ fn GetBaseClass() -> *mut ID3D11ShaderReflectionType,
+ fn GetNumInterfaces() -> UINT,
+ fn GetInterfaceByIndex(
+ uIndex: UINT,
+ ) -> *mut ID3D11ShaderReflectionType,
+ fn IsOfType(
+ pType: *mut ID3D11ShaderReflectionType,
+ ) -> HRESULT,
+ fn ImplementsInterface(
+ pBase: *mut ID3D11ShaderReflectionType,
+ ) -> HRESULT,
+}}
+DEFINE_GUID!{IID_ID3D11ShaderReflectionVariable,
+ 0x51f23923, 0xf3e5, 0x4bd1, 0x91, 0xcb, 0x60, 0x61, 0x77, 0xd8, 0xdb, 0x4c}
+RIDL!{#[uuid(0x51f23923, 0xf3e5, 0x4bd1, 0x91, 0xcb, 0x60, 0x61, 0x77, 0xd8, 0xdb, 0x4c)]
+interface ID3D11ShaderReflectionVariable(ID3D11ShaderReflectionVariableVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_SHADER_VARIABLE_DESC,
+ ) -> HRESULT,
+ fn GetType() -> *mut ID3D11ShaderReflectionType,
+ fn GetBuffer() -> *mut ID3D11ShaderReflectionConstantBuffer,
+ fn GetInterfaceSlot(
+ uArrayIndex: UINT,
+ ) -> UINT,
+}}
+DEFINE_GUID!{IID_ID3D11ShaderReflectionConstantBuffer,
+ 0xeb62d63d, 0x93dd, 0x4318, 0x8a, 0xe8, 0xc6, 0xf8, 0x3a, 0xd3, 0x71, 0xb8}
+RIDL!{#[uuid(0xeb62d63d, 0x93dd, 0x4318, 0x8a, 0xe8, 0xc6, 0xf8, 0x3a, 0xd3, 0x71, 0xb8)]
+interface ID3D11ShaderReflectionConstantBuffer(ID3D11ShaderReflectionConstantBufferVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_SHADER_BUFFER_DESC,
+ ) -> HRESULT,
+ fn GetVariableByIndex(
+ Index: UINT,
+ ) -> *mut ID3D11ShaderReflectionVariable,
+ fn GetVariableByName(
+ Name: LPCSTR,
+ ) -> *mut ID3D11ShaderReflectionVariable,
+}}
+DEFINE_GUID!{IID_ID3D11ShaderReflection,
+ 0x8d536ca1, 0x0cca, 0x4956, 0xa8, 0x37, 0x78, 0x69, 0x63, 0x75, 0x55, 0x84}
+RIDL!{#[uuid(0x8d536ca1, 0x0cca, 0x4956, 0xa8, 0x37, 0x78, 0x69, 0x63, 0x75, 0x55, 0x84)]
+interface ID3D11ShaderReflection(ID3D11ShaderReflectionVtbl): IUnknown(IUnknownVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_SHADER_DESC,
+ ) -> HRESULT,
+ fn GetConstantBufferByIndex(
+ Index: UINT,
+ ) -> *mut ID3D11ShaderReflectionConstantBuffer,
+ fn GetConstantBufferByName(
+ Name: LPCSTR,
+ ) -> *mut ID3D11ShaderReflectionConstantBuffer,
+ fn GetResourceBindingDesc(
+ ResourceIndex: UINT,
+ pDesc: *mut D3D11_SHADER_INPUT_BIND_DESC,
+ ) -> HRESULT,
+ fn GetInputParameterDesc(
+ ParameterIndex: UINT,
+ pDesc: *mut D3D11_SIGNATURE_PARAMETER_DESC,
+ ) -> HRESULT,
+ fn GetOutputParameterDesc(
+ ParameterIndex: UINT,
+ pDesc: *mut D3D11_SIGNATURE_PARAMETER_DESC,
+ ) -> HRESULT,
+ fn GetPatchConstantParameterDesc(
+ ParameterIndex: UINT,
+ pDesc: *mut D3D11_SIGNATURE_PARAMETER_DESC,
+ ) -> HRESULT,
+ fn GetVariableByName(
+ Name: LPCSTR,
+ ) -> *mut ID3D11ShaderReflectionVariable,
+ fn GetResourceBindingDescByName(
+ Name: LPCSTR,
+ pDesc: *mut D3D11_SHADER_INPUT_BIND_DESC,
+ ) -> HRESULT,
+ fn GetMovInstructionCount() -> UINT,
+ fn GetMovcInstructionCount() -> UINT,
+ fn GetConversionInstructionCount() -> UINT,
+ fn GetBitwiseInstructionCount() -> UINT,
+ fn GetGSInputPrimitive() -> D3D_PRIMITIVE,
+ fn IsSampleFrequencyShader() -> BOOL,
+ fn GetNumInterfaceSlots() -> UINT,
+ fn GetMinFeatureLevel(
+ pLevel: *mut D3D_FEATURE_LEVEL,
+ ) -> HRESULT,
+ fn GetThreadGroupSize(
+ pSizeX: *mut UINT,
+ pSizeY: *mut UINT,
+ pSizeZ: *mut UINT,
+ ) -> UINT,
+ fn GetRequiresFlags() -> UINT64,
+}}
+DEFINE_GUID!{IID_ID3D11LibraryReflection,
+ 0x54384f1b, 0x5b3e, 0x4bb7, 0xae, 0x01, 0x60, 0xba, 0x30, 0x97, 0xcb, 0xb6}
+RIDL!{#[uuid(0x54384f1b, 0x5b3e, 0x4bb7, 0xae, 0x01, 0x60, 0xba, 0x30, 0x97, 0xcb, 0xb6)]
+interface ID3D11LibraryReflection(ID3D11LibraryReflectionVtbl): IUnknown(IUnknownVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_LIBRARY_DESC,
+ ) -> HRESULT,
+ fn GetFunctionByIndex(
+ FunctionIndex: INT,
+ ) -> *mut ID3D11FunctionReflection,
+}}
+DEFINE_GUID!{IID_ID3D11FunctionReflection,
+ 0x207bcecb, 0xd683, 0x4a06, 0xa8, 0xa3, 0x9b, 0x14, 0x9b, 0x9f, 0x73, 0xa4}
+RIDL!{#[uuid(0x207bcecb, 0xd683, 0x4a06, 0xa8, 0xa3, 0x9b, 0x14, 0x9b, 0x9f, 0x73, 0xa4)]
+interface ID3D11FunctionReflection(ID3D11FunctionReflectionVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_FUNCTION_DESC,
+ ) -> HRESULT,
+ fn GetConstantBufferByIndex(
+ BufferIndex: UINT,
+ ) -> *mut ID3D11ShaderReflectionConstantBuffer,
+ fn GetConstantBufferByName(
+ Name: LPCSTR,
+ ) -> *mut ID3D11ShaderReflectionConstantBuffer,
+ fn GetResourceBindingDesc(
+ ResourceIndex: UINT,
+ pDesc: *mut D3D11_SHADER_INPUT_BIND_DESC,
+ ) -> HRESULT,
+ fn GetVariableByName(
+ Name: LPCSTR,
+ ) -> *mut ID3D11ShaderReflectionVariable,
+ fn GetResourceBindingDescByName(
+ Name: LPCSTR,
+ pDesc: *mut D3D11_SHADER_INPUT_BIND_DESC,
+ ) -> HRESULT,
+ fn GetFunctionParameter(
+ ParameterIndex: INT,
+ ) -> *mut ID3D11FunctionParameterReflection,
+}}
+DEFINE_GUID!{IID_ID3D11FunctionParameterReflection,
+ 0x42757488, 0x334f, 0x47fe, 0x98, 0x2e, 0x1a, 0x65, 0xd0, 0x8c, 0xc4, 0x62}
+RIDL!{#[uuid(0x42757488, 0x334f, 0x47fe, 0x98, 0x2e, 0x1a, 0x65, 0xd0, 0x8c, 0xc4, 0x62)]
+interface ID3D11FunctionParameterReflection(ID3D11FunctionParameterReflectionVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D11_PARAMETER_DESC,
+ ) -> HRESULT,
+}}
+DEFINE_GUID!{IID_ID3D11Module,
+ 0xcac701ee, 0x80fc, 0x4122, 0x82, 0x42, 0x10, 0xb3, 0x9c, 0x8c, 0xec, 0x34}
+RIDL!{#[uuid(0xcac701ee, 0x80fc, 0x4122, 0x82, 0x42, 0x10, 0xb3, 0x9c, 0x8c, 0xec, 0x34)]
+interface ID3D11Module(ID3D11ModuleVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateInstance(
+ pNamespace: LPCSTR,
+ ppModuleInstance: *mut *mut ID3D11ModuleInstance,
+ ) -> HRESULT,
+}}
+DEFINE_GUID!{IID_ID3D11ModuleInstance,
+ 0x469e07f7, 0x045a, 0x48d5, 0xaa, 0x12, 0x68, 0xa4, 0x78, 0xcd, 0xf7, 0x5d}
+RIDL!{#[uuid(0x469e07f7, 0x045a, 0x48d5, 0xaa, 0x12, 0x68, 0xa4, 0x78, 0xcd, 0xf7, 0x5d)]
+interface ID3D11ModuleInstance(ID3D11ModuleInstanceVtbl): IUnknown(IUnknownVtbl) {
+ fn BindConstantBuffer(
+ uSrcSlot: UINT,
+ uDstSlot: UINT,
+ cbDstOffset: UINT,
+ ) -> HRESULT,
+ fn BindConstantBufferByName(
+ pName: LPCSTR,
+ uDstSlot: UINT,
+ cbDstOffset: UINT,
+ ) -> HRESULT,
+ fn BindResource(
+ uSrcSlot: UINT,
+ uDstSlot: UINT,
+ uCount: UINT,
+ ) -> HRESULT,
+ fn BindResourceByName(
+ pName: LPCSTR,
+ uDstSlot: UINT,
+ uCount: UINT,
+ ) -> HRESULT,
+ fn BindSampler(
+ uSrcSlot: UINT,
+ uDstSlot: UINT,
+ uCount: UINT,
+ ) -> HRESULT,
+ fn BindSamplerByName(
+ pName: LPCSTR,
+ uDstSlot: UINT,
+ uCount: UINT,
+ ) -> HRESULT,
+ fn BindUnorderedAccessView(
+ uSrcSlot: UINT,
+ uDstSlot: UINT,
+ uCount: UINT,
+ ) -> HRESULT,
+ fn BindUnorderedAccessViewByName(
+ pName: LPCSTR,
+ uDstSlot: UINT,
+ uCount: UINT,
+ ) -> HRESULT,
+ fn BindResourceAsUnorderedAccessView(
+ uSrcSrvSlot: UINT,
+ uDstUavSlot: UINT,
+ uCount: UINT,
+ ) -> HRESULT,
+ fn BindResourceAsUnorderedAccessViewByName(
+ pSrvName: LPCSTR,
+ uDstUavSlot: UINT,
+ uCount: UINT,
+ ) -> HRESULT,
+}}
+DEFINE_GUID!{IID_ID3D11Linker,
+ 0x59a6cd0e, 0xe10d, 0x4c1f, 0x88, 0xc0, 0x63, 0xab, 0xa1, 0xda, 0xf3, 0x0e}
+RIDL!{#[uuid(0x59a6cd0e, 0xe10d, 0x4c1f, 0x88, 0xc0, 0x63, 0xab, 0xa1, 0xda, 0xf3, 0x0e)]
+interface ID3D11Linker(ID3D11LinkerVtbl): IUnknown(IUnknownVtbl) {
+ fn Link(
+ pEntry: *mut ID3D11ModuleInstance,
+ pEntryName: LPCSTR,
+ pTargetName: LPCSTR,
+ uFlags: UINT,
+ ppShaderBlob: *mut *mut ID3DBlob,
+ ppErrorBuffer: *mut *mut ID3DBlob,
+ ) -> HRESULT,
+ fn UseLibrary(
+ pLibraryMI: *mut ID3D11ModuleInstance,
+ ) -> HRESULT,
+ fn AddClipPlaneFromCBuffer(
+ uCBufferSlot: UINT,
+ uCBufferEntry: UINT,
+ ) -> HRESULT,
+}}
+DEFINE_GUID!{IID_ID3D11LinkingNode,
+ 0xd80dd70c, 0x8d2f, 0x4751, 0x94, 0xa1, 0x03, 0xc7, 0x9b, 0x35, 0x56, 0xdb}
+RIDL!{#[uuid(0xd80dd70c, 0x8d2f, 0x4751, 0x94, 0xa1, 0x03, 0xc7, 0x9b, 0x35, 0x56, 0xdb)]
+interface ID3D11LinkingNode(ID3D11LinkingNodeVtbl): IUnknown(IUnknownVtbl) {}}
+DEFINE_GUID!{IID_ID3D11FunctionLinkingGraph,
+ 0x54133220, 0x1ce8, 0x43d3, 0x82, 0x36, 0x98, 0x55, 0xc5, 0xce, 0xec, 0xff}
+RIDL!{#[uuid(0x54133220, 0x1ce8, 0x43d3, 0x82, 0x36, 0x98, 0x55, 0xc5, 0xce, 0xec, 0xff)]
+interface ID3D11FunctionLinkingGraph(ID3D11FunctionLinkingGraphVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateModuleInstance(
+ ppModuleInstance: *mut *mut ID3D11ModuleInstance,
+ ppErrorBuffer: *mut *mut ID3DBlob,
+ ) -> HRESULT,
+ fn SetInputSignature(
+ pInputParameters: *const D3D11_PARAMETER_DESC,
+ cInputParameters: UINT,
+ ppInputNode: *mut *mut ID3D11LinkingNode,
+ ) -> HRESULT,
+ fn SetOutputSignature(
+ pOutputParameters: *const D3D11_PARAMETER_DESC,
+ cOutputParameters: UINT,
+ ppOutputNode: *mut *mut ID3D11LinkingNode,
+ ) -> HRESULT,
+ fn CallFunction(
+ pModuleInstanceNamespace: LPCSTR,
+ pModuleWithFunctionPrototype: *mut ID3D11Module,
+ pFunctionName: LPCSTR,
+ ppCallNode: *mut *mut ID3D11LinkingNode,
+ ) -> HRESULT,
+ fn PassValue(
+ pSrcNode: *mut ID3D11LinkingNode,
+ SrcParameterIndex: INT,
+ pDstNode: *mut ID3D11LinkingNode,
+ DstParameterIndex: INT,
+ ) -> HRESULT,
+ fn PassValueWithSwizzle(
+ pSrcNode: *mut ID3D11LinkingNode,
+ SrcParameterIndex: INT,
+ pSrcSwizzle: LPCSTR,
+ pDstNode: *mut ID3D11LinkingNode,
+ DstParameterIndex: INT,
+ pDstSwizzle: LPCSTR,
+ ) -> HRESULT,
+ fn GetLastError(
+ ppErrorBuffer: *mut *mut ID3DBlob,
+ ) -> HRESULT,
+ fn GenerateHlsl(
+ uFlags: UINT,
+ ppBuffer: *mut *mut ID3DBlob,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/d3d11tokenizedprogramformat.rs b/vendor/winapi/src/um/d3d11tokenizedprogramformat.rs
new file mode 100644
index 000000000..54dbde26c
--- /dev/null
+++ b/vendor/winapi/src/um/d3d11tokenizedprogramformat.rs
@@ -0,0 +1,1335 @@
+// 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::minwindef::{DWORD, UINT};
+ENUM!{enum D3D10_SB_TOKENIZED_PROGRAM_TYPE {
+ D3D10_SB_PIXEL_SHADER = 0,
+ D3D10_SB_VERTEX_SHADER = 1,
+ D3D10_SB_GEOMETRY_SHADER = 2,
+ D3D11_SB_HULL_SHADER = 3,
+ D3D11_SB_DOMAIN_SHADER = 4,
+ D3D11_SB_COMPUTE_SHADER = 5,
+ D3D11_SB_RESERVED0 = 0xFFF0,
+}}
+pub const D3D10_SB_TOKENIZED_PROGRAM_TYPE_MASK: DWORD = 0xffff0000;
+pub const D3D10_SB_TOKENIZED_PROGRAM_TYPE_SHIFT: DWORD = 16;
+#[inline]
+pub fn DECODE_D3D10_SB_TOKENIZED_PROGRAM_TYPE(VerTok: DWORD) -> DWORD {
+ ((VerTok & D3D10_SB_TOKENIZED_PROGRAM_TYPE_MASK) >> D3D10_SB_TOKENIZED_PROGRAM_TYPE_SHIFT)
+ as D3D10_SB_TOKENIZED_PROGRAM_TYPE
+}
+pub const D3D10_SB_TOKENIZED_PROGRAM_MAJOR_VERSION_MASK: DWORD = 0x000000f0;
+pub const D3D10_SB_TOKENIZED_PROGRAM_MAJOR_VERSION_SHIFT: DWORD = 4;
+pub const D3D10_SB_TOKENIZED_PROGRAM_MINOR_VERSION_MASK: DWORD = 0x0000000f;
+#[inline]
+pub fn DECODE_D3D10_SB_TOKENIZED_PROGRAM_MAJOR_VERSION(VerTok: DWORD) -> DWORD {
+ (VerTok & D3D10_SB_TOKENIZED_PROGRAM_MAJOR_VERSION_MASK)
+ >> D3D10_SB_TOKENIZED_PROGRAM_MAJOR_VERSION_SHIFT
+}
+#[inline]
+pub fn DECODE_D3D10_SB_TOKENIZED_PROGRAM_MINOR_VERSION(VerTok: DWORD) -> DWORD {
+ VerTok & D3D10_SB_TOKENIZED_PROGRAM_MINOR_VERSION_MASK
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_TOKENIZED_PROGRAM_VERSION_TOKEN(
+ ProgType: DWORD,
+ MajorVer: DWORD,
+ MinorVer: DWORD,
+) -> DWORD {
+ ((ProgType << D3D10_SB_TOKENIZED_PROGRAM_TYPE_SHIFT) & D3D10_SB_TOKENIZED_PROGRAM_TYPE_MASK)
+ | ((MajorVer << D3D10_SB_TOKENIZED_PROGRAM_MAJOR_VERSION_SHIFT)
+ & D3D10_SB_TOKENIZED_PROGRAM_MAJOR_VERSION_MASK)
+ | (MinorVer & D3D10_SB_TOKENIZED_PROGRAM_MINOR_VERSION_MASK)
+}
+#[inline]
+pub fn DECODE_D3D10_SB_TOKENIZED_PROGRAM_LENGTH(LenTok: DWORD) -> DWORD {
+ LenTok
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_TOKENIZED_PROGRAM_LENGTH(Length: DWORD) -> DWORD {
+ Length
+}
+pub const MAX_D3D10_SB_TOKENIZED_PROGRAM_LENGTH: DWORD = 0xffffffff;
+ENUM!{enum D3D10_SB_OPCODE_TYPE {
+ D3D10_SB_OPCODE_ADD = 0,
+ D3D10_SB_OPCODE_AND = 1,
+ D3D10_SB_OPCODE_BREAK = 2,
+ D3D10_SB_OPCODE_BREAKC = 3,
+ D3D10_SB_OPCODE_CALL = 4,
+ D3D10_SB_OPCODE_CALLC = 5,
+ D3D10_SB_OPCODE_CASE = 6,
+ D3D10_SB_OPCODE_CONTINUE = 7,
+ D3D10_SB_OPCODE_CONTINUEC = 8,
+ D3D10_SB_OPCODE_CUT = 9,
+ D3D10_SB_OPCODE_DEFAULT = 10,
+ D3D10_SB_OPCODE_DERIV_RTX = 11,
+ D3D10_SB_OPCODE_DERIV_RTY = 12,
+ D3D10_SB_OPCODE_DISCARD = 13,
+ D3D10_SB_OPCODE_DIV = 14,
+ D3D10_SB_OPCODE_DP2 = 15,
+ D3D10_SB_OPCODE_DP3 = 16,
+ D3D10_SB_OPCODE_DP4 = 17,
+ D3D10_SB_OPCODE_ELSE = 18,
+ D3D10_SB_OPCODE_EMIT = 19,
+ D3D10_SB_OPCODE_EMITTHENCUT = 20,
+ D3D10_SB_OPCODE_ENDIF = 21,
+ D3D10_SB_OPCODE_ENDLOOP = 22,
+ D3D10_SB_OPCODE_ENDSWITCH = 23,
+ D3D10_SB_OPCODE_EQ = 24,
+ D3D10_SB_OPCODE_EXP = 25,
+ D3D10_SB_OPCODE_FRC = 26,
+ D3D10_SB_OPCODE_FTOI = 27,
+ D3D10_SB_OPCODE_FTOU = 28,
+ D3D10_SB_OPCODE_GE = 29,
+ D3D10_SB_OPCODE_IADD = 30,
+ D3D10_SB_OPCODE_IF = 31,
+ D3D10_SB_OPCODE_IEQ = 32,
+ D3D10_SB_OPCODE_IGE = 33,
+ D3D10_SB_OPCODE_ILT = 34,
+ D3D10_SB_OPCODE_IMAD = 35,
+ D3D10_SB_OPCODE_IMAX = 36,
+ D3D10_SB_OPCODE_IMIN = 37,
+ D3D10_SB_OPCODE_IMUL = 38,
+ D3D10_SB_OPCODE_INE = 39,
+ D3D10_SB_OPCODE_INEG = 40,
+ D3D10_SB_OPCODE_ISHL = 41,
+ D3D10_SB_OPCODE_ISHR = 42,
+ D3D10_SB_OPCODE_ITOF = 43,
+ D3D10_SB_OPCODE_LABEL = 44,
+ D3D10_SB_OPCODE_LD = 45,
+ D3D10_SB_OPCODE_LD_MS = 46,
+ D3D10_SB_OPCODE_LOG = 47,
+ D3D10_SB_OPCODE_LOOP = 48,
+ D3D10_SB_OPCODE_LT = 49,
+ D3D10_SB_OPCODE_MAD = 50,
+ D3D10_SB_OPCODE_MIN = 51,
+ D3D10_SB_OPCODE_MAX = 52,
+ D3D10_SB_OPCODE_CUSTOMDATA = 53,
+ D3D10_SB_OPCODE_MOV = 54,
+ D3D10_SB_OPCODE_MOVC = 55,
+ D3D10_SB_OPCODE_MUL = 56,
+ D3D10_SB_OPCODE_NE = 57,
+ D3D10_SB_OPCODE_NOP = 58,
+ D3D10_SB_OPCODE_NOT = 59,
+ D3D10_SB_OPCODE_OR = 60,
+ D3D10_SB_OPCODE_RESINFO = 61,
+ D3D10_SB_OPCODE_RET = 62,
+ D3D10_SB_OPCODE_RETC = 63,
+ D3D10_SB_OPCODE_ROUND_NE = 64,
+ D3D10_SB_OPCODE_ROUND_NI = 65,
+ D3D10_SB_OPCODE_ROUND_PI = 66,
+ D3D10_SB_OPCODE_ROUND_Z = 67,
+ D3D10_SB_OPCODE_RSQ = 68,
+ D3D10_SB_OPCODE_SAMPLE = 69,
+ D3D10_SB_OPCODE_SAMPLE_C = 70,
+ D3D10_SB_OPCODE_SAMPLE_C_LZ = 71,
+ D3D10_SB_OPCODE_SAMPLE_L = 72,
+ D3D10_SB_OPCODE_SAMPLE_D = 73,
+ D3D10_SB_OPCODE_SAMPLE_B = 74,
+ D3D10_SB_OPCODE_SQRT = 75,
+ D3D10_SB_OPCODE_SWITCH = 76,
+ D3D10_SB_OPCODE_SINCOS = 77,
+ D3D10_SB_OPCODE_UDIV = 78,
+ D3D10_SB_OPCODE_ULT = 79,
+ D3D10_SB_OPCODE_UGE = 80,
+ D3D10_SB_OPCODE_UMUL = 81,
+ D3D10_SB_OPCODE_UMAD = 82,
+ D3D10_SB_OPCODE_UMAX = 83,
+ D3D10_SB_OPCODE_UMIN = 84,
+ D3D10_SB_OPCODE_USHR = 85,
+ D3D10_SB_OPCODE_UTOF = 86,
+ D3D10_SB_OPCODE_XOR = 87,
+ D3D10_SB_OPCODE_DCL_RESOURCE = 88,
+ D3D10_SB_OPCODE_DCL_CONSTANT_BUFFER = 89,
+ D3D10_SB_OPCODE_DCL_SAMPLER = 90,
+ D3D10_SB_OPCODE_DCL_INDEX_RANGE = 91,
+ D3D10_SB_OPCODE_DCL_GS_OUTPUT_PRIMITIVE_TOPOLOGY = 92,
+ D3D10_SB_OPCODE_DCL_GS_INPUT_PRIMITIVE = 93,
+ D3D10_SB_OPCODE_DCL_MAX_OUTPUT_VERTEX_COUNT = 94,
+ D3D10_SB_OPCODE_DCL_INPUT = 95,
+ D3D10_SB_OPCODE_DCL_INPUT_SGV = 96,
+ D3D10_SB_OPCODE_DCL_INPUT_SIV = 97,
+ D3D10_SB_OPCODE_DCL_INPUT_PS = 98,
+ D3D10_SB_OPCODE_DCL_INPUT_PS_SGV = 99,
+ D3D10_SB_OPCODE_DCL_INPUT_PS_SIV = 100,
+ D3D10_SB_OPCODE_DCL_OUTPUT = 101,
+ D3D10_SB_OPCODE_DCL_OUTPUT_SGV = 102,
+ D3D10_SB_OPCODE_DCL_OUTPUT_SIV = 103,
+ D3D10_SB_OPCODE_DCL_TEMPS = 104,
+ D3D10_SB_OPCODE_DCL_INDEXABLE_TEMP = 105,
+ D3D10_SB_OPCODE_DCL_GLOBAL_FLAGS = 106,
+ D3D10_SB_OPCODE_RESERVED0 = 107,
+ D3D10_1_SB_OPCODE_LOD = 108,
+ D3D10_1_SB_OPCODE_GATHER4 = 109,
+ D3D10_1_SB_OPCODE_SAMPLE_POS = 110,
+ D3D10_1_SB_OPCODE_SAMPLE_INFO = 111,
+ D3D10_1_SB_OPCODE_RESERVED1 = 112,
+ D3D11_SB_OPCODE_HS_DECLS = 113,
+ D3D11_SB_OPCODE_HS_CONTROL_POINT_PHASE = 114,
+ D3D11_SB_OPCODE_HS_FORK_PHASE = 115,
+ D3D11_SB_OPCODE_HS_JOIN_PHASE = 116,
+ D3D11_SB_OPCODE_EMIT_STREAM = 117,
+ D3D11_SB_OPCODE_CUT_STREAM = 118,
+ D3D11_SB_OPCODE_EMITTHENCUT_STREAM = 119,
+ D3D11_SB_OPCODE_INTERFACE_CALL = 120,
+ D3D11_SB_OPCODE_BUFINFO = 121,
+ D3D11_SB_OPCODE_DERIV_RTX_COARSE = 122,
+ D3D11_SB_OPCODE_DERIV_RTX_FINE = 123,
+ D3D11_SB_OPCODE_DERIV_RTY_COARSE = 124,
+ D3D11_SB_OPCODE_DERIV_RTY_FINE = 125,
+ D3D11_SB_OPCODE_GATHER4_C = 126,
+ D3D11_SB_OPCODE_GATHER4_PO = 127,
+ D3D11_SB_OPCODE_GATHER4_PO_C = 128,
+ D3D11_SB_OPCODE_RCP = 129,
+ D3D11_SB_OPCODE_F32TOF16 = 130,
+ D3D11_SB_OPCODE_F16TOF32 = 131,
+ D3D11_SB_OPCODE_UADDC = 132,
+ D3D11_SB_OPCODE_USUBB = 133,
+ D3D11_SB_OPCODE_COUNTBITS = 134,
+ D3D11_SB_OPCODE_FIRSTBIT_HI = 135,
+ D3D11_SB_OPCODE_FIRSTBIT_LO = 136,
+ D3D11_SB_OPCODE_FIRSTBIT_SHI = 137,
+ D3D11_SB_OPCODE_UBFE = 138,
+ D3D11_SB_OPCODE_IBFE = 139,
+ D3D11_SB_OPCODE_BFI = 140,
+ D3D11_SB_OPCODE_BFREV = 141,
+ D3D11_SB_OPCODE_SWAPC = 142,
+ D3D11_SB_OPCODE_DCL_STREAM = 143,
+ D3D11_SB_OPCODE_DCL_FUNCTION_BODY = 144,
+ D3D11_SB_OPCODE_DCL_FUNCTION_TABLE = 145,
+ D3D11_SB_OPCODE_DCL_INTERFACE = 146,
+ D3D11_SB_OPCODE_DCL_INPUT_CONTROL_POINT_COUNT = 147,
+ D3D11_SB_OPCODE_DCL_OUTPUT_CONTROL_POINT_COUNT = 148,
+ D3D11_SB_OPCODE_DCL_TESS_DOMAIN = 149,
+ D3D11_SB_OPCODE_DCL_TESS_PARTITIONING = 150,
+ D3D11_SB_OPCODE_DCL_TESS_OUTPUT_PRIMITIVE = 151,
+ D3D11_SB_OPCODE_DCL_HS_MAX_TESSFACTOR = 152,
+ D3D11_SB_OPCODE_DCL_HS_FORK_PHASE_INSTANCE_COUNT = 153,
+ D3D11_SB_OPCODE_DCL_HS_JOIN_PHASE_INSTANCE_COUNT = 154,
+ D3D11_SB_OPCODE_DCL_THREAD_GROUP = 155,
+ D3D11_SB_OPCODE_DCL_UNORDERED_ACCESS_VIEW_TYPED = 156,
+ D3D11_SB_OPCODE_DCL_UNORDERED_ACCESS_VIEW_RAW = 157,
+ D3D11_SB_OPCODE_DCL_UNORDERED_ACCESS_VIEW_STRUCTURED = 158,
+ D3D11_SB_OPCODE_DCL_THREAD_GROUP_SHARED_MEMORY_RAW = 159,
+ D3D11_SB_OPCODE_DCL_THREAD_GROUP_SHARED_MEMORY_STRUCTURED = 160,
+ D3D11_SB_OPCODE_DCL_RESOURCE_RAW = 161,
+ D3D11_SB_OPCODE_DCL_RESOURCE_STRUCTURED = 162,
+ D3D11_SB_OPCODE_LD_UAV_TYPED = 163,
+ D3D11_SB_OPCODE_STORE_UAV_TYPED = 164,
+ D3D11_SB_OPCODE_LD_RAW = 165,
+ D3D11_SB_OPCODE_STORE_RAW = 166,
+ D3D11_SB_OPCODE_LD_STRUCTURED = 167,
+ D3D11_SB_OPCODE_STORE_STRUCTURED = 168,
+ D3D11_SB_OPCODE_ATOMIC_AND = 169,
+ D3D11_SB_OPCODE_ATOMIC_OR = 170,
+ D3D11_SB_OPCODE_ATOMIC_XOR = 171,
+ D3D11_SB_OPCODE_ATOMIC_CMP_STORE = 172,
+ D3D11_SB_OPCODE_ATOMIC_IADD = 173,
+ D3D11_SB_OPCODE_ATOMIC_IMAX = 174,
+ D3D11_SB_OPCODE_ATOMIC_IMIN = 175,
+ D3D11_SB_OPCODE_ATOMIC_UMAX = 176,
+ D3D11_SB_OPCODE_ATOMIC_UMIN = 177,
+ D3D11_SB_OPCODE_IMM_ATOMIC_ALLOC = 178,
+ D3D11_SB_OPCODE_IMM_ATOMIC_CONSUME = 179,
+ D3D11_SB_OPCODE_IMM_ATOMIC_IADD = 180,
+ D3D11_SB_OPCODE_IMM_ATOMIC_AND = 181,
+ D3D11_SB_OPCODE_IMM_ATOMIC_OR = 182,
+ D3D11_SB_OPCODE_IMM_ATOMIC_XOR = 183,
+ D3D11_SB_OPCODE_IMM_ATOMIC_EXCH = 184,
+ D3D11_SB_OPCODE_IMM_ATOMIC_CMP_EXCH = 185,
+ D3D11_SB_OPCODE_IMM_ATOMIC_IMAX = 186,
+ D3D11_SB_OPCODE_IMM_ATOMIC_IMIN = 187,
+ D3D11_SB_OPCODE_IMM_ATOMIC_UMAX = 188,
+ D3D11_SB_OPCODE_IMM_ATOMIC_UMIN = 189,
+ D3D11_SB_OPCODE_SYNC = 190,
+ D3D11_SB_OPCODE_DADD = 191,
+ D3D11_SB_OPCODE_DMAX = 192,
+ D3D11_SB_OPCODE_DMIN = 193,
+ D3D11_SB_OPCODE_DMUL = 194,
+ D3D11_SB_OPCODE_DEQ = 195,
+ D3D11_SB_OPCODE_DGE = 196,
+ D3D11_SB_OPCODE_DLT = 197,
+ D3D11_SB_OPCODE_DNE = 198,
+ D3D11_SB_OPCODE_DMOV = 199,
+ D3D11_SB_OPCODE_DMOVC = 200,
+ D3D11_SB_OPCODE_DTOF = 201,
+ D3D11_SB_OPCODE_FTOD = 202,
+ D3D11_SB_OPCODE_EVAL_SNAPPED = 203,
+ D3D11_SB_OPCODE_EVAL_SAMPLE_INDEX = 204,
+ D3D11_SB_OPCODE_EVAL_CENTROID = 205,
+ D3D11_SB_OPCODE_DCL_GS_INSTANCE_COUNT = 206,
+ D3D11_SB_OPCODE_ABORT = 207,
+ D3D11_SB_OPCODE_DEBUG_BREAK = 208,
+ D3D11_SB_OPCODE_RESERVED0 = 209,
+ D3D11_1_SB_OPCODE_DDIV = 210,
+ D3D11_1_SB_OPCODE_DFMA = 211,
+ D3D11_1_SB_OPCODE_DRCP = 212,
+ D3D11_1_SB_OPCODE_MSAD = 213,
+ D3D11_1_SB_OPCODE_DTOI = 214,
+ D3D11_1_SB_OPCODE_DTOU = 215,
+ D3D11_1_SB_OPCODE_ITOD = 216,
+ D3D11_1_SB_OPCODE_UTOD = 217,
+ D3D11_1_SB_OPCODE_RESERVED0 = 218,
+ D3DWDDM1_3_SB_OPCODE_GATHER4_FEEDBACK = 219,
+ D3DWDDM1_3_SB_OPCODE_GATHER4_C_FEEDBACK = 220,
+ D3DWDDM1_3_SB_OPCODE_GATHER4_PO_FEEDBACK = 221,
+ D3DWDDM1_3_SB_OPCODE_GATHER4_PO_C_FEEDBACK = 222,
+ D3DWDDM1_3_SB_OPCODE_LD_FEEDBACK = 223,
+ D3DWDDM1_3_SB_OPCODE_LD_MS_FEEDBACK = 224,
+ D3DWDDM1_3_SB_OPCODE_LD_UAV_TYPED_FEEDBACK = 225,
+ D3DWDDM1_3_SB_OPCODE_LD_RAW_FEEDBACK = 226,
+ D3DWDDM1_3_SB_OPCODE_LD_STRUCTURED_FEEDBACK = 227,
+ D3DWDDM1_3_SB_OPCODE_SAMPLE_L_FEEDBACK = 228,
+ D3DWDDM1_3_SB_OPCODE_SAMPLE_C_LZ_FEEDBACK = 229,
+ D3DWDDM1_3_SB_OPCODE_SAMPLE_CLAMP_FEEDBACK = 230,
+ D3DWDDM1_3_SB_OPCODE_SAMPLE_B_CLAMP_FEEDBACK = 231,
+ D3DWDDM1_3_SB_OPCODE_SAMPLE_D_CLAMP_FEEDBACK = 232,
+ D3DWDDM1_3_SB_OPCODE_SAMPLE_C_CLAMP_FEEDBACK = 233,
+ D3DWDDM1_3_SB_OPCODE_CHECK_ACCESS_FULLY_MAPPED = 234,
+ D3DWDDM1_3_SB_OPCODE_RESERVED0 = 235,
+ D3D10_SB_NUM_OPCODES = 236,
+}}
+pub const D3D10_SB_OPCODE_TYPE_MASK: DWORD = 0x00007ff;
+#[inline]
+pub fn DECODE_D3D10_SB_OPCODE_TYPE(OpcodeToken0: DWORD) -> D3D10_SB_OPCODE_TYPE {
+ (OpcodeToken0 & D3D10_SB_OPCODE_TYPE_MASK) as D3D10_SB_OPCODE_TYPE
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_OPCODE_TYPE(OpcodeName: D3D10_SB_OPCODE_TYPE) -> DWORD {
+ OpcodeName & D3D10_SB_OPCODE_TYPE_MASK
+}
+pub const D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH_MASK: DWORD = 0x7f000000;
+pub const D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH_SHIFT: DWORD = 24;
+#[inline]
+pub fn DECODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(OpcodeToken0: DWORD) -> DWORD {
+ (OpcodeToken0 & D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH_MASK)
+ >> D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH_SHIFT
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(Length: DWORD) -> DWORD {
+ (Length << D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH_SHIFT)
+ & D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH_MASK
+}
+pub const MAX_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH: DWORD = 127;
+pub const D3D10_SB_INSTRUCTION_SATURATE_MASK: DWORD = 0x00002000;
+#[inline]
+pub fn DECODE_IS_D3D10_SB_INSTRUCTION_SATURATE_ENABLED(OpcodeToken0: DWORD) -> DWORD {
+ OpcodeToken0 & D3D10_SB_INSTRUCTION_SATURATE_MASK
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_INSTRUCTION_SATURATE(bSat: DWORD) -> DWORD {
+ if bSat != 0 {
+ D3D10_SB_INSTRUCTION_SATURATE_MASK
+ } else {
+ 0
+ }
+}
+ENUM!{enum D3D10_SB_INSTRUCTION_TEST_BOOLEAN {
+ D3D10_SB_INSTRUCTION_TEST_ZERO = 0,
+ D3D10_SB_INSTRUCTION_TEST_NONZERO = 1,
+}}
+pub const D3D10_SB_INSTRUCTION_TEST_BOOLEAN_MASK: DWORD = 0x00040000;
+pub const D3D10_SB_INSTRUCTION_TEST_BOOLEAN_SHIFT: DWORD = 18;
+#[inline]
+pub fn DECODE_D3D10_SB_INSTRUCTION_TEST_BOOLEAN(
+ OpcodeToken0: DWORD,
+) -> D3D10_SB_INSTRUCTION_TEST_BOOLEAN {
+ ((OpcodeToken0 & D3D10_SB_INSTRUCTION_TEST_BOOLEAN_MASK)
+ >> D3D10_SB_INSTRUCTION_TEST_BOOLEAN_SHIFT) as D3D10_SB_INSTRUCTION_TEST_BOOLEAN
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_INSTRUCTION_TEST_BOOLEAN(
+ Boolean: D3D10_SB_INSTRUCTION_TEST_BOOLEAN,
+) -> DWORD {
+ (Boolean << D3D10_SB_INSTRUCTION_TEST_BOOLEAN_SHIFT) & D3D10_SB_INSTRUCTION_TEST_BOOLEAN_MASK
+}
+pub const D3D11_SB_INSTRUCTION_PRECISE_VALUES_MASK: DWORD = 0x00780000;
+pub const D3D11_SB_INSTRUCTION_PRECISE_VALUES_SHIFT: DWORD = 19;
+#[inline]
+pub fn DECODE_D3D11_SB_INSTRUCTION_PRECISE_VALUES(OpcodeToken0: DWORD) -> DWORD {
+ (OpcodeToken0 & D3D11_SB_INSTRUCTION_PRECISE_VALUES_MASK)
+ >> D3D11_SB_INSTRUCTION_PRECISE_VALUES_SHIFT
+}
+#[inline]
+pub fn ENCODE_D3D11_SB_INSTRUCTION_PRECISE_VALUES(ComponentMask: DWORD) -> DWORD {
+ (ComponentMask << D3D11_SB_INSTRUCTION_PRECISE_VALUES_SHIFT)
+ & D3D11_SB_INSTRUCTION_PRECISE_VALUES_MASK
+}
+ENUM!{enum D3D10_SB_RESINFO_INSTRUCTION_RETURN_TYPE {
+ D3D10_SB_RESINFO_INSTRUCTION_RETURN_FLOAT = 0,
+ D3D10_SB_RESINFO_INSTRUCTION_RETURN_RCPFLOAT = 1,
+ D3D10_SB_RESINFO_INSTRUCTION_RETURN_UINT = 2,
+}}
+pub const D3D10_SB_RESINFO_INSTRUCTION_RETURN_TYPE_MASK: DWORD = 0x00001800;
+pub const D3D10_SB_RESINFO_INSTRUCTION_RETURN_TYPE_SHIFT: DWORD = 11;
+#[inline]
+pub fn DECODE_D3D10_SB_RESINFO_INSTRUCTION_RETURN_TYPE(
+ OpcodeToken0: DWORD,
+) -> D3D10_SB_RESINFO_INSTRUCTION_RETURN_TYPE {
+ ((OpcodeToken0 & D3D10_SB_RESINFO_INSTRUCTION_RETURN_TYPE_MASK)
+ >> D3D10_SB_RESINFO_INSTRUCTION_RETURN_TYPE_SHIFT)
+ as D3D10_SB_RESINFO_INSTRUCTION_RETURN_TYPE
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_RESINFO_INSTRUCTION_RETURN_TYPE(
+ ReturnType: D3D10_SB_RESINFO_INSTRUCTION_RETURN_TYPE,
+) -> DWORD {
+ (ReturnType << D3D10_SB_RESINFO_INSTRUCTION_RETURN_TYPE_SHIFT)
+ & D3D10_SB_RESINFO_INSTRUCTION_RETURN_TYPE_MASK
+}
+pub const D3D11_SB_SYNC_THREADS_IN_GROUP: DWORD = 0x00000800;
+pub const D3D11_SB_SYNC_THREAD_GROUP_SHARED_MEMORY: DWORD = 0x00001000;
+pub const D3D11_SB_SYNC_UNORDERED_ACCESS_VIEW_MEMORY_GROUP: DWORD = 0x00002000;
+pub const D3D11_SB_SYNC_UNORDERED_ACCESS_VIEW_MEMORY_GLOBAL: DWORD = 0x00004000;
+pub const D3D11_SB_SYNC_FLAGS_MASK: DWORD = 0x00007800;
+#[inline]
+pub fn DECODE_D3D11_SB_SYNC_FLAGS(OperandToken0: DWORD) -> DWORD {
+ OperandToken0 & D3D11_SB_SYNC_FLAGS_MASK
+}
+#[inline]
+pub fn ENCODE_D3D11_SB_SYNC_FLAGS(Flags: DWORD) -> DWORD {
+ Flags & D3D11_SB_SYNC_FLAGS_MASK
+}
+pub const D3D10_SB_OPCODE_EXTENDED_MASK: DWORD = 0x80000000;
+pub const D3D10_SB_OPCODE_EXTENDED_SHIFT: DWORD = 31;
+#[inline]
+pub fn DECODE_IS_D3D10_SB_OPCODE_EXTENDED(OpcodeToken0: DWORD) -> DWORD {
+ (OpcodeToken0 & D3D10_SB_OPCODE_EXTENDED_MASK) >> D3D10_SB_OPCODE_EXTENDED_SHIFT
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_OPCODE_EXTENDED(bExtended: DWORD) -> DWORD {
+ if bExtended != 0 {
+ D3D10_SB_OPCODE_EXTENDED_MASK
+ } else {
+ 0
+ }
+}
+ENUM!{enum D3D10_SB_EXTENDED_OPCODE_TYPE {
+ D3D10_SB_EXTENDED_OPCODE_EMPTY = 0,
+ D3D10_SB_EXTENDED_OPCODE_SAMPLE_CONTROLS = 1,
+ D3D11_SB_EXTENDED_OPCODE_RESOURCE_DIM = 2,
+ D3D11_SB_EXTENDED_OPCODE_RESOURCE_RETURN_TYPE = 3,
+}}
+pub const D3D11_SB_MAX_SIMULTANEOUS_EXTENDED_OPCODES: DWORD = 3;
+pub const D3D10_SB_EXTENDED_OPCODE_TYPE_MASK: DWORD = 0x0000003f;
+#[inline]
+pub fn DECODE_D3D10_SB_EXTENDED_OPCODE_TYPE(OpcodeToken1: DWORD) -> D3D10_SB_EXTENDED_OPCODE_TYPE {
+ (OpcodeToken1 & D3D10_SB_EXTENDED_OPCODE_TYPE_MASK) as D3D10_SB_EXTENDED_OPCODE_TYPE
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_EXTENDED_OPCODE_TYPE(
+ ExtOpcodeType: D3D10_SB_EXTENDED_OPCODE_TYPE,
+) -> DWORD {
+ ExtOpcodeType & D3D10_SB_EXTENDED_OPCODE_TYPE_MASK
+}
+ENUM!{enum D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_COORD {
+ D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_U = 0,
+ D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_V = 1,
+ D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_W = 2,
+}}
+pub const D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_COORD_MASK: DWORD = 3;
+#[inline]
+pub fn D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_SHIFT(Coord: DWORD) -> DWORD {
+ 9 + 4 * (Coord & D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_COORD_MASK)
+}
+#[inline]
+pub fn D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_MASK(Coord: DWORD) -> DWORD {
+ 0x0000000f << D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_SHIFT(Coord)
+}
+#[inline]
+pub fn DECODE_IMMEDIATE_D3D10_SB_ADDRESS_OFFSET(
+ Coord: DWORD,
+ OpcodeToken1: DWORD,
+) -> DWORD {
+ (OpcodeToken1 & D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_MASK(Coord))
+ >> D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_SHIFT(Coord)
+}
+#[inline]
+pub fn ENCODE_IMMEDIATE_D3D10_SB_ADDRESS_OFFSET(
+ Coord: DWORD,
+ ImmediateOffset: DWORD,
+) -> DWORD {
+ (ImmediateOffset << D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_SHIFT(Coord))
+ & D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_MASK(Coord)
+}
+pub const D3D11_SB_EXTENDED_RESOURCE_DIMENSION_MASK: DWORD = 0x000007C0;
+pub const D3D11_SB_EXTENDED_RESOURCE_DIMENSION_SHIFT: DWORD = 6;
+#[inline]
+pub fn DECODE_D3D11_SB_EXTENDED_RESOURCE_DIMENSION(
+ OpcodeTokenN: DWORD,
+) -> D3D10_SB_RESOURCE_DIMENSION {
+ ((OpcodeTokenN & D3D11_SB_EXTENDED_RESOURCE_DIMENSION_MASK)
+ >> D3D11_SB_EXTENDED_RESOURCE_DIMENSION_SHIFT) as D3D10_SB_RESOURCE_DIMENSION
+}
+#[inline]
+pub fn ENCODE_D3D11_SB_EXTENDED_RESOURCE_DIMENSION(
+ ResourceDim: D3D10_SB_RESOURCE_DIMENSION,
+) -> DWORD {
+ (ResourceDim << D3D11_SB_EXTENDED_RESOURCE_DIMENSION_SHIFT)
+ & D3D11_SB_EXTENDED_RESOURCE_DIMENSION_MASK
+}
+pub const D3D11_SB_EXTENDED_RESOURCE_DIMENSION_STRUCTURE_STRIDE_MASK: DWORD = 0x007FF800;
+pub const D3D11_SB_EXTENDED_RESOURCE_DIMENSION_STRUCTURE_STRIDE_SHIFT: DWORD = 11;
+#[inline]
+pub fn DECODE_D3D11_SB_EXTENDED_RESOURCE_DIMENSION_STRUCTURE_STRIDE(OpcodeTokenN: DWORD) -> DWORD {
+ (OpcodeTokenN & D3D11_SB_EXTENDED_RESOURCE_DIMENSION_STRUCTURE_STRIDE_MASK)
+ >> D3D11_SB_EXTENDED_RESOURCE_DIMENSION_STRUCTURE_STRIDE_SHIFT
+}
+#[inline]
+pub fn ENCODE_D3D11_SB_EXTENDED_RESOURCE_DIMENSION_STRUCTURE_STRIDE(Stride: DWORD) -> DWORD {
+ (Stride << D3D11_SB_EXTENDED_RESOURCE_DIMENSION_STRUCTURE_STRIDE_SHIFT)
+ & D3D11_SB_EXTENDED_RESOURCE_DIMENSION_STRUCTURE_STRIDE_MASK
+}
+pub const D3D10_SB_RESOURCE_RETURN_TYPE_MASK: DWORD = 0x0000000f;
+pub const D3D10_SB_RESOURCE_RETURN_TYPE_NUMBITS: DWORD = 0x00000004;
+pub const D3D11_SB_EXTENDED_RESOURCE_RETURN_TYPE_SHIFT: DWORD = 6;
+#[inline]
+pub fn DECODE_D3D11_SB_EXTENDED_RESOURCE_RETURN_TYPE(
+ OpcodeTokenN: DWORD,
+ Component: DWORD,
+) -> DWORD {
+ ((OpcodeTokenN >> (Component * D3D10_SB_RESOURCE_RETURN_TYPE_NUMBITS
+ + D3D11_SB_EXTENDED_RESOURCE_RETURN_TYPE_SHIFT))
+ & D3D10_SB_RESOURCE_RETURN_TYPE_MASK) as D3D10_SB_RESOURCE_RETURN_TYPE
+}
+#[inline]
+pub fn ENCODE_D3D11_SB_EXTENDED_RESOURCE_RETURN_TYPE(
+ ReturnType: DWORD,
+ Component: DWORD,
+) -> DWORD {
+ (ReturnType & D3D10_SB_RESOURCE_RETURN_TYPE_MASK)
+ << (Component * D3D10_SB_RESOURCE_RETURN_TYPE_NUMBITS
+ + D3D11_SB_EXTENDED_RESOURCE_RETURN_TYPE_SHIFT)
+}
+ENUM!{enum D3D10_SB_CUSTOMDATA_CLASS {
+ D3D10_SB_CUSTOMDATA_COMMENT = 0,
+ D3D10_SB_CUSTOMDATA_DEBUGINFO = 1,
+ D3D10_SB_CUSTOMDATA_OPAQUE = 2,
+ D3D10_SB_CUSTOMDATA_DCL_IMMEDIATE_CONSTANT_BUFFER = 3,
+ D3D11_SB_CUSTOMDATA_SHADER_MESSAGE = 4,
+ D3D11_SB_CUSTOMDATA_SHADER_CLIP_PLANE_CONSTANT_MAPPINGS_FOR_DX9 = 5,
+}}
+pub const D3D10_SB_CUSTOMDATA_CLASS_MASK: DWORD = 0xfffff800;
+pub const D3D10_SB_CUSTOMDATA_CLASS_SHIFT: DWORD = 11;
+#[inline]
+pub fn DECODE_D3D10_SB_CUSTOMDATA_CLASS(CustomDataDescTok: DWORD) -> D3D10_SB_CUSTOMDATA_CLASS {
+ ((CustomDataDescTok & D3D10_SB_CUSTOMDATA_CLASS_MASK) >> D3D10_SB_CUSTOMDATA_CLASS_SHIFT)
+ as D3D10_SB_CUSTOMDATA_CLASS
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_CUSTOMDATA_CLASS(CustomDataClass: D3D10_SB_CUSTOMDATA_CLASS) -> DWORD {
+ ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_CUSTOMDATA)
+ | ((CustomDataClass << D3D10_SB_CUSTOMDATA_CLASS_SHIFT) & D3D10_SB_CUSTOMDATA_CLASS_MASK)
+}
+ENUM!{enum D3D10_SB_OPERAND_NUM_COMPONENTS {
+ D3D10_SB_OPERAND_0_COMPONENT = 0,
+ D3D10_SB_OPERAND_1_COMPONENT = 1,
+ D3D10_SB_OPERAND_4_COMPONENT = 2,
+ D3D10_SB_OPERAND_N_COMPONENT = 3,
+}}
+pub const D3D10_SB_OPERAND_NUM_COMPONENTS_MASK: DWORD = 0x00000003;
+#[inline]
+pub fn DECODE_D3D10_SB_OPERAND_NUM_COMPONENTS(OperandToken0: DWORD) -> DWORD {
+ (OperandToken0 & D3D10_SB_OPERAND_NUM_COMPONENTS_MASK) as D3D10_SB_OPERAND_NUM_COMPONENTS
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_OPERAND_NUM_COMPONENTS(NumComp: DWORD) -> DWORD {
+ NumComp & D3D10_SB_OPERAND_NUM_COMPONENTS_MASK
+}
+ENUM!{enum D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE {
+ D3D10_SB_OPERAND_4_COMPONENT_MASK_MODE = 0,
+ D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE_MODE = 1,
+ D3D10_SB_OPERAND_4_COMPONENT_SELECT_1_MODE = 2,
+}}
+pub const D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE_MASK: DWORD = 0x0000000c;
+pub const D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE_SHIFT: DWORD = 2;
+#[inline]
+pub fn DECODE_D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE(
+ OperandToken0: DWORD,
+) -> D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE {
+ ((OperandToken0 & D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE_MASK)
+ >> D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE_SHIFT)
+ as D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE(
+ SelectionMode: D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE,
+) -> DWORD {
+ (SelectionMode << D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE_SHIFT)
+ & D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE_MASK
+}
+ENUM!{enum D3D10_SB_4_COMPONENT_NAME {
+ D3D10_SB_4_COMPONENT_X = 0,
+ D3D10_SB_4_COMPONENT_Y = 1,
+ D3D10_SB_4_COMPONENT_Z = 2,
+ D3D10_SB_4_COMPONENT_W = 3,
+ D3D10_SB_4_COMPONENT_R = 0,
+ D3D10_SB_4_COMPONENT_G = 1,
+ D3D10_SB_4_COMPONENT_B = 2,
+ D3D10_SB_4_COMPONENT_A = 3,
+}}
+pub const D3D10_SB_4_COMPONENT_NAME_MASK: DWORD = 3;
+pub const D3D10_SB_OPERAND_4_COMPONENT_MASK_MASK: DWORD = 0x000000f0;
+pub const D3D10_SB_OPERAND_4_COMPONENT_MASK_SHIFT: DWORD = 4;
+pub const D3D10_SB_OPERAND_4_COMPONENT_MASK_X: DWORD = 0x00000010;
+pub const D3D10_SB_OPERAND_4_COMPONENT_MASK_Y: DWORD = 0x00000020;
+pub const D3D10_SB_OPERAND_4_COMPONENT_MASK_Z: DWORD = 0x00000040;
+pub const D3D10_SB_OPERAND_4_COMPONENT_MASK_W: DWORD = 0x00000080;
+pub const D3D10_SB_OPERAND_4_COMPONENT_MASK_R: DWORD = D3D10_SB_OPERAND_4_COMPONENT_MASK_X;
+pub const D3D10_SB_OPERAND_4_COMPONENT_MASK_G: DWORD = D3D10_SB_OPERAND_4_COMPONENT_MASK_Y;
+pub const D3D10_SB_OPERAND_4_COMPONENT_MASK_B: DWORD = D3D10_SB_OPERAND_4_COMPONENT_MASK_Z;
+pub const D3D10_SB_OPERAND_4_COMPONENT_MASK_A: DWORD = D3D10_SB_OPERAND_4_COMPONENT_MASK_W;
+pub const D3D10_SB_OPERAND_4_COMPONENT_MASK_ALL: DWORD = D3D10_SB_OPERAND_4_COMPONENT_MASK_MASK;
+#[inline]
+pub fn DECODE_D3D10_SB_OPERAND_4_COMPONENT_MASK(OperandToken0: DWORD) -> DWORD {
+ OperandToken0 & D3D10_SB_OPERAND_4_COMPONENT_MASK_MASK
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_OPERAND_4_COMPONENT_MASK(ComponentMask: DWORD) -> DWORD {
+ ComponentMask & D3D10_SB_OPERAND_4_COMPONENT_MASK_MASK
+}
+#[inline]
+pub fn D3D10_SB_OPERAND_4_COMPONENT_MASK(ComponentName: DWORD) -> DWORD {
+ (1 << (D3D10_SB_OPERAND_4_COMPONENT_MASK_SHIFT + ComponentName))
+ & D3D10_SB_OPERAND_4_COMPONENT_MASK_MASK
+}
+pub const D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE_MASK: DWORD = 0x00000ff0;
+pub const D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE_SHIFT: DWORD = 4;
+#[inline]
+pub fn DECODE_D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE(OperandToken0: DWORD) -> DWORD {
+ OperandToken0 & D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE_MASK
+}
+#[inline]
+pub fn DECODE_D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE_SOURCE(
+ OperandToken0: DWORD,
+ DestComp: DWORD,
+) -> D3D10_SB_4_COMPONENT_NAME {
+ ((OperandToken0 >> (D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE_SHIFT + 2
+ * (DestComp & D3D10_SB_4_COMPONENT_NAME_MASK)))
+ & D3D10_SB_4_COMPONENT_NAME_MASK) as D3D10_SB_4_COMPONENT_NAME
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE(
+ XSrc: DWORD,
+ YSrc: DWORD,
+ ZSrc: DWORD,
+ WSrc: DWORD,
+) -> DWORD {
+ ((XSrc & D3D10_SB_4_COMPONENT_NAME_MASK)
+ | ((YSrc & D3D10_SB_4_COMPONENT_NAME_MASK) << 2)
+ | ((ZSrc & D3D10_SB_4_COMPONENT_NAME_MASK) << 4)
+ | ((WSrc & D3D10_SB_4_COMPONENT_NAME_MASK) << 6))
+ << D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE_SHIFT
+}
+#[inline]
+pub fn D3D10_SB_OPERAND_4_COMPONENT_NOSWIZZLE() -> DWORD {
+ ENCODE_D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE(
+ D3D10_SB_4_COMPONENT_X,
+ D3D10_SB_4_COMPONENT_Y,
+ D3D10_SB_4_COMPONENT_Z,
+ D3D10_SB_4_COMPONENT_W,
+ )
+}
+#[inline]
+pub fn D3D10_SB_OPERAND_4_COMPONENT_REPLICATEX() -> DWORD {
+ ENCODE_D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE(
+ D3D10_SB_4_COMPONENT_X,
+ D3D10_SB_4_COMPONENT_X,
+ D3D10_SB_4_COMPONENT_X,
+ D3D10_SB_4_COMPONENT_X,
+ )
+}
+#[inline]
+pub fn D3D10_SB_OPERAND_4_COMPONENT_REPLICATEY() -> DWORD {
+ ENCODE_D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE(
+ D3D10_SB_4_COMPONENT_Y,
+ D3D10_SB_4_COMPONENT_Y,
+ D3D10_SB_4_COMPONENT_Y,
+ D3D10_SB_4_COMPONENT_Y,
+ )
+}
+#[inline]
+pub fn D3D10_SB_OPERAND_4_COMPONENT_REPLICATEZ() -> DWORD {
+ ENCODE_D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE(
+ D3D10_SB_4_COMPONENT_Z,
+ D3D10_SB_4_COMPONENT_Z,
+ D3D10_SB_4_COMPONENT_Z,
+ D3D10_SB_4_COMPONENT_Z,
+ )
+}
+#[inline]
+pub fn D3D10_SB_OPERAND_4_COMPONENT_REPLICATEW() -> DWORD {
+ ENCODE_D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE(
+ D3D10_SB_4_COMPONENT_W,
+ D3D10_SB_4_COMPONENT_W,
+ D3D10_SB_4_COMPONENT_W,
+ D3D10_SB_4_COMPONENT_W,
+ )
+}
+#[inline]
+pub fn D3D10_SB_OPERAND_4_COMPONENT_REPLICATERED() -> DWORD {
+ D3D10_SB_OPERAND_4_COMPONENT_REPLICATEX()
+}
+#[inline]
+pub fn D3D10_SB_OPERAND_4_COMPONENT_REPLICATEGREEN() -> DWORD {
+ D3D10_SB_OPERAND_4_COMPONENT_REPLICATEY()
+}
+#[inline]
+pub fn D3D10_SB_OPERAND_4_COMPONENT_REPLICATEBLUE() -> DWORD {
+ D3D10_SB_OPERAND_4_COMPONENT_REPLICATEZ()
+}
+#[inline]
+pub fn D3D10_SB_OPERAND_4_COMPONENT_REPLICATEALPHA() -> DWORD {
+ D3D10_SB_OPERAND_4_COMPONENT_REPLICATEW()
+}
+pub const D3D10_SB_OPERAND_4_COMPONENT_SELECT_1_MASK: DWORD = 0x00000030;
+pub const D3D10_SB_OPERAND_4_COMPONENT_SELECT_1_SHIFT: DWORD = 4;
+#[inline]
+pub fn DECODE_D3D10_SB_OPERAND_4_COMPONENT_SELECT_1(
+ OperandToken0: DWORD,
+) -> D3D10_SB_4_COMPONENT_NAME {
+ ((OperandToken0 & D3D10_SB_OPERAND_4_COMPONENT_SELECT_1_MASK)
+ >> D3D10_SB_OPERAND_4_COMPONENT_SELECT_1_SHIFT) as D3D10_SB_4_COMPONENT_NAME
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_OPERAND_4_COMPONENT_SELECT_1(
+ SelectedComp: D3D10_SB_4_COMPONENT_NAME,
+) -> DWORD {
+ (SelectedComp << D3D10_SB_OPERAND_4_COMPONENT_SELECT_1_SHIFT)
+ & D3D10_SB_OPERAND_4_COMPONENT_SELECT_1_MASK
+}
+ENUM!{enum D3D10_SB_OPERAND_TYPE {
+ D3D10_SB_OPERAND_TYPE_TEMP = 0,
+ D3D10_SB_OPERAND_TYPE_INPUT = 1,
+ D3D10_SB_OPERAND_TYPE_OUTPUT = 2,
+ D3D10_SB_OPERAND_TYPE_INDEXABLE_TEMP = 3,
+ D3D10_SB_OPERAND_TYPE_IMMEDIATE32 = 4,
+ D3D10_SB_OPERAND_TYPE_IMMEDIATE64 = 5,
+ D3D10_SB_OPERAND_TYPE_SAMPLER = 6,
+ D3D10_SB_OPERAND_TYPE_RESOURCE = 7,
+ D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER= 8,
+ D3D10_SB_OPERAND_TYPE_IMMEDIATE_CONSTANT_BUFFER= 9,
+ D3D10_SB_OPERAND_TYPE_LABEL = 10,
+ D3D10_SB_OPERAND_TYPE_INPUT_PRIMITIVEID = 11,
+ D3D10_SB_OPERAND_TYPE_OUTPUT_DEPTH = 12,
+ D3D10_SB_OPERAND_TYPE_NULL = 13,
+ D3D10_SB_OPERAND_TYPE_RASTERIZER = 14,
+ D3D10_SB_OPERAND_TYPE_OUTPUT_COVERAGE_MASK = 15,
+ D3D11_SB_OPERAND_TYPE_STREAM = 16,
+ D3D11_SB_OPERAND_TYPE_FUNCTION_BODY = 17,
+ D3D11_SB_OPERAND_TYPE_FUNCTION_TABLE = 18,
+ D3D11_SB_OPERAND_TYPE_INTERFACE = 19,
+ D3D11_SB_OPERAND_TYPE_FUNCTION_INPUT = 20,
+ D3D11_SB_OPERAND_TYPE_FUNCTION_OUTPUT = 21,
+ D3D11_SB_OPERAND_TYPE_OUTPUT_CONTROL_POINT_ID = 22,
+ D3D11_SB_OPERAND_TYPE_INPUT_FORK_INSTANCE_ID = 23,
+ D3D11_SB_OPERAND_TYPE_INPUT_JOIN_INSTANCE_ID = 24,
+ D3D11_SB_OPERAND_TYPE_INPUT_CONTROL_POINT = 25,
+ D3D11_SB_OPERAND_TYPE_OUTPUT_CONTROL_POINT = 26,
+ D3D11_SB_OPERAND_TYPE_INPUT_PATCH_CONSTANT = 27,
+ D3D11_SB_OPERAND_TYPE_INPUT_DOMAIN_POINT = 28,
+ D3D11_SB_OPERAND_TYPE_THIS_POINTER = 29,
+ D3D11_SB_OPERAND_TYPE_UNORDERED_ACCESS_VIEW = 30,
+ D3D11_SB_OPERAND_TYPE_THREAD_GROUP_SHARED_MEMORY = 31,
+ D3D11_SB_OPERAND_TYPE_INPUT_THREAD_ID = 32,
+ D3D11_SB_OPERAND_TYPE_INPUT_THREAD_GROUP_ID = 33,
+ D3D11_SB_OPERAND_TYPE_INPUT_THREAD_ID_IN_GROUP = 34,
+ D3D11_SB_OPERAND_TYPE_INPUT_COVERAGE_MASK = 35,
+ D3D11_SB_OPERAND_TYPE_INPUT_THREAD_ID_IN_GROUP_FLATTENED = 36,
+ D3D11_SB_OPERAND_TYPE_INPUT_GS_INSTANCE_ID = 37,
+ D3D11_SB_OPERAND_TYPE_OUTPUT_DEPTH_GREATER_EQUAL = 38,
+ D3D11_SB_OPERAND_TYPE_OUTPUT_DEPTH_LESS_EQUAL = 39,
+ D3D11_SB_OPERAND_TYPE_CYCLE_COUNTER = 40,
+}}
+pub const D3D10_SB_OPERAND_TYPE_MASK: DWORD = 0x000ff000;
+pub const D3D10_SB_OPERAND_TYPE_SHIFT: DWORD = 12;
+#[inline]
+pub fn DECODE_D3D10_SB_OPERAND_TYPE(OperandToken0: DWORD) -> D3D10_SB_OPERAND_TYPE {
+ ((OperandToken0 & D3D10_SB_OPERAND_TYPE_MASK) >> D3D10_SB_OPERAND_TYPE_SHIFT)
+ as D3D10_SB_OPERAND_TYPE
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_OPERAND_TYPE(OperandType: D3D10_SB_OPERAND_TYPE) -> DWORD {
+ (OperandType << D3D10_SB_OPERAND_TYPE_SHIFT) & D3D10_SB_OPERAND_TYPE_MASK
+}
+ENUM!{enum D3D10_SB_OPERAND_INDEX_DIMENSION {
+ D3D10_SB_OPERAND_INDEX_0D = 0,
+ D3D10_SB_OPERAND_INDEX_1D = 1,
+ D3D10_SB_OPERAND_INDEX_2D = 2,
+ D3D10_SB_OPERAND_INDEX_3D = 3,
+}}
+pub const D3D10_SB_OPERAND_INDEX_DIMENSION_MASK: DWORD = 0x00300000;
+pub const D3D10_SB_OPERAND_INDEX_DIMENSION_SHIFT: DWORD = 20;
+#[inline]
+pub fn DECODE_D3D10_SB_OPERAND_INDEX_DIMENSION(
+ OperandToken0: DWORD,
+) -> D3D10_SB_OPERAND_INDEX_DIMENSION {
+ ((OperandToken0 & D3D10_SB_OPERAND_INDEX_DIMENSION_MASK)
+ >> D3D10_SB_OPERAND_INDEX_DIMENSION_SHIFT) as D3D10_SB_OPERAND_INDEX_DIMENSION
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_OPERAND_INDEX_DIMENSION(
+ OperandIndexDim: D3D10_SB_OPERAND_INDEX_DIMENSION,
+) -> DWORD {
+ (OperandIndexDim << D3D10_SB_OPERAND_INDEX_DIMENSION_SHIFT)
+ & D3D10_SB_OPERAND_INDEX_DIMENSION_MASK
+}
+ENUM!{enum D3D10_SB_OPERAND_INDEX_REPRESENTATION {
+ D3D10_SB_OPERAND_INDEX_IMMEDIATE32 = 0,
+ D3D10_SB_OPERAND_INDEX_IMMEDIATE64 = 1,
+ D3D10_SB_OPERAND_INDEX_RELATIVE = 2,
+ D3D10_SB_OPERAND_INDEX_IMMEDIATE32_PLUS_RELATIVE = 3,
+ D3D10_SB_OPERAND_INDEX_IMMEDIATE64_PLUS_RELATIVE = 4,
+}}
+#[inline]
+pub fn D3D10_SB_OPERAND_INDEX_REPRESENTATION_SHIFT(Dim: DWORD) -> DWORD {
+ 22 + 3 * (Dim & 3)
+}
+#[inline]
+pub fn D3D10_SB_OPERAND_INDEX_REPRESENTATION_MASK(Dim: DWORD) -> DWORD {
+ 0x3 << D3D10_SB_OPERAND_INDEX_REPRESENTATION_SHIFT(Dim)
+}
+#[inline]
+pub fn DECODE_D3D10_SB_OPERAND_INDEX_REPRESENTATION(
+ Dim: DWORD,
+ OperandToken0: DWORD,
+) -> D3D10_SB_OPERAND_INDEX_REPRESENTATION {
+ ((OperandToken0 & D3D10_SB_OPERAND_INDEX_REPRESENTATION_MASK(Dim))
+ >> D3D10_SB_OPERAND_INDEX_REPRESENTATION_SHIFT(Dim))
+ as D3D10_SB_OPERAND_INDEX_REPRESENTATION
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_OPERAND_INDEX_REPRESENTATION(
+ Dim: DWORD,
+ IndexRepresentation: D3D10_SB_OPERAND_INDEX_REPRESENTATION,
+) -> DWORD {
+ (IndexRepresentation << D3D10_SB_OPERAND_INDEX_REPRESENTATION_SHIFT(Dim))
+ & D3D10_SB_OPERAND_INDEX_REPRESENTATION_MASK(Dim)
+}
+pub const D3D10_SB_OPERAND_EXTENDED_MASK: DWORD = 0x80000000;
+pub const D3D10_SB_OPERAND_EXTENDED_SHIFT: DWORD = 31;
+#[inline]
+pub fn DECODE_IS_D3D10_SB_OPERAND_EXTENDED(OperandToken0: DWORD) -> DWORD {
+ (OperandToken0 & D3D10_SB_OPERAND_EXTENDED_MASK) >> D3D10_SB_OPERAND_EXTENDED_SHIFT
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_OPERAND_EXTENDED(bExtended: DWORD) -> DWORD {
+ if bExtended != 0 {
+ D3D10_SB_OPERAND_EXTENDED_MASK
+ } else {
+ 0
+ }
+}
+ENUM!{enum D3D10_SB_EXTENDED_OPERAND_TYPE {
+ D3D10_SB_EXTENDED_OPERAND_EMPTY = 0,
+ D3D10_SB_EXTENDED_OPERAND_MODIFIER = 1,
+}}
+pub const D3D10_SB_EXTENDED_OPERAND_TYPE_MASK: DWORD = 0x0000003f;
+#[inline]
+pub fn DECODE_D3D10_SB_EXTENDED_OPERAND_TYPE(
+ OperandToken1: DWORD,
+) -> D3D10_SB_EXTENDED_OPERAND_TYPE {
+ (OperandToken1 & D3D10_SB_EXTENDED_OPERAND_TYPE_MASK) as D3D10_SB_EXTENDED_OPERAND_TYPE
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_EXTENDED_OPERAND_TYPE(
+ ExtOperandType: D3D10_SB_EXTENDED_OPERAND_TYPE,
+) -> DWORD {
+ ExtOperandType & D3D10_SB_EXTENDED_OPERAND_TYPE_MASK
+}
+ENUM!{enum D3D10_SB_OPERAND_MODIFIER {
+ D3D10_SB_OPERAND_MODIFIER_NONE = 0,
+ D3D10_SB_OPERAND_MODIFIER_NEG = 1,
+ D3D10_SB_OPERAND_MODIFIER_ABS = 2,
+ D3D10_SB_OPERAND_MODIFIER_ABSNEG = 3,
+}}
+pub const D3D10_SB_OPERAND_MODIFIER_MASK: DWORD = 0x00003fc0;
+pub const D3D10_SB_OPERAND_MODIFIER_SHIFT: DWORD = 6;
+#[inline]
+pub fn DECODE_D3D10_SB_OPERAND_MODIFIER(OperandToken1: DWORD) -> D3D10_SB_OPERAND_MODIFIER {
+ ((OperandToken1 & D3D10_SB_OPERAND_MODIFIER_MASK) >> D3D10_SB_OPERAND_MODIFIER_SHIFT)
+ as D3D10_SB_OPERAND_MODIFIER
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_EXTENDED_OPERAND_MODIFIER(SourceMod: D3D10_SB_OPERAND_MODIFIER) -> DWORD {
+ ((SourceMod << D3D10_SB_OPERAND_MODIFIER_SHIFT) & D3D10_SB_OPERAND_MODIFIER_MASK)
+ | ENCODE_D3D10_SB_EXTENDED_OPERAND_TYPE(D3D10_SB_EXTENDED_OPERAND_MODIFIER)
+ | ENCODE_D3D10_SB_OPERAND_DOUBLE_EXTENDED(0)
+}
+ENUM!{enum D3D11_SB_OPERAND_MIN_PRECISION {
+ D3D11_SB_OPERAND_MIN_PRECISION_DEFAULT = 0,
+ D3D11_SB_OPERAND_MIN_PRECISION_FLOAT_16 = 1,
+ D3D11_SB_OPERAND_MIN_PRECISION_FLOAT_2_8 = 2,
+ D3D11_SB_OPERAND_MIN_PRECISION_SINT_16 = 4,
+ D3D11_SB_OPERAND_MIN_PRECISION_UINT_16 = 5,
+}}
+pub const D3D11_SB_OPERAND_MIN_PRECISION_MASK: DWORD = 0x0001C000;
+pub const D3D11_SB_OPERAND_MIN_PRECISION_SHIFT: DWORD = 14;
+#[inline]
+pub fn DECODE_D3D11_SB_OPERAND_MIN_PRECISION(
+ OperandToken1: DWORD,
+) -> D3D11_SB_OPERAND_MIN_PRECISION {
+ ((OperandToken1 & D3D11_SB_OPERAND_MIN_PRECISION_MASK) >> D3D11_SB_OPERAND_MIN_PRECISION_SHIFT)
+ as D3D11_SB_OPERAND_MIN_PRECISION
+}
+#[inline]
+pub fn ENCODE_D3D11_SB_OPERAND_MIN_PRECISION(
+ MinPrecision: D3D11_SB_OPERAND_MIN_PRECISION,
+) -> DWORD {
+ (MinPrecision << D3D11_SB_OPERAND_MIN_PRECISION_SHIFT) & D3D11_SB_OPERAND_MIN_PRECISION_MASK
+}
+pub const D3D10_SB_OPERAND_DOUBLE_EXTENDED_MASK: DWORD = 0x80000000;
+pub const D3D10_SB_OPERAND_DOUBLE_EXTENDED_SHIFT: DWORD = 31;
+#[inline]
+pub fn DECODE_IS_D3D10_SB_OPERAND_DOUBLE_EXTENDED(OperandToken1: DWORD) -> DWORD {
+ (OperandToken1 & D3D10_SB_OPERAND_DOUBLE_EXTENDED_MASK)
+ >> D3D10_SB_OPERAND_DOUBLE_EXTENDED_SHIFT
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_OPERAND_DOUBLE_EXTENDED(bExtended: DWORD) -> DWORD {
+ if bExtended != 0 {
+ D3D10_SB_OPERAND_DOUBLE_EXTENDED_MASK
+ } else {
+ 0
+ }
+}
+pub const D3D10_SB_NAME_MASK: DWORD = 0x0000ffff;
+#[inline]
+pub fn DECODE_D3D10_SB_NAME(NameToken: DWORD) -> D3D10_SB_NAME {
+ (NameToken & D3D10_SB_NAME_MASK) as D3D10_SB_NAME
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_NAME(Name: D3D10_SB_NAME) -> DWORD {
+ Name & D3D10_SB_NAME_MASK
+}
+pub const D3D10_SB_GLOBAL_FLAG_REFACTORING_ALLOWED: DWORD = 1 << 11;
+pub const D3D11_SB_GLOBAL_FLAG_ENABLE_DOUBLE_PRECISION_FLOAT_OPS: DWORD = 1 << 12;
+pub const D3D11_SB_GLOBAL_FLAG_FORCE_EARLY_DEPTH_STENCIL: DWORD = 1 << 13;
+pub const D3D11_SB_GLOBAL_FLAG_ENABLE_RAW_AND_STRUCTURED_BUFFERS: DWORD = 1 << 14;
+pub const D3D11_1_SB_GLOBAL_FLAG_SKIP_OPTIMIZATION: DWORD = 1 << 15;
+pub const D3D11_1_SB_GLOBAL_FLAG_ENABLE_MINIMUM_PRECISION: DWORD = 1 << 16;
+pub const D3D11_1_SB_GLOBAL_FLAG_ENABLE_DOUBLE_EXTENSIONS: DWORD = 1 << 17;
+pub const D3D11_1_SB_GLOBAL_FLAG_ENABLE_SHADER_EXTENSIONS: DWORD = 1 << 18;
+pub const D3D10_SB_GLOBAL_FLAGS_MASK: DWORD = 0x00fff800;
+#[inline]
+pub fn DECODE_D3D10_SB_GLOBAL_FLAGS(OpcodeToken0: DWORD) -> DWORD {
+ OpcodeToken0 & D3D10_SB_GLOBAL_FLAGS_MASK
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_GLOBAL_FLAGS(Flags: DWORD) -> DWORD {
+ Flags & D3D10_SB_GLOBAL_FLAGS_MASK
+}
+pub const D3D10_SB_RESOURCE_DIMENSION_MASK: DWORD = 0x0000F800;
+pub const D3D10_SB_RESOURCE_DIMENSION_SHIFT: DWORD = 11;
+#[inline]
+pub fn DECODE_D3D10_SB_RESOURCE_DIMENSION(OpcodeToken0: DWORD) -> D3D10_SB_RESOURCE_DIMENSION {
+ ((OpcodeToken0 & D3D10_SB_RESOURCE_DIMENSION_MASK) >> D3D10_SB_RESOURCE_DIMENSION_SHIFT)
+ as D3D10_SB_RESOURCE_DIMENSION
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_RESOURCE_DIMENSION(ResourceDim: D3D10_SB_RESOURCE_DIMENSION) -> DWORD {
+ (ResourceDim << D3D10_SB_RESOURCE_DIMENSION_SHIFT) & D3D10_SB_RESOURCE_DIMENSION_MASK
+}
+pub const D3D10_SB_RESOURCE_SAMPLE_COUNT_MASK: DWORD = 0x07F0000;
+pub const D3D10_SB_RESOURCE_SAMPLE_COUNT_SHIFT: DWORD = 16;
+#[inline]
+pub fn DECODE_D3D10_SB_RESOURCE_SAMPLE_COUNT(OpcodeToken0: DWORD) -> UINT {
+ ((OpcodeToken0 & D3D10_SB_RESOURCE_SAMPLE_COUNT_MASK) >> D3D10_SB_RESOURCE_SAMPLE_COUNT_SHIFT)
+ as UINT
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_RESOURCE_SAMPLE_COUNT(SampleCount: DWORD) -> DWORD {
+ (if SampleCount > 127 { 127 } else { SampleCount } << D3D10_SB_RESOURCE_SAMPLE_COUNT_SHIFT)
+ & D3D10_SB_RESOURCE_SAMPLE_COUNT_MASK
+}
+#[inline]
+pub fn DECODE_D3D10_SB_RESOURCE_RETURN_TYPE(
+ ResourceReturnTypeToken: D3D10_SB_RESOURCE_RETURN_TYPE,
+ Component: DWORD,
+) -> D3D10_SB_RESOURCE_RETURN_TYPE {
+ ((ResourceReturnTypeToken >> (Component * D3D10_SB_RESOURCE_RETURN_TYPE_NUMBITS))
+ & D3D10_SB_RESOURCE_RETURN_TYPE_MASK) as D3D10_SB_RESOURCE_RETURN_TYPE
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_RESOURCE_RETURN_TYPE(
+ ReturnType: DWORD,
+ Component: DWORD,
+) -> D3D10_SB_RESOURCE_RETURN_TYPE {
+ (ReturnType & D3D10_SB_RESOURCE_RETURN_TYPE_MASK)
+ << (Component * D3D10_SB_RESOURCE_RETURN_TYPE_NUMBITS)
+}
+ENUM!{enum D3D10_SB_SAMPLER_MODE {
+ D3D10_SB_SAMPLER_MODE_DEFAULT = 0,
+ D3D10_SB_SAMPLER_MODE_COMPARISON = 1,
+ D3D10_SB_SAMPLER_MODE_MONO = 2,
+}}
+pub const D3D10_SB_SAMPLER_MODE_MASK: DWORD = 0x00007800;
+pub const D3D10_SB_SAMPLER_MODE_SHIFT: DWORD = 11;
+#[inline]
+pub fn DECODE_D3D10_SB_SAMPLER_MODE(OpcodeToken0: DWORD) -> D3D10_SB_SAMPLER_MODE {
+ ((OpcodeToken0 & D3D10_SB_SAMPLER_MODE_MASK) >> D3D10_SB_SAMPLER_MODE_SHIFT)
+ as D3D10_SB_SAMPLER_MODE
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_SAMPLER_MODE(SamplerMode: D3D10_SB_SAMPLER_MODE) -> DWORD {
+ (SamplerMode << D3D10_SB_SAMPLER_MODE_SHIFT) & D3D10_SB_SAMPLER_MODE_MASK
+}
+pub const D3D10_SB_INPUT_INTERPOLATION_MODE_MASK: DWORD = 0x00007800;
+pub const D3D10_SB_INPUT_INTERPOLATION_MODE_SHIFT: DWORD = 11;
+#[inline]
+pub fn DECODE_D3D10_SB_INPUT_INTERPOLATION_MODE(
+ OpcodeToken0: DWORD,
+) -> D3D10_SB_INTERPOLATION_MODE {
+ ((OpcodeToken0 & D3D10_SB_INPUT_INTERPOLATION_MODE_MASK)
+ >> D3D10_SB_INPUT_INTERPOLATION_MODE_SHIFT) as D3D10_SB_INTERPOLATION_MODE
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_INPUT_INTERPOLATION_MODE(
+ InterpolationMode: D3D10_SB_INTERPOLATION_MODE,
+) -> DWORD {
+ (InterpolationMode << D3D10_SB_INPUT_INTERPOLATION_MODE_SHIFT)
+ & D3D10_SB_INPUT_INTERPOLATION_MODE_MASK
+}
+ENUM!{enum D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN {
+ D3D10_SB_CONSTANT_BUFFER_IMMEDIATE_INDEXED = 0,
+ D3D10_SB_CONSTANT_BUFFER_DYNAMIC_INDEXED = 1,
+}}
+pub const D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN_MASK: DWORD = 0x00000800;
+pub const D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN_SHIFT: DWORD = 11;
+#[inline]
+pub fn DECODE_D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN(
+ OpcodeToken0: DWORD,
+) -> D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN {
+ ((OpcodeToken0 & D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN_MASK)
+ >> D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN_SHIFT)
+ as D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN(
+ AccessPattern: D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN,
+) -> DWORD {
+ (AccessPattern << D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN_SHIFT)
+ & D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN_MASK
+}
+ENUM!{enum D3D11_SB_SHADER_MESSAGE_ID {
+ D3D11_SB_SHADER_MESSAGE_ID_MESSAGE = 0x00200102,
+ D3D11_SB_SHADER_MESSAGE_ID_ERROR = 0x00200103,
+}}
+ENUM!{enum D3D11_SB_SHADER_MESSAGE_FORMAT {
+ D3D11_SB_SHADER_MESSAGE_FORMAT_ANSI_TEXT = 0,
+ D3D11_SB_SHADER_MESSAGE_FORMAT_ANSI_PRINTF = 1,
+}}
+pub const D3D10_SB_GS_INPUT_PRIMITIVE_MASK: DWORD = 0x0001f800;
+pub const D3D10_SB_GS_INPUT_PRIMITIVE_SHIFT: DWORD = 11;
+#[inline]
+pub fn DECODE_D3D10_SB_GS_INPUT_PRIMITIVE(OpcodeToken0: DWORD) -> D3D10_SB_PRIMITIVE {
+ ((OpcodeToken0 & D3D10_SB_GS_INPUT_PRIMITIVE_MASK) >> D3D10_SB_GS_INPUT_PRIMITIVE_SHIFT)
+ as D3D10_SB_PRIMITIVE
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_GS_INPUT_PRIMITIVE(Prim: D3D10_SB_PRIMITIVE) -> DWORD {
+ (Prim << D3D10_SB_GS_INPUT_PRIMITIVE_SHIFT) & D3D10_SB_GS_INPUT_PRIMITIVE_MASK
+}
+pub const D3D10_SB_GS_OUTPUT_PRIMITIVE_TOPOLOGY_MASK: DWORD = 0x0001f800;
+pub const D3D10_SB_GS_OUTPUT_PRIMITIVE_TOPOLOGY_SHIFT: DWORD = 11;
+#[inline]
+pub fn DECODE_D3D10_SB_GS_OUTPUT_PRIMITIVE_TOPOLOGY(
+ OpcodeToken0: DWORD,
+) -> D3D10_SB_PRIMITIVE_TOPOLOGY {
+ ((OpcodeToken0 & D3D10_SB_GS_OUTPUT_PRIMITIVE_TOPOLOGY_MASK)
+ >> D3D10_SB_GS_OUTPUT_PRIMITIVE_TOPOLOGY_SHIFT) as D3D10_SB_PRIMITIVE_TOPOLOGY
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_GS_OUTPUT_PRIMITIVE_TOPOLOGY(
+ PrimTopology: D3D10_SB_PRIMITIVE_TOPOLOGY,
+) -> DWORD {
+ (PrimTopology << D3D10_SB_GS_OUTPUT_PRIMITIVE_TOPOLOGY_SHIFT)
+ & D3D10_SB_GS_OUTPUT_PRIMITIVE_TOPOLOGY_MASK
+}
+pub const D3D11_SB_INPUT_CONTROL_POINT_COUNT_MASK: DWORD = 0x0001f800;
+pub const D3D11_SB_INPUT_CONTROL_POINT_COUNT_SHIFT: DWORD = 11;
+#[inline]
+pub fn DECODE_D3D11_SB_INPUT_CONTROL_POINT_COUNT(OpcodeToken0: DWORD) -> UINT {
+ ((OpcodeToken0 & D3D11_SB_INPUT_CONTROL_POINT_COUNT_MASK)
+ >> D3D11_SB_INPUT_CONTROL_POINT_COUNT_SHIFT) as UINT
+}
+#[inline]
+pub fn ENCODE_D3D11_SB_INPUT_CONTROL_POINT_COUNT(Count: DWORD) -> DWORD {
+ (Count << D3D11_SB_INPUT_CONTROL_POINT_COUNT_SHIFT) & D3D11_SB_INPUT_CONTROL_POINT_COUNT_MASK
+}
+pub const D3D11_SB_OUTPUT_CONTROL_POINT_COUNT_MASK: DWORD = 0x0001f800;
+pub const D3D11_SB_OUTPUT_CONTROL_POINT_COUNT_SHIFT: DWORD = 11;
+#[inline]
+pub fn DECODE_D3D11_SB_OUTPUT_CONTROL_POINT_COUNT(OpcodeToken0: DWORD) -> UINT {
+ ((OpcodeToken0 & D3D11_SB_OUTPUT_CONTROL_POINT_COUNT_MASK)
+ >> D3D11_SB_OUTPUT_CONTROL_POINT_COUNT_SHIFT) as UINT
+}
+#[inline]
+pub fn ENCODE_D3D11_SB_OUTPUT_CONTROL_POINT_COUNT(Count: DWORD) -> DWORD {
+ (Count << D3D11_SB_OUTPUT_CONTROL_POINT_COUNT_SHIFT) & D3D11_SB_OUTPUT_CONTROL_POINT_COUNT_MASK
+}
+ENUM!{enum D3D11_SB_TESSELLATOR_DOMAIN {
+ D3D11_SB_TESSELLATOR_DOMAIN_UNDEFINED = 0,
+ D3D11_SB_TESSELLATOR_DOMAIN_ISOLINE = 1,
+ D3D11_SB_TESSELLATOR_DOMAIN_TRI = 2,
+ D3D11_SB_TESSELLATOR_DOMAIN_QUAD = 3,
+}}
+pub const D3D11_SB_TESS_DOMAIN_MASK: DWORD = 0x00001800;
+pub const D3D11_SB_TESS_DOMAIN_SHIFT: DWORD = 11;
+#[inline]
+pub fn DECODE_D3D11_SB_TESS_DOMAIN(OpcodeToken0: DWORD) -> D3D11_SB_TESSELLATOR_DOMAIN {
+ ((OpcodeToken0 & D3D11_SB_TESS_DOMAIN_MASK) >> D3D11_SB_TESS_DOMAIN_SHIFT)
+ as D3D11_SB_TESSELLATOR_DOMAIN
+}
+#[inline]
+pub fn ENCODE_D3D11_SB_TESS_DOMAIN(Domain: D3D11_SB_TESSELLATOR_DOMAIN) -> DWORD {
+ (Domain << D3D11_SB_TESS_DOMAIN_SHIFT) & D3D11_SB_TESS_DOMAIN_MASK
+}
+ENUM!{enum D3D11_SB_TESSELLATOR_PARTITIONING {
+ D3D11_SB_TESSELLATOR_PARTITIONING_UNDEFINED = 0,
+ D3D11_SB_TESSELLATOR_PARTITIONING_INTEGER = 1,
+ D3D11_SB_TESSELLATOR_PARTITIONING_POW2 = 2,
+ D3D11_SB_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD = 3,
+ D3D11_SB_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN = 4,
+}}
+pub const D3D11_SB_TESS_PARTITIONING_MASK: DWORD = 0x00003800;
+pub const D3D11_SB_TESS_PARTITIONING_SHIFT: DWORD = 11;
+#[inline]
+pub fn DECODE_D3D11_SB_TESS_PARTITIONING(
+ OpcodeToken0: DWORD,
+) -> D3D11_SB_TESSELLATOR_PARTITIONING {
+ ((OpcodeToken0 & D3D11_SB_TESS_PARTITIONING_MASK) >> D3D11_SB_TESS_PARTITIONING_SHIFT)
+ as D3D11_SB_TESSELLATOR_PARTITIONING
+}
+#[inline]
+pub fn ENCODE_D3D11_SB_TESS_PARTITIONING(
+ Partitioning: D3D11_SB_TESSELLATOR_PARTITIONING,
+) -> DWORD {
+ (Partitioning << D3D11_SB_TESS_PARTITIONING_SHIFT) & D3D11_SB_TESS_PARTITIONING_MASK
+}
+ENUM!{enum D3D11_SB_TESSELLATOR_OUTPUT_PRIMITIVE {
+ D3D11_SB_TESSELLATOR_OUTPUT_UNDEFINED = 0,
+ D3D11_SB_TESSELLATOR_OUTPUT_POINT = 1,
+ D3D11_SB_TESSELLATOR_OUTPUT_LINE = 2,
+ D3D11_SB_TESSELLATOR_OUTPUT_TRIANGLE_CW = 3,
+ D3D11_SB_TESSELLATOR_OUTPUT_TRIANGLE_CCW = 4,
+}}
+pub const D3D11_SB_TESS_OUTPUT_PRIMITIVE_MASK: DWORD = 0x00003800;
+pub const D3D11_SB_TESS_OUTPUT_PRIMITIVE_SHIFT: DWORD = 11;
+#[inline]
+pub fn DECODE_D3D11_SB_TESS_OUTPUT_PRIMITIVE(
+ OpcodeToken0: DWORD,
+) -> D3D11_SB_TESSELLATOR_OUTPUT_PRIMITIVE {
+ ((OpcodeToken0 & D3D11_SB_TESS_OUTPUT_PRIMITIVE_MASK) >> D3D11_SB_TESS_OUTPUT_PRIMITIVE_SHIFT)
+ as D3D11_SB_TESSELLATOR_OUTPUT_PRIMITIVE
+}
+#[inline]
+pub fn ENCODE_D3D11_SB_TESS_OUTPUT_PRIMITIVE(
+ OutputPrimitive: D3D11_SB_TESSELLATOR_OUTPUT_PRIMITIVE,
+) -> DWORD {
+ (OutputPrimitive << D3D11_SB_TESS_OUTPUT_PRIMITIVE_SHIFT) & D3D11_SB_TESS_OUTPUT_PRIMITIVE_MASK
+}
+ENUM!{enum D3D10_SB_INTERPOLATION_MODE {
+ D3D10_SB_INTERPOLATION_UNDEFINED = 0,
+ D3D10_SB_INTERPOLATION_CONSTANT = 1,
+ D3D10_SB_INTERPOLATION_LINEAR = 2,
+ D3D10_SB_INTERPOLATION_LINEAR_CENTROID = 3,
+ D3D10_SB_INTERPOLATION_LINEAR_NOPERSPECTIVE = 4,
+ D3D10_SB_INTERPOLATION_LINEAR_NOPERSPECTIVE_CENTROID = 5,
+ D3D10_SB_INTERPOLATION_LINEAR_SAMPLE = 6,
+ D3D10_SB_INTERPOLATION_LINEAR_NOPERSPECTIVE_SAMPLE = 7,
+}}
+ENUM!{enum D3D10_SB_PRIMITIVE_TOPOLOGY {
+ D3D10_SB_PRIMITIVE_TOPOLOGY_UNDEFINED = 0,
+ D3D10_SB_PRIMITIVE_TOPOLOGY_POINTLIST = 1,
+ D3D10_SB_PRIMITIVE_TOPOLOGY_LINELIST = 2,
+ D3D10_SB_PRIMITIVE_TOPOLOGY_LINESTRIP = 3,
+ D3D10_SB_PRIMITIVE_TOPOLOGY_TRIANGLELIST = 4,
+ D3D10_SB_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP = 5,
+ D3D10_SB_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10,
+ D3D10_SB_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ = 11,
+ D3D10_SB_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ = 12,
+ D3D10_SB_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ = 13,
+}}
+ENUM!{enum D3D10_SB_PRIMITIVE {
+ D3D10_SB_PRIMITIVE_UNDEFINED = 0,
+ D3D10_SB_PRIMITIVE_POINT = 1,
+ D3D10_SB_PRIMITIVE_LINE = 2,
+ D3D10_SB_PRIMITIVE_TRIANGLE = 3,
+ D3D10_SB_PRIMITIVE_LINE_ADJ = 6,
+ D3D10_SB_PRIMITIVE_TRIANGLE_ADJ = 7,
+ D3D11_SB_PRIMITIVE_1_CONTROL_POINT_PATCH = 8,
+ D3D11_SB_PRIMITIVE_2_CONTROL_POINT_PATCH = 9,
+ D3D11_SB_PRIMITIVE_3_CONTROL_POINT_PATCH = 10,
+ D3D11_SB_PRIMITIVE_4_CONTROL_POINT_PATCH = 11,
+ D3D11_SB_PRIMITIVE_5_CONTROL_POINT_PATCH = 12,
+ D3D11_SB_PRIMITIVE_6_CONTROL_POINT_PATCH = 13,
+ D3D11_SB_PRIMITIVE_7_CONTROL_POINT_PATCH = 14,
+ D3D11_SB_PRIMITIVE_8_CONTROL_POINT_PATCH = 15,
+ D3D11_SB_PRIMITIVE_9_CONTROL_POINT_PATCH = 16,
+ D3D11_SB_PRIMITIVE_10_CONTROL_POINT_PATCH = 17,
+ D3D11_SB_PRIMITIVE_11_CONTROL_POINT_PATCH = 18,
+ D3D11_SB_PRIMITIVE_12_CONTROL_POINT_PATCH = 19,
+ D3D11_SB_PRIMITIVE_13_CONTROL_POINT_PATCH = 20,
+ D3D11_SB_PRIMITIVE_14_CONTROL_POINT_PATCH = 21,
+ D3D11_SB_PRIMITIVE_15_CONTROL_POINT_PATCH = 22,
+ D3D11_SB_PRIMITIVE_16_CONTROL_POINT_PATCH = 23,
+ D3D11_SB_PRIMITIVE_17_CONTROL_POINT_PATCH = 24,
+ D3D11_SB_PRIMITIVE_18_CONTROL_POINT_PATCH = 25,
+ D3D11_SB_PRIMITIVE_19_CONTROL_POINT_PATCH = 26,
+ D3D11_SB_PRIMITIVE_20_CONTROL_POINT_PATCH = 27,
+ D3D11_SB_PRIMITIVE_21_CONTROL_POINT_PATCH = 28,
+ D3D11_SB_PRIMITIVE_22_CONTROL_POINT_PATCH = 29,
+ D3D11_SB_PRIMITIVE_23_CONTROL_POINT_PATCH = 30,
+ D3D11_SB_PRIMITIVE_24_CONTROL_POINT_PATCH = 31,
+ D3D11_SB_PRIMITIVE_25_CONTROL_POINT_PATCH = 32,
+ D3D11_SB_PRIMITIVE_26_CONTROL_POINT_PATCH = 33,
+ D3D11_SB_PRIMITIVE_27_CONTROL_POINT_PATCH = 34,
+ D3D11_SB_PRIMITIVE_28_CONTROL_POINT_PATCH = 35,
+ D3D11_SB_PRIMITIVE_29_CONTROL_POINT_PATCH = 36,
+ D3D11_SB_PRIMITIVE_30_CONTROL_POINT_PATCH = 37,
+ D3D11_SB_PRIMITIVE_31_CONTROL_POINT_PATCH = 38,
+ D3D11_SB_PRIMITIVE_32_CONTROL_POINT_PATCH = 39,
+}}
+ENUM!{enum D3D10_SB_COMPONENT_MASK {
+ D3D10_SB_COMPONENT_MASK_X = 1,
+ D3D10_SB_COMPONENT_MASK_Y = 2,
+ D3D10_SB_COMPONENT_MASK_Z = 4,
+ D3D10_SB_COMPONENT_MASK_W = 8,
+ D3D10_SB_COMPONENT_MASK_R = 1,
+ D3D10_SB_COMPONENT_MASK_G = 2,
+ D3D10_SB_COMPONENT_MASK_B = 4,
+ D3D10_SB_COMPONENT_MASK_A = 8,
+ D3D10_SB_COMPONENT_MASK_ALL = 15,
+}}
+ENUM!{enum D3D10_SB_NAME {
+ D3D10_SB_NAME_UNDEFINED = 0,
+ D3D10_SB_NAME_POSITION = 1,
+ D3D10_SB_NAME_CLIP_DISTANCE = 2,
+ D3D10_SB_NAME_CULL_DISTANCE = 3,
+ D3D10_SB_NAME_RENDER_TARGET_ARRAY_INDEX = 4,
+ D3D10_SB_NAME_VIEWPORT_ARRAY_INDEX = 5,
+ D3D10_SB_NAME_VERTEX_ID = 6,
+ D3D10_SB_NAME_PRIMITIVE_ID = 7,
+ D3D10_SB_NAME_INSTANCE_ID = 8,
+ D3D10_SB_NAME_IS_FRONT_FACE = 9,
+ D3D10_SB_NAME_SAMPLE_INDEX = 10,
+ D3D11_SB_NAME_FINAL_QUAD_U_EQ_0_EDGE_TESSFACTOR = 11,
+ D3D11_SB_NAME_FINAL_QUAD_V_EQ_0_EDGE_TESSFACTOR = 12,
+ D3D11_SB_NAME_FINAL_QUAD_U_EQ_1_EDGE_TESSFACTOR = 13,
+ D3D11_SB_NAME_FINAL_QUAD_V_EQ_1_EDGE_TESSFACTOR = 14,
+ D3D11_SB_NAME_FINAL_QUAD_U_INSIDE_TESSFACTOR = 15,
+ D3D11_SB_NAME_FINAL_QUAD_V_INSIDE_TESSFACTOR = 16,
+ D3D11_SB_NAME_FINAL_TRI_U_EQ_0_EDGE_TESSFACTOR = 17,
+ D3D11_SB_NAME_FINAL_TRI_V_EQ_0_EDGE_TESSFACTOR = 18,
+ D3D11_SB_NAME_FINAL_TRI_W_EQ_0_EDGE_TESSFACTOR = 19,
+ D3D11_SB_NAME_FINAL_TRI_INSIDE_TESSFACTOR = 20,
+ D3D11_SB_NAME_FINAL_LINE_DETAIL_TESSFACTOR = 21,
+ D3D11_SB_NAME_FINAL_LINE_DENSITY_TESSFACTOR = 22,
+}}
+ENUM!{enum D3D10_SB_RESOURCE_DIMENSION {
+ D3D10_SB_RESOURCE_DIMENSION_UNKNOWN = 0,
+ D3D10_SB_RESOURCE_DIMENSION_BUFFER = 1,
+ D3D10_SB_RESOURCE_DIMENSION_TEXTURE1D = 2,
+ D3D10_SB_RESOURCE_DIMENSION_TEXTURE2D = 3,
+ D3D10_SB_RESOURCE_DIMENSION_TEXTURE2DMS = 4,
+ D3D10_SB_RESOURCE_DIMENSION_TEXTURE3D = 5,
+ D3D10_SB_RESOURCE_DIMENSION_TEXTURECUBE = 6,
+ D3D10_SB_RESOURCE_DIMENSION_TEXTURE1DARRAY = 7,
+ D3D10_SB_RESOURCE_DIMENSION_TEXTURE2DARRAY = 8,
+ D3D10_SB_RESOURCE_DIMENSION_TEXTURE2DMSARRAY = 9,
+ D3D10_SB_RESOURCE_DIMENSION_TEXTURECUBEARRAY = 10,
+ D3D11_SB_RESOURCE_DIMENSION_RAW_BUFFER = 11,
+ D3D11_SB_RESOURCE_DIMENSION_STRUCTURED_BUFFER = 12,
+}}
+ENUM!{enum D3D10_SB_RESOURCE_RETURN_TYPE {
+ D3D10_SB_RETURN_TYPE_UNORM = 1,
+ D3D10_SB_RETURN_TYPE_SNORM = 2,
+ D3D10_SB_RETURN_TYPE_SINT = 3,
+ D3D10_SB_RETURN_TYPE_UINT = 4,
+ D3D10_SB_RETURN_TYPE_FLOAT = 5,
+ D3D10_SB_RETURN_TYPE_MIXED = 6,
+ D3D11_SB_RETURN_TYPE_DOUBLE = 7,
+ D3D11_SB_RETURN_TYPE_CONTINUED = 8,
+ D3D11_SB_RETURN_TYPE_UNUSED = 9,
+}}
+ENUM!{enum D3D10_SB_REGISTER_COMPONENT_TYPE {
+ D3D10_SB_REGISTER_COMPONENT_UNKNOWN = 0,
+ D3D10_SB_REGISTER_COMPONENT_UINT32 = 1,
+ D3D10_SB_REGISTER_COMPONENT_SINT32 = 2,
+ D3D10_SB_REGISTER_COMPONENT_FLOAT32 = 3,
+}}
+ENUM!{enum D3D10_SB_INSTRUCTION_RETURN_TYPE {
+ D3D10_SB_INSTRUCTION_RETURN_FLOAT = 0,
+ D3D10_SB_INSTRUCTION_RETURN_UINT = 1,
+}}
+pub const D3D10_SB_INSTRUCTION_RETURN_TYPE_MASK: DWORD = 0x00001800;
+pub const D3D10_SB_INSTRUCTION_RETURN_TYPE_SHIFT: DWORD = 11;
+#[inline]
+pub fn DECODE_D3D10_SB_INSTRUCTION_RETURN_TYPE(
+ OpcodeToken0: DWORD,
+) -> D3D10_SB_INSTRUCTION_RETURN_TYPE {
+ ((OpcodeToken0 & D3D10_SB_INSTRUCTION_RETURN_TYPE_MASK)
+ >> D3D10_SB_INSTRUCTION_RETURN_TYPE_SHIFT) as D3D10_SB_INSTRUCTION_RETURN_TYPE
+}
+#[inline]
+pub fn ENCODE_D3D10_SB_INSTRUCTION_RETURN_TYPE(
+ ReturnType: D3D10_SB_INSTRUCTION_RETURN_TYPE,
+) -> DWORD {
+ (ReturnType << D3D10_SB_INSTRUCTION_RETURN_TYPE_SHIFT) & D3D10_SB_INSTRUCTION_RETURN_TYPE_MASK
+}
+pub const D3D11_SB_INTERFACE_INDEXED_BIT_MASK: DWORD = 0x00000800;
+pub const D3D11_SB_INTERFACE_INDEXED_BIT_SHIFT: DWORD = 11;
+pub const D3D11_SB_INTERFACE_TABLE_LENGTH_MASK: DWORD = 0x0000ffff;
+pub const D3D11_SB_INTERFACE_TABLE_LENGTH_SHIFT: DWORD = 0;
+pub const D3D11_SB_INTERFACE_ARRAY_LENGTH_MASK: DWORD = 0xffff0000;
+pub const D3D11_SB_INTERFACE_ARRAY_LENGTH_SHIFT: DWORD = 16;
+#[inline]
+pub fn DECODE_D3D11_SB_INTERFACE_INDEXED_BIT(OpcodeToken0: DWORD) -> DWORD {
+ if (OpcodeToken0 & D3D11_SB_INTERFACE_INDEXED_BIT_MASK) >> D3D11_SB_INTERFACE_INDEXED_BIT_SHIFT
+ != 0 { 1 } else { 0 }
+}
+#[inline]
+pub fn ENCODE_D3D11_SB_INTERFACE_INDEXED_BIT(IndexedBit: DWORD) -> DWORD {
+ (IndexedBit << D3D11_SB_INTERFACE_INDEXED_BIT_SHIFT) & D3D11_SB_INTERFACE_INDEXED_BIT_MASK
+}
+#[inline]
+pub fn DECODE_D3D11_SB_INTERFACE_TABLE_LENGTH(OpcodeToken0: DWORD) -> UINT {
+ ((OpcodeToken0 & D3D11_SB_INTERFACE_TABLE_LENGTH_MASK)
+ >> D3D11_SB_INTERFACE_TABLE_LENGTH_SHIFT) as UINT
+}
+#[inline]
+pub fn ENCODE_D3D11_SB_INTERFACE_TABLE_LENGTH(TableLength: DWORD) -> DWORD {
+ (TableLength << D3D11_SB_INTERFACE_TABLE_LENGTH_SHIFT) & D3D11_SB_INTERFACE_TABLE_LENGTH_MASK
+}
+#[inline]
+pub fn DECODE_D3D11_SB_INTERFACE_ARRAY_LENGTH(OpcodeToken0: DWORD) -> UINT {
+ ((OpcodeToken0 & D3D11_SB_INTERFACE_ARRAY_LENGTH_MASK)
+ >> D3D11_SB_INTERFACE_ARRAY_LENGTH_SHIFT) as UINT
+}
+#[inline]
+pub fn ENCODE_D3D11_SB_INTERFACE_ARRAY_LENGTH(ArrayLength: DWORD) -> DWORD {
+ (ArrayLength << D3D11_SB_INTERFACE_ARRAY_LENGTH_SHIFT) & D3D11_SB_INTERFACE_ARRAY_LENGTH_MASK
+}
+pub const D3D11_SB_GLOBALLY_COHERENT_ACCESS: DWORD = 0x00010000;
+pub const D3D11_SB_ACCESS_COHERENCY_MASK: DWORD = 0x00010000;
+#[inline]
+pub fn DECODE_D3D11_SB_ACCESS_COHERENCY_FLAGS(OperandToken0: DWORD) -> DWORD {
+ OperandToken0 & D3D11_SB_ACCESS_COHERENCY_MASK
+}
+#[inline]
+pub fn ENCODE_D3D11_SB_ACCESS_COHERENCY_FLAGS(Flags: DWORD) -> DWORD {
+ Flags & D3D11_SB_ACCESS_COHERENCY_MASK
+}
+pub const D3D11_SB_UAV_HAS_ORDER_PRESERVING_COUNTER: DWORD = 0x00800000;
+pub const D3D11_SB_UAV_FLAGS_MASK: DWORD = 0x00800000;
+#[inline]
+pub fn DECODE_D3D11_SB_UAV_FLAGS(OperandToken0: DWORD) -> DWORD {
+ OperandToken0 & D3D11_SB_UAV_FLAGS_MASK
+}
+#[inline]
+pub fn ENCODE_D3D11_SB_UAV_FLAGS(Flags: DWORD) -> DWORD {
+ Flags & D3D11_SB_UAV_FLAGS_MASK
+}
diff --git a/vendor/winapi/src/um/d3d12.rs b/vendor/winapi/src/um/d3d12.rs
new file mode 100644
index 000000000..56048d939
--- /dev/null
+++ b/vendor/winapi/src/um/d3d12.rs
@@ -0,0 +1,2722 @@
+// 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 ctypes::c_void;
+use shared::basetsd::{INT8, LONG_PTR, SIZE_T, UINT16, UINT64, UINT8};
+use shared::dxgiformat::DXGI_FORMAT;
+use shared::dxgitype::DXGI_SAMPLE_DESC;
+use shared::guiddef::{IID, REFGUID, REFIID};
+use shared::minwindef::{BOOL, BYTE, DWORD, FLOAT, INT, LPCVOID, UINT};
+use shared::windef::RECT;
+use um::d3dcommon::{D3D_FEATURE_LEVEL, D3D_PRIMITIVE, D3D_PRIMITIVE_TOPOLOGY, ID3DBlob};
+use um::minwinbase::SECURITY_ATTRIBUTES;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HANDLE, HRESULT, LPCSTR, LPCWSTR, LUID};
+pub const D3D12_16BIT_INDEX_STRIP_CUT_VALUE: UINT = 0xffff;
+pub const D3D12_32BIT_INDEX_STRIP_CUT_VALUE: UINT = 0xffffffff;
+pub const D3D12_8BIT_INDEX_STRIP_CUT_VALUE: UINT = 0xff;
+pub const D3D12_APPEND_ALIGNED_ELEMENT: UINT = 0xffffffff;
+pub const D3D12_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT: UINT = 9;
+pub const D3D12_CLIP_OR_CULL_DISTANCE_COUNT: UINT = 8;
+pub const D3D12_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT: UINT = 2;
+pub const D3D12_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT: UINT = 14;
+pub const D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS: UINT = 4;
+pub const D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT: UINT = 15;
+pub const D3D12_COMMONSHADER_CONSTANT_BUFFER_PARTIAL_UPDATE_EXTENTS_BYTE_ALIGNMENT: UINT = 16;
+pub const D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS: UINT = 4;
+pub const D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT: UINT = 15;
+pub const D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST: UINT = 1;
+pub const D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT: UINT = 64;
+pub const D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS: UINT = 4;
+pub const D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT: UINT = 1;
+pub const D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST: UINT = 1;
+pub const D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS: UINT = 1;
+pub const D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT: UINT = 128;
+pub const D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST: UINT = 1;
+pub const D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT: UINT = 128;
+pub const D3D12_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS: UINT = 1;
+pub const D3D12_COMMONSHADER_SAMPLER_REGISTER_COUNT: UINT = 16;
+pub const D3D12_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST: UINT = 1;
+pub const D3D12_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_COMMONSHADER_SAMPLER_SLOT_COUNT: UINT = 16;
+pub const D3D12_COMMONSHADER_SUBROUTINE_NESTING_LIMIT: UINT = 32;
+pub const D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENTS: UINT = 4;
+pub const D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_COMMONSHADER_TEMP_REGISTER_COUNT: UINT = 4096;
+pub const D3D12_COMMONSHADER_TEMP_REGISTER_READS_PER_INST: UINT = 3;
+pub const D3D12_COMMONSHADER_TEMP_REGISTER_READ_PORTS: UINT = 3;
+pub const D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX: INT = 10;
+pub const D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN: INT = -10;
+pub const D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE: INT = -8;
+pub const D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE: INT = 7;
+pub const D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT: UINT = 256;
+pub const D3D12_CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: UINT = 256;
+pub const D3D12_CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP: UINT = 64;
+pub const D3D12_CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: UINT = 240;
+pub const D3D12_CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP: UINT = 68;
+pub const D3D12_CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: UINT = 224;
+pub const D3D12_CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP: UINT = 72;
+pub const D3D12_CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: UINT = 208;
+pub const D3D12_CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP: UINT = 76;
+pub const D3D12_CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: UINT = 192;
+pub const D3D12_CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP: UINT = 84;
+pub const D3D12_CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: UINT = 176;
+pub const D3D12_CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP: UINT = 92;
+pub const D3D12_CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: UINT = 160;
+pub const D3D12_CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP: UINT = 100;
+pub const D3D12_CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: UINT = 144;
+pub const D3D12_CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP: UINT = 112;
+pub const D3D12_CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: UINT = 128;
+pub const D3D12_CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP: UINT = 128;
+pub const D3D12_CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: UINT = 112;
+pub const D3D12_CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP: UINT = 144;
+pub const D3D12_CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: UINT = 96;
+pub const D3D12_CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP: UINT = 168;
+pub const D3D12_CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: UINT = 80;
+pub const D3D12_CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP: UINT = 204;
+pub const D3D12_CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: UINT = 64;
+pub const D3D12_CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP: UINT = 256;
+pub const D3D12_CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: UINT = 48;
+pub const D3D12_CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP: UINT = 340;
+pub const D3D12_CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: UINT = 32;
+pub const D3D12_CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP: UINT = 512;
+pub const D3D12_CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD: UINT = 16;
+pub const D3D12_CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP: UINT = 768;
+pub const D3D12_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION: UINT = 1;
+pub const D3D12_CS_4_X_RAW_UAV_BYTE_ALIGNMENT: UINT = 256;
+pub const D3D12_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP: UINT = 768;
+pub const D3D12_CS_4_X_THREAD_GROUP_MAX_X: UINT = 768;
+pub const D3D12_CS_4_X_THREAD_GROUP_MAX_Y: UINT = 768;
+pub const D3D12_CS_4_X_UAV_REGISTER_COUNT: UINT = 1;
+pub const D3D12_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION: UINT = 65535;
+pub const D3D12_CS_TGSM_REGISTER_COUNT: UINT = 8192;
+pub const D3D12_CS_TGSM_REGISTER_READS_PER_INST: UINT = 1;
+pub const D3D12_CS_TGSM_RESOURCE_REGISTER_COMPONENTS: UINT = 1;
+pub const D3D12_CS_TGSM_RESOURCE_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_CS_THREADGROUPID_REGISTER_COMPONENTS: UINT = 3;
+pub const D3D12_CS_THREADGROUPID_REGISTER_COUNT: UINT = 1;
+pub const D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COMPONENTS: UINT = 1;
+pub const D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COUNT: UINT = 1;
+pub const D3D12_CS_THREADIDINGROUP_REGISTER_COMPONENTS: UINT = 3;
+pub const D3D12_CS_THREADIDINGROUP_REGISTER_COUNT: UINT = 1;
+pub const D3D12_CS_THREADID_REGISTER_COMPONENTS: UINT = 3;
+pub const D3D12_CS_THREADID_REGISTER_COUNT: UINT = 1;
+pub const D3D12_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP: UINT = 1024;
+pub const D3D12_CS_THREAD_GROUP_MAX_X: UINT = 1024;
+pub const D3D12_CS_THREAD_GROUP_MAX_Y: UINT = 1024;
+pub const D3D12_CS_THREAD_GROUP_MAX_Z: UINT = 64;
+pub const D3D12_CS_THREAD_GROUP_MIN_X: UINT = 1;
+pub const D3D12_CS_THREAD_GROUP_MIN_Y: UINT = 1;
+pub const D3D12_CS_THREAD_GROUP_MIN_Z: UINT = 1;
+pub const D3D12_CS_THREAD_LOCAL_TEMP_REGISTER_POOL: UINT = 16384;
+pub const D3D12_DEFAULT_BLEND_FACTOR_ALPHA: FLOAT = 1.0;
+pub const D3D12_DEFAULT_BLEND_FACTOR_BLUE: FLOAT = 1.0;
+pub const D3D12_DEFAULT_BLEND_FACTOR_GREEN: FLOAT = 1.0;
+pub const D3D12_DEFAULT_BLEND_FACTOR_RED: FLOAT = 1.0;
+pub const D3D12_DEFAULT_BORDER_COLOR_COMPONENT: FLOAT = 0.0;
+pub const D3D12_DEFAULT_DEPTH_BIAS: UINT = 0;
+pub const D3D12_DEFAULT_DEPTH_BIAS_CLAMP: FLOAT = 0.0;
+pub const D3D12_DEFAULT_MAX_ANISOTROPY: UINT = 16;
+pub const D3D12_DEFAULT_MIP_LOD_BIAS: FLOAT = 0.0;
+pub const D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT: UINT = 4194304;
+pub const D3D12_DEFAULT_RENDER_TARGET_ARRAY_INDEX: UINT = 0;
+pub const D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT: UINT = 65536;
+pub const D3D12_DEFAULT_SAMPLE_MASK: UINT = 0xffffffff;
+pub const D3D12_DEFAULT_SCISSOR_ENDX: UINT = 0;
+pub const D3D12_DEFAULT_SCISSOR_ENDY: UINT = 0;
+pub const D3D12_DEFAULT_SCISSOR_STARTX: UINT = 0;
+pub const D3D12_DEFAULT_SCISSOR_STARTY: UINT = 0;
+pub const D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS: FLOAT = 0.0;
+pub const D3D12_DEFAULT_STENCIL_READ_MASK: UINT = 0xff;
+pub const D3D12_DEFAULT_STENCIL_REFERENCE: UINT = 0;
+pub const D3D12_DEFAULT_STENCIL_WRITE_MASK: UINT = 0xff;
+pub const D3D12_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX: UINT = 0;
+pub const D3D12_DEFAULT_VIEWPORT_HEIGHT: UINT = 0;
+pub const D3D12_DEFAULT_VIEWPORT_MAX_DEPTH: FLOAT = 0.0;
+pub const D3D12_DEFAULT_VIEWPORT_MIN_DEPTH: FLOAT = 0.0;
+pub const D3D12_DEFAULT_VIEWPORT_TOPLEFTX: UINT = 0;
+pub const D3D12_DEFAULT_VIEWPORT_TOPLEFTY: UINT = 0;
+pub const D3D12_DEFAULT_VIEWPORT_WIDTH: UINT = 0;
+pub const D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND: UINT = 0xffffffff;
+pub const D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_END: UINT = 0xfffffff7;
+pub const D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_START: UINT = 0xfffffff0;
+pub const D3D12_DS_INPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS: UINT = 3968;
+pub const D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENTS: UINT = 4;
+pub const D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COUNT: UINT = 32;
+pub const D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READS_PER_INST: UINT = 2;
+pub const D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENTS: UINT = 3;
+pub const D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COUNT: UINT = 1;
+pub const D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READS_PER_INST: UINT = 2;
+pub const D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENTS: UINT = 4;
+pub const D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COUNT: UINT = 32;
+pub const D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST: UINT = 2;
+pub const D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS: UINT = 1;
+pub const D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COUNT: UINT = 1;
+pub const D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST: UINT = 2;
+pub const D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_DS_OUTPUT_REGISTER_COMPONENTS: UINT = 4;
+pub const D3D12_DS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_DS_OUTPUT_REGISTER_COUNT: UINT = 32;
+pub const D3D12_FLOAT16_FUSED_TOLERANCE_IN_ULP: FLOAT = 0.6;
+pub const D3D12_FLOAT32_MAX: FLOAT = 3.402823466e+38;
+pub const D3D12_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP: FLOAT = 0.6;
+pub const D3D12_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR: FLOAT = 2.4;
+pub const D3D12_FLOAT_TO_SRGB_EXPONENT_NUMERATOR: FLOAT = 1.0;
+pub const D3D12_FLOAT_TO_SRGB_OFFSET: FLOAT = 0.055;
+pub const D3D12_FLOAT_TO_SRGB_SCALE_1: FLOAT = 12.92;
+pub const D3D12_FLOAT_TO_SRGB_SCALE_2: FLOAT = 1.055;
+pub const D3D12_FLOAT_TO_SRGB_THRESHOLD: FLOAT = 0.0031308;
+pub const D3D12_FTOI_INSTRUCTION_MAX_INPUT: FLOAT = 2147483647.999;
+pub const D3D12_FTOI_INSTRUCTION_MIN_INPUT: FLOAT = -2147483648.999;
+pub const D3D12_FTOU_INSTRUCTION_MAX_INPUT: FLOAT = 4294967295.999;
+pub const D3D12_FTOU_INSTRUCTION_MIN_INPUT: FLOAT = 0.0;
+pub const D3D12_GS_INPUT_INSTANCE_ID_READS_PER_INST: UINT = 2;
+pub const D3D12_GS_INPUT_INSTANCE_ID_READ_PORTS: UINT = 1;
+pub const D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENTS: UINT = 1;
+pub const D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COUNT: UINT = 1;
+pub const D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS: UINT = 1;
+pub const D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_GS_INPUT_PRIM_CONST_REGISTER_COUNT: UINT = 1;
+pub const D3D12_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST: UINT = 2;
+pub const D3D12_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_GS_INPUT_REGISTER_COMPONENTS: UINT = 4;
+pub const D3D12_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_GS_INPUT_REGISTER_COUNT: UINT = 32;
+pub const D3D12_GS_INPUT_REGISTER_READS_PER_INST: UINT = 2;
+pub const D3D12_GS_INPUT_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_GS_INPUT_REGISTER_VERTICES: UINT = 32;
+pub const D3D12_GS_MAX_INSTANCE_COUNT: UINT = 32;
+pub const D3D12_GS_MAX_OUTPUT_VERTEX_COUNT_ACROSS_INSTANCES: UINT = 1024;
+pub const D3D12_GS_OUTPUT_ELEMENTS: UINT = 32;
+pub const D3D12_GS_OUTPUT_REGISTER_COMPONENTS: UINT = 4;
+pub const D3D12_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_GS_OUTPUT_REGISTER_COUNT: UINT = 32;
+pub const D3D12_HS_CONTROL_POINT_PHASE_INPUT_REGISTER_COUNT: UINT = 32;
+pub const D3D12_HS_CONTROL_POINT_PHASE_OUTPUT_REGISTER_COUNT: UINT = 32;
+pub const D3D12_HS_CONTROL_POINT_REGISTER_COMPONENTS: UINT = 4;
+pub const D3D12_HS_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_HS_CONTROL_POINT_REGISTER_READS_PER_INST: UINT = 2;
+pub const D3D12_HS_CONTROL_POINT_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_HS_FORK_PHASE_INSTANCE_COUNT_UPPER_BOUND: UINT = 0xffffffff;
+pub const D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENTS: UINT = 1;
+pub const D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COUNT: UINT = 1;
+pub const D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READS_PER_INST: UINT = 2;
+pub const D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENTS: UINT = 1;
+pub const D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COUNT: UINT = 1;
+pub const D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READS_PER_INST: UINT = 2;
+pub const D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS: UINT = 1;
+pub const D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COUNT: UINT = 1;
+pub const D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST: UINT = 2;
+pub const D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_HS_JOIN_PHASE_INSTANCE_COUNT_UPPER_BOUND: UINT = 0xffffffff;
+pub const D3D12_HS_MAXTESSFACTOR_LOWER_BOUND: FLOAT = 1.0;
+pub const D3D12_HS_MAXTESSFACTOR_UPPER_BOUND: FLOAT = 64.0;
+pub const D3D12_HS_OUTPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS: UINT = 3968;
+pub const D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENTS: UINT = 1;
+pub const D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COUNT: UINT = 1;
+pub const D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READS_PER_INST: UINT = 2;
+pub const D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENTS: UINT = 4;
+pub const D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COUNT: UINT = 32;
+pub const D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST: UINT = 2;
+pub const D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_SCALAR_COMPONENTS: UINT = 128;
+pub const D3D12_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES: UINT = 0;
+pub const D3D12_IA_DEFAULT_PRIMITIVE_TOPOLOGY: UINT = 0;
+pub const D3D12_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES: UINT = 0;
+pub const D3D12_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT: UINT = 1;
+pub const D3D12_IA_INSTANCE_ID_BIT_COUNT: UINT = 32;
+pub const D3D12_IA_INTEGER_ARITHMETIC_BIT_COUNT: UINT = 32;
+pub const D3D12_IA_PATCH_MAX_CONTROL_POINT_COUNT: UINT = 32;
+pub const D3D12_IA_PRIMITIVE_ID_BIT_COUNT: UINT = 32;
+pub const D3D12_IA_VERTEX_ID_BIT_COUNT: UINT = 32;
+pub const D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT: UINT = 32;
+pub const D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS: UINT = 128;
+pub const D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT: UINT = 32;
+pub const D3D12_INTEGER_DIVIDE_BY_ZERO_QUOTIENT: UINT = 0xffffffff;
+pub const D3D12_INTEGER_DIVIDE_BY_ZERO_REMAINDER: UINT = 0xffffffff;
+pub const D3D12_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL: UINT = 0xffffffff;
+pub const D3D12_KEEP_UNORDERED_ACCESS_VIEWS: UINT = 0xffffffff;
+pub const D3D12_LINEAR_GAMMA: FLOAT = 1.0;
+pub const D3D12_MAJOR_VERSION: UINT = 12;
+pub const D3D12_MAX_BORDER_COLOR_COMPONENT: FLOAT = 1.0;
+pub const D3D12_MAX_DEPTH: FLOAT = 1.0;
+pub const D3D12_MAX_LIVE_STATIC_SAMPLERS: UINT = 2032;
+pub const D3D12_MAX_MAXANISOTROPY: UINT = 16;
+pub const D3D12_MAX_MULTISAMPLE_SAMPLE_COUNT: UINT = 32;
+pub const D3D12_MAX_POSITION_VALUE: FLOAT = 3.402823466e+34;
+pub const D3D12_MAX_ROOT_COST: UINT = 64;
+pub const D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_1: UINT = 1000000;
+pub const D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_2: UINT = 1000000;
+pub const D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE: UINT = 2048;
+pub const D3D12_MAX_TEXTURE_DIMENSION_2_TO_EXP: UINT = 17;
+pub const D3D12_MINOR_VERSION: UINT = 0;
+pub const D3D12_MIN_BORDER_COLOR_COMPONENT: FLOAT = 0.0;
+pub const D3D12_MIN_DEPTH: FLOAT = 0.0;
+pub const D3D12_MIN_MAXANISOTROPY: UINT = 0;
+pub const D3D12_MIP_LOD_BIAS_MAX: FLOAT = 15.99;
+pub const D3D12_MIP_LOD_BIAS_MIN: FLOAT = -16.0;
+pub const D3D12_MIP_LOD_FRACTIONAL_BIT_COUNT: UINT = 8;
+pub const D3D12_MIP_LOD_RANGE_BIT_COUNT: UINT = 8;
+pub const D3D12_MULTISAMPLE_ANTIALIAS_LINE_WIDTH: FLOAT = 1.4;
+pub const D3D12_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT: UINT = 0;
+pub const D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_END: UINT = 0xffffffff;
+pub const D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_START: UINT = 0xfffffff8;
+pub const D3D12_PACKED_TILE: UINT = 0xffffffff;
+pub const D3D12_PIXEL_ADDRESS_RANGE_BIT_COUNT: UINT = 15;
+pub const D3D12_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT: UINT = 16;
+pub const D3D12_PS_CS_UAV_REGISTER_COMPONENTS: UINT = 1;
+pub const D3D12_PS_CS_UAV_REGISTER_COUNT: UINT = 8;
+pub const D3D12_PS_CS_UAV_REGISTER_READS_PER_INST: UINT = 1;
+pub const D3D12_PS_CS_UAV_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_PS_FRONTFACING_DEFAULT_VALUE: UINT = 0xffffffff;
+pub const D3D12_PS_FRONTFACING_FALSE_VALUE: UINT = 0;
+pub const D3D12_PS_FRONTFACING_TRUE_VALUE: UINT = 0xffffffff;
+pub const D3D12_PS_INPUT_REGISTER_COMPONENTS: UINT = 4;
+pub const D3D12_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_PS_INPUT_REGISTER_COUNT: UINT = 32;
+pub const D3D12_PS_INPUT_REGISTER_READS_PER_INST: UINT = 2;
+pub const D3D12_PS_INPUT_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT: FLOAT = 0.0;
+pub const D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS: UINT = 1;
+pub const D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_PS_OUTPUT_DEPTH_REGISTER_COUNT: UINT = 1;
+pub const D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENTS: UINT = 1;
+pub const D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_PS_OUTPUT_MASK_REGISTER_COUNT: UINT = 1;
+pub const D3D12_PS_OUTPUT_REGISTER_COMPONENTS: UINT = 4;
+pub const D3D12_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_PS_OUTPUT_REGISTER_COUNT: UINT = 8;
+pub const D3D12_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT: FLOAT = 0.5;
+pub const D3D12_RAW_UAV_SRV_BYTE_ALIGNMENT: UINT = 16;
+pub const D3D12_REQ_BLEND_OBJECT_COUNT_PER_DEVICE: UINT = 4096;
+pub const D3D12_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP: UINT = 27;
+pub const D3D12_REQ_CONSTANT_BUFFER_ELEMENT_COUNT: UINT = 4096;
+pub const D3D12_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE: UINT = 4096;
+pub const D3D12_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP: UINT = 32;
+pub const D3D12_REQ_DRAW_VERTEX_COUNT_2_TO_EXP: UINT = 32;
+pub const D3D12_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION: UINT = 16384;
+pub const D3D12_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT: UINT = 1024;
+pub const D3D12_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT: UINT = 4096;
+pub const D3D12_REQ_MAXANISOTROPY: UINT = 16;
+pub const D3D12_REQ_MIP_LEVELS: UINT = 15;
+pub const D3D12_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES: UINT = 2048;
+pub const D3D12_REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE: UINT = 4096;
+pub const D3D12_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH: UINT = 16384;
+pub const D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM: UINT = 128;
+pub const D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_B_TERM: FLOAT = 0.25;
+pub const D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_C_TERM: UINT = 2048;
+pub const D3D12_REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP: UINT = 20;
+pub const D3D12_REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE: UINT = 4096;
+pub const D3D12_REQ_SUBRESOURCES: UINT = 30720;
+pub const D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION: UINT = 2048;
+pub const D3D12_REQ_TEXTURE1D_U_DIMENSION: UINT = 16384;
+pub const D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION: UINT = 2048;
+pub const D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION: UINT = 16384;
+pub const D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION: UINT = 2048;
+pub const D3D12_REQ_TEXTURECUBE_DIMENSION: UINT = 16384;
+pub const D3D12_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL: UINT = 0;
+pub const D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES: UINT = 0xffffffff;
+pub const D3D12_SHADER_MAJOR_VERSION: UINT = 5;
+pub const D3D12_SHADER_MAX_INSTANCES: UINT = 65535;
+pub const D3D12_SHADER_MAX_INTERFACES: UINT = 253;
+pub const D3D12_SHADER_MAX_INTERFACE_CALL_SITES: UINT = 4096;
+pub const D3D12_SHADER_MAX_TYPES: UINT = 65535;
+pub const D3D12_SHADER_MINOR_VERSION: UINT = 1;
+pub const D3D12_SHIFT_INSTRUCTION_PAD_VALUE: UINT = 0;
+pub const D3D12_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT: UINT = 5;
+pub const D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT: UINT = 8;
+pub const D3D12_SMALL_MSAA_RESOURCE_PLACEMENT_ALIGNMENT: UINT = 65536;
+pub const D3D12_SMALL_RESOURCE_PLACEMENT_ALIGNMENT: UINT = 4096;
+pub const D3D12_SO_BUFFER_MAX_STRIDE_IN_BYTES: UINT = 2048;
+pub const D3D12_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES: UINT = 512;
+pub const D3D12_SO_BUFFER_SLOT_COUNT: UINT = 4;
+pub const D3D12_SO_DDI_REGISTER_INDEX_DENOTING_GAP: UINT = 0xffffffff;
+pub const D3D12_SO_NO_RASTERIZED_STREAM: UINT = 0xffffffff;
+pub const D3D12_SO_OUTPUT_COMPONENT_COUNT: UINT = 128;
+pub const D3D12_SO_STREAM_COUNT: UINT = 4;
+pub const D3D12_SPEC_DATE_DAY: UINT = 14;
+pub const D3D12_SPEC_DATE_MONTH: UINT = 11;
+pub const D3D12_SPEC_DATE_YEAR: UINT = 2014;
+pub const D3D12_SPEC_VERSION: FLOAT = 1.16;
+pub const D3D12_SRGB_GAMMA: FLOAT = 2.2;
+pub const D3D12_SRGB_TO_FLOAT_DENOMINATOR_1: FLOAT = 12.92;
+pub const D3D12_SRGB_TO_FLOAT_DENOMINATOR_2: FLOAT = 1.055;
+pub const D3D12_SRGB_TO_FLOAT_EXPONENT: FLOAT = 2.4;
+pub const D3D12_SRGB_TO_FLOAT_OFFSET: FLOAT = 0.055;
+pub const D3D12_SRGB_TO_FLOAT_THRESHOLD: FLOAT = 0.04045;
+pub const D3D12_SRGB_TO_FLOAT_TOLERANCE_IN_ULP: FLOAT = 0.5;
+pub const D3D12_STANDARD_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_STANDARD_COMPONENT_BIT_COUNT_DOUBLED: UINT = 64;
+pub const D3D12_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE: UINT = 4;
+pub const D3D12_STANDARD_PIXEL_COMPONENT_COUNT: UINT = 128;
+pub const D3D12_STANDARD_PIXEL_ELEMENT_COUNT: UINT = 32;
+pub const D3D12_STANDARD_VECTOR_SIZE: UINT = 4;
+pub const D3D12_STANDARD_VERTEX_ELEMENT_COUNT: UINT = 32;
+pub const D3D12_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT: UINT = 64;
+pub const D3D12_SUBPIXEL_FRACTIONAL_BIT_COUNT: UINT = 8;
+pub const D3D12_SUBTEXEL_FRACTIONAL_BIT_COUNT: UINT = 8;
+pub const D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_END: UINT = 0xffffffff;
+pub const D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_START: UINT = 0xfffffff0;
+pub const D3D12_TESSELLATOR_MAX_EVEN_TESSELLATION_FACTOR: UINT = 64;
+pub const D3D12_TESSELLATOR_MAX_ISOLINE_DENSITY_TESSELLATION_FACTOR: UINT = 64;
+pub const D3D12_TESSELLATOR_MAX_ODD_TESSELLATION_FACTOR: UINT = 63;
+pub const D3D12_TESSELLATOR_MAX_TESSELLATION_FACTOR: UINT = 64;
+pub const D3D12_TESSELLATOR_MIN_EVEN_TESSELLATION_FACTOR: UINT = 2;
+pub const D3D12_TESSELLATOR_MIN_ISOLINE_DENSITY_TESSELLATION_FACTOR: UINT = 1;
+pub const D3D12_TESSELLATOR_MIN_ODD_TESSELLATION_FACTOR: UINT = 1;
+pub const D3D12_TEXEL_ADDRESS_RANGE_BIT_COUNT: UINT = 16;
+pub const D3D12_TEXTURE_DATA_PITCH_ALIGNMENT: UINT = 256;
+pub const D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT: UINT = 512;
+pub const D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES: UINT = 65536;
+pub const D3D12_UAV_COUNTER_PLACEMENT_ALIGNMENT: UINT = 4096;
+pub const D3D12_UAV_SLOT_COUNT: UINT = 64;
+pub const D3D12_UNBOUND_MEMORY_ACCESS_RESULT: UINT = 0;
+pub const D3D12_VIEWPORT_AND_SCISSORRECT_MAX_INDEX: UINT = 15;
+pub const D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE: UINT = 16;
+pub const D3D12_VIEWPORT_BOUNDS_MAX: INT = 32767;
+pub const D3D12_VIEWPORT_BOUNDS_MIN: INT = -32768;
+pub const D3D12_VS_INPUT_REGISTER_COMPONENTS: UINT = 4;
+pub const D3D12_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_VS_INPUT_REGISTER_COUNT: UINT = 32;
+pub const D3D12_VS_INPUT_REGISTER_READS_PER_INST: UINT = 2;
+pub const D3D12_VS_INPUT_REGISTER_READ_PORTS: UINT = 1;
+pub const D3D12_VS_OUTPUT_REGISTER_COMPONENTS: UINT = 4;
+pub const D3D12_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT: UINT = 32;
+pub const D3D12_VS_OUTPUT_REGISTER_COUNT: UINT = 32;
+pub const D3D12_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT: UINT = 10;
+pub const D3D12_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP: UINT = 25;
+pub const D3D12_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP: UINT = 25;
+pub type D3D12_GPU_VIRTUAL_ADDRESS = UINT64;
+ENUM!{enum D3D12_COMMAND_LIST_TYPE {
+ D3D12_COMMAND_LIST_TYPE_DIRECT = 0,
+ D3D12_COMMAND_LIST_TYPE_BUNDLE = 1,
+ D3D12_COMMAND_LIST_TYPE_COMPUTE = 2,
+ D3D12_COMMAND_LIST_TYPE_COPY = 3,
+}}
+ENUM!{enum D3D12_COMMAND_QUEUE_FLAGS {
+ D3D12_COMMAND_QUEUE_FLAG_NONE = 0x0,
+ D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT = 0x1,
+}}
+ENUM!{enum D3D12_COMMAND_QUEUE_PRIORITY {
+ D3D12_COMMAND_QUEUE_PRIORITY_NORMAL = 0,
+ D3D12_COMMAND_QUEUE_PRIORITY_HIGH = 100,
+ D3D12_COMMAND_QUEUE_PRIORITY_GLOBAL_REALTIME = 10000,
+}}
+STRUCT!{struct D3D12_COMMAND_QUEUE_DESC {
+ Type: D3D12_COMMAND_LIST_TYPE,
+ Priority: INT,
+ Flags: D3D12_COMMAND_QUEUE_FLAGS,
+ NodeMask: UINT,
+}}
+ENUM!{enum D3D12_PRIMITIVE_TOPOLOGY_TYPE {
+ D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED = 0,
+ D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT = 1,
+ D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE = 2,
+ D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE = 3,
+ D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH = 4,
+}}
+ENUM!{enum D3D12_INPUT_CLASSIFICATION {
+ D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA = 0,
+ D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA = 1,
+}}
+STRUCT!{struct D3D12_INPUT_ELEMENT_DESC {
+ SemanticName: LPCSTR,
+ SemanticIndex: UINT,
+ Format: DXGI_FORMAT,
+ InputSlot: UINT,
+ AlignedByteOffset: UINT,
+ InputSlotClass: D3D12_INPUT_CLASSIFICATION,
+ InstanceDataStepRate: UINT,
+}}
+ENUM!{enum D3D12_FILL_MODE {
+ D3D12_FILL_MODE_WIREFRAME = 2,
+ D3D12_FILL_MODE_SOLID = 3,
+}}
+pub type D3D12_PRIMITIVE_TOPOLOGY = D3D_PRIMITIVE_TOPOLOGY;
+pub type D3D12_PRIMITIVE = D3D_PRIMITIVE;
+ENUM!{enum D3D12_CULL_MODE {
+ D3D12_CULL_MODE_NONE = 1,
+ D3D12_CULL_MODE_FRONT = 2,
+ D3D12_CULL_MODE_BACK = 3,
+}}
+STRUCT!{struct D3D12_SO_DECLARATION_ENTRY {
+ Stream: UINT,
+ SemanticName: LPCSTR,
+ SemanticIndex: UINT,
+ StartComponent: BYTE,
+ ComponentCount: BYTE,
+ OutputSlot: BYTE,
+}}
+STRUCT!{struct D3D12_VIEWPORT {
+ TopLeftX: FLOAT,
+ TopLeftY: FLOAT,
+ Width: FLOAT,
+ Height: FLOAT,
+ MinDepth: FLOAT,
+ MaxDepth: FLOAT,
+}}
+pub type D3D12_RECT = RECT;
+STRUCT!{struct D3D12_BOX {
+ left: UINT,
+ top: UINT,
+ front: UINT,
+ right: UINT,
+ bottom: UINT,
+ back: UINT,
+}}
+ENUM!{enum D3D12_COMPARISON_FUNC {
+ D3D12_COMPARISON_FUNC_NEVER = 1,
+ D3D12_COMPARISON_FUNC_LESS = 2,
+ D3D12_COMPARISON_FUNC_EQUAL = 3,
+ D3D12_COMPARISON_FUNC_LESS_EQUAL = 4,
+ D3D12_COMPARISON_FUNC_GREATER = 5,
+ D3D12_COMPARISON_FUNC_NOT_EQUAL = 6,
+ D3D12_COMPARISON_FUNC_GREATER_EQUAL = 7,
+ D3D12_COMPARISON_FUNC_ALWAYS = 8,
+}}
+ENUM!{enum D3D12_DEPTH_WRITE_MASK {
+ D3D12_DEPTH_WRITE_MASK_ZERO = 0,
+ D3D12_DEPTH_WRITE_MASK_ALL = 1,
+}}
+ENUM!{enum D3D12_STENCIL_OP {
+ D3D12_STENCIL_OP_KEEP = 1,
+ D3D12_STENCIL_OP_ZERO = 2,
+ D3D12_STENCIL_OP_REPLACE = 3,
+ D3D12_STENCIL_OP_INCR_SAT = 4,
+ D3D12_STENCIL_OP_DECR_SAT = 5,
+ D3D12_STENCIL_OP_INVERT = 6,
+ D3D12_STENCIL_OP_INCR = 7,
+ D3D12_STENCIL_OP_DECR = 8,
+}}
+STRUCT!{struct D3D12_DEPTH_STENCILOP_DESC {
+ StencilFailOp: D3D12_STENCIL_OP,
+ StencilDepthFailOp: D3D12_STENCIL_OP,
+ StencilPassOp: D3D12_STENCIL_OP,
+ StencilFunc: D3D12_COMPARISON_FUNC,
+}}
+STRUCT!{struct D3D12_DEPTH_STENCIL_DESC {
+ DepthEnable: BOOL,
+ DepthWriteMask: D3D12_DEPTH_WRITE_MASK,
+ DepthFunc: D3D12_COMPARISON_FUNC,
+ StencilEnable: BOOL,
+ StencilReadMask: UINT8,
+ StencilWriteMask: UINT8,
+ FrontFace: D3D12_DEPTH_STENCILOP_DESC,
+ BackFace: D3D12_DEPTH_STENCILOP_DESC,
+}}
+STRUCT!{struct D3D12_DEPTH_STENCIL_DESC1 {
+ DepthEnable: BOOL,
+ DepthWriteMask: D3D12_DEPTH_WRITE_MASK,
+ DepthFunc: D3D12_COMPARISON_FUNC,
+ StencilEnable: BOOL,
+ StencilReadMask: UINT8,
+ StencilWriteMask: UINT8,
+ FrontFace: D3D12_DEPTH_STENCILOP_DESC,
+ BackFace: D3D12_DEPTH_STENCILOP_DESC,
+ DepthBoundsTestEnable: BOOL,
+}}
+ENUM!{enum D3D12_BLEND {
+ D3D12_BLEND_ZERO = 1,
+ D3D12_BLEND_ONE = 2,
+ D3D12_BLEND_SRC_COLOR = 3,
+ D3D12_BLEND_INV_SRC_COLOR = 4,
+ D3D12_BLEND_SRC_ALPHA = 5,
+ D3D12_BLEND_INV_SRC_ALPHA = 6,
+ D3D12_BLEND_DEST_ALPHA = 7,
+ D3D12_BLEND_INV_DEST_ALPHA = 8,
+ D3D12_BLEND_DEST_COLOR = 9,
+ D3D12_BLEND_INV_DEST_COLOR = 10,
+ D3D12_BLEND_SRC_ALPHA_SAT = 11,
+ D3D12_BLEND_BLEND_FACTOR = 14,
+ D3D12_BLEND_INV_BLEND_FACTOR = 15,
+ D3D12_BLEND_SRC1_COLOR = 16,
+ D3D12_BLEND_INV_SRC1_COLOR = 17,
+ D3D12_BLEND_SRC1_ALPHA = 18,
+ D3D12_BLEND_INV_SRC1_ALPHA = 19,
+}}
+ENUM!{enum D3D12_BLEND_OP {
+ D3D12_BLEND_OP_ADD = 1,
+ D3D12_BLEND_OP_SUBTRACT = 2,
+ D3D12_BLEND_OP_REV_SUBTRACT = 3,
+ D3D12_BLEND_OP_MIN = 4,
+ D3D12_BLEND_OP_MAX = 5,
+}}
+ENUM!{enum D3D12_COLOR_WRITE_ENABLE {
+ D3D12_COLOR_WRITE_ENABLE_RED = 1,
+ D3D12_COLOR_WRITE_ENABLE_GREEN = 2,
+ D3D12_COLOR_WRITE_ENABLE_BLUE = 4,
+ D3D12_COLOR_WRITE_ENABLE_ALPHA = 8,
+ D3D12_COLOR_WRITE_ENABLE_ALL = D3D12_COLOR_WRITE_ENABLE_RED | D3D12_COLOR_WRITE_ENABLE_GREEN
+ | D3D12_COLOR_WRITE_ENABLE_BLUE | D3D12_COLOR_WRITE_ENABLE_ALPHA,
+}}
+ENUM!{enum D3D12_LOGIC_OP {
+ D3D12_LOGIC_OP_CLEAR = 0,
+ D3D12_LOGIC_OP_SET = 1,
+ D3D12_LOGIC_OP_COPY = 2,
+ D3D12_LOGIC_OP_COPY_INVERTED = 3,
+ D3D12_LOGIC_OP_NOOP = 4,
+ D3D12_LOGIC_OP_INVERT = 5,
+ D3D12_LOGIC_OP_AND = 6,
+ D3D12_LOGIC_OP_NAND = 7,
+ D3D12_LOGIC_OP_OR = 8,
+ D3D12_LOGIC_OP_NOR = 9,
+ D3D12_LOGIC_OP_XOR = 10,
+ D3D12_LOGIC_OP_EQUIV = 11,
+ D3D12_LOGIC_OP_AND_REVERSE = 12,
+ D3D12_LOGIC_OP_AND_INVERTED = 13,
+ D3D12_LOGIC_OP_OR_REVERSE = 14,
+ D3D12_LOGIC_OP_OR_INVERTED = 15,
+}}
+STRUCT!{struct D3D12_RENDER_TARGET_BLEND_DESC {
+ BlendEnable: BOOL,
+ LogicOpEnable: BOOL,
+ SrcBlend: D3D12_BLEND,
+ DestBlend: D3D12_BLEND,
+ BlendOp: D3D12_BLEND_OP,
+ SrcBlendAlpha: D3D12_BLEND,
+ DestBlendAlpha: D3D12_BLEND,
+ BlendOpAlpha: D3D12_BLEND_OP,
+ LogicOp: D3D12_LOGIC_OP,
+ RenderTargetWriteMask: UINT8,
+}}
+STRUCT!{struct D3D12_BLEND_DESC {
+ AlphaToCoverageEnable: BOOL,
+ IndependentBlendEnable: BOOL,
+ RenderTarget: [D3D12_RENDER_TARGET_BLEND_DESC; 8],
+}}
+ENUM!{enum D3D12_CONSERVATIVE_RASTERIZATION_MODE {
+ D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF = 0,
+ D3D12_CONSERVATIVE_RASTERIZATION_MODE_ON = 1,
+}}
+STRUCT!{struct D3D12_RASTERIZER_DESC {
+ FillMode: D3D12_FILL_MODE,
+ CullMode: D3D12_CULL_MODE,
+ FrontCounterClockwise: BOOL,
+ DepthBias: INT,
+ DepthBiasClamp: FLOAT,
+ SlopeScaledDepthBias: FLOAT,
+ DepthClipEnable: BOOL,
+ MultisampleEnable: BOOL,
+ AntialiasedLineEnable: BOOL,
+ ForcedSampleCount: UINT,
+ ConservativeRaster: D3D12_CONSERVATIVE_RASTERIZATION_MODE,
+}}
+RIDL!{#[uuid(0xc54a6b66, 0x72df, 0x4ee8, 0x8b, 0xe5, 0xa9, 0x46, 0xa1, 0x42, 0x92, 0x14)]
+interface ID3D12RootSignature(ID3D12RootSignatureVtbl):
+ ID3D12DeviceChild(ID3D12DeviceChildVtbl) {}}
+STRUCT!{struct D3D12_SHADER_BYTECODE {
+ pShaderBytecode: *const c_void,
+ BytecodeLength: SIZE_T,
+}}
+STRUCT!{struct D3D12_STREAM_OUTPUT_DESC {
+ pSODeclaration: *const D3D12_SO_DECLARATION_ENTRY,
+ NumEntries: UINT,
+ pBufferStrides: *const UINT,
+ NumStrides: UINT,
+ RasterizedStream: UINT,
+}}
+STRUCT!{struct D3D12_INPUT_LAYOUT_DESC {
+ pInputElementDescs: *const D3D12_INPUT_ELEMENT_DESC,
+ NumElements: UINT,
+}}
+ENUM!{enum D3D12_INDEX_BUFFER_STRIP_CUT_VALUE {
+ D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED = 0,
+ D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF = 1,
+ D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFFFFFF = 2,
+}}
+STRUCT!{struct D3D12_CACHED_PIPELINE_STATE {
+ pCachedBlob: *const c_void,
+ CachedBlobSizeInBytes: SIZE_T,
+}}
+ENUM!{enum D3D12_PIPELINE_STATE_FLAGS {
+ D3D12_PIPELINE_STATE_FLAG_NONE = 0,
+ D3D12_PIPELINE_STATE_FLAG_TOOL_DEBUG = 0x1,
+}}
+STRUCT!{struct D3D12_GRAPHICS_PIPELINE_STATE_DESC {
+ pRootSignature: *mut ID3D12RootSignature,
+ VS: D3D12_SHADER_BYTECODE,
+ PS: D3D12_SHADER_BYTECODE,
+ DS: D3D12_SHADER_BYTECODE,
+ HS: D3D12_SHADER_BYTECODE,
+ GS: D3D12_SHADER_BYTECODE,
+ StreamOutput: D3D12_STREAM_OUTPUT_DESC,
+ BlendState: D3D12_BLEND_DESC,
+ SampleMask: UINT,
+ RasterizerState: D3D12_RASTERIZER_DESC,
+ DepthStencilState: D3D12_DEPTH_STENCIL_DESC,
+ InputLayout: D3D12_INPUT_LAYOUT_DESC,
+ IBStripCutValue: D3D12_INDEX_BUFFER_STRIP_CUT_VALUE,
+ PrimitiveTopologyType: D3D12_PRIMITIVE_TOPOLOGY_TYPE,
+ NumRenderTargets: UINT,
+ RTVFormats: [DXGI_FORMAT; 8],
+ DSVFormat: DXGI_FORMAT,
+ SampleDesc: DXGI_SAMPLE_DESC,
+ NodeMask: UINT,
+ CachedPSO: D3D12_CACHED_PIPELINE_STATE,
+ Flags: D3D12_PIPELINE_STATE_FLAGS,
+}}
+STRUCT!{struct D3D12_COMPUTE_PIPELINE_STATE_DESC {
+ pRootSignature: *mut ID3D12RootSignature,
+ CS: D3D12_SHADER_BYTECODE,
+ NodeMask: UINT,
+ CachedPSO: D3D12_CACHED_PIPELINE_STATE,
+ Flags: D3D12_PIPELINE_STATE_FLAGS,
+}}
+STRUCT!{struct D3D12_RT_FORMAT_ARRAY {
+ RTFormats: [DXGI_FORMAT; 8],
+ NumRenderTargets: UINT,
+}}
+STRUCT!{struct D3D12_PIPELINE_STATE_STREAM_DESC {
+ SizeInBytes: SIZE_T,
+ pPipelineStateSubobjectStream: *mut c_void,
+}}
+ENUM!{enum D3D12_PIPELINE_STATE_SUBOBJECT_TYPE {
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE = 0,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS = 1,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS = 2,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS = 3,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS = 4,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS = 5,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS = 6,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT = 7,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND = 8,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK = 9,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER = 10,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL = 11,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT = 12,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE = 13,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY = 14,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS = 15,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT = 16,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC = 17,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK = 18,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO = 19,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS = 20,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1 = 21,
+ D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID = 22,
+}}
+ENUM!{enum D3D12_FEATURE {
+ D3D12_FEATURE_D3D12_OPTIONS = 0,
+ D3D12_FEATURE_ARCHITECTURE = 1,
+ D3D12_FEATURE_FEATURE_LEVELS = 2,
+ D3D12_FEATURE_FORMAT_SUPPORT = 3,
+ D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS = 4,
+ D3D12_FEATURE_FORMAT_INFO = 5,
+ D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT = 6,
+ D3D12_FEATURE_SHADER_MODEL = 7,
+ D3D12_FEATURE_D3D12_OPTIONS1 = 8,
+ D3D12_FEATURE_ROOT_SIGNATURE = 12,
+ D3D12_FEATURE_ARCHITECTURE1 = 16,
+ D3D12_FEATURE_D3D12_OPTIONS2 = 18,
+ D3D12_FEATURE_SHADER_CACHE = 19,
+ D3D12_FEATURE_COMMAND_QUEUE_PRIORITY = 20,
+}}
+ENUM!{enum D3D12_SHADER_MIN_PRECISION_SUPPORT {
+ D3D12_SHADER_MIN_PRECISION_SUPPORT_NONE = 0,
+ D3D12_SHADER_MIN_PRECISION_SUPPORT_10_BIT = 0x1,
+ D3D12_SHADER_MIN_PRECISION_SUPPORT_16_BIT = 0x2,
+}}
+ENUM!{enum D3D12_TILED_RESOURCES_TIER {
+ D3D12_TILED_RESOURCES_TIER_NOT_SUPPORTED = 0,
+ D3D12_TILED_RESOURCES_TIER_1 = 1,
+ D3D12_TILED_RESOURCES_TIER_2 = 2,
+ D3D12_TILED_RESOURCES_TIER_3 = 3,
+}}
+ENUM!{enum D3D12_RESOURCE_BINDING_TIER {
+ D3D12_RESOURCE_BINDING_TIER_1 = 1,
+ D3D12_RESOURCE_BINDING_TIER_2 = 2,
+ D3D12_RESOURCE_BINDING_TIER_3 = 3,
+}}
+ENUM!{enum D3D12_CONSERVATIVE_RASTERIZATION_TIER {
+ D3D12_CONSERVATIVE_RASTERIZATION_TIER_NOT_SUPPORTED = 0,
+ D3D12_CONSERVATIVE_RASTERIZATION_TIER_1 = 1,
+ D3D12_CONSERVATIVE_RASTERIZATION_TIER_2 = 2,
+ D3D12_CONSERVATIVE_RASTERIZATION_TIER_3 = 3,
+}}
+ENUM!{enum D3D12_FORMAT_SUPPORT1 {
+ D3D12_FORMAT_SUPPORT1_NONE = 0,
+ D3D12_FORMAT_SUPPORT1_BUFFER = 0x1,
+ D3D12_FORMAT_SUPPORT1_IA_VERTEX_BUFFER = 0x2,
+ D3D12_FORMAT_SUPPORT1_IA_INDEX_BUFFER = 0x4,
+ D3D12_FORMAT_SUPPORT1_SO_BUFFER = 0x8,
+ D3D12_FORMAT_SUPPORT1_TEXTURE1D = 0x10,
+ D3D12_FORMAT_SUPPORT1_TEXTURE2D = 0x20,
+ D3D12_FORMAT_SUPPORT1_TEXTURE3D = 0x40,
+ D3D12_FORMAT_SUPPORT1_TEXTURECUBE = 0x80,
+ D3D12_FORMAT_SUPPORT1_SHADER_LOAD = 0x100,
+ D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE = 0x200,
+ D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_COMPARISON = 0x400,
+ D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_MONO_TEXT = 0x800,
+ D3D12_FORMAT_SUPPORT1_MIP = 0x1000,
+ D3D12_FORMAT_SUPPORT1_RENDER_TARGET = 0x4000,
+ D3D12_FORMAT_SUPPORT1_BLENDABLE = 0x8000,
+ D3D12_FORMAT_SUPPORT1_DEPTH_STENCIL = 0x10000,
+ D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RESOLVE = 0x40000,
+ D3D12_FORMAT_SUPPORT1_DISPLAY = 0x80000,
+ D3D12_FORMAT_SUPPORT1_CAST_WITHIN_BIT_LAYOUT = 0x100000,
+ D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RENDERTARGET = 0x200000,
+ D3D12_FORMAT_SUPPORT1_MULTISAMPLE_LOAD = 0x400000,
+ D3D12_FORMAT_SUPPORT1_SHADER_GATHER = 0x800000,
+ D3D12_FORMAT_SUPPORT1_BACK_BUFFER_CAST = 0x1000000,
+ D3D12_FORMAT_SUPPORT1_TYPED_UNORDERED_ACCESS_VIEW = 0x2000000,
+ D3D12_FORMAT_SUPPORT1_SHADER_GATHER_COMPARISON = 0x4000000,
+ D3D12_FORMAT_SUPPORT1_DECODER_OUTPUT = 0x8000000,
+ D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_OUTPUT = 0x10000000,
+ D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_INPUT = 0x20000000,
+ D3D12_FORMAT_SUPPORT1_VIDEO_ENCODER = 0x40000000,
+}}
+ENUM!{enum D3D12_FORMAT_SUPPORT2 {
+ D3D12_FORMAT_SUPPORT2_NONE = 0,
+ D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_ADD = 0x1,
+ D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS = 0x2,
+ D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE = 0x4,
+ D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE = 0x8,
+ D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX = 0x10,
+ D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX = 0x20,
+ D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD = 0x40,
+ D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE = 0x80,
+ D3D12_FORMAT_SUPPORT2_OUTPUT_MERGER_LOGIC_OP = 0x100,
+ D3D12_FORMAT_SUPPORT2_TILED = 0x200,
+ D3D12_FORMAT_SUPPORT2_MULTIPLANE_OVERLAY = 0x4000,
+}}
+ENUM!{enum D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS {
+ D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_NONE = 0,
+ D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_TILED_RESOURCE = 0x1,
+}}
+ENUM!{enum D3D12_CROSS_NODE_SHARING_TIER {
+ D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED = 0,
+ D3D12_CROSS_NODE_SHARING_TIER_1_EMULATED = 1,
+ D3D12_CROSS_NODE_SHARING_TIER_1 = 2,
+ D3D12_CROSS_NODE_SHARING_TIER_2 = 3,
+}}
+ENUM!{enum D3D12_RESOURCE_HEAP_TIER {
+ D3D12_RESOURCE_HEAP_TIER_1 = 1,
+ D3D12_RESOURCE_HEAP_TIER_2 = 2,
+}}
+ENUM!{enum D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER {
+ D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_NOT_SUPPORTED = 0,
+ D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_1 = 1,
+ D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_2 = 2,
+}}
+STRUCT!{struct D3D12_FEATURE_DATA_D3D12_OPTIONS {
+ DoublePrecisionFloatShaderOps: BOOL,
+ OutputMergerLogicOp: BOOL,
+ MinPrecisionSupport: D3D12_SHADER_MIN_PRECISION_SUPPORT,
+ TiledResourcesTier: D3D12_TILED_RESOURCES_TIER,
+ ResourceBindingTier: D3D12_RESOURCE_BINDING_TIER,
+ PSSpecifiedStencilRefSupported: BOOL,
+ TypedUAVLoadAdditionalFormats: BOOL,
+ ROVsSupported: BOOL,
+ ConservativeRasterizationTier: D3D12_CONSERVATIVE_RASTERIZATION_TIER,
+ MaxGPUVirtualAddressBitsPerResource: UINT,
+ StandardSwizzle64KBSupported: BOOL,
+ CrossNodeSharingTier: D3D12_CROSS_NODE_SHARING_TIER,
+ CrossAdapterRowMajorTextureSupported: BOOL,
+ VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation: BOOL,
+ ResourceHeapTier: D3D12_RESOURCE_HEAP_TIER,
+}}
+STRUCT!{struct D3D12_FEATURE_DATA_D3D12_OPTIONS1 {
+ WaveOps: BOOL,
+ WaveLaneCountMin: UINT,
+ WaveLaneCountMax: UINT,
+ TotalLaneCount: UINT,
+ ExpandedComputeResourceStates: BOOL,
+ Int64ShaderOps: BOOL,
+}}
+STRUCT!{struct D3D12_FEATURE_DATA_D3D12_OPTIONS2 {
+ DepthBoundsTestSupported: BOOL,
+ ProgrammableSamplePositionsTier: D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER,
+}}
+ENUM!{enum D3D_ROOT_SIGNATURE_VERSION {
+ D3D_ROOT_SIGNATURE_VERSION_1 = 0x1,
+ D3D_ROOT_SIGNATURE_VERSION_1_0 = 0x1,
+ D3D_ROOT_SIGNATURE_VERSION_1_1 = 0x2,
+}}
+STRUCT!{struct D3D12_FEATURE_DATA_ROOT_SIGNATURE {
+ HighestVersion: D3D_ROOT_SIGNATURE_VERSION,
+}}
+STRUCT!{struct D3D12_FEATURE_DATA_ARCHITECTURE {
+ NodeIndex: UINT,
+ TileBasedRenderer: BOOL,
+ UMA: BOOL,
+ CacheCoherentUMA: BOOL,
+}}
+STRUCT!{struct D3D12_FEATURE_DATA_ARCHITECTURE1 {
+ NodeIndex: UINT,
+ TileBasedRenderer: BOOL,
+ UMA: BOOL,
+ CacheCoherentUMA: BOOL,
+ IsolatedMMU: BOOL,
+}}
+STRUCT!{struct D3D12_FEATURE_DATA_FEATURE_LEVELS {
+ NumFeatureLevels: UINT,
+ pFeatureLevelsRequested: *const D3D_FEATURE_LEVEL,
+ MaxSupportedFeatureLevel: D3D_FEATURE_LEVEL,
+}}
+ENUM!{enum D3D_SHADER_MODEL {
+ D3D_SHADER_MODEL_5_1 = 0x51,
+ D3D_SHADER_MODEL_6_0 = 0x60,
+}}
+STRUCT!{struct D3D12_FEATURE_DATA_SHADER_MODEL {
+ HighestShaderModel: D3D_SHADER_MODEL,
+}}
+STRUCT!{struct D3D12_FEATURE_DATA_FORMAT_SUPPORT {
+ Format: DXGI_FORMAT,
+ Support1: D3D12_FORMAT_SUPPORT1,
+ Support2: D3D12_FORMAT_SUPPORT2,
+}}
+STRUCT!{struct D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS {
+ Format: DXGI_FORMAT,
+ SampleCount: UINT,
+ Flags: D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS,
+ NumQualityLevels: UINT,
+}}
+STRUCT!{struct D3D12_FEATURE_DATA_FORMAT_INFO {
+ Format: DXGI_FORMAT,
+ PlaneCount: UINT8,
+}}
+STRUCT!{struct D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT {
+ MaxGPUVirtualAddressBitsPerResource: UINT,
+ MaxGPUVirtualAddressBitsPerProcess: UINT,
+}}
+ENUM!{enum D3D12_SHADER_CACHE_SUPPORT_FLAGS {
+ D3D12_SHADER_CACHE_SUPPORT_NONE = 0,
+ D3D12_SHADER_CACHE_SUPPORT_SINGLE_PSO = 0x1,
+ D3D12_SHADER_CACHE_SUPPORT_LIBRARY = 0x2,
+ D3D12_SHADER_CACHE_SUPPORT_AUTOMATIC_INPROC_CACHE = 0x4,
+ D3D12_SHADER_CACHE_SUPPORT_AUTOMATIC_DISK_CACHE = 0x8,
+}}
+STRUCT!{struct D3D12_FEATURE_DATA_SHADER_CACHE {
+ SupportFlags: D3D12_SHADER_CACHE_SUPPORT_FLAGS,
+}}
+STRUCT!{struct D3D12_FEATURE_DATA_COMMAND_QUEUE_PRIORITY {
+ CommandListType: D3D12_COMMAND_LIST_TYPE,
+ Priority: UINT,
+ PriorityForTypeIsSupported: BOOL,
+}}
+STRUCT!{struct D3D12_RESOURCE_ALLOCATION_INFO {
+ SizeInBytes: UINT64,
+ Alignment: UINT64,
+}}
+ENUM!{enum D3D12_HEAP_TYPE {
+ D3D12_HEAP_TYPE_DEFAULT = 1,
+ D3D12_HEAP_TYPE_UPLOAD = 2,
+ D3D12_HEAP_TYPE_READBACK = 3,
+ D3D12_HEAP_TYPE_CUSTOM = 4,
+}}
+ENUM!{enum D3D12_CPU_PAGE_PROPERTY {
+ D3D12_CPU_PAGE_PROPERTY_UNKNOWN = 0,
+ D3D12_CPU_PAGE_PROPERTY_NOT_AVAILABLE = 1,
+ D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE = 2,
+ D3D12_CPU_PAGE_PROPERTY_WRITE_BACK = 3,
+}}
+ENUM!{enum D3D12_MEMORY_POOL {
+ D3D12_MEMORY_POOL_UNKNOWN = 0,
+ D3D12_MEMORY_POOL_L0 = 1,
+ D3D12_MEMORY_POOL_L1 = 2,
+}}
+STRUCT!{struct D3D12_HEAP_PROPERTIES {
+ Type: D3D12_HEAP_TYPE,
+ CPUPageProperty: D3D12_CPU_PAGE_PROPERTY,
+ MemoryPoolPreference: D3D12_MEMORY_POOL,
+ CreationNodeMask: UINT,
+ VisibleNodeMask: UINT,
+}}
+ENUM!{enum D3D12_HEAP_FLAGS {
+ D3D12_HEAP_FLAG_NONE = 0,
+ D3D12_HEAP_FLAG_SHARED = 0x1,
+ D3D12_HEAP_FLAG_DENY_BUFFERS = 0x4,
+ D3D12_HEAP_FLAG_ALLOW_DISPLAY = 0x8,
+ D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER = 0x20,
+ D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES = 0x40,
+ D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES = 0x80,
+ D3D12_HEAP_FLAG_HARDWARE_PROTECTED = 0x100,
+ D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH = 0x200,
+ D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0,
+ D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS = 0xc0,
+ D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES = 0x44,
+ D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = 0x84,
+}}
+STRUCT!{struct D3D12_HEAP_DESC {
+ SizeInBytes: UINT64,
+ Properties: D3D12_HEAP_PROPERTIES,
+ Alignment: UINT64,
+ Flags: D3D12_HEAP_FLAGS,
+}}
+ENUM!{enum D3D12_RESOURCE_DIMENSION {
+ D3D12_RESOURCE_DIMENSION_UNKNOWN = 0,
+ D3D12_RESOURCE_DIMENSION_BUFFER = 1,
+ D3D12_RESOURCE_DIMENSION_TEXTURE1D = 2,
+ D3D12_RESOURCE_DIMENSION_TEXTURE2D = 3,
+ D3D12_RESOURCE_DIMENSION_TEXTURE3D = 4,
+}}
+ENUM!{enum D3D12_TEXTURE_LAYOUT {
+ D3D12_TEXTURE_LAYOUT_UNKNOWN = 0,
+ D3D12_TEXTURE_LAYOUT_ROW_MAJOR = 1,
+ D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2,
+ D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE = 3,
+}}
+ENUM!{enum D3D12_RESOURCE_FLAGS {
+ D3D12_RESOURCE_FLAG_NONE = 0,
+ D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET = 0x1,
+ D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL = 0x2,
+ D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS = 0x4,
+ D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE = 0x8,
+ D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER = 0x10,
+ D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS = 0x20,
+}}
+STRUCT!{struct D3D12_RESOURCE_DESC {
+ Dimension: D3D12_RESOURCE_DIMENSION,
+ Alignment: UINT64,
+ Width: UINT64,
+ Height: UINT,
+ DepthOrArraySize: UINT16,
+ MipLevels: UINT16,
+ Format: DXGI_FORMAT,
+ SampleDesc: DXGI_SAMPLE_DESC,
+ Layout: D3D12_TEXTURE_LAYOUT,
+ Flags: D3D12_RESOURCE_FLAGS,
+}}
+STRUCT!{struct D3D12_DEPTH_STENCIL_VALUE {
+ Depth: FLOAT,
+ Stencil: UINT8,
+}}
+UNION!{union D3D12_CLEAR_VALUE_u {
+ [u32; 4],
+ Color Color_mut: [FLOAT; 4],
+ DepthStencil DepthStencil_mut: D3D12_DEPTH_STENCIL_VALUE,
+}}
+STRUCT!{struct D3D12_CLEAR_VALUE {
+ Format: DXGI_FORMAT,
+ u: D3D12_CLEAR_VALUE_u,
+}}
+STRUCT!{struct D3D12_RANGE {
+ Begin: SIZE_T,
+ End: SIZE_T,
+}}
+STRUCT!{struct D3D12_RANGE_UINT64 {
+ Begin: UINT64,
+ End: UINT64,
+}}
+STRUCT!{struct D3D12_SUBRESOURCE_RANGE_UINT64 {
+ Subresource: UINT,
+ Range: D3D12_RANGE_UINT64,
+}}
+STRUCT!{struct D3D12_SUBRESOURCE_INFO {
+ Offset: UINT64,
+ RowPitch: UINT,
+ DepthPitch: UINT,
+}}
+STRUCT!{struct D3D12_TILED_RESOURCE_COORDINATE {
+ X: UINT,
+ Y: UINT,
+ Z: UINT,
+ Subresource: UINT,
+}}
+STRUCT!{struct D3D12_TILE_REGION_SIZE {
+ NumTiles: UINT,
+ UseBox: BOOL,
+ Width: UINT,
+ Height: UINT16,
+ Depth: UINT16,
+}}
+ENUM!{enum D3D12_TILE_RANGE_FLAGS {
+ D3D12_TILE_RANGE_FLAG_NONE = 0,
+ D3D12_TILE_RANGE_FLAG_NULL = 1,
+ D3D12_TILE_RANGE_FLAG_SKIP = 2,
+ D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE = 4,
+}}
+STRUCT!{struct D3D12_SUBRESOURCE_TILING {
+ WidthInTiles: UINT,
+ HeightInTiles: UINT16,
+ DepthInTiles: UINT16,
+ StartTileIndexInOverallResource: UINT,
+}}
+STRUCT!{struct D3D12_TILE_SHAPE {
+ WidthInTexels: UINT,
+ HeightInTexels: UINT,
+ DepthInTexels: UINT,
+}}
+STRUCT!{struct D3D12_PACKED_MIP_INFO {
+ NumStandardMips: UINT8,
+ NumPackedMips: UINT8,
+ NumTilesForPackedMips: UINT,
+ StartTileIndexInOverallResource: UINT,
+}}
+ENUM!{enum D3D12_TILE_MAPPING_FLAGS {
+ D3D12_TILE_MAPPING_FLAG_NONE = 0,
+ D3D12_TILE_MAPPING_FLAG_NO_HAZARD = 0x1,
+}}
+ENUM!{enum D3D12_TILE_COPY_FLAGS {
+ D3D12_TILE_COPY_FLAG_NONE = 0,
+ D3D12_TILE_COPY_FLAG_NO_HAZARD = 0x1,
+ D3D12_TILE_COPY_FLAG_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE = 0x2,
+ D3D12_TILE_COPY_FLAG_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER = 0x4,
+}}
+ENUM!{enum D3D12_RESOURCE_STATES {
+ D3D12_RESOURCE_STATE_COMMON = 0,
+ D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER = 0x1,
+ D3D12_RESOURCE_STATE_INDEX_BUFFER = 0x2,
+ D3D12_RESOURCE_STATE_RENDER_TARGET = 0x4,
+ D3D12_RESOURCE_STATE_UNORDERED_ACCESS = 0x8,
+ D3D12_RESOURCE_STATE_DEPTH_WRITE = 0x10,
+ D3D12_RESOURCE_STATE_DEPTH_READ = 0x20,
+ D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE = 0x40,
+ D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE = 0x80,
+ D3D12_RESOURCE_STATE_STREAM_OUT = 0x100,
+ D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT = 0x200,
+ D3D12_RESOURCE_STATE_COPY_DEST = 0x400,
+ D3D12_RESOURCE_STATE_COPY_SOURCE = 0x800,
+ D3D12_RESOURCE_STATE_RESOLVE_DEST = 0x1000,
+ D3D12_RESOURCE_STATE_RESOLVE_SOURCE = 0x2000,
+ D3D12_RESOURCE_STATE_GENERIC_READ = 0x1 | 0x2 | 0x40 | 0x80 | 0x200 | 0x800,
+ D3D12_RESOURCE_STATE_PRESENT = 0,
+ D3D12_RESOURCE_STATE_PREDICATION = 0x200,
+}}
+ENUM!{enum D3D12_RESOURCE_BARRIER_TYPE {
+ D3D12_RESOURCE_BARRIER_TYPE_TRANSITION = 0,
+ D3D12_RESOURCE_BARRIER_TYPE_ALIASING = 1,
+ D3D12_RESOURCE_BARRIER_TYPE_UAV = 2,
+}}
+STRUCT!{struct D3D12_RESOURCE_TRANSITION_BARRIER {
+ pResource: *mut ID3D12Resource,
+ Subresource: UINT,
+ StateBefore: D3D12_RESOURCE_STATES,
+ StateAfter: D3D12_RESOURCE_STATES,
+}}
+STRUCT!{struct D3D12_RESOURCE_ALIASING_BARRIER {
+ pResourceBefore: *mut ID3D12Resource,
+ pResourceAfter: *mut ID3D12Resource,
+}}
+STRUCT!{struct D3D12_RESOURCE_UAV_BARRIER {
+ pResource: *mut ID3D12Resource,
+}}
+ENUM!{enum D3D12_RESOURCE_BARRIER_FLAGS {
+ D3D12_RESOURCE_BARRIER_FLAG_NONE = 0x0,
+ D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY = 0x1,
+ D3D12_RESOURCE_BARRIER_FLAG_END_ONLY = 0x2,
+}}
+UNION!{union D3D12_RESOURCE_BARRIER_u {
+ [u32; 4] [u64; 3],
+ Transition Transition_mut: D3D12_RESOURCE_TRANSITION_BARRIER,
+ Aliasing Aliasing_mut: D3D12_RESOURCE_ALIASING_BARRIER,
+ UAV UAV_mut: D3D12_RESOURCE_UAV_BARRIER,
+}}
+STRUCT!{struct D3D12_RESOURCE_BARRIER {
+ Type: D3D12_RESOURCE_BARRIER_TYPE,
+ Flags: D3D12_RESOURCE_BARRIER_FLAGS,
+ u: D3D12_RESOURCE_BARRIER_u,
+}}
+STRUCT!{struct D3D12_SUBRESOURCE_FOOTPRINT {
+ Format: DXGI_FORMAT,
+ Width: UINT,
+ Height: UINT,
+ Depth: UINT,
+ RowPitch: UINT,
+}}
+STRUCT!{struct D3D12_PLACED_SUBRESOURCE_FOOTPRINT {
+ Offset: UINT64,
+ Footprint: D3D12_SUBRESOURCE_FOOTPRINT,
+}}
+ENUM!{enum D3D12_TEXTURE_COPY_TYPE {
+ D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX = 0,
+ D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT = 1,
+}}
+UNION!{union D3D12_TEXTURE_COPY_LOCATION_u {
+ [u64; 4],
+ PlacedFootprint PlacedFootprint_mut: D3D12_PLACED_SUBRESOURCE_FOOTPRINT,
+ SubresourceIndex SubresourceIndex_mut: UINT,
+}}
+STRUCT!{struct D3D12_TEXTURE_COPY_LOCATION {
+ pResource: *mut ID3D12Resource,
+ Type: D3D12_TEXTURE_COPY_TYPE,
+ u: D3D12_TEXTURE_COPY_LOCATION_u,
+}}
+ENUM!{enum D3D12_RESOLVE_MODE {
+ D3D12_RESOLVE_MODE_DECOMPRESS = 0,
+ D3D12_RESOLVE_MODE_MIN = 1,
+ D3D12_RESOLVE_MODE_MAX = 2,
+ D3D12_RESOLVE_MODE_AVERAGE = 3,
+}}
+STRUCT!{struct D3D12_SAMPLE_POSITION {
+ X: INT8,
+ Y: INT8,
+}}
+ENUM!{enum D3D12_SHADER_COMPONENT_MAPPING {
+ D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_0 = 0,
+ D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_1 = 1,
+ D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_2 = 2,
+ D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_3 = 3,
+ D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_0 = 4,
+ D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_1 = 5,
+}}
+pub const D3D12_SHADER_COMPONENT_MAPPING_MASK: UINT = 0x7;
+pub const D3D12_SHADER_COMPONENT_MAPPING_SHIFT: UINT = 3;
+pub const D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES: UINT = 1
+ << (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 4);
+// D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING
+// D3D12_DECODE_SHADER_4_COMPONENT_MAPPING
+// D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING
+ENUM!{enum D3D12_BUFFER_SRV_FLAGS {
+ D3D12_BUFFER_SRV_FLAG_NONE = 0x0,
+ D3D12_BUFFER_SRV_FLAG_RAW = 0x1,
+}}
+STRUCT!{struct D3D12_BUFFER_SRV {
+ FirstElement: UINT64,
+ NumElements: UINT,
+ StructureByteStride: UINT,
+ Flags: D3D12_BUFFER_SRV_FLAGS,
+}}
+STRUCT!{struct D3D12_TEX1D_SRV {
+ MostDetailedMip: UINT,
+ MipLevels: UINT,
+ ResourceMinLODClamp: FLOAT,
+}}
+STRUCT!{struct D3D12_TEX1D_ARRAY_SRV {
+ MostDetailedMip: UINT,
+ MipLevels: UINT,
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+ ResourceMinLODClamp: FLOAT,
+}}
+STRUCT!{struct D3D12_TEX2D_SRV {
+ MostDetailedMip: UINT,
+ MipLevels: UINT,
+ PlaneSlice: UINT,
+ ResourceMinLODClamp: FLOAT,
+}}
+STRUCT!{struct D3D12_TEX2D_ARRAY_SRV {
+ MostDetailedMip: UINT,
+ MipLevels: UINT,
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+ PlaneSlice: UINT,
+ ResourceMinLODClamp: FLOAT,
+}}
+STRUCT!{struct D3D12_TEX3D_SRV {
+ MostDetailedMip: UINT,
+ MipLevels: UINT,
+ ResourceMinLODClamp: FLOAT,
+}}
+STRUCT!{struct D3D12_TEXCUBE_SRV {
+ MostDetailedMip: UINT,
+ MipLevels: UINT,
+ ResourceMinLODClamp: FLOAT,
+}}
+STRUCT!{struct D3D12_TEXCUBE_ARRAY_SRV {
+ MostDetailedMip: UINT,
+ MipLevels: UINT,
+ First2DArrayFace: UINT,
+ NumCubes: UINT,
+ ResourceMinLODClamp: FLOAT,
+}}
+STRUCT!{struct D3D12_TEX2DMS_SRV {
+ UnusedField_NothingToDefine: UINT,
+}}
+STRUCT!{struct D3D12_TEX2DMS_ARRAY_SRV {
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+ENUM!{enum D3D12_SRV_DIMENSION {
+ D3D12_SRV_DIMENSION_UNKNOWN = 0,
+ D3D12_SRV_DIMENSION_BUFFER = 1,
+ D3D12_SRV_DIMENSION_TEXTURE1D = 2,
+ D3D12_SRV_DIMENSION_TEXTURE1DARRAY = 3,
+ D3D12_SRV_DIMENSION_TEXTURE2D = 4,
+ D3D12_SRV_DIMENSION_TEXTURE2DARRAY = 5,
+ D3D12_SRV_DIMENSION_TEXTURE2DMS = 6,
+ D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY = 7,
+ D3D12_SRV_DIMENSION_TEXTURE3D = 8,
+ D3D12_SRV_DIMENSION_TEXTURECUBE = 9,
+ D3D12_SRV_DIMENSION_TEXTURECUBEARRAY = 10,
+}}
+UNION!{union D3D12_SHADER_RESOURCE_VIEW_DESC_u {
+ [u64; 3],
+ Buffer Buffer_mut: D3D12_BUFFER_SRV,
+ Texture1D Texture1D_mut: D3D12_TEX1D_SRV,
+ Texture1DArray Texture1DArray_mut: D3D12_TEX1D_ARRAY_SRV,
+ Texture2D Texture2D_mut: D3D12_TEX2D_SRV,
+ Texture2DArray Texture2DArray_mut: D3D12_TEX2D_ARRAY_SRV,
+ Texture2DMS Texture2DMS_mut: D3D12_TEX2DMS_SRV,
+ Texture2DMSArray Texture2DMSArray_mut: D3D12_TEX2DMS_ARRAY_SRV,
+ Texture3D Texture3D_mut: D3D12_TEX3D_SRV,
+ TextureCube TextureCube_mut: D3D12_TEXCUBE_SRV,
+ TextureCubeArray TextureCubeArray_mut: D3D12_TEXCUBE_ARRAY_SRV,
+}}
+STRUCT!{struct D3D12_SHADER_RESOURCE_VIEW_DESC {
+ Format: DXGI_FORMAT,
+ ViewDimension: D3D12_SRV_DIMENSION,
+ Shader4ComponentMapping: UINT,
+ u: D3D12_SHADER_RESOURCE_VIEW_DESC_u,
+}}
+STRUCT!{struct D3D12_CONSTANT_BUFFER_VIEW_DESC {
+ BufferLocation: D3D12_GPU_VIRTUAL_ADDRESS,
+ SizeInBytes: UINT,
+}}
+ENUM!{enum D3D12_FILTER {
+ D3D12_FILTER_MIN_MAG_MIP_POINT = 0,
+ D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x1,
+ D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x4,
+ D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x5,
+ D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10,
+ D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11,
+ D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14,
+ D3D12_FILTER_MIN_MAG_MIP_LINEAR = 0x15,
+ D3D12_FILTER_ANISOTROPIC = 0x55,
+ D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x80,
+ D3D12_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81,
+ D3D12_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84,
+ D3D12_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85,
+ D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90,
+ D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,
+ D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94,
+ D3D12_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x95,
+ D3D12_FILTER_COMPARISON_ANISOTROPIC = 0xd5,
+ D3D12_FILTER_MINIMUM_MIN_MAG_MIP_POINT = 0x100,
+ D3D12_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x101,
+ D3D12_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x104,
+ D3D12_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x105,
+ D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x110,
+ D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x111,
+ D3D12_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x114,
+ D3D12_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR = 0x115,
+ D3D12_FILTER_MINIMUM_ANISOTROPIC = 0x155,
+ D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_POINT = 0x180,
+ D3D12_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x181,
+ D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x184,
+ D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x185,
+ D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x190,
+ D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x191,
+ D3D12_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x194,
+ D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR = 0x195,
+ D3D12_FILTER_MAXIMUM_ANISOTROPIC = 0x1d5,
+}}
+ENUM!{enum D3D12_FILTER_TYPE {
+ D3D12_FILTER_TYPE_POINT = 0,
+ D3D12_FILTER_TYPE_LINEAR = 1,
+}}
+ENUM!{enum D3D12_FILTER_REDUCTION_TYPE {
+ D3D12_FILTER_REDUCTION_TYPE_STANDARD = 0,
+ D3D12_FILTER_REDUCTION_TYPE_COMPARISON = 1,
+ D3D12_FILTER_REDUCTION_TYPE_MINIMUM = 2,
+ D3D12_FILTER_REDUCTION_TYPE_MAXIMUM = 3,
+}}
+pub const D3D12_FILTER_REDUCTION_TYPE_MASK: UINT = 0x3;
+pub const D3D12_FILTER_REDUCTION_TYPE_SHIFT: UINT = 7;
+pub const D3D12_FILTER_TYPE_MASK: UINT = 0x3;
+pub const D3D12_MIN_FILTER_SHIFT: UINT = 4;
+pub const D3D12_MAG_FILTER_SHIFT: UINT = 2;
+pub const D3D12_MIP_FILTER_SHIFT: UINT = 0;
+pub const D3D12_ANISOTROPIC_FILTERING_BIT: UINT = 0x40;
+// D3D12_ENCODE_BASIC_FILTER
+// D3D12_ENCODE_ANISOTROPIC_FILTER
+// D3D12_DECODE_MIN_FILTER
+// D3D12_DECODE_MAG_FILTER
+// D3D12_DECODE_MIP_FILTER
+// D3D12_DECODE_FILTER_REDUCTION
+// D3D12_DECODE_IS_COMPARISON_FILTER
+// D3D12_DECODE_IS_ANISOTROPIC_FILTER
+ENUM!{enum D3D12_TEXTURE_ADDRESS_MODE {
+ D3D12_TEXTURE_ADDRESS_MODE_WRAP = 1,
+ D3D12_TEXTURE_ADDRESS_MODE_MIRROR = 2,
+ D3D12_TEXTURE_ADDRESS_MODE_CLAMP = 3,
+ D3D12_TEXTURE_ADDRESS_MODE_BORDER = 4,
+ D3D12_TEXTURE_ADDRESS_MODE_MIRROR_ONCE = 5,
+}}
+STRUCT!{struct D3D12_SAMPLER_DESC {
+ Filter: D3D12_FILTER,
+ AddressU: D3D12_TEXTURE_ADDRESS_MODE,
+ AddressV: D3D12_TEXTURE_ADDRESS_MODE,
+ AddressW: D3D12_TEXTURE_ADDRESS_MODE,
+ MipLODBias: FLOAT,
+ MaxAnisotropy: UINT,
+ ComparisonFunc: D3D12_COMPARISON_FUNC,
+ BorderColor: [FLOAT; 4],
+ MinLOD: FLOAT,
+ MaxLOD: FLOAT,
+}}
+ENUM!{enum D3D12_BUFFER_UAV_FLAGS {
+ D3D12_BUFFER_UAV_FLAG_NONE = 0,
+ D3D12_BUFFER_UAV_FLAG_RAW = 0x1,
+}}
+STRUCT!{struct D3D12_BUFFER_UAV {
+ FirstElement: UINT64,
+ NumElements: UINT,
+ StructureByteStride: UINT,
+ CounterOffsetInBytes: UINT64,
+ Flags: D3D12_BUFFER_UAV_FLAGS,
+}}
+STRUCT!{struct D3D12_TEX1D_UAV {
+ MipSlice: UINT,
+}}
+STRUCT!{struct D3D12_TEX1D_ARRAY_UAV {
+ MipSlice: UINT,
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+STRUCT!{struct D3D12_TEX2D_UAV {
+ MipSlice: UINT,
+ PlaneSlice: UINT,
+}}
+STRUCT!{struct D3D12_TEX2D_ARRAY_UAV {
+ MipSlice: UINT,
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+ PlaneSlice: UINT,
+}}
+STRUCT!{struct D3D12_TEX3D_UAV {
+ MipSlice: UINT,
+ FirstWSlice: UINT,
+ WSize: UINT,
+}}
+ENUM!{enum D3D12_UAV_DIMENSION {
+ D3D12_UAV_DIMENSION_UNKNOWN = 0,
+ D3D12_UAV_DIMENSION_BUFFER = 1,
+ D3D12_UAV_DIMENSION_TEXTURE1D = 2,
+ D3D12_UAV_DIMENSION_TEXTURE1DARRAY = 3,
+ D3D12_UAV_DIMENSION_TEXTURE2D = 4,
+ D3D12_UAV_DIMENSION_TEXTURE2DARRAY = 5,
+ D3D12_UAV_DIMENSION_TEXTURE3D = 8,
+}}
+UNION!{union D3D12_UNORDERED_ACCESS_VIEW_DESC_u {
+ [u64; 4],
+ Buffer Buffer_mut: D3D12_BUFFER_UAV,
+ Texture1D Texture1D_mut: D3D12_TEX1D_UAV,
+ Texture1DArray Texture1DArray_mut: D3D12_TEX1D_ARRAY_UAV,
+ Texture2D Texture2D_mut: D3D12_TEX2D_UAV,
+ Texture2DArray Texture2DArray_mut: D3D12_TEX2D_ARRAY_UAV,
+ Texture3D Texture3D_mut: D3D12_TEX3D_UAV,
+}}
+STRUCT!{struct D3D12_UNORDERED_ACCESS_VIEW_DESC {
+ Format: DXGI_FORMAT,
+ ViewDimension: D3D12_UAV_DIMENSION,
+ u: D3D12_UNORDERED_ACCESS_VIEW_DESC_u,
+}}
+STRUCT!{struct D3D12_BUFFER_RTV {
+ FirstElement: UINT64,
+ NumElements: UINT,
+}}
+STRUCT!{struct D3D12_TEX1D_RTV {
+ MipSlice: UINT,
+}}
+STRUCT!{struct D3D12_TEX1D_ARRAY_RTV {
+ MipSlice: UINT,
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+STRUCT!{struct D3D12_TEX2D_RTV {
+ MipSlice: UINT,
+ PlaneSlice: UINT,
+}}
+STRUCT!{struct D3D12_TEX2DMS_RTV {
+ UnusedField_NothingToDefine: UINT,
+}}
+STRUCT!{struct D3D12_TEX2D_ARRAY_RTV {
+ MipSlice: UINT,
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+ PlaneSlice: UINT,
+}}
+STRUCT!{struct D3D12_TEX2DMS_ARRAY_RTV {
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+STRUCT!{struct D3D12_TEX3D_RTV {
+ MipSlice: UINT,
+ FirstWSlice: UINT,
+ WSize: UINT,
+}}
+ENUM!{enum D3D12_RTV_DIMENSION {
+ D3D12_RTV_DIMENSION_UNKNOWN = 0,
+ D3D12_RTV_DIMENSION_BUFFER = 1,
+ D3D12_RTV_DIMENSION_TEXTURE1D = 2,
+ D3D12_RTV_DIMENSION_TEXTURE1DARRAY = 3,
+ D3D12_RTV_DIMENSION_TEXTURE2D = 4,
+ D3D12_RTV_DIMENSION_TEXTURE2DARRAY = 5,
+ D3D12_RTV_DIMENSION_TEXTURE2DMS = 6,
+ D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY = 7,
+ D3D12_RTV_DIMENSION_TEXTURE3D = 8,
+}}
+UNION!{union D3D12_RENDER_TARGET_VIEW_DESC_u {
+ [u64; 2],
+ Buffer Buffer_mut: D3D12_BUFFER_RTV,
+ Texture1D Texture1D_mut: D3D12_TEX1D_RTV,
+ Texture1DArray Texture1DArray_mut: D3D12_TEX1D_ARRAY_RTV,
+ Texture2D Texture2D_mut: D3D12_TEX2D_RTV,
+ Texture2DArray Texture2DArray_mut: D3D12_TEX2D_ARRAY_RTV,
+ Texture2DMS Texture2DMS_mut: D3D12_TEX2DMS_RTV,
+ Texture2DMSArray Texture2DMSArray_mut: D3D12_TEX2DMS_ARRAY_RTV,
+ Texture3D Texture3D_mut: D3D12_TEX3D_RTV,
+}}
+STRUCT!{struct D3D12_RENDER_TARGET_VIEW_DESC {
+ Format: DXGI_FORMAT,
+ ViewDimension: D3D12_RTV_DIMENSION,
+ u: D3D12_RENDER_TARGET_VIEW_DESC_u,
+}}
+STRUCT!{struct D3D12_TEX1D_DSV {
+ MipSlice: UINT,
+}}
+STRUCT!{struct D3D12_TEX1D_ARRAY_DSV {
+ MipSlice: UINT,
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+STRUCT!{struct D3D12_TEX2D_DSV {
+ MipSlice: UINT,
+}}
+STRUCT!{struct D3D12_TEX2D_ARRAY_DSV {
+ MipSlice: UINT,
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+STRUCT!{struct D3D12_TEX2DMS_DSV {
+ UnusedField_NothingToDefine: UINT,
+}}
+STRUCT!{struct D3D12_TEX2DMS_ARRAY_DSV {
+ FirstArraySlice: UINT,
+ ArraySize: UINT,
+}}
+ENUM!{enum D3D12_DSV_FLAGS {
+ D3D12_DSV_FLAG_NONE = 0x0,
+ D3D12_DSV_FLAG_READ_ONLY_DEPTH = 0x1,
+ D3D12_DSV_FLAG_READ_ONLY_STENCIL = 0x2,
+}}
+ENUM!{enum D3D12_DSV_DIMENSION {
+ D3D12_DSV_DIMENSION_UNKNOWN = 0,
+ D3D12_DSV_DIMENSION_TEXTURE1D = 1,
+ D3D12_DSV_DIMENSION_TEXTURE1DARRAY = 2,
+ D3D12_DSV_DIMENSION_TEXTURE2D = 3,
+ D3D12_DSV_DIMENSION_TEXTURE2DARRAY = 4,
+ D3D12_DSV_DIMENSION_TEXTURE2DMS = 5,
+ D3D12_DSV_DIMENSION_TEXTURE2DMSARRAY = 6,
+}}
+UNION!{union D3D12_DEPTH_STENCIL_VIEW_DESC_u {
+ [u32; 3],
+ Texture1D Texture1D_mut: D3D12_TEX1D_DSV,
+ Texture1DArray Texture1DArray_mut: D3D12_TEX1D_ARRAY_DSV,
+ Texture2D Texture2D_mut: D3D12_TEX2D_DSV,
+ Texture2DArray Texture2DArray_mut: D3D12_TEX2D_ARRAY_DSV,
+ Texture2DMS Texture2DMS_mut: D3D12_TEX2DMS_DSV,
+ Texture2DMSArray Texture2DMSArray_mut: D3D12_TEX2DMS_ARRAY_DSV,
+}}
+STRUCT!{struct D3D12_DEPTH_STENCIL_VIEW_DESC {
+ Format: DXGI_FORMAT,
+ ViewDimension: D3D12_DSV_DIMENSION,
+ Flags: D3D12_DSV_FLAGS,
+ u: D3D12_DEPTH_STENCIL_VIEW_DESC_u,
+}}
+ENUM!{enum D3D12_CLEAR_FLAGS {
+ D3D12_CLEAR_FLAG_DEPTH = 0x1,
+ D3D12_CLEAR_FLAG_STENCIL = 0x2,
+}}
+ENUM!{enum D3D12_FENCE_FLAGS {
+ D3D12_FENCE_FLAG_NONE = 0x0,
+ D3D12_FENCE_FLAG_SHARED = 0x1,
+ D3D12_FENCE_FLAG_SHARED_CROSS_ADAPTER = 0x2,
+}}
+ENUM!{enum D3D12_DESCRIPTOR_HEAP_TYPE {
+ D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV = 0,
+ D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER = 1,
+ D3D12_DESCRIPTOR_HEAP_TYPE_RTV = 2,
+ D3D12_DESCRIPTOR_HEAP_TYPE_DSV = 3,
+ D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES = 4,
+}}
+ENUM!{enum D3D12_DESCRIPTOR_HEAP_FLAGS {
+ D3D12_DESCRIPTOR_HEAP_FLAG_NONE = 0x0,
+ D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE = 0x1,
+}}
+STRUCT!{struct D3D12_DESCRIPTOR_HEAP_DESC {
+ Type: D3D12_DESCRIPTOR_HEAP_TYPE,
+ NumDescriptors: UINT,
+ Flags: D3D12_DESCRIPTOR_HEAP_FLAGS,
+ NodeMask: UINT,
+}}
+ENUM!{enum D3D12_DESCRIPTOR_RANGE_TYPE {
+ D3D12_DESCRIPTOR_RANGE_TYPE_SRV = 0,
+ D3D12_DESCRIPTOR_RANGE_TYPE_UAV = 1,
+ D3D12_DESCRIPTOR_RANGE_TYPE_CBV = 2,
+ D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER = 3,
+}}
+STRUCT!{struct D3D12_DESCRIPTOR_RANGE {
+ RangeType: D3D12_DESCRIPTOR_RANGE_TYPE,
+ NumDescriptors: UINT,
+ BaseShaderRegister: UINT,
+ RegisterSpace: UINT,
+ OffsetInDescriptorsFromTableStart: UINT,
+}}
+STRUCT!{struct D3D12_ROOT_DESCRIPTOR_TABLE {
+ NumDescriptorRanges: UINT,
+ pDescriptorRanges: *const D3D12_DESCRIPTOR_RANGE,
+}}
+STRUCT!{struct D3D12_ROOT_CONSTANTS {
+ ShaderRegister: UINT,
+ RegisterSpace: UINT,
+ Num32BitValues: UINT,
+}}
+STRUCT!{struct D3D12_ROOT_DESCRIPTOR {
+ ShaderRegister: UINT,
+ RegisterSpace: UINT,
+}}
+ENUM!{enum D3D12_SHADER_VISIBILITY {
+ D3D12_SHADER_VISIBILITY_ALL = 0,
+ D3D12_SHADER_VISIBILITY_VERTEX = 1,
+ D3D12_SHADER_VISIBILITY_HULL = 2,
+ D3D12_SHADER_VISIBILITY_DOMAIN = 3,
+ D3D12_SHADER_VISIBILITY_GEOMETRY = 4,
+ D3D12_SHADER_VISIBILITY_PIXEL = 5,
+}}
+ENUM!{enum D3D12_ROOT_PARAMETER_TYPE {
+ D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE = 0,
+ D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS = 1,
+ D3D12_ROOT_PARAMETER_TYPE_CBV = 2,
+ D3D12_ROOT_PARAMETER_TYPE_SRV = 3,
+ D3D12_ROOT_PARAMETER_TYPE_UAV = 4,
+}}
+UNION!{union D3D12_ROOT_PARAMETER_u {
+ [u32; 3] [u64; 2],
+ DescriptorTable DescriptorTable_mut: D3D12_ROOT_DESCRIPTOR_TABLE,
+ Constants Constants_mut: D3D12_ROOT_CONSTANTS,
+ Descriptor Descriptor_mut: D3D12_ROOT_DESCRIPTOR,
+}}
+STRUCT!{struct D3D12_ROOT_PARAMETER {
+ ParameterType: D3D12_ROOT_PARAMETER_TYPE,
+ u: D3D12_ROOT_PARAMETER_u,
+ ShaderVisibility: D3D12_SHADER_VISIBILITY,
+}}
+ENUM!{enum D3D12_ROOT_SIGNATURE_FLAGS {
+ D3D12_ROOT_SIGNATURE_FLAG_NONE = 0x0,
+ D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT = 0x1,
+ D3D12_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS = 0x2,
+ D3D12_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS = 0x4,
+ D3D12_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS = 0x8,
+ D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS = 0x10,
+ D3D12_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS = 0x20,
+ D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT = 0x40,
+}}
+ENUM!{enum D3D12_STATIC_BORDER_COLOR {
+ D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK = 0,
+ D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK = 1,
+ D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE = 2,
+}}
+STRUCT!{struct D3D12_STATIC_SAMPLER_DESC {
+ Filter: D3D12_FILTER,
+ AddressU: D3D12_TEXTURE_ADDRESS_MODE,
+ AddressV: D3D12_TEXTURE_ADDRESS_MODE,
+ AddressW: D3D12_TEXTURE_ADDRESS_MODE,
+ MipLODBias: FLOAT,
+ MaxAnisotropy: UINT,
+ ComparisonFunc: D3D12_COMPARISON_FUNC,
+ BorderColor: D3D12_STATIC_BORDER_COLOR,
+ MinLOD: FLOAT,
+ MaxLOD: FLOAT,
+ ShaderRegister: UINT,
+ RegisterSpace: UINT,
+ ShaderVisibility: D3D12_SHADER_VISIBILITY,
+}}
+STRUCT!{struct D3D12_ROOT_SIGNATURE_DESC {
+ NumParameters: UINT,
+ pParameters: *const D3D12_ROOT_PARAMETER,
+ NumStaticSamplers: UINT,
+ pStaticSamplers: *const D3D12_STATIC_SAMPLER_DESC,
+ Flags: D3D12_ROOT_SIGNATURE_FLAGS,
+}}
+ENUM!{enum D3D12_DESCRIPTOR_RANGE_FLAGS {
+ D3D12_DESCRIPTOR_RANGE_FLAG_NONE = 0,
+ D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE = 0x1,
+ D3D12_DESCRIPTOR_RANGE_FLAG_DATA_VOLATILE = 0x2,
+ D3D12_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4,
+ D3D12_DESCRIPTOR_RANGE_FLAG_DATA_STATIC = 0x8,
+}}
+STRUCT!{struct D3D12_DESCRIPTOR_RANGE1 {
+ RangeType: D3D12_DESCRIPTOR_RANGE_TYPE,
+ NumDescriptors: UINT,
+ BaseShaderRegister: UINT,
+ RegisterSpace: UINT,
+ Flags: D3D12_DESCRIPTOR_RANGE_FLAGS,
+ OffsetInDescriptorsFromTableStart: UINT,
+}}
+STRUCT!{struct D3D12_ROOT_DESCRIPTOR_TABLE1 {
+ NumDescriptorRanges: UINT,
+ pDescriptorRanges: *const D3D12_DESCRIPTOR_RANGE1,
+}}
+ENUM!{enum D3D12_ROOT_DESCRIPTOR_FLAGS {
+ D3D12_ROOT_DESCRIPTOR_FLAG_NONE = 0,
+ D3D12_ROOT_DESCRIPTOR_FLAG_DATA_VOLATILE = 0x2,
+ D3D12_ROOT_DESCRIPTOR_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4,
+ D3D12_ROOT_DESCRIPTOR_FLAG_DATA_STATIC = 0x8,
+}}
+STRUCT!{struct D3D12_ROOT_DESCRIPTOR1 {
+ ShaderRegister: UINT,
+ RegisterSpace: UINT,
+ Flags: D3D12_ROOT_DESCRIPTOR_FLAGS,
+}}
+UNION!{union D3D12_ROOT_PARAMETER1_u {
+ [u32; 3] [u64; 2],
+ DescriptorTable DescriptorTable_mut: D3D12_ROOT_DESCRIPTOR_TABLE1,
+ Constants Constants_mut: D3D12_ROOT_CONSTANTS,
+ Descriptor Descriptor_mut: D3D12_ROOT_DESCRIPTOR1,
+}}
+STRUCT!{struct D3D12_ROOT_PARAMETER1 {
+ ParameterType: D3D12_ROOT_PARAMETER_TYPE,
+ u: D3D12_ROOT_PARAMETER1_u,
+ ShaderVisibility: D3D12_SHADER_VISIBILITY,
+}}
+STRUCT!{struct D3D12_ROOT_SIGNATURE_DESC1 {
+ NumParameters: UINT,
+ pParameters: *const D3D12_ROOT_PARAMETER1,
+ NumStaticSamplers: UINT,
+ pStaticSamplers: *const D3D12_STATIC_SAMPLER_DESC,
+ Flags: D3D12_ROOT_SIGNATURE_FLAGS,
+}}
+UNION!{union D3D12_VERSIONED_ROOT_SIGNATURE_DESC_u {
+ [u32; 5] [u64; 5],
+ Desc_1_0 Desc_1_0_mut: D3D12_ROOT_SIGNATURE_DESC,
+ Desc_1_1 Desc_1_1_mut: D3D12_ROOT_SIGNATURE_DESC1,
+}}
+STRUCT!{struct D3D12_VERSIONED_ROOT_SIGNATURE_DESC {
+ Version: UINT,
+ u: D3D12_VERSIONED_ROOT_SIGNATURE_DESC_u,
+}}
+RIDL!{#[uuid(0x34ab647b, 0x3cc8, 0x46ac, 0x84, 0x1b, 0xc0, 0x96, 0x56, 0x45, 0xc0, 0x46)]
+interface ID3D12RootSignatureDeserializer(ID3D12RootSignatureDeserializerVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn GetRootSignatureDesc() -> *const D3D12_ROOT_SIGNATURE_DESC,
+}}
+RIDL!{#[uuid(0x7f91ce67, 0x090c, 0x4bb7, 0xb7, 0x8e, 0xed, 0x8f, 0xf2, 0xe3, 0x1d, 0xa0)]
+interface ID3D12VersionedRootSignatureDeserializer(ID3D12VersionedRootSignatureDeserializerVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn GetRootSignatureDescAtVersion(
+ convertToVersion: D3D_ROOT_SIGNATURE_VERSION,
+ ppDesc: *mut *mut D3D12_VERSIONED_ROOT_SIGNATURE_DESC,
+ ) -> HRESULT,
+ fn GetUnconvertedRootSignatureDesc() -> *const D3D12_VERSIONED_ROOT_SIGNATURE_DESC,
+}}
+FN!{stdcall PFN_D3D12_SERIALIZE_ROOT_SIGNATURE(
+ pRootSignature: *const D3D12_ROOT_SIGNATURE_DESC,
+ Version: D3D_ROOT_SIGNATURE_VERSION,
+ ppBlob: *mut *mut ID3DBlob,
+ ppErrorBlob: *mut *mut ID3DBlob,
+) -> HRESULT}
+extern "system" {
+ pub fn D3D12SerializeRootSignature(
+ pRootSignature: *const D3D12_ROOT_SIGNATURE_DESC,
+ Version: D3D_ROOT_SIGNATURE_VERSION,
+ ppBlob: *mut *mut ID3DBlob,
+ ppErrorBlob: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+}
+FN!{stdcall PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER(
+ pSrcData: LPCVOID,
+ SrcDataSizeInBytes: SIZE_T,
+ pRootSignatureDeserializerInterface: REFIID,
+ ppRootSignatureDeserializer: *mut *mut c_void,
+) -> HRESULT}
+extern "system" {
+ pub fn D3D12CreateRootSignatureDeserializer(
+ pSrcData: LPCVOID,
+ SrcDataSizeInBytes: SIZE_T,
+ pRootSignatureDeserializerInterface: REFGUID,
+ ppRootSignatureDeserializer: *mut *mut c_void,
+ ) -> HRESULT;
+}
+FN!{stdcall PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE(
+ pRootSignature: *const D3D12_VERSIONED_ROOT_SIGNATURE_DESC,
+ ppBlob: *mut *mut ID3DBlob,
+ ppErrorBlob: *mut *mut ID3DBlob,
+) -> HRESULT}
+extern "system" {
+ pub fn D3D12SerializeVersionedRootSignature(
+ pRootSignature: *const D3D12_VERSIONED_ROOT_SIGNATURE_DESC,
+ ppBlob: *mut *mut ID3DBlob,
+ ppErrorBlob: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+}
+FN!{stdcall PFN_D3D12_CREATE_VERSIONED_ROOT_SIGNATURE_DESERIALIZER(
+ pSrcData: LPCVOID,
+ SrcDataSizeInBytes: SIZE_T,
+ pRootSignatureDeserializerInterface: REFIID,
+ ppRootSignatureDeserializer: *mut *mut c_void,
+) -> HRESULT}
+extern "system" {
+ pub fn D3D12CreateVersionedRootSignatureDeserializer(
+ pSrcData: LPCVOID,
+ SrcDataSizeInBytes: SIZE_T,
+ pRootSignatureDeserializerInterface: REFIID,
+ ppRootSignatureDeserializer: *mut *mut c_void,
+ ) -> HRESULT;
+}
+STRUCT!{struct D3D12_CPU_DESCRIPTOR_HANDLE {
+ ptr: SIZE_T,
+}}
+STRUCT!{struct D3D12_GPU_DESCRIPTOR_HANDLE {
+ ptr: UINT64,
+}}
+STRUCT!{struct D3D12_DISCARD_REGION {
+ NumRects: UINT,
+ pRects: *const D3D12_RECT,
+ FirstSubresource: UINT,
+ NumSubresources: UINT,
+}}
+ENUM!{enum D3D12_QUERY_HEAP_TYPE {
+ D3D12_QUERY_HEAP_TYPE_OCCLUSION = 0,
+ D3D12_QUERY_HEAP_TYPE_TIMESTAMP = 1,
+ D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS = 2,
+ D3D12_QUERY_HEAP_TYPE_SO_STATISTICS = 3,
+}}
+STRUCT!{struct D3D12_QUERY_HEAP_DESC {
+ Type: D3D12_QUERY_HEAP_TYPE,
+ Count: UINT,
+ NodeMask: UINT,
+}}
+ENUM!{enum D3D12_QUERY_TYPE {
+ D3D12_QUERY_TYPE_OCCLUSION = 0,
+ D3D12_QUERY_TYPE_BINARY_OCCLUSION = 1,
+ D3D12_QUERY_TYPE_TIMESTAMP = 2,
+ D3D12_QUERY_TYPE_PIPELINE_STATISTICS = 3,
+ D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0 = 4,
+ D3D12_QUERY_TYPE_SO_STATISTICS_STREAM1 = 5,
+ D3D12_QUERY_TYPE_SO_STATISTICS_STREAM2 = 6,
+ D3D12_QUERY_TYPE_SO_STATISTICS_STREAM3 = 7,
+}}
+ENUM!{enum D3D12_PREDICATION_OP {
+ D3D12_PREDICATION_OP_EQUAL_ZERO = 0,
+ D3D12_PREDICATION_OP_NOT_EQUAL_ZERO = 1,
+}}
+STRUCT!{struct D3D12_QUERY_DATA_PIPELINE_STATISTICS {
+ IAVertices: UINT64,
+ IAPrimitives: UINT64,
+ VSInvocations: UINT64,
+ GSInvocations: UINT64,
+ GSPrimitives: UINT64,
+ CInvocations: UINT64,
+ CPrimitives: UINT64,
+ PSInvocations: UINT64,
+ HSInvocations: UINT64,
+ DSInvocations: UINT64,
+ CSInvocations: UINT64,
+}}
+STRUCT!{struct D3D12_QUERY_DATA_SO_STATISTICS {
+ NumPrimitivesWritten: UINT64,
+ PrimitivesStorageNeeded: UINT64,
+}}
+STRUCT!{struct D3D12_STREAM_OUTPUT_BUFFER_VIEW {
+ BufferLocation: D3D12_GPU_VIRTUAL_ADDRESS,
+ SizeInBytes: UINT64,
+ BufferFilledSizeLocation: D3D12_GPU_VIRTUAL_ADDRESS,
+}}
+STRUCT!{struct D3D12_DRAW_ARGUMENTS {
+ VertexCountPerInstance: UINT,
+ InstanceCount: UINT,
+ StartVertexLocation: UINT,
+ StartInstanceLocation: UINT,
+}}
+STRUCT!{struct D3D12_DRAW_INDEXED_ARGUMENTS {
+ IndexCountPerInstance: UINT,
+ InstanceCount: UINT,
+ StartIndexLocation: UINT,
+ BaseVertexLocation: INT,
+ StartInstanceLocation: UINT,
+}}
+STRUCT!{struct D3D12_DISPATCH_ARGUMENTS {
+ ThreadGroupCountX: UINT,
+ ThreadGroupCountY: UINT,
+ ThreadGroupCountZ: UINT,
+}}
+STRUCT!{struct D3D12_VERTEX_BUFFER_VIEW {
+ BufferLocation: D3D12_GPU_VIRTUAL_ADDRESS,
+ SizeInBytes: UINT,
+ StrideInBytes: UINT,
+}}
+STRUCT!{struct D3D12_INDEX_BUFFER_VIEW {
+ BufferLocation: D3D12_GPU_VIRTUAL_ADDRESS,
+ SizeInBytes: UINT,
+ Format: DXGI_FORMAT,
+}}
+ENUM!{enum D3D12_INDIRECT_ARGUMENT_TYPE {
+ D3D12_INDIRECT_ARGUMENT_TYPE_DRAW = 0,
+ D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED = 1,
+ D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH = 2,
+ D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW = 3,
+ D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW = 4,
+ D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT = 5,
+ D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW = 6,
+ D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW = 7,
+ D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW = 8,
+}}
+STRUCT!{struct D3D12_INDIRECT_ARGUMENT_DESC_VertexBuffer {
+ Slot: UINT,
+}}
+STRUCT!{struct D3D12_INDIRECT_ARGUMENT_DESC_Constant {
+ RootParameterIndex: UINT,
+ DestOffsetIn32BitValues: UINT,
+ Num32BitValuesToSet: UINT,
+}}
+STRUCT!{struct D3D12_INDIRECT_ARGUMENT_DESC_ConstantBufferView {
+ RootParameterIndex: UINT,
+}}
+STRUCT!{struct D3D12_INDIRECT_ARGUMENT_DESC_ShaderResourceView {
+ RootParameterIndex: UINT,
+}}
+STRUCT!{struct D3D12_INDIRECT_ARGUMENT_DESC_UnorderedAccessView {
+ RootParameterIndex: UINT,
+}}
+UNION!{union D3D12_INDIRECT_ARGUMENT_DESC_u {
+ [u32; 3],
+ VertexBuffer VertexBuffer_mut: D3D12_INDIRECT_ARGUMENT_DESC_VertexBuffer,
+ Constant Constant_mut: D3D12_INDIRECT_ARGUMENT_DESC_Constant,
+ ConstantBufferView ConstantBufferView_mut: D3D12_INDIRECT_ARGUMENT_DESC_ConstantBufferView,
+ ShaderResourceView ShaderResourceView_mut: D3D12_INDIRECT_ARGUMENT_DESC_ShaderResourceView,
+ UnorderedAccessView UnorderedAccessView_mut: D3D12_INDIRECT_ARGUMENT_DESC_UnorderedAccessView,
+}}
+STRUCT!{struct D3D12_INDIRECT_ARGUMENT_DESC {
+ Type: D3D12_INDIRECT_ARGUMENT_TYPE,
+ u: D3D12_INDIRECT_ARGUMENT_DESC_u,
+}}
+STRUCT!{struct D3D12_COMMAND_SIGNATURE_DESC {
+ ByteStride: UINT,
+ NumArgumentDescs: UINT,
+ pArgumentDescs: *const D3D12_INDIRECT_ARGUMENT_DESC,
+ NodeMask: UINT,
+}}
+RIDL!{#[uuid(0xc4fec28f, 0x7966, 0x4e95, 0x9f, 0x94, 0xf4, 0x31, 0xcb, 0x56, 0xc3, 0xb8)]
+interface ID3D12Object(ID3D12ObjectVtbl): IUnknown(IUnknownVtbl) {
+ fn GetPrivateData(
+ guid: REFGUID,
+ pDataSize: *mut UINT,
+ pData: *mut c_void,
+ ) -> HRESULT,
+ fn SetPrivateData(
+ guid: REFGUID,
+ DataSize: UINT,
+ pData: *const c_void,
+ ) -> HRESULT,
+ fn SetPrivateDataInterface(
+ guid: REFGUID,
+ pData: *const IUnknown,
+ ) -> HRESULT,
+ fn SetName(
+ Name: LPCWSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x905db94b, 0xa00c, 0x4140, 0x9d, 0xf5, 0x2b, 0x64, 0xca, 0x9e, 0xa3, 0x57)]
+interface ID3D12DeviceChild(ID3D12DeviceChildVtbl): ID3D12Object(ID3D12ObjectVtbl) {
+ fn GetDevice(
+ riid: REFIID,
+ ppvDevice: *mut *mut c_void,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x63ee58fb, 0x1268, 0x4835, 0x86, 0xda, 0xf0, 0x08, 0xce, 0x62, 0xf0, 0xd6)]
+interface ID3D12Pageable(ID3D12PageableVtbl): ID3D12DeviceChild(ID3D12DeviceChildVtbl) {}}
+RIDL!{#[uuid(0x6b3b2502, 0x6e51, 0x45b3, 0x90, 0xee, 0x98, 0x84, 0x26, 0x5e, 0x8d, 0xf3)]
+interface ID3D12Heap(ID3D12HeapVtbl): ID3D12Pageable(ID3D12PageableVtbl) {
+ #[fixme] fn GetDesc() -> D3D12_HEAP_DESC,
+}}
+RIDL!{#[uuid(0x696442be, 0xa72e, 0x4059, 0xbc, 0x79, 0x5b, 0x5c, 0x98, 0x04, 0x0f, 0xad)]
+interface ID3D12Resource(ID3D12ResourceVtbl): ID3D12Pageable(ID3D12PageableVtbl) {
+ fn Map(
+ Subresource: UINT,
+ pReadRange: *const D3D12_RANGE,
+ ppData: *mut *mut c_void,
+ ) -> HRESULT,
+ fn Unmap(
+ Subresource: UINT,
+ pWrittenRange: *const D3D12_RANGE,
+ ) -> (),
+ #[fixme] fn GetDesc() -> D3D12_RESOURCE_DESC,
+ fn GetGPUVirtualAddress() -> D3D12_GPU_VIRTUAL_ADDRESS,
+ fn WriteToSubresource(
+ DstSubresource: UINT,
+ pDstBox: *const D3D12_BOX,
+ pSrcData: *const c_void,
+ SrcRowPitch: UINT,
+ SrcDepthPitch: UINT,
+ ) -> HRESULT,
+ fn ReadFromSubresource(
+ pDstData: *mut c_void,
+ DstRowPitch: UINT,
+ DstDepthPitch: UINT,
+ SrcSubresource: UINT,
+ pSrcBox: *const D3D12_BOX,
+ ) -> HRESULT,
+ fn GetHeapProperties(
+ pHeapProperties: *mut D3D12_HEAP_PROPERTIES,
+ pHeapFlags: *mut D3D12_HEAP_FLAGS,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x6102dee4, 0xaf59, 0x4b09, 0xb9, 0x99, 0xb4, 0x4d, 0x73, 0xf0, 0x9b, 0x24)]
+interface ID3D12CommandAllocator(ID3D12CommandAllocatorVtbl): ID3D12Pageable(ID3D12PageableVtbl) {
+ fn Reset() -> HRESULT,
+}}
+RIDL!{#[uuid(0x0a753dcf, 0xc4d8, 0x4b91, 0xad, 0xf6, 0xbe, 0x5a, 0x60, 0xd9, 0x5a, 0x76)]
+interface ID3D12Fence(ID3D12FenceVtbl): ID3D12Pageable(ID3D12PageableVtbl) {
+ fn GetCompletedValue() -> UINT64,
+ fn SetEventOnCompletion(
+ Value: UINT64,
+ hEvent: HANDLE,
+ ) -> HRESULT,
+ fn Signal(
+ Value: UINT64,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x765a30f3, 0xf624, 0x4c6f, 0xa8, 0x28, 0xac, 0xe9, 0x48, 0x62, 0x24, 0x45)]
+interface ID3D12PipelineState(ID3D12PipelineStateVtbl): ID3D12Pageable(ID3D12PageableVtbl) {
+ fn GetCachedBlob(
+ ppBlob: *mut *mut ID3DBlob,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8efb471d, 0x616c, 0x4f49, 0x90, 0xf7, 0x12, 0x7b, 0xb7, 0x63, 0xfa, 0x51)]
+interface ID3D12DescriptorHeap(ID3D12DescriptorHeapVtbl): ID3D12Pageable(ID3D12PageableVtbl) {
+ #[fixme] fn GetDesc() -> D3D12_DESCRIPTOR_HEAP_DESC,
+ #[fixme] fn GetCPUDescriptorHandleForHeapStart() -> D3D12_CPU_DESCRIPTOR_HANDLE,
+ #[fixme] fn GetGPUDescriptorHandleForHeapStart() -> D3D12_GPU_DESCRIPTOR_HANDLE,
+}}
+RIDL!{#[uuid(0x0d9658ae, 0xed45, 0x469e, 0xa6, 0x1d, 0x97, 0x0e, 0xc5, 0x83, 0xca, 0xb4)]
+interface ID3D12QueryHeap(ID3D12QueryHeapVtbl): ID3D12Pageable(ID3D12PageableVtbl) {}}
+RIDL!{#[uuid(0xc36a797c, 0xec80, 0x4f0a, 0x89, 0x85, 0xa7, 0xb2, 0x47, 0x50, 0x82, 0xd1)]
+interface ID3D12CommandSignature(ID3D12CommandSignatureVtbl):
+ ID3D12Pageable(ID3D12PageableVtbl) {}}
+RIDL!{#[uuid(0x7116d91c, 0xe7e4, 0x47ce, 0xb8, 0xc6, 0xec, 0x81, 0x68, 0xf4, 0x37, 0xe5)]
+interface ID3D12CommandList(ID3D12CommandListVtbl): ID3D12DeviceChild(ID3D12DeviceChildVtbl) {
+ fn GetType() -> D3D12_COMMAND_LIST_TYPE,
+}}
+RIDL!{#[uuid(0x5b160d0f, 0xac1b, 0x4185, 0x8b, 0xa8, 0xb3, 0xae, 0x42, 0xa5, 0xa4, 0x55)]
+interface ID3D12GraphicsCommandList(ID3D12GraphicsCommandListVtbl):
+ ID3D12CommandList(ID3D12CommandListVtbl) {
+ fn Close() -> HRESULT,
+ fn Reset(
+ pAllocator: *mut ID3D12CommandAllocator,
+ pInitialState: *mut ID3D12PipelineState,
+ ) -> HRESULT,
+ fn ClearState(
+ pPipelineState: *mut ID3D12PipelineState,
+ ) -> (),
+ fn DrawInstanced(
+ VertexCountPerInstance: UINT,
+ InstanceCount: UINT,
+ StartVertexLocation: UINT,
+ StartInstanceLocation: UINT,
+ ) -> (),
+ fn DrawIndexedInstanced(
+ IndexCountPerInstance: UINT,
+ InstanceCount: UINT,
+ StartIndexLocation: UINT,
+ BaseVertexLocation: INT,
+ StartInstanceLocation: UINT,
+ ) -> (),
+ fn Dispatch(
+ ThreadGroupCountX: UINT,
+ ThreadGroupCountY: UINT,
+ ThreadGroupCountZ: UINT,
+ ) -> (),
+ fn CopyBufferRegion(
+ pDstBuffer: *mut ID3D12Resource,
+ DstOffset: UINT64,
+ pSrcBuffer: *mut ID3D12Resource,
+ SrcOffset: UINT64,
+ NumBytes: UINT64,
+ ) -> (),
+ fn CopyTextureRegion(
+ pDst: *const D3D12_TEXTURE_COPY_LOCATION,
+ DstX: UINT,
+ DstY: UINT,
+ DstZ: UINT,
+ pSrc: *const D3D12_TEXTURE_COPY_LOCATION,
+ pSrcBox: *const D3D12_BOX,
+ ) -> (),
+ fn CopyResource(
+ pDstResource: *mut ID3D12Resource,
+ pSrcResource: *mut ID3D12Resource,
+ ) -> (),
+ fn CopyTiles(
+ pTiledResource: *mut ID3D12Resource,
+ pTileRegionStartCoordinate: *const D3D12_TILED_RESOURCE_COORDINATE,
+ pTileRegionSize: *const D3D12_TILE_REGION_SIZE,
+ pBuffer: *mut ID3D12Resource,
+ BufferStartOffsetInBytes: UINT64,
+ Flags: D3D12_TILE_COPY_FLAGS,
+ ) -> (),
+ fn ResolveSubresource(
+ pDstResource: *mut ID3D12Resource,
+ DstSubresource: UINT,
+ pSrcResource: *mut ID3D12Resource,
+ SrcSubresource: UINT,
+ Format: DXGI_FORMAT,
+ ) -> (),
+ fn IASetPrimitiveTopology(
+ PrimitiveTopology: D3D12_PRIMITIVE_TOPOLOGY,
+ ) -> (),
+ fn RSSetViewports(
+ NumViewports: UINT,
+ pViewports: *const D3D12_VIEWPORT,
+ ) -> (),
+ fn RSSetScissorRects(
+ NumRects: UINT,
+ pRects: *const D3D12_RECT,
+ ) -> (),
+ fn OMSetBlendFactor(
+ BlendFactor: *const [FLOAT; 4],
+ ) -> (),
+ fn OMSetStencilRef(
+ StencilRef: UINT,
+ ) -> (),
+ fn SetPipelineState(
+ pPipelineState: *mut ID3D12PipelineState,
+ ) -> (),
+ fn ResourceBarrier(
+ NumBarriers: UINT,
+ pBarriers: *const D3D12_RESOURCE_BARRIER,
+ ) -> (),
+ fn ExecuteBundle(
+ pCommandList: *mut ID3D12GraphicsCommandList,
+ ) -> (),
+ fn SetDescriptorHeaps(
+ NumDescriptorHeaps: UINT,
+ ppDescriptorHeaps: *mut *mut ID3D12DescriptorHeap,
+ ) -> (),
+ fn SetComputeRootSignature(
+ pRootSignature: *mut ID3D12RootSignature,
+ ) -> (),
+ fn SetGraphicsRootSignature(
+ pRootSignature: *mut ID3D12RootSignature,
+ ) -> (),
+ fn SetComputeRootDescriptorTable(
+ RootParameterIndex: UINT,
+ BaseDescriptor: D3D12_GPU_DESCRIPTOR_HANDLE,
+ ) -> (),
+ fn SetGraphicsRootDescriptorTable(
+ RootParameterIndex: UINT,
+ BaseDescriptor: D3D12_GPU_DESCRIPTOR_HANDLE,
+ ) -> (),
+ fn SetComputeRoot32BitConstant(
+ RootParameterIndex: UINT,
+ SrcData: UINT,
+ DestOffsetIn32BitValues: UINT,
+ ) -> (),
+ fn SetGraphicsRoot32BitConstant(
+ RootParameterIndex: UINT,
+ SrcData: UINT,
+ DestOffsetIn32BitValues: UINT,
+ ) -> (),
+ fn SetComputeRoot32BitConstants(
+ RootParameterIndex: UINT,
+ Num32BitValuesToSet: UINT,
+ pSrcData: *const c_void,
+ DestOffsetIn32BitValues: UINT,
+ ) -> (),
+ fn SetGraphicsRoot32BitConstants(
+ RootParameterIndex: UINT,
+ Num32BitValuesToSet: UINT,
+ pSrcData: *const c_void,
+ DestOffsetIn32BitValues: UINT,
+ ) -> (),
+ fn SetComputeRootConstantBufferView(
+ RootParameterIndex: UINT,
+ BufferLocation: D3D12_GPU_VIRTUAL_ADDRESS,
+ ) -> (),
+ fn SetGraphicsRootConstantBufferView(
+ RootParameterIndex: UINT,
+ BufferLocation: D3D12_GPU_VIRTUAL_ADDRESS,
+ ) -> (),
+ fn SetComputeRootShaderResourceView(
+ RootParameterIndex: UINT,
+ BufferLocation: D3D12_GPU_VIRTUAL_ADDRESS,
+ ) -> (),
+ fn SetGraphicsRootShaderResourceView(
+ RootParameterIndex: UINT,
+ BufferLocation: D3D12_GPU_VIRTUAL_ADDRESS,
+ ) -> (),
+ fn SetComputeRootUnorderedAccessView(
+ RootParameterIndex: UINT,
+ BufferLocation: D3D12_GPU_VIRTUAL_ADDRESS,
+ ) -> (),
+ fn SetGraphicsRootUnorderedAccessView(
+ RootParameterIndex: UINT,
+ BufferLocation: D3D12_GPU_VIRTUAL_ADDRESS,
+ ) -> (),
+ fn IASetIndexBuffer(
+ pView: *const D3D12_INDEX_BUFFER_VIEW,
+ ) -> (),
+ fn IASetVertexBuffers(
+ StartSlot: UINT,
+ NumViews: UINT,
+ pViews: *const D3D12_VERTEX_BUFFER_VIEW,
+ ) -> (),
+ fn SOSetTargets(
+ StartSlot: UINT,
+ NumViews: UINT,
+ pViews: *const D3D12_STREAM_OUTPUT_BUFFER_VIEW,
+ ) -> (),
+ fn OMSetRenderTargets(
+ NumRenderTargetDescriptors: UINT,
+ pRenderTargetDescriptors: *const D3D12_CPU_DESCRIPTOR_HANDLE,
+ RTsSingleHandleToDescriptorRange: BOOL,
+ pDepthStencilDescriptor: *const D3D12_CPU_DESCRIPTOR_HANDLE,
+ ) -> (),
+ fn ClearDepthStencilView(
+ DepthStencilView: D3D12_CPU_DESCRIPTOR_HANDLE,
+ ClearFlags: D3D12_CLEAR_FLAGS,
+ Depth: FLOAT,
+ Stencil: UINT8,
+ NumRects: UINT,
+ pRects: *const D3D12_RECT,
+ ) -> (),
+ fn ClearRenderTargetView(
+ RenderTargetView: D3D12_CPU_DESCRIPTOR_HANDLE,
+ ColorRGBA: *const [FLOAT; 4],
+ NumRects: UINT,
+ pRects: *const D3D12_RECT,
+ ) -> (),
+ fn ClearUnorderedAccessViewUint(
+ ViewGPUHandleInCurrentHeap: D3D12_GPU_DESCRIPTOR_HANDLE,
+ ViewCPUHandle: D3D12_CPU_DESCRIPTOR_HANDLE,
+ pResource: *mut ID3D12Resource,
+ Values: *const [UINT; 4],
+ NumRects: UINT,
+ pRects: *const D3D12_RECT,
+ ) -> (),
+ fn ClearUnorderedAccessViewFloat(
+ ViewGPUHandleInCurrentHeap: D3D12_GPU_DESCRIPTOR_HANDLE,
+ ViewCPUHandle: D3D12_CPU_DESCRIPTOR_HANDLE,
+ pResource: *mut ID3D12Resource,
+ Values: *const [FLOAT; 4],
+ NumRects: UINT,
+ pRects: *const D3D12_RECT,
+ ) -> (),
+ fn DiscardResource(
+ pResource: *mut ID3D12Resource,
+ pRegion: *const D3D12_DISCARD_REGION,
+ ) -> (),
+ fn BeginQuery(
+ pQueryHeap: *mut ID3D12QueryHeap,
+ Type: D3D12_QUERY_TYPE,
+ Index: UINT,
+ ) -> (),
+ fn EndQuery(
+ pQueryHeap: *mut ID3D12QueryHeap,
+ Type: D3D12_QUERY_TYPE,
+ Index: UINT,
+ ) -> (),
+ fn ResolveQueryData(
+ pQueryHeap: *mut ID3D12QueryHeap,
+ Type: D3D12_QUERY_TYPE,
+ StartIndex: UINT,
+ NumQueries: UINT,
+ pDestinationBuffer: *mut ID3D12Resource,
+ AlignedDestinationBufferOffset: UINT64,
+ ) -> (),
+ fn SetPredication(
+ pBuffer: *mut ID3D12Resource,
+ AlignedBufferOffset: UINT64,
+ Operation: D3D12_PREDICATION_OP,
+ ) -> (),
+ fn SetMarker(
+ Metadata: UINT,
+ pData: *const c_void,
+ Size: UINT,
+ ) -> (),
+ fn BeginEvent(
+ Metadata: UINT,
+ pData: *const c_void,
+ Size: UINT,
+ ) -> (),
+ fn EndEvent() -> (),
+ fn ExecuteIndirect(
+ pCommandSignature: *mut ID3D12CommandSignature,
+ MaxCommandCount: UINT,
+ pArgumentBuffer: *mut ID3D12Resource,
+ ArgumentBufferOffset: UINT64,
+ pCountBuffer: *mut ID3D12Resource,
+ CountBufferOffset: UINT64,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x553103fb, 0x1fe7, 0x4557, 0xbb, 0x38, 0x94, 0x6d, 0x7d, 0x0e, 0x7c, 0xa7)]
+interface ID3D12GraphicsCommandList1(ID3D12GraphicsCommandList1Vtbl):
+ ID3D12GraphicsCommandList(ID3D12GraphicsCommandListVtbl) {
+ fn AtomicCopyBufferUINT(
+ pDstBuffer: *mut ID3D12Resource,
+ DstOffset: UINT64,
+ pSrcBuffer: *mut ID3D12Resource,
+ SrcOffset: UINT64,
+ Dependencies: UINT,
+ ppDependentResources: *const *mut ID3D12Resource,
+ pDependentSubresourceRanges: *mut D3D12_SUBRESOURCE_RANGE_UINT64,
+ ) -> (),
+ fn AtomicCopyBufferUINT64(
+ pDstBuffer: *mut ID3D12Resource,
+ DstOffset: UINT64,
+ pSrcBuffer: *mut ID3D12Resource,
+ SrcOffset: UINT64,
+ Dependencies: UINT,
+ ppDependentResources: *const *mut ID3D12Resource,
+ pDependentSubresourceRanges: *mut D3D12_SUBRESOURCE_RANGE_UINT64,
+ ) -> (),
+ fn OMSetDepthBounds(
+ Min: FLOAT,
+ Max: FLOAT,
+ ) -> (),
+ fn SetSamplePositions(
+ NumSamplesPerPixel: UINT,
+ NumPixels: UINT,
+ pSamplePositions: *mut D3D12_SAMPLE_POSITION,
+ ) -> (),
+ fn ResolveSubresourceRegion(
+ pDstResource: *mut ID3D12Resource,
+ DstSubresource: UINT,
+ DstX: UINT,
+ DstY: UINT,
+ pSrcResource: *mut ID3D12Resource,
+ SrcSubresource: UINT,
+ pSrcRect: *mut D3D12_RECT,
+ Format: DXGI_FORMAT,
+ ResolveMode: D3D12_RESOLVE_MODE,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x0ec870a6, 0x5d7e, 0x4c22, 0x8c, 0xfc, 0x5b, 0xaa, 0xe0, 0x76, 0x16, 0xed)]
+interface ID3D12CommandQueue(ID3D12CommandQueueVtbl): ID3D12Pageable(ID3D12PageableVtbl) {
+ fn UpdateTileMappings(
+ pResource: *mut ID3D12Resource,
+ NumResourceRegions: UINT,
+ pResourceRegionStartCoordinates: *const D3D12_TILED_RESOURCE_COORDINATE,
+ pResourceRegionSizes: *const D3D12_TILE_REGION_SIZE,
+ pHeap: *mut ID3D12Heap,
+ NumRanges: UINT,
+ pRangeFlags: *const D3D12_TILE_RANGE_FLAGS,
+ pHeapRangeStartOffsets: *const UINT,
+ pRangeTileCounts: *const UINT,
+ Flags: D3D12_TILE_MAPPING_FLAGS,
+ ) -> (),
+ fn CopyTileMappings(
+ pDstResource: *mut ID3D12Resource,
+ pDstRegionStartCoordinate: *const D3D12_TILED_RESOURCE_COORDINATE,
+ pSrcResource: *mut ID3D12Resource,
+ pSrcRegionStartCoordinate: *const D3D12_TILED_RESOURCE_COORDINATE,
+ pRegionSize: *const D3D12_TILE_REGION_SIZE,
+ Flags: D3D12_TILE_MAPPING_FLAGS,
+ ) -> (),
+ fn ExecuteCommandLists(
+ NumCommandLists: UINT,
+ ppCommandLists: *const *mut ID3D12CommandList,
+ ) -> (),
+ fn SetMarker(
+ Metadata: UINT,
+ pData: *const c_void,
+ Size: UINT,
+ ) -> (),
+ fn BeginEvent(
+ Metadata: UINT,
+ pData: *const c_void,
+ Size: UINT,
+ ) -> (),
+ fn EndEvent() -> (),
+ fn Signal(
+ pFence: *mut ID3D12Fence,
+ Value: UINT64,
+ ) -> HRESULT,
+ fn Wait(
+ pFence: *mut ID3D12Fence,
+ Value: UINT64,
+ ) -> HRESULT,
+ fn GetTimestampFrequency(
+ pFrequency: *mut UINT64,
+ ) -> HRESULT,
+ fn GetClockCalibration(
+ pGpuTimestamp: *mut UINT64,
+ pCpuTimestamp: *mut UINT64,
+ ) -> HRESULT,
+ #[fixme] fn GetDesc() -> D3D12_COMMAND_QUEUE_DESC,
+}}
+RIDL!{#[uuid(0x189819f1, 0x1db6, 0x4b57, 0xbe, 0x54, 0x18, 0x21, 0x33, 0x9b, 0x85, 0xf7)]
+interface ID3D12Device(ID3D12DeviceVtbl): ID3D12Object(ID3D12ObjectVtbl) {
+ fn GetNodeCount() -> UINT,
+ fn CreateCommandQueue(
+ pDesc: *const D3D12_COMMAND_QUEUE_DESC,
+ riid: REFGUID,
+ ppCommandQueue: *mut *mut c_void,
+ ) -> HRESULT,
+ fn CreateCommandAllocator(
+ type_: D3D12_COMMAND_LIST_TYPE,
+ riid: REFGUID,
+ ppCommandAllocator: *mut *mut c_void,
+ ) -> HRESULT,
+ fn CreateGraphicsPipelineState(
+ pDesc: *const D3D12_GRAPHICS_PIPELINE_STATE_DESC,
+ riid: REFGUID,
+ ppPipelineState: *mut *mut c_void,
+ ) -> HRESULT,
+ fn CreateComputePipelineState(
+ pDesc: *const D3D12_COMPUTE_PIPELINE_STATE_DESC,
+ riid: REFGUID,
+ ppPipelineState: *mut *mut c_void,
+ ) -> HRESULT,
+ fn CreateCommandList(
+ nodeMask: UINT,
+ type_: D3D12_COMMAND_LIST_TYPE,
+ pCommandAllocator: *mut ID3D12CommandAllocator,
+ pInitialState: *mut ID3D12PipelineState,
+ riid: REFGUID,
+ ppCommandList: *mut *mut c_void,
+ ) -> HRESULT,
+ fn CheckFeatureSupport(
+ Feature: D3D12_FEATURE,
+ pFeatureSupportData: *mut c_void,
+ FeatureSupportDataSize: UINT,
+ ) -> HRESULT,
+ fn CreateDescriptorHeap(
+ pDescriptorHeapDesc: *const D3D12_DESCRIPTOR_HEAP_DESC,
+ riid: REFGUID,
+ ppvHeap: *mut *mut c_void,
+ ) -> HRESULT,
+ fn GetDescriptorHandleIncrementSize(
+ DescriptorHeapType: D3D12_DESCRIPTOR_HEAP_TYPE,
+ ) -> UINT,
+ fn CreateRootSignature(
+ nodeMask: UINT,
+ pBlobWithRootSignature: *const c_void,
+ blobLengthInBytes: SIZE_T,
+ riid: REFGUID,
+ ppvRootSignature: *mut *mut c_void,
+ ) -> HRESULT,
+ fn CreateConstantBufferView(
+ pDesc: *const D3D12_CONSTANT_BUFFER_VIEW_DESC,
+ DestDescriptor: D3D12_CPU_DESCRIPTOR_HANDLE,
+ ) -> (),
+ fn CreateShaderResourceView(
+ pResource: *mut ID3D12Resource,
+ pDesc: *const D3D12_SHADER_RESOURCE_VIEW_DESC,
+ DestDescriptor: D3D12_CPU_DESCRIPTOR_HANDLE,
+ ) -> (),
+ fn CreateUnorderedAccessView(
+ pResource: *mut ID3D12Resource,
+ pCounterResource: *mut ID3D12Resource,
+ pDesc: *const D3D12_UNORDERED_ACCESS_VIEW_DESC,
+ DestDescriptor: D3D12_CPU_DESCRIPTOR_HANDLE,
+ ) -> (),
+ fn CreateRenderTargetView(
+ pResource: *mut ID3D12Resource,
+ pDesc: *const D3D12_RENDER_TARGET_VIEW_DESC,
+ DestDescriptor: D3D12_CPU_DESCRIPTOR_HANDLE,
+ ) -> (),
+ fn CreateDepthStencilView(
+ pResource: *mut ID3D12Resource,
+ pDesc: *const D3D12_DEPTH_STENCIL_VIEW_DESC,
+ DestDescriptor: D3D12_CPU_DESCRIPTOR_HANDLE,
+ ) -> (),
+ fn CreateSampler(
+ pDesc: *const D3D12_SAMPLER_DESC,
+ DestDescriptor: D3D12_CPU_DESCRIPTOR_HANDLE,
+ ) -> (),
+ fn CopyDescriptors(
+ NumDestDescriptorRanges: UINT,
+ pDestDescriptorRangeStarts: *const D3D12_CPU_DESCRIPTOR_HANDLE,
+ pDestDescriptorRangeSizes: *const UINT,
+ NumSrcDescriptorRanges: UINT,
+ pSrcDescriptorRangeStarts: *const D3D12_CPU_DESCRIPTOR_HANDLE,
+ pSrcDescriptorRangeSizes: *const UINT,
+ DescriptorHeapsType: D3D12_DESCRIPTOR_HEAP_TYPE,
+ ) -> (),
+ fn CopyDescriptorsSimple(
+ NumDescriptors: UINT,
+ DestDescriptorRangeStart: D3D12_CPU_DESCRIPTOR_HANDLE,
+ SrcDescriptorRangeStart: D3D12_CPU_DESCRIPTOR_HANDLE,
+ DescriptorHeapsType: D3D12_DESCRIPTOR_HEAP_TYPE,
+ ) -> (),
+ #[fixme] fn GetResourceAllocationInfo(
+ visibleMask: UINT,
+ numResourceDescs: UINT,
+ pResourceDescs: *const D3D12_RESOURCE_DESC,
+ ) -> D3D12_RESOURCE_ALLOCATION_INFO,
+ #[fixme] fn GetCustomHeapProperties(
+ nodeMask: UINT,
+ heapType: D3D12_HEAP_TYPE,
+ ) -> D3D12_HEAP_PROPERTIES,
+ fn CreateCommittedResource(
+ pHeapProperties: *const D3D12_HEAP_PROPERTIES,
+ HeapFlags: D3D12_HEAP_FLAGS,
+ pResourceDesc: *const D3D12_RESOURCE_DESC,
+ InitialResourceState: D3D12_RESOURCE_STATES,
+ pOptimizedClearValue: *const D3D12_CLEAR_VALUE,
+ riidResource: REFGUID,
+ ppvResource: *mut *mut c_void,
+ ) -> HRESULT,
+ fn CreateHeap(
+ pDesc: *const D3D12_HEAP_DESC,
+ riid: REFGUID,
+ ppvHeap: *mut *mut c_void,
+ ) -> HRESULT,
+ fn CreatePlacedResource(
+ pHeap: *mut ID3D12Heap,
+ HeapOffset: UINT64,
+ pDesc: *const D3D12_RESOURCE_DESC,
+ InitialState: D3D12_RESOURCE_STATES,
+ pOptimizedClearValue: *const D3D12_CLEAR_VALUE,
+ riid: REFGUID,
+ ppvResource: *mut *mut c_void,
+ ) -> HRESULT,
+ fn CreateReservedResource(
+ pDesc: *const D3D12_RESOURCE_DESC,
+ InitialState: D3D12_RESOURCE_STATES,
+ pOptimizedClearValue: *const D3D12_CLEAR_VALUE,
+ riid: REFGUID,
+ ppvResource: *mut *mut c_void,
+ ) -> HRESULT,
+ fn CreateSharedHandle(
+ pObject: *mut ID3D12DeviceChild,
+ pAttributes: *const SECURITY_ATTRIBUTES,
+ Access: DWORD,
+ Name: LPCWSTR,
+ pHandle: *mut HANDLE,
+ ) -> HRESULT,
+ fn OpenSharedHandle(
+ NTHandle: HANDLE,
+ riid: REFGUID,
+ ppvObj: *mut *mut c_void,
+ ) -> HRESULT,
+ fn OpenSharedHandleByName(
+ Name: LPCWSTR,
+ Access: DWORD,
+ pNTHandle: *mut HANDLE,
+ ) -> HRESULT,
+ fn MakeResident(
+ NumObjects: UINT,
+ ppObjects: *mut *mut ID3D12Pageable,
+ ) -> HRESULT,
+ fn Evict(
+ NumObjects: UINT,
+ ppObjects: *mut *mut ID3D12Pageable,
+ ) -> HRESULT,
+ fn CreateFence(
+ InitialValue: UINT64,
+ Flags: D3D12_FENCE_FLAGS,
+ riid: REFGUID,
+ ppFence: *mut *mut c_void,
+ ) -> HRESULT,
+ fn GetDeviceRemovedReason() -> HRESULT,
+ fn GetCopyableFootprints(
+ pResourceDesc: *const D3D12_RESOURCE_DESC,
+ FirstSubresource: UINT,
+ NumSubresources: UINT,
+ BaseOffset: UINT64,
+ pLayouts: *mut D3D12_PLACED_SUBRESOURCE_FOOTPRINT,
+ pNumRows: *mut UINT,
+ pRowSizeInBytes: *mut UINT64,
+ pTotalBytes: *mut UINT64,
+ ) -> (),
+ fn CreateQueryHeap(
+ pDesc: *const D3D12_QUERY_HEAP_DESC,
+ riid: REFGUID,
+ ppvHeap: *mut *mut c_void,
+ ) -> HRESULT,
+ fn SetStablePowerState(
+ Enable: BOOL,
+ ) -> HRESULT,
+ fn CreateCommandSignature(
+ pDesc: *const D3D12_COMMAND_SIGNATURE_DESC,
+ pRootSignature: *mut ID3D12RootSignature,
+ riid: REFGUID,
+ ppvCommandSignature: *mut *mut c_void,
+ ) -> HRESULT,
+ fn GetResourceTiling(
+ pTiledResource: *mut ID3D12Resource,
+ pNumTilesForEntireResource: *mut UINT,
+ pPackedMipDesc: *mut D3D12_PACKED_MIP_INFO,
+ pStandardTileShapeForNonPackedMips: *mut D3D12_TILE_SHAPE,
+ pNumSubresourceTilings: *mut UINT,
+ FirstSubresourceTilingToGet: UINT,
+ pSubresourceTilingsForNonPackedMips: *mut D3D12_SUBRESOURCE_TILING,
+ ) -> (),
+ #[fixme] fn GetAdapterLuid() -> LUID,
+}}
+RIDL!{#[uuid(0xc64226a8, 0x9201, 0x46af, 0xb4, 0xcc, 0x53, 0xfb, 0x9f, 0xf7, 0x41, 0x4f)]
+interface ID3D12PipelineLibrary(ID3D12PipelineLibraryVtbl):
+ ID3D12DeviceChild(ID3D12DeviceChildVtbl) {
+ fn StorePipeline(
+ pName: LPCWSTR,
+ pPipeline: *mut ID3D12PipelineState,
+ ) -> HRESULT,
+ fn LoadGraphicsPipeline(
+ pName: LPCWSTR,
+ pDesc: *const D3D12_GRAPHICS_PIPELINE_STATE_DESC,
+ riid: REFIID,
+ ppPipelineState: *mut *mut c_void,
+ ) -> HRESULT,
+ fn LoadComputePipeline(
+ pName: LPCWSTR,
+ pDesc: *const D3D12_COMPUTE_PIPELINE_STATE_DESC,
+ riid: REFIID,
+ ppPipelineState: *mut *mut c_void,
+ ) -> HRESULT,
+ fn GetSerializedSize() -> SIZE_T,
+ fn Serialize(
+ pData: *mut c_void,
+ DataSizeInBytes: SIZE_T,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x80eabf42, 0x2568, 0x4e5e, 0xbd, 0x82, 0xc3, 0x7f, 0x86, 0x96, 0x1d, 0xc3)]
+interface ID3D12PipelineLibrary1(ID3D12PipelineLibrary1Vtbl):
+ ID3D12PipelineLibrary(ID3D12PipelineLibraryVtbl) {
+ fn LoadPipeline(
+ pName: LPCWSTR,
+ pDesc: *const D3D12_PIPELINE_STATE_STREAM_DESC,
+ riid: REFIID,
+ ppPipelineState: *mut *mut c_void,
+ ) -> HRESULT,
+}}
+ENUM!{enum D3D12_MULTIPLE_FENCE_WAIT_FLAGS {
+ D3D12_MULTIPLE_FENCE_WAIT_FLAG_NONE = 0,
+ D3D12_MULTIPLE_FENCE_WAIT_FLAG_ANY = 0x1,
+ D3D12_MULTIPLE_FENCE_WAIT_FLAG_ALL = 0,
+}}
+ENUM!{enum D3D12_RESIDENCY_PRIORITY {
+ D3D12_RESIDENCY_PRIORITY_MINIMUM = 0x28000000,
+ D3D12_RESIDENCY_PRIORITY_LOW = 0x50000000,
+ D3D12_RESIDENCY_PRIORITY_NORMAL = 0x78000000,
+ D3D12_RESIDENCY_PRIORITY_HIGH = 0xa0010000,
+ D3D12_RESIDENCY_PRIORITY_MAXIMUM = 0xc8000000,
+}}
+RIDL!{#[uuid(0x77acce80, 0x638e, 0x4e65, 0x88, 0x95, 0xc1, 0xf2, 0x33, 0x86, 0x86, 0x3e)]
+interface ID3D12Device1(ID3D12Device1Vtbl): ID3D12Device(ID3D12DeviceVtbl) {
+ fn CreatePipelineLibrary(
+ pLibraryBlob: *const c_void,
+ BlobLength: SIZE_T,
+ riid: REFIID,
+ ppPipelineLibrary: *mut *mut c_void,
+ ) -> HRESULT,
+ fn SetEventOnMultipleFenceCompletion(
+ ppFences: *const *mut ID3D12Fence,
+ pFenceValues: *const UINT64,
+ NumFences: UINT,
+ Flags: D3D12_MULTIPLE_FENCE_WAIT_FLAGS,
+ hEvent: HANDLE,
+ ) -> HRESULT,
+ fn SetResidencyPriority(
+ NumObjects: UINT,
+ ppObjects: *const *mut ID3D12Pageable,
+ pPriorities: *const D3D12_RESIDENCY_PRIORITY,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x30baa41e, 0xb15b, 0x475c, 0xa0, 0xbb, 0x1a, 0xf5, 0xc5, 0xb6, 0x43, 0x28)]
+interface ID3D12Device2(ID3D12Device2Vtbl): ID3D12Device1(ID3D12Device1Vtbl) {
+ fn CreatePipelineState(
+ pDesc: *const D3D12_PIPELINE_STATE_STREAM_DESC,
+ riid: REFIID,
+ ppPipelineState: *mut *mut c_void,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x7071e1f0, 0xe84b, 0x4b33, 0x97, 0x4f, 0x12, 0xfa, 0x49, 0xde, 0x65, 0xc5)]
+interface ID3D12Tools(ID3D12ToolsVtbl): IUnknown(IUnknownVtbl) {
+ fn EnableShaderInstrumentation(
+ bEnable: BOOL,
+ ) -> (),
+ fn ShaderInstrumentationEnabled() -> BOOL,
+}}
+STRUCT!{struct D3D12_SUBRESOURCE_DATA {
+ pData: *const c_void,
+ RowPitch: LONG_PTR,
+ SlicePitch: LONG_PTR,
+}}
+STRUCT!{struct D3D12_MEMCPY_DEST {
+ pData: *mut c_void,
+ RowPitch: SIZE_T,
+ SlicePitch: SIZE_T,
+}}
+FN!{stdcall PFN_D3D12_CREATE_DEVICE(
+ *mut IUnknown,
+ D3D_FEATURE_LEVEL,
+ REFIID,
+ *mut *mut c_void,
+) -> HRESULT}
+extern "system" {
+ pub fn D3D12CreateDevice(
+ pAdapter: *mut IUnknown,
+ MinimumFeatureLevel: D3D_FEATURE_LEVEL,
+ riid: REFGUID,
+ ppDevice: *mut *mut c_void,
+ ) -> HRESULT;
+}
+FN!{stdcall PFN_D3D12_GET_DEBUG_INTERFACE(
+ REFIID,
+ *mut *mut c_void,
+) -> HRESULT}
+extern "system" {
+ pub fn D3D12GetDebugInterface(
+ riid: REFGUID,
+ ppvDebug: *mut *mut c_void,
+ ) -> HRESULT;
+ pub fn D3D12EnableExperimentalFeatures(
+ NumFeatures: UINT,
+ pIIDs: *const IID,
+ pConfigurationStructs: *mut c_void,
+ pConfigurationStructSizes: *mut UINT,
+ ) -> HRESULT;
+}
+DEFINE_GUID!{IID_ID3D12Object,
+ 0xc4fec28f, 0x7966, 0x4e95, 0x9f, 0x94, 0xf4, 0x31, 0xcb, 0x56, 0xc3, 0xb8}
+DEFINE_GUID!{IID_ID3D12DeviceChild,
+ 0x905db94b, 0xa00c, 0x4140, 0x9d, 0xf5, 0x2b, 0x64, 0xca, 0x9e, 0xa3, 0x57}
+DEFINE_GUID!{IID_ID3D12RootSignature,
+ 0xc54a6b66, 0x72df, 0x4ee8, 0x8b, 0xe5, 0xa9, 0x46, 0xa1, 0x42, 0x92, 0x14}
+DEFINE_GUID!{IID_ID3D12RootSignatureDeserializer,
+ 0x34AB647B, 0x3CC8, 0x46AC, 0x84, 0x1B, 0xC0, 0x96, 0x56, 0x45, 0xC0, 0x46}
+DEFINE_GUID!{IID_ID3D12VersionedRootSignatureDeserializer,
+ 0x7F91CE67, 0x090C, 0x4BB7, 0xB7, 0x8E, 0xED, 0x8F, 0xF2, 0xE3, 0x1D, 0xA0}
+DEFINE_GUID!{IID_ID3D12Pageable,
+ 0x63ee58fb, 0x1268, 0x4835, 0x86, 0xda, 0xf0, 0x08, 0xce, 0x62, 0xf0, 0xd6}
+DEFINE_GUID!{IID_ID3D12Heap,
+ 0x6b3b2502, 0x6e51, 0x45b3, 0x90, 0xee, 0x98, 0x84, 0x26, 0x5e, 0x8d, 0xf3}
+DEFINE_GUID!{IID_ID3D12Resource,
+ 0x696442be, 0xa72e, 0x4059, 0xbc, 0x79, 0x5b, 0x5c, 0x98, 0x04, 0x0f, 0xad}
+DEFINE_GUID!{IID_ID3D12CommandAllocator,
+ 0x6102dee4, 0xaf59, 0x4b09, 0xb9, 0x99, 0xb4, 0x4d, 0x73, 0xf0, 0x9b, 0x24}
+DEFINE_GUID!{IID_ID3D12Fence,
+ 0x0a753dcf, 0xc4d8, 0x4b91, 0xad, 0xf6, 0xbe, 0x5a, 0x60, 0xd9, 0x5a, 0x76}
+DEFINE_GUID!{IID_ID3D12PipelineState,
+ 0x765a30f3, 0xf624, 0x4c6f, 0xa8, 0x28, 0xac, 0xe9, 0x48, 0x62, 0x24, 0x45}
+DEFINE_GUID!{IID_ID3D12DescriptorHeap,
+ 0x8efb471d, 0x616c, 0x4f49, 0x90, 0xf7, 0x12, 0x7b, 0xb7, 0x63, 0xfa, 0x51}
+DEFINE_GUID!{IID_ID3D12QueryHeap,
+ 0x0d9658ae, 0xed45, 0x469e, 0xa6, 0x1d, 0x97, 0x0e, 0xc5, 0x83, 0xca, 0xb4}
+DEFINE_GUID!{IID_ID3D12CommandSignature,
+ 0xc36a797c, 0xec80, 0x4f0a, 0x89, 0x85, 0xa7, 0xb2, 0x47, 0x50, 0x82, 0xd1}
+DEFINE_GUID!{IID_ID3D12CommandList,
+ 0x7116d91c, 0xe7e4, 0x47ce, 0xb8, 0xc6, 0xec, 0x81, 0x68, 0xf4, 0x37, 0xe5}
+DEFINE_GUID!{IID_ID3D12GraphicsCommandList,
+ 0x5b160d0f, 0xac1b, 0x4185, 0x8b, 0xa8, 0xb3, 0xae, 0x42, 0xa5, 0xa4, 0x55}
+DEFINE_GUID!{IID_ID3D12GraphicsCommandList1,
+ 0x553103fb, 0x1fe7, 0x4557, 0xbb, 0x38, 0x94, 0x6d, 0x7d, 0x0e, 0x7c, 0xa7}
+DEFINE_GUID!{IID_ID3D12CommandQueue,
+ 0x0ec870a6, 0x5d7e, 0x4c22, 0x8c, 0xfc, 0x5b, 0xaa, 0xe0, 0x76, 0x16, 0xed}
+DEFINE_GUID!{IID_ID3D12Device,
+ 0x189819f1, 0x1db6, 0x4b57, 0xbe, 0x54, 0x18, 0x21, 0x33, 0x9b, 0x85, 0xf7}
+DEFINE_GUID!{IID_ID3D12PipelineLibrary,
+ 0xc64226a8, 0x9201, 0x46af, 0xb4, 0xcc, 0x53, 0xfb, 0x9f, 0xf7, 0x41, 0x4f}
+DEFINE_GUID!{IID_ID3D12PipelineLibrary1,
+ 0x80eabf42, 0x2568, 0x4e5e, 0xbd, 0x82, 0xc3, 0x7f, 0x86, 0x96, 0x1d, 0xc3}
+DEFINE_GUID!{IID_ID3D12Device1,
+ 0x77acce80, 0x638e, 0x4e65, 0x88, 0x95, 0xc1, 0xf2, 0x33, 0x86, 0x86, 0x3e}
+DEFINE_GUID!{IID_ID3D12Device2,
+ 0x30baa41e, 0xb15b, 0x475c, 0xa0, 0xbb, 0x1a, 0xf5, 0xc5, 0xb6, 0x43, 0x28}
+DEFINE_GUID!{IID_ID3D12Tools,
+ 0x7071e1f0, 0xe84b, 0x4b33, 0x97, 0x4f, 0x12, 0xfa, 0x49, 0xde, 0x65, 0xc5}
diff --git a/vendor/winapi/src/um/d3d12sdklayers.rs b/vendor/winapi/src/um/d3d12sdklayers.rs
new file mode 100644
index 000000000..bb9535ccf
--- /dev/null
+++ b/vendor/winapi/src/um/d3d12sdklayers.rs
@@ -0,0 +1,1364 @@
+// 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 ctypes::{c_char, c_void};
+use shared::basetsd::{SIZE_T, UINT64};
+use shared::minwindef::{BOOL, FLOAT, UINT};
+use um::d3d12::ID3D12Resource;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPCSTR};
+RIDL!{#[uuid(0x344488b7, 0x6846, 0x474b, 0xb9, 0x89, 0xf0, 0x27, 0x44, 0x82, 0x45, 0xe0)]
+interface ID3D12Debug(ID3D12DebugVtbl): IUnknown(IUnknownVtbl) {
+ fn EnableDebugLayer() -> (),
+}}
+RIDL!{#[uuid(0xaffaa4ca, 0x63fe, 0x4d8e, 0xb8, 0xad, 0x15, 0x90, 0x00, 0xaf, 0x43, 0x04)]
+interface ID3D12Debug1(ID3D12Debug1Vtbl): IUnknown(IUnknownVtbl) {
+ fn EnableDebugLayer() -> (),
+ fn SetEnableGPUBasedValidation(
+ Enable: BOOL,
+ ) -> (),
+ fn SetEnableSynchronizedCommandQueueValidation(
+ Enable: BOOL,
+ ) -> (),
+}}
+ENUM!{enum D3D12_GPU_BASED_VALIDATION_FLAGS {
+ D3D12_GPU_BASED_VALIDATION_FLAGS_NONE = 0,
+ D3D12_GPU_BASED_VALIDATION_FLAGS_DISABLE_STATE_TRACKING = 0x01,
+}}
+RIDL!{#[uuid(0x93a665c4, 0xa3b2, 0x4e5d, 0xb6, 0x92, 0xa2, 0x6a, 0xe1, 0x4e, 0x33, 0x74)]
+interface ID3D12Debug2(ID3D12Debug2Vtbl): IUnknown(IUnknownVtbl) {
+ fn SetGPUBasedValidationFlags(
+ Flags: D3D12_GPU_BASED_VALIDATION_FLAGS,
+ ) -> (),
+}}
+ENUM!{enum D3D12_RLDO_FLAGS {
+ D3D12_RLDO_NONE = 0,
+ D3D12_RLDO_SUMMARY = 0x1,
+ D3D12_RLDO_DETAIL = 0x2,
+ D3D12_RLDO_IGNORE_INTERNAL = 0x4,
+}}
+ENUM!{enum D3D12_DEBUG_DEVICE_PARAMETER_TYPE {
+ D3D12_DEBUG_DEVICE_PARAMETER_FEATURE_FLAGS = 0,
+ D3D12_DEBUG_DEVICE_PARAMETER_GPU_BASED_VALIDATION_SETTINGS = 1,
+ D3D12_DEBUG_DEVICE_PARAMETER_GPU_SLOWDOWN_PERFORMANCE_FACTOR = 2,
+}}
+ENUM!{enum D3D12_DEBUG_FEATURE {
+ D3D12_DEBUG_FEATURE_NONE = 0,
+ D3D12_DEBUG_FEATURE_TREAT_BUNDLE_AS_DRAW = 0x1,
+ D3D12_DEBUG_FEATURE_TREAT_BUNDLE_AS_DISPATCH = 0x2,
+ D3D12_DEBUG_FEATURE_DISABLE_VIRTUALIZED_BUNDLES_VALIDATION = 0x04,
+ D3D12_DEBUG_FEATURE_VALID_MASK = 0x7,
+}}
+ENUM!{enum D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE {
+ D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_NONE = 0,
+ D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_STATE_TRACKING_ONLY = 1,
+ D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_UNGUARDED_VALIDATION = 2,
+ D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_GUARDED_VALIDATION = 3,
+ NUM_D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODES = 4,
+}}
+ENUM!{enum D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS {
+ D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_NONE = 0,
+ D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_FRONT_LOAD_CREATE_TRACKING_ONLY_SHADERS
+ = 0x01,
+ D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_FRONT_LOAD_CREATE_UNGUARDED_VALIDATION_SHADERS = 0x02,
+ D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_FRONT_LOAD_CREATE_GUARDED_VALIDATION_SHADERS = 0x04,
+ D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS_VALID_MASK = 0x07,
+}}
+STRUCT!{struct D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS {
+ MaxMessagesPerCommandList: UINT,
+ DefaultShaderPatchMode: D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE,
+ PipelineStateCreateFlags: D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS,
+}}
+STRUCT!{struct D3D12_DEBUG_DEVICE_GPU_SLOWDOWN_PERFORMANCE_FACTOR {
+ SlowdownFactor: FLOAT,
+}}
+RIDL!{#[uuid(0x3febd6dd, 0x4973, 0x4787, 0x81, 0x94, 0xe4, 0x5f, 0x9e, 0x28, 0x92, 0x3e)]
+interface ID3D12DebugDevice1(ID3D12DebugDevice1Vtbl): IUnknown(IUnknownVtbl) {
+ fn SetDebugParameter(
+ Type: D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE,
+ pData: *const c_void,
+ DataSize: UINT,
+ ) -> HRESULT,
+ fn GetDebugParameter(
+ Type: D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE,
+ pData: *mut c_void,
+ DataSize: UINT,
+ ) -> HRESULT,
+ fn ReportLiveDeviceObjects(
+ Flags: D3D12_RLDO_FLAGS,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3febd6dd, 0x4973, 0x4787, 0x81, 0x94, 0xe4, 0x5f, 0x9e, 0x28, 0x92, 0x3e)]
+interface ID3D12DebugDevice(ID3D12DebugDeviceVtbl): IUnknown(IUnknownVtbl) {
+ fn SetFeatureMask(
+ Mask: D3D12_DEBUG_FEATURE,
+ ) -> HRESULT,
+ fn GetFeatureMask() -> D3D12_DEBUG_FEATURE,
+ fn ReportLiveDeviceObjects(
+ Flags: D3D12_RLDO_FLAGS,
+ ) -> HRESULT,
+}}
+DEFINE_GUID!{DXGI_DEBUG_D3D12,
+ 0xcf59a98c, 0xa950, 0x4326, 0x91, 0xef, 0x9b, 0xba, 0xa1, 0x7b, 0xfd, 0x95}
+RIDL!{#[uuid(0x09e0bf36, 0x54ac, 0x484f, 0x88, 0x47, 0x4b, 0xae, 0xea, 0xb6, 0x05, 0x3a)]
+interface ID3D12DebugCommandQueue(ID3D12DebugCommandQueueVtbl): IUnknown(IUnknownVtbl) {
+ fn AssertResourceState(
+ pResource: *mut ID3D12Resource,
+ Subresource: UINT,
+ State: UINT,
+ ) -> BOOL,
+}}
+ENUM!{enum D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE {
+ D3D12_DEBUG_COMMAND_LIST_PARAMETER_GPU_BASED_VALIDATION_SETTINGS = 0,
+}}
+STRUCT!{struct D3D12_DEBUG_COMMAND_LIST_GPU_BASED_VALIDATION_SETTINGS {
+ ShaderPatchMode: D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE,
+}}
+RIDL!{#[uuid(0x102ca951, 0x311b, 0x4b01, 0xb1, 0x1f, 0xec, 0xb8, 0x3e, 0x06, 0x1b, 0x37)]
+interface ID3D12DebugCommandList1(ID3D12DebugCommandList1Vtbl): IUnknown(IUnknownVtbl) {
+ fn AssertResourceState(
+ pResource: *mut ID3D12Resource,
+ Subresource: UINT,
+ State: UINT,
+ ) -> BOOL,
+ fn SetDebugParameter(
+ Type: D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE,
+ pData: *const c_void,
+ DataSize: UINT,
+ ) -> HRESULT,
+ fn GetDebugParameter(
+ Type: D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE,
+ pData: *mut c_void,
+ DataSize: UINT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x09e0bf36, 0x54ac, 0x484f, 0x88, 0x47, 0x4b, 0xae, 0xea, 0xb6, 0x05, 0x3f)]
+interface ID3D12DebugCommandList(ID3D12DebugCommandListVtbl): IUnknown(IUnknownVtbl) {
+ fn AssertResourceState(
+ pResource: *mut ID3D12Resource,
+ Subresource: UINT,
+ State: UINT,
+ ) -> BOOL,
+ fn SetFeatureMask(
+ Mask: D3D12_DEBUG_FEATURE,
+ ) -> HRESULT,
+ fn GetFeatureMask() -> D3D12_DEBUG_FEATURE,
+}}
+ENUM!{enum D3D12_MESSAGE_CATEGORY {
+ D3D12_MESSAGE_CATEGORY_APPLICATION_DEFINED = 0,
+ D3D12_MESSAGE_CATEGORY_MISCELLANEOUS = 1,
+ D3D12_MESSAGE_CATEGORY_INITIALIZATION = 2,
+ D3D12_MESSAGE_CATEGORY_CLEANUP = 3,
+ D3D12_MESSAGE_CATEGORY_COMPILATION = 4,
+ D3D12_MESSAGE_CATEGORY_STATE_CREATION = 5,
+ D3D12_MESSAGE_CATEGORY_STATE_SETTING = 6,
+ D3D12_MESSAGE_CATEGORY_STATE_GETTING = 7,
+ D3D12_MESSAGE_CATEGORY_RESOURCE_MANIPULATION = 8,
+ D3D12_MESSAGE_CATEGORY_EXECUTION = 9,
+ D3D12_MESSAGE_CATEGORY_SHADER = 10,
+}}
+ENUM!{enum D3D12_MESSAGE_SEVERITY {
+ D3D12_MESSAGE_SEVERITY_CORRUPTION = 0,
+ D3D12_MESSAGE_SEVERITY_ERROR = 1,
+ D3D12_MESSAGE_SEVERITY_WARNING = 2,
+ D3D12_MESSAGE_SEVERITY_INFO = 3,
+ D3D12_MESSAGE_SEVERITY_MESSAGE = 4,
+}}
+ENUM!{enum D3D12_MESSAGE_ID {
+ D3D12_MESSAGE_ID_UNKNOWN = 0,
+ D3D12_MESSAGE_ID_STRING_FROM_APPLICATION = 1,
+ D3D12_MESSAGE_ID_CORRUPTED_THIS = 2,
+ D3D12_MESSAGE_ID_CORRUPTED_PARAMETER1 = 3,
+ D3D12_MESSAGE_ID_CORRUPTED_PARAMETER2 = 4,
+ D3D12_MESSAGE_ID_CORRUPTED_PARAMETER3 = 5,
+ D3D12_MESSAGE_ID_CORRUPTED_PARAMETER4 = 6,
+ D3D12_MESSAGE_ID_CORRUPTED_PARAMETER5 = 7,
+ D3D12_MESSAGE_ID_CORRUPTED_PARAMETER6 = 8,
+ D3D12_MESSAGE_ID_CORRUPTED_PARAMETER7 = 9,
+ D3D12_MESSAGE_ID_CORRUPTED_PARAMETER8 = 10,
+ D3D12_MESSAGE_ID_CORRUPTED_PARAMETER9 = 11,
+ D3D12_MESSAGE_ID_CORRUPTED_PARAMETER10 = 12,
+ D3D12_MESSAGE_ID_CORRUPTED_PARAMETER11 = 13,
+ D3D12_MESSAGE_ID_CORRUPTED_PARAMETER12 = 14,
+ D3D12_MESSAGE_ID_CORRUPTED_PARAMETER13 = 15,
+ D3D12_MESSAGE_ID_CORRUPTED_PARAMETER14 = 16,
+ D3D12_MESSAGE_ID_CORRUPTED_PARAMETER15 = 17,
+ D3D12_MESSAGE_ID_CORRUPTED_MULTITHREADING = 18,
+ D3D12_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY = 19,
+ D3D12_MESSAGE_ID_GETPRIVATEDATA_MOREDATA = 20,
+ D3D12_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA = 21,
+ D3D12_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN = 22,
+ D3D12_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS = 23,
+ D3D12_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS = 24,
+ D3D12_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY = 25,
+ D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT = 26,
+ D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC = 27,
+ D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT = 28,
+ D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDVIDEOPLANESLICE = 29,
+ D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDPLANESLICE = 30,
+ D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS = 31,
+ D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE = 32,
+ D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN = 33,
+ D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN = 34,
+ D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT = 35,
+ D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT = 36,
+ D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC = 37,
+ D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT = 38,
+ D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDVIDEOPLANESLICE = 39,
+ D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDPLANESLICE = 40,
+ D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS = 41,
+ D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE = 42,
+ D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN = 43,
+ D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN = 44,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT = 45,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC = 46,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT = 47,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS = 48,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE = 49,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN = 50,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN = 51,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY = 52,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS = 53,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT = 54,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT = 55,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT = 56,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS = 57,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH = 58,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE = 59,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE = 60,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT = 61,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC = 62,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE = 63,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC = 64,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT = 65,
+ D3D12_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY = 66,
+ D3D12_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE = 67,
+ D3D12_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE = 68,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY = 69,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE = 70,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE = 71,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY = 72,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE = 73,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE = 74,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES = 75,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED = 76,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL = 77,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL = 78,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED = 79,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT = 80,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT = 81,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT = 82,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT
+ = 83,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION = 84,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT = 85,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE = 86,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC = 87,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH = 88,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS = 89,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX = 90,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE = 91,
+ D3D12_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY = 92,
+ D3D12_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE = 93,
+ D3D12_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE = 94,
+ D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE = 95,
+ D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE = 96,
+ D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP = 97,
+ D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS = 98,
+ D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC = 99,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK = 100,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC = 101,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP = 102,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP = 103,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP = 104,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC = 105,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP = 106,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP = 107,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP = 108,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC = 109,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC = 110,
+ D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND = 111,
+ D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND = 112,
+ D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP = 113,
+ D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA = 114,
+ D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA = 115,
+ D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA = 116,
+ D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK = 117,
+ D3D12_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC = 118,
+ D3D12_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER = 119,
+ D3D12_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU = 120,
+ D3D12_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV = 121,
+ D3D12_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW = 122,
+ D3D12_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS = 123,
+ D3D12_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY = 124,
+ D3D12_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC = 125,
+ D3D12_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD = 126,
+ D3D12_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD = 127,
+ D3D12_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC = 128,
+ D3D12_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED = 129,
+ D3D12_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED = 130,
+ D3D12_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT = 131,
+ D3D12_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR = 132,
+ D3D12_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH = 133,
+ D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH = 134,
+ D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID = 135,
+ D3D12_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE = 136,
+ D3D12_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE = 137,
+ D3D12_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE = 138,
+ D3D12_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE = 139,
+ D3D12_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX = 140,
+ D3D12_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE = 141,
+ D3D12_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID = 142,
+ D3D12_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID = 143,
+ D3D12_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID = 144,
+ D3D12_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID = 145,
+ D3D12_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID = 146,
+ D3D12_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE = 147,
+ D3D12_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS = 148,
+ D3D12_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED = 149,
+ D3D12_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN = 150,
+ D3D12_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED = 151,
+ D3D12_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE = 152,
+ D3D12_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE = 153,
+ D3D12_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS = 154,
+ D3D12_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED = 155,
+ D3D12_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN = 156,
+ D3D12_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE = 157,
+ D3D12_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED = 158,
+ D3D12_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE = 159,
+ D3D12_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE = 160,
+ D3D12_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS = 161,
+ D3D12_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED = 162,
+ D3D12_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN = 163,
+ D3D12_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE = 164,
+ D3D12_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED = 165,
+ D3D12_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE = 166,
+ D3D12_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE = 167,
+ D3D12_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS = 168,
+ D3D12_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED = 169,
+ D3D12_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN = 170,
+ D3D12_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE = 171,
+ D3D12_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED = 172,
+ D3D12_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED = 173,
+ D3D12_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED = 174,
+ D3D12_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS = 175,
+ D3D12_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN = 176,
+ D3D12_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN = 177,
+ D3D12_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE = 178,
+ D3D12_MESSAGE_ID_REF_THREADING_MODE = 179,
+ D3D12_MESSAGE_ID_REF_UMDRIVER_EXCEPTION = 180,
+ D3D12_MESSAGE_ID_REF_KMDRIVER_EXCEPTION = 181,
+ D3D12_MESSAGE_ID_REF_HARDWARE_EXCEPTION = 182,
+ D3D12_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE = 183,
+ D3D12_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER = 184,
+ D3D12_MESSAGE_ID_REF_OUT_OF_MEMORY = 185,
+ D3D12_MESSAGE_ID_REF_INFO = 186,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW = 187,
+ D3D12_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW = 188,
+ D3D12_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW = 189,
+ D3D12_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW = 190,
+ D3D12_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW = 191,
+ D3D12_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW = 192,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET = 193,
+ D3D12_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND = 194,
+ D3D12_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX = 195,
+ D3D12_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE = 196,
+ D3D12_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK = 197,
+ D3D12_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE = 198,
+ D3D12_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS = 199,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_ROOT_SIGNATURE_NOT_SET = 200,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_ROOT_SIGNATURE_MISMATCH = 201,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_VERTEX_BUFFER_NOT_SET = 202,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INPUTLAYOUT_NOT_SET = 203,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_CONSTANT_BUFFER_NOT_SET = 204,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_CONSTANT_BUFFER_TOO_SMALL = 205,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_SAMPLER_NOT_SET = 206,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_SHADERRESOURCEVIEW_NOT_SET = 207,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_VIEW_DIMENSION_MISMATCH = 208,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL = 209,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_VERTEX_BUFFER_TOO_SMALL = 210,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INDEX_BUFFER_NOT_SET = 211,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INDEX_BUFFER_FORMAT_INVALID = 212,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INDEX_BUFFER_TOO_SMALL = 213,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_GS_INPUT_PRIMITIVE_MISMATCH = 214,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_RESOURCE_RETURN_TYPE_MISMATCH = 215,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_POSITION_NOT_PRESENT = 216,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_OUTPUT_STREAM_NOT_SET = 217,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_BOUND_RESOURCE_MAPPED = 218,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INVALID_PRIMITIVETOPOLOGY = 219,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_VERTEX_OFFSET_UNALIGNED = 220,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_VERTEX_STRIDE_UNALIGNED = 221,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INDEX_OFFSET_UNALIGNED = 222,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED = 223,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED = 224,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED = 225,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED = 226,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED = 227,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE = 228,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_SO_STRIDE_LARGER_THAN_BUFFER = 229,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING = 230,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0 = 231,
+ D3D12_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT = 232,
+ D3D12_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT = 233,
+ D3D12_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT = 234,
+ D3D12_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN = 235,
+ D3D12_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN = 236,
+ D3D12_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN = 237,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET = 238,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC = 239,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC = 240,
+ D3D12_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH = 241,
+ D3D12_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW = 242,
+ D3D12_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS = 243,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH = 244,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH = 245,
+ D3D12_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY = 246,
+ D3D12_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY = 247,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH = 248,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED = 249,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN = 250,
+ D3D12_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE = 251,
+ D3D12_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE = 252,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT = 253,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH = 254,
+ D3D12_MESSAGE_ID_LIVE_OBJECT_SUMMARY = 255,
+ D3D12_MESSAGE_ID_LIVE_BUFFER = 256,
+ D3D12_MESSAGE_ID_LIVE_TEXTURE1D = 257,
+ D3D12_MESSAGE_ID_LIVE_TEXTURE2D = 258,
+ D3D12_MESSAGE_ID_LIVE_TEXTURE3D = 259,
+ D3D12_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW = 260,
+ D3D12_MESSAGE_ID_LIVE_RENDERTARGETVIEW = 261,
+ D3D12_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW = 262,
+ D3D12_MESSAGE_ID_LIVE_VERTEXSHADER = 263,
+ D3D12_MESSAGE_ID_LIVE_GEOMETRYSHADER = 264,
+ D3D12_MESSAGE_ID_LIVE_PIXELSHADER = 265,
+ D3D12_MESSAGE_ID_LIVE_INPUTLAYOUT = 266,
+ D3D12_MESSAGE_ID_LIVE_SAMPLER = 267,
+ D3D12_MESSAGE_ID_LIVE_BLENDSTATE = 268,
+ D3D12_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE = 269,
+ D3D12_MESSAGE_ID_LIVE_RASTERIZERSTATE = 270,
+ D3D12_MESSAGE_ID_LIVE_QUERY = 271,
+ D3D12_MESSAGE_ID_LIVE_PREDICATE = 272,
+ D3D12_MESSAGE_ID_LIVE_COUNTER = 273,
+ D3D12_MESSAGE_ID_LIVE_DEVICE = 274,
+ D3D12_MESSAGE_ID_LIVE_SWAPCHAIN = 275,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFLAGS = 276,
+ D3D12_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDCLASSLINKAGE = 277,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDCLASSLINKAGE = 278,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTREAMS = 279,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAMTORASTERIZER = 280,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTREAMS = 281,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCLASSLINKAGE = 282,
+ D3D12_MESSAGE_ID_CREATEPIXELSHADER_INVALIDCLASSLINKAGE = 283,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAM = 284,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDENTRIES = 285,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTRIDES = 286,
+ D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTRIDES = 287,
+ D3D12_MESSAGE_ID_CREATEHULLSHADER_INVALIDCALL = 288,
+ D3D12_MESSAGE_ID_CREATEHULLSHADER_OUTOFMEMORY = 289,
+ D3D12_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERBYTECODE = 290,
+ D3D12_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERTYPE = 291,
+ D3D12_MESSAGE_ID_CREATEHULLSHADER_INVALIDCLASSLINKAGE = 292,
+ D3D12_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCALL = 293,
+ D3D12_MESSAGE_ID_CREATEDOMAINSHADER_OUTOFMEMORY = 294,
+ D3D12_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERBYTECODE = 295,
+ D3D12_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERTYPE = 296,
+ D3D12_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCLASSLINKAGE = 297,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_HS_XOR_DS_MISMATCH = 298,
+ D3D12_MESSAGE_ID_DEVICE_DRAWINDIRECT_INVALID_ARG_BUFFER = 299,
+ D3D12_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_UNALIGNED = 300,
+ D3D12_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_OVERFLOW = 301,
+ D3D12_MESSAGE_ID_RESOURCE_MAP_INVALIDMAPTYPE = 302,
+ D3D12_MESSAGE_ID_RESOURCE_MAP_INVALIDSUBRESOURCE = 303,
+ D3D12_MESSAGE_ID_RESOURCE_MAP_INVALIDFLAGS = 304,
+ D3D12_MESSAGE_ID_RESOURCE_MAP_ALREADYMAPPED = 305,
+ D3D12_MESSAGE_ID_RESOURCE_MAP_DEVICEREMOVED_RETURN = 306,
+ D3D12_MESSAGE_ID_RESOURCE_MAP_OUTOFMEMORY_RETURN = 307,
+ D3D12_MESSAGE_ID_RESOURCE_MAP_WITHOUT_INITIAL_DISCARD = 308,
+ D3D12_MESSAGE_ID_RESOURCE_UNMAP_INVALIDSUBRESOURCE = 309,
+ D3D12_MESSAGE_ID_RESOURCE_UNMAP_NOTMAPPED = 310,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_RASTERIZING_CONTROL_POINTS = 311,
+ D3D12_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNSUPPORTED = 312,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_HS_DS_SIGNATURE_MISMATCH = 313,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH = 314,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_HS_DS_CONTROL_POINT_COUNT_MISMATCH = 315,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_HS_DS_TESSELLATOR_DOMAIN_MISMATCH = 316,
+ D3D12_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_UNRECOGNIZED_FEATURE = 317,
+ D3D12_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_MISMATCHED_DATA_SIZE = 318,
+ D3D12_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_INVALIDARG_RETURN = 319,
+ D3D12_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCALL = 320,
+ D3D12_MESSAGE_ID_CREATECOMPUTESHADER_OUTOFMEMORY = 321,
+ D3D12_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERBYTECODE = 322,
+ D3D12_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCLASSLINKAGE = 323,
+ D3D12_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_VIEWS_EMPTY = 324,
+ D3D12_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFER = 325,
+ D3D12_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_BUFFERS_EMPTY = 326,
+ D3D12_MESSAGE_ID_DEVICE_CSSETSAMPLERS_SAMPLERS_EMPTY = 327,
+ D3D12_MESSAGE_ID_DEVICE_CSGETSHADERRESOURCES_VIEWS_EMPTY = 328,
+ D3D12_MESSAGE_ID_DEVICE_CSGETCONSTANTBUFFERS_BUFFERS_EMPTY = 329,
+ D3D12_MESSAGE_ID_DEVICE_CSGETSAMPLERS_SAMPLERS_EMPTY = 330,
+ D3D12_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 331,
+ D3D12_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 332,
+ D3D12_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 333,
+ D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 334,
+ D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEFLOATOPSNOTSUPPORTED = 335,
+ D3D12_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 336,
+ D3D12_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEFLOATOPSNOTSUPPORTED = 337,
+ D3D12_MESSAGE_ID_CREATEBUFFER_INVALIDSTRUCTURESTRIDE = 338,
+ D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFLAGS = 339,
+ D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDRESOURCE = 340,
+ D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDESC = 341,
+ D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT = 342,
+ D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDVIDEOPLANESLICE = 343,
+ D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDPLANESLICE = 344,
+ D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDIMENSIONS = 345,
+ D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_UNRECOGNIZEDFORMAT = 346,
+ D3D12_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_OVERLAPPING_OLD_SLOTS = 347,
+ D3D12_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NO_OP = 348,
+ D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDARG_RETURN = 349,
+ D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_OUTOFMEMORY_RETURN = 350,
+ D3D12_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_DENORMFLUSH = 351,
+ D3D12_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSS_VIEWS_EMPTY = 352,
+ D3D12_MESSAGE_ID_DEVICE_CSGETUNORDEREDACCESSS_VIEWS_EMPTY = 353,
+ D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFLAGS = 354,
+ D3D12_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_INVALID_ARG_BUFFER = 355,
+ D3D12_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_UNALIGNED = 356,
+ D3D12_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_OVERFLOW = 357,
+ D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DEPTH_READONLY = 358,
+ D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_STENCIL_READONLY = 359,
+ D3D12_MESSAGE_ID_CHECKFEATURESUPPORT_FORMAT_DEPRECATED = 360,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RETURN_TYPE_MISMATCH = 361,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET = 362,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_UNORDEREDACCESSVIEW_RENDERTARGETVIEW_OVERLAP = 363,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_DIMENSION_MISMATCH = 364,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_APPEND_UNSUPPORTED = 365,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMICS_UNSUPPORTED = 366,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_STRUCTURE_STRIDE_MISMATCH = 367,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_BUFFER_TYPE_MISMATCH = 368,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RAW_UNSUPPORTED = 369,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_LD_UNSUPPORTED = 370,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_STORE_UNSUPPORTED = 371,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_ADD_UNSUPPORTED = 372,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_BITWISE_OPS_UNSUPPORTED = 373,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_CMPSTORE_CMPEXCHANGE_UNSUPPORTED = 374,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_EXCHANGE_UNSUPPORTED = 375,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_SIGNED_MINMAX_UNSUPPORTED = 376,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_UNSIGNED_MINMAX_UNSUPPORTED = 377,
+ D3D12_MESSAGE_ID_DEVICE_DISPATCH_BOUND_RESOURCE_MAPPED = 378,
+ D3D12_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_OVERFLOW = 379,
+ D3D12_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_ZERO = 380,
+ D3D12_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_STRUCTURE_STRIDE_MISMATCH = 381,
+ D3D12_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_BUFFER_TYPE_MISMATCH = 382,
+ D3D12_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_RAW_UNSUPPORTED = 383,
+ D3D12_MESSAGE_ID_DEVICE_DISPATCH_UNSUPPORTED = 384,
+ D3D12_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_UNSUPPORTED = 385,
+ D3D12_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDOFFSET = 386,
+ D3D12_MESSAGE_ID_COPYSTRUCTURECOUNT_LARGEOFFSET = 387,
+ D3D12_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDDESTINATIONSTATE = 388,
+ D3D12_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDSOURCESTATE = 389,
+ D3D12_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_NOT_SUPPORTED = 390,
+ D3D12_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_INVALIDFORMAT = 391,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_COUNTER_UNSUPPORTED = 392,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_PIXEL_SHADER_WITHOUT_RTV_OR_DSV = 393,
+ D3D12_MESSAGE_ID_SHADER_ABORT = 394,
+ D3D12_MESSAGE_ID_SHADER_MESSAGE = 395,
+ D3D12_MESSAGE_ID_SHADER_ERROR = 396,
+ D3D12_MESSAGE_ID_OFFERRESOURCES_INVALIDRESOURCE = 397,
+ D3D12_MESSAGE_ID_ENQUEUESETEVENT_INVALIDARG_RETURN = 398,
+ D3D12_MESSAGE_ID_ENQUEUESETEVENT_OUTOFMEMORY_RETURN = 399,
+ D3D12_MESSAGE_ID_ENQUEUESETEVENT_ACCESSDENIED_RETURN = 400,
+ D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFORCEDSAMPLECOUNT = 401,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_FORCED_SAMPLE_COUNT = 402,
+ D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDLOGICOPS = 403,
+ D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDARRAYWITHDECODER = 404,
+ D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDARRAYWITHDECODER = 405,
+ D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDARRAYWITHDECODER = 406,
+ D3D12_MESSAGE_ID_DEVICE_LOCKEDOUT_INTERFACE = 407,
+ D3D12_MESSAGE_ID_OFFERRESOURCES_INVALIDPRIORITY = 408,
+ D3D12_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDVIEW = 409,
+ D3D12_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 410,
+ D3D12_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_SHADEREXTENSIONSNOTSUPPORTED = 411,
+ D3D12_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 412,
+ D3D12_MESSAGE_ID_DEVICE_CREATEHULLSHADER_SHADEREXTENSIONSNOTSUPPORTED = 413,
+ D3D12_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 414,
+ D3D12_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_SHADEREXTENSIONSNOTSUPPORTED = 415,
+ D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 416,
+ D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_SHADEREXTENSIONSNOTSUPPORTED = 417,
+ D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEEXTENSIONSNOTSUPPORTED
+ = 418,
+ D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_SHADEREXTENSIONSNOTSUPPORTED
+ = 419,
+ D3D12_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 420,
+ D3D12_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_SHADEREXTENSIONSNOTSUPPORTED = 421,
+ D3D12_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 422,
+ D3D12_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_SHADEREXTENSIONSNOTSUPPORTED = 423,
+ D3D12_MESSAGE_ID_DEVICE_SHADER_LINKAGE_MINPRECISION = 424,
+ D3D12_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_UAVSNOTSUPPORTED = 425,
+ D3D12_MESSAGE_ID_DEVICE_CREATEHULLSHADER_UAVSNOTSUPPORTED = 426,
+ D3D12_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_UAVSNOTSUPPORTED = 427,
+ D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_UAVSNOTSUPPORTED = 428,
+ D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UAVSNOTSUPPORTED = 429,
+ D3D12_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_UAVSNOTSUPPORTED = 430,
+ D3D12_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_UAVSNOTSUPPORTED = 431,
+ D3D12_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_INVALIDOFFSET = 432,
+ D3D12_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_TOOMANYVIEWS = 433,
+ D3D12_MESSAGE_ID_DEVICE_CLEARVIEW_NOTSUPPORTED = 434,
+ D3D12_MESSAGE_ID_SWAPDEVICECONTEXTSTATE_NOTSUPPORTED = 435,
+ D3D12_MESSAGE_ID_UPDATESUBRESOURCE_PREFERUPDATESUBRESOURCE1 = 436,
+ D3D12_MESSAGE_ID_GETDC_INACCESSIBLE = 437,
+ D3D12_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDRECT = 438,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_SAMPLE_MASK_IGNORED_ON_FL9 = 439,
+ D3D12_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE1_NOT_SUPPORTED = 440,
+ D3D12_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BY_NAME_NOT_SUPPORTED = 441,
+ D3D12_MESSAGE_ID_ENQUEUESETEVENT_NOT_SUPPORTED = 442,
+ D3D12_MESSAGE_ID_OFFERRELEASE_NOT_SUPPORTED = 443,
+ D3D12_MESSAGE_ID_OFFERRESOURCES_INACCESSIBLE = 444,
+ D3D12_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMSAA = 445,
+ D3D12_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDMSAA = 446,
+ D3D12_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDSOURCERECT = 447,
+ D3D12_MESSAGE_ID_DEVICE_CLEARVIEW_EMPTYRECT = 448,
+ D3D12_MESSAGE_ID_UPDATESUBRESOURCE_EMPTYDESTBOX = 449,
+ D3D12_MESSAGE_ID_COPYSUBRESOURCEREGION_EMPTYSOURCEBOX = 450,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_LOGIC_OPS = 451,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_DEPTHSTENCILVIEW_NOT_SET = 452,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET = 453,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET_DUE_TO_FLIP_PRESENT = 454,
+ D3D12_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET_DUE_TO_FLIP_PRESENT = 455,
+ D3D12_MESSAGE_ID_GETDATAFORNEWHARDWAREKEY_NULLPARAM = 456,
+ D3D12_MESSAGE_ID_CHECKCRYPTOSESSIONSTATUS_NULLPARAM = 457,
+ D3D12_MESSAGE_ID_SETEVENTONHARDWARECONTENTPROTECTIONTILT_NULLPARAM = 458,
+ D3D12_MESSAGE_ID_GETVIDEODECODERCAPS_NULLPARAM = 459,
+ D3D12_MESSAGE_ID_GETVIDEODECODERCAPS_ZEROWIDTHHEIGHT = 460,
+ D3D12_MESSAGE_ID_CHECKVIDEODECODERDOWNSAMPLING_NULLPARAM = 461,
+ D3D12_MESSAGE_ID_CHECKVIDEODECODERDOWNSAMPLING_INVALIDCOLORSPACE = 462,
+ D3D12_MESSAGE_ID_CHECKVIDEODECODERDOWNSAMPLING_ZEROWIDTHHEIGHT = 463,
+ D3D12_MESSAGE_ID_VIDEODECODERENABLEDOWNSAMPLING_NULLPARAM = 464,
+ D3D12_MESSAGE_ID_VIDEODECODERENABLEDOWNSAMPLING_UNSUPPORTED = 465,
+ D3D12_MESSAGE_ID_VIDEODECODERUPDATEDOWNSAMPLING_NULLPARAM = 466,
+ D3D12_MESSAGE_ID_VIDEODECODERUPDATEDOWNSAMPLING_UNSUPPORTED = 467,
+ D3D12_MESSAGE_ID_CHECKVIDEOPROCESSORFORMATCONVERSION_NULLPARAM = 468,
+ D3D12_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCOLORSPACE1_NULLPARAM = 469,
+ D3D12_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCOLORSPACE1_NULLPARAM = 470,
+ D3D12_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE1_NULLPARAM = 471,
+ D3D12_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE1_INVALIDSTREAM = 472,
+ D3D12_MESSAGE_ID_VIDEOPROCESSORSETSTREAMMIRROR_NULLPARAM = 473,
+ D3D12_MESSAGE_ID_VIDEOPROCESSORSETSTREAMMIRROR_INVALIDSTREAM = 474,
+ D3D12_MESSAGE_ID_VIDEOPROCESSORSETSTREAMMIRROR_UNSUPPORTED = 475,
+ D3D12_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE1_NULLPARAM = 476,
+ D3D12_MESSAGE_ID_VIDEOPROCESSORGETSTREAMMIRROR_NULLPARAM = 477,
+ D3D12_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_NULLPARAM = 478,
+ D3D12_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_INVALIDCOLORSPACE = 479,
+ D3D12_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_ZEROWIDTHHEIGHT = 480,
+ D3D12_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSHADERUSAGE_NULLPARAM = 481,
+ D3D12_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTSHADERUSAGE_NULLPARAM = 482,
+ D3D12_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_NULLPARAM = 483,
+ D3D12_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_INVALIDSTREAMCOUNT = 484,
+ D3D12_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_TARGETRECT = 485,
+ D3D12_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_INVALIDSOURCERECT = 486,
+ D3D12_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_INVALIDDESTRECT = 487,
+ D3D12_MESSAGE_ID_CREATEBUFFER_INVALIDUSAGE = 488,
+ D3D12_MESSAGE_ID_CREATETEXTURE1D_INVALIDUSAGE = 489,
+ D3D12_MESSAGE_ID_CREATETEXTURE2D_INVALIDUSAGE = 490,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_LEVEL9_STEPRATE_NOT_1 = 491,
+ D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_LEVEL9_INSTANCING_NOT_SUPPORTED = 492,
+ D3D12_MESSAGE_ID_UPDATETILEMAPPINGS_INVALID_PARAMETER = 493,
+ D3D12_MESSAGE_ID_COPYTILEMAPPINGS_INVALID_PARAMETER = 494,
+ D3D12_MESSAGE_ID_COPYTILES_INVALID_PARAMETER = 495,
+ D3D12_MESSAGE_ID_NULL_TILE_MAPPING_ACCESS_WARNING = 496,
+ D3D12_MESSAGE_ID_NULL_TILE_MAPPING_ACCESS_ERROR = 497,
+ D3D12_MESSAGE_ID_DIRTY_TILE_MAPPING_ACCESS = 498,
+ D3D12_MESSAGE_ID_DUPLICATE_TILE_MAPPINGS_IN_COVERED_AREA = 499,
+ D3D12_MESSAGE_ID_TILE_MAPPINGS_IN_COVERED_AREA_DUPLICATED_OUTSIDE = 500,
+ D3D12_MESSAGE_ID_TILE_MAPPINGS_SHARED_BETWEEN_INCOMPATIBLE_RESOURCES = 501,
+ D3D12_MESSAGE_ID_TILE_MAPPINGS_SHARED_BETWEEN_INPUT_AND_OUTPUT = 502,
+ D3D12_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_INVALIDFLAGS = 503,
+ D3D12_MESSAGE_ID_GETRESOURCETILING_NONTILED_RESOURCE = 504,
+ D3D12_MESSAGE_ID_NEED_TO_CALL_TILEDRESOURCEBARRIER = 505,
+ D3D12_MESSAGE_ID_CREATEDEVICE_INVALIDARGS = 506,
+ D3D12_MESSAGE_ID_CREATEDEVICE_WARNING = 507,
+ D3D12_MESSAGE_ID_TILED_RESOURCE_TIER_1_BUFFER_TEXTURE_MISMATCH = 508,
+ D3D12_MESSAGE_ID_CREATE_CRYPTOSESSION = 509,
+ D3D12_MESSAGE_ID_CREATE_AUTHENTICATEDCHANNEL = 510,
+ D3D12_MESSAGE_ID_LIVE_CRYPTOSESSION = 511,
+ D3D12_MESSAGE_ID_LIVE_AUTHENTICATEDCHANNEL = 512,
+ D3D12_MESSAGE_ID_DESTROY_CRYPTOSESSION = 513,
+ D3D12_MESSAGE_ID_DESTROY_AUTHENTICATEDCHANNEL = 514,
+ D3D12_MESSAGE_ID_MAP_INVALID_SUBRESOURCE = 515,
+ D3D12_MESSAGE_ID_MAP_INVALID_TYPE = 516,
+ D3D12_MESSAGE_ID_MAP_UNSUPPORTED_TYPE = 517,
+ D3D12_MESSAGE_ID_UNMAP_INVALID_SUBRESOURCE = 518,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_TYPE = 519,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_NULL_POINTER = 520,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_SUBRESOURCE = 521,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_RESERVED_BITS = 522,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_MISSING_BIND_FLAGS = 523,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_MISMATCHING_MISC_FLAGS = 524,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_MATCHING_STATES = 525,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_COMBINATION = 526,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_BEFORE_AFTER_MISMATCH = 527,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_RESOURCE = 528,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_SAMPLE_COUNT = 529,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_FLAGS = 530,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_COMBINED_FLAGS = 531,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_FLAGS_FOR_FORMAT = 532,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_SPLIT_BARRIER = 533,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_UNMATCHED_END = 534,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_UNMATCHED_BEGIN = 535,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_FLAG = 536,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_COMMAND_LIST_TYPE = 537,
+ D3D12_MESSAGE_ID_INVALID_SUBRESOURCE_STATE = 538,
+ D3D12_MESSAGE_ID_INEFFICIENT_PRESENT = 539,
+ D3D12_MESSAGE_ID_COMMAND_ALLOCATOR_CONTENTION = 540,
+ D3D12_MESSAGE_ID_COMMAND_ALLOCATOR_RESET = 541,
+ D3D12_MESSAGE_ID_COMMAND_ALLOCATOR_RESET_BUNDLE = 542,
+ D3D12_MESSAGE_ID_COMMAND_ALLOCATOR_CANNOT_RESET = 543,
+ D3D12_MESSAGE_ID_COMMAND_LIST_OPEN = 544,
+ D3D12_MESSAGE_ID_QUERY_STATE_MISMATCH = 545,
+ D3D12_MESSAGE_ID_INVALID_BUNDLE_API = 546,
+ D3D12_MESSAGE_ID_COMMAND_LIST_CLOSED = 547,
+ D3D12_MESSAGE_ID_COMMAND_LIST_CLOSED_WITH_INVALID_RESOURCE = 548,
+ D3D12_MESSAGE_ID_WRONG_COMMAND_ALLOCATOR_TYPE = 549,
+ D3D12_MESSAGE_ID_INVALID_INDIRECT_ARGUMENT_BUFFER = 550,
+ D3D12_MESSAGE_ID_COMPUTE_AND_GRAPHICS_PIPELINE = 551,
+ D3D12_MESSAGE_ID_COMMAND_ALLOCATOR_SYNC = 552,
+ D3D12_MESSAGE_ID_COMMAND_LIST_SYNC = 553,
+ D3D12_MESSAGE_ID_SET_DESCRIPTOR_HEAP_INVALID = 554,
+ D3D12_MESSAGE_ID_CREATE_QUEUE_IMAGE_NOT_SUPPORTED = 555,
+ D3D12_MESSAGE_ID_CREATE_COMMAND_ALLOCATOR_IMAGE_NOT_SUPPORTED = 556,
+ D3D12_MESSAGE_ID_CREATE_COMMANDQUEUE = 557,
+ D3D12_MESSAGE_ID_CREATE_COMMANDALLOCATOR = 558,
+ D3D12_MESSAGE_ID_CREATE_PIPELINESTATE = 559,
+ D3D12_MESSAGE_ID_CREATE_COMMANDLIST12 = 560,
+ D3D12_MESSAGE_ID_CREATE_IMAGECOMMANDLIST = 561,
+ D3D12_MESSAGE_ID_CREATE_RESOURCE = 562,
+ D3D12_MESSAGE_ID_CREATE_DESCRIPTORHEAP = 563,
+ D3D12_MESSAGE_ID_CREATE_ROOTSIGNATURE = 564,
+ D3D12_MESSAGE_ID_CREATE_LIBRARY = 565,
+ D3D12_MESSAGE_ID_CREATE_HEAP = 566,
+ D3D12_MESSAGE_ID_CREATE_MONITOREDFENCE = 567,
+ D3D12_MESSAGE_ID_CREATE_QUERYHEAP = 568,
+ D3D12_MESSAGE_ID_CREATE_COMMANDSIGNATURE = 569,
+ D3D12_MESSAGE_ID_LIVE_COMMANDQUEUE = 570,
+ D3D12_MESSAGE_ID_LIVE_COMMANDALLOCATOR = 571,
+ D3D12_MESSAGE_ID_LIVE_PIPELINESTATE = 572,
+ D3D12_MESSAGE_ID_LIVE_COMMANDLIST12 = 573,
+ D3D12_MESSAGE_ID_LIVE_IMAGECOMMANDLIST = 574,
+ D3D12_MESSAGE_ID_LIVE_RESOURCE = 575,
+ D3D12_MESSAGE_ID_LIVE_DESCRIPTORHEAP = 576,
+ D3D12_MESSAGE_ID_LIVE_ROOTSIGNATURE = 577,
+ D3D12_MESSAGE_ID_LIVE_LIBRARY = 578,
+ D3D12_MESSAGE_ID_LIVE_HEAP = 579,
+ D3D12_MESSAGE_ID_LIVE_MONITOREDFENCE = 580,
+ D3D12_MESSAGE_ID_LIVE_QUERYHEAP = 581,
+ D3D12_MESSAGE_ID_LIVE_COMMANDSIGNATURE = 582,
+ D3D12_MESSAGE_ID_DESTROY_COMMANDQUEUE = 583,
+ D3D12_MESSAGE_ID_DESTROY_COMMANDALLOCATOR = 584,
+ D3D12_MESSAGE_ID_DESTROY_PIPELINESTATE = 585,
+ D3D12_MESSAGE_ID_DESTROY_COMMANDLIST12 = 586,
+ D3D12_MESSAGE_ID_DESTROY_IMAGECOMMANDLIST = 587,
+ D3D12_MESSAGE_ID_DESTROY_RESOURCE = 588,
+ D3D12_MESSAGE_ID_DESTROY_DESCRIPTORHEAP = 589,
+ D3D12_MESSAGE_ID_DESTROY_ROOTSIGNATURE = 590,
+ D3D12_MESSAGE_ID_DESTROY_LIBRARY = 591,
+ D3D12_MESSAGE_ID_DESTROY_HEAP = 592,
+ D3D12_MESSAGE_ID_DESTROY_MONITOREDFENCE = 593,
+ D3D12_MESSAGE_ID_DESTROY_QUERYHEAP = 594,
+ D3D12_MESSAGE_ID_DESTROY_COMMANDSIGNATURE = 595,
+ D3D12_MESSAGE_ID_CREATERESOURCE_UNRECOGNIZEDHEAPTYPE = 596,
+ D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDDIMENSIONS = 597,
+ D3D12_MESSAGE_ID_CREATERESOURCE_UNRECOGNIZEDMISCFLAGS = 598,
+ D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDMISCFLAGS = 599,
+ D3D12_MESSAGE_ID_CREATERESOURCE_LARGEALLOCATION = 600,
+ D3D12_MESSAGE_ID_CREATERESOURCE_SMALLALLOCATION = 601,
+ D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDARG_RETURN = 602,
+ D3D12_MESSAGE_ID_CREATERESOURCE_OUTOFMEMORY_RETURN = 603,
+ D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDDESC = 604,
+ D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDINITIALSTATE = 605,
+ D3D12_MESSAGE_ID_RESOURCE_HAS_PENDING_INITIAL_DATA = 606,
+ D3D12_MESSAGE_ID_POSSIBLY_INVALID_SUBRESOURCE_STATE = 607,
+ D3D12_MESSAGE_ID_INVALID_USE_OF_NON_RESIDENT_RESOURCE = 608,
+ D3D12_MESSAGE_ID_POSSIBLE_INVALID_USE_OF_NON_RESIDENT_RESOURCE = 609,
+ D3D12_MESSAGE_ID_BUNDLE_PIPELINE_STATE_MISMATCH = 610,
+ D3D12_MESSAGE_ID_PRIMITIVE_TOPOLOGY_MISMATCH_PIPELINE_STATE = 611,
+ D3D12_MESSAGE_ID_RENDER_TARGET_NUMBER_MISMATCH_PIPELINE_STATE = 612,
+ D3D12_MESSAGE_ID_RENDER_TARGET_FORMAT_MISMATCH_PIPELINE_STATE = 613,
+ D3D12_MESSAGE_ID_RENDER_TARGET_SAMPLE_DESC_MISMATCH_PIPELINE_STATE = 614,
+ D3D12_MESSAGE_ID_DEPTH_STENCIL_FORMAT_MISMATCH_PIPELINE_STATE = 615,
+ D3D12_MESSAGE_ID_DEPTH_STENCIL_SAMPLE_DESC_MISMATCH_PIPELINE_STATE = 616,
+ D3D12_MESSAGE_ID_RENDER_TARGET_NUMBER_MISMATCH_BUNDLE_PIPELINE_STATE = 617,
+ D3D12_MESSAGE_ID_RENDER_TARGET_FORMAT_MISMATCH_BUNDLE_PIPELINE_STATE = 618,
+ D3D12_MESSAGE_ID_RENDER_TARGET_SAMPLE_DESC_MISMATCH_BUNDLE_PIPELINE_STATE = 619,
+ D3D12_MESSAGE_ID_DEPTH_STENCIL_FORMAT_MISMATCH_BUNDLE_PIPELINE_STATE = 620,
+ D3D12_MESSAGE_ID_DEPTH_STENCIL_SAMPLE_DESC_MISMATCH_BUNDLE_PIPELINE_STATE = 621,
+ D3D12_MESSAGE_ID_CREATESHADER_INVALIDBYTECODE = 622,
+ D3D12_MESSAGE_ID_CREATEHEAP_NULLDESC = 623,
+ D3D12_MESSAGE_ID_CREATEHEAP_INVALIDSIZE = 624,
+ D3D12_MESSAGE_ID_CREATEHEAP_UNRECOGNIZEDHEAPTYPE = 625,
+ D3D12_MESSAGE_ID_CREATEHEAP_UNRECOGNIZEDCPUPAGEPROPERTIES = 626,
+ D3D12_MESSAGE_ID_CREATEHEAP_UNRECOGNIZEDMEMORYPOOL = 627,
+ D3D12_MESSAGE_ID_CREATEHEAP_INVALIDPROPERTIES = 628,
+ D3D12_MESSAGE_ID_CREATEHEAP_INVALIDALIGNMENT = 629,
+ D3D12_MESSAGE_ID_CREATEHEAP_UNRECOGNIZEDMISCFLAGS = 630,
+ D3D12_MESSAGE_ID_CREATEHEAP_INVALIDMISCFLAGS = 631,
+ D3D12_MESSAGE_ID_CREATEHEAP_INVALIDARG_RETURN = 632,
+ D3D12_MESSAGE_ID_CREATEHEAP_OUTOFMEMORY_RETURN = 633,
+ D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_NULLHEAPPROPERTIES = 634,
+ D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_UNRECOGNIZEDHEAPTYPE = 635,
+ D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_UNRECOGNIZEDCPUPAGEPROPERTIES = 636,
+ D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_UNRECOGNIZEDMEMORYPOOL = 637,
+ D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_INVALIDHEAPPROPERTIES = 638,
+ D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_UNRECOGNIZEDHEAPMISCFLAGS = 639,
+ D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_INVALIDHEAPMISCFLAGS = 640,
+ D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_INVALIDARG_RETURN = 641,
+ D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_OUTOFMEMORY_RETURN = 642,
+ D3D12_MESSAGE_ID_GETCUSTOMHEAPPROPERTIES_UNRECOGNIZEDHEAPTYPE = 643,
+ D3D12_MESSAGE_ID_GETCUSTOMHEAPPROPERTIES_INVALIDHEAPTYPE = 644,
+ D3D12_MESSAGE_ID_CREATE_DESCRIPTOR_HEAP_INVALID_DESC = 645,
+ D3D12_MESSAGE_ID_INVALID_DESCRIPTOR_HANDLE = 646,
+ D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALID_CONSERVATIVERASTERMODE = 647,
+ D3D12_MESSAGE_ID_DEVICE_DRAW_INVALID_SYSTEMVALUE = 648,
+ D3D12_MESSAGE_ID_CREATE_CONSTANT_BUFFER_VIEW_INVALID_RESOURCE = 649,
+ D3D12_MESSAGE_ID_CREATE_CONSTANT_BUFFER_VIEW_INVALID_DESC = 650,
+ D3D12_MESSAGE_ID_CREATE_CONSTANT_BUFFER_VIEW_LARGE_OFFSET = 651,
+ D3D12_MESSAGE_ID_CREATE_UNORDEREDACCESS_VIEW_INVALID_COUNTER_USAGE = 652,
+ D3D12_MESSAGE_ID_COPY_DESCRIPTORS_INVALID_RANGES = 653,
+ D3D12_MESSAGE_ID_COPY_DESCRIPTORS_WRITE_ONLY_DESCRIPTOR = 654,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_RTV_FORMAT_NOT_UNKNOWN = 655,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_RENDER_TARGET_COUNT = 656,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_VERTEX_SHADER_NOT_SET = 657,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INPUTLAYOUT_NOT_SET = 658,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_HS_DS_SIGNATURE_MISMATCH = 659,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_REGISTERINDEX = 660,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_COMPONENTTYPE = 661,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_REGISTERMASK = 662,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_SYSTEMVALUE = 663,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS = 664,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_MINPRECISION = 665,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND = 666,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_HS_XOR_DS_MISMATCH = 667,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH = 668,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_HS_DS_CONTROL_POINT_COUNT_MISMATCH = 669,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_HS_DS_TESSELLATOR_DOMAIN_MISMATCH = 670,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN = 671,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_USE_OF_FORCED_SAMPLE_COUNT = 672,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_PRIMITIVETOPOLOGY = 673,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_SYSTEMVALUE = 674,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0
+ = 675,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING = 676,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_PS_OUTPUT_TYPE_MISMATCH = 677,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_OM_RENDER_TARGET_DOES_NOT_SUPPORT_LOGIC_OPS = 678,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_RENDERTARGETVIEW_NOT_SET = 679,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_DEPTHSTENCILVIEW_NOT_SET = 680,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_GS_INPUT_PRIMITIVE_MISMATCH = 681,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_POSITION_NOT_PRESENT = 682,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_MISSING_ROOT_SIGNATURE_FLAGS = 683,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_INDEX_BUFFER_PROPERTIES = 684,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_SAMPLE_DESC = 685,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_HS_ROOT_SIGNATURE_MISMATCH = 686,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_DS_ROOT_SIGNATURE_MISMATCH = 687,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_VS_ROOT_SIGNATURE_MISMATCH = 688,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_GS_ROOT_SIGNATURE_MISMATCH = 689,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_PS_ROOT_SIGNATURE_MISMATCH = 690,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_MISSING_ROOT_SIGNATURE = 691,
+ D3D12_MESSAGE_ID_EXECUTE_BUNDLE_OPEN_BUNDLE = 692,
+ D3D12_MESSAGE_ID_EXECUTE_BUNDLE_DESCRIPTOR_HEAP_MISMATCH = 693,
+ D3D12_MESSAGE_ID_EXECUTE_BUNDLE_TYPE = 694,
+ D3D12_MESSAGE_ID_DRAW_EMPTY_SCISSOR_RECTANGLE = 695,
+ D3D12_MESSAGE_ID_CREATE_ROOT_SIGNATURE_BLOB_NOT_FOUND = 696,
+ D3D12_MESSAGE_ID_CREATE_ROOT_SIGNATURE_DESERIALIZE_FAILED = 697,
+ D3D12_MESSAGE_ID_CREATE_ROOT_SIGNATURE_INVALID_CONFIGURATION = 698,
+ D3D12_MESSAGE_ID_CREATE_ROOT_SIGNATURE_NOT_SUPPORTED_ON_DEVICE = 699,
+ D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_NULLRESOURCEPROPERTIES = 700,
+ D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_NULLHEAP = 701,
+ D3D12_MESSAGE_ID_GETRESOURCEALLOCATIONINFO_INVALIDRDESCS = 702,
+ D3D12_MESSAGE_ID_MAKERESIDENT_NULLOBJECTARRAY = 703,
+ D3D12_MESSAGE_ID_MAKERESIDENT_INVALIDOBJECT = 704,
+ D3D12_MESSAGE_ID_EVICT_NULLOBJECTARRAY = 705,
+ D3D12_MESSAGE_ID_EVICT_INVALIDOBJECT = 706,
+ D3D12_MESSAGE_ID_HEAPS_UNSUPPORTED = 707,
+ D3D12_MESSAGE_ID_SET_DESCRIPTOR_TABLE_INVALID = 708,
+ D3D12_MESSAGE_ID_SET_ROOT_CONSTANT_INVALID = 709,
+ D3D12_MESSAGE_ID_SET_ROOT_CONSTANT_BUFFER_VIEW_INVALID = 710,
+ D3D12_MESSAGE_ID_SET_ROOT_SHADER_RESOURCE_VIEW_INVALID = 711,
+ D3D12_MESSAGE_ID_SET_ROOT_UNORDERED_ACCESS_VIEW_INVALID = 712,
+ D3D12_MESSAGE_ID_SET_VERTEX_BUFFERS_INVALID_DESC = 713,
+ D3D12_MESSAGE_ID_SET_VERTEX_BUFFERS_LARGE_OFFSET = 714,
+ D3D12_MESSAGE_ID_SET_INDEX_BUFFER_INVALID_DESC = 715,
+ D3D12_MESSAGE_ID_SET_INDEX_BUFFER_LARGE_OFFSET = 716,
+ D3D12_MESSAGE_ID_SET_STREAM_OUTPUT_BUFFERS_INVALID_DESC = 717,
+ D3D12_MESSAGE_ID_CREATERESOURCE_UNRECOGNIZEDDIMENSIONALITY = 718,
+ D3D12_MESSAGE_ID_CREATERESOURCE_UNRECOGNIZEDLAYOUT = 719,
+ D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDDIMENSIONALITY = 720,
+ D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDALIGNMENT = 721,
+ D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDMIPLEVELS = 722,
+ D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDSAMPLEDESC = 723,
+ D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDLAYOUT = 724,
+ D3D12_MESSAGE_ID_SET_INDEX_BUFFER_INVALID = 725,
+ D3D12_MESSAGE_ID_SET_VERTEX_BUFFERS_INVALID = 726,
+ D3D12_MESSAGE_ID_SET_STREAM_OUTPUT_BUFFERS_INVALID = 727,
+ D3D12_MESSAGE_ID_SET_RENDER_TARGETS_INVALID = 728,
+ D3D12_MESSAGE_ID_CREATEQUERY_HEAP_INVALID_PARAMETERS = 729,
+ D3D12_MESSAGE_ID_CREATEQUERY_HEAP_JPEG_NOT_SUPPORTED = 730,
+ D3D12_MESSAGE_ID_BEGIN_END_QUERY_INVALID_PARAMETERS = 731,
+ D3D12_MESSAGE_ID_CLOSE_COMMAND_LIST_OPEN_QUERY = 732,
+ D3D12_MESSAGE_ID_RESOLVE_QUERY_DATA_INVALID_PARAMETERS = 733,
+ D3D12_MESSAGE_ID_SET_PREDICATION_INVALID_PARAMETERS = 734,
+ D3D12_MESSAGE_ID_TIMESTAMPS_NOT_SUPPORTED = 735,
+ D3D12_MESSAGE_ID_UNSTABLE_POWER_STATE = 736,
+ D3D12_MESSAGE_ID_CREATERESOURCE_UNRECOGNIZEDFORMAT = 737,
+ D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDFORMAT = 738,
+ D3D12_MESSAGE_ID_GETCOPYABLELAYOUT_INVALIDSUBRESOURCERANGE = 739,
+ D3D12_MESSAGE_ID_GETCOPYABLELAYOUT_INVALIDBASEOFFSET = 740,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_HEAP = 741,
+ D3D12_MESSAGE_ID_CREATE_SAMPLER_INVALID = 742,
+ D3D12_MESSAGE_ID_CREATECOMMANDSIGNATURE_INVALID = 743,
+ D3D12_MESSAGE_ID_EXECUTE_INDIRECT_INVALID_PARAMETERS = 744,
+ D3D12_MESSAGE_ID_GETGPUVIRTUALADDRESS_INVALID_RESOURCE_DIMENSION = 745,
+ D3D12_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDCONTEXTTYPE = 746,
+ D3D12_MESSAGE_ID_CREATEQUERYORPREDICATE_DECODENOTSUPPORTED = 747,
+ D3D12_MESSAGE_ID_CREATEQUERYORPREDICATE_ENCODENOTSUPPORTED = 748,
+ D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDPLANEINDEX = 749,
+ D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDVIDEOPLANEINDEX = 750,
+ D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_AMBIGUOUSVIDEOPLANEINDEX = 751,
+ D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDPLANEINDEX = 752,
+ D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDVIDEOPLANEINDEX = 753,
+ D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_AMBIGUOUSVIDEOPLANEINDEX = 754,
+ D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDPLANEINDEX = 755,
+ D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDVIDEOPLANEINDEX = 756,
+ D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_AMBIGUOUSVIDEOPLANEINDEX = 757,
+ D3D12_MESSAGE_ID_JPEGDECODE_INVALIDSCANDATAOFFSET = 758,
+ D3D12_MESSAGE_ID_JPEGDECODE_NOTSUPPORTED = 759,
+ D3D12_MESSAGE_ID_JPEGDECODE_DIMENSIONSTOOLARGE = 760,
+ D3D12_MESSAGE_ID_JPEGDECODE_INVALIDCOMPONENTS = 761,
+ D3D12_MESSAGE_ID_JPEGDECODE_UNSUPPORTEDCOMPONENTS = 762,
+ D3D12_MESSAGE_ID_JPEGDECODE_DESTINATIONNOT2D = 763,
+ D3D12_MESSAGE_ID_JPEGDECODE_TILEDRESOURCESUNSUPPORTED = 764,
+ D3D12_MESSAGE_ID_JPEGDECODE_GUARDRECTSUNSUPPORTED = 765,
+ D3D12_MESSAGE_ID_JPEGDECODE_FORMATUNSUPPORTED = 766,
+ D3D12_MESSAGE_ID_JPEGDECODE_INVALIDSUBRESOURCE = 767,
+ D3D12_MESSAGE_ID_JPEGDECODE_INVALIDMIPLEVEL = 768,
+ D3D12_MESSAGE_ID_JPEGDECODE_EMPTYDESTBOX = 769,
+ D3D12_MESSAGE_ID_JPEGDECODE_DESTBOXNOT2D = 770,
+ D3D12_MESSAGE_ID_JPEGDECODE_DESTBOXNOTSUB = 771,
+ D3D12_MESSAGE_ID_JPEGDECODE_DESTBOXESINTERSECT = 772,
+ D3D12_MESSAGE_ID_JPEGDECODE_XSUBSAMPLEMISMATCH = 773,
+ D3D12_MESSAGE_ID_JPEGDECODE_YSUBSAMPLEMISMATCH = 774,
+ D3D12_MESSAGE_ID_JPEGDECODE_XSUBSAMPLEODD = 775,
+ D3D12_MESSAGE_ID_JPEGDECODE_YSUBSAMPLEODD = 776,
+ D3D12_MESSAGE_ID_JPEGDECODE_UPSCALEUNSUPPORTED = 777,
+ D3D12_MESSAGE_ID_JPEGDECODE_TIER4DOWNSCALETOLARGE = 778,
+ D3D12_MESSAGE_ID_JPEGDECODE_TIER3DOWNSCALEUNSUPPORTED = 779,
+ D3D12_MESSAGE_ID_JPEGDECODE_CHROMASIZEMISMATCH = 780,
+ D3D12_MESSAGE_ID_JPEGDECODE_LUMACHROMASIZEMISMATCH = 781,
+ D3D12_MESSAGE_ID_JPEGDECODE_INVALIDNUMDESTINATIONS = 782,
+ D3D12_MESSAGE_ID_JPEGDECODE_SUBBOXUNSUPPORTED = 783,
+ D3D12_MESSAGE_ID_JPEGDECODE_1DESTUNSUPPORTEDFORMAT = 784,
+ D3D12_MESSAGE_ID_JPEGDECODE_3DESTUNSUPPORTEDFORMAT = 785,
+ D3D12_MESSAGE_ID_JPEGDECODE_SCALEUNSUPPORTED = 786,
+ D3D12_MESSAGE_ID_JPEGDECODE_INVALIDSOURCESIZE = 787,
+ D3D12_MESSAGE_ID_JPEGDECODE_INVALIDCOPYFLAGS = 788,
+ D3D12_MESSAGE_ID_JPEGDECODE_HAZARD = 789,
+ D3D12_MESSAGE_ID_JPEGDECODE_UNSUPPORTEDSRCBUFFERUSAGE = 790,
+ D3D12_MESSAGE_ID_JPEGDECODE_UNSUPPORTEDSRCBUFFERMISCFLAGS = 791,
+ D3D12_MESSAGE_ID_JPEGDECODE_UNSUPPORTEDDSTTEXTUREUSAGE = 792,
+ D3D12_MESSAGE_ID_JPEGDECODE_BACKBUFFERNOTSUPPORTED = 793,
+ D3D12_MESSAGE_ID_JPEGDECODE_UNSUPPRTEDCOPYFLAGS = 794,
+ D3D12_MESSAGE_ID_JPEGENCODE_NOTSUPPORTED = 795,
+ D3D12_MESSAGE_ID_JPEGENCODE_INVALIDSCANDATAOFFSET = 796,
+ D3D12_MESSAGE_ID_JPEGENCODE_INVALIDCOMPONENTS = 797,
+ D3D12_MESSAGE_ID_JPEGENCODE_SOURCENOT2D = 798,
+ D3D12_MESSAGE_ID_JPEGENCODE_TILEDRESOURCESUNSUPPORTED = 799,
+ D3D12_MESSAGE_ID_JPEGENCODE_GUARDRECTSUNSUPPORTED = 800,
+ D3D12_MESSAGE_ID_JPEGENCODE_XSUBSAMPLEMISMATCH = 801,
+ D3D12_MESSAGE_ID_JPEGENCODE_YSUBSAMPLEMISMATCH = 802,
+ D3D12_MESSAGE_ID_JPEGENCODE_UNSUPPORTEDCOMPONENTS = 803,
+ D3D12_MESSAGE_ID_JPEGENCODE_FORMATUNSUPPORTED = 804,
+ D3D12_MESSAGE_ID_JPEGENCODE_INVALIDSUBRESOURCE = 805,
+ D3D12_MESSAGE_ID_JPEGENCODE_INVALIDMIPLEVEL = 806,
+ D3D12_MESSAGE_ID_JPEGENCODE_DIMENSIONSTOOLARGE = 807,
+ D3D12_MESSAGE_ID_JPEGENCODE_HAZARD = 808,
+ D3D12_MESSAGE_ID_JPEGENCODE_UNSUPPORTEDDSTBUFFERUSAGE = 809,
+ D3D12_MESSAGE_ID_JPEGENCODE_UNSUPPORTEDDSTBUFFERMISCFLAGS = 810,
+ D3D12_MESSAGE_ID_JPEGENCODE_UNSUPPORTEDSRCTEXTUREUSAGE = 811,
+ D3D12_MESSAGE_ID_JPEGENCODE_BACKBUFFERNOTSUPPORTED = 812,
+ D3D12_MESSAGE_ID_CREATEQUERYORPREDICATE_UNSUPPORTEDCONTEXTTTYPEFORQUERY = 813,
+ D3D12_MESSAGE_ID_FLUSH1_INVALIDCONTEXTTYPE = 814,
+ D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDCLEARVALUE = 815,
+ D3D12_MESSAGE_ID_CREATERESOURCE_UNRECOGNIZEDCLEARVALUEFORMAT = 816,
+ D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDCLEARVALUEFORMAT = 817,
+ D3D12_MESSAGE_ID_CREATERESOURCE_CLEARVALUEDENORMFLUSH = 818,
+ D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALIDDEPTH = 819,
+ D3D12_MESSAGE_ID_CLEARRENDERTARGETVIEW_MISMATCHINGCLEARVALUE = 820,
+ D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_MISMATCHINGCLEARVALUE = 821,
+ D3D12_MESSAGE_ID_MAP_INVALIDHEAP = 822,
+ D3D12_MESSAGE_ID_UNMAP_INVALIDHEAP = 823,
+ D3D12_MESSAGE_ID_MAP_INVALIDRESOURCE = 824,
+ D3D12_MESSAGE_ID_UNMAP_INVALIDRESOURCE = 825,
+ D3D12_MESSAGE_ID_MAP_INVALIDSUBRESOURCE = 826,
+ D3D12_MESSAGE_ID_UNMAP_INVALIDSUBRESOURCE = 827,
+ D3D12_MESSAGE_ID_MAP_INVALIDRANGE = 828,
+ D3D12_MESSAGE_ID_UNMAP_INVALIDRANGE = 829,
+ D3D12_MESSAGE_ID_MAP_NULLRANGE = 830,
+ D3D12_MESSAGE_ID_UNMAP_NULLRANGE = 831,
+ D3D12_MESSAGE_ID_MAP_INVALIDDATAPOINTER = 832,
+ D3D12_MESSAGE_ID_MAP_INVALIDARG_RETURN = 833,
+ D3D12_MESSAGE_ID_MAP_OUTOFMEMORY_RETURN = 834,
+ D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_BUNDLENOTSUPPORTED = 835,
+ D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_COMMANDLISTMISMATCH = 836,
+ D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_OPENCOMMANDLIST = 837,
+ D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_FAILEDCOMMANDLIST = 838,
+ D3D12_MESSAGE_ID_COPYBUFFERREGION_NULLDST = 839,
+ D3D12_MESSAGE_ID_COPYBUFFERREGION_INVALIDDSTRESOURCEDIMENSION = 840,
+ D3D12_MESSAGE_ID_COPYBUFFERREGION_DSTRANGEOUTOFBOUNDS = 841,
+ D3D12_MESSAGE_ID_COPYBUFFERREGION_NULLSRC = 842,
+ D3D12_MESSAGE_ID_COPYBUFFERREGION_INVALIDSRCRESOURCEDIMENSION = 843,
+ D3D12_MESSAGE_ID_COPYBUFFERREGION_SRCRANGEOUTOFBOUNDS = 844,
+ D3D12_MESSAGE_ID_COPYBUFFERREGION_INVALIDCOPYFLAGS = 845,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_NULLDST = 846,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_UNRECOGNIZEDDSTTYPE = 847,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTRESOURCEDIMENSION = 848,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTRESOURCE = 849,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTSUBRESOURCE = 850,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTOFFSET = 851,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_UNRECOGNIZEDDSTFORMAT = 852,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTFORMAT = 853,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTDIMENSIONS = 854,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTROWPITCH = 855,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTPLACEMENT = 856,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTDSPLACEDFOOTPRINTFORMAT = 857,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_DSTREGIONOUTOFBOUNDS = 858,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_NULLSRC = 859,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_UNRECOGNIZEDSRCTYPE = 860,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCRESOURCEDIMENSION = 861,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCRESOURCE = 862,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCSUBRESOURCE = 863,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCOFFSET = 864,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_UNRECOGNIZEDSRCFORMAT = 865,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCFORMAT = 866,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCDIMENSIONS = 867,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCROWPITCH = 868,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCPLACEMENT = 869,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCDSPLACEDFOOTPRINTFORMAT = 870,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_SRCREGIONOUTOFBOUNDS = 871,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTCOORDINATES = 872,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCBOX = 873,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_FORMATMISMATCH = 874,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_EMPTYBOX = 875,
+ D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDCOPYFLAGS = 876,
+ D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_INVALID_SUBRESOURCE_INDEX = 877,
+ D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_INVALID_FORMAT = 878,
+ D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_RESOURCE_MISMATCH = 879,
+ D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_INVALID_SAMPLE_COUNT = 880,
+ D3D12_MESSAGE_ID_CREATECOMPUTEPIPELINESTATE_INVALID_SHADER = 881,
+ D3D12_MESSAGE_ID_CREATECOMPUTEPIPELINESTATE_CS_ROOT_SIGNATURE_MISMATCH = 882,
+ D3D12_MESSAGE_ID_CREATECOMPUTEPIPELINESTATE_MISSING_ROOT_SIGNATURE = 883,
+ D3D12_MESSAGE_ID_CREATEPIPELINESTATE_INVALIDCACHEDBLOB = 884,
+ D3D12_MESSAGE_ID_CREATEPIPELINESTATE_CACHEDBLOBADAPTERMISMATCH = 885,
+ D3D12_MESSAGE_ID_CREATEPIPELINESTATE_CACHEDBLOBDRIVERVERSIONMISMATCH = 886,
+ D3D12_MESSAGE_ID_CREATEPIPELINESTATE_CACHEDBLOBDESCMISMATCH = 887,
+ D3D12_MESSAGE_ID_CREATEPIPELINESTATE_CACHEDBLOBIGNORED = 888,
+ D3D12_MESSAGE_ID_WRITETOSUBRESOURCE_INVALIDHEAP = 889,
+ D3D12_MESSAGE_ID_WRITETOSUBRESOURCE_INVALIDRESOURCE = 890,
+ D3D12_MESSAGE_ID_WRITETOSUBRESOURCE_INVALIDBOX = 891,
+ D3D12_MESSAGE_ID_WRITETOSUBRESOURCE_INVALIDSUBRESOURCE = 892,
+ D3D12_MESSAGE_ID_WRITETOSUBRESOURCE_EMPTYBOX = 893,
+ D3D12_MESSAGE_ID_READFROMSUBRESOURCE_INVALIDHEAP = 894,
+ D3D12_MESSAGE_ID_READFROMSUBRESOURCE_INVALIDRESOURCE = 895,
+ D3D12_MESSAGE_ID_READFROMSUBRESOURCE_INVALIDBOX = 896,
+ D3D12_MESSAGE_ID_READFROMSUBRESOURCE_INVALIDSUBRESOURCE = 897,
+ D3D12_MESSAGE_ID_READFROMSUBRESOURCE_EMPTYBOX = 898,
+ D3D12_MESSAGE_ID_TOO_MANY_NODES_SPECIFIED = 899,
+ D3D12_MESSAGE_ID_INVALID_NODE_INDEX = 900,
+ D3D12_MESSAGE_ID_GETHEAPPROPERTIES_INVALIDRESOURCE = 901,
+ D3D12_MESSAGE_ID_NODE_MASK_MISMATCH = 902,
+ D3D12_MESSAGE_ID_COMMAND_LIST_OUTOFMEMORY = 903,
+ D3D12_MESSAGE_ID_COMMAND_LIST_MULTIPLE_SWAPCHAIN_BUFFER_REFERENCES = 904,
+ D3D12_MESSAGE_ID_COMMAND_LIST_TOO_MANY_SWAPCHAIN_REFERENCES = 905,
+ D3D12_MESSAGE_ID_COMMAND_QUEUE_TOO_MANY_SWAPCHAIN_REFERENCES = 906,
+ D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_WRONGSWAPCHAINBUFFERREFERENCE = 907,
+ D3D12_MESSAGE_ID_COMMAND_LIST_SETRENDERTARGETS_INVALIDNUMRENDERTARGETS = 908,
+ D3D12_MESSAGE_ID_CREATE_QUEUE_INVALID_TYPE = 909,
+ D3D12_MESSAGE_ID_CREATE_QUEUE_INVALID_FLAGS = 910,
+ D3D12_MESSAGE_ID_CREATESHAREDRESOURCE_INVALIDFLAGS = 911,
+ D3D12_MESSAGE_ID_CREATESHAREDRESOURCE_INVALIDFORMAT = 912,
+ D3D12_MESSAGE_ID_CREATESHAREDHEAP_INVALIDFLAGS = 913,
+ D3D12_MESSAGE_ID_REFLECTSHAREDPROPERTIES_UNRECOGNIZEDPROPERTIES = 914,
+ D3D12_MESSAGE_ID_REFLECTSHAREDPROPERTIES_INVALIDSIZE = 915,
+ D3D12_MESSAGE_ID_REFLECTSHAREDPROPERTIES_INVALIDOBJECT = 916,
+ D3D12_MESSAGE_ID_KEYEDMUTEX_INVALIDOBJECT = 917,
+ D3D12_MESSAGE_ID_KEYEDMUTEX_INVALIDKEY = 918,
+ D3D12_MESSAGE_ID_KEYEDMUTEX_WRONGSTATE = 919,
+ D3D12_MESSAGE_ID_CREATE_QUEUE_INVALID_PRIORITY = 920,
+ D3D12_MESSAGE_ID_OBJECT_DELETED_WHILE_STILL_IN_USE = 921,
+ D3D12_MESSAGE_ID_CREATEPIPELINESTATE_INVALID_FLAGS = 922,
+ D3D12_MESSAGE_ID_HEAP_ADDRESS_RANGE_HAS_NO_RESOURCE = 923,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_RENDER_TARGET_DELETED = 924,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_ALL_RENDER_TARGETS_HAVE_UNKNOWN_FORMAT = 925,
+ D3D12_MESSAGE_ID_HEAP_ADDRESS_RANGE_INTERSECTS_MULTIPLE_BUFFERS = 926,
+ D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_GPU_WRITTEN_READBACK_RESOURCE_MAPPED = 927,
+ D3D12_MESSAGE_ID_UNMAP_RANGE_NOT_NEEDED = 928,
+ D3D12_MESSAGE_ID_UNMAP_RANGE_NOT_EMPTY = 929,
+ D3D12_MESSAGE_ID_MAP_INVALID_NULLRANGE = 930,
+ D3D12_MESSAGE_ID_UNMAP_INVALID_NULLRANGE = 931,
+ D3D12_MESSAGE_ID_NO_GRAPHICS_API_SUPPORT = 932,
+ D3D12_MESSAGE_ID_NO_COMPUTE_API_SUPPORT = 933,
+ D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_RESOURCE_FLAGS_NOT_SUPPORTED = 934,
+ D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_ROOT_ARGUMENT_UNINITIALIZED = 935,
+ D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_DESCRIPTOR_HEAP_INDEX_OUT_OF_BOUNDS = 936,
+ D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_DESCRIPTOR_TABLE_REGISTER_INDEX_OUT_OF_BOUNDS = 937,
+ D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_DESCRIPTOR_UNINITIALIZED = 938,
+ D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_DESCRIPTOR_TYPE_MISMATCH = 939,
+ D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_SRV_RESOURCE_DIMENSION_MISMATCH = 940,
+ D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_UAV_RESOURCE_DIMENSION_MISMATCH = 941,
+ D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_INCOMPATIBLE_RESOURCE_STATE = 942,
+ D3D12_MESSAGE_ID_COPYRESOURCE_NULLDST = 943,
+ D3D12_MESSAGE_ID_COPYRESOURCE_INVALIDDSTRESOURCE = 944,
+ D3D12_MESSAGE_ID_COPYRESOURCE_NULLSRC = 945,
+ D3D12_MESSAGE_ID_COPYRESOURCE_INVALIDSRCRESOURCE = 946,
+ D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_NULLDST = 947,
+ D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_INVALIDDSTRESOURCE = 948,
+ D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_NULLSRC = 949,
+ D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_INVALIDSRCRESOURCE = 950,
+ D3D12_MESSAGE_ID_PIPELINE_STATE_TYPE_MISMATCH = 951,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DISPATCH_ROOT_SIGNATURE_NOT_SET = 952,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DISPATCH_ROOT_SIGNATURE_MISMATCH = 953,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_ZERO_BARRIERS = 954,
+ D3D12_MESSAGE_ID_BEGIN_END_EVENT_MISMATCH = 955,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_POSSIBLE_BEFORE_AFTER_MISMATCH = 956,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_MISMATCHING_BEGIN_END = 957,
+ D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_INVALID_RESOURCE = 958,
+ D3D12_MESSAGE_ID_USE_OF_ZERO_REFCOUNT_OBJECT = 959,
+ D3D12_MESSAGE_ID_OBJECT_EVICTED_WHILE_STILL_IN_USE = 960,
+ D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_ROOT_DESCRIPTOR_ACCESS_OUT_OF_BOUNDS = 961,
+ D3D12_MESSAGE_ID_CREATEPIPELINELIBRARY_INVALIDLIBRARYBLOB = 962,
+ D3D12_MESSAGE_ID_CREATEPIPELINELIBRARY_DRIVERVERSIONMISMATCH = 963,
+ D3D12_MESSAGE_ID_CREATEPIPELINELIBRARY_ADAPTERVERSIONMISMATCH = 964,
+ D3D12_MESSAGE_ID_CREATEPIPELINELIBRARY_UNSUPPORTED = 965,
+ D3D12_MESSAGE_ID_CREATE_PIPELINELIBRARY = 966,
+ D3D12_MESSAGE_ID_LIVE_PIPELINELIBRARY = 967,
+ D3D12_MESSAGE_ID_DESTROY_PIPELINELIBRARY = 968,
+ D3D12_MESSAGE_ID_STOREPIPELINE_NONAME = 969,
+ D3D12_MESSAGE_ID_STOREPIPELINE_DUPLICATENAME = 970,
+ D3D12_MESSAGE_ID_LOADPIPELINE_NAMENOTFOUND = 971,
+ D3D12_MESSAGE_ID_LOADPIPELINE_INVALIDDESC = 972,
+ D3D12_MESSAGE_ID_PIPELINELIBRARY_SERIALIZE_NOTENOUGHMEMORY = 973,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_PS_OUTPUT_RT_OUTPUT_MISMATCH = 974,
+ D3D12_MESSAGE_ID_SETEVENTONMULTIPLEFENCECOMPLETION_INVALIDFLAGS = 975,
+ D3D12_MESSAGE_ID_CREATE_QUEUE_VIDEO_NOT_SUPPORTED = 976,
+ D3D12_MESSAGE_ID_CREATE_COMMAND_ALLOCATOR_VIDEO_NOT_SUPPORTED = 977,
+ D3D12_MESSAGE_ID_CREATEQUERY_HEAP_VIDEO_DECODE_STATISTICS_NOT_SUPPORTED = 978,
+ D3D12_MESSAGE_ID_CREATE_VIDEODECODECOMMANDLIST = 979,
+ D3D12_MESSAGE_ID_CREATE_VIDEODECODER = 980,
+ D3D12_MESSAGE_ID_CREATE_VIDEODECODESTREAM = 981,
+ D3D12_MESSAGE_ID_LIVE_VIDEODECODECOMMANDLIST = 982,
+ D3D12_MESSAGE_ID_LIVE_VIDEODECODER = 983,
+ D3D12_MESSAGE_ID_LIVE_VIDEODECODESTREAM = 984,
+ D3D12_MESSAGE_ID_DESTROY_VIDEODECODECOMMANDLIST = 985,
+ D3D12_MESSAGE_ID_DESTROY_VIDEODECODER = 986,
+ D3D12_MESSAGE_ID_DESTROY_VIDEODECODESTREAM = 987,
+ D3D12_MESSAGE_ID_DECODE_FRAME_INVALID_PARAMETERS = 988,
+ D3D12_MESSAGE_ID_DEPRECATED_API = 989,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_MISMATCHING_COMMAND_LIST_TYPE = 990,
+ D3D12_MESSAGE_ID_COMMAND_LIST_DESCRIPTOR_TABLE_NOT_SET = 991,
+ D3D12_MESSAGE_ID_COMMAND_LIST_ROOT_CONSTANT_BUFFER_VIEW_NOT_SET = 992,
+ D3D12_MESSAGE_ID_COMMAND_LIST_ROOT_SHADER_RESOURCE_VIEW_NOT_SET = 993,
+ D3D12_MESSAGE_ID_COMMAND_LIST_ROOT_UNORDERED_ACCESS_VIEW_NOT_SET = 994,
+ D3D12_MESSAGE_ID_DISCARD_INVALID_SUBRESOURCE_RANGE = 995,
+ D3D12_MESSAGE_ID_DISCARD_ONE_SUBRESOURCE_FOR_MIPS_WITH_RECTS = 996,
+ D3D12_MESSAGE_ID_DISCARD_NO_RECTS_FOR_NON_TEXTURE2D = 997,
+ D3D12_MESSAGE_ID_COPY_ON_SAME_SUBRESOURCE = 998,
+ D3D12_MESSAGE_ID_SETRESIDENCYPRIORITY_INVALID_PAGEABLE = 999,
+ D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_UNSUPPORTED = 1000,
+ D3D12_MESSAGE_ID_STATIC_DESCRIPTOR_INVALID_DESCRIPTOR_CHANGE = 1001,
+ D3D12_MESSAGE_ID_DATA_STATIC_DESCRIPTOR_INVALID_DATA_CHANGE = 1002,
+ D3D12_MESSAGE_ID_DATA_STATIC_WHILE_SET_AT_EXECUTE_DESCRIPTOR_INVALID_DATA_CHANGE = 1003,
+ D3D12_MESSAGE_ID_EXECUTE_BUNDLE_STATIC_DESCRIPTOR_DATA_STATIC_NOT_SET = 1004,
+ D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_RESOURCE_ACCESS_OUT_OF_BOUNDS = 1005,
+ D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_SAMPLER_MODE_MISMATCH = 1006,
+ D3D12_MESSAGE_ID_CREATE_FENCE_INVALID_FLAGS = 1007,
+ D3D12_MESSAGE_ID_RESOURCE_BARRIER_DUPLICATE_SUBRESOURCE_TRANSITIONS = 1008,
+ D3D12_MESSAGE_ID_SETRESIDENCYPRIORITY_INVALID_PRIORITY = 1009,
+ D3D12_MESSAGE_ID_CREATE_PASS = 1010,
+ D3D12_MESSAGE_ID_DESTROY_PASS = 1011,
+ D3D12_MESSAGE_ID_LIVE_PASS = 1012,
+ D3D12_MESSAGE_ID_CREATE_DESCRIPTOR_HEAP_LARGE_NUM_DESCRIPTORS = 1013,
+ D3D12_MESSAGE_ID_BEGIN_EVENT = 1014,
+ D3D12_MESSAGE_ID_END_EVENT = 1015,
+ D3D12_MESSAGE_ID_CREATEDEVICE_DEBUG_LAYER_STARTUP_OPTIONS = 1016,
+ D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_DEPTHBOUNDSTEST_UNSUPPORTED = 1017,
+ D3D12_MESSAGE_ID_CREATEPIPELINESTATE_DUPLICATE_SUBOBJECT = 1018,
+ D3D12_MESSAGE_ID_CREATEPIPELINESTATE_UNKNOWN_SUBOBJECT = 1019,
+ D3D12_MESSAGE_ID_CREATEPIPELINESTATE_ZERO_SIZE_STREAM = 1020,
+ D3D12_MESSAGE_ID_CREATEPIPELINESTATE_INVALID_STREAM = 1021,
+ D3D12_MESSAGE_ID_CREATEPIPELINESTATE_CANNOT_DEDUCE_TYPE = 1022,
+ D3D12_MESSAGE_ID_COMMAND_LIST_STATIC_DESCRIPTOR_RESOURCE_DIMENSION_MISMATCH = 1023,
+ D3D12_MESSAGE_ID_CREATE_COMMAND_QUEUE_INSUFFICIENT_PRIVILEGE_FOR_GLOBAL_REALTIME = 1024,
+ D3D12_MESSAGE_ID_CREATE_COMMAND_QUEUE_INSUFFICIENT_HARDWARE_SUPPORT_FOR_GLOBAL_REALTIME = 1025,
+ D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_ARCHITECTURE = 1026,
+ D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_NULL_DST = 1027,
+ D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_DST_RESOURCE_DIMENSION = 1028,
+ D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_DST_RANGE_OUT_OF_BOUNDS = 1029,
+ D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_NULL_SRC = 1030,
+ D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_SRC_RESOURCE_DIMENSION = 1031,
+ D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_SRC_RANGE_OUT_OF_BOUNDS = 1032,
+ D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_OFFSET_ALIGNMENT = 1033,
+ D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_NULL_DEPENDENT_RESOURCES = 1034,
+ D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_NULL_DEPENDENT_SUBRESOURCE_RANGES = 1035,
+ D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_DEPENDENT_RESOURCE = 1036,
+ D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_DEPENDENT_SUBRESOURCE_RANGE = 1037,
+ D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_DEPENDENT_SUBRESOURCE_OUT_OF_BOUNDS = 1038,
+ D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_DEPENDENT_RANGE_OUT_OF_BOUNDS = 1039,
+ D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_ZERO_DEPENDENCIES = 1040,
+ D3D12_MESSAGE_ID_DEVICE_CREATE_SHARED_HANDLE_INVALIDARG = 1041,
+ D3D12_MESSAGE_ID_DESCRIPTOR_HANDLE_WITH_INVALID_RESOURCE = 1042,
+ D3D12_MESSAGE_ID_SETDEPTHBOUNDS_INVALIDARGS = 1043,
+ D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_RESOURCE_STATE_IMPRECISE = 1044,
+ D3D12_MESSAGE_ID_COMMAND_LIST_PIPELINE_STATE_NOT_SET = 1045,
+ D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_MODEL_MISMATCH = 1046,
+ D3D12_MESSAGE_ID_OBJECT_ACCESSED_WHILE_STILL_IN_USE = 1047,
+ D3D12_MESSAGE_ID_PROGRAMMABLE_MSAA_UNSUPPORTED = 1048,
+ D3D12_MESSAGE_ID_SETSAMPLEPOSITIONS_INVALIDARGS = 1049,
+ D3D12_MESSAGE_ID_RESOLVESUBRESOURCEREGION_INVALID_RECT = 1050,
+ D3D12_MESSAGE_ID_CREATE_VIDEODECODECOMMANDQUEUE = 1051,
+ D3D12_MESSAGE_ID_CREATE_VIDEOPROCESSCOMMANDLIST = 1052,
+ D3D12_MESSAGE_ID_CREATE_VIDEOPROCESSCOMMANDQUEUE = 1053,
+ D3D12_MESSAGE_ID_LIVE_VIDEODECODECOMMANDQUEUE = 1054,
+ D3D12_MESSAGE_ID_LIVE_VIDEOPROCESSCOMMANDLIST = 1055,
+ D3D12_MESSAGE_ID_LIVE_VIDEOPROCESSCOMMANDQUEUE = 1056,
+ D3D12_MESSAGE_ID_DESTROY_VIDEODECODECOMMANDQUEUE = 1057,
+ D3D12_MESSAGE_ID_DESTROY_VIDEOPROCESSCOMMANDLIST = 1058,
+ D3D12_MESSAGE_ID_DESTROY_VIDEOPROCESSCOMMANDQUEUE = 1059,
+ D3D12_MESSAGE_ID_CREATE_VIDEOPROCESSOR = 1060,
+ D3D12_MESSAGE_ID_CREATE_VIDEOPROCESSSTREAM = 1061,
+ D3D12_MESSAGE_ID_LIVE_VIDEOPROCESSOR = 1062,
+ D3D12_MESSAGE_ID_LIVE_VIDEOPROCESSSTREAM = 1063,
+ D3D12_MESSAGE_ID_DESTROY_VIDEOPROCESSOR = 1064,
+ D3D12_MESSAGE_ID_DESTROY_VIDEOPROCESSSTREAM = 1065,
+ D3D12_MESSAGE_ID_PROCESS_FRAME_INVALID_PARAMETERS = 1066,
+ D3D12_MESSAGE_ID_COPY_INVALIDLAYOUT = 1067,
+ D3D12_MESSAGE_ID_D3D12_MESSAGES_END = 1068,
+}}
+STRUCT!{struct D3D12_MESSAGE {
+ Category: D3D12_MESSAGE_CATEGORY,
+ Severity: D3D12_MESSAGE_SEVERITY,
+ ID: D3D12_MESSAGE_ID,
+ pDescription: *const c_char,
+ DescriptionByteLength: SIZE_T,
+}}
+STRUCT!{struct D3D12_INFO_QUEUE_FILTER_DESC {
+ NumCategories: UINT,
+ pCategoryList: *mut D3D12_MESSAGE_CATEGORY,
+ NumSeverities: UINT,
+ pSeverityList: *mut D3D12_MESSAGE_SEVERITY,
+ NumIDs: UINT,
+ pIDList: *mut D3D12_MESSAGE_ID,
+}}
+STRUCT!{struct D3D12_INFO_QUEUE_FILTER {
+ AllowList: D3D12_INFO_QUEUE_FILTER_DESC,
+ DenyList: D3D12_INFO_QUEUE_FILTER_DESC,
+}}
+pub const D3D12_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT: UINT = 1024;
+RIDL!{#[uuid(0x0742a90b, 0xc387, 0x483f, 0xb9, 0x46, 0x30, 0xa7, 0xe4, 0xe6, 0x14, 0x58)]
+interface ID3D12InfoQueue(ID3D12InfoQueueVtbl): IUnknown(IUnknownVtbl) {
+ fn SetMessageCountLimit(
+ MessageCountLimit: UINT64,
+ ) -> HRESULT,
+ fn ClearStoredMessages() -> (),
+ fn GetMessage(
+ MessageIndex: UINT64,
+ pMessage: *mut D3D12_MESSAGE,
+ pMessageByteLength: *mut SIZE_T,
+ ) -> HRESULT,
+ fn GetNumMessagesAllowedByStorageFilter() -> UINT64,
+ fn GetNumMessagesDeniedByStorageFilter() -> UINT64,
+ fn GetNumStoredMessages() -> UINT64,
+ fn GetNumStoredMessagesAllowedByRetrievalFilter() -> UINT64,
+ fn GetNumMessagesDiscardedByMessageCountLimit() -> UINT64,
+ fn GetMessageCountLimit() -> UINT64,
+ fn AddStorageFilterEntries(
+ pFilter: *mut D3D12_INFO_QUEUE_FILTER,
+ ) -> HRESULT,
+ fn GetStorageFilter(
+ pFilter: *mut D3D12_INFO_QUEUE_FILTER,
+ pFilterByteLength: *mut SIZE_T,
+ ) -> HRESULT,
+ fn ClearStorageFilter() -> (),
+ fn PushEmptyStorageFilter() -> HRESULT,
+ fn PushCopyOfStorageFilter() -> HRESULT,
+ fn PushStorageFilter(
+ pFilter: *mut D3D12_INFO_QUEUE_FILTER,
+ ) -> HRESULT,
+ fn PopStorageFilter() -> (),
+ fn GetStorageFilterStackSize() -> UINT,
+ fn AddRetrievalFilterEntries(
+ pFilter: *mut D3D12_INFO_QUEUE_FILTER,
+ ) -> HRESULT,
+ fn GetRetrievalFilter(
+ pFilter: *mut D3D12_INFO_QUEUE_FILTER,
+ pFilterByteLength: *mut SIZE_T,
+ ) -> HRESULT,
+ fn ClearRetrievalFilter() -> (),
+ fn PushEmptyRetrievalFilter() -> HRESULT,
+ fn PushCopyOfRetrievalFilter() -> HRESULT,
+ fn PushRetrievalFilter(
+ pFilter: *mut D3D12_INFO_QUEUE_FILTER,
+ ) -> HRESULT,
+ fn PopRetrievalFilter() -> (),
+ fn GetRetrievalFilterStackSize() -> UINT,
+ fn AddMessage(
+ Category: D3D12_MESSAGE_CATEGORY,
+ Severity: D3D12_MESSAGE_SEVERITY,
+ ID: D3D12_MESSAGE_ID,
+ pDescription: LPCSTR,
+ ) -> HRESULT,
+ fn AddApplicationMessage(
+ Severity: D3D12_MESSAGE_SEVERITY,
+ pDescription: LPCSTR,
+ ) -> HRESULT,
+ fn SetBreakOnCategory(
+ Category: D3D12_MESSAGE_CATEGORY,
+ bEnable: BOOL,
+ ) -> HRESULT,
+ fn SetBreakOnSeverity(
+ Severity: D3D12_MESSAGE_SEVERITY,
+ bEnable: BOOL,
+ ) -> HRESULT,
+ fn SetBreakOnID(
+ ID: D3D12_MESSAGE_ID,
+ bEnable: BOOL,
+ ) -> HRESULT,
+ fn GetBreakOnCategory(
+ Category: D3D12_MESSAGE_CATEGORY,
+ ) -> BOOL,
+ fn GetBreakOnSeverity(
+ Severity: D3D12_MESSAGE_SEVERITY,
+ ) -> BOOL,
+ fn GetBreakOnID(
+ ID: D3D12_MESSAGE_ID,
+ ) -> BOOL,
+ fn SetMuteDebugOutput(
+ bMute: BOOL,
+ ) -> (),
+ fn GetMuteDebugOutput() -> BOOL,
+}}
+DEFINE_GUID!{IID_ID3D12Debug,
+ 0x344488b7, 0x6846, 0x474b, 0xb9, 0x89, 0xf0, 0x27, 0x44, 0x82, 0x45, 0xe0}
+DEFINE_GUID!{IID_ID3D12Debug1,
+ 0xaffaa4ca, 0x63fe, 0x4d8e, 0xb8, 0xad, 0x15, 0x90, 0x00, 0xaf, 0x43, 0x04}
+DEFINE_GUID!{IID_ID3D12Debug2,
+ 0x93a665c4, 0xa3b2, 0x4e5d, 0xb6, 0x92, 0xa2, 0x6a, 0xe1, 0x4e, 0x33, 0x74}
+DEFINE_GUID!{IID_ID3D12DebugDevice1,
+ 0xa9b71770, 0xd099, 0x4a65, 0xa6, 0x98, 0x3d, 0xee, 0x10, 0x02, 0x0f, 0x88}
+DEFINE_GUID!{IID_ID3D12DebugDevice,
+ 0x3febd6dd, 0x4973, 0x4787, 0x81, 0x94, 0xe4, 0x5f, 0x9e, 0x28, 0x92, 0x3e}
+DEFINE_GUID!{IID_ID3D12DebugCommandQueue,
+ 0x09e0bf36, 0x54ac, 0x484f, 0x88, 0x47, 0x4b, 0xae, 0xea, 0xb6, 0x05, 0x3a}
+DEFINE_GUID!{IID_ID3D12DebugCommandList1,
+ 0x102ca951, 0x311b, 0x4b01, 0xb1, 0x1f, 0xec, 0xb8, 0x3e, 0x06, 0x1b, 0x37}
+DEFINE_GUID!{IID_ID3D12DebugCommandList,
+ 0x09e0bf36, 0x54ac, 0x484f, 0x88, 0x47, 0x4b, 0xae, 0xea, 0xb6, 0x05, 0x3f}
+DEFINE_GUID!{IID_ID3D12InfoQueue,
+ 0x0742a90b, 0xc387, 0x483f, 0xb9, 0x46, 0x30, 0xa7, 0xe4, 0xe6, 0x14, 0x58}
diff --git a/vendor/winapi/src/um/d3d12shader.rs b/vendor/winapi/src/um/d3d12shader.rs
new file mode 100644
index 000000000..f07bf83a6
--- /dev/null
+++ b/vendor/winapi/src/um/d3d12shader.rs
@@ -0,0 +1,347 @@
+// 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::UINT64;
+use shared::minwindef::{BOOL, BYTE, INT, LPVOID, UINT};
+use um::d3dcommon::{
+ D3D_CBUFFER_TYPE, D3D_FEATURE_LEVEL, D3D_INTERPOLATION_MODE, D3D_MIN_PRECISION, D3D_NAME,
+ D3D_PARAMETER_FLAGS, D3D_PRIMITIVE, D3D_PRIMITIVE_TOPOLOGY, D3D_REGISTER_COMPONENT_TYPE,
+ D3D_RESOURCE_RETURN_TYPE, D3D_SHADER_INPUT_TYPE, D3D_SHADER_VARIABLE_CLASS,
+ D3D_SHADER_VARIABLE_TYPE, D3D_SRV_DIMENSION, D3D_TESSELLATOR_DOMAIN,
+ D3D_TESSELLATOR_OUTPUT_PRIMITIVE, D3D_TESSELLATOR_PARTITIONING,
+};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPCSTR};
+ENUM!{enum D3D12_SHADER_VERSION_TYPE {
+ D3D12_SHVER_PIXEL_SHADER = 0x0,
+ D3D12_SHVER_VERTEX_SHADER = 0x1,
+ D3D12_SHVER_GEOMETRY_SHADER = 0x2,
+ D3D12_SHVER_HULL_SHADER = 0x3,
+ D3D12_SHVER_DOMAIN_SHADER = 0x4,
+ D3D12_SHVER_COMPUTE_SHADER = 0x5,
+ D3D12_SHVER_RESERVED0 = 0xFFF0,
+}}
+STRUCT!{struct D3D12_FUNCTION_DESC {
+ Version: UINT,
+ Creator: LPCSTR,
+ Flags: UINT,
+ ConstantBuffers: UINT,
+ BoundResources: UINT,
+ InstructionCount: UINT,
+ TempRegisterCount: UINT,
+ TempArrayCount: UINT,
+ DefCount: UINT,
+ DclCount: UINT,
+ TextureNormalInstructions: UINT,
+ TextureLoadInstructions: UINT,
+ TextureCompInstructions: UINT,
+ TextureBiasInstructions: UINT,
+ TextureGradientInstructions: UINT,
+ FloatInstructionCount: UINT,
+ IntInstructionCount: UINT,
+ UintInstructionCount: UINT,
+ StaticFlowControlCount: UINT,
+ DynamicFlowControlCount: UINT,
+ MacroInstructionCount: UINT,
+ ArrayInstructionCount: UINT,
+ MovInstructionCount: UINT,
+ MovcInstructionCount: UINT,
+ ConversionInstructionCount: UINT,
+ BitwiseInstructionCount: UINT,
+ MinFeatureLevel: D3D_FEATURE_LEVEL,
+ RequiredFeatureFlags: UINT64,
+ Name: LPCSTR,
+ FunctionParameterCount: INT,
+ HasReturn: BOOL,
+ Has10Level9VertexShader: BOOL,
+ Has10Level9PixelShader: BOOL,
+}}
+STRUCT!{struct D3D12_LIBRARY_DESC {
+ Creator: LPCSTR,
+ Flags: UINT,
+ FunctionCount: UINT,
+}}
+STRUCT!{struct D3D12_PARAMETER_DESC {
+ Name: LPCSTR,
+ SemanticName: LPCSTR,
+ Type: D3D_SHADER_VARIABLE_TYPE,
+ Class: D3D_SHADER_VARIABLE_CLASS,
+ Rows: UINT,
+ Columns: UINT,
+ InterpolationMode: D3D_INTERPOLATION_MODE,
+ Flags: D3D_PARAMETER_FLAGS,
+ FirstInRegister: UINT,
+ FirstInComponent: UINT,
+ FirstOutRegister: UINT,
+ FirstOutComponent: UINT,
+}}
+STRUCT!{struct D3D12_SHADER_BUFFER_DESC {
+ Name: LPCSTR,
+ Type: D3D_CBUFFER_TYPE,
+ Variables: UINT,
+ Size: UINT,
+ uFlags: UINT,
+}}
+STRUCT!{struct D3D12_SHADER_DESC {
+ Version: UINT,
+ Creator: LPCSTR,
+ Flags: UINT,
+ ConstantBuffers: UINT,
+ BoundResources: UINT,
+ InputParameters: UINT,
+ OutputParameters: UINT,
+ InstructionCount: UINT,
+ TempRegisterCount: UINT,
+ TempArrayCount: UINT,
+ DefCount: UINT,
+ DclCount: UINT,
+ TextureNormalInstructions: UINT,
+ TextureLoadInstructions: UINT,
+ TextureCompInstructions: UINT,
+ TextureBiasInstructions: UINT,
+ TextureGradientInstructions: UINT,
+ FloatInstructionCount: UINT,
+ IntInstructionCount: UINT,
+ UintInstructionCount: UINT,
+ StaticFlowControlCount: UINT,
+ DynamicFlowControlCount: UINT,
+ MacroInstructionCount: UINT,
+ ArrayInstructionCount: UINT,
+ CutInstructionCount: UINT,
+ EmitInstructionCount: UINT,
+ GSOutputTopology: D3D_PRIMITIVE_TOPOLOGY,
+ GSMaxOutputVertexCount: UINT,
+ InputPrimitive: D3D_PRIMITIVE,
+ PatchConstantParameters: UINT,
+ cGSInstanceCount: UINT,
+ cControlPoints: UINT,
+ HSOutputPrimitive: D3D_TESSELLATOR_OUTPUT_PRIMITIVE,
+ HSPartitioning: D3D_TESSELLATOR_PARTITIONING,
+ TessellatorDomain: D3D_TESSELLATOR_DOMAIN,
+ cBarrierInstructions: UINT,
+ cInterlockedInstructions: UINT,
+ cTextureStoreInstructions: UINT,
+}}
+STRUCT!{struct D3D12_SHADER_INPUT_BIND_DESC {
+ Name: LPCSTR,
+ Type: D3D_SHADER_INPUT_TYPE,
+ BindPoint: UINT,
+ BindCount: UINT,
+ uFlags: UINT,
+ ReturnType: D3D_RESOURCE_RETURN_TYPE,
+ Dimension: D3D_SRV_DIMENSION,
+ NumSamples: UINT,
+ Space: UINT,
+ uID: UINT,
+}}
+STRUCT!{struct D3D12_SHADER_TYPE_DESC {
+ Class: D3D_SHADER_VARIABLE_CLASS,
+ Type: D3D_SHADER_VARIABLE_TYPE,
+ Rows: UINT,
+ Columns: UINT,
+ Elements: UINT,
+ Members: UINT,
+ Offset: UINT,
+ Name: LPCSTR,
+}}
+STRUCT!{struct D3D12_SHADER_VARIABLE_DESC {
+ Name: LPCSTR,
+ StartOffset: UINT,
+ Size: UINT,
+ uFlags: UINT,
+ DefaultValue: LPVOID,
+ StartTexture: UINT,
+ TextureSize: UINT,
+ StartSampler: UINT,
+ SamplerSize: UINT,
+}}
+STRUCT!{struct D3D12_SIGNATURE_PARAMETER_DESC {
+ SemanticName: LPCSTR,
+ SemanticIndex: UINT,
+ Register: UINT,
+ SystemValueType: D3D_NAME,
+ ComponentType: D3D_REGISTER_COMPONENT_TYPE,
+ Mask: BYTE,
+ ReadWriteMask: BYTE,
+ Stream: UINT,
+ MinPrecision: D3D_MIN_PRECISION,
+}}
+RIDL!{#[uuid(0xec25f42d, 0x7006, 0x4f2b, 0xb3, 0x3e, 0x02, 0xcc, 0x33, 0x75, 0x73, 0x3f)]
+interface ID3D12FunctionParameterReflection(ID3D12FunctionParameterReflectionVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D12_PARAMETER_DESC,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x1108795c, 0x2772, 0x4ba9, 0xb2, 0xa8, 0xd4, 0x64, 0xdc, 0x7e, 0x27, 0x99)]
+interface ID3D12FunctionReflection(ID3D12FunctionReflectionVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D12_FUNCTION_DESC,
+ ) -> HRESULT,
+ fn GetConstantBufferByIndex(
+ BufferIndex: UINT,
+ ) -> *mut ID3D12ShaderReflectionConstantBuffer,
+ fn GetConstantBufferByName(
+ Name: LPCSTR,
+ ) -> *mut ID3D12ShaderReflectionConstantBuffer,
+ fn GetResourceBindingDesc(
+ ResourceIndex: UINT,
+ pDesc: *mut D3D12_SHADER_INPUT_BIND_DESC,
+ ) -> HRESULT,
+ fn GetVariableByName(
+ Name: LPCSTR,
+ ) -> *mut ID3D12ShaderReflectionVariable,
+ fn GetResourceBindingDescByName(
+ Name: LPCSTR,
+ pDesc: *mut D3D12_SHADER_INPUT_BIND_DESC,
+ ) -> HRESULT,
+ fn GetFunctionParameter(
+ ParameterIndex: INT,
+ ) -> *mut ID3D12FunctionParameterReflection,
+}}
+RIDL!{#[uuid(0x8e349d19, 0x54db, 0x4a56, 0x9d, 0xc9, 0x11, 0x9d, 0x87, 0xbd, 0xb8, 0x4)]
+interface ID3D12LibraryReflection(ID3D12LibraryReflectionVtbl): IUnknown(IUnknownVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D12_LIBRARY_DESC,
+ ) -> HRESULT,
+ fn GetFunctionByIndex(
+ FunctionIndex: INT,
+ ) -> *mut ID3D12FunctionReflection,
+}}
+DEFINE_GUID!{IID_ID3D12ShaderReflectionConstantBuffer,
+ 0xc59598b4, 0x48b3, 0x4869, 0xb9, 0xb1, 0xb1, 0x61, 0x8b, 0x14, 0xa8, 0xb7}
+RIDL!{#[uuid(0xc59598b4, 0x48b3, 0x4869, 0xb9, 0xb1, 0xb1, 0x61, 0x8b, 0x14, 0xa8, 0xb7)]
+interface ID3D12ShaderReflectionConstantBuffer(ID3D12ShaderReflectionConstantBufferVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D12_SHADER_BUFFER_DESC,
+ ) -> HRESULT,
+ fn GetVariableByIndex(
+ Index: UINT,
+ ) -> *mut ID3D12ShaderReflectionVariable,
+ fn GetVariableByName(
+ Name: LPCSTR,
+ ) -> *mut ID3D12ShaderReflectionVariable,
+}}
+DEFINE_GUID!{IID_ID3D12ShaderReflectionType,
+ 0xe913c351, 0x783d, 0x48ca, 0xa1, 0xd1, 0x4f, 0x30, 0x62, 0x84, 0xad, 0x56}
+RIDL!{#[uuid(0xe913c351, 0x783d, 0x48ca, 0xa1, 0xd1, 0x4f, 0x30, 0x62, 0x84, 0xad, 0x56)]
+interface ID3D12ShaderReflectionType(ID3D12ShaderReflectionTypeVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D12_SHADER_TYPE_DESC,
+ ) -> HRESULT,
+ fn GetMemberTypeByIndex(
+ Index: UINT,
+ ) -> *mut ID3D12ShaderReflectionType,
+ fn GetMemberTypeByName(
+ Name: LPCSTR,
+ ) -> *mut ID3D12ShaderReflectionType,
+ fn GetMemberTypeName(
+ Index: UINT,
+ ) -> LPCSTR,
+ fn IsEqual(
+ pType: *mut ID3D12ShaderReflectionType,
+ ) -> HRESULT,
+ fn GetSubType() -> *mut ID3D12ShaderReflectionType,
+ fn GetBaseClass() -> *mut ID3D12ShaderReflectionType,
+ fn GetNumInterfaces() -> UINT,
+ fn GetInterfaceByIndex(
+ uIndex: UINT,
+ ) -> *mut ID3D12ShaderReflectionType,
+ fn IsOfType(
+ pType: *mut ID3D12ShaderReflectionType,
+ ) -> HRESULT,
+ fn ImplementsInterface(
+ pBase: *mut ID3D12ShaderReflectionType,
+ ) -> HRESULT,
+}}
+DEFINE_GUID!{IID_ID3D12ShaderReflectionVariable,
+ 0x8337a8a6, 0xa216, 0x444a, 0xb2, 0xf4, 0x31, 0x47, 0x33, 0xa7, 0x3a, 0xea}
+RIDL!{#[uuid(0x8337a8a6, 0xa216, 0x444a, 0xb2, 0xf4, 0x31, 0x47, 0x33, 0xa7, 0x3a, 0xea)]
+interface ID3D12ShaderReflectionVariable(ID3D12ShaderReflectionVariableVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D12_SHADER_VARIABLE_DESC,
+ ) -> HRESULT,
+ fn GetType() -> *mut ID3D12ShaderReflectionType,
+ fn GetBuffer() -> *mut ID3D12ShaderReflectionConstantBuffer,
+ fn GetInterfaceSlot(
+ uArrayIndex: UINT,
+ ) -> UINT,
+}}
+DEFINE_GUID!{IID_ID3D12ShaderReflection,
+ 0x5a58797d, 0xa72c, 0x478d, 0x8b, 0xa2, 0xef, 0xc6, 0xb0, 0xef, 0xe8, 0x8e}
+RIDL!{#[uuid(0x5a58797d, 0xa72c, 0x478d, 0x8b, 0xa2, 0xef, 0xc6, 0xb0, 0xef, 0xe8, 0x8e)]
+interface ID3D12ShaderReflection(ID3D12ShaderReflectionVtbl): IUnknown(IUnknownVtbl) {
+ fn GetDesc(
+ pDesc: *mut D3D12_SHADER_DESC,
+ ) -> HRESULT,
+ fn GetConstantBufferByIndex(
+ Index: UINT,
+ ) -> *mut ID3D12ShaderReflectionConstantBuffer,
+ fn GetConstantBufferByName(
+ Name: LPCSTR,
+ ) -> *mut ID3D12ShaderReflectionConstantBuffer,
+ fn GetResourceBindingDesc(
+ ResourceIndex: UINT,
+ pDesc: *mut D3D12_SHADER_INPUT_BIND_DESC,
+ ) -> HRESULT,
+ fn GetInputParameterDesc(
+ ParameterIndex: UINT,
+ pDesc: *mut D3D12_SIGNATURE_PARAMETER_DESC,
+ ) -> HRESULT,
+ fn GetOutputParameterDesc(
+ ParameterIndex: UINT,
+ pDesc: *mut D3D12_SIGNATURE_PARAMETER_DESC,
+ ) -> HRESULT,
+ fn GetPatchConstantParameterDesc(
+ ParameterIndex: UINT,
+ pDesc: *mut D3D12_SIGNATURE_PARAMETER_DESC,
+ ) -> HRESULT,
+ fn GetVariableByName(
+ Name: LPCSTR,
+ ) -> *mut ID3D12ShaderReflectionVariable,
+ fn GetResourceBindingDescByName(
+ Name: LPCSTR,
+ pDesc: *mut D3D12_SHADER_INPUT_BIND_DESC,
+ ) -> HRESULT,
+ fn GetMovInstructionCount() -> UINT,
+ fn GetMovcInstructionCount() -> UINT,
+ fn GetConversionInstructionCount() -> UINT,
+ fn GetBitwiseInstructionCount() -> UINT,
+ fn GetGSInputPrimitive() -> D3D_PRIMITIVE,
+ fn IsSampleFrequencyShader() -> BOOL,
+ fn GetNumInterfaceSlots() -> UINT,
+ fn GetMinFeatureLevel(
+ pLevel: *mut D3D_FEATURE_LEVEL,
+ ) -> HRESULT,
+ fn GetThreadGroupSize(
+ pSizeX: *mut UINT,
+ pSizeY: *mut UINT,
+ pSizeZ: *mut UINT,
+ ) -> UINT,
+ fn GetRequiresFlags() -> UINT64,
+}}
+DEFINE_GUID!{IID_ID3D12LibraryReflection,
+ 0x8e349d19, 0x54db, 0x4a56, 0x9d, 0xc9, 0x11, 0x9d, 0x87, 0xbd, 0xb8, 0x04}
+DEFINE_GUID!{IID_ID3D12FunctionReflection,
+ 0x1108795c, 0x2772, 0x4ba9, 0xb2, 0xa8, 0xd4, 0x64, 0xdc, 0x7e, 0x27, 0x99}
+DEFINE_GUID!{IID_ID3D12FunctionParameterReflection,
+ 0xec25f42d, 0x7006, 0x4f2b, 0xb3, 0x3e, 0x02, 0xcc, 0x33, 0x75, 0x73, 0x3f}
+pub type D3D12_CBUFFER_TYPE = D3D_CBUFFER_TYPE;
+pub type D3D12_RESOURCE_RETURN_TYPE = D3D_RESOURCE_RETURN_TYPE;
+pub type D3D12_TESSELLATOR_DOMAIN = D3D_TESSELLATOR_DOMAIN;
+pub type D3D12_TESSELLATOR_OUTPUT_PRIMITIVE = D3D_TESSELLATOR_OUTPUT_PRIMITIVE;
+pub type D3D12_TESSELLATOR_PARTITIONING = D3D_TESSELLATOR_PARTITIONING;
+pub type LPD3D12FUNCTIONPARAMETERREFLECTION = *mut ID3D12FunctionParameterReflection;
+pub type LPD3D12FUNCTIONREFLECTION = *mut ID3D12FunctionReflection;
+pub type LPD3D12LIBRARYREFLECTION = *mut ID3D12LibraryReflection;
+pub type LPD3D12SHADERREFLECTION = *mut ID3D12ShaderReflection;
+pub type LPD3D12SHADERREFLECTIONCONSTANTBUFFER = *mut ID3D12ShaderReflectionConstantBuffer;
+pub type LPD3D12SHADERREFLECTIONTYPE = *mut ID3D12ShaderReflectionType;
+pub type LPD3D12SHADERREFLECTIONVARIABLE = *mut ID3D12ShaderReflectionVariable;
+pub const D3D_SHADER_REQUIRES_INNER_COVERAGE: UINT64 = 0x00000400;
+pub const D3D_SHADER_REQUIRES_ROVS: UINT64 = 0x00001000;
+pub const D3D_SHADER_REQUIRES_STENCIL_REF: UINT64 = 0x00000200;
+pub const D3D_SHADER_REQUIRES_TYPED_UAV_LOAD_ADDITIONAL_FORMATS: UINT64 = 0x00000800;
+pub const D3D_SHADER_REQUIRES_VIEWPORT_AND_RT_ARRAY_INDEX_FROM_ANY_SHADER_FEEDING_RASTERIZER:
+ UINT64 = 0x00002000;
diff --git a/vendor/winapi/src/um/d3dcommon.rs b/vendor/winapi/src/um/d3dcommon.rs
new file mode 100644
index 000000000..b4f67dd12
--- /dev/null
+++ b/vendor/winapi/src/um/d3dcommon.rs
@@ -0,0 +1,744 @@
+// 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 d3dcommon.h
+use shared::basetsd::SIZE_T;
+use shared::minwindef::{LPCVOID, LPVOID, UINT};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPCSTR};
+ENUM!{enum D3D_DRIVER_TYPE {
+ D3D_DRIVER_TYPE_UNKNOWN,
+ D3D_DRIVER_TYPE_HARDWARE,
+ D3D_DRIVER_TYPE_REFERENCE,
+ D3D_DRIVER_TYPE_NULL,
+ D3D_DRIVER_TYPE_SOFTWARE,
+ D3D_DRIVER_TYPE_WARP,
+}}
+ENUM!{enum D3D_FEATURE_LEVEL {
+ D3D_FEATURE_LEVEL_9_1 = 0x9100,
+ D3D_FEATURE_LEVEL_9_2 = 0x9200,
+ D3D_FEATURE_LEVEL_9_3 = 0x9300,
+ D3D_FEATURE_LEVEL_10_0 = 0xa000,
+ D3D_FEATURE_LEVEL_10_1 = 0xa100,
+ D3D_FEATURE_LEVEL_11_0 = 0xb000,
+ D3D_FEATURE_LEVEL_11_1 = 0xb100,
+ D3D_FEATURE_LEVEL_12_0 = 0xc000,
+ D3D_FEATURE_LEVEL_12_1 = 0xc100,
+}}
+ENUM!{enum D3D_PRIMITIVE_TOPOLOGY {
+ D3D_PRIMITIVE_TOPOLOGY_UNDEFINED = 0,
+ D3D_PRIMITIVE_TOPOLOGY_POINTLIST = 1,
+ D3D_PRIMITIVE_TOPOLOGY_LINELIST = 2,
+ D3D_PRIMITIVE_TOPOLOGY_LINESTRIP = 3,
+ D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST = 4,
+ D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP = 5,
+ D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10,
+ D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ = 11,
+ D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ = 12,
+ D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ = 13,
+ D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST = 33,
+ D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST = 34,
+ D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST = 35,
+ D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST = 36,
+ D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST = 37,
+ D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST = 38,
+ D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST = 39,
+ D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST = 40,
+ D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST = 41,
+ D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST = 42,
+ D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST = 43,
+ D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST = 44,
+ D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST = 45,
+ D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST = 46,
+ D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST = 47,
+ D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST = 48,
+ D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST = 49,
+ D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST = 50,
+ D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST = 51,
+ D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST = 52,
+ D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST = 53,
+ D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST = 54,
+ D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST = 55,
+ D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST = 56,
+ D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST = 57,
+ D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST = 58,
+ D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST = 59,
+ D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST = 60,
+ D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST = 61,
+ D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST = 62,
+ D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST = 63,
+ D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST = 64,
+}}
+pub const D3D10_PRIMITIVE_TOPOLOGY_UNDEFINED: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_UNDEFINED;
+pub const D3D10_PRIMITIVE_TOPOLOGY_POINTLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_POINTLIST;
+pub const D3D10_PRIMITIVE_TOPOLOGY_LINELIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_LINELIST;
+pub const D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_LINESTRIP;
+pub const D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST;
+pub const D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP;
+pub const D3D10_PRIMITIVE_TOPOLOGY_LINELIST_ADJ: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ;
+pub const D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ;
+pub const D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ;
+pub const D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ;
+pub const D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_UNDEFINED;
+pub const D3D11_PRIMITIVE_TOPOLOGY_POINTLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_POINTLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_LINELIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_LINELIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_LINESTRIP;
+pub const D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP;
+pub const D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ;
+pub const D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ;
+pub const D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ;
+pub const D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ;
+pub const D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST;
+pub const D3D11_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST: D3D_PRIMITIVE_TOPOLOGY =
+ D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST;
+ENUM!{enum D3D_PRIMITIVE {
+ D3D_PRIMITIVE_UNDEFINED = 0,
+ D3D_PRIMITIVE_POINT = 1,
+ D3D_PRIMITIVE_LINE = 2,
+ D3D_PRIMITIVE_TRIANGLE = 3,
+ D3D_PRIMITIVE_LINE_ADJ = 6,
+ D3D_PRIMITIVE_TRIANGLE_ADJ = 7,
+ D3D_PRIMITIVE_1_CONTROL_POINT_PATCH = 8,
+ D3D_PRIMITIVE_2_CONTROL_POINT_PATCH = 9,
+ D3D_PRIMITIVE_3_CONTROL_POINT_PATCH = 10,
+ D3D_PRIMITIVE_4_CONTROL_POINT_PATCH = 11,
+ D3D_PRIMITIVE_5_CONTROL_POINT_PATCH = 12,
+ D3D_PRIMITIVE_6_CONTROL_POINT_PATCH = 13,
+ D3D_PRIMITIVE_7_CONTROL_POINT_PATCH = 14,
+ D3D_PRIMITIVE_8_CONTROL_POINT_PATCH = 15,
+ D3D_PRIMITIVE_9_CONTROL_POINT_PATCH = 16,
+ D3D_PRIMITIVE_10_CONTROL_POINT_PATCH = 17,
+ D3D_PRIMITIVE_11_CONTROL_POINT_PATCH = 18,
+ D3D_PRIMITIVE_12_CONTROL_POINT_PATCH = 19,
+ D3D_PRIMITIVE_13_CONTROL_POINT_PATCH = 20,
+ D3D_PRIMITIVE_14_CONTROL_POINT_PATCH = 21,
+ D3D_PRIMITIVE_15_CONTROL_POINT_PATCH = 22,
+ D3D_PRIMITIVE_16_CONTROL_POINT_PATCH = 23,
+ D3D_PRIMITIVE_17_CONTROL_POINT_PATCH = 24,
+ D3D_PRIMITIVE_18_CONTROL_POINT_PATCH = 25,
+ D3D_PRIMITIVE_19_CONTROL_POINT_PATCH = 26,
+ D3D_PRIMITIVE_20_CONTROL_POINT_PATCH = 28,
+ D3D_PRIMITIVE_21_CONTROL_POINT_PATCH = 29,
+ D3D_PRIMITIVE_22_CONTROL_POINT_PATCH = 30,
+ D3D_PRIMITIVE_23_CONTROL_POINT_PATCH = 31,
+ D3D_PRIMITIVE_24_CONTROL_POINT_PATCH = 32,
+ D3D_PRIMITIVE_25_CONTROL_POINT_PATCH = 33,
+ D3D_PRIMITIVE_26_CONTROL_POINT_PATCH = 34,
+ D3D_PRIMITIVE_27_CONTROL_POINT_PATCH = 35,
+ D3D_PRIMITIVE_28_CONTROL_POINT_PATCH = 36,
+ D3D_PRIMITIVE_29_CONTROL_POINT_PATCH = 37,
+ D3D_PRIMITIVE_30_CONTROL_POINT_PATCH = 38,
+ D3D_PRIMITIVE_31_CONTROL_POINT_PATCH = 39,
+ D3D_PRIMITIVE_32_CONTROL_POINT_PATCH = 40,
+}}
+pub const D3D10_PRIMITIVE_UNDEFINED: D3D_PRIMITIVE = D3D_PRIMITIVE_UNDEFINED;
+pub const D3D10_PRIMITIVE_POINT: D3D_PRIMITIVE = D3D_PRIMITIVE_POINT;
+pub const D3D10_PRIMITIVE_LINE: D3D_PRIMITIVE = D3D_PRIMITIVE_LINE;
+pub const D3D10_PRIMITIVE_TRIANGLE: D3D_PRIMITIVE = D3D_PRIMITIVE_TRIANGLE;
+pub const D3D10_PRIMITIVE_LINE_ADJ: D3D_PRIMITIVE = D3D_PRIMITIVE_LINE_ADJ;
+pub const D3D10_PRIMITIVE_TRIANGLE_ADJ: D3D_PRIMITIVE = D3D_PRIMITIVE_TRIANGLE_ADJ;
+pub const D3D11_PRIMITIVE_UNDEFINED: D3D_PRIMITIVE = D3D_PRIMITIVE_UNDEFINED;
+pub const D3D11_PRIMITIVE_POINT: D3D_PRIMITIVE = D3D_PRIMITIVE_POINT;
+pub const D3D11_PRIMITIVE_LINE: D3D_PRIMITIVE = D3D_PRIMITIVE_LINE;
+pub const D3D11_PRIMITIVE_TRIANGLE: D3D_PRIMITIVE = D3D_PRIMITIVE_TRIANGLE;
+pub const D3D11_PRIMITIVE_LINE_ADJ: D3D_PRIMITIVE = D3D_PRIMITIVE_LINE_ADJ;
+pub const D3D11_PRIMITIVE_TRIANGLE_ADJ: D3D_PRIMITIVE = D3D_PRIMITIVE_TRIANGLE_ADJ;
+pub const D3D11_PRIMITIVE_1_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_1_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_2_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_2_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_3_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_3_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_4_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_4_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_5_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_5_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_6_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_6_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_7_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_7_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_8_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_8_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_9_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_9_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_10_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_10_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_11_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_11_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_12_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_12_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_13_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_13_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_14_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_14_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_15_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_15_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_16_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_16_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_17_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_17_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_18_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_18_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_19_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_19_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_20_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_20_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_21_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_21_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_22_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_22_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_23_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_23_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_24_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_24_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_25_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_25_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_26_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_26_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_27_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_27_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_28_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_28_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_29_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_29_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_30_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_30_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_31_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_31_CONTROL_POINT_PATCH;
+pub const D3D11_PRIMITIVE_32_CONTROL_POINT_PATCH: D3D_PRIMITIVE =
+ D3D_PRIMITIVE_32_CONTROL_POINT_PATCH;
+ENUM!{enum D3D_SRV_DIMENSION {
+ D3D_SRV_DIMENSION_UNKNOWN = 0,
+ D3D_SRV_DIMENSION_BUFFER = 1,
+ D3D_SRV_DIMENSION_TEXTURE1D = 2,
+ D3D_SRV_DIMENSION_TEXTURE1DARRAY = 3,
+ D3D_SRV_DIMENSION_TEXTURE2D = 4,
+ D3D_SRV_DIMENSION_TEXTURE2DARRAY = 5,
+ D3D_SRV_DIMENSION_TEXTURE2DMS = 6,
+ D3D_SRV_DIMENSION_TEXTURE2DMSARRAY = 7,
+ D3D_SRV_DIMENSION_TEXTURE3D = 8,
+ D3D_SRV_DIMENSION_TEXTURECUBE = 9,
+ D3D_SRV_DIMENSION_TEXTURECUBEARRAY = 10,
+ D3D_SRV_DIMENSION_BUFFEREX = 11,
+}}
+pub const D3D10_SRV_DIMENSION_UNKNOWN: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_UNKNOWN;
+pub const D3D10_SRV_DIMENSION_BUFFER: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_BUFFER;
+pub const D3D10_SRV_DIMENSION_TEXTURE1D: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURE1D;
+pub const D3D10_SRV_DIMENSION_TEXTURE1DARRAY: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURE1DARRAY;
+pub const D3D10_SRV_DIMENSION_TEXTURE2D: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURE2D;
+pub const D3D10_SRV_DIMENSION_TEXTURE2DARRAY: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURE2DARRAY;
+pub const D3D10_SRV_DIMENSION_TEXTURE2DMS: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURE2DMS;
+pub const D3D10_SRV_DIMENSION_TEXTURE2DMSARRAY: D3D_SRV_DIMENSION =
+ D3D_SRV_DIMENSION_TEXTURE2DMSARRAY;
+pub const D3D10_SRV_DIMENSION_TEXTURE3D: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURE3D;
+pub const D3D10_SRV_DIMENSION_TEXTURECUBE: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURECUBE;
+pub const D3D10_1_SRV_DIMENSION_UNKNOWN: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_UNKNOWN;
+pub const D3D10_1_SRV_DIMENSION_BUFFER: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_BUFFER;
+pub const D3D10_1_SRV_DIMENSION_TEXTURE1D: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURE1D;
+pub const D3D10_1_SRV_DIMENSION_TEXTURE1DARRAY: D3D_SRV_DIMENSION =
+ D3D_SRV_DIMENSION_TEXTURE1DARRAY;
+pub const D3D10_1_SRV_DIMENSION_TEXTURE2D: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURE2D;
+pub const D3D10_1_SRV_DIMENSION_TEXTURE2DARRAY: D3D_SRV_DIMENSION =
+ D3D_SRV_DIMENSION_TEXTURE2DARRAY;
+pub const D3D10_1_SRV_DIMENSION_TEXTURE2DMS: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURE2DMS;
+pub const D3D10_1_SRV_DIMENSION_TEXTURE2DMSARRAY: D3D_SRV_DIMENSION =
+ D3D_SRV_DIMENSION_TEXTURE2DMSARRAY;
+pub const D3D10_1_SRV_DIMENSION_TEXTURE3D: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURE3D;
+pub const D3D10_1_SRV_DIMENSION_TEXTURECUBE: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURECUBE;
+pub const D3D10_1_SRV_DIMENSION_TEXTURECUBEARRAY: D3D_SRV_DIMENSION =
+ D3D_SRV_DIMENSION_TEXTURECUBEARRAY;
+pub const D3D11_SRV_DIMENSION_UNKNOWN: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_UNKNOWN;
+pub const D3D11_SRV_DIMENSION_BUFFER: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_BUFFER;
+pub const D3D11_SRV_DIMENSION_TEXTURE1D: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURE1D;
+pub const D3D11_SRV_DIMENSION_TEXTURE1DARRAY: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURE1DARRAY;
+pub const D3D11_SRV_DIMENSION_TEXTURE2D: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURE2D;
+pub const D3D11_SRV_DIMENSION_TEXTURE2DARRAY: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURE2DARRAY;
+pub const D3D11_SRV_DIMENSION_TEXTURE2DMS: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURE2DMS;
+pub const D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY: D3D_SRV_DIMENSION =
+ D3D_SRV_DIMENSION_TEXTURE2DMSARRAY;
+pub const D3D11_SRV_DIMENSION_TEXTURE3D: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURE3D;
+pub const D3D11_SRV_DIMENSION_TEXTURECUBE: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_TEXTURECUBE;
+pub const D3D11_SRV_DIMENSION_TEXTURECUBEARRAY: D3D_SRV_DIMENSION =
+ D3D_SRV_DIMENSION_TEXTURECUBEARRAY;
+pub const D3D11_SRV_DIMENSION_BUFFEREX: D3D_SRV_DIMENSION = D3D_SRV_DIMENSION_BUFFEREX;
+STRUCT!{struct D3D_SHADER_MACRO {
+ Name: LPCSTR,
+ Definition: LPCSTR,
+}}
+pub type LPD3D_SHADER_MACRO = *mut D3D_SHADER_MACRO;
+DEFINE_GUID!{IID_ID3D10Blob,
+ 0x8ba5fb08, 0x5195, 0x40e2, 0xac, 0x58, 0x0d, 0x98, 0x9c, 0x3a, 0x01, 0x02}
+RIDL!{#[uuid(0x8ba5fb08, 0x5195, 0x40e2, 0xac, 0x58, 0xd, 0x98, 0x9c, 0x3a, 0x1, 0x2)]
+interface ID3D10Blob(ID3D10BlobVtbl): IUnknown(IUnknownVtbl) {
+ fn GetBufferPointer() -> LPVOID,
+ fn GetBufferSize() -> SIZE_T,
+}}
+pub type LPD3D10BLOB = *mut ID3D10Blob;
+pub type ID3DBlob = ID3D10Blob;
+pub type LPD3DBLOB = *mut ID3DBlob;
+ENUM!{enum D3D_INCLUDE_TYPE {
+ D3D_INCLUDE_LOCAL = 0,
+ D3D_INCLUDE_SYSTEM,
+}}
+pub const D3D10_INCLUDE_LOCAL: D3D_INCLUDE_TYPE = D3D_INCLUDE_LOCAL;
+pub const D3D10_INCLUDE_SYSTEM: D3D_INCLUDE_TYPE = D3D_INCLUDE_SYSTEM;
+RIDL!{#[uuid(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)]
+interface ID3DInclude(ID3DIncludeVtbl) {
+ fn Open(
+ IncludeType: D3D_INCLUDE_TYPE,
+ pFileName: LPCSTR,
+ pParentData: LPCVOID,
+ ppData: *mut LPCVOID,
+ pBytes: *mut UINT,
+ ) -> HRESULT,
+ fn Close(
+ pData: LPCVOID,
+ ) -> HRESULT,
+}}
+pub type LPD3DINCLUDE = *mut ID3DInclude;
+ENUM!{enum D3D_SHADER_VARIABLE_CLASS {
+ D3D_SVC_SCALAR = 0,
+ D3D_SVC_VECTOR,
+ D3D_SVC_MATRIX_ROWS,
+ D3D_SVC_MATRIX_COLUMNS,
+ D3D_SVC_OBJECT,
+ D3D_SVC_STRUCT,
+ D3D_SVC_INTERFACE_CLASS,
+ D3D_SVC_INTERFACE_POINTER,
+}}
+pub const D3D10_SVC_SCALAR: D3D_SHADER_VARIABLE_CLASS = D3D_SVC_SCALAR;
+pub const D3D10_SVC_VECTOR: D3D_SHADER_VARIABLE_CLASS = D3D_SVC_VECTOR;
+pub const D3D10_SVC_MATRIX_ROWS: D3D_SHADER_VARIABLE_CLASS = D3D_SVC_MATRIX_ROWS;
+pub const D3D10_SVC_MATRIX_COLUMNS: D3D_SHADER_VARIABLE_CLASS = D3D_SVC_MATRIX_COLUMNS;
+pub const D3D10_SVC_OBJECT: D3D_SHADER_VARIABLE_CLASS = D3D_SVC_OBJECT;
+pub const D3D10_SVC_STRUCT: D3D_SHADER_VARIABLE_CLASS = D3D_SVC_STRUCT;
+pub const D3D11_SVC_INTERFACE_CLASS: D3D_SHADER_VARIABLE_CLASS = D3D_SVC_INTERFACE_CLASS;
+pub const D3D11_SVC_INTERFACE_POINTER: D3D_SHADER_VARIABLE_CLASS = D3D_SVC_INTERFACE_POINTER;
+ENUM!{enum D3D_SHADER_VARIABLE_FLAGS {
+ D3D_SVF_USERPACKED = 1,
+ D3D_SVF_USED = 2,
+ D3D_SVF_INTERFACE_POINTER = 4,
+ D3D_SVF_INTERFACE_PARAMETER = 8,
+}}
+pub const D3D10_SVF_USERPACKED: D3D_SHADER_VARIABLE_FLAGS = D3D_SVF_USERPACKED;
+pub const D3D10_SVF_USED: D3D_SHADER_VARIABLE_FLAGS = D3D_SVF_USED;
+pub const D3D11_SVF_INTERFACE_POINTER: D3D_SHADER_VARIABLE_FLAGS = D3D_SVF_INTERFACE_POINTER;
+pub const D3D11_SVF_INTERFACE_PARAMETER: D3D_SHADER_VARIABLE_FLAGS = D3D_SVF_INTERFACE_PARAMETER;
+ENUM!{enum D3D_SHADER_VARIABLE_TYPE {
+ D3D_SVT_VOID = 0,
+ D3D_SVT_BOOL = 1,
+ D3D_SVT_INT = 2,
+ D3D_SVT_FLOAT = 3,
+ D3D_SVT_STRING = 4,
+ D3D_SVT_TEXTURE = 5,
+ D3D_SVT_TEXTURE1D = 6,
+ D3D_SVT_TEXTURE2D = 7,
+ D3D_SVT_TEXTURE3D = 8,
+ D3D_SVT_TEXTURECUBE = 9,
+ D3D_SVT_SAMPLER = 10,
+ D3D_SVT_SAMPLER1D = 11,
+ D3D_SVT_SAMPLER2D = 12,
+ D3D_SVT_SAMPLER3D = 13,
+ D3D_SVT_SAMPLERCUBE = 14,
+ D3D_SVT_PIXELSHADER = 15,
+ D3D_SVT_VERTEXSHADER = 16,
+ D3D_SVT_PIXELFRAGMENT = 17,
+ D3D_SVT_VERTEXFRAGMENT = 18,
+ D3D_SVT_UINT = 19,
+ D3D_SVT_UINT8 = 20,
+ D3D_SVT_GEOMETRYSHADER = 21,
+ D3D_SVT_RASTERIZER = 22,
+ D3D_SVT_DEPTHSTENCIL = 23,
+ D3D_SVT_BLEND = 24,
+ D3D_SVT_BUFFER = 25,
+ D3D_SVT_CBUFFER = 26,
+ D3D_SVT_TBUFFER = 27,
+ D3D_SVT_TEXTURE1DARRAY = 28,
+ D3D_SVT_TEXTURE2DARRAY = 29,
+ D3D_SVT_RENDERTARGETVIEW = 30,
+ D3D_SVT_DEPTHSTENCILVIEW = 31,
+ D3D_SVT_TEXTURE2DMS = 32,
+ D3D_SVT_TEXTURE2DMSARRAY = 33,
+ D3D_SVT_TEXTURECUBEARRAY = 34,
+ D3D_SVT_HULLSHADER = 35,
+ D3D_SVT_DOMAINSHADER = 36,
+ D3D_SVT_INTERFACE_POINTER = 37,
+ D3D_SVT_COMPUTESHADER = 38,
+ D3D_SVT_DOUBLE = 39,
+ D3D_SVT_RWTEXTURE1D = 40,
+ D3D_SVT_RWTEXTURE1DARRAY = 41,
+ D3D_SVT_RWTEXTURE2D = 42,
+ D3D_SVT_RWTEXTURE2DARRAY = 43,
+ D3D_SVT_RWTEXTURE3D = 44,
+ D3D_SVT_RWBUFFER = 45,
+ D3D_SVT_BYTEADDRESS_BUFFER = 46,
+ D3D_SVT_RWBYTEADDRESS_BUFFER = 47,
+ D3D_SVT_STRUCTURED_BUFFER = 48,
+ D3D_SVT_RWSTRUCTURED_BUFFER = 49,
+ D3D_SVT_APPEND_STRUCTURED_BUFFER = 50,
+ D3D_SVT_CONSUME_STRUCTURED_BUFFER = 51,
+ D3D_SVT_MIN8FLOAT = 52,
+ D3D_SVT_MIN10FLOAT = 53,
+ D3D_SVT_MIN16FLOAT = 54,
+ D3D_SVT_MIN12INT = 55,
+ D3D_SVT_MIN16INT = 56,
+ D3D_SVT_MIN16UINT = 57,
+}}
+pub const D3D10_SVT_VOID: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_VOID;
+pub const D3D10_SVT_BOOL: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_BOOL;
+pub const D3D10_SVT_INT: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_INT;
+pub const D3D10_SVT_FLOAT: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_FLOAT;
+pub const D3D10_SVT_STRING: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_STRING;
+pub const D3D10_SVT_TEXTURE: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_TEXTURE;
+pub const D3D10_SVT_TEXTURE1D: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_TEXTURE1D;
+pub const D3D10_SVT_TEXTURE2D: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_TEXTURE2D;
+pub const D3D10_SVT_TEXTURE3D: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_TEXTURE3D;
+pub const D3D10_SVT_TEXTURECUBE: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_TEXTURECUBE;
+pub const D3D10_SVT_SAMPLER: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_SAMPLER;
+pub const D3D10_SVT_SAMPLER1D: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_SAMPLER1D;
+pub const D3D10_SVT_SAMPLER2D: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_SAMPLER2D;
+pub const D3D10_SVT_SAMPLER3D: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_SAMPLER3D;
+pub const D3D10_SVT_SAMPLERCUBE: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_SAMPLERCUBE;
+pub const D3D10_SVT_PIXELSHADER: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_PIXELSHADER;
+pub const D3D10_SVT_VERTEXSHADER: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_VERTEXSHADER;
+pub const D3D10_SVT_PIXELFRAGMENT: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_PIXELFRAGMENT;
+pub const D3D10_SVT_VERTEXFRAGMENT: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_VERTEXFRAGMENT;
+pub const D3D10_SVT_UINT: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_UINT;
+pub const D3D10_SVT_UINT8: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_UINT8;
+pub const D3D10_SVT_GEOMETRYSHADER: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_GEOMETRYSHADER;
+pub const D3D10_SVT_RASTERIZER: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_RASTERIZER;
+pub const D3D10_SVT_DEPTHSTENCIL: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_DEPTHSTENCIL;
+pub const D3D10_SVT_BLEND: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_BLEND;
+pub const D3D10_SVT_BUFFER: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_BUFFER;
+pub const D3D10_SVT_CBUFFER: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_CBUFFER;
+pub const D3D10_SVT_TBUFFER: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_TBUFFER;
+pub const D3D10_SVT_TEXTURE1DARRAY: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_TEXTURE1DARRAY;
+pub const D3D10_SVT_TEXTURE2DARRAY: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_TEXTURE2DARRAY;
+pub const D3D10_SVT_RENDERTARGETVIEW: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_RENDERTARGETVIEW;
+pub const D3D10_SVT_DEPTHSTENCILVIEW: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_DEPTHSTENCILVIEW;
+pub const D3D10_SVT_TEXTURE2DMS: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_TEXTURE2DMS;
+pub const D3D10_SVT_TEXTURE2DMSARRAY: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_TEXTURE2DMSARRAY;
+pub const D3D10_SVT_TEXTURECUBEARRAY: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_TEXTURECUBEARRAY;
+pub const D3D11_SVT_HULLSHADER: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_HULLSHADER;
+pub const D3D11_SVT_DOMAINSHADER: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_DOMAINSHADER;
+pub const D3D11_SVT_INTERFACE_POINTER: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_INTERFACE_POINTER;
+pub const D3D11_SVT_COMPUTESHADER: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_COMPUTESHADER;
+pub const D3D11_SVT_DOUBLE: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_DOUBLE;
+pub const D3D11_SVT_RWTEXTURE1D: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_RWTEXTURE1D;
+pub const D3D11_SVT_RWTEXTURE1DARRAY: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_RWTEXTURE1DARRAY;
+pub const D3D11_SVT_RWTEXTURE2D: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_RWTEXTURE2D;
+pub const D3D11_SVT_RWTEXTURE2DARRAY: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_RWTEXTURE2DARRAY;
+pub const D3D11_SVT_RWTEXTURE3D: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_RWTEXTURE3D;
+pub const D3D11_SVT_RWBUFFER: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_RWBUFFER;
+pub const D3D11_SVT_BYTEADDRESS_BUFFER: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_BYTEADDRESS_BUFFER;
+pub const D3D11_SVT_RWBYTEADDRESS_BUFFER: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_RWBYTEADDRESS_BUFFER;
+pub const D3D11_SVT_STRUCTURED_BUFFER: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_STRUCTURED_BUFFER;
+pub const D3D11_SVT_RWSTRUCTURED_BUFFER: D3D_SHADER_VARIABLE_TYPE = D3D_SVT_RWSTRUCTURED_BUFFER;
+pub const D3D11_SVT_APPEND_STRUCTURED_BUFFER: D3D_SHADER_VARIABLE_TYPE =
+ D3D_SVT_APPEND_STRUCTURED_BUFFER;
+pub const D3D11_SVT_CONSUME_STRUCTURED_BUFFER: D3D_SHADER_VARIABLE_TYPE =
+ D3D_SVT_CONSUME_STRUCTURED_BUFFER;
+ENUM!{enum D3D_SHADER_INPUT_FLAGS {
+ D3D_SIF_USERPACKED = 0x1,
+ D3D_SIF_COMPARISON_SAMPLER = 0x2,
+ D3D_SIF_TEXTURE_COMPONENT_0 = 0x4,
+ D3D_SIF_TEXTURE_COMPONENT_1 = 0x8,
+ D3D_SIF_TEXTURE_COMPONENTS = 0xc,
+ D3D_SIF_UNUSED = 0x10,
+}}
+pub const D3D10_SIF_USERPACKED: D3D_SHADER_INPUT_FLAGS = D3D_SIF_USERPACKED;
+pub const D3D10_SIF_COMPARISON_SAMPLER: D3D_SHADER_INPUT_FLAGS = D3D_SIF_COMPARISON_SAMPLER;
+pub const D3D10_SIF_TEXTURE_COMPONENT_0: D3D_SHADER_INPUT_FLAGS = D3D_SIF_TEXTURE_COMPONENT_0;
+pub const D3D10_SIF_TEXTURE_COMPONENT_1: D3D_SHADER_INPUT_FLAGS = D3D_SIF_TEXTURE_COMPONENT_1;
+pub const D3D10_SIF_TEXTURE_COMPONENTS: D3D_SHADER_INPUT_FLAGS = D3D_SIF_TEXTURE_COMPONENTS;
+ENUM!{enum D3D_SHADER_INPUT_TYPE {
+ D3D_SIT_CBUFFER,
+ D3D_SIT_TBUFFER,
+ D3D_SIT_TEXTURE,
+ D3D_SIT_SAMPLER,
+ D3D_SIT_UAV_RWTYPED,
+ D3D_SIT_STRUCTURED,
+ D3D_SIT_UAV_RWSTRUCTURED,
+ D3D_SIT_BYTEADDRESS,
+ D3D_SIT_UAV_RWBYTEADDRESS,
+ D3D_SIT_UAV_APPEND_STRUCTURED,
+ D3D_SIT_UAV_CONSUME_STRUCTURED,
+ D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER,
+}}
+pub const D3D10_SIT_CBUFFER: D3D_SHADER_INPUT_TYPE = D3D_SIT_CBUFFER;
+pub const D3D10_SIT_TBUFFER: D3D_SHADER_INPUT_TYPE = D3D_SIT_TBUFFER;
+pub const D3D10_SIT_TEXTURE: D3D_SHADER_INPUT_TYPE = D3D_SIT_TEXTURE;
+pub const D3D10_SIT_SAMPLER: D3D_SHADER_INPUT_TYPE = D3D_SIT_SAMPLER;
+pub const D3D11_SIT_UAV_RWTYPED: D3D_SHADER_INPUT_TYPE = D3D_SIT_UAV_RWTYPED;
+pub const D3D11_SIT_STRUCTURED: D3D_SHADER_INPUT_TYPE = D3D_SIT_STRUCTURED;
+pub const D3D11_SIT_UAV_RWSTRUCTURED: D3D_SHADER_INPUT_TYPE = D3D_SIT_UAV_RWSTRUCTURED;
+pub const D3D11_SIT_BYTEADDRESS: D3D_SHADER_INPUT_TYPE = D3D_SIT_BYTEADDRESS;
+pub const D3D11_SIT_UAV_RWBYTEADDRESS: D3D_SHADER_INPUT_TYPE = D3D_SIT_UAV_RWBYTEADDRESS;
+pub const D3D11_SIT_UAV_APPEND_STRUCTURED: D3D_SHADER_INPUT_TYPE = D3D_SIT_UAV_APPEND_STRUCTURED;
+pub const D3D11_SIT_UAV_CONSUME_STRUCTURED: D3D_SHADER_INPUT_TYPE = D3D_SIT_UAV_CONSUME_STRUCTURED;
+pub const D3D11_SIT_UAV_RWSTRUCTURED_WITH_COUNTER: D3D_SHADER_INPUT_TYPE =
+ D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER;
+ENUM!{enum D3D_SHADER_CBUFFER_FLAGS {
+ D3D_CBF_USERPACKED = 1,
+}}
+pub const D3D10_CBF_USERPACKED: D3D_SHADER_CBUFFER_FLAGS = D3D_CBF_USERPACKED;
+ENUM!{enum D3D_CBUFFER_TYPE {
+ D3D_CT_CBUFFER,
+ D3D_CT_TBUFFER,
+ D3D_CT_INTERFACE_POINTERS,
+ D3D_CT_RESOURCE_BIND_INFO,
+}}
+pub const D3D10_CT_CBUFFER: D3D_CBUFFER_TYPE = D3D_CT_CBUFFER;
+pub const D3D10_CT_TBUFFER: D3D_CBUFFER_TYPE = D3D_CT_TBUFFER;
+pub const D3D11_CT_CBUFFER: D3D_CBUFFER_TYPE = D3D_CT_CBUFFER;
+pub const D3D11_CT_TBUFFER: D3D_CBUFFER_TYPE = D3D_CT_TBUFFER;
+pub const D3D11_CT_INTERFACE_POINTERS: D3D_CBUFFER_TYPE = D3D_CT_INTERFACE_POINTERS;
+pub const D3D11_CT_RESOURCE_BIND_INFO: D3D_CBUFFER_TYPE = D3D_CT_RESOURCE_BIND_INFO;
+ENUM!{enum D3D_NAME {
+ D3D_NAME_UNDEFINED = 0,
+ D3D_NAME_POSITION = 1,
+ D3D_NAME_CLIP_DISTANCE = 2,
+ D3D_NAME_CULL_DISTANCE = 3,
+ D3D_NAME_RENDER_TARGET_ARRAY_INDEX = 4,
+ D3D_NAME_VIEWPORT_ARRAY_INDEX = 5,
+ D3D_NAME_VERTEX_ID = 6,
+ D3D_NAME_PRIMITIVE_ID = 7,
+ D3D_NAME_INSTANCE_ID = 8,
+ D3D_NAME_IS_FRONT_FACE = 9,
+ D3D_NAME_SAMPLE_INDEX = 10,
+ D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR = 11,
+ D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR = 12,
+ D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR = 13,
+ D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR = 14,
+ D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR = 15,
+ D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR = 16,
+ D3D_NAME_TARGET = 64,
+ D3D_NAME_DEPTH = 65,
+ D3D_NAME_COVERAGE = 66,
+ D3D_NAME_DEPTH_GREATER_EQUAL = 67,
+ D3D_NAME_DEPTH_LESS_EQUAL = 68,
+}}
+pub const D3D10_NAME_UNDEFINED: D3D_NAME = D3D_NAME_UNDEFINED;
+pub const D3D10_NAME_POSITION: D3D_NAME = D3D_NAME_POSITION;
+pub const D3D10_NAME_CLIP_DISTANCE: D3D_NAME = D3D_NAME_CLIP_DISTANCE;
+pub const D3D10_NAME_CULL_DISTANCE: D3D_NAME = D3D_NAME_CULL_DISTANCE;
+pub const D3D10_NAME_RENDER_TARGET_ARRAY_INDEX: D3D_NAME = D3D_NAME_RENDER_TARGET_ARRAY_INDEX;
+pub const D3D10_NAME_VIEWPORT_ARRAY_INDEX: D3D_NAME = D3D_NAME_VIEWPORT_ARRAY_INDEX;
+pub const D3D10_NAME_VERTEX_ID: D3D_NAME = D3D_NAME_VERTEX_ID;
+pub const D3D10_NAME_PRIMITIVE_ID: D3D_NAME = D3D_NAME_PRIMITIVE_ID;
+pub const D3D10_NAME_INSTANCE_ID: D3D_NAME = D3D_NAME_INSTANCE_ID;
+pub const D3D10_NAME_IS_FRONT_FACE: D3D_NAME = D3D_NAME_IS_FRONT_FACE;
+pub const D3D10_NAME_SAMPLE_INDEX: D3D_NAME = D3D_NAME_SAMPLE_INDEX;
+pub const D3D10_NAME_TARGET: D3D_NAME = D3D_NAME_TARGET;
+pub const D3D10_NAME_DEPTH: D3D_NAME = D3D_NAME_DEPTH;
+pub const D3D10_NAME_COVERAGE: D3D_NAME = D3D_NAME_COVERAGE;
+pub const D3D11_NAME_FINAL_QUAD_EDGE_TESSFACTOR: D3D_NAME = D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR;
+pub const D3D11_NAME_FINAL_QUAD_INSIDE_TESSFACTOR: D3D_NAME
+ = D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR;
+pub const D3D11_NAME_FINAL_TRI_EDGE_TESSFACTOR: D3D_NAME = D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR;
+pub const D3D11_NAME_FINAL_TRI_INSIDE_TESSFACTOR: D3D_NAME = D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR;
+pub const D3D11_NAME_FINAL_LINE_DETAIL_TESSFACTOR: D3D_NAME
+ = D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR;
+pub const D3D11_NAME_FINAL_LINE_DENSITY_TESSFACTOR: D3D_NAME
+ = D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR;
+pub const D3D11_NAME_DEPTH_GREATER_EQUAL: D3D_NAME = D3D_NAME_DEPTH_GREATER_EQUAL;
+pub const D3D11_NAME_DEPTH_LESS_EQUAL: D3D_NAME = D3D_NAME_DEPTH_LESS_EQUAL;
+ENUM!{enum D3D_RESOURCE_RETURN_TYPE {
+ D3D_RETURN_TYPE_UNORM = 1,
+ D3D_RETURN_TYPE_SNORM = 2,
+ D3D_RETURN_TYPE_SINT = 3,
+ D3D_RETURN_TYPE_UINT = 4,
+ D3D_RETURN_TYPE_FLOAT = 5,
+ D3D_RETURN_TYPE_MIXED = 6,
+ D3D_RETURN_TYPE_DOUBLE = 7,
+ D3D_RETURN_TYPE_CONTINUED = 8,
+}}
+pub const D3D10_RETURN_TYPE_UNORM: D3D_RESOURCE_RETURN_TYPE = D3D_RETURN_TYPE_UNORM;
+pub const D3D10_RETURN_TYPE_SNORM: D3D_RESOURCE_RETURN_TYPE = D3D_RETURN_TYPE_SNORM;
+pub const D3D10_RETURN_TYPE_SINT: D3D_RESOURCE_RETURN_TYPE = D3D_RETURN_TYPE_SINT;
+pub const D3D10_RETURN_TYPE_UINT: D3D_RESOURCE_RETURN_TYPE = D3D_RETURN_TYPE_UINT;
+pub const D3D10_RETURN_TYPE_FLOAT: D3D_RESOURCE_RETURN_TYPE = D3D_RETURN_TYPE_FLOAT;
+pub const D3D10_RETURN_TYPE_MIXED: D3D_RESOURCE_RETURN_TYPE = D3D_RETURN_TYPE_MIXED;
+pub const D3D11_RETURN_TYPE_UNORM: D3D_RESOURCE_RETURN_TYPE = D3D_RETURN_TYPE_UNORM;
+pub const D3D11_RETURN_TYPE_SNORM: D3D_RESOURCE_RETURN_TYPE = D3D_RETURN_TYPE_SNORM;
+pub const D3D11_RETURN_TYPE_SINT: D3D_RESOURCE_RETURN_TYPE = D3D_RETURN_TYPE_SINT;
+pub const D3D11_RETURN_TYPE_UINT: D3D_RESOURCE_RETURN_TYPE = D3D_RETURN_TYPE_UINT;
+pub const D3D11_RETURN_TYPE_FLOAT: D3D_RESOURCE_RETURN_TYPE = D3D_RETURN_TYPE_FLOAT;
+pub const D3D11_RETURN_TYPE_MIXED: D3D_RESOURCE_RETURN_TYPE = D3D_RETURN_TYPE_MIXED;
+pub const D3D11_RETURN_TYPE_DOUBLE: D3D_RESOURCE_RETURN_TYPE = D3D_RETURN_TYPE_DOUBLE;
+pub const D3D11_RETURN_TYPE_CONTINUED: D3D_RESOURCE_RETURN_TYPE = D3D_RETURN_TYPE_CONTINUED;
+ENUM!{enum D3D_REGISTER_COMPONENT_TYPE {
+ D3D_REGISTER_COMPONENT_UNKNOWN = 0,
+ D3D_REGISTER_COMPONENT_UINT32 = 1,
+ D3D_REGISTER_COMPONENT_SINT32 = 2,
+ D3D_REGISTER_COMPONENT_FLOAT32 = 3,
+}}
+pub const D3D10_REGISTER_COMPONENT_UNKNOWN: D3D_REGISTER_COMPONENT_TYPE =
+ D3D_REGISTER_COMPONENT_UNKNOWN;
+pub const D3D10_REGISTER_COMPONENT_UINT32: D3D_REGISTER_COMPONENT_TYPE =
+ D3D_REGISTER_COMPONENT_UINT32;
+pub const D3D10_REGISTER_COMPONENT_SINT32: D3D_REGISTER_COMPONENT_TYPE =
+ D3D_REGISTER_COMPONENT_SINT32;
+pub const D3D10_REGISTER_COMPONENT_FLOAT32: D3D_REGISTER_COMPONENT_TYPE =
+ D3D_REGISTER_COMPONENT_FLOAT32;
+ENUM!{enum D3D_TESSELLATOR_DOMAIN {
+ D3D_TESSELLATOR_DOMAIN_UNDEFINED,
+ D3D_TESSELLATOR_DOMAIN_ISOLINE,
+ D3D_TESSELLATOR_DOMAIN_TRI,
+ D3D_TESSELLATOR_DOMAIN_QUAD,
+}}
+pub const D3D11_TESSELLATOR_DOMAIN_UNDEFINED: D3D_TESSELLATOR_DOMAIN =
+ D3D_TESSELLATOR_DOMAIN_UNDEFINED;
+pub const D3D11_TESSELLATOR_DOMAIN_ISOLINE: D3D_TESSELLATOR_DOMAIN =
+ D3D_TESSELLATOR_DOMAIN_ISOLINE;
+pub const D3D11_TESSELLATOR_DOMAIN_TRI: D3D_TESSELLATOR_DOMAIN = D3D_TESSELLATOR_DOMAIN_TRI;
+pub const D3D11_TESSELLATOR_DOMAIN_QUAD: D3D_TESSELLATOR_DOMAIN = D3D_TESSELLATOR_DOMAIN_QUAD;
+ENUM!{enum D3D_TESSELLATOR_PARTITIONING {
+ D3D_TESSELLATOR_PARTITIONING_UNDEFINED,
+ D3D_TESSELLATOR_PARTITIONING_INTEGER,
+ D3D_TESSELLATOR_PARTITIONING_POW2,
+ D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD,
+ D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN,
+}}
+pub const D3D11_TESSELLATOR_PARTITIONING_UNDEFINED: D3D_TESSELLATOR_PARTITIONING =
+ D3D_TESSELLATOR_PARTITIONING_UNDEFINED;
+pub const D3D11_TESSELLATOR_PARTITIONING_INTEGER: D3D_TESSELLATOR_PARTITIONING =
+ D3D_TESSELLATOR_PARTITIONING_INTEGER;
+pub const D3D11_TESSELLATOR_PARTITIONING_POW2: D3D_TESSELLATOR_PARTITIONING =
+ D3D_TESSELLATOR_PARTITIONING_POW2;
+pub const D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD: D3D_TESSELLATOR_PARTITIONING =
+ D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD;
+pub const D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN: D3D_TESSELLATOR_PARTITIONING =
+ D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN;
+ENUM!{enum D3D_TESSELLATOR_OUTPUT_PRIMITIVE {
+ D3D_TESSELLATOR_OUTPUT_UNDEFINED,
+ D3D_TESSELLATOR_OUTPUT_POINT,
+ D3D_TESSELLATOR_OUTPUT_LINE,
+ D3D_TESSELLATOR_OUTPUT_TRIANGLE_CW,
+ D3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW,
+}}
+pub const D3D11_TESSELLATOR_OUTPUT_UNDEFINED: D3D_TESSELLATOR_OUTPUT_PRIMITIVE =
+ D3D_TESSELLATOR_OUTPUT_UNDEFINED;
+pub const D3D11_TESSELLATOR_OUTPUT_POINT: D3D_TESSELLATOR_OUTPUT_PRIMITIVE =
+ D3D_TESSELLATOR_OUTPUT_POINT;
+pub const D3D11_TESSELLATOR_OUTPUT_LINE: D3D_TESSELLATOR_OUTPUT_PRIMITIVE =
+ D3D_TESSELLATOR_OUTPUT_LINE;
+pub const D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CW: D3D_TESSELLATOR_OUTPUT_PRIMITIVE =
+ D3D_TESSELLATOR_OUTPUT_TRIANGLE_CW;
+pub const D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CCW: D3D_TESSELLATOR_OUTPUT_PRIMITIVE =
+ D3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW;
+ENUM!{enum D3D_MIN_PRECISION {
+ D3D_MIN_PRECISION_DEFAULT,
+ D3D_MIN_PRECISION_FLOAT_16,
+ D3D_MIN_PRECISION_FLOAT_2_8,
+ D3D_MIN_PRECISION_RESERVED,
+ D3D_MIN_PRECISION_SINT_16,
+ D3D_MIN_PRECISION_UINT_16,
+ D3D_MIN_PRECISION_ANY_16 = 0xf0,
+ D3D_MIN_PRECISION_ANY_10 = 0xf1,
+}}
+ENUM!{enum D3D_INTERPOLATION_MODE {
+ D3D_INTERPOLATION_UNDEFINED,
+ D3D_INTERPOLATION_CONSTANT,
+ D3D_INTERPOLATION_LINEAR,
+ D3D_INTERPOLATION_LINEAR_CENTROID,
+ D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE,
+ D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE_CENTROID,
+ D3D_INTERPOLATION_LINEAR_SAMPLE,
+ D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE_SAMPLE,
+}}
+ENUM!{enum D3D_PARAMETER_FLAGS {
+ D3D_PF_NONE = 0,
+ D3D_PF_IN = 0x1,
+ D3D_PF_OUT = 0x2,
+}}
+DEFINE_GUID!{WKPDID_D3DDebugObjectName,
+ 0x429b8c22, 0x9188, 0x4b0c, 0x87, 0x42, 0xac, 0xb0, 0xbf, 0x85, 0xc2, 0x00}
+DEFINE_GUID!{WKPDID_D3DDebugObjectNameW,
+ 0x4cca5fd8, 0x921f, 0x42c8, 0x85, 0x66, 0x70, 0xca, 0xf2, 0xa9, 0xb7, 0x41}
+DEFINE_GUID!{WKPDID_CommentStringW,
+ 0xd0149dc0, 0x90e8, 0x4ec8, 0x81, 0x44, 0xe9, 0x00, 0xad, 0x26, 0x6b, 0xb2}
diff --git a/vendor/winapi/src/um/d3dcompiler.rs b/vendor/winapi/src/um/d3dcompiler.rs
new file mode 100644
index 000000000..944ae25f0
--- /dev/null
+++ b/vendor/winapi/src/um/d3dcompiler.rs
@@ -0,0 +1,274 @@
+// 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 ctypes::c_void;
+use shared::basetsd::SIZE_T;
+use shared::guiddef::REFIID;
+use shared::minwindef::{BOOL, DWORD, LPCVOID, LPVOID, UINT};
+use um::d3d11shader::{ID3D11FunctionLinkingGraph, ID3D11Linker, ID3D11Module};
+use um::d3dcommon::{D3D_SHADER_MACRO, ID3DBlob, ID3DInclude};
+use um::winnt::{HRESULT, LPCSTR, LPCWSTR};
+pub const D3DCOMPILER_DLL: &'static str = "d3dcompiler_47.dll";
+pub const D3D_COMPILER_VERSION: DWORD = 47;
+extern "system" {
+ pub fn D3DReadFileToBlob(
+ pFileName: LPCWSTR,
+ ppContents: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+ pub fn D3DWriteBlobToFile(
+ pBlob: *mut ID3DBlob,
+ pFileName: LPCWSTR,
+ bOverwrite: BOOL,
+ ) -> HRESULT;
+}
+pub const D3DCOMPILE_DEBUG: DWORD = 1 << 0;
+pub const D3DCOMPILE_SKIP_VALIDATION: DWORD = 1 << 1;
+pub const D3DCOMPILE_SKIP_OPTIMIZATION: DWORD = 1 << 2;
+pub const D3DCOMPILE_PACK_MATRIX_ROW_MAJOR: DWORD = 1 << 3;
+pub const D3DCOMPILE_PACK_MATRIX_COLUMN_MAJOR: DWORD = 1 << 4;
+pub const D3DCOMPILE_PARTIAL_PRECISION: DWORD = 1 << 5;
+pub const D3DCOMPILE_FORCE_VS_SOFTWARE_NO_OPT: DWORD = 1 << 6;
+pub const D3DCOMPILE_FORCE_PS_SOFTWARE_NO_OPT: DWORD = 1 << 7;
+pub const D3DCOMPILE_NO_PRESHADER: DWORD = 1 << 8;
+pub const D3DCOMPILE_AVOID_FLOW_CONTROL: DWORD = 1 << 9;
+pub const D3DCOMPILE_PREFER_FLOW_CONTROL: DWORD = 1 << 10;
+pub const D3DCOMPILE_ENABLE_STRICTNESS: DWORD = 1 << 11;
+pub const D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY: DWORD = 1 << 12;
+pub const D3DCOMPILE_IEEE_STRICTNESS: DWORD = 1 << 13;
+pub const D3DCOMPILE_OPTIMIZATION_LEVEL0: DWORD = 1 << 14;
+pub const D3DCOMPILE_OPTIMIZATION_LEVEL1: DWORD = 0;
+pub const D3DCOMPILE_OPTIMIZATION_LEVEL2: DWORD = (1 << 14) | (1 << 15);
+pub const D3DCOMPILE_OPTIMIZATION_LEVEL3: DWORD = 1 << 15;
+pub const D3DCOMPILE_RESERVED16: DWORD = 1 << 16;
+pub const D3DCOMPILE_RESERVED17: DWORD = 1 << 17;
+pub const D3DCOMPILE_WARNINGS_ARE_ERRORS: DWORD = 1 << 18;
+pub const D3DCOMPILE_RESOURCES_MAY_ALIAS: DWORD = 1 << 19;
+pub const D3DCOMPILE_ENABLE_UNBOUNDED_DESCRIPTOR_TABLES: DWORD = 1 << 20;
+pub const D3DCOMPILE_ALL_RESOURCES_BOUND: DWORD = 1 << 21;
+pub const D3DCOMPILE_EFFECT_CHILD_EFFECT: DWORD = 1 << 0;
+pub const D3DCOMPILE_EFFECT_ALLOW_SLOW_OPS: DWORD = 1 << 1;
+pub const D3D_COMPILE_STANDARD_FILE_INCLUDE: *mut ID3DInclude = 1 as *mut ID3DInclude;
+extern "system" {
+ pub fn D3DCompile(
+ pSrcData: LPCVOID,
+ SrcDataSize: SIZE_T,
+ pSourceName: LPCSTR,
+ pDefines: *const D3D_SHADER_MACRO,
+ pInclude: *mut ID3DInclude,
+ pEntrypoint: LPCSTR,
+ pTarget: LPCSTR,
+ Flags1: UINT,
+ Flags2: UINT,
+ ppCode: *mut *mut ID3DBlob,
+ ppErrorMsgs: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+}
+pub const D3DCOMPILE_SECDATA_MERGE_UAV_SLOTS: DWORD = 0x00000001;
+pub const D3DCOMPILE_SECDATA_PRESERVE_TEMPLATE_SLOTS: DWORD = 0x00000002;
+pub const D3DCOMPILE_SECDATA_REQUIRE_TEMPLATE_MATCH: DWORD = 0x00000004;
+extern "system" {
+ pub fn D3DCompile2(
+ pSrcData: LPCVOID,
+ SrcDataSize: SIZE_T,
+ pSourceName: LPCSTR,
+ pDefines: *const D3D_SHADER_MACRO,
+ pInclude: *mut ID3DInclude,
+ pEntrypoint: LPCSTR,
+ pTarget: LPCSTR,
+ Flags1: UINT,
+ Flags2: UINT,
+ SecondaryDataFlags: UINT,
+ pSecondaryData: LPCVOID,
+ SecondaryDataSize: SIZE_T,
+ ppCode: *mut *mut ID3DBlob,
+ ppErrorMsgs: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+ pub fn D3DCompileFromFile(
+ pFileName: LPCWSTR,
+ pDefines: *const D3D_SHADER_MACRO,
+ pInclude: *mut ID3DInclude,
+ pEntrypoint: LPCSTR,
+ pTarget: LPCSTR,
+ Flags1: UINT,
+ Flags2: UINT,
+ ppCode: *mut *mut ID3DBlob,
+ ppErrorMsgs: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+ pub fn D3DPreprocess(
+ pSrcData: LPCVOID,
+ SrcDataSize: SIZE_T,
+ pSourceName: LPCSTR,
+ pDefines: *const D3D_SHADER_MACRO,
+ pInclude: *mut ID3DInclude,
+ ppCodeText: *mut *mut ID3DBlob,
+ ppErrorMsgs: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+ pub fn D3DGetDebugInfo(
+ pSrcData: LPCVOID,
+ SrcDataSize: SIZE_T,
+ ppDebugInfo: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+ pub fn D3DReflect(
+ pSrcData: LPCVOID,
+ SrcDataSize: SIZE_T,
+ pInterface: REFIID,
+ ppReflector: *mut *mut c_void,
+ ) -> HRESULT;
+ pub fn D3DReflectLibrary(
+ pSrcData: LPCVOID,
+ SrcDataSize: SIZE_T,
+ riid: REFIID,
+ ppReflector: *mut LPVOID,
+ ) -> HRESULT;
+}
+pub const D3D_DISASM_ENABLE_COLOR_CODE: DWORD = 0x00000001;
+pub const D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS: DWORD = 0x00000002;
+pub const D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING: DWORD = 0x00000004;
+pub const D3D_DISASM_ENABLE_INSTRUCTION_CYCLE: DWORD = 0x00000008;
+pub const D3D_DISASM_DISABLE_DEBUG_INFO: DWORD = 0x00000010;
+pub const D3D_DISASM_ENABLE_INSTRUCTION_OFFSET: DWORD = 0x00000020;
+pub const D3D_DISASM_INSTRUCTION_ONLY: DWORD = 0x00000040;
+pub const D3D_DISASM_PRINT_HEX_LITERALS: DWORD = 0x00000080;
+extern "system" {
+ pub fn D3DDisassemble(
+ pSrcData: LPCVOID,
+ SrcDataSize: SIZE_T,
+ Flags: UINT,
+ szComments: LPCSTR,
+ ppDisassembly: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+ pub fn D3DDisassembleRegion(
+ pSrcData: LPCVOID,
+ SrcDataSize: SIZE_T,
+ Flags: UINT,
+ szComments: LPCSTR,
+ StartByteOffset: SIZE_T,
+ NumInsts: SIZE_T,
+ pFinishByteOffset: *mut SIZE_T,
+ ppDisassembly: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+ pub fn D3DCreateLinker(
+ ppLinker: *mut *mut ID3D11Linker,
+ ) -> HRESULT;
+ pub fn D3DLoadModule(
+ pSrcData: LPCVOID,
+ cbSrcDataSize: SIZE_T,
+ ppModule: *mut *mut ID3D11Module,
+ ) -> HRESULT;
+ pub fn D3DCreateFunctionLinkingGraph(
+ uFlags: UINT,
+ ppFunctionLinkingGraph: *mut *mut ID3D11FunctionLinkingGraph,
+ ) -> HRESULT;
+}
+pub const D3D_GET_INST_OFFSETS_INCLUDE_NON_EXECUTABLE: DWORD = 0x00000001;
+extern "system" {
+ pub fn D3DGetTraceInstructionOffsets(
+ pSrcData: LPCVOID,
+ SrcDataSize: SIZE_T,
+ Flags: UINT,
+ StartInstIndex: SIZE_T,
+ NumInsts: SIZE_T,
+ pOffsets: *mut SIZE_T,
+ pTotalInsts: *mut SIZE_T,
+ ) -> HRESULT;
+ pub fn D3DGetInputSignatureBlob(
+ pSrcData: LPCVOID,
+ SrcDataSize: SIZE_T,
+ ppSignatureBlob: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+ pub fn D3DGetOutputSignatureBlob(
+ pSrcData: LPCVOID,
+ SrcDataSize: SIZE_T,
+ ppSignatureBlob: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+ pub fn D3DGetInputAndOutputSignatureBlob(
+ pSrcData: LPCVOID,
+ SrcDataSize: SIZE_T,
+ ppSignatureBlob: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+}
+ENUM!{enum D3DCOMPILER_STRIP_FLAGS {
+ D3DCOMPILER_STRIP_REFLECTION_DATA = 0x00000001,
+ D3DCOMPILER_STRIP_DEBUG_INFO = 0x00000002,
+ D3DCOMPILER_STRIP_TEST_BLOBS = 0x00000004,
+ D3DCOMPILER_STRIP_PRIVATE_DATA = 0x00000008,
+ D3DCOMPILER_STRIP_ROOT_SIGNATURE = 0x00000010,
+ D3DCOMPILER_STRIP_FORCE_DWORD = 0x7fffffff,
+}}
+extern "system" {
+ pub fn D3DStripShader(
+ pShaderBytecode: LPCVOID,
+ BytecodeLength: SIZE_T,
+ uStripFlags: UINT,
+ ppStrippedBlob: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+}
+ENUM!{enum D3D_BLOB_PART {
+ D3D_BLOB_INPUT_SIGNATURE_BLOB,
+ D3D_BLOB_OUTPUT_SIGNATURE_BLOB,
+ D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB,
+ D3D_BLOB_PATCH_CONSTANT_SIGNATURE_BLOB,
+ D3D_BLOB_ALL_SIGNATURE_BLOB,
+ D3D_BLOB_DEBUG_INFO,
+ D3D_BLOB_LEGACY_SHADER,
+ D3D_BLOB_XNA_PREPASS_SHADER,
+ D3D_BLOB_XNA_SHADER,
+ D3D_BLOB_PDB,
+ D3D_BLOB_PRIVATE_DATA,
+ D3D_BLOB_ROOT_SIGNATURE,
+ D3D_BLOB_TEST_ALTERNATE_SHADER = 0x8000,
+ D3D_BLOB_TEST_COMPILE_DETAILS,
+ D3D_BLOB_TEST_COMPILE_PERF,
+ D3D_BLOB_TEST_COMPILE_REPORT,
+}}
+extern "system" {
+ pub fn D3DGetBlobPart(
+ pSrcData: LPCVOID,
+ SrcDataSize: SIZE_T,
+ Part: D3D_BLOB_PART,
+ Flags: UINT,
+ ppPart: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+ pub fn D3DSetBlobPart(
+ pSrcData: LPCVOID,
+ SrcDataSize: SIZE_T,
+ Part: D3D_BLOB_PART,
+ Flags: UINT,
+ pPart: LPCVOID,
+ PartSize: SIZE_T,
+ ppNewShader: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+ pub fn D3DCreateBlob(
+ Size: SIZE_T,
+ ppBlob: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+}
+STRUCT!{struct D3D_SHADER_DATA {
+ pBytecode: LPCVOID,
+ BytecodeLength: SIZE_T,
+}}
+extern "system" {
+ pub fn D3DCompressShaders(
+ uNumShaders: UINT,
+ pShaderData: *mut D3D_SHADER_DATA,
+ uFlags: UINT,
+ ppCompressedData: *mut *mut ID3DBlob,
+ ) -> HRESULT;
+ pub fn D3DDecompressShaders(
+ pSrcData: LPCVOID,
+ SrcDataSize: SIZE_T,
+ uNumShaders: UINT,
+ uStartIndex: UINT,
+ pIndices: *mut UINT,
+ uFlags: UINT,
+ ppShaders: *mut *mut ID3DBlob,
+ pTotalShaders: *mut UINT,
+ ) -> HRESULT;
+ // pub fn D3DDisassemble10Effect(
+ // pEffect: *mut ID3D10Effect,
+ // Flags: UINT,
+ // ppDisassembly: *mut *mut ID3DBlob,
+ // ) -> HRESULT;
+}
diff --git a/vendor/winapi/src/um/d3dcsx.rs b/vendor/winapi/src/um/d3dcsx.rs
new file mode 100644
index 000000000..c12640061
--- /dev/null
+++ b/vendor/winapi/src/um/d3dcsx.rs
@@ -0,0 +1,11 @@
+// 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.
+DEFINE_GUID!{IID_ID3DX11Scan,
+ 0x5089b68f, 0xe71d, 0x4d38, 0xbe, 0x8e, 0xf3, 0x63, 0xb9, 0x5a, 0x94, 0x05}
+DEFINE_GUID!{IID_ID3DX11SegmentedScan,
+ 0xa915128c, 0xd954, 0x4c79, 0xbf, 0xe1, 0x64, 0xdb, 0x92, 0x31, 0x94, 0xd6}
+DEFINE_GUID!{IID_ID3DX11FFT,
+ 0xb3f7a938, 0x4c93, 0x4310, 0xa6, 0x75, 0xb3, 0x0d, 0x6d, 0xe5, 0x05, 0x53}
diff --git a/vendor/winapi/src/um/d3dx10core.rs b/vendor/winapi/src/um/d3dx10core.rs
new file mode 100644
index 000000000..c5fb44923
--- /dev/null
+++ b/vendor/winapi/src/um/d3dx10core.rs
@@ -0,0 +1,11 @@
+// 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.
+DEFINE_GUID!{IID_ID3DX10Sprite,
+ 0xba0b762d, 0x8d28, 0x43ec, 0xb9, 0xdc, 0x2f, 0x84, 0x44, 0x3b, 0x06, 0x14}
+DEFINE_GUID!{IID_ID3DX10ThreadPump,
+ 0xc93fecfa, 0x6967, 0x478a, 0xab, 0xbc, 0x40, 0x2d, 0x90, 0x62, 0x1f, 0xcb}
+DEFINE_GUID!{IID_ID3DX10Font,
+ 0xd79dbb70, 0x5f21, 0x4d36, 0xbb, 0xc2, 0xff, 0x52, 0x5c, 0x21, 0x3c, 0xdc}
diff --git a/vendor/winapi/src/um/d3dx10math.rs b/vendor/winapi/src/um/d3dx10math.rs
new file mode 100644
index 000000000..9c6179fdd
--- /dev/null
+++ b/vendor/winapi/src/um/d3dx10math.rs
@@ -0,0 +1,7 @@
+// 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.
+DEFINE_GUID!{IID_ID3DXMatrixStack,
+ 0xc7885ba7, 0xf990, 0x4fe7, 0x92, 0x2d, 0x85, 0x15, 0xe4, 0x77, 0xdd, 0x85}
diff --git a/vendor/winapi/src/um/d3dx10mesh.rs b/vendor/winapi/src/um/d3dx10mesh.rs
new file mode 100644
index 000000000..319df62d8
--- /dev/null
+++ b/vendor/winapi/src/um/d3dx10mesh.rs
@@ -0,0 +1,19 @@
+// 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.
+DEFINE_GUID!{IID_ID3DX10BaseMesh,
+ 0x7ed943dd, 0x52e8, 0x40b5, 0xa8, 0xd8, 0x76, 0x68, 0x5c, 0x40, 0x63, 0x30}
+DEFINE_GUID!{IID_ID3DX10MeshBuffer,
+ 0x04b0d117, 0x1041, 0x46b1, 0xaa, 0x8a, 0x39, 0x52, 0x84, 0x8b, 0xa2, 0x2e}
+DEFINE_GUID!{IID_ID3DX10Mesh,
+ 0x4020e5c2, 0x1403, 0x4929, 0x88, 0x3f, 0xe2, 0xe8, 0x49, 0xfa, 0xc1, 0x95}
+DEFINE_GUID!{IID_ID3DX10PMesh,
+ 0x8875769a, 0xd579, 0x4088, 0xaa, 0xeb, 0x53, 0x4d, 0x1a, 0xd8, 0x4e, 0x96}
+DEFINE_GUID!{IID_ID3DX10SPMesh,
+ 0x667ea4c7, 0xf1cd, 0x4386, 0xb5, 0x23, 0x7c, 0x02, 0x90, 0xb8, 0x3c, 0xc5}
+DEFINE_GUID!{IID_ID3DX10PatchMesh,
+ 0x3ce6cc22, 0xdbf2, 0x44f4, 0x89, 0x4d, 0xf9, 0xc3, 0x4a, 0x33, 0x71, 0x39}
+DEFINE_GUID!{IID_ID3DX10SkinInfo,
+ 0x420bd604, 0x1c76, 0x4a34, 0xa4, 0x66, 0xe4, 0x5d, 0x06, 0x58, 0xa3, 0x2c}
diff --git a/vendor/winapi/src/um/datetimeapi.rs b/vendor/winapi/src/um/datetimeapi.rs
new file mode 100644
index 000000000..e8102a108
--- /dev/null
+++ b/vendor/winapi/src/um/datetimeapi.rs
@@ -0,0 +1,60 @@
+// 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 ctypes::c_int;
+use shared::minwindef::DWORD;
+use um::minwinbase::SYSTEMTIME;
+use um::winnt::{LCID, LPCSTR, LPCWSTR, LPSTR, LPWSTR};
+extern "system" {
+ pub fn GetDateFormatA(
+ Locale: LCID,
+ dwFlags: DWORD,
+ lpDate: *const SYSTEMTIME,
+ lpFormat: LPCSTR,
+ lpDateStr: LPSTR,
+ cchDate: c_int,
+ ) -> c_int;
+ pub fn GetDateFormatW(
+ Locale: LCID,
+ dwFlags: DWORD,
+ lpDate: *const SYSTEMTIME,
+ lpFormat: LPCWSTR,
+ lpDateStr: LPWSTR,
+ cchDate: c_int,
+ ) -> c_int;
+ pub fn GetTimeFormatA(
+ Locale: LCID,
+ dwFlags: DWORD,
+ lpTime: *const SYSTEMTIME,
+ lpFormat: LPCSTR,
+ lpTimeStr: LPSTR,
+ cchTime: c_int,
+ ) -> c_int;
+ pub fn GetTimeFormatW(
+ Locale: LCID,
+ dwFlags: DWORD,
+ lpTime: *const SYSTEMTIME,
+ lpFormat: LPCWSTR,
+ lpTimeStr: LPWSTR,
+ cchTime: c_int,
+ ) -> c_int;
+ pub fn GetTimeFormatEx(
+ lpLocaleName: LPCWSTR,
+ dwFlags: DWORD,
+ lpTime: *const SYSTEMTIME,
+ lpFormat: LPCWSTR,
+ lpTimeStr: LPWSTR,
+ cchTime: c_int,
+ ) -> c_int;
+ pub fn GetDateFormatEx(
+ lpLocaleName: LPCWSTR,
+ dwFlags: DWORD,
+ lpDate: *const SYSTEMTIME,
+ lpFormat: LPCWSTR,
+ lpDateStr: LPWSTR,
+ cchDate: c_int,
+ lpCalendar: LPCWSTR,
+ ) -> c_int;
+}
diff --git a/vendor/winapi/src/um/davclnt.rs b/vendor/winapi/src/um/davclnt.rs
new file mode 100644
index 000000000..9bfc5a371
--- /dev/null
+++ b/vendor/winapi/src/um/davclnt.rs
@@ -0,0 +1,104 @@
+// 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
+//! This module defines the DAV specific functions that are exposed to the user
+use shared::minwindef::{BOOL, DWORD, LPDWORD, PBYTE, PULONG, ULONG};
+use um::winnt::{HANDLE, LPCWSTR, LPWSTR, PVOID, PWSTR};
+pub type OPAQUE_HANDLE = DWORD;
+STRUCT!{struct DAV_CALLBACK_AUTH_BLOB {
+ pBuffer: PVOID,
+ ulSize: ULONG,
+ ulType: ULONG,
+}}
+pub type PDAV_CALLBACK_AUTH_BLOB = *mut DAV_CALLBACK_AUTH_BLOB;
+STRUCT!{struct DAV_CALLBACK_AUTH_UNP {
+ pszUserName: LPWSTR,
+ ulUserNameLength: ULONG,
+ pszPassword: LPWSTR,
+ ulPasswordLength: ULONG,
+}}
+pub type PDAV_CALLBACK_AUTH_UNP = *mut DAV_CALLBACK_AUTH_UNP;
+STRUCT!{struct DAV_CALLBACK_CRED {
+ AuthBlob: DAV_CALLBACK_AUTH_BLOB,
+ UNPBlob: DAV_CALLBACK_AUTH_UNP,
+ bAuthBlobValid: BOOL,
+ bSave: BOOL,
+}}
+pub type PDAV_CALLBACK_CRED = *mut DAV_CALLBACK_CRED;
+pub const DAV_AUTHN_SCHEME_BASIC: DWORD = 0x00000001;
+pub const DAV_AUTHN_SCHEME_NTLM: DWORD = 0x00000002;
+pub const DAV_AUTHN_SCHEME_PASSPORT: DWORD = 0x00000004;
+pub const DAV_AUTHN_SCHEME_DIGEST: DWORD = 0x00000008;
+pub const DAV_AUTHN_SCHEME_NEGOTIATE: DWORD = 0x00000010;
+pub const DAV_AUTHN_SCHEME_CERT: DWORD = 0x00010000;
+pub const DAV_AUTHN_SCHEME_FBA: DWORD = 0x00100000;
+ENUM!{enum AUTHNEXTSTEP {
+ DefaultBehavior,
+ RetryRequest,
+ CancelRequest,
+}}
+FN!{stdcall PFNDAVAUTHCALLBACK_FREECRED(
+ pbuffer: PVOID,
+) -> DWORD}
+FN!{stdcall PFNDAVAUTHCALLBACK(
+ lpwzServerName: LPWSTR,
+ lpwzRemoteName: LPWSTR,
+ dwAuthScheme: DWORD,
+ dwFlags: DWORD,
+ pCallbackCred: PDAV_CALLBACK_CRED,
+ NextStep: *mut AUTHNEXTSTEP,
+ pFreeCred: *mut PFNDAVAUTHCALLBACK_FREECRED,
+) -> DWORD}
+extern "system" {
+ pub fn DavAddConnection(
+ ConnectionHandle: *mut HANDLE,
+ RemoteName: LPCWSTR,
+ UserName: LPCWSTR,
+ Password: LPCWSTR,
+ ClientCert: PBYTE,
+ CertSize: DWORD,
+ ) -> DWORD;
+ pub fn DavDeleteConnection(
+ ConnectionHandle: HANDLE,
+ ) -> DWORD;
+ pub fn DavGetUNCFromHTTPPath(
+ HttpPath: LPCWSTR,
+ UncPath: LPWSTR,
+ lpSize: LPDWORD,
+ ) -> DWORD;
+ pub fn DavGetHTTPFromUNCPath(
+ UncPath: LPCWSTR,
+ HttpPath: LPWSTR,
+ lpSize: LPDWORD,
+ ) -> DWORD;
+ pub fn DavGetTheLockOwnerOfTheFile(
+ FileName: LPCWSTR,
+ LockOwnerName: PWSTR,
+ LockOwnerNameLengthInBytes: PULONG,
+ ) -> DWORD;
+ pub fn DavGetExtendedError(
+ hFile: HANDLE,
+ ExtError: *mut DWORD,
+ ExtErrorString: LPWSTR,
+ cChSize: *mut DWORD,
+ ) -> DWORD;
+ pub fn DavFlushFile(
+ hFile: HANDLE,
+ ) -> DWORD;
+ pub fn DavInvalidateCache(
+ URLName: LPWSTR,
+ ) -> DWORD;
+ pub fn DavCancelConnectionsToServer(
+ URLName: LPWSTR,
+ fForce: BOOL,
+ ) -> DWORD;
+ pub fn DavRegisterAuthCallback(
+ CallBack: PFNDAVAUTHCALLBACK,
+ Version: ULONG,
+ ) -> OPAQUE_HANDLE;
+ pub fn DavUnregisterAuthCallback(
+ hCallback: OPAQUE_HANDLE,
+ );
+}
diff --git a/vendor/winapi/src/um/dbghelp.rs b/vendor/winapi/src/um/dbghelp.rs
new file mode 100644
index 000000000..ddcfbb92d
--- /dev/null
+++ b/vendor/winapi/src/um/dbghelp.rs
@@ -0,0 +1,750 @@
+// 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.
+//! DbgHelp include file
+use shared::basetsd::{DWORD64, PDWORD64, ULONG64};
+use shared::guiddef::GUID;
+use shared::minwindef::{
+ BOOL, DWORD, HMODULE, LPDWORD, MAX_PATH, PDWORD, PUCHAR, PULONG, UCHAR, ULONG, USHORT, WORD,
+};
+use um::winnt::{
+ BOOLEAN, CHAR, HANDLE, LIST_ENTRY, PCSTR, PCWSTR, PIMAGE_NT_HEADERS, PIMAGE_SECTION_HEADER,
+ PSTR, PVOID, PWSTR, WCHAR,
+};
+#[cfg(target_pointer_width = "32")]
+use um::winnt::{
+ PFPO_DATA, PIMAGE_COFF_SYMBOLS_HEADER, PIMAGE_DEBUG_DIRECTORY, PIMAGE_FUNCTION_ENTRY,
+ PIMAGE_NT_HEADERS32,
+};
+#[cfg(target_pointer_width = "64")]
+use um::winnt::PIMAGE_NT_HEADERS64;
+use vc::vcruntime::size_t;
+#[cfg(target_pointer_width = "64")]
+STRUCT!{struct LOADED_IMAGE {
+ ModuleName: PSTR,
+ hFile: HANDLE,
+ MappedAddress: PUCHAR,
+ FileHeader: PIMAGE_NT_HEADERS64,
+ LastRvaSection: PIMAGE_SECTION_HEADER,
+ NumberOfSections: ULONG,
+ Sections: PIMAGE_SECTION_HEADER,
+ Characteristics: ULONG,
+ fSystemImage: BOOLEAN,
+ fDOSImage: BOOLEAN,
+ fReadOnly: BOOLEAN,
+ Version: UCHAR,
+ Links: LIST_ENTRY,
+ SizeOfImage: ULONG,
+}}
+#[cfg(target_pointer_width = "32")]
+STRUCT!{struct LOADED_IMAGE {
+ ModuleName: PSTR,
+ hFile: HANDLE,
+ MappedAddress: PUCHAR,
+ FileHeader: PIMAGE_NT_HEADERS32,
+ LastRvaSection: PIMAGE_SECTION_HEADER,
+ NumberOfSections: ULONG,
+ Sections: PIMAGE_SECTION_HEADER,
+ Characteristics: ULONG,
+ fSystemImage: BOOLEAN,
+ fDOSImage: BOOLEAN,
+ fReadOnly: BOOLEAN,
+ Version: UCHAR,
+ Links: LIST_ENTRY,
+ SizeOfImage: ULONG,
+}}
+pub const MAX_SYM_NAME: usize = 2000;
+pub const ERROR_IMAGE_NOT_STRIPPED: DWORD = 0x8800;
+pub const ERROR_NO_DBG_POINTER: DWORD = 0x8801;
+pub const ERROR_NO_PDB_POINTER: DWORD = 0x8802;
+FN!{stdcall PFIND_DEBUG_FILE_CALLBACK(
+ FileHandle: HANDLE,
+ FileName: PCSTR,
+ CallerData: PVOID,
+) -> BOOL}
+FN!{stdcall PFIND_DEBUG_FILE_CALLBACKW(
+ FileHandle: HANDLE,
+ FileName: PCWSTR,
+ CallerData: PVOID,
+) -> BOOL}
+FN!{stdcall PFINDFILEINPATHCALLBACK(
+ filename: PCSTR,
+ context: PVOID,
+) -> BOOL}
+FN!{stdcall PFINDFILEINPATHCALLBACKW(
+ filename: PCWSTR,
+ context: PVOID,
+) -> BOOL}
+FN!{stdcall PFIND_EXE_FILE_CALLBACK(
+ FileHandle: HANDLE,
+ FileName: PCSTR,
+ CallerData: PVOID,
+) -> BOOL}
+FN!{stdcall PFIND_EXE_FILE_CALLBACKW(
+ FileHandle: HANDLE,
+ FileName: PCWSTR,
+ CallerData: PVOID,
+) -> BOOL}
+FN!{stdcall PSYM_ENUMERATESYMBOLS_CALLBACKW(
+ pSymInfo: PSYMBOL_INFOW,
+ SymbolSize: ULONG,
+ CallerData: PVOID,
+) -> BOOL}
+#[cfg(target_pointer_width = "32")]
+STRUCT!{struct IMAGE_DEBUG_INFORMATION {
+ List: LIST_ENTRY,
+ ReservedSize: DWORD,
+ ReservedMappedBase: PVOID,
+ ReservedMachine: USHORT,
+ ReservedCharacteristics: USHORT,
+ ReservedCheckSum: DWORD,
+ ImageBase: DWORD,
+ SizeOfImage: DWORD,
+ ReservedNumberOfSections: DWORD,
+ ReservedSections: PIMAGE_SECTION_HEADER,
+ ReservedExportedNamesSize: DWORD,
+ ReservedExportedNames: PSTR,
+ ReservedNumberOfFunctionTableEntries: DWORD,
+ ReservedFunctionTableEntries: PIMAGE_FUNCTION_ENTRY,
+ ReservedLowestFunctionStartingAddress: DWORD,
+ ReservedHighestFunctionEndingAddress: DWORD,
+ ReservedNumberOfFpoTableEntries: DWORD,
+ ReservedFpoTableEntries: PFPO_DATA,
+ SizeOfCoffSymbols: DWORD,
+ CoffSymbols: PIMAGE_COFF_SYMBOLS_HEADER,
+ ReservedSizeOfCodeViewSymbols: DWORD,
+ ReservedCodeViewSymbols: PVOID,
+ ImageFilePath: PSTR,
+ ImageFileName: PSTR,
+ ReservedDebugFilePath: PSTR,
+ ReservedTimeDateStamp: DWORD,
+ ReservedRomImage: BOOL,
+ ReservedDebugDirectory: PIMAGE_DEBUG_DIRECTORY,
+ ReservedNumberOfDebugDirectories: DWORD,
+ ReservedOriginalFunctionTableBaseAddress: DWORD,
+ Reserved: [DWORD; 2],
+}}
+#[cfg(target_pointer_width = "32")]
+pub type PIMAGE_DEBUG_INFORMATION = *mut IMAGE_DEBUG_INFORMATION;
+FN!{stdcall PENUMDIRTREE_CALLBACK(
+ FilePath: PCSTR,
+ CallerData: PVOID,
+) -> BOOL}
+FN!{stdcall PENUMDIRTREE_CALLBACKW(
+ FilePath: PCWSTR,
+ CallerData: PVOID,
+) -> BOOL}
+pub const UNDNAME_COMPLETE: DWORD = 0x0000;
+pub const UNDNAME_NO_LEADING_UNDERSCORES: DWORD = 0x0001;
+pub const UNDNAME_NO_MS_KEYWORDS: DWORD = 0x0002;
+pub const UNDNAME_NO_FUNCTION_RETURNS: DWORD = 0x0004;
+pub const UNDNAME_NO_ALLOCATION_MODEL: DWORD = 0x0008;
+pub const UNDNAME_NO_ALLOCATION_LANGUAGE: DWORD = 0x0010;
+pub const UNDNAME_NO_MS_THISTYPE: DWORD = 0x0020;
+pub const UNDNAME_NO_CV_THISTYPE: DWORD = 0x0040;
+pub const UNDNAME_NO_THISTYPE: DWORD = 0x0060;
+pub const UNDNAME_NO_ACCESS_SPECIFIERS: DWORD = 0x0080;
+pub const UNDNAME_NO_THROW_SIGNATURES: DWORD = 0x0100;
+pub const UNDNAME_NO_MEMBER_TYPE: DWORD = 0x0200;
+pub const UNDNAME_NO_RETURN_UDT_MODEL: DWORD = 0x0400;
+pub const UNDNAME_32_BIT_DECODE: DWORD = 0x0800;
+pub const UNDNAME_NAME_ONLY: DWORD = 0x1000;
+pub const UNDNAME_NO_ARGUMENTS: DWORD = 0x2000;
+pub const UNDNAME_NO_SPECIAL_SYMS: DWORD = 0x4000;
+pub const DBHHEADER_DEBUGDIRS: DWORD = 0x1;
+pub const DBHHEADER_CVMISC: DWORD = 0x2;
+pub const DBHHEADER_PDBGUID: DWORD = 0x3;
+STRUCT!{struct MODLOAD_DATA {
+ ssize: DWORD,
+ ssig: DWORD,
+ data: PVOID,
+ size: DWORD,
+ flags: DWORD,
+}}
+pub type PMODLOAD_DATA = *mut MODLOAD_DATA;
+STRUCT!{struct MODLOAD_CVMISC {
+ oCV: DWORD,
+ cCV: size_t,
+ oMisc: DWORD,
+ cMisc: size_t,
+ dtImage: DWORD,
+ cImage: DWORD,
+}}
+pub type PMODLOAD_CVMISC = *mut MODLOAD_CVMISC;
+STRUCT!{struct MODLOAD_PDBGUID_PDBAGE {
+ PdbGuid: GUID,
+ PdbAge: DWORD,
+}}
+pub type PMODLOAD_PDBGUID_PDBAGE = *mut MODLOAD_PDBGUID_PDBAGE;
+ENUM!{enum ADDRESS_MODE {
+ AddrMode1616,
+ AddrMode1632,
+ AddrModeReal,
+ AddrModeFlat,
+}}
+STRUCT!{struct ADDRESS64 {
+ Offset: DWORD64,
+ Segment: WORD,
+ Mode: ADDRESS_MODE,
+}}
+pub type LPADDRESS64 = *mut ADDRESS64;
+#[cfg(target_pointer_width = "64")]
+pub type ADDRESS = ADDRESS64;
+#[cfg(target_pointer_width = "64")]
+pub type LPADDRESS = LPADDRESS64;
+#[cfg(target_pointer_width = "32")]
+STRUCT!{struct ADDRESS {
+ Offset: DWORD,
+ Segment: WORD,
+ Mode: ADDRESS_MODE,
+}}
+#[cfg(target_pointer_width = "32")]
+pub type LPADDRESS = *mut ADDRESS;
+STRUCT!{struct KDHELP64 {
+ Thread: DWORD64,
+ ThCallbackStack: DWORD,
+ ThCallbackBStore: DWORD,
+ NextCallback: DWORD,
+ FramePointer: DWORD,
+ KiCallUserMode: DWORD64,
+ KeUserCallbackDispatcher: DWORD64,
+ SystemRangeStart: DWORD64,
+ KiUserExceptionDispatcher: DWORD64,
+ StackBase: DWORD64,
+ StackLimit: DWORD64,
+ BuildVersion: DWORD,
+ Reserved0: DWORD,
+ Reserved1: [DWORD64; 4],
+}}
+pub type PKDHELP64 = *mut KDHELP64;
+#[cfg(target_pointer_width = "64")]
+pub type KDHELP = KDHELP64;
+#[cfg(target_pointer_width = "64")]
+pub type PKDHELP = PKDHELP64;
+#[cfg(target_pointer_width = "32")]
+STRUCT!{struct KDHELP {
+ Thread: DWORD,
+ ThCallbackStack: DWORD,
+ NextCallback: DWORD,
+ FramePointer: DWORD,
+ KiCallUserMode: DWORD,
+ KeUserCallbackDispatcher: DWORD,
+ SystemRangeStart: DWORD,
+ ThCallbackBStore: DWORD,
+ KiUserExceptionDispatcher: DWORD,
+ StackBase: DWORD,
+ StackLimit: DWORD,
+ Reserved: [DWORD; 5],
+}}
+#[cfg(target_pointer_width = "32")]
+pub type PKDHELP = *mut KDHELP;
+STRUCT!{struct STACKFRAME64 {
+ AddrPC: ADDRESS64,
+ AddrReturn: ADDRESS64,
+ AddrFrame: ADDRESS64,
+ AddrStack: ADDRESS64,
+ AddrBStore: ADDRESS64,
+ FuncTableEntry: PVOID,
+ Params: [DWORD64; 4],
+ Far: BOOL,
+ Virtual: BOOL,
+ Reserved: [DWORD64; 3],
+ KdHelp: KDHELP64,
+}}
+pub type LPSTACKFRAME64 = *mut STACKFRAME64;
+pub const INLINE_FRAME_CONTEXT_INIT: DWORD = 0;
+pub const INLINE_FRAME_CONTEXT_IGNORE: DWORD = 0xFFFFFFFF;
+STRUCT!{struct STACKFRAME_EX {
+ AddrPC: ADDRESS64,
+ AddrReturn: ADDRESS64,
+ AddrFrame: ADDRESS64,
+ AddrStack: ADDRESS64,
+ AddrBStore: ADDRESS64,
+ FuncTableEntry: PVOID,
+ Params: [DWORD64; 4],
+ Far: BOOL,
+ Virtual: BOOL,
+ Reserved: [DWORD64; 3],
+ KdHelp: KDHELP64,
+ StackFrameSize: DWORD,
+ InlineFrameContext: DWORD,
+}}
+pub type LPSTACKFRAME_EX = *mut STACKFRAME_EX;
+#[cfg(target_pointer_width = "64")]
+pub type STACKFRAME = STACKFRAME64;
+#[cfg(target_pointer_width = "64")]
+pub type LPSTACKFRAME = LPSTACKFRAME64;
+#[cfg(target_pointer_width = "32")]
+STRUCT!{struct STACKFRAME {
+ AddrPC: ADDRESS,
+ AddrReturn: ADDRESS,
+ AddrFrame: ADDRESS,
+ AddrStack: ADDRESS,
+ FuncTableEntry: PVOID,
+ Params: [DWORD; 4],
+ Far: BOOL,
+ Virtual: BOOL,
+ Reserved: [DWORD; 3],
+ KdHelp: KDHELP,
+ AddrBStore: ADDRESS,
+}}
+#[cfg(target_pointer_width = "32")]
+pub type LPSTACKFRAME = *mut STACKFRAME;
+FN!{stdcall PREAD_PROCESS_MEMORY_ROUTINE64(
+ hProcess: HANDLE,
+ qwBaseAddress: DWORD64,
+ lpBuffer: PVOID,
+ nSize: DWORD,
+ lpNumberOfBytesRead: LPDWORD,
+) -> BOOL}
+FN!{stdcall PFUNCTION_TABLE_ACCESS_ROUTINE64(
+ ahProcess: HANDLE,
+ AddrBase: DWORD64,
+) -> PVOID}
+FN!{stdcall PGET_MODULE_BASE_ROUTINE64(
+ hProcess: HANDLE,
+ Address: DWORD64,
+) -> DWORD64}
+FN!{stdcall PTRANSLATE_ADDRESS_ROUTINE64(
+ hProcess: HANDLE,
+ hThread: HANDLE,
+ lpaddr: LPADDRESS64,
+) -> DWORD64}
+pub const SYM_STKWALK_DEFAULT: DWORD = 0x00000000;
+pub const SYM_STKWALK_FORCE_FRAMEPTR: DWORD = 0x00000001;
+#[cfg(target_pointer_width = "64")]
+pub type PREAD_PROCESS_MEMORY_ROUTINE = PREAD_PROCESS_MEMORY_ROUTINE64;
+#[cfg(target_pointer_width = "64")]
+pub type PFUNCTION_TABLE_ACCESS_ROUTINE = PFUNCTION_TABLE_ACCESS_ROUTINE64;
+#[cfg(target_pointer_width = "64")]
+pub type PGET_MODULE_BASE_ROUTINE = PGET_MODULE_BASE_ROUTINE64;
+#[cfg(target_pointer_width = "64")]
+pub type PTRANSLATE_ADDRESS_ROUTINE = PTRANSLATE_ADDRESS_ROUTINE64;
+#[cfg(target_pointer_width = "32")]
+FN!{stdcall PREAD_PROCESS_MEMORY_ROUTINE(
+ hProcess: HANDLE,
+ qwBaseAddress: DWORD,
+ lpBuffer: PVOID,
+ nSize: DWORD,
+ lpNumberOfBytesRead: PDWORD,
+) -> BOOL}
+#[cfg(target_pointer_width = "32")]
+FN!{stdcall PFUNCTION_TABLE_ACCESS_ROUTINE(
+ ahProcess: HANDLE,
+ AddrBase: DWORD,
+) -> PVOID}
+#[cfg(target_pointer_width = "32")]
+FN!{stdcall PGET_MODULE_BASE_ROUTINE(
+ hProcess: HANDLE,
+ Address: DWORD,
+) -> DWORD}
+#[cfg(target_pointer_width = "32")]
+FN!{stdcall PTRANSLATE_ADDRESS_ROUTINE(
+ hProcess: HANDLE,
+ hThread: HANDLE,
+ lpaddr: LPADDRESS,
+) -> DWORD}
+pub const API_VERSION_NUMBER: USHORT = 12;
+STRUCT!{struct API_VERSION {
+ MajorVersion: USHORT,
+ MinorVersion: USHORT,
+ Revision: USHORT,
+ Reserved: USHORT,
+}}
+pub type LPAPI_VERSION = *mut API_VERSION;
+STRUCT!{struct SYMBOL_INFOW {
+ SizeOfStruct: ULONG,
+ TypeIndex: ULONG,
+ Reserved: [ULONG64; 2],
+ Index: ULONG,
+ Size: ULONG,
+ ModBase: ULONG64,
+ Flags: ULONG,
+ Value: ULONG64,
+ Address: ULONG64,
+ Register: ULONG,
+ Scope: ULONG,
+ Tag: ULONG,
+ NameLen: ULONG,
+ MaxNameLen: ULONG,
+ Name: [WCHAR; 1],
+}}
+pub type PSYMBOL_INFOW = *mut SYMBOL_INFOW;
+ENUM!{enum SYM_TYPE {
+ SymNone = 0,
+ SymCoff,
+ SymCv,
+ SymPdb,
+ SymExport,
+ SymDeferred,
+ SymSym,
+ SymDia,
+ SymVirtual,
+ NumSymTypes,
+}}
+STRUCT!{struct IMAGEHLP_SYMBOL64 {
+ SizeOfStruct: DWORD,
+ Address: DWORD64,
+ Size: DWORD,
+ Flags: DWORD,
+ MaxNameLength: DWORD,
+ Name: [CHAR; 1],
+}}
+pub type PIMAGEHLP_SYMBOL64 = *mut IMAGEHLP_SYMBOL64;
+STRUCT!{struct IMAGEHLP_MODULEW64 {
+ SizeOfStruct: DWORD,
+ BaseOfImage: DWORD64,
+ ImageSize: DWORD,
+ TimeDateStamp: DWORD,
+ CheckSum: DWORD,
+ NumSyms: DWORD,
+ SymType: SYM_TYPE,
+ ModuleName: [WCHAR; 32],
+ ImageName: [WCHAR; 256],
+ LoadedImageName: [WCHAR; 256],
+ LoadedPdbName: [WCHAR; 256],
+ CVSig: DWORD,
+ CVData: [WCHAR; MAX_PATH * 3],
+ PdbSig: DWORD,
+ PdbSig70: GUID,
+ PdbAge: DWORD,
+ PdbUnmatched: BOOL,
+ DbgUnmatched: BOOL,
+ LineNumbers: BOOL,
+ GlobalSymbols: BOOL,
+ TypeInfo: BOOL,
+ SourceIndexed: BOOL,
+ Publics: BOOL,
+ MachineType: DWORD,
+ Reserved: DWORD,
+}}
+pub type PIMAGEHLP_MODULEW64 = *mut IMAGEHLP_MODULEW64;
+STRUCT!{struct IMAGEHLP_LINEW64 {
+ SizeOfStruct: DWORD,
+ Key: PVOID,
+ LineNumber: DWORD,
+ FileName: PWSTR,
+ Address: DWORD64,
+}}
+pub type PIMAGEHLP_LINEW64 = *mut IMAGEHLP_LINEW64;
+extern "system" {
+ pub fn EnumDirTree(
+ hProcess: HANDLE,
+ RootPath: PCSTR,
+ InputPathName: PCSTR,
+ OutputPathBuffer: PSTR,
+ cb: PENUMDIRTREE_CALLBACK,
+ data: PVOID,
+ ) -> BOOL;
+ pub fn EnumDirTreeW(
+ hProcess: HANDLE,
+ RootPath: PCWSTR,
+ InputPathName: PCWSTR,
+ OutputPathBuffer: PWSTR,
+ cb: PENUMDIRTREE_CALLBACKW,
+ data: PVOID,
+ ) -> BOOL;
+ pub fn ImagehlpApiVersion() -> LPAPI_VERSION;
+ pub fn ImagehlpApiVersionEx(
+ AppVersion: LPAPI_VERSION,
+ ) -> LPAPI_VERSION;
+ pub fn MakeSureDirectoryPathExists(
+ DirPath: PCSTR,
+ ) -> BOOL;
+ pub fn SearchTreeForFile(
+ RootPath: PCSTR,
+ InputPathName: PCSTR,
+ OutputPathBuffer: PSTR,
+ ) -> BOOL;
+ pub fn SearchTreeForFileW(
+ RootPath: PCWSTR,
+ InputPathName: PCWSTR,
+ OutputPathBuffer: PWSTR,
+ ) -> BOOL;
+ pub fn FindDebugInfoFile(
+ FileName: PCSTR,
+ SymbolPath: PCSTR,
+ DebugFilePath: PSTR,
+ ) -> HANDLE;
+ pub fn FindDebugInfoFileEx(
+ FileName: PCSTR,
+ SymbolPath: PCSTR,
+ DebugFilePath: PSTR,
+ Callback: PFIND_DEBUG_FILE_CALLBACK,
+ CallerData: PVOID,
+ ) -> HANDLE;
+ pub fn FindDebugInfoFileExW(
+ FileName: PCWSTR,
+ SymbolPath: PCWSTR,
+ DebugFilePath: PWSTR,
+ Callback: PFIND_DEBUG_FILE_CALLBACKW,
+ CallerData: PVOID,
+ ) -> HANDLE;
+ pub fn FindExecutableImage(
+ FileName: PCSTR,
+ SymbolPath: PCSTR,
+ ImageFilePath: PSTR,
+ ) -> HANDLE;
+ pub fn FindExecutableImageEx(
+ FileName: PCSTR,
+ SymbolPath: PCSTR,
+ ImageFilePath: PSTR,
+ Callback: PFIND_EXE_FILE_CALLBACK,
+ CallerData: PVOID,
+ ) -> HANDLE;
+ pub fn FindExecutableImageExW(
+ FileName: PCWSTR,
+ SymbolPath: PCWSTR,
+ ImageFilePath: PWSTR,
+ Callback: PFIND_EXE_FILE_CALLBACKW,
+ CallerData: PVOID,
+ ) -> HANDLE;
+ pub fn StackWalk(
+ MachineType: DWORD,
+ hProcess: HANDLE,
+ hThread: HANDLE,
+ StackFrame: LPSTACKFRAME,
+ ContextRecord: PVOID,
+ ReadMemoryRoutine: PREAD_PROCESS_MEMORY_ROUTINE,
+ FunctionTableAccessRoutine: PFUNCTION_TABLE_ACCESS_ROUTINE,
+ GetModuleBaseRoutine: PGET_MODULE_BASE_ROUTINE,
+ TranslateAddress: PTRANSLATE_ADDRESS_ROUTINE,
+ ) -> BOOL;
+ pub fn StackWalkEx(
+ MachineType: DWORD,
+ hProcess: HANDLE,
+ hThread: HANDLE,
+ StackFrame: LPSTACKFRAME_EX,
+ ContextRecord: PVOID,
+ ReadMemoryRoutine: PREAD_PROCESS_MEMORY_ROUTINE64,
+ FunctionTableAccessRoutine: PFUNCTION_TABLE_ACCESS_ROUTINE64,
+ GetModuleBaseRoutine: PGET_MODULE_BASE_ROUTINE64,
+ TranslateAddress: PTRANSLATE_ADDRESS_ROUTINE64,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn StackWalk64(
+ MachineType: DWORD,
+ hProcess: HANDLE,
+ hThread: HANDLE,
+ StackFrame: LPSTACKFRAME64,
+ ContextRecord: PVOID,
+ ReadMemoryRoutine: PREAD_PROCESS_MEMORY_ROUTINE64,
+ FunctionTableAccessRoutine: PFUNCTION_TABLE_ACCESS_ROUTINE64,
+ GetModuleBaseRoutine: PGET_MODULE_BASE_ROUTINE64,
+ TranslateAddress: PTRANSLATE_ADDRESS_ROUTINE64,
+ ) -> BOOL;
+ pub fn UnDecorateSymbolName(
+ name: PCSTR,
+ outputString: PSTR,
+ maxStringLength: DWORD,
+ flags: DWORD,
+ ) -> DWORD;
+ pub fn UnDecorateSymbolNameW(
+ name: PCWSTR,
+ outputString: PWSTR,
+ maxStringLength: DWORD,
+ flags: DWORD,
+ ) -> DWORD;
+ pub fn GetTimestampForLoadedLibrary(
+ Module: HMODULE,
+ ) -> DWORD;
+ pub fn ImageDirectoryEntryToData(
+ Base: PVOID,
+ MappedAsImage: BOOLEAN,
+ DirectoryEntry: USHORT,
+ Size: PULONG,
+ ) -> PVOID;
+ pub fn ImageDirectoryEntryToDataEx(
+ Base: PVOID,
+ MappedAsImage: BOOLEAN,
+ DirectoryEntry: USHORT,
+ Size: PULONG,
+ FoundHeader: *mut PIMAGE_SECTION_HEADER,
+ ) -> PVOID;
+ pub fn ImageNtHeader(
+ Base: PVOID,
+ ) -> PIMAGE_NT_HEADERS;
+ pub fn ImageRvaToSection(
+ NtHeaders: PIMAGE_NT_HEADERS,
+ Base: PVOID,
+ Rva: ULONG,
+ ) -> PIMAGE_SECTION_HEADER;
+ pub fn ImageRvaToVa(
+ NtHeaders: PIMAGE_NT_HEADERS,
+ Base: PVOID,
+ Rva: ULONG,
+ LastRvaSection: *mut PIMAGE_SECTION_HEADER,
+ ) -> PVOID;
+}
+pub const SYMOPT_CASE_INSENSITIVE: DWORD = 0x00000001;
+pub const SYMOPT_UNDNAME: DWORD = 0x00000002;
+pub const SYMOPT_DEFERRED_LOADS: DWORD = 0x00000004;
+pub const SYMOPT_NO_CPP: DWORD = 0x00000008;
+pub const SYMOPT_LOAD_LINES: DWORD = 0x00000010;
+pub const SYMOPT_OMAP_FIND_NEAREST: DWORD = 0x00000020;
+pub const SYMOPT_LOAD_ANYTHING: DWORD = 0x00000040;
+pub const SYMOPT_IGNORE_CVREC: DWORD = 0x00000080;
+pub const SYMOPT_NO_UNQUALIFIED_LOADS: DWORD = 0x00000100;
+pub const SYMOPT_FAIL_CRITICAL_ERRORS: DWORD = 0x00000200;
+pub const SYMOPT_EXACT_SYMBOLS: DWORD = 0x00000400;
+pub const SYMOPT_ALLOW_ABSOLUTE_SYMBOLS: DWORD = 0x00000800;
+pub const SYMOPT_IGNORE_NT_SYMPATH: DWORD = 0x00001000;
+pub const SYMOPT_INCLUDE_32BIT_MODULES: DWORD = 0x00002000;
+pub const SYMOPT_PUBLICS_ONLY: DWORD = 0x00004000;
+pub const SYMOPT_NO_PUBLICS: DWORD = 0x00008000;
+pub const SYMOPT_AUTO_PUBLICS: DWORD = 0x00010000;
+pub const SYMOPT_NO_IMAGE_SEARCH: DWORD = 0x00020000;
+pub const SYMOPT_SECURE: DWORD = 0x00040000;
+pub const SYMOPT_NO_PROMPTS: DWORD = 0x00080000;
+pub const SYMOPT_OVERWRITE: DWORD = 0x00100000;
+pub const SYMOPT_IGNORE_IMAGEDIR: DWORD = 0x00200000;
+pub const SYMOPT_FLAT_DIRECTORY: DWORD = 0x00400000;
+pub const SYMOPT_FAVOR_COMPRESSED: DWORD = 0x00800000;
+pub const SYMOPT_ALLOW_ZERO_ADDRESS: DWORD = 0x01000000;
+pub const SYMOPT_DISABLE_SYMSRV_AUTODETECT: DWORD = 0x02000000;
+pub const SYMOPT_READONLY_CACHE: DWORD = 0x04000000;
+pub const SYMOPT_SYMPATH_LAST: DWORD = 0x08000000;
+pub const SYMOPT_DISABLE_FAST_SYMBOLS: DWORD = 0x10000000;
+pub const SYMOPT_DISABLE_SYMSRV_TIMEOUT: DWORD = 0x20000000;
+pub const SYMOPT_DISABLE_SRVSTAR_ON_STARTUP: DWORD = 0x40000000;
+pub const SYMOPT_DEBUG: DWORD = 0x80000000;
+extern "system" {
+ pub fn SymSetOptions(
+ SymOptions: DWORD,
+ ) -> DWORD;
+ pub fn SymGetOptions() -> DWORD;
+ pub fn SymCleanup(
+ hProcess: HANDLE,
+ ) -> BOOL;
+ pub fn SymEnumSymbolsW(
+ hProcess: HANDLE,
+ BaseOfDll: ULONG64,
+ Mask: PCWSTR,
+ EnumSymbolsCallback: PSYM_ENUMERATESYMBOLS_CALLBACKW,
+ CallerData: PVOID,
+ ) -> BOOL;
+ pub fn SymFindDebugInfoFile(
+ hProcess: HANDLE,
+ FileName: PCSTR,
+ DebugFilePath: PSTR,
+ Callback: PFIND_DEBUG_FILE_CALLBACK,
+ CallerData: PVOID,
+ ) -> HANDLE;
+ pub fn SymFindDebugInfoFileW(
+ hProcess: HANDLE,
+ FileName: PCWSTR,
+ DebugFilePath: PWSTR,
+ Callback: PFIND_DEBUG_FILE_CALLBACKW,
+ CallerData: PVOID,
+ ) -> HANDLE;
+ pub fn SymFindExecutableImage(
+ hProcess: HANDLE,
+ FileName: PCSTR,
+ ImageFilePath: PSTR,
+ Callback: PFIND_EXE_FILE_CALLBACK,
+ CallerData: PVOID,
+ ) -> HANDLE;
+ pub fn SymFindExecutableImageW(
+ hProcess: HANDLE,
+ FileName: PCWSTR,
+ ImageFilePath: PWSTR,
+ Callback: PFIND_EXE_FILE_CALLBACKW,
+ CallerData: PVOID,
+ ) -> HANDLE;
+ pub fn SymFindFileInPath(
+ hprocess: HANDLE,
+ SearchPath: PCSTR,
+ FileName: PCSTR,
+ id: PVOID,
+ two: DWORD,
+ three: DWORD,
+ flags: DWORD,
+ FoundFile: PSTR,
+ callback: PFINDFILEINPATHCALLBACK,
+ context: PVOID,
+ ) -> BOOL;
+ pub fn SymFindFileInPathW(
+ hprocess: HANDLE,
+ SearchPath: PCWSTR,
+ FileName: PCWSTR,
+ id: PVOID,
+ two: DWORD,
+ three: DWORD,
+ flags: DWORD,
+ FoundFile: PWSTR,
+ callback: PFINDFILEINPATHCALLBACKW,
+ context: PVOID,
+ ) -> BOOL;
+ pub fn SymFromAddrW(
+ hProcess: HANDLE,
+ Address: DWORD64,
+ Displacement: PDWORD64,
+ Symbol: PSYMBOL_INFOW,
+ ) -> BOOL;
+ pub fn SymFromNameW(
+ hProcess: HANDLE,
+ Name: PCWSTR,
+ Symbol: PSYMBOL_INFOW,
+ ) -> BOOL;
+ pub fn SymFunctionTableAccess64(
+ hProcess: HANDLE,
+ AddrBase: DWORD64,
+ ) -> PVOID;
+ pub fn SymGetLineFromAddrW64(
+ hProcess: HANDLE,
+ dwAddr: DWORD64,
+ pdwDisplacement: PDWORD,
+ Line: PIMAGEHLP_LINEW64,
+ ) -> BOOL;
+ pub fn SymGetModuleInfoW64(
+ hProcess: HANDLE,
+ qwAddr: DWORD64,
+ ModuleInfo: PIMAGEHLP_MODULEW64,
+ ) -> BOOL;
+ pub fn SymGetModuleBase64(
+ hProcess: HANDLE,
+ AddrBase: DWORD64,
+ ) -> DWORD64;
+ pub fn SymGetSymFromAddr64(
+ hProcess: HANDLE,
+ Address: DWORD64,
+ Displacement: PDWORD64,
+ Symbol: PIMAGEHLP_SYMBOL64,
+ ) -> BOOL;
+ pub fn SymInitializeW(
+ hProcess: HANDLE,
+ UserSearchPath: PCWSTR,
+ fInvadeProcess: BOOL,
+ ) -> BOOL;
+ pub fn SymLoadModuleExW(
+ hProcess: HANDLE,
+ hFile: HANDLE,
+ ImageName: PCWSTR,
+ ModuleName: PCWSTR,
+ BaseOfDll: DWORD64,
+ SizeOfDll: DWORD,
+ Data: PMODLOAD_DATA,
+ Flags: DWORD,
+ ) -> DWORD64;
+ pub fn SymUnloadModule(
+ hProcess: HANDLE,
+ BaseOfDll: DWORD,
+ ) -> BOOL;
+ pub fn SymUnloadModule64(
+ hProcess: HANDLE,
+ BaseOfDll: DWORD64,
+ ) -> BOOL;
+ #[cfg(target_pointer_width = "32")]
+ pub fn MapDebugInformation(
+ FileHandle: HANDLE,
+ FileName: PCSTR,
+ SymbolPath: PCSTR,
+ ImageBase: ULONG,
+ ) -> PIMAGE_DEBUG_INFORMATION;
+ #[cfg(target_pointer_width = "32")]
+ pub fn UnmapDebugInformation(
+ DebugInfo: PIMAGE_DEBUG_INFORMATION,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/dbt.rs b/vendor/winapi/src/um/dbt.rs
new file mode 100644
index 000000000..e95a58ce9
--- /dev/null
+++ b/vendor/winapi/src/um/dbt.rs
@@ -0,0 +1,192 @@
+// 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 ctypes::{c_char, wchar_t};
+use shared::basetsd::{ULONG32, ULONG64};
+use shared::guiddef::GUID;
+use shared::minwindef::{BYTE, DWORD, UINT, WORD, WPARAM};
+use um::winnt::{HANDLE, LONG};
+use um::winuser::HDEVNOTIFY;
+pub const WM_DEVICECHANGE: UINT = 0x0219;
+pub const BSF_QUERY: DWORD = 0x00000001;
+pub const BSF_IGNORECURRENTTASK: DWORD = 0x00000002;
+pub const BSF_FLUSHDISK: DWORD = 0x00000004;
+pub const BSF_NOHANG: DWORD = 0x00000008;
+pub const BSF_POSTMESSAGE: DWORD = 0x00000010;
+pub const BSF_FORCEIFHUNG: DWORD = 0x00000020;
+pub const BSF_NOTIMEOUTIFNOTHUNG: DWORD = 0x00000040;
+pub const BSF_MSGSRV32ISOK: DWORD = 0x80000000;
+pub const BSF_MSGSRV32ISOK_BIT: usize = 31;
+pub const BSM_ALLCOMPONENTS: DWORD = 0x00000000;
+pub const BSM_VXDS: DWORD = 0x00000001;
+pub const BSM_NETDRIVER: DWORD = 0x00000002;
+pub const BSM_INSTALLABLEDRIVERS: DWORD = 0x00000004;
+pub const BSM_APPLICATIONS: DWORD = 0x00000008;
+pub const DBT_APPYBEGIN: WPARAM = 0x0000;
+pub const DBT_APPYEND: WPARAM = 0x0001;
+pub const DBT_DEVNODES_CHANGED: WPARAM = 0x0007;
+pub const DBT_QUERYCHANGECONFIG: WPARAM = 0x0017;
+pub const DBT_CONFIGCHANGED: WPARAM = 0x0018;
+pub const DBT_CONFIGCHANGECANCELED: WPARAM = 0x0019;
+pub const DBT_MONITORCHANGE: WPARAM = 0x001B;
+pub const DBT_SHELLLOGGEDON: WPARAM = 0x0020;
+pub const DBT_CONFIGMGAPI32: WPARAM = 0x0022;
+pub const DBT_VXDINITCOMPLETE: WPARAM = 0x0023;
+pub const DBT_VOLLOCKQUERYLOCK: WPARAM = 0x8041;
+pub const DBT_VOLLOCKLOCKTAKEN: WPARAM = 0x8042;
+pub const DBT_VOLLOCKLOCKFAILED: WPARAM = 0x8043;
+pub const DBT_VOLLOCKQUERYUNLOCK: WPARAM = 0x8044;
+pub const DBT_VOLLOCKLOCKRELEASED: WPARAM = 0x8045;
+pub const DBT_VOLLOCKUNLOCKFAILED: WPARAM = 0x8046;
+STRUCT!{struct DEV_BROADCAST_HDR {
+ dbch_size: DWORD,
+ dbch_devicetype: DWORD,
+ dbch_reserved: DWORD,
+}}
+pub type PDEV_BROADCAST_HDR = *mut DEV_BROADCAST_HDR;
+STRUCT!{struct VolLockBroadcast {
+ vlb_dbh: DEV_BROADCAST_HDR,
+ vlb_owner: DWORD,
+ vlb_perms: BYTE,
+ vlb_lockType: BYTE,
+ vlb_drive: BYTE,
+ vlb_flags: BYTE,
+}}
+pub type pVolLockBroadcast = *mut VolLockBroadcast;
+pub const LOCKP_ALLOW_WRITES: BYTE = 0x01;
+pub const LOCKP_FAIL_WRITES: BYTE = 0x00;
+pub const LOCKP_FAIL_MEM_MAPPING: BYTE = 0x02;
+pub const LOCKP_ALLOW_MEM_MAPPING: BYTE = 0x00;
+pub const LOCKP_USER_MASK: BYTE = 0x03;
+pub const LOCKP_LOCK_FOR_FORMAT: BYTE = 0x04;
+pub const LOCKF_LOGICAL_LOCK: BYTE = 0x00;
+pub const LOCKF_PHYSICAL_LOCK: BYTE = 0x01;
+pub const DBT_NO_DISK_SPACE: WPARAM = 0x0047;
+pub const DBT_LOW_DISK_SPACE: WPARAM = 0x0048;
+pub const DBT_CONFIGMGPRIVATE: WPARAM = 0x7FFF;
+pub const DBT_DEVICEARRIVAL: WPARAM = 0x8000;
+pub const DBT_DEVICEQUERYREMOVE: WPARAM = 0x8001;
+pub const DBT_DEVICEQUERYREMOVEFAILED: WPARAM = 0x8002;
+pub const DBT_DEVICEREMOVEPENDING: WPARAM = 0x8003;
+pub const DBT_DEVICEREMOVECOMPLETE: WPARAM = 0x8004;
+pub const DBT_DEVICETYPESPECIFIC: WPARAM = 0x8005;
+pub const DBT_CUSTOMEVENT: WPARAM = 0x8006;
+pub const DBT_DEVTYP_OEM: DWORD = 0x00000000;
+pub const DBT_DEVTYP_DEVNODE: DWORD = 0x00000001;
+pub const DBT_DEVTYP_VOLUME: DWORD = 0x00000002;
+pub const DBT_DEVTYP_PORT: DWORD = 0x00000003;
+pub const DBT_DEVTYP_NET: DWORD = 0x00000004;
+pub const DBT_DEVTYP_DEVICEINTERFACE: DWORD = 0x00000005;
+pub const DBT_DEVTYP_HANDLE: DWORD = 0x00000006;
+STRUCT!{struct _DEV_BROADCAST_HEADER {
+ dbcd_size: DWORD,
+ dbcd_devicetype: DWORD,
+ dbcd_reserved: DWORD,
+}}
+STRUCT!{struct DEV_BROADCAST_OEM {
+ dbco_size: DWORD,
+ dbco_devicetype: DWORD,
+ dbco_reserved: DWORD,
+ dbco_identifier: DWORD,
+ dbco_suppfunc: DWORD,
+}}
+pub type PDEV_BROADCAST_OEM = *mut DEV_BROADCAST_OEM;
+STRUCT!{struct DEV_BROADCAST_DEVNODE {
+ dbcd_size: DWORD,
+ dbcd_devicetype: DWORD,
+ dbcd_reserved: DWORD,
+ dbcd_devnode: DWORD,
+}}
+pub type PDEV_BROADCAST_DEVNODE = *mut DEV_BROADCAST_DEVNODE;
+STRUCT!{struct DEV_BROADCAST_VOLUME {
+ dbcv_size: DWORD,
+ dbcv_devicetype: DWORD,
+ dbcv_reserved: DWORD,
+ dbcv_unitmask: DWORD,
+ dbcv_flags: WORD,
+}}
+pub type PDEV_BROADCAST_VOLUME = *mut DEV_BROADCAST_VOLUME;
+pub const DBTF_MEDIA: WORD = 0x0001;
+pub const DBTF_NET: WORD = 0x0002;
+STRUCT!{struct DEV_BROADCAST_PORT_A {
+ dbcp_size: DWORD,
+ dbcp_devicetype: DWORD,
+ dbcp_reserved: DWORD,
+ dbcp_name: [c_char; 1],
+}}
+pub type PDEV_BROADCAST_PORT_A = *mut DEV_BROADCAST_PORT_A;
+STRUCT!{struct DEV_BROADCAST_PORT_W {
+ dbcp_size: DWORD,
+ dbcp_devicetype: DWORD,
+ dbcp_reserved: DWORD,
+ dbcp_name: [wchar_t; 1],
+}}
+pub type PDEV_BROADCAST_PORT_W = *mut DEV_BROADCAST_PORT_W;
+STRUCT!{struct DEV_BROADCAST_NET {
+ dbcn_size: DWORD,
+ dbcn_devicetype: DWORD,
+ dbcn_reserved: DWORD,
+ dbcn_resource: DWORD,
+ dbcn_flags: DWORD,
+}}
+pub type PDEV_BROADCAST_NET = *mut DEV_BROADCAST_NET;
+STRUCT!{struct DEV_BROADCAST_DEVICEINTERFACE_A {
+ dbcc_size: DWORD,
+ dbcc_devicetype: DWORD,
+ dbcc_reserved: DWORD,
+ dbcc_classguid: GUID,
+ dbcc_name: [c_char; 1],
+}}
+pub type PDEV_BROADCAST_DEVICEINTERFACE_A = *mut DEV_BROADCAST_DEVICEINTERFACE_A;
+STRUCT!{struct DEV_BROADCAST_DEVICEINTERFACE_W {
+ dbcc_size: DWORD,
+ dbcc_devicetype: DWORD,
+ dbcc_reserved: DWORD,
+ dbcc_classguid: GUID,
+ dbcc_name: [wchar_t; 1],
+}}
+pub type PDEV_BROADCAST_DEVICEINTERFACE_W = *mut DEV_BROADCAST_DEVICEINTERFACE_W;
+STRUCT!{struct DEV_BROADCAST_HANDLE {
+ dbch_size: DWORD,
+ dbch_devicetype: DWORD,
+ dbch_reserved: DWORD,
+ dbch_handle: HANDLE,
+ dbch_hdevnotify: HDEVNOTIFY,
+ dbch_eventguid: GUID,
+ dbch_nameoffset: LONG,
+ dbch_data: [BYTE; 1],
+}}
+pub type PDEV_BROADCAST_HANDLE = *mut DEV_BROADCAST_HANDLE;
+STRUCT!{struct DEV_BROADCAST_HANDLE32 {
+ dbch_size: DWORD,
+ dbch_devicetype: DWORD,
+ dbch_reserved: DWORD,
+ dbch_handle: ULONG32,
+ dbch_hdevnotify: ULONG32,
+ dbch_eventguid: GUID,
+ dbch_nameoffset: LONG,
+ dbch_data: [BYTE; 1],
+}}
+pub type PDEV_BROADCAST_HANDLE32 = *mut DEV_BROADCAST_HANDLE32;
+STRUCT!{struct DEV_BROADCAST_HANDLE64 {
+ dbch_size: DWORD,
+ dbch_devicetype: DWORD,
+ dbch_reserved: DWORD,
+ dbch_handle: ULONG64,
+ dbch_hdevnotify: ULONG64,
+ dbch_eventguid: GUID,
+ dbch_nameoffset: LONG,
+ dbch_data: [BYTE; 1],
+}}
+pub type PDEV_BROADCAST_HANDLE64 = *mut DEV_BROADCAST_HANDLE64;
+pub const DBTF_RESOURCE: DWORD = 0x00000001;
+pub const DBTF_XPORT: DWORD = 0x00000002;
+pub const DBTF_SLOWNET: DWORD = 0x00000004;
+pub const DBT_VPOWERDAPI: WPARAM = 0x8100;
+pub const DBT_USERDEFINED: WPARAM = 0xFFFF;
+STRUCT!{struct _DEV_BROADCAST_USERDEFINED {
+ dbud_dbh: DEV_BROADCAST_HDR,
+ dbud_szName: [c_char; 1],
+}}
diff --git a/vendor/winapi/src/um/dcommon.rs b/vendor/winapi/src/um/dcommon.rs
new file mode 100644
index 000000000..e0260cbd9
--- /dev/null
+++ b/vendor/winapi/src/um/dcommon.rs
@@ -0,0 +1,114 @@
+// 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 dcommon.h
+use ctypes::c_void;
+use shared::basetsd::UINT32;
+use shared::dxgiformat::DXGI_FORMAT;
+use shared::minwindef::FLOAT;
+use shared::windef::{POINT, RECT};
+ENUM!{enum DWRITE_MEASURING_MODE {
+ DWRITE_MEASURING_MODE_NATURAL = 0,
+ DWRITE_MEASURING_MODE_GDI_CLASSIC = 1,
+ DWRITE_MEASURING_MODE_GDI_NATURAL = 2,
+}}
+ENUM!{enum DWRITE_GLYPH_IMAGE_FORMATS {
+ DWRITE_GLYPH_IMAGE_FORMATS_NONE = 0x00000000,
+ DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPE = 0x00000001,
+ DWRITE_GLYPH_IMAGE_FORMATS_CFF = 0x00000002,
+ DWRITE_GLYPH_IMAGE_FORMATS_COLR = 0x00000004,
+ DWRITE_GLYPH_IMAGE_FORMATS_SVG = 0x00000008,
+ DWRITE_GLYPH_IMAGE_FORMATS_PNG = 0x00000010,
+ DWRITE_GLYPH_IMAGE_FORMATS_JPEG = 0x00000020,
+ DWRITE_GLYPH_IMAGE_FORMATS_TIFF = 0x00000040,
+ DWRITE_GLYPH_IMAGE_FORMATS_PREMULTIPLIED_B8G8R8A8 = 0x00000080,
+}}
+STRUCT!{struct DWRITE_GLYPH_IMAGE_DATA {
+ imageData: *const c_void,
+ imageDataSize: UINT32,
+ uniqueDataId: UINT32,
+ pixelsPerEm: UINT32,
+ pixelSize: D2D1_SIZE_U,
+ horizontalLeftOrigin: D2D1_POINT_2L,
+ horizontalRightOrigin: D2D1_POINT_2L,
+ verticalTopOrigin: D2D1_POINT_2L,
+ verticalBottomOrigin: D2D1_POINT_2L,
+}}
+ENUM!{enum D2D1_ALPHA_MODE {
+ D2D1_ALPHA_MODE_UNKNOWN = 0,
+ D2D1_ALPHA_MODE_PREMULTIPLIED = 1,
+ D2D1_ALPHA_MODE_STRAIGHT = 2,
+ D2D1_ALPHA_MODE_IGNORE = 3,
+}}
+STRUCT!{struct D2D1_PIXEL_FORMAT {
+ format: DXGI_FORMAT,
+ alphaMode: D2D1_ALPHA_MODE,
+}}
+STRUCT!{struct D2D_POINT_2U {
+ x: UINT32,
+ y: UINT32,
+}}
+STRUCT!{struct D2D_POINT_2F {
+ x: FLOAT,
+ y: FLOAT,
+}}
+pub type D2D_POINT_2L = POINT;
+STRUCT!{struct D2D_VECTOR_2F {
+ x: FLOAT,
+ y: FLOAT,
+}}
+STRUCT!{struct D2D_VECTOR_3F {
+ x: FLOAT,
+ y: FLOAT,
+ z: FLOAT,
+}}
+STRUCT!{struct D2D_VECTOR_4F {
+ x: FLOAT,
+ y: FLOAT,
+ z: FLOAT,
+ w: FLOAT,
+}}
+STRUCT!{struct D2D_RECT_F {
+ left: FLOAT,
+ top: FLOAT,
+ right: FLOAT,
+ bottom: FLOAT,
+}}
+STRUCT!{struct D2D_RECT_U {
+ left: UINT32,
+ top: UINT32,
+ right: UINT32,
+ bottom: UINT32,
+}}
+pub type D2D_RECT_L = RECT;
+STRUCT!{struct D2D_SIZE_F {
+ width: FLOAT,
+ height: FLOAT,
+}}
+STRUCT!{struct D2D_SIZE_U {
+ width: UINT32,
+ height: UINT32,
+}}
+STRUCT!{struct D2D_MATRIX_3X2_F {
+ matrix: [[FLOAT; 2]; 3],
+}}
+STRUCT!{struct D2D_MATRIX_4X3_F {
+ matrix: [[FLOAT; 3]; 4],
+}}
+STRUCT!{struct D2D_MATRIX_4X4_F {
+ matrix: [[FLOAT; 4]; 4],
+}}
+STRUCT!{struct D2D_MATRIX_5X4_F {
+ matrix: [[FLOAT; 4]; 5],
+}}
+pub type D2D1_POINT_2F = D2D_POINT_2F;
+pub type D2D1_POINT_2U = D2D_POINT_2U;
+pub type D2D1_POINT_2L = D2D_POINT_2L;
+pub type D2D1_RECT_F = D2D_RECT_F;
+pub type D2D1_RECT_U = D2D_RECT_U;
+pub type D2D1_RECT_L = D2D_RECT_L;
+pub type D2D1_SIZE_F = D2D_SIZE_F;
+pub type D2D1_SIZE_U = D2D_SIZE_U;
+pub type D2D1_MATRIX_3X2_F = D2D_MATRIX_3X2_F;
diff --git a/vendor/winapi/src/um/dcomp.rs b/vendor/winapi/src/um/dcomp.rs
new file mode 100644
index 000000000..17048650a
--- /dev/null
+++ b/vendor/winapi/src/um/dcomp.rs
@@ -0,0 +1,1159 @@
+// 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 dcomp.h
+use ctypes::{c_float, c_int, c_void};
+use shared::d3d9types::D3DMATRIX;
+use shared::dcomptypes::{
+ DCOMPOSITION_BACKFACE_VISIBILITY, DCOMPOSITION_BITMAP_INTERPOLATION_MODE,
+ DCOMPOSITION_BORDER_MODE, DCOMPOSITION_COMPOSITE_MODE, DCOMPOSITION_DEPTH_MODE,
+ DCOMPOSITION_FRAME_STATISTICS, DCOMPOSITION_OPACITY_MODE
+};
+use shared::dxgi::IDXGIDevice;
+use shared::dxgi1_2::DXGI_ALPHA_MODE;
+use shared::dxgiformat::DXGI_FORMAT;
+use shared::guiddef::REFIID;
+use shared::minwindef::{BOOL, DWORD, UINT};
+use shared::ntdef::{HANDLE, HRESULT};
+use shared::windef::{HWND, POINT, RECT};
+use um::d2d1::{D2D1_COLOR_F, D2D1_MATRIX_3X2_F};
+use um::d2d1_1::{D2D1_COMPOSITE_MODE, D2D1_MATRIX_5X4_F, D2D1_VECTOR_2F, D2D1_VECTOR_4F};
+use um::d2d1effects::{
+ D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE, D2D1_BLEND_MODE, D2D1_BORDER_MODE,
+ D2D1_COLORMATRIX_ALPHA_MODE, D2D1_TURBULENCE_NOISE
+};
+use um::d2dbasetypes::{D2D_MATRIX_3X2_F, D2D_MATRIX_4X4_F, D2D_RECT_F};
+use um::d3dcommon::D3D_FEATURE_LEVEL;
+use um::dcompanimation::IDCompositionAnimation;
+use um::minwinbase::SECURITY_ATTRIBUTES;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+extern "system" {
+ pub fn DCompositionCreateDevice(
+ dxgiDevice: *const IDXGIDevice,
+ iid: REFIID,
+ dcompositionDevice: *mut *mut c_void,
+ ) -> HRESULT;
+ pub fn DCompositionCreateDevice2(
+ renderingDevice: *const IUnknown,
+ iid: REFIID,
+ dcompositionDevice: *mut *mut c_void,
+ ) -> HRESULT;
+ pub fn DCompositionCreateDevice3(
+ renderingDevice: *const IUnknown,
+ iid: REFIID,
+ dcompositionDevice: *mut *mut c_void,
+ ) -> HRESULT;
+ pub fn DCompositionGetFrameStatistics(
+ statistics: *const DCOMPOSITION_FRAME_STATISTICS,
+ minSafeFeaturelLevel: *const D3D_FEATURE_LEVEL,
+ maxHardwareFeaturelLevel: *const D3D_FEATURE_LEVEL,
+ ) -> HRESULT;
+ pub fn DCompositionCreateSurfaceHandle(
+ desiredAccess: DWORD,
+ securityAttributes: *const SECURITY_ATTRIBUTES,
+ surfaceHandle: *mut HANDLE,
+ ) -> HRESULT;
+ pub fn DCompositionAttachMouseWheelToHwnd(
+ visual: *const IDCompositionVisual,
+ hwnd: HWND,
+ enable: BOOL,
+ ) -> HRESULT;
+ pub fn DCompositionAttachMouseDragToHwnd(
+ visual: *const IDCompositionVisual,
+ hwnd: HWND,
+ enable: BOOL,
+ ) -> HRESULT;
+}
+RIDL!{#[uuid(0xc37ea93a, 0xe7aa, 0x450d, 0xb1, 0x6f, 0x97, 0x46, 0xcb, 0x04, 0x07, 0xf3)]
+interface IDCompositionDevice(IDCompositionDeviceVtbl): IUnknown(IUnknownVtbl) {
+ fn Commit() -> HRESULT,
+ fn WaitForCommitCompletion() -> HRESULT,
+ fn GetFrameStatistics(
+ statistics: *mut DCOMPOSITION_FRAME_STATISTICS,
+ ) -> HRESULT,
+ fn CreateTargetForHwnd(
+ hwnd: HWND,
+ topmost: BOOL,
+ target: *mut *mut IDCompositionTarget,
+ ) -> HRESULT,
+ fn CreateVisual(
+ visual: *mut *mut IDCompositionVisual,
+ ) -> HRESULT,
+ fn CreateSurface(
+ width: UINT,
+ height: UINT,
+ pixelFormat: DXGI_FORMAT,
+ alphaMode: DXGI_ALPHA_MODE,
+ surface: *mut *mut IDCompositionSurface,
+ ) -> HRESULT,
+ fn CreateVirtualSurface(
+ initialWidth: UINT,
+ initialHeight: UINT,
+ pixelFormat: DXGI_FORMAT,
+ alphaMode: DXGI_ALPHA_MODE,
+ virtualSurface: *mut *mut IDCompositionVirtualSurface,
+ ) -> HRESULT,
+ fn CreateSurfaceFromHandle(
+ handle: HANDLE,
+ mutsurface: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn CreateSurfaceFromHwnd(
+ hwnd: HWND,
+ mutsurface: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn CreateTranslateTransform(
+ translateTransform: *mut *mut IDCompositionTranslateTransform,
+ ) -> HRESULT,
+ fn CreateScaleTransform(
+ scaleTransform: *mut *mut IDCompositionScaleTransform,
+ ) -> HRESULT,
+ fn CreateRotateTransform(
+ rotateTransform: *mut *mut IDCompositionRotateTransform,
+ ) -> HRESULT,
+ fn CreateSkewTransform(
+ skewTransform: *mut *mut IDCompositionSkewTransform,
+ ) -> HRESULT,
+ fn CreateMatrixTransform(
+ matrixTransform: *mut *mut IDCompositionMatrixTransform,
+ ) -> HRESULT,
+ fn CreateTransformGroup(
+ transforms: *const *const IDCompositionTransform,
+ elements: UINT,
+ transformGroup: *mut *mut IDCompositionTransform,
+ ) -> HRESULT,
+ fn CreateTranslateTransform3D(
+ translateTransform3D: *mut *mut IDCompositionTranslateTransform3D,
+ ) -> HRESULT,
+ fn CreateScaleTransform3D(
+ scaleTransform3D: *mut *mut IDCompositionScaleTransform3D,
+ ) -> HRESULT,
+ fn CreateRotateTransform3D(
+ rotateTransform3D: *mut *mut IDCompositionRotateTransform3D,
+ ) -> HRESULT,
+ fn CreateMatrixTransform3D(
+ matrixTransform3D: *mut *mut IDCompositionMatrixTransform3D,
+ ) -> HRESULT,
+ fn CreateTransform3DGroup(
+ transforms3D: *const *const IDCompositionTransform3D,
+ elements: UINT,
+ transform3DGroup: *mut *mut IDCompositionTransform3D,
+ ) -> HRESULT,
+ fn CreateEffectGroup(
+ effectGroup: *mut *mut IDCompositionEffectGroup,
+ ) -> HRESULT,
+ fn CreateRectangleClip(
+ clip: *mut *mut IDCompositionRectangleClip,
+ ) -> HRESULT,
+ fn CreateAnimation(
+ animation: *mut *mut IDCompositionAnimation,
+ ) -> HRESULT,
+ fn CheckDeviceState(
+ pfValid: *mut BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xeacdd04c, 0x117e, 0x4e17, 0x88, 0xf4, 0xd1, 0xb1, 0x2b, 0x0e, 0x3d, 0x89)]
+interface IDCompositionTarget(IDCompositionTargetVtbl): IUnknown(IUnknownVtbl) {
+ fn SetRoot(
+ visual: *const IDCompositionVisual,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x4d93059d, 0x097b, 0x4651, 0x9a, 0x60, 0xf0, 0xf2, 0x51, 0x16, 0xe2, 0xf3)]
+interface IDCompositionVisual(IDCompositionVisualVtbl): IUnknown(IUnknownVtbl) {
+ fn SetOffsetX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetOffsetX_1(
+ offsetX: c_float,
+ ) -> HRESULT,
+ fn SetOffsetY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetOffsetY_1(
+ offsetY: c_float,
+ ) -> HRESULT,
+ fn SetTransform_2(
+ transform: *const IDCompositionTransform,
+ ) -> HRESULT,
+ fn SetTransform_1(
+ matrix: *const D2D_MATRIX_3X2_F,
+ ) -> HRESULT,
+ fn SetTransformParent(
+ visual: *const IDCompositionVisual,
+ ) -> HRESULT,
+ fn SetEffect(
+ effect: *const IDCompositionEffect,
+ ) -> HRESULT,
+ fn SetBitmapInterpolationMode(
+ interpolationMode: DCOMPOSITION_BITMAP_INTERPOLATION_MODE,
+ ) -> HRESULT,
+ fn SetBorderMode(
+ borderMode: DCOMPOSITION_BORDER_MODE,
+ ) -> HRESULT,
+ fn SetClip_2(
+ clip: *const IDCompositionClip,
+ ) -> HRESULT,
+ fn SetClip_1(
+ rect: *const D2D_RECT_F,
+ ) -> HRESULT,
+ fn SetContent(
+ content: *const IUnknown,
+ ) -> HRESULT,
+ fn AddVisual(
+ visual: *const IDCompositionVisual,
+ insertAbove: BOOL,
+ referenceVisual: *const IDCompositionVisual,
+ ) -> HRESULT,
+ fn RemoveVisual(
+ visual: *const IDCompositionVisual,
+ ) -> HRESULT,
+ fn RemoveAllVisuals() -> HRESULT,
+ fn SetCompositeMode(
+ compositeMode: DCOMPOSITION_COMPOSITE_MODE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xec81b08f, 0xbfcb, 0x4e8d, 0xb1, 0x93, 0xa9, 0x15, 0x58, 0x79, 0x99, 0xe8)]
+interface IDCompositionEffect(IDCompositionEffectVtbl): IUnknown(IUnknownVtbl) {}}
+RIDL!{#[uuid(0x71185722, 0x246b, 0x41f2, 0xaa, 0xd1, 0x04, 0x43, 0xf7, 0xf4, 0xbf, 0xc2)]
+interface IDCompositionTransform3D(IDCompositionTransform3DVtbl):
+ IDCompositionEffect(IDCompositionEffectVtbl) {}}
+RIDL!{#[uuid(0xfd55faa7, 0x37e0, 0x4c20, 0x95, 0xd2, 0x9b, 0xe4, 0x5b, 0xc3, 0x3f, 0x55)]
+interface IDCompositionTransform(IDCompositionTransformVtbl):
+ IDCompositionTransform3D(IDCompositionTransform3DVtbl) {}}
+RIDL!{#[uuid(0x06791122, 0xc6f0, 0x417d, 0x83, 0x23, 0x26, 0x9e, 0x98, 0x7f, 0x59, 0x54)]
+interface IDCompositionTranslateTransform(IDCompositionTranslateTransformVtbl):
+ IDCompositionTransform(IDCompositionTransformVtbl) {
+ fn SetOffsetX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetOffsetX_1(
+ offsetX: c_float,
+ ) -> HRESULT,
+ fn SetOffsetY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetOffsetY_1(
+ offsetY: c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x71fde914, 0x40ef, 0x45ef, 0xbd, 0x51, 0x68, 0xb0, 0x37, 0xc3, 0x39, 0xf9)]
+interface IDCompositionScaleTransform(IDCompositionScaleTransformVtbl):
+ IDCompositionTransform(IDCompositionTransformVtbl) {
+ fn SetScaleX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetScaleX_1(
+ scaleX: c_float,
+ ) -> HRESULT,
+ fn SetScaleY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetScaleY_1(
+ scaleY: c_float,
+ ) -> HRESULT,
+ fn SetCenterX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetCenterX_1(
+ centerX: c_float,
+ ) -> HRESULT,
+ fn SetCenterY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetCenterY_1(
+ centerY: c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x641ed83c, 0xae96, 0x46c5, 0x90, 0xdc, 0x32, 0x77, 0x4c, 0xc5, 0xc6, 0xd5)]
+interface IDCompositionRotateTransform(IDCompositionRotateTransformVtbl):
+ IDCompositionTransform(IDCompositionTransformVtbl) {
+ fn SetAngle_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetAngle_1(
+ angle: c_float,
+ ) -> HRESULT,
+ fn SetCenterX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetCenterX_1(
+ centerX: c_float,
+ ) -> HRESULT,
+ fn SetCenterY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetCenterY_1(
+ centerY: c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xe57aa735, 0xdcdb, 0x4c72, 0x9c, 0x61, 0x05, 0x91, 0xf5, 0x88, 0x89, 0xee)]
+interface IDCompositionSkewTransform(IDCompositionSkewTransformVtbl):
+ IDCompositionTransform(IDCompositionTransformVtbl) {
+ fn SetAngleX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetAngleX_1(
+ angleX: c_float,
+ ) -> HRESULT,
+ fn SetAngleY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetAngleY_1(
+ angleY: c_float,
+ ) -> HRESULT,
+ fn SetCenterX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetCenterX_1(
+ centerX: c_float,
+ ) -> HRESULT,
+ fn SetCenterY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetCenterY_1(
+ centerY: c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x16cdff07, 0xc503, 0x419c, 0x83, 0xf2, 0x09, 0x65, 0xc7, 0xaf, 0x1f, 0xa6)]
+interface IDCompositionMatrixTransform(IDCompositionMatrixTransformVtbl):
+ IDCompositionTransform(IDCompositionTransformVtbl) {
+ fn SetMatrix(
+ matrix: *const D2D_MATRIX_3X2_F,
+ ) -> HRESULT,
+ fn SetMatrixElement_2(
+ row: c_int,
+ column: c_int,
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetMatrixElement_1(
+ row: c_int,
+ column: c_int,
+ value: c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa7929a74, 0xe6b2, 0x4bd6, 0x8b, 0x95, 0x40, 0x40, 0x11, 0x9c, 0xa3, 0x4d)]
+interface IDCompositionEffectGroup(IDCompositionEffectGroupVtbl):
+ IDCompositionEffect(IDCompositionEffectVtbl) {
+ fn SetOpacity_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetOpacity_1(
+ opacity: c_float,
+ ) -> HRESULT,
+ fn SetTransform3D(
+ transform3D: *const IDCompositionTransform3D,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x91636d4b, 0x9ba1, 0x4532, 0xaa, 0xf7, 0xe3, 0x34, 0x49, 0x94, 0xd7, 0x88)]
+interface IDCompositionTranslateTransform3D(IDCompositionTranslateTransform3DVtbl):
+ IDCompositionTransform3D(IDCompositionTransform3DVtbl) {
+ fn SetOffsetX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetOffsetX_1(
+ offsetX: c_float,
+ ) -> HRESULT,
+ fn SetOffsetY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetOffsetY_1(
+ offsetY: c_float,
+ ) -> HRESULT,
+ fn SetOffsetZ_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetOffsetZ_1(
+ offsetZ: c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x2a9e9ead, 0x364b, 0x4b15, 0xa7, 0xc4, 0xa1, 0x99, 0x7f, 0x78, 0xb3, 0x89)]
+interface IDCompositionScaleTransform3D(IDCompositionScaleTransform3DVtbl):
+ IDCompositionTransform3D(IDCompositionTransform3DVtbl) {
+ fn SetScaleX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetScaleX_1(
+ scaleX: c_float,
+ ) -> HRESULT,
+ fn SetScaleY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetScaleY_1(
+ scaleY: c_float,
+ ) -> HRESULT,
+ fn SetScaleZ_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetScaleZ_1(
+ scaleZ: c_float,
+ ) -> HRESULT,
+ fn SetCenterX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetCenterX_1(
+ centerX: c_float,
+ ) -> HRESULT,
+ fn SetCenterY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetCenterY_1(
+ centerY: c_float,
+ ) -> HRESULT,
+ fn SetCenterZ_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetCenterZ_1(
+ centerZ: c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xd8f5b23f, 0xd429, 0x4a91, 0xb5, 0x5a, 0xd2, 0xf4, 0x5f, 0xd7, 0x5b, 0x18)]
+interface IDCompositionRotateTransform3D(IDCompositionRotateTransform3DVtbl):
+ IDCompositionTransform3D(IDCompositionTransform3DVtbl) {
+ fn SetAngle_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetAngle_1(
+ angle: c_float,
+ ) -> HRESULT,
+ fn SetAxisX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetAxisX_1(
+ axisX: c_float,
+ ) -> HRESULT,
+ fn SetAxisY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetAxisY_1(
+ axisY: c_float,
+ ) -> HRESULT,
+ fn SetAxisZ_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetAxisZ_1(
+ axisZ: c_float,
+ ) -> HRESULT,
+ fn SetCenterX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetCenterX_1(
+ centerX: c_float,
+ ) -> HRESULT,
+ fn SetCenterY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetCenterY_1(
+ centerY: c_float,
+ ) -> HRESULT,
+ fn SetCenterZ_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetCenterZ_1(
+ centerZ: c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x4b3363f0, 0x643b, 0x41b7, 0xb6, 0xe0, 0xcc, 0xf2, 0x2d, 0x34, 0x46, 0x7c)]
+interface IDCompositionMatrixTransform3D(IDCompositionMatrixTransform3DVtbl):
+ IDCompositionTransform3D(IDCompositionTransform3DVtbl) {
+ fn SetMatrix(
+ matrix: *const D3DMATRIX,
+ ) -> HRESULT,
+ fn SetMatrixElement_2(
+ row: c_int,
+ column: c_int,
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetMatrixElement_1(
+ row: c_int,
+ column: c_int,
+ value: c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x64ac3703, 0x9d3f, 0x45ec, 0xa1, 0x09, 0x7c, 0xac, 0x0e, 0x7a, 0x13, 0xa7)]
+interface IDCompositionClip(IDCompositionClipVtbl): IUnknown(IUnknownVtbl) {}}
+RIDL!{#[uuid(0x9842ad7d, 0xd9cf, 0x4908, 0xae, 0xd7, 0x48, 0xb5, 0x1d, 0xa5, 0xe7, 0xc2)]
+interface IDCompositionRectangleClip(IDCompositionRectangleClipVtbl):
+ IDCompositionClip(IDCompositionClipVtbl) {
+ fn SetLeft_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetLeft_1(
+ left: c_float,
+ ) -> HRESULT,
+ fn SetTop_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetTop_1(
+ top: c_float,
+ ) -> HRESULT,
+ fn SetRight_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetRight_1(
+ right: c_float,
+ ) -> HRESULT,
+ fn SetBottom_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetBottom_1(
+ bottom: c_float,
+ ) -> HRESULT,
+ fn SetTopLeftRadiusX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetTopLeftRadiusX_1(
+ radius: c_float,
+ ) -> HRESULT,
+ fn SetTopLeftRadiusY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetTopLeftRadiusY_1(
+ radius: c_float,
+ ) -> HRESULT,
+ fn SetTopRightRadiusX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetTopRightRadiusX_1(
+ radius: c_float,
+ ) -> HRESULT,
+ fn SetTopRightRadiusY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetTopRightRadiusY_1(
+ radius: c_float,
+ ) -> HRESULT,
+ fn SetBottomLeftRadiusX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetBottomLeftRadiusX_1(
+ radius: c_float,
+ ) -> HRESULT,
+ fn SetBottomLeftRadiusY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetBottomLeftRadiusY_1(
+ radius: c_float,
+ ) -> HRESULT,
+ fn SetBottomRightRadiusX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetBottomRightRadiusX_1(
+ radius: c_float,
+ ) -> HRESULT,
+ fn SetBottomRightRadiusY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetBottomRightRadiusY_1(
+ radius: c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xbb8a4953, 0x2c99, 0x4f5a, 0x96, 0xf5, 0x48, 0x19, 0x02, 0x7f, 0xa3, 0xac)]
+interface IDCompositionSurface(IDCompositionSurfaceVtbl): IUnknown(IUnknownVtbl) {
+ fn BeginDraw(
+ updateRect: *const RECT,
+ iid: REFIID,
+ updateObject: *mut *mut c_void,
+ updateOffset: *mut POINT,
+ ) -> HRESULT,
+ fn EndDraw() -> HRESULT,
+ fn SuspendDraw() -> HRESULT,
+ fn ResumeDraw() -> HRESULT,
+ fn Scroll(
+ scrollRect: *const RECT,
+ clipRect: *const RECT,
+ offsetX: c_int,
+ offsetY: c_int,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xae471c51, 0x5f53, 0x4a24, 0x8d, 0x3e, 0xd0, 0xc3, 0x9c, 0x30, 0xb3, 0xf0)]
+interface IDCompositionVirtualSurface(IDCompositionVirtualSurfaceVtbl):
+ IDCompositionSurface(IDCompositionSurfaceVtbl) {
+ fn Resize(
+ width: UINT,
+ height: UINT,
+ ) -> HRESULT,
+ fn Trim(
+ rectangles: *const RECT,
+ count: UINT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x75f6468d, 0x1b8e, 0x447c, 0x9b, 0xc6, 0x75, 0xfe, 0xa8, 0x0b, 0x5b, 0x25)]
+interface IDCompositionDevice2(IDCompositionDevice2Vtbl): IUnknown(IUnknownVtbl) {
+ fn Commit() -> HRESULT,
+ fn WaitForCommitCompletion() -> HRESULT,
+ fn GetFrameStatistics(
+ statistics: *mut DCOMPOSITION_FRAME_STATISTICS,
+ ) -> HRESULT,
+ fn CreateVisual(
+ visual: *mut *mut IDCompositionVisual2,
+ ) -> HRESULT,
+ fn CreateSurfaceFactory(
+ renderingDevice: *const IUnknown,
+ surfaceFactory: *mut *mut IDCompositionSurfaceFactory,
+ ) -> HRESULT,
+ fn CreateSurface(
+ width: UINT,
+ height: UINT,
+ pixelFormat: DXGI_FORMAT,
+ alphaMode: DXGI_ALPHA_MODE,
+ surface: *mut *mut IDCompositionSurface,
+ ) -> HRESULT,
+ fn CreateVirtualSurface(
+ initialWidth: UINT,
+ initialHeight: UINT,
+ pixelFormat: DXGI_FORMAT,
+ alphaMode: DXGI_ALPHA_MODE,
+ virtualSurface: *mut *mut IDCompositionVirtualSurface,
+ ) -> HRESULT,
+ fn CreateTranslateTransform(
+ translateTransform: *mut *mut IDCompositionTranslateTransform,
+ ) -> HRESULT,
+ fn CreateScaleTransform(
+ scaleTransform: *mut *mut IDCompositionScaleTransform,
+ ) -> HRESULT,
+ fn CreateRotateTransform(
+ rotateTransform: *mut *mut IDCompositionRotateTransform,
+ ) -> HRESULT,
+ fn CreateSkewTransform(
+ skewTransform: *mut *mut IDCompositionSkewTransform,
+ ) -> HRESULT,
+ fn CreateMatrixTransform(
+ matrixTransform: *mut *mut IDCompositionMatrixTransform,
+ ) -> HRESULT,
+ fn CreateTransformGroup(
+ transforms: *const *const IDCompositionTransform,
+ elements: UINT,
+ transformGroup: *mut *mut IDCompositionTransform,
+ ) -> HRESULT,
+ fn CreateTranslateTransform3D(
+ translateTransform3D: *mut *mut IDCompositionTranslateTransform3D,
+ ) -> HRESULT,
+ fn CreateScaleTransform3D(
+ scaleTransform3D: *mut *mut IDCompositionScaleTransform3D,
+ ) -> HRESULT,
+ fn CreateRotateTransform3D(
+ rotateTransform3D: *mut *mut IDCompositionRotateTransform3D,
+ ) -> HRESULT,
+ fn CreateMatrixTransform3D(
+ matrixTransform3D: *mut *mut IDCompositionMatrixTransform3D,
+ ) -> HRESULT,
+ fn CreateTransform3DGroup(
+ transforms3D: *const *const IDCompositionTransform3D,
+ elements: UINT,
+ transform3DGroup: *mut *mut IDCompositionTransform3D,
+ ) -> HRESULT,
+ fn CreateEffectGroup(
+ effectGroup: *mut *mut IDCompositionEffectGroup,
+ ) -> HRESULT,
+ fn CreateRectangleClip(
+ clip: *mut *mut IDCompositionRectangleClip,
+ ) -> HRESULT,
+ fn CreateAnimation(
+ animation: *mut *mut IDCompositionAnimation,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x5f4633fe, 0x1e08, 0x4cb8, 0x8c, 0x75, 0xce, 0x24, 0x33, 0x3f, 0x56, 0x02)]
+interface IDCompositionDesktopDevice(IDCompositionDesktopDeviceVtbl):
+ IDCompositionDevice2(IDCompositionDevice2Vtbl) {
+ fn CreateTargetForHwnd(
+ hwnd: HWND,
+ topmost: BOOL,
+ target: *mut *mut IDCompositionTarget,
+ ) -> HRESULT,
+ fn CreateSurfaceFromHandle(
+ handle: HANDLE,
+ surface: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn CreateSurfaceFromHwnd(
+ hwnd: HWND,
+ surface: *mut *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa1a3c64a, 0x224f, 0x4a81, 0x97, 0x73, 0x4f, 0x03, 0xa8, 0x9d, 0x3c, 0x6c)]
+interface IDCompositionDeviceDebug(IDCompositionDeviceDebugVtbl): IUnknown(IUnknownVtbl) {
+ fn EnableDebugCounters() -> HRESULT,
+ fn DisableDebugCounters() -> HRESULT,
+}}
+RIDL!{#[uuid(0xe334bc12, 0x3937, 0x4e02, 0x85, 0xeb, 0xfc, 0xf4, 0xeb, 0x30, 0xd2, 0xc8)]
+interface IDCompositionSurfaceFactory(IDCompositionSurfaceFactoryVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateSurface(
+ width: UINT,
+ height: UINT,
+ pixelFormat: DXGI_FORMAT,
+ alphaMode: DXGI_ALPHA_MODE,
+ surface: *mut *mut IDCompositionSurface,
+ ) -> HRESULT,
+ fn CreateVirtualSurface(
+ initialWidth: UINT,
+ initialHeight: UINT,
+ pixelFormat: DXGI_FORMAT,
+ alphaMode: DXGI_ALPHA_MODE,
+ virtualSurface: *mut *mut IDCompositionVirtualSurface,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xe8de1639, 0x4331, 0x4b26, 0xbc, 0x5f, 0x6a, 0x32, 0x1d, 0x34, 0x7a, 0x85)]
+interface IDCompositionVisual2(IDCompositionVisual2Vtbl):
+ IDCompositionVisual(IDCompositionVisualVtbl) {
+ fn SetOpacityMode(
+ mode: DCOMPOSITION_OPACITY_MODE,
+ ) -> HRESULT,
+ fn SetBackFaceVisibility(
+ visibility: DCOMPOSITION_BACKFACE_VISIBILITY,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xfed2b808, 0x5eb4, 0x43a0, 0xae, 0xa3, 0x35, 0xf6, 0x52, 0x80, 0xf9, 0x1b)]
+interface IDCompositionVisualDebug(IDCompositionVisualDebugVtbl):
+ IDCompositionVisual2(IDCompositionVisual2Vtbl) {
+ fn EnableHeatMap(
+ color: *const D2D1_COLOR_F,
+ ) -> HRESULT,
+ fn DisableHeatMap() -> HRESULT,
+ fn EnableRedrawRegions() -> HRESULT,
+ fn DisableRedrawRegions() -> HRESULT,
+}}
+RIDL!{#[uuid(0x2775f462, 0xb6c1, 0x4015, 0xb0, 0xbe, 0xb3, 0xe7, 0xd6, 0xa4, 0x97, 0x6d)]
+interface IDCompositionVisual3(IDCompositionVisual3Vtbl):
+ IDCompositionVisualDebug(IDCompositionVisualDebugVtbl) {
+ fn SetDepthMode(
+ mode: DCOMPOSITION_DEPTH_MODE,
+ ) -> HRESULT,
+ fn SetOffsetZ_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetOffsetZ_1(
+ offsetZ: c_float,
+ ) -> HRESULT,
+ fn SetOpacity_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetOpacity_1(
+ opacity: c_float,
+ ) -> HRESULT,
+ fn SetTransform_2(
+ transform: *const IDCompositionTransform3D,
+ ) -> HRESULT,
+ fn SetTransform_1(
+ matrix: *const D2D_MATRIX_4X4_F,
+ ) -> HRESULT,
+ fn SetVisible(
+ visible: BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x0987cb06, 0xf916, 0x48bf, 0x8d, 0x35, 0xce, 0x76, 0x41, 0x78, 0x1b, 0xd9)]
+interface IDCompositionDevice3(IDCompositionDevice3Vtbl):
+ IDCompositionDevice2(IDCompositionDevice2Vtbl) {
+ fn CreateGaussianBlurEffect(
+ gaussianBlurEffect: *mut *mut IDCompositionGaussianBlurEffect,
+ ) -> HRESULT,
+ fn CreateBrightnessEffect(
+ brightnessEffect: *mut *mut IDCompositionBrightnessEffect,
+ ) -> HRESULT,
+ fn CreateColorMatrixEffect(
+ colorMatrixEffect: *mut *mut IDCompositionColorMatrixEffect,
+ ) -> HRESULT,
+ fn CreateShadowEffect(
+ shadowEffect: *mut *mut IDCompositionShadowEffect,
+ ) -> HRESULT,
+ fn CreateHueRotationEffect(
+ hueRotationEffect: *mut *mut IDCompositionHueRotationEffect,
+ ) -> HRESULT,
+ fn CreateSaturationEffect(
+ saturationEffect: *mut *mut IDCompositionSaturationEffect,
+ ) -> HRESULT,
+ fn CreateTurbulenceEffect(
+ turbulenceEffect: *mut *mut IDCompositionTurbulenceEffect,
+ ) -> HRESULT,
+ fn CreateLinearTransferEffect(
+ linearTransferEffect: *mut *mut IDCompositionLinearTransferEffect,
+ ) -> HRESULT,
+ fn CreateTableTransferEffect(
+ tableTransferEffect: *mut *mut IDCompositionTableTransferEffect,
+ ) -> HRESULT,
+ fn CreateCompositeEffect(
+ compositeEffect: *mut *mut IDCompositionCompositeEffect,
+ ) -> HRESULT,
+ fn CreateBlendEffect(
+ blendEffect: *mut *mut IDCompositionBlendEffect,
+ ) -> HRESULT,
+ fn CreateArithmeticCompositeEffect(
+ arithmeticCompositeEffect: *mut *mut IDCompositionArithmeticCompositeEffect,
+ ) -> HRESULT,
+ fn CreateAffineTransform2DEffect(
+ affineTransform2dEffect: *mut *mut IDCompositionAffineTransform2DEffect,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x30c421d5, 0x8cb2, 0x4e9f, 0xb1, 0x33, 0x37, 0xbe, 0x27, 0x0d, 0x4a, 0xc2)]
+interface IDCompositionFilterEffect(IDCompositionFilterEffectVtbl):
+ IDCompositionEffect(IDCompositionEffectVtbl) {
+ fn SetInput(
+ index: UINT,
+ input: *const IUnknown,
+ flags: UINT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x45d4d0b7, 0x1bd4, 0x454e, 0x88, 0x94, 0x2b, 0xfa, 0x68, 0x44, 0x30, 0x33)]
+interface IDCompositionGaussianBlurEffect(IDCompositionGaussianBlurEffectVtbl):
+ IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
+ fn SetStandardDeviation_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetStandardDeviation_1(
+ amount: c_float,
+ ) -> HRESULT,
+ fn SetBorderMode(
+ mode: D2D1_BORDER_MODE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x6027496e, 0xcb3a, 0x49ab, 0x93, 0x4f, 0xd7, 0x98, 0xda, 0x4f, 0x7d, 0xa6)]
+interface IDCompositionBrightnessEffect(IDCompositionBrightnessEffectVtbl):
+ IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
+ fn SetWhitePoint(
+ whitePoint: *const D2D1_VECTOR_2F,
+ ) -> HRESULT,
+ fn SetBlackPoint(
+ blackPoint: *const D2D1_VECTOR_2F,
+ ) -> HRESULT,
+ fn SetWhitePointX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetWhitePointX_1(
+ whitePointX: c_float,
+ ) -> HRESULT,
+ fn SetWhitePointY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetWhitePointY_1(
+ whitePointY: c_float,
+ ) -> HRESULT,
+ fn SetBlackPointX_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetBlackPointX_1(
+ blackPointX: c_float,
+ ) -> HRESULT,
+ fn SetBlackPointY_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetBlackPointY_1(
+ blackPointY: c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xc1170a22, 0x3ce2, 0x4966, 0x90, 0xd4, 0x55, 0x40, 0x8b, 0xfc, 0x84, 0xc4)]
+interface IDCompositionColorMatrixEffect(IDCompositionColorMatrixEffectVtbl):
+ IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
+ fn SetMatrix(
+ matrix: *const D2D1_MATRIX_5X4_F,
+ ) -> HRESULT,
+ fn SetMatrixElement_2(
+ row: c_int,
+ column: c_int,
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetMatrixElement_1(
+ row: c_int,
+ column: c_int,
+ value: c_float,
+ ) -> HRESULT,
+ fn SetAlphaMode(
+ mode: D2D1_COLORMATRIX_ALPHA_MODE,
+ ) -> HRESULT,
+ fn SetClampOutput(
+ clamp: BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x4ad18ac0, 0xcfd2, 0x4c2f, 0xbb, 0x62, 0x96, 0xe5, 0x4f, 0xdb, 0x68, 0x79)]
+interface IDCompositionShadowEffect(IDCompositionShadowEffectVtbl):
+ IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
+ fn SetStandardDeviation_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetStandardDeviation_1(
+ amount: c_float,
+ ) -> HRESULT,
+ fn SetColor(
+ color: *const D2D1_VECTOR_4F,
+ ) -> HRESULT,
+ fn SetRed_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetRed_1(
+ amount: c_float,
+ ) -> HRESULT,
+ fn SetGreen_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetGreen_1(
+ amount: c_float,
+ ) -> HRESULT,
+ fn SetBlue_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetBlue_1(
+ amount: c_float,
+ ) -> HRESULT,
+ fn SetAlpha_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetAlpha_1(
+ amount: c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x6db9f920, 0x0770, 0x4781, 0xb0, 0xc6, 0x38, 0x19, 0x12, 0xf9, 0xd1, 0x67)]
+interface IDCompositionHueRotationEffect(IDCompositionHueRotationEffectVtbl):
+ IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
+ // Changes the angle of rotation
+ fn SetAngle_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetAngle_1(
+ amountDegrees: c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa08debda, 0x3258, 0x4fa4, 0x9f, 0x16, 0x91, 0x74, 0xd3, 0xfe, 0x93, 0xb1)]
+interface IDCompositionSaturationEffect(IDCompositionSaturationEffectVtbl):
+ IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
+ // Changes the amount of saturation to be applied.
+ fn SetSaturation_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetSaturation_1(
+ ratio: c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa6a55bda, 0xc09c, 0x49f3, 0x91, 0x93, 0xa4, 0x19, 0x22, 0xc8, 0x97, 0x15)]
+interface IDCompositionTurbulenceEffect(IDCompositionTurbulenceEffectVtbl):
+ IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
+ fn SetOffset(
+ offset: *const D2D1_VECTOR_2F,
+ ) -> HRESULT,
+ fn SetBaseFrequency(
+ frequency: *const D2D1_VECTOR_2F,
+ ) -> HRESULT,
+ fn SetSize(
+ size: *const D2D1_VECTOR_2F,
+ ) -> HRESULT,
+ fn SetNumOctaves(
+ numOctaves: UINT,
+ ) -> HRESULT,
+ fn SetSeed(
+ seed: UINT,
+ ) -> HRESULT,
+ fn SetNoise(
+ noise: D2D1_TURBULENCE_NOISE,
+ ) -> HRESULT,
+ fn SetStitchable(
+ stitchable: BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x4305ee5b, 0xc4a0, 0x4c88, 0x93, 0x85, 0x67, 0x12, 0x4e, 0x01, 0x76, 0x83)]
+interface IDCompositionLinearTransferEffect(IDCompositionLinearTransferEffectVtbl):
+ IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
+ fn SetRedYIntercept_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetRedYIntercept_1(
+ redYIntercept: c_float,
+ ) -> HRESULT,
+ fn SetRedSlope_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetRedSlope_1(
+ redSlope: c_float,
+ ) -> HRESULT,
+ fn SetRedDisable(
+ redDisable: BOOL,
+ ) -> HRESULT,
+ fn SetGreenYIntercept_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetGreenYIntercept_1(
+ greenYIntercept: c_float,
+ ) -> HRESULT,
+ fn SetGreenSlope_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetGreenSlope_1(
+ greenSlope: c_float,
+ ) -> HRESULT,
+ fn SetGreenDisable(
+ greenDisable: BOOL,
+ ) -> HRESULT,
+ fn SetBlueYIntercept_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetBlueYIntercept_1(
+ blueYIntercept: c_float,
+ ) -> HRESULT,
+ fn SetBlueSlope_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetBlueSlope_1(
+ blueSlope: c_float,
+ ) -> HRESULT,
+ fn SetBlueDisable(
+ blueDisable: BOOL,
+ ) -> HRESULT,
+ fn SetAlphaYIntercept_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetAlphaYIntercept_1(
+ alphaYIntercept: c_float,
+ ) -> HRESULT,
+ fn SetAlphaSlope_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetAlphaSlope_1(
+ alphaSlope: c_float,
+ ) -> HRESULT,
+ fn SetAlphaDisable(
+ alphaDisable: BOOL,
+ ) -> HRESULT,
+ fn SetClampOutput(
+ clampOutput: BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x9b7e82e2, 0x69c5, 0x4eb4, 0xa5, 0xf5, 0xa7, 0x03, 0x3f, 0x51, 0x32, 0xcd)]
+interface IDCompositionTableTransferEffect(IDCompositionTableTransferEffectVtbl):
+ IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
+ fn SetRedTable(
+ tableValues: *const c_float,
+ count: UINT,
+ ) -> HRESULT,
+ fn SetGreenTable(
+ tableValues: *const c_float,
+ count: UINT,
+ ) -> HRESULT,
+ fn SetBlueTable(
+ tableValues: *const c_float,
+ count: UINT,
+ ) -> HRESULT,
+ fn SetAlphaTable(
+ tableValues: *const c_float,
+ count: UINT,
+ ) -> HRESULT,
+ fn SetRedDisable(
+ redDisable: BOOL,
+ ) -> HRESULT,
+ fn SetGreenDisable(
+ greenDisable: BOOL,
+ ) -> HRESULT,
+ fn SetBlueDisable(
+ blueDisable: BOOL,
+ ) -> HRESULT,
+ fn SetAlphaDisable(
+ alphaDisable: BOOL,
+ ) -> HRESULT,
+ fn SetClampOutput(
+ clampOutput: BOOL,
+ ) -> HRESULT,
+ fn SetRedTableValue_2(
+ index: UINT,
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetRedTableValue_1(
+ index: UINT,
+ value: c_float,
+ ) -> HRESULT,
+ fn SetGreenTableValue_2(
+ index: UINT,
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetGreenTableValue_1(
+ index: UINT,
+ value: c_float,
+ ) -> HRESULT,
+ fn SetBlueTableValue_2(
+ index: UINT,
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetBlueTableValue_1(
+ index: UINT,
+ value: c_float,
+ ) -> HRESULT,
+ fn SetAlphaTableValue_2(
+ index: UINT,
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetAlphaTableValue_1(
+ index: UINT,
+ value: c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x576616c0, 0xa231, 0x494d, 0xa3, 0x8d, 0x00, 0xfd, 0x5e, 0xc4, 0xdb, 0x46)]
+interface IDCompositionCompositeEffect(IDCompositionCompositeEffectVtbl):
+ IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
+ fn SetMode(
+ mode: D2D1_COMPOSITE_MODE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x33ecdc0a, 0x578a, 0x4a11, 0x9c, 0x14, 0x0c, 0xb9, 0x05, 0x17, 0xf9, 0xc5)]
+interface IDCompositionBlendEffect(IDCompositionBlendEffectVtbl):
+ IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
+ fn SetMode(
+ mode: D2D1_BLEND_MODE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3b67dfa8, 0xe3dd, 0x4e61, 0xb6, 0x40, 0x46, 0xc2, 0xf3, 0xd7, 0x39, 0xdc)]
+interface IDCompositionArithmeticCompositeEffect(IDCompositionArithmeticCompositeEffectVtbl):
+ IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
+ fn SetCoefficients(
+ coefficients: *const D2D1_VECTOR_4F,
+ ) -> HRESULT,
+ fn SetClampOutput(
+ clampoutput: BOOL,
+ ) -> HRESULT,
+ fn SetCoefficient1_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetCoefficient1_1(
+ Coeffcient1: c_float,
+ ) -> HRESULT,
+ fn SetCoefficient2_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetCoefficient2_1(
+ Coefficient2: c_float,
+ ) -> HRESULT,
+ fn SetCoefficient3_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetCoefficient3_1(
+ Coefficient3: c_float,
+ ) -> HRESULT,
+ fn SetCoefficient4_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetCoefficient4_1(
+ Coefficient4: c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x0b74b9e8, 0xcdd6, 0x492f, 0xbb, 0xbc, 0x5e, 0xd3, 0x21, 0x57, 0x02, 0x6d)]
+interface IDCompositionAffineTransform2DEffect(IDCompositionAffineTransform2DEffectVtbl):
+ IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
+ fn SetInterpolationMode(
+ interpolationMode: D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE,
+ ) -> HRESULT,
+ fn SetBorderMode(
+ borderMode: D2D1_BORDER_MODE,
+ ) -> HRESULT,
+ fn SetTransformMatrix(
+ transformMatrix: *const D2D1_MATRIX_3X2_F,
+ ) -> HRESULT,
+ fn SetTransformMatrixElement_2(
+ row: c_int,
+ column: c_int,
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetTransformMatrixElement_1(
+ row: c_int,
+ column: c_int,
+ value: c_float,
+ ) -> HRESULT,
+ fn SetSharpness_2(
+ animation: *const IDCompositionAnimation,
+ ) -> HRESULT,
+ fn SetSharpness_1(
+ sharpness: c_float,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/dcompanimation.rs b/vendor/winapi/src/um/dcompanimation.rs
new file mode 100644
index 000000000..ca54c405e
--- /dev/null
+++ b/vendor/winapi/src/um/dcompanimation.rs
@@ -0,0 +1,38 @@
+// 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 dcompanimation.h
+use ctypes::{c_double, c_float};
+use shared::ntdef::{HRESULT, LARGE_INTEGER};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+RIDL!{#[uuid(0xcbfd91d9, 0x51b2, 0x45e4, 0xb3, 0xde, 0xd1, 0x9c, 0xcf, 0xb8, 0x63, 0xc5)]
+interface IDCompositionAnimation(IDCompositionAnimationVtbl): IUnknown(IUnknownVtbl) {
+ fn Reset() -> HRESULT,
+ fn SetAbsoluteBeginTime(
+ beginTime: LARGE_INTEGER,
+ ) -> HRESULT,
+ fn AddCubic(
+ beginOffset: c_double,
+ constantCoefficient: c_float,
+ linearCoefficient: c_float,
+ quadraticCoefficient: c_float,
+ cubicCoefficient: c_float,
+ )-> HRESULT,
+ fn AddSinusoidal(
+ beginOffset: c_double,
+ bias: c_float,
+ amplitude: c_float,
+ frequency: c_float,
+ phase: c_float,
+ )-> HRESULT,
+ fn AddRepeat(
+ beginOffset: c_double,
+ durationToRepeat: c_double,
+ )-> HRESULT,
+ fn End(
+ endOffset: c_double,
+ endValue: c_float,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/dde.rs b/vendor/winapi/src/um/dde.rs
new file mode 100644
index 000000000..b3ce4a9da
--- /dev/null
+++ b/vendor/winapi/src/um/dde.rs
@@ -0,0 +1,20 @@
+// 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::{PUINT_PTR, UINT_PTR};
+use shared::minwindef::{BOOL, LPARAM, UINT};
+extern "system" {
+ pub fn PackDDElParam(
+ msg: UINT,
+ uiLo: UINT_PTR,
+ uiHi: UINT_PTR,
+ ) -> LPARAM;
+ pub fn UnpackDDElParam(
+ msg: UINT,
+ lParam: LPARAM,
+ puiLo: PUINT_PTR,
+ puiHi: PUINT_PTR,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/ddraw.rs b/vendor/winapi/src/um/ddraw.rs
new file mode 100644
index 000000000..fd0d9e89b
--- /dev/null
+++ b/vendor/winapi/src/um/ddraw.rs
@@ -0,0 +1,37 @@
+// 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.
+DEFINE_GUID!{CLSID_DirectDraw,
+ 0xd7b70ee0, 0x4340, 0x11cf, 0xb0, 0x63, 0x00, 0x20, 0xaf, 0xc2, 0xcd, 0x35}
+DEFINE_GUID!{CLSID_DirectDraw7,
+ 0x3c305196, 0x50db, 0x11d3, 0x9c, 0xfe, 0x00, 0xc0, 0x4f, 0xd9, 0x30, 0xc5}
+DEFINE_GUID!{CLSID_DirectDrawClipper,
+ 0x593817a0, 0x7db3, 0x11cf, 0xa2, 0xde, 0x00, 0xaa, 0x00, 0xb9, 0x33, 0x56}
+DEFINE_GUID!{IID_IDirectDraw,
+ 0x6c14db80, 0xa733, 0x11ce, 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60}
+DEFINE_GUID!{IID_IDirectDraw2,
+ 0xb3a6f3e0, 0x2b43, 0x11cf, 0xa2, 0xde, 0x00, 0xaa, 0x00, 0xb9, 0x33, 0x56}
+DEFINE_GUID!{IID_IDirectDraw4,
+ 0x9c59509a, 0x39bd, 0x11d1, 0x8c, 0x4a, 0x00, 0xc0, 0x4f, 0xd9, 0x30, 0xc5}
+DEFINE_GUID!{IID_IDirectDraw7,
+ 0x15e65ec0, 0x3b9c, 0x11d2, 0xb9, 0x2f, 0x00, 0x60, 0x97, 0x97, 0xea, 0x5b}
+DEFINE_GUID!{IID_IDirectDrawSurface,
+ 0x6c14db81, 0xa733, 0x11ce, 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60}
+DEFINE_GUID!{IID_IDirectDrawSurface2,
+ 0x57805885, 0x6eec, 0x11cf, 0x94, 0x41, 0xa8, 0x23, 0x03, 0xc1, 0x0e, 0x27}
+DEFINE_GUID!{IID_IDirectDrawSurface3,
+ 0xda044e00, 0x69b2, 0x11d0, 0xa1, 0xd5, 0x00, 0xaa, 0x00, 0xb8, 0xdf, 0xbb}
+DEFINE_GUID!{IID_IDirectDrawSurface4,
+ 0x0b2b8630, 0xad35, 0x11d0, 0x8e, 0xa6, 0x00, 0x60, 0x97, 0x97, 0xea, 0x5b}
+DEFINE_GUID!{IID_IDirectDrawSurface7,
+ 0x06675a80, 0x3b9b, 0x11d2, 0xb9, 0x2f, 0x00, 0x60, 0x97, 0x97, 0xea, 0x5b}
+DEFINE_GUID!{IID_IDirectDrawPalette,
+ 0x6c14db84, 0xa733, 0x11ce, 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60}
+DEFINE_GUID!{IID_IDirectDrawClipper,
+ 0x6c14db85, 0xa733, 0x11ce, 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60}
+DEFINE_GUID!{IID_IDirectDrawColorControl,
+ 0x4b9f0ee0, 0x0d7e, 0x11d0, 0x9b, 0x06, 0x00, 0xa0, 0xc9, 0x03, 0xa3, 0xb8}
+DEFINE_GUID!{IID_IDirectDrawGammaControl,
+ 0x69c11c3e, 0xb46b, 0x11d1, 0xad, 0x7a, 0x00, 0xc0, 0x4f, 0xc2, 0x9b, 0x4e}
diff --git a/vendor/winapi/src/um/ddrawi.rs b/vendor/winapi/src/um/ddrawi.rs
new file mode 100644
index 000000000..18e651863
--- /dev/null
+++ b/vendor/winapi/src/um/ddrawi.rs
@@ -0,0 +1,13 @@
+// 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.
+DEFINE_GUID!{GUID_OptSurfaceKmodeInfo,
+ 0xe05c8472, 0x51d4, 0x11d1, 0x8c, 0xce, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0xa8}
+DEFINE_GUID!{GUID_OptSurfaceUmodeInfo,
+ 0x9d792804, 0x5fa8, 0x11d1, 0x8c, 0xd0, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0xa8}
+DEFINE_GUID!{GUID_UserModeDriverInfo,
+ 0xf0b0e8e2, 0x5f97, 0x11d1, 0x8c, 0xd0, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0xa8}
+DEFINE_GUID!{GUID_UserModeDriverPassword,
+ 0x97f861b6, 0x60a1, 0x11d1, 0x8c, 0xd0, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0xa8}
diff --git a/vendor/winapi/src/um/ddrawint.rs b/vendor/winapi/src/um/ddrawint.rs
new file mode 100644
index 000000000..2f9b7431b
--- /dev/null
+++ b/vendor/winapi/src/um/ddrawint.rs
@@ -0,0 +1,41 @@
+// 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.
+DEFINE_GUID!{GUID_MiscellaneousCallbacks,
+ 0xefd60cc0, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a}
+DEFINE_GUID!{GUID_Miscellaneous2Callbacks,
+ 0x406b2f00, 0x3e5a, 0x11d1, 0xb6, 0x40, 0x00, 0xaa, 0x00, 0xa1, 0xf9, 0x6a}
+DEFINE_GUID!{GUID_VideoPortCallbacks,
+ 0xefd60cc1, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a}
+DEFINE_GUID!{GUID_ColorControlCallbacks,
+ 0xefd60cc2, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a}
+DEFINE_GUID!{GUID_MotionCompCallbacks,
+ 0xb1122b40, 0x5da5, 0x11d1, 0x8f, 0xcf, 0x00, 0xc0, 0x4f, 0xc2, 0x9b, 0x4e}
+DEFINE_GUID!{GUID_VideoPortCaps,
+ 0xefd60cc3, 0x49e7, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a}
+DEFINE_GUID!{GUID_D3DExtendedCaps,
+ 0x7de41f80, 0x9d93, 0x11d0, 0x89, 0xab, 0x00, 0xa0, 0xc9, 0x05, 0x41, 0x29}
+DEFINE_GUID!{GUID_D3DCallbacks2,
+ 0x0ba584e1, 0x70b6, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a}
+DEFINE_GUID!{GUID_D3DCallbacks3,
+ 0xddf41230, 0xec0a, 0x11d0, 0xa9, 0xb6, 0x00, 0xaa, 0x00, 0xc0, 0x99, 0x3e}
+DEFINE_GUID!{GUID_NonLocalVidMemCaps,
+ 0x86c4fa80, 0x8d84, 0x11d0, 0x94, 0xe8, 0x00, 0xc0, 0x4f, 0xc3, 0x41, 0x37}
+DEFINE_GUID!{GUID_KernelCallbacks,
+ 0x80863800, 0x6b06, 0x11d0, 0x9b, 0x06, 0x00, 0xa0, 0xc9, 0x03, 0xa3, 0xb8}
+DEFINE_GUID!{GUID_KernelCaps,
+ 0xffaa7540, 0x7aa8, 0x11d0, 0x9b, 0x06, 0x00, 0xa0, 0xc9, 0x03, 0xa3, 0xb8}
+DEFINE_GUID!{GUID_ZPixelFormats,
+ 0x93869880, 0x36cf, 0x11d1, 0x9b, 0x1b, 0x00, 0xaa, 0x00, 0xbb, 0xb8, 0xae}
+DEFINE_GUID!{GUID_DDMoreCaps,
+ 0x880baf30, 0xb030, 0x11d0, 0x8e, 0xa7, 0x00, 0x60, 0x97, 0x97, 0xea, 0x5b}
+DEFINE_GUID!{GUID_D3DParseUnknownCommandCallback,
+ 0x2e04ffa0, 0x98e4, 0x11d1, 0x8c, 0xe1, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0xa8}
+DEFINE_GUID!{GUID_NTCallbacks,
+ 0x6fe9ecde, 0xdf89, 0x11d1, 0x9d, 0xb0, 0x00, 0x60, 0x08, 0x27, 0x71, 0xba}
+DEFINE_GUID!{GUID_DDMoreSurfaceCaps,
+ 0x3b8a0466, 0xf269, 0x11d1, 0x88, 0x0b, 0x00, 0xc0, 0x4f, 0xd9, 0x30, 0xc5}
+DEFINE_GUID!{GUID_DDStereoMode,
+ 0xf828169c, 0xa8e8, 0x11d2, 0xa1, 0xf2, 0x00, 0xa0, 0xc9, 0x83, 0xea, 0xf6}
diff --git a/vendor/winapi/src/um/debugapi.rs b/vendor/winapi/src/um/debugapi.rs
new file mode 100644
index 000000000..442b50db4
--- /dev/null
+++ b/vendor/winapi/src/um/debugapi.rs
@@ -0,0 +1,41 @@
+// 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::minwindef::{BOOL, DWORD, PBOOL};
+use um::minwinbase::LPDEBUG_EVENT;
+use um::winnt::{HANDLE, LPCSTR, LPCWSTR};
+extern "system" {
+ pub fn IsDebuggerPresent() -> BOOL;
+ pub fn DebugBreak();
+ pub fn OutputDebugStringA(
+ lpOutputString: LPCSTR,
+ );
+ pub fn OutputDebugStringW(
+ lpOutputString: LPCWSTR,
+ );
+ pub fn ContinueDebugEvent(
+ dwProcessId: DWORD,
+ dwThreadId: DWORD,
+ dwContinueStatus: DWORD,
+ ) -> BOOL;
+ pub fn WaitForDebugEvent(
+ lpDebugEvent: LPDEBUG_EVENT,
+ dwMilliseconds: DWORD,
+ ) -> BOOL;
+ pub fn DebugActiveProcess(
+ dwProcessId: DWORD,
+ ) -> BOOL;
+ pub fn DebugActiveProcessStop(
+ dwProcessId: DWORD,
+ ) -> BOOL;
+ pub fn CheckRemoteDebuggerPresent(
+ hProcess: HANDLE,
+ pbDebuggerPresent: PBOOL,
+ ) -> BOOL;
+ pub fn WaitForDebugEventEx(
+ lpDebugEvent: LPDEBUG_EVENT,
+ dwMilliseconds: DWORD,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/devicetopology.rs b/vendor/winapi/src/um/devicetopology.rs
new file mode 100644
index 000000000..6f74ffba1
--- /dev/null
+++ b/vendor/winapi/src/um/devicetopology.rs
@@ -0,0 +1,462 @@
+// 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.
+//! The DeviceTopology API gives clients control over a variety of internal functions of audio
+//! adapters that they cannot access through the MMDevice API, WASAPI, or the EndpointVolume API.
+use ctypes::{c_float, c_void};
+use shared::guiddef::{GUID, LPCGUID, REFGUID, REFIID};
+use shared::minwindef::{BOOL, DWORD, UCHAR, UINT, ULONG, WORD};
+use shared::windef::COLORREF;
+use shared::wtypes::VARTYPE;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LONG, LONGLONG, LPWSTR, WCHAR};
+DEFINE_GUID!{EVENTCONTEXT_VOLUMESLIDER,
+ 0xe2c2e9de, 0x09b1, 0x4b04, 0x84, 0xe5, 0x07, 0x93, 0x12, 0x25, 0xee, 0x04}
+STRUCT!{struct KSDATAFORMAT {
+ FormatSize: ULONG,
+ Flags: ULONG,
+ SampleSize: ULONG,
+ Reserved: ULONG,
+ MajorFormat: GUID,
+ SubFormat: GUID,
+ Specifier: GUID,
+}}
+pub type PKSDATAFORMAT = *mut KSDATAFORMAT;
+STRUCT!{struct KSIDENTIFIER_s {
+ Set: GUID,
+ Id: ULONG,
+ Flags: ULONG,
+}}
+UNION!{union KSIDENTIFIER {
+ [u64; 3],
+ s s_mut: KSIDENTIFIER_s,
+ Alignment Alignment_mut: LONGLONG,
+}}
+pub type KSPROPERTY = KSIDENTIFIER;
+pub type PKSPROPERTY = *mut KSIDENTIFIER;
+pub type KSMETHOD = KSIDENTIFIER;
+pub type PKSMETHOD = *mut KSIDENTIFIER;
+pub type KSEVENT = KSIDENTIFIER;
+pub type PKSEVENT = *mut KSIDENTIFIER;
+ENUM!{enum EPcxConnectionType {
+ eConnTypeUnknown = 0,
+ eConnType3Point5mm = 1,
+ eConnTypeQuarter = 2,
+ eConnTypeAtapiInternal = 3,
+ eConnTypeRCA = 4,
+ eConnTypeOptical = 5,
+ eConnTypeOtherDigital = 6,
+ eConnTypeOtherAnalog = 7,
+ eConnTypeMultichannelAnalogDIN = 8,
+ eConnTypeXlrProfessional = 9,
+ eConnTypeRJ11Modem = 10,
+ eConnTypeCombination = 11,
+}}
+ENUM!{enum EPcxGeoLocation {
+ eGeoLocRear = 1,
+ eGeoLocFront = 2,
+ eGeoLocLeft = 3,
+ eGeoLocRight = 4,
+ eGeoLocTop = 5,
+ eGeoLocBottom = 6,
+ eGeoLocRearPanel = 7,
+ eGeoLocRiser = 8,
+ eGeoLocInsideMobileLid = 9,
+ eGeoLocDrivebay = 10,
+ eGeoLocHDMI = 11,
+ eGeoLocOutsideMobileLid = 12,
+ eGeoLocATAPI = 13,
+ eGeoLocNotApplicable = 14,
+ eGeoLocReserved6 = 15,
+}}
+ENUM!{enum EPcxGenLocation {
+ eGenLocPrimaryBox = 0,
+ eGenLocInternal = 1,
+ eGenLocSeparate = 2,
+ eGenLocOther = 3,
+}}
+ENUM!{enum EPxcPortConnection {
+ ePortConnJack = 0,
+ ePortConnIntegratedDevice = 1,
+ ePortConnBothIntegratedAndJack = 2,
+ ePortConnUnknown = 3,
+}}
+STRUCT!{struct KSJACK_DESCRIPTION {
+ ChannelMapping: DWORD,
+ Color: COLORREF,
+ ConnectionType: EPcxConnectionType,
+ GeoLocation: EPcxGeoLocation,
+ GenLocation: EPcxGenLocation,
+ PortConnection: EPxcPortConnection,
+ IsConnected: BOOL,
+}}
+pub type PKSJACK_DESCRIPTION = *mut KSJACK_DESCRIPTION;
+STRUCT!{struct LUID {
+ LowPart: DWORD,
+ HighPart: LONG,
+}}
+pub type PLUID = *mut LUID;
+ENUM!{enum KSJACK_SINK_CONNECTIONTYPE {
+ KSJACK_SINK_CONNECTIONTYPE_HDMI = 0,
+ KSJACK_SINK_CONNECTIONTYPE_DISPLAYPORT = 1,
+}}
+STRUCT!{struct KSJACK_SINK_INFORMATION {
+ ConnType: KSJACK_SINK_CONNECTIONTYPE,
+ ManufacturerId: WORD,
+ ProductId: WORD,
+ AudioLatency: WORD,
+ HDCPCapable: BOOL,
+ AICapable: BOOL,
+ SinkDescriptionLength: UCHAR,
+ SinkDescription: [WCHAR; 32],
+ PortId: LUID,
+}}
+STRUCT!{struct KSJACK_DESCRIPTION2 {
+ DeviceStateInfo: DWORD,
+ JackCapabilities: DWORD,
+}}
+pub type PKSJACK_DESCRIPTION2 = *mut KSJACK_DESCRIPTION2;
+ENUM!{enum DataFlow {
+ In = 0,
+ Out = 1,
+}}
+ENUM!{enum PartType {
+ Connector = 0,
+ Subunit = 1,
+}}
+ENUM!{enum ConnectorType {
+ Unknown_Connector = 0,
+ Physical_Internal = 1,
+ Physical_External = 2,
+ Software_IO = 3,
+ Software_Fixed = 4,
+ Network = 5,
+}}
+RIDL!{#[uuid(0x28f54685, 0x06fd, 0x11d2, 0xb2, 0x7a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96)]
+interface IKsControl(IKsControlVtbl): IUnknown(IUnknownVtbl) {
+ fn KsProperty(
+ Property: PKSPROPERTY,
+ PropertyLength: ULONG,
+ PropertyData: *mut c_void,
+ DataLength: ULONG,
+ BytesReturned: *mut ULONG,
+ ) -> HRESULT,
+ fn KsMethod(
+ Method: PKSMETHOD,
+ MethodLength: ULONG,
+ MethodData: *mut c_void,
+ DataLength: ULONG,
+ BytesReturned: *mut ULONG,
+ ) -> HRESULT,
+ fn KsEvent(
+ Event: PKSEVENT,
+ EventLength: ULONG,
+ EventData: *mut c_void,
+ DataLength: ULONG,
+ BytesReturned: *mut ULONG,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xc2f8e001, 0xf205, 0x4bc9, 0x99, 0xbc, 0xc1, 0x3b, 0x1e, 0x04, 0x8c, 0xcb)]
+interface IPerChannelDbLevel(IPerChannelDbLevelVtbl): IUnknown(IUnknownVtbl) {
+ fn GetChannelCount(
+ pcChannels: *mut UINT,
+ ) -> HRESULT,
+ fn GetLevelRange(
+ nChannel: UINT,
+ pfMinLevelDB: *mut c_float,
+ pfMaxLevelDB: *mut c_float,
+ pfStepping: *mut c_float,
+ ) -> HRESULT,
+ fn GetLevel(
+ nChannel: UINT,
+ pfLevelDB: *mut c_float,
+ ) -> HRESULT,
+ fn SetLevel(
+ nChannel: UINT,
+ fLevelDB: c_float,
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+ fn SetLevelUniform(
+ fLevelDB: c_float,
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+ fn SetLevelAllChannels(
+ aLevelsDB: *mut c_float,
+ cChannels: ULONG,
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x7fb7b48f, 0x531d, 0x44a2, 0xbc, 0xb3, 0x5a, 0xd5, 0xa1, 0x34, 0xb3, 0xdc)]
+interface IAudioVolumeLevel(IAudioVolumeLevelVtbl): IPerChannelDbLevel(IPerChannelDbLevelVtbl) {}}
+RIDL!{#[uuid(0xbb11c46f, 0xec28, 0x493c, 0xb8, 0x8a, 0x5d, 0xb8, 0x80, 0x62, 0xce, 0x98)]
+interface IAudioChannelConfig(IAudioChannelConfigVtbl): IUnknown(IUnknownVtbl) {
+ fn SetChannelConfig(
+ dwConfig: DWORD,
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+ fn GetChannelConfig(
+ pdwConfig: *mut DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x7d8b1437, 0xdd53, 0x4350, 0x9c, 0x1b, 0x1e, 0xe2, 0x89, 0x0b, 0xd9, 0x38)]
+interface IAudioLoudness(IAudioLoudnessVtbl): IUnknown(IUnknownVtbl) {
+ fn GetEnabled(
+ pbEnabled: *mut BOOL,
+ ) -> HRESULT,
+ fn SetEnabled(
+ bEnable: BOOL,
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x4f03dc02, 0x5e6e, 0x4653, 0x8f, 0x72, 0xa0, 0x30, 0xc1, 0x23, 0xd5, 0x98)]
+interface IAudioInputSelector(IAudioInputSelectorVtbl): IUnknown(IUnknownVtbl) {
+ fn GetSelection(
+ pnIdSelected: *mut UINT,
+ ) -> HRESULT,
+ fn SetSelection(
+ nIdSelect: UINT,
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xbb515f69, 0x94a7, 0x429e, 0x8b, 0x9c, 0x27, 0x1b, 0x3f, 0x11, 0xa3, 0xab)]
+interface IAudioOutputSelector(IAudioOutputSelectorVtbl): IUnknown(IUnknownVtbl) {
+ fn GetSelection(
+ pnIdSelected: *mut UINT,
+ ) -> HRESULT,
+ fn SetSelection(
+ nIdSelect: UINT,
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xdf45aeea, 0xb74a, 0x4b6b, 0xaf, 0xad, 0x23, 0x66, 0xb6, 0xaa, 0x01, 0x2e)]
+interface IAudioMute(IAudioMuteVtbl): IUnknown(IUnknownVtbl) {
+ fn SetMute(
+ bMuted: BOOL,
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+ fn GetMute(
+ pbMuted: *mut BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa2b1a1d9, 0x4db3, 0x425d, 0xa2, 0xb2, 0xbd, 0x33, 0x5c, 0xb3, 0xe2, 0xe5)]
+interface IAudioBass(IAudioBassVtbl): IPerChannelDbLevel(IPerChannelDbLevelVtbl) {}}
+RIDL!{#[uuid(0x5e54b6d7, 0xb44b, 0x40d9, 0x9a, 0x9e, 0xe6, 0x91, 0xd9, 0xce, 0x6e, 0xdf)]
+interface IAudioMidrange(IAudioMidrangeVtbl): IPerChannelDbLevel(IPerChannelDbLevelVtbl) {}}
+RIDL!{#[uuid(0x0a717812, 0x694e, 0x4907, 0xb7, 0x4b, 0xba, 0xfa, 0x5c, 0xfd, 0xca, 0x7b)]
+interface IAudioTreble(IAudioTrebleVtbl): IPerChannelDbLevel(IPerChannelDbLevelVtbl) {}}
+RIDL!{#[uuid(0x85401fd4, 0x6de4, 0x4b9d, 0x98, 0x69, 0x2d, 0x67, 0x53, 0xa8, 0x2f, 0x3c)]
+interface IAudioAutoGainControl(IAudioAutoGainControlVtbl): IUnknown(IUnknownVtbl) {
+ fn GetEnabled(
+ pbEnabled: *mut BOOL,
+ ) -> HRESULT,
+ fn SetEnabled(
+ bEnable: BOOL,
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xdd79923c, 0x0599, 0x45e0, 0xb8, 0xb6, 0xc8, 0xdf, 0x7d, 0xb6, 0xe7, 0x96)]
+interface IAudioPeakMeter(IAudioPeakMeterVtbl): IUnknown(IUnknownVtbl) {
+ fn GetChannelCount(
+ pcChannels: *mut UINT,
+ ) -> HRESULT,
+ fn GetLevel(
+ nChannel: UINT,
+ pfLevel: *mut c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3b22bcbf, 0x2586, 0x4af0, 0x85, 0x83, 0x20, 0x5d, 0x39, 0x1b, 0x80, 0x7c)]
+interface IDeviceSpecificProperty(IDeviceSpecificPropertyVtbl): IUnknown(IUnknownVtbl) {
+ fn GetType(
+ pVType: *mut VARTYPE,
+ ) -> HRESULT,
+ fn GetValue(
+ pvValue: *mut c_void,
+ pcbValue: *mut DWORD,
+ ) -> HRESULT,
+ fn SetValue(
+ pvValue: *mut c_void,
+ cbValue: DWORD,
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+ fn Get4BRange(
+ plMin: *mut LONG,
+ plMax: *mut LONG,
+ plStepping: *mut LONG,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3cb4a69d, 0xbb6f, 0x4d2b, 0x95, 0xb7, 0x45, 0x2d, 0x2c, 0x15, 0x5d, 0xb5)]
+interface IKsFormatSupport(IKsFormatSupportVtbl): IUnknown(IUnknownVtbl) {
+ fn IsFormatSupported(
+ pKsFormat: PKSDATAFORMAT,
+ cbFormat: DWORD,
+ pbSupported: *mut BOOL,
+ ) -> HRESULT,
+ fn GetDevicePreferredFormat(
+ ppKsFormat: *mut PKSDATAFORMAT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x4509f757, 0x2d46, 0x4637, 0x8e, 0x62, 0xce, 0x7d, 0xb9, 0x44, 0xf5, 0x7b)]
+interface IKsJackDescription(IKsJackDescriptionVtbl): IUnknown(IUnknownVtbl) {
+ fn GetJackCount(
+ pcJacks: *mut UINT,
+ ) -> HRESULT,
+ fn GetJackDescription(
+ nJack: UINT,
+ pDescription: *mut KSJACK_DESCRIPTION,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x478f3a9b, 0xe0c9, 0x4827, 0x92, 0x28, 0x6f, 0x55, 0x05, 0xff, 0xe7, 0x6a)]
+interface IKsJackDescription2(IKsJackDescription2Vtbl): IUnknown(IUnknownVtbl) {
+ fn GetJackCount(
+ pcJacks: *mut UINT,
+ ) -> HRESULT,
+ fn GetJackDescription2(
+ nJack: UINT,
+ pDescription2: *mut KSJACK_DESCRIPTION2,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xd9bd72ed, 0x290f, 0x4581, 0x9f, 0xf3, 0x61, 0x02, 0x7a, 0x8f, 0xe5, 0x32)]
+interface IKsJackSinkInformation(IKsJackSinkInformationVtbl): IUnknown(IUnknownVtbl) {
+ fn GetJackSinkInformation(
+ pJackSinkInformation: *mut KSJACK_SINK_INFORMATION,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xc99af463, 0xd629, 0x4ec4, 0x8c, 0x00, 0xe5, 0x4d, 0x68, 0x15, 0x42, 0x48)]
+interface IKsJackContainerId(IKsJackContainerIdVtbl): IUnknown(IUnknownVtbl) {
+ fn GetJackContainerId(
+ pJackContainerId: *mut GUID,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x6daa848c, 0x5eb0, 0x45cc, 0xae, 0xa5, 0x99, 0x8a, 0x2c, 0xda, 0x1f, 0xfb)]
+interface IPartsList(IPartsListVtbl): IUnknown(IUnknownVtbl) {
+ fn GetCount(
+ pCount: *mut UINT,
+ ) -> HRESULT,
+ fn GetPart(
+ nIndex: UINT,
+ ppPart: *mut *mut IPart,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xae2de0e4, 0x5bca, 0x4f2d, 0xaa, 0x46, 0x5d, 0x13, 0xf8, 0xfd, 0xb3, 0xa9)]
+interface IPart(IPartVtbl): IUnknown(IUnknownVtbl) {
+ fn GetName(
+ ppwstrName: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetLocalId(
+ pnId: *mut UINT,
+ ) -> HRESULT,
+ fn GetGlobalId(
+ ppwstrGlobalId: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetPartType(
+ pPartType: *mut PartType,
+ ) -> HRESULT,
+ fn GetSubType(
+ pSubType: *mut GUID,
+ ) -> HRESULT,
+ fn GetControlInterfaceCount(
+ pCount: *mut UINT,
+ ) -> HRESULT,
+ fn GetControlInterface(
+ nIndex: UINT,
+ ppInterfaceDesc: *mut *mut IControlInterface,
+ ) -> HRESULT,
+ fn EnumPartsIncoming(
+ ppParts: *mut *mut IPartsList,
+ ) -> HRESULT,
+ fn EnumPartsOutgoing(
+ ppParts: *mut *mut IPartsList,
+ ) -> HRESULT,
+ fn GetTopologyObject(
+ ppTopology: *mut *mut IDeviceTopology,
+ ) -> HRESULT,
+ fn Activate(
+ dwClsContext: DWORD,
+ refiid: REFIID,
+ ppvObject: *mut *mut c_void,
+ ) -> HRESULT,
+ fn RegisterControlChangeCallback(
+ riid: REFGUID,
+ pNotify: *mut IControlChangeNotify,
+ ) -> HRESULT,
+ fn UnregisterControlChangeCallback(
+ pNotify: *mut IControlChangeNotify,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x9c2c4058, 0x23f5, 0x41de, 0x87, 0x7a, 0xdf, 0x3a, 0xf2, 0x36, 0xa0, 0x9e)]
+interface IConnector(IConnectorVtbl): IUnknown(IUnknownVtbl) {
+ fn GetType(
+ pType: *mut ConnectorType,
+ ) -> HRESULT,
+ fn GetDataFlow(
+ pFlow: *mut DataFlow,
+ ) -> HRESULT,
+ fn ConnectTo(
+ pConnectTo: *mut IConnector,
+ ) -> HRESULT,
+ fn Disconnect() -> HRESULT,
+ fn IsConnected(
+ pbConnected: *mut BOOL,
+ ) -> HRESULT,
+ fn GetConnectedTo(
+ ppConTo: *mut *mut IConnector,
+ ) -> HRESULT,
+ fn GetConnectorIdConnectedTo(
+ ppwstrConnectorId: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetDeviceIdConnectedTo(
+ ppwstrDeviceId: *mut LPWSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x82149a85, 0xdba6, 0x4487, 0x86, 0xbb, 0xea, 0x8f, 0x7f, 0xef, 0xcc, 0x71)]
+interface ISubunit(ISubunitVtbl): IUnknown(IUnknownVtbl) {}}
+RIDL!{#[uuid(0x45d37c3f, 0x5140, 0x444a, 0xae, 0x24, 0x40, 0x07, 0x89, 0xf3, 0xcb, 0xf3)]
+interface IControlInterface(IControlInterfaceVtbl): IUnknown(IUnknownVtbl) {
+ fn GetName(
+ ppwstrName: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetIID(
+ pIID: *mut GUID,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa09513ed, 0xc709, 0x4d21, 0xbd, 0x7b, 0x5f, 0x34, 0xc4, 0x7f, 0x39, 0x47)]
+interface IControlChangeNotify(IControlChangeNotifyVtbl): IUnknown(IUnknownVtbl) {
+ fn OnNotify(
+ dwSenderProcessId: DWORD,
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x2a07407e, 0x6497, 0x4a18, 0x97, 0x87, 0x32, 0xf7, 0x9b, 0xd0, 0xd9, 0x8f)]
+interface IDeviceTopology(IDeviceTopologyVtbl): IUnknown(IUnknownVtbl) {
+ fn GetConnectorCount(
+ pCount: *mut UINT,
+ ) -> HRESULT,
+ fn GetConnector(
+ nIndex: UINT,
+ ppConnector: *mut *mut IConnector,
+ ) -> HRESULT,
+ fn GetSubunitCount(
+ pCount: *mut UINT,
+ ) -> HRESULT,
+ fn GetSubunit(
+ nIndex: UINT,
+ ppSubunit: *mut *mut ISubunit,
+ ) -> HRESULT,
+ fn GetPartById(
+ nId: UINT,
+ ppPart: *mut *mut IPart,
+ ) -> HRESULT,
+ fn GetDeviceId(
+ ppwstrDeviceId: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetSignalPath(
+ pIPartFrom: *mut IPart,
+ pIPartTo: *mut IPart,
+ bRejectMixedPaths: BOOL,
+ ppParts: *mut *mut IPartsList,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x1df639d0, 0x5ec1, 0x47aa, 0x93, 0x79, 0x82, 0x8d, 0xc1, 0xaa, 0x8c, 0x59)]
+class DeviceTopology;}
diff --git a/vendor/winapi/src/um/dinput.rs b/vendor/winapi/src/um/dinput.rs
new file mode 100644
index 000000000..5b5b1c5e5
--- /dev/null
+++ b/vendor/winapi/src/um/dinput.rs
@@ -0,0 +1,107 @@
+// 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.
+DEFINE_GUID!{CLSID_DirectInput,
+ 0x25e609e0, 0xb259, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{CLSID_DirectInputDevice,
+ 0x25e609e1, 0xb259, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{CLSID_DirectInput8,
+ 0x25e609e4, 0xb259, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{CLSID_DirectInputDevice8,
+ 0x25e609e5, 0xb259, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{IID_IDirectInputA,
+ 0x89521360, 0xaa8a, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{IID_IDirectInputW,
+ 0x89521361, 0xaa8a, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{IID_IDirectInput2A,
+ 0x5944e662, 0xaa8a, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{IID_IDirectInput2W,
+ 0x5944e663, 0xaa8a, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{IID_IDirectInput7A,
+ 0x9a4cb684, 0x236d, 0x11d3, 0x8e, 0x9d, 0x00, 0xc0, 0x4f, 0x68, 0x44, 0xae}
+DEFINE_GUID!{IID_IDirectInput7W,
+ 0x9a4cb685, 0x236d, 0x11d3, 0x8e, 0x9d, 0x00, 0xc0, 0x4f, 0x68, 0x44, 0xae}
+DEFINE_GUID!{IID_IDirectInput8A,
+ 0xbf798030, 0x483a, 0x4da2, 0xaa, 0x99, 0x5d, 0x64, 0xed, 0x36, 0x97, 0x00}
+DEFINE_GUID!{IID_IDirectInput8W,
+ 0xbf798031, 0x483a, 0x4da2, 0xaa, 0x99, 0x5d, 0x64, 0xed, 0x36, 0x97, 0x00}
+DEFINE_GUID!{IID_IDirectInputDeviceA,
+ 0x5944e680, 0xc92e, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{IID_IDirectInputDeviceW,
+ 0x5944e681, 0xc92e, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{IID_IDirectInputDevice2A,
+ 0x5944e682, 0xc92e, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{IID_IDirectInputDevice2W,
+ 0x5944e683, 0xc92e, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{IID_IDirectInputDevice7A,
+ 0x57d7c6bc, 0x2356, 0x11d3, 0x8e, 0x9d, 0x00, 0xc0, 0x4f, 0x68, 0x44, 0xae}
+DEFINE_GUID!{IID_IDirectInputDevice7W,
+ 0x57d7c6bd, 0x2356, 0x11d3, 0x8e, 0x9d, 0x00, 0xc0, 0x4f, 0x68, 0x44, 0xae}
+DEFINE_GUID!{IID_IDirectInputDevice8A,
+ 0x54d41080, 0xdc15, 0x4833, 0xa4, 0x1b, 0x74, 0x8f, 0x73, 0xa3, 0x81, 0x79}
+DEFINE_GUID!{IID_IDirectInputDevice8W,
+ 0x54d41081, 0xdc15, 0x4833, 0xa4, 0x1b, 0x74, 0x8f, 0x73, 0xa3, 0x81, 0x79}
+DEFINE_GUID!{IID_IDirectInputEffect,
+ 0xe7e1f7c0, 0x88d2, 0x11d0, 0x9a, 0xd0, 0x00, 0xa0, 0xc9, 0xa0, 0x6e, 0x35}
+DEFINE_GUID!{GUID_XAxis,
+ 0xa36d02e0, 0xc9f3, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_YAxis,
+ 0xa36d02e1, 0xc9f3, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_ZAxis,
+ 0xa36d02e2, 0xc9f3, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_RxAxis,
+ 0xa36d02f4, 0xc9f3, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_RyAxis,
+ 0xa36d02f5, 0xc9f3, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_RzAxis,
+ 0xa36d02e3, 0xc9f3, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_Slider,
+ 0xa36d02e4, 0xc9f3, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_Button,
+ 0xa36d02f0, 0xc9f3, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_Key,
+ 0x55728220, 0xd33c, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_POV,
+ 0xa36d02f2, 0xc9f3, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_Unknown,
+ 0xa36d02f3, 0xc9f3, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_SysMouse,
+ 0x6f1d2b60, 0xd5a0, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_SysKeyboard,
+ 0x6f1d2b61, 0xd5a0, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_Joystick,
+ 0x6f1d2b70, 0xd5a0, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_SysMouseEm,
+ 0x6f1d2b80, 0xd5a0, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_SysMouseEm2,
+ 0x6f1d2b81, 0xd5a0, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_SysKeyboardEm,
+ 0x6f1d2b82, 0xd5a0, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_SysKeyboardEm2,
+ 0x6f1d2b83, 0xd5a0, 0x11cf, 0xbf, 0xc7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{GUID_ConstantForce,
+ 0x13541c20, 0x8e33, 0x11d0, 0x9a, 0xd0, 0x00, 0xa0, 0xc9, 0xa0, 0x6e, 0x35}
+DEFINE_GUID!{GUID_RampForce,
+ 0x13541c21, 0x8e33, 0x11d0, 0x9a, 0xd0, 0x00, 0xa0, 0xc9, 0xa0, 0x6e, 0x35}
+DEFINE_GUID!{GUID_Square,
+ 0x13541c22, 0x8e33, 0x11d0, 0x9a, 0xd0, 0x00, 0xa0, 0xc9, 0xa0, 0x6e, 0x35}
+DEFINE_GUID!{GUID_Sine,
+ 0x13541c23, 0x8e33, 0x11d0, 0x9a, 0xd0, 0x00, 0xa0, 0xc9, 0xa0, 0x6e, 0x35}
+DEFINE_GUID!{GUID_Triangle,
+ 0x13541c24, 0x8e33, 0x11d0, 0x9a, 0xd0, 0x00, 0xa0, 0xc9, 0xa0, 0x6e, 0x35}
+DEFINE_GUID!{GUID_SawtoothUp,
+ 0x13541c25, 0x8e33, 0x11d0, 0x9a, 0xd0, 0x00, 0xa0, 0xc9, 0xa0, 0x6e, 0x35}
+DEFINE_GUID!{GUID_SawtoothDown,
+ 0x13541c26, 0x8e33, 0x11d0, 0x9a, 0xd0, 0x00, 0xa0, 0xc9, 0xa0, 0x6e, 0x35}
+DEFINE_GUID!{GUID_Spring,
+ 0x13541c27, 0x8e33, 0x11d0, 0x9a, 0xd0, 0x00, 0xa0, 0xc9, 0xa0, 0x6e, 0x35}
+DEFINE_GUID!{GUID_Damper,
+ 0x13541c28, 0x8e33, 0x11d0, 0x9a, 0xd0, 0x00, 0xa0, 0xc9, 0xa0, 0x6e, 0x35}
+DEFINE_GUID!{GUID_Inertia,
+ 0x13541c29, 0x8e33, 0x11d0, 0x9a, 0xd0, 0x00, 0xa0, 0xc9, 0xa0, 0x6e, 0x35}
+DEFINE_GUID!{GUID_Friction,
+ 0x13541c2a, 0x8e33, 0x11d0, 0x9a, 0xd0, 0x00, 0xa0, 0xc9, 0xa0, 0x6e, 0x35}
+DEFINE_GUID!{GUID_CustomForce,
+ 0x13541c2b, 0x8e33, 0x11d0, 0x9a, 0xd0, 0x00, 0xa0, 0xc9, 0xa0, 0x6e, 0x35}
diff --git a/vendor/winapi/src/um/dispex.rs b/vendor/winapi/src/um/dispex.rs
new file mode 100644
index 000000000..a846b461f
--- /dev/null
+++ b/vendor/winapi/src/um/dispex.rs
@@ -0,0 +1,221 @@
+// 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::DWORD_PTR;
+use shared::guiddef::GUID;
+use shared::minwindef::{DWORD, WORD};
+use shared::winerror::HRESULT;
+use shared::wtypes::{BSTR, VARIANT_BOOL, VARTYPE};
+use um::oaidl::{DISPID, DISPID_UNKNOWN, DISPPARAMS, EXCEPINFO, IDispatch, IDispatchVtbl, VARIANT};
+use um::servprov::IServiceProvider;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::LCID;
+DEFINE_GUID!{IID_IDispatchEx,
+ 0xa6ef9860, 0xc720, 0x11d0, 0x93, 0x37, 0x0, 0xa0, 0xc9, 0xd, 0xca, 0xa9}
+DEFINE_GUID!{IID_IDispError,
+ 0xa6ef9861, 0xc720, 0x11d0, 0x93, 0x37, 0x0, 0xa0, 0xc9, 0xd, 0xca, 0xa9}
+DEFINE_GUID!{IID_IVariantChangeType,
+ 0xa6ef9862, 0xc720, 0x11d0, 0x93, 0x37, 0x0, 0xa0, 0xc9, 0xd, 0xca, 0xa9}
+DEFINE_GUID!{SID_VariantConversion,
+ 0x1f101481, 0xbccd, 0x11d0, 0x93, 0x36, 0x0, 0xa0, 0xc9, 0xd, 0xca, 0xa9}
+DEFINE_GUID!{SID_GetCaller,
+ 0x4717cc40, 0xbcb9, 0x11d0, 0x93, 0x36, 0x0, 0xa0, 0xc9, 0xd, 0xca, 0xa9}
+DEFINE_GUID!{SID_ProvideRuntimeContext,
+ 0x74a5040c, 0xdd0c, 0x48f0, 0xac, 0x85, 0x19, 0x4c, 0x32, 0x59, 0x18, 0xa}
+DEFINE_GUID!{IID_IProvideRuntimeContext,
+ 0x10e2414a, 0xec59, 0x49d2, 0xbc, 0x51, 0x5a, 0xdd, 0x2c, 0x36, 0xfe, 0xbc}
+DEFINE_GUID!{IID_IObjectIdentity,
+ 0xca04b7e6, 0xd21, 0x11d1, 0x8c, 0xc5, 0x0, 0xc0, 0x4f, 0xc2, 0xb0, 0x85}
+DEFINE_GUID!{IID_ICanHandleException,
+ 0xc5598e60, 0xb307, 0x11d1, 0xb2, 0x7d, 0x0, 0x60, 0x08, 0xc3, 0xfb, 0xfb}
+// pub const SID_GetScriptSite = IID_IActiveScriptSite;
+pub const fdexNameCaseSensitive: DWORD = 0x00000001;
+pub const fdexNameEnsure: DWORD = 0x00000002;
+pub const fdexNameImplicit: DWORD = 0x00000004;
+pub const fdexNameCaseInsensitive: DWORD = 0x00000008;
+pub const fdexNameInternal: DWORD = 0x00000010;
+pub const fdexNameNoDynamicProperties: DWORD = 0x00000020;
+pub const fdexPropCanGet: DWORD = 0x00000001;
+pub const fdexPropCannotGet: DWORD = 0x00000002;
+pub const fdexPropCanPut: DWORD = 0x00000004;
+pub const fdexPropCannotPut: DWORD = 0x00000008;
+pub const fdexPropCanPutRef: DWORD = 0x00000010;
+pub const fdexPropCannotPutRef: DWORD = 0x00000020;
+pub const fdexPropNoSideEffects: DWORD = 0x00000040;
+pub const fdexPropDynamicType: DWORD = 0x00000080;
+pub const fdexPropCanCall: DWORD = 0x00000100;
+pub const fdexPropCannotCall: DWORD = 0x00000200;
+pub const fdexPropCanConstruct: DWORD = 0x00000400;
+pub const fdexPropCannotConstruct: DWORD = 0x00000800;
+pub const fdexPropCanSourceEvents: DWORD = 0x00001000;
+pub const fdexPropCannotSourceEvents: DWORD = 0x00002000;
+pub const grfdexPropCanAll: DWORD = fdexPropCanGet | fdexPropCanPut | fdexPropCanPutRef
+ | fdexPropCanCall | fdexPropCanConstruct | fdexPropCanSourceEvents;
+pub const grfdexPropCannotAll: DWORD = fdexPropCannotGet | fdexPropCannotPut | fdexPropCannotPutRef
+ | fdexPropCannotCall | fdexPropCannotConstruct | fdexPropCannotSourceEvents;
+pub const grfdexPropExtraAll: DWORD = fdexPropNoSideEffects | fdexPropDynamicType;
+pub const grfdexPropAll: DWORD = grfdexPropCanAll | grfdexPropCannotAll | grfdexPropExtraAll;
+pub const fdexEnumDefault: DWORD = 0x00000001;
+pub const fdexEnumAll: DWORD = 0x00000002;
+pub const DISPATCH_CONSTRUCT: DWORD = 0x4000;
+pub const DISPID_THIS: DISPID = -613;
+pub const DISPID_STARTENUM: DISPID = DISPID_UNKNOWN;
+// extern RPC_IF_HANDLE __MIDL_itf_dispex_0000_0000_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_dispex_0000_0000_v0_0_s_ifspec;
+// EXTERN_C const IID IID_IDispatchEx;
+RIDL!{#[uuid(0xa6ef9860, 0xc720, 0x11d0, 0x93, 0x37, 0x00, 0xa0, 0xc9, 0x0d, 0xca, 0xa9)]
+interface IDispatchEx(IDispatchExVtbl): IDispatch(IDispatchVtbl) {
+ fn GetDispID(
+ bstrName: BSTR,
+ grfdex: DWORD,
+ pid: *mut DISPID,
+ ) -> HRESULT,
+ fn InvokeEx(
+ id: DISPID,
+ lcid: LCID,
+ wFlags: WORD,
+ pdp: *mut DISPPARAMS,
+ pvarRes: *mut VARIANT,
+ pei: *mut EXCEPINFO,
+ pspCaller: *mut IServiceProvider,
+ ) -> HRESULT,
+ fn DeleteMemberByName(
+ bstrName: BSTR,
+ grfdex: DWORD,
+ ) -> HRESULT,
+ fn DeleteMemberByDispID(
+ id: DISPID,
+ ) -> HRESULT,
+ fn GetMemberProperties(
+ id: DISPID,
+ grfdexFetch: DWORD,
+ pgrfdex: *mut DWORD,
+ ) -> HRESULT,
+ fn GetMemberName(
+ id: DISPID,
+ pbstrName: *mut BSTR,
+ ) -> HRESULT,
+ fn GetNextDispID(
+ grfdex: DWORD,
+ id: DISPID,
+ pid: *mut DISPID,
+ ) -> HRESULT,
+ fn GetNameSpaceParent(
+ ppunk: *mut *mut IUnknown,
+ ) -> HRESULT,
+}}
+// HRESULT STDMETHODCALLTYPE IDispatchEx_RemoteInvokeEx_Proxy(
+// IDispatchEx * This,
+// DISPID id,
+// LCID lcid,
+// DWORD dwFlags,
+// DISPPARAMS *pdp,
+// VARIANT *pvarRes,
+// EXCEPINFO *pei,
+// IServiceProvider *pspCaller,
+// UINT cvarRefArg,
+// UINT *rgiRefArg,
+// VARIANT *rgvarRefArg);
+// void __RPC_STUB IDispatchEx_RemoteInvokeEx_Stub(
+// IRpcStubBuffer *This,
+// IRpcChannelBuffer *_pRpcChannelBuffer,
+// PRPC_MESSAGE _pRpcMessage,
+// DWORD *_pdwStubPhase);
+// EXTERN_C const IID IID_IDispError;
+RIDL!{#[uuid(0xa6ef9861, 0xc720, 0x11d0, 0x93, 0x37, 0x00, 0xa0, 0xc9, 0x0d, 0xca, 0xa9)]
+interface IDispError(IDispErrorVtbl): IUnknown(IUnknownVtbl) {
+ fn QueryErrorInfo(
+ guidErrorType: GUID,
+ ppde: *mut *mut IDispError,
+ ) -> HRESULT,
+ fn GetNext(
+ ppde: *mut *mut IDispError,
+ ) -> HRESULT,
+ fn GetHresult(
+ phr: *mut HRESULT,
+ ) -> HRESULT,
+ fn GetSource(
+ pbstrSource: *mut BSTR,
+ ) -> HRESULT,
+ fn GetHelpInfo(
+ pbstrFileName: *mut BSTR,
+ pdwContext: *mut DWORD,
+ ) -> HRESULT,
+ fn GetDescription(
+ pbstrDescription: *mut BSTR,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IVariantChangeType;
+RIDL!{#[uuid(0xa6ef9862, 0xc720, 0x11d0, 0x93, 0x37, 0x00, 0xa0, 0xc9, 0x0d, 0xca, 0xa9)]
+interface IVariantChangeType(IVariantChangeTypeVtbl): IUnknown(IUnknownVtbl) {
+ fn ChangeType(
+ pvarDst: *mut VARIANT,
+ pvarSrc: *mut VARIANT,
+ lcid: LCID,
+ vtNew: VARTYPE,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IObjectIdentity;
+RIDL!{#[uuid(0xca04b7e6, 0x0d21, 0x11d1, 0x8c, 0xc5, 0x00, 0xc0, 0x4f, 0xc2, 0xb0, 0x85)]
+interface IObjectIdentity(IObjectIdentityVtbl): IUnknown(IUnknownVtbl) {
+ fn IsEqualObject(
+ punk: *mut IUnknown,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ICanHandleException;
+RIDL!{#[uuid(0xc5598e60, 0xb307, 0x11d1, 0xb2, 0x7d, 0x00, 0x60, 0x08, 0xc3, 0xfb, 0xfb)]
+interface ICanHandleException(ICanHandleExceptionVtbl): IUnknown(IUnknownVtbl) {
+ fn CanHandleException(
+ pExcepInfo: *mut EXCEPINFO,
+ pvar: *mut VARIANT,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IProvideRuntimeContext;
+RIDL!{#[uuid(0x10e2414a, 0xec59, 0x49d2, 0xbc, 0x51, 0x5a, 0xdd, 0x2c, 0x36, 0xfe, 0xbc)]
+interface IProvideRuntimeContext(IProvideRuntimeContextVtbl): IUnknown(IUnknownVtbl) {
+ fn GetCurrentSourceContext(
+ pdwContext: *mut DWORD_PTR,
+ pfExecutingGlobalCode: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+// extern RPC_IF_HANDLE __MIDL_itf_dispex_0000_0006_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_dispex_0000_0006_v0_0_s_ifspec;
+// unsigned long __RPC_USER BSTR_UserSize( __RPC__in unsigned long *, unsigned long, __RPC__in BSTR * );
+// unsigned char * __RPC_USER BSTR_UserMarshal( __RPC__in unsigned long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in BSTR * );
+// unsigned char * __RPC_USER BSTR_UserUnmarshal(__RPC__in unsigned long *, __RPC__in_xcount(0) unsigned char *, __RPC__out BSTR * );
+// void __RPC_USER BSTR_UserFree( __RPC__in unsigned long *, __RPC__in BSTR * );
+// unsigned long __RPC_USER VARIANT_UserSize( __RPC__in unsigned long *, unsigned long, __RPC__in VARIANT * );
+// unsigned char * __RPC_USER VARIANT_UserMarshal( __RPC__in unsigned long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in VARIANT * );
+// unsigned char * __RPC_USER VARIANT_UserUnmarshal(__RPC__in unsigned long *, __RPC__in_xcount(0) unsigned char *, __RPC__out VARIANT * );
+// void __RPC_USER VARIANT_UserFree( __RPC__in unsigned long *, __RPC__in VARIANT * );
+// unsigned long __RPC_USER BSTR_UserSize64( __RPC__in unsigned long *, unsigned long, __RPC__in BSTR * );
+// unsigned char * __RPC_USER BSTR_UserMarshal64( __RPC__in unsigned long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in BSTR * );
+// unsigned char * __RPC_USER BSTR_UserUnmarshal64(__RPC__in unsigned long *, __RPC__in_xcount(0) unsigned char *, __RPC__out BSTR * );
+// void __RPC_USER BSTR_UserFree64( __RPC__in unsigned long *, __RPC__in BSTR * );
+// unsigned long __RPC_USER VARIANT_UserSize64( __RPC__in unsigned long *, unsigned long, __RPC__in VARIANT * );
+// unsigned char * __RPC_USER VARIANT_UserMarshal64( __RPC__in unsigned long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in VARIANT * );
+// unsigned char * __RPC_USER VARIANT_UserUnmarshal64(__RPC__in unsigned long *, __RPC__in_xcount(0) unsigned char *, __RPC__out VARIANT * );
+// void __RPC_USER VARIANT_UserFree64( __RPC__in unsigned long *, __RPC__in VARIANT * );
+// HRESULT STDMETHODCALLTYPE IDispatchEx_InvokeEx_Proxy(
+// IDispatchEx * This,
+// DISPID id,
+// LCID lcid,
+// WORD wFlags,
+// DISPPARAMS *pdp,
+// VARIANT *pvarRes,
+// EXCEPINFO *pei,
+// IServiceProvider *pspCaller);
+// HRESULT STDMETHODCALLTYPE IDispatchEx_InvokeEx_Stub(
+// IDispatchEx * This,
+// DISPID id,
+// LCID lcid,
+// DWORD dwFlags,
+// DISPPARAMS *pdp,
+// VARIANT *pvarRes,
+// EXCEPINFO *pei,
+// IServiceProvider *pspCaller,
+// UINT cvarRefArg,
+// UINT *rgiRefArg,
+// VARIANT *rgvarRefArg);
diff --git a/vendor/winapi/src/um/dmksctl.rs b/vendor/winapi/src/um/dmksctl.rs
new file mode 100644
index 000000000..252ab7387
--- /dev/null
+++ b/vendor/winapi/src/um/dmksctl.rs
@@ -0,0 +1,11 @@
+// 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.
+DEFINE_GUID!{IID_IKsControl,
+ 0x28f54685, 0x06fd, 0x11d2, 0xb2, 0x7a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96}
+DEFINE_GUID!{KSDATAFORMAT_SUBTYPE_MIDI,
+ 0x1d262760, 0xe957, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00}
+DEFINE_GUID!{KSDATAFORMAT_SUBTYPE_DIRECTMUSIC,
+ 0x1a82f8bc, 0x3f8b, 0x11d2, 0xb7, 0x74, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1}
diff --git a/vendor/winapi/src/um/dmusicc.rs b/vendor/winapi/src/um/dmusicc.rs
new file mode 100644
index 000000000..ee87b6fde
--- /dev/null
+++ b/vendor/winapi/src/um/dmusicc.rs
@@ -0,0 +1,71 @@
+// 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.
+DEFINE_GUID!{CLSID_DirectMusic,
+ 0x636b9f10, 0x0c7d, 0x11d1, 0x95, 0xb2, 0x00, 0x20, 0xaf, 0xdc, 0x74, 0x21}
+DEFINE_GUID!{CLSID_DirectMusicCollection,
+ 0x480ff4b0, 0x28b2, 0x11d1, 0xbe, 0xf7, 0x00, 0xc0, 0x4f, 0xbf, 0x8f, 0xef}
+DEFINE_GUID!{CLSID_DirectMusicSynth,
+ 0x58c2b4d0, 0x46e7, 0x11d1, 0x89, 0xac, 0x00, 0xa0, 0xc9, 0x05, 0x41, 0x29}
+DEFINE_GUID!{IID_IDirectMusic,
+ 0x6536115a, 0x7b2d, 0x11d2, 0xba, 0x18, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12}
+DEFINE_GUID!{IID_IDirectMusicBuffer,
+ 0xd2ac2878, 0xb39b, 0x11d1, 0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xb1, 0xbd}
+DEFINE_GUID!{IID_IDirectMusicPort,
+ 0x08f2d8c9, 0x37c2, 0x11d2, 0xb9, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12}
+DEFINE_GUID!{IID_IDirectMusicThru,
+ 0xced153e7, 0x3606, 0x11d2, 0xb9, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12}
+DEFINE_GUID!{IID_IDirectMusicPortDownload,
+ 0xd2ac287a, 0xb39b, 0x11d1, 0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xb1, 0xbd}
+DEFINE_GUID!{IID_IDirectMusicDownload,
+ 0xd2ac287b, 0xb39b, 0x11d1, 0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xb1, 0xbd}
+DEFINE_GUID!{IID_IDirectMusicCollection,
+ 0xd2ac287c, 0xb39b, 0x11d1, 0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xb1, 0xbd}
+DEFINE_GUID!{IID_IDirectMusicInstrument,
+ 0xd2ac287d, 0xb39b, 0x11d1, 0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xb1, 0xbd}
+DEFINE_GUID!{IID_IDirectMusicDownloadedInstrument,
+ 0xd2ac287e, 0xb39b, 0x11d1, 0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xb1, 0xbd}
+DEFINE_GUID!{IID_IDirectMusic2,
+ 0x6fc2cae1, 0xbc78, 0x11d2, 0xaf, 0xa6, 0x00, 0xaa, 0x00, 0x24, 0xd8, 0xb6}
+DEFINE_GUID!{IID_IDirectMusic8,
+ 0x2d3629f7, 0x813d, 0x4939, 0x85, 0x08, 0xf0, 0x5c, 0x6b, 0x75, 0xfd, 0x97}
+DEFINE_GUID!{GUID_DMUS_PROP_GM_Hardware,
+ 0x178f2f24, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12}
+DEFINE_GUID!{GUID_DMUS_PROP_GS_Hardware,
+ 0x178f2f25, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12}
+DEFINE_GUID!{GUID_DMUS_PROP_XG_Hardware,
+ 0x178f2f26, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12}
+DEFINE_GUID!{GUID_DMUS_PROP_XG_Capable,
+ 0x6496aba1, 0x61b0, 0x11d2, 0xaf, 0xa6, 0x00, 0xaa, 0x00, 0x24, 0xd8, 0xb6}
+DEFINE_GUID!{GUID_DMUS_PROP_GS_Capable,
+ 0x6496aba2, 0x61b0, 0x11d2, 0xaf, 0xa6, 0x00, 0xaa, 0x00, 0x24, 0xd8, 0xb6}
+DEFINE_GUID!{GUID_DMUS_PROP_DLS1,
+ 0x178f2f27, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12}
+DEFINE_GUID!{GUID_DMUS_PROP_DLS2,
+ 0xf14599e5, 0x4689, 0x11d2, 0xaf, 0xa6, 0x00, 0xaa, 0x00, 0x24, 0xd8, 0xb6}
+DEFINE_GUID!{GUID_DMUS_PROP_INSTRUMENT2,
+ 0x865fd372, 0x9f67, 0x11d2, 0x87, 0x2a, 0x00, 0x60, 0x08, 0x93, 0xb1, 0xbd}
+DEFINE_GUID!{GUID_DMUS_PROP_SynthSink_DSOUND,
+ 0x0aa97844, 0xc877, 0x11d1, 0x87, 0x0c, 0x00, 0x60, 0x08, 0x93, 0xb1, 0xbd}
+DEFINE_GUID!{GUID_DMUS_PROP_SynthSink_WAVE,
+ 0x0aa97845, 0xc877, 0x11d1, 0x87, 0x0c, 0x00, 0x60, 0x08, 0x93, 0xb1, 0xbd}
+DEFINE_GUID!{GUID_DMUS_PROP_SampleMemorySize,
+ 0x178f2f28, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12}
+DEFINE_GUID!{GUID_DMUS_PROP_SamplePlaybackRate,
+ 0x2a91f713, 0xa4bf, 0x11d2, 0xbb, 0xdf, 0x00, 0x60, 0x08, 0x33, 0xdb, 0xd8}
+DEFINE_GUID!{GUID_DMUS_PROP_WriteLatency,
+ 0x268a0fa0, 0x60f2, 0x11d2, 0xaf, 0xa6, 0x00, 0xaa, 0x00, 0x24, 0xd8, 0xb6}
+DEFINE_GUID!{GUID_DMUS_PROP_WritePeriod,
+ 0x268a0fa1, 0x60f2, 0x11d2, 0xaf, 0xa6, 0x00, 0xaa, 0x00, 0x24, 0xd8, 0xb6}
+DEFINE_GUID!{GUID_DMUS_PROP_MemorySize,
+ 0x178f2f28, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12}
+DEFINE_GUID!{GUID_DMUS_PROP_WavesReverb,
+ 0x04cb5622, 0x32e5, 0x11d2, 0xaf, 0xa6, 0x00, 0xaa, 0x00, 0x24, 0xd8, 0xb6}
+DEFINE_GUID!{GUID_DMUS_PROP_Effects,
+ 0xcda8d611, 0x684a, 0x11d2, 0x87, 0x1e, 0x00, 0x60, 0x08, 0x93, 0xb1, 0xbd}
+DEFINE_GUID!{GUID_DMUS_PROP_LegacyCaps,
+ 0xcfa7cdc2, 0x00a1, 0x11d2, 0xaa, 0xd5, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12}
+DEFINE_GUID!{GUID_DMUS_PROP_Volume,
+ 0xfedfae25, 0xe46e, 0x11d1, 0xaa, 0xce, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12}
diff --git a/vendor/winapi/src/um/docobj.rs b/vendor/winapi/src/um/docobj.rs
new file mode 100644
index 000000000..e14ddb9e3
--- /dev/null
+++ b/vendor/winapi/src/um/docobj.rs
@@ -0,0 +1,136 @@
+// 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 ctypes::wchar_t;
+use shared::guiddef::GUID;
+use shared::minwindef::{DWORD, ULONG};
+use um::oaidl::VARIANT;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::HRESULT;
+ENUM!{enum OLECMDF {
+ OLECMDF_SUPPORTED = 0x1,
+ OLECMDF_ENABLED = 0x2,
+ OLECMDF_LATCHED = 0x4,
+ OLECMDF_NINCHED = 0x8,
+ OLECMDF_INVISIBLE = 0x10,
+ OLECMDF_DEFHIDEONCTXTMENU = 0x20,
+}}
+STRUCT!{struct OLECMD {
+ cmdID: ULONG,
+ cmdf: DWORD,
+}}
+STRUCT!{struct OLECMDTEXT {
+ cmdtextf: DWORD,
+ cwActual: ULONG,
+ cwBuf: ULONG,
+ rgwz: [wchar_t; 1],
+}}
+ENUM!{enum OLECMDEXECOPT {
+ OLECMDEXECOPT_DODEFAULT = 0,
+ OLECMDEXECOPT_PROMPTUSER = 1,
+ OLECMDEXECOPT_DONTPROMPTUSER = 2,
+ OLECMDEXECOPT_SHOWHELP = 3,
+}}
+ENUM!{enum OLECMDID {
+ OLECMDID_OPEN = 1,
+ OLECMDID_NEW = 2,
+ OLECMDID_SAVE = 3,
+ OLECMDID_SAVEAS = 4,
+ OLECMDID_SAVECOPYAS = 5,
+ OLECMDID_PRINT = 6,
+ OLECMDID_PRINTPREVIEW = 7,
+ OLECMDID_PAGESETUP = 8,
+ OLECMDID_SPELL = 9,
+ OLECMDID_PROPERTIES = 10,
+ OLECMDID_CUT = 11,
+ OLECMDID_COPY = 12,
+ OLECMDID_PASTE = 13,
+ OLECMDID_PASTESPECIAL = 14,
+ OLECMDID_UNDO = 15,
+ OLECMDID_REDO = 16,
+ OLECMDID_SELECTALL = 17,
+ OLECMDID_CLEARSELECTION = 18,
+ OLECMDID_ZOOM = 19,
+ OLECMDID_GETZOOMRANGE = 20,
+ OLECMDID_UPDATECOMMANDS = 21,
+ OLECMDID_REFRESH = 22,
+ OLECMDID_STOP = 23,
+ OLECMDID_HIDETOOLBARS = 24,
+ OLECMDID_SETPROGRESSMAX = 25,
+ OLECMDID_SETPROGRESSPOS = 26,
+ OLECMDID_SETPROGRESSTEXT = 27,
+ OLECMDID_SETTITLE = 28,
+ OLECMDID_SETDOWNLOADSTATE = 29,
+ OLECMDID_STOPDOWNLOAD = 30,
+ OLECMDID_ONTOOLBARACTIVATED = 31,
+ OLECMDID_FIND = 32,
+ OLECMDID_DELETE = 33,
+ OLECMDID_HTTPEQUIV = 34,
+ OLECMDID_HTTPEQUIV_DONE = 35,
+ OLECMDID_ENABLE_INTERACTION = 36,
+ OLECMDID_ONUNLOAD = 37,
+ OLECMDID_PROPERTYBAG2 = 38,
+ OLECMDID_PREREFRESH = 39,
+ OLECMDID_SHOWSCRIPTERROR = 40,
+ OLECMDID_SHOWMESSAGE = 41,
+ OLECMDID_SHOWFIND = 42,
+ OLECMDID_SHOWPAGESETUP = 43,
+ OLECMDID_SHOWPRINT = 44,
+ OLECMDID_CLOSE = 45,
+ OLECMDID_ALLOWUILESSSAVEAS = 46,
+ OLECMDID_DONTDOWNLOADCSS = 47,
+ OLECMDID_UPDATEPAGESTATUS = 48,
+ OLECMDID_PRINT2 = 49,
+ OLECMDID_PRINTPREVIEW2 = 50,
+ OLECMDID_SETPRINTTEMPLATE = 51,
+ OLECMDID_GETPRINTTEMPLATE = 52,
+ OLECMDID_PAGEACTIONBLOCKED = 55,
+ OLECMDID_PAGEACTIONUIQUERY = 56,
+ OLECMDID_FOCUSVIEWCONTROLS = 57,
+ OLECMDID_FOCUSVIEWCONTROLSQUERY = 58,
+ OLECMDID_SHOWPAGEACTIONMENU = 59,
+ OLECMDID_ADDTRAVELENTRY = 60,
+ OLECMDID_UPDATETRAVELENTRY = 61,
+ OLECMDID_UPDATEBACKFORWARDSTATE = 62,
+ OLECMDID_OPTICAL_ZOOM = 63,
+ OLECMDID_OPTICAL_GETZOOMRANGE = 64,
+ OLECMDID_WINDOWSTATECHANGED = 65,
+ OLECMDID_ACTIVEXINSTALLSCOPE = 66,
+ OLECMDID_UPDATETRAVELENTRY_DATARECOVERY = 67,
+ OLECMDID_SHOWTASKDLG = 68,
+ OLECMDID_POPSTATEEVENT = 69,
+ OLECMDID_VIEWPORT_MODE = 70,
+ OLECMDID_LAYOUT_VIEWPORT_WIDTH = 71,
+ OLECMDID_VISUAL_VIEWPORT_EXCLUDE_BOTTOM = 72,
+ OLECMDID_USER_OPTICAL_ZOOM = 73,
+ OLECMDID_PAGEAVAILABLE = 74,
+ OLECMDID_GETUSERSCALABLE = 75,
+ OLECMDID_UPDATE_CARET = 76,
+ OLECMDID_ENABLE_VISIBILITY = 77,
+ OLECMDID_MEDIA_PLAYBACK = 78,
+ OLECMDID_SETFAVICON = 79,
+ OLECMDID_SET_HOST_FULLSCREENMODE = 80,
+ OLECMDID_EXITFULLSCREEN = 81,
+ OLECMDID_SCROLLCOMPLETE = 82,
+ OLECMDID_ONBEFOREUNLOAD = 83,
+ OLECMDID_SHOWMESSAGE_BLOCKABLE = 84,
+ OLECMDID_SHOWTASKDLG_BLOCKABLE = 85,
+}}
+RIDL!{#[uuid(0xb722bccb, 0x4e68, 0x101b, 0xa2, 0xbc, 0x00, 0xaa, 0x00, 0x40, 0x47, 0x70)]
+interface IOleCommandTarget(IOleCommandTargetVtbl): IUnknown(IUnknownVtbl) {
+ fn QueryStatus(
+ pguidCmdGroup: *const GUID,
+ cCmds: ULONG,
+ prgCmds: *mut OLECMD,
+ pCmdText: *mut OLECMDTEXT,
+ ) -> HRESULT,
+ fn Exec(
+ pguidCmdGroup: *const GUID,
+ nCmdID: DWORD,
+ nCmdexecopt: DWORD,
+ pvaIn: *mut VARIANT,
+ pvaOut: *mut VARIANT,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/documenttarget.rs b/vendor/winapi/src/um/documenttarget.rs
new file mode 100644
index 000000000..b4cc1ae0c
--- /dev/null
+++ b/vendor/winapi/src/um/documenttarget.rs
@@ -0,0 +1,24 @@
+// 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.
+// TODO:It is a minimal implementation.
+use ctypes::c_void;
+use shared::basetsd::UINT32;
+use shared::guiddef::{GUID, REFGUID, REFIID};
+use shared::ntdef::HRESULT;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+RIDL!{#[uuid(0x1b8efec4, 0x3019, 0x4c27, 0x96, 0x4e, 0x36, 0x72, 0x02, 0x15, 0x69, 0x06)]
+interface IPrintDocumentPackageTarget(IPrintDocumentPackageTargetVtbl): IUnknown(IUnknownVtbl) {
+ fn GetPackageTargetTypes(
+ targetCount: *mut UINT32,
+ targetTypes: *mut *mut GUID,
+ ) -> HRESULT,
+ fn GetPackageTarget(
+ guidTargetType: REFGUID,
+ riid: REFIID,
+ ppvTarget: *mut *mut c_void,
+ ) -> HRESULT,
+ fn Cancel() -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/dot1x.rs b/vendor/winapi/src/um/dot1x.rs
new file mode 100644
index 000000000..326b7fc9b
--- /dev/null
+++ b/vendor/winapi/src/um/dot1x.rs
@@ -0,0 +1,151 @@
+// 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::guiddef::GUID;
+use shared::minwindef::{BOOL, DWORD};
+use um::eaptypes::EAP_METHOD_TYPE;
+use um::l2cmn::L2_REASON_CODE_ONEX_BASE;
+use um::winnt::HANDLE;
+ENUM!{enum ONEX_AUTH_IDENTITY {
+ OneXAuthIdentityNone = 0,
+ OneXAuthIdentityMachine = 1,
+ OneXAuthIdentityUser = 2,
+ OneXAuthIdentityExplicitUser = 3,
+ OneXAuthIdentityGuest = 4,
+ OneXAuthIdentityInvalid = 5,
+}}
+pub type PONEX_AUTH_IDENTITY = *mut ONEX_AUTH_IDENTITY;
+ENUM!{enum ONEX_AUTH_STATUS {
+ OneXAuthNotStarted = 0,
+ OneXAuthInProgress = 1,
+ OneXAuthNoAuthenticatorFound = 2,
+ OneXAuthSuccess = 3,
+ OneXAuthFailure = 4,
+ OneXAuthInvalid = 5,
+}}
+pub type PONEX_AUTH_STATUS = *mut ONEX_AUTH_STATUS;
+ENUM!{enum ONEX_REASON_CODE {
+ ONEX_REASON_CODE_SUCCESS = 0,
+ ONEX_REASON_START = L2_REASON_CODE_ONEX_BASE,
+ ONEX_UNABLE_TO_IDENTIFY_USER = 327681,
+ ONEX_IDENTITY_NOT_FOUND = 327682,
+ ONEX_UI_DISABLED = 327683,
+ ONEX_UI_FAILURE = 327684,
+ ONEX_EAP_FAILURE_RECEIVED = 327685,
+ ONEX_AUTHENTICATOR_NO_LONGER_PRESENT = 327686,
+ ONEX_NO_RESPONSE_TO_IDENTITY = 327687,
+ ONEX_PROFILE_VERSION_NOT_SUPPORTED = 327688,
+ ONEX_PROFILE_INVALID_LENGTH = 327689,
+ ONEX_PROFILE_DISALLOWED_EAP_TYPE = 327690,
+ ONEX_PROFILE_INVALID_EAP_TYPE_OR_FLAG = 327691,
+ ONEX_PROFILE_INVALID_ONEX_FLAGS = 327692,
+ ONEX_PROFILE_INVALID_TIMER_VALUE = 327693,
+ ONEX_PROFILE_INVALID_SUPPLICANT_MODE = 327694,
+ ONEX_PROFILE_INVALID_AUTH_MODE = 327695,
+ ONEX_PROFILE_INVALID_EAP_CONNECTION_PROPERTIES = 327696,
+ ONEX_UI_CANCELLED = 327697,
+ ONEX_PROFILE_INVALID_EXPLICIT_CREDENTIALS = 327698,
+ ONEX_PROFILE_EXPIRED_EXPLICIT_CREDENTIALS = 327699,
+ ONEX_UI_NOT_PERMITTED = 327700,
+}}
+pub type PONEX_REASON_CODE = *mut ONEX_REASON_CODE;
+ENUM!{enum ONEX_NOTIFICATION_TYPE {
+ OneXPublicNotificationBase = 0,
+ OneXNotificationTypeResultUpdate = 1,
+ OneXNotificationTypeAuthRestarted = 2,
+ OneXNotificationTypeEventInvalid = 3,
+ OneXNumNotifications = OneXNotificationTypeEventInvalid,
+}}
+pub type PONEX_NOTIFICATION_TYPE = *mut ONEX_NOTIFICATION_TYPE;
+ENUM!{enum ONEX_AUTH_RESTART_REASON {
+ OneXRestartReasonPeerInitiated = 0,
+ OneXRestartReasonMsmInitiated = 1,
+ OneXRestartReasonOneXHeldStateTimeout = 2,
+ OneXRestartReasonOneXAuthTimeout = 3,
+ OneXRestartReasonOneXConfigurationChanged = 4,
+ OneXRestartReasonOneXUserChanged = 5,
+ OneXRestartReasonQuarantineStateChanged = 6,
+ OneXRestartReasonAltCredsTrial = 7,
+ OneXRestartReasonInvalid = 8,
+}}
+pub type PONEX_AUTH_RESTART_REASON = *mut ONEX_AUTH_RESTART_REASON;
+STRUCT!{struct ONEX_VARIABLE_BLOB {
+ dwSize: DWORD,
+ dwOffset: DWORD,
+}}
+pub type PONEX_VARIABLE_BLOB = *mut ONEX_VARIABLE_BLOB;
+STRUCT!{struct ONEX_AUTH_PARAMS {
+ fUpdatePending: BOOL,
+ oneXConnProfile: ONEX_VARIABLE_BLOB,
+ authIdentity: ONEX_AUTH_IDENTITY,
+ dwQuarantineState: DWORD,
+ Bitfields: DWORD,
+ dwSessionId: DWORD,
+ hUserToken: HANDLE,
+ OneXUserProfile: ONEX_VARIABLE_BLOB,
+ Identity: ONEX_VARIABLE_BLOB,
+ UserName: ONEX_VARIABLE_BLOB,
+ Domain: ONEX_VARIABLE_BLOB,
+}}
+BITFIELD!{ONEX_AUTH_PARAMS Bitfields: DWORD [
+ fSessionId set_fSessionId[0..1],
+ fhUserToken set_fhUserToken[1..2],
+ fOnexUserProfile set_fOnexUserProfile[2..3],
+ fIdentity set_fIdentity[3..4],
+ fUserName set_fUserName[4..5],
+ fDomain set_fDomain[5..6],
+]}
+pub type PONEX_AUTH_PARAMS = *mut ONEX_AUTH_PARAMS;
+STRUCT!{struct ONEX_EAP_ERROR {
+ dwWinError: DWORD,
+ type_: EAP_METHOD_TYPE,
+ dwReasonCode: DWORD,
+ rootCauseGuid: GUID,
+ repairGuid: GUID,
+ helpLinkGuid: GUID,
+ Bitfields: DWORD,
+ RootCauseString: ONEX_VARIABLE_BLOB,
+ RepairString: ONEX_VARIABLE_BLOB,
+}}
+BITFIELD!{ONEX_EAP_ERROR Bitfields: DWORD [
+ fRootCauseString set_fRootCauseString[0..1],
+ fRepairString set_fRepairString[1..2],
+]}
+pub type PONEX_EAP_ERROR = *mut ONEX_EAP_ERROR;
+STRUCT!{struct ONEX_STATUS {
+ authStatus: ONEX_AUTH_STATUS,
+ dwReason: DWORD,
+ dwError: DWORD,
+}}
+pub type PONEX_STATUS = *mut ONEX_STATUS;
+ENUM!{enum ONEX_EAP_METHOD_BACKEND_SUPPORT {
+ OneXEapMethodBackendSupportUnknown = 0,
+ OneXEapMethodBackendSupported = 1,
+ OneXEapMethodBackendUnsupported = 2,
+}}
+STRUCT!{struct ONEX_RESULT_UPDATE_DATA {
+ oneXStatus: ONEX_STATUS,
+ BackendSupport: ONEX_EAP_METHOD_BACKEND_SUPPORT,
+ fBackendEngaged: BOOL,
+ Bitfields: DWORD,
+ authParams: ONEX_VARIABLE_BLOB,
+ eapError: ONEX_VARIABLE_BLOB,
+}}
+BITFIELD!{ONEX_RESULT_UPDATE_DATA Bitfields: DWORD [
+ fOneXAuthParams set_fOneXAuthParams[0..1],
+ fEapError set_fEapError[1..2],
+]}
+pub type PONEX_RESULT_UPDATE_DATA = *mut ONEX_RESULT_UPDATE_DATA;
+STRUCT!{struct ONEX_USER_INFO {
+ authIdentity: ONEX_AUTH_IDENTITY,
+ Bitfields: DWORD,
+ UserName: ONEX_VARIABLE_BLOB,
+ DomainName: ONEX_VARIABLE_BLOB,
+}}
+BITFIELD!{ONEX_USER_INFO Bitfields: DWORD [
+ fUserName set_fUserName[0..1],
+ fDomainName set_fDomainName[1..2],
+]}
+pub type PONEX_USER_INFO = *mut ONEX_USER_INFO;
diff --git a/vendor/winapi/src/um/dpa_dsa.rs b/vendor/winapi/src/um/dpa_dsa.rs
new file mode 100644
index 000000000..21a3f4b3b
--- /dev/null
+++ b/vendor/winapi/src/um/dpa_dsa.rs
@@ -0,0 +1,283 @@
+// 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 ctypes::{c_int, c_void};
+use shared::basetsd::INT_PTR;
+use shared::minwindef::{BOOL, DWORD, LPARAM, UINT};
+use um::winnt::{HANDLE, HRESULT, LPCWSTR, LPWSTR, PVOID, ULONGLONG};
+pub const DA_LAST: c_int = 0x7FFFFFFF;
+pub const DA_ERR: c_int = -1;
+FN!{stdcall PFNDAENUMCALLBACK(
+ p: *mut c_void,
+ pData: *mut c_void,
+) -> c_int}
+FN!{stdcall PFNDAENUMCALLBACKCONST(
+ p: *const c_void,
+ pData: *mut c_void,
+) -> c_int}
+FN!{stdcall PFNDACOMPARE(
+ p1: *mut c_void,
+ p2: *mut c_void,
+ lParam: LPARAM,
+) -> c_int}
+FN!{stdcall PFNDACOMPARECONST(
+ p1: *const c_void,
+ p2: *const c_void,
+ lParam: LPARAM,
+) -> c_int}
+pub enum DSA {}
+pub type HDSA = *mut DSA;
+extern "system" {
+ pub fn DSA_Create(
+ cbItem: c_int,
+ cItemGrow: c_int,
+ ) -> HDSA;
+ pub fn DSA_Destroy(
+ hdsa: HDSA,
+ ) -> BOOL;
+ pub fn DSA_DestroyCallback(
+ hdsa: HDSA,
+ pfnCB: PFNDAENUMCALLBACK,
+ pData: *mut c_void,
+ );
+ pub fn DSA_DeleteItem(
+ hdsa: HDSA,
+ i: c_int,
+ ) -> BOOL;
+ pub fn DSA_DeleteAllItems(
+ hdsa: HDSA,
+ ) -> BOOL;
+ pub fn DSA_EnumCallback(
+ hdsa: HDSA,
+ pfnCB: PFNDAENUMCALLBACK,
+ pData: *mut c_void,
+ );
+ pub fn DSA_InsertItem(
+ hdsa: HDSA,
+ i: c_int,
+ pitem: *const c_void,
+ ) -> c_int;
+ pub fn DSA_GetItemPtr(
+ hdsa: HDSA,
+ i: c_int,
+ ) -> PVOID;
+ pub fn DSA_GetItem(
+ hdsa: HDSA,
+ i: c_int,
+ pitem: *mut c_void,
+ ) -> BOOL;
+ pub fn DSA_SetItem(
+ hdsa: HDSA,
+ i: c_int,
+ pitem: *const c_void,
+ ) -> BOOL;
+}
+#[inline]
+pub unsafe fn DSA_GetItemCount(hdsa: HDSA) -> c_int {
+ *(hdsa as *mut c_int)
+}
+#[inline]
+pub unsafe fn DSA_AppendItem(hdsa: HDSA, pitem: *const c_void) -> c_int {
+ DSA_InsertItem(hdsa, DA_LAST, pitem)
+}
+extern "system" {
+ pub fn DSA_Clone(
+ hdsa: HDSA,
+ ) -> HDSA;
+ pub fn DSA_GetSize(
+ hdsa: HDSA,
+ ) -> ULONGLONG;
+ pub fn DSA_Sort(
+ pdsa: HDSA,
+ pfnCompare: PFNDACOMPARE,
+ lParam: LPARAM,
+ ) -> BOOL;
+}
+pub const DSA_APPEND: c_int = DA_LAST;
+pub const DSA_ERR: c_int = DA_ERR;
+pub type PFNDSAENUMCALLBACK = PFNDAENUMCALLBACK;
+pub type PFNDSAENUMCALLBACKCONST = PFNDAENUMCALLBACKCONST;
+pub type PFNDSACOMPARE = PFNDACOMPARE;
+pub type PFNDSACOMPARECONST = PFNDACOMPARECONST;
+pub enum DPA {}
+pub type HDPA = *mut DPA;
+extern "system" {
+ pub fn DPA_Create(
+ cItemGrow: c_int,
+ ) -> HDPA;
+ pub fn DPA_CreateEx(
+ cpGrow: c_int,
+ hheap: HANDLE,
+ ) -> HDPA;
+ pub fn DPA_Clone(
+ hdpa: HDPA,
+ hdpaNew: HDPA,
+ ) -> HDPA;
+ pub fn DPA_Destroy(
+ hdpa: HDPA,
+ ) -> BOOL;
+ pub fn DPA_DestroyCallback(
+ hdpa: HDPA,
+ pfnCB: PFNDAENUMCALLBACK,
+ pData: *mut c_void,
+ );
+ pub fn DPA_DeletePtr(
+ hdpa: HDPA,
+ i: c_int,
+ ) -> PVOID;
+ pub fn DPA_DeleteAllPtrs(
+ hdpa: HDPA,
+ ) -> BOOL;
+ pub fn DPA_EnumCallback(
+ hdpa: HDPA,
+ pfnCB: PFNDAENUMCALLBACK,
+ pData: *mut c_void,
+ );
+ pub fn DPA_Grow(
+ hdpa: HDPA,
+ cp: c_int,
+ ) -> BOOL;
+ pub fn DPA_InsertPtr(
+ hdpa: HDPA,
+ i: c_int,
+ p: *mut c_void,
+ ) -> c_int;
+ pub fn DPA_SetPtr(
+ hdpa: HDPA,
+ i: c_int,
+ p: *mut c_void,
+ ) -> BOOL;
+ pub fn DPA_GetPtr(
+ hdpa: HDPA,
+ i: INT_PTR,
+ ) -> PVOID;
+ pub fn DPA_GetPtrIndex(
+ hdpa: HDPA,
+ p: *const c_void,
+ ) -> c_int;
+}
+#[inline]
+pub unsafe fn DPA_GetPtrCount(hdpa: HDPA) -> c_int {
+ *(hdpa as *mut c_int)
+}
+#[inline]
+pub unsafe fn DPA_SetPtrCount(hdpa: HDPA, cItems: c_int) {
+ *(hdpa as *mut c_int) = cItems;
+}
+#[inline]
+pub unsafe fn DPA_FastDeleteLastPtr(hdpa: HDPA) -> c_int {
+ *(hdpa as *mut c_int) -= 1;
+ *(hdpa as *mut c_int)
+}
+#[inline]
+pub unsafe fn DPA_AppendPtr(hdpa: HDPA, pitem: *mut c_void) -> c_int {
+ DPA_InsertPtr(hdpa, DA_LAST, pitem)
+}
+extern "system" {
+ pub fn DPA_GetSize(
+ hdpa: HDPA,
+ ) -> ULONGLONG;
+ pub fn DPA_Sort(
+ hdpa: HDPA,
+ pfnCompare: PFNDACOMPARE,
+ lParam: LPARAM,
+ ) -> BOOL;
+}
+STRUCT!{struct DPASTREAMINFO {
+ iPos: c_int,
+ pvItem: *mut c_void,
+}}
+pub enum IStream {}
+FN!{stdcall PFNDPASTREAM(
+ pinfo: *mut DPASTREAMINFO,
+ pstream: *mut IStream,
+ pvInstData: *mut c_void,
+) -> HRESULT}
+extern "system" {
+ pub fn DPA_LoadStream(
+ phdpa: *mut HDPA,
+ pfn: PFNDPASTREAM,
+ pstream: *mut IStream,
+ pvInstData: *mut c_void,
+ ) -> HRESULT;
+ pub fn DPA_SaveStream(
+ hdpa: HDPA,
+ pfn: PFNDPASTREAM,
+ pstream: *mut IStream,
+ pvInstData: *mut c_void,
+ ) -> HRESULT;
+}
+pub const DPAM_SORTED: DWORD = 0x00000001;
+pub const DPAM_NORMAL: DWORD = 0x00000002;
+pub const DPAM_UNION: DWORD = 0x00000004;
+pub const DPAM_INTERSECT: DWORD = 0x00000008;
+FN!{stdcall PFNDPAMERGE(
+ uMsg: UINT,
+ pvDest: *mut c_void,
+ pvSrc: *mut c_void,
+ lParam: LPARAM,
+) -> *mut c_void}
+FN!{stdcall PFNDPAMERGECONST(
+ uMsg: UINT,
+ pvDest: *const c_void,
+ pvSrc: *const c_void,
+ lParam: LPARAM,
+) -> *const c_void}
+pub const DPAMM_MERGE: UINT = 1;
+pub const DPAMM_DELETE: UINT = 2;
+pub const DPAMM_INSERT: UINT = 3;
+extern "system" {
+ pub fn DPA_Merge(
+ hdpaDest: HDPA,
+ hdpaSrc: HDPA,
+ dwFlags: DWORD,
+ pfnCompare: PFNDACOMPARE,
+ pfnMerge: PFNDPAMERGE,
+ lParam: LPARAM,
+ ) -> BOOL;
+}
+pub const DPAS_SORTED: UINT = 0x0001;
+pub const DPAS_INSERTBEFORE: UINT = 0x0002;
+pub const DPAS_INSERTAFTER: UINT = 0x0004;
+extern "system" {
+ pub fn DPA_Search(
+ hdpa: HDPA,
+ pFind: *mut c_void,
+ iStart: c_int,
+ pfnCompare: PFNDACOMPARE,
+ lParam: LPARAM,
+ options: UINT,
+ ) -> c_int;
+}
+#[inline]
+pub unsafe fn DPA_SortedInsertPtr(
+ hdpa: HDPA,
+ pFind: *mut c_void,
+ iStart: c_int,
+ pfnCompare: PFNDACOMPARE,
+ lParam: LPARAM,
+ options: UINT,
+ pitem: *mut c_void,
+) -> c_int {
+ DPA_InsertPtr(
+ hdpa,
+ DPA_Search(
+ hdpa, pFind, iStart, pfnCompare, lParam, DPAS_SORTED | options,
+ ),
+ pitem,
+ )
+}
+pub const DPA_APPEND: c_int = DA_LAST;
+pub const DPA_ERR: c_int = DA_ERR;
+pub type PFNDPAENUMCALLBACK = PFNDAENUMCALLBACK;
+pub type PFNDPAENUMCALLBACKCONST = PFNDAENUMCALLBACKCONST;
+pub type PFNDPACOMPARE = PFNDACOMPARE;
+pub type PFNDPACOMPARECONST = PFNDACOMPARECONST;
+extern "system" {
+ pub fn Str_SetPtrW(
+ ppsz: *mut LPWSTR,
+ psz: LPCWSTR,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/dpapi.rs b/vendor/winapi/src/um/dpapi.rs
new file mode 100644
index 000000000..42f5824f5
--- /dev/null
+++ b/vendor/winapi/src/um/dpapi.rs
@@ -0,0 +1,100 @@
+// 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.
+//! Data Protection API Prototypes and Definitions
+use shared::minwindef::{BOOL, BYTE, DWORD, LPVOID};
+use shared::windef::HWND;
+use um::wincrypt::DATA_BLOB;
+use um::winnt::{LPCWSTR, LPWSTR, PSID, PVOID};
+pub const szFORCE_KEY_PROTECTION: &'static str = "ForceKeyProtection";
+pub const dwFORCE_KEY_PROTECTION_DISABLED: DWORD = 0x0;
+pub const dwFORCE_KEY_PROTECTION_USER_SELECT: DWORD = 0x1;
+pub const dwFORCE_KEY_PROTECTION_HIGH: DWORD = 0x2;
+STRUCT!{struct CRYPTPROTECT_PROMPTSTRUCT {
+ cbSize: DWORD,
+ dwPromptFlags: DWORD,
+ hwndApp: HWND,
+ szPrompt: LPCWSTR,
+}}
+pub type PCRYPTPROTECT_PROMPTSTRUCT = *mut CRYPTPROTECT_PROMPTSTRUCT;
+pub const CRYPTPROTECT_PROMPT_ON_UNPROTECT: DWORD = 0x1;
+pub const CRYPTPROTECT_PROMPT_ON_PROTECT: DWORD = 0x2;
+pub const CRYPTPROTECT_PROMPT_RESERVED: DWORD = 0x04;
+pub const CRYPTPROTECT_PROMPT_STRONG: DWORD = 0x08;
+pub const CRYPTPROTECT_PROMPT_REQUIRE_STRONG: DWORD = 0x10;
+pub const CRYPTPROTECT_UI_FORBIDDEN: DWORD = 0x1;
+pub const CRYPTPROTECT_LOCAL_MACHINE: DWORD = 0x4;
+pub const CRYPTPROTECT_CRED_SYNC: DWORD = 0x8;
+pub const CRYPTPROTECT_AUDIT: DWORD = 0x10;
+pub const CRYPTPROTECT_NO_RECOVERY: DWORD = 0x20;
+pub const CRYPTPROTECT_VERIFY_PROTECTION: DWORD = 0x40;
+pub const CRYPTPROTECT_CRED_REGENERATE: DWORD = 0x80;
+pub const CRYPTPROTECT_FIRST_RESERVED_FLAGVAL: DWORD = 0x0FFFFFFF;
+pub const CRYPTPROTECT_LAST_RESERVED_FLAGVAL: DWORD = 0xFFFFFFFF;
+extern "system" {
+ pub fn CryptProtectData(
+ pDataIn: *mut DATA_BLOB,
+ szDataDescr: LPCWSTR,
+ pOptionalEntropy: *mut DATA_BLOB,
+ pvReserved: PVOID,
+ pPromptStruct: *mut CRYPTPROTECT_PROMPTSTRUCT,
+ dwFlags: DWORD,
+ pDataOut: *mut DATA_BLOB,
+ ) -> BOOL;
+ pub fn CryptUnprotectData(
+ pDataIn: *mut DATA_BLOB,
+ ppszDataDescr: *mut LPWSTR,
+ pOptionalEntropy: *mut DATA_BLOB,
+ pvReserved: PVOID,
+ pPromptStruct: *mut CRYPTPROTECT_PROMPTSTRUCT,
+ dwFlags: DWORD,
+ pDataOut: *mut DATA_BLOB,
+ ) -> BOOL;
+ pub fn CryptProtectDataNoUI(
+ pDataIn: *mut DATA_BLOB,
+ szDataDescr: LPCWSTR,
+ pOptionalEntropy: *mut DATA_BLOB,
+ pvReserved: PVOID,
+ pPromptStruct: *mut CRYPTPROTECT_PROMPTSTRUCT,
+ dwFlags: DWORD,
+ pbOptionalPassword: *const BYTE,
+ cbOptionalPassword: DWORD,
+ pDataOut: *mut DATA_BLOB,
+ ) -> BOOL;
+ pub fn CryptUnprotectDataNoUI(
+ pDataIn: *mut DATA_BLOB,
+ ppszDataDescr: *mut LPWSTR,
+ pOptionalEntropy: *mut DATA_BLOB,
+ pvReserved: PVOID,
+ pPromptStruct: *mut CRYPTPROTECT_PROMPTSTRUCT,
+ dwFlags: DWORD,
+ pbOptionalPassword: *const BYTE,
+ cbOptionalPassword: DWORD,
+ pDataOut: *mut DATA_BLOB,
+ ) -> BOOL;
+ pub fn CryptUpdateProtectedState(
+ pOldSid: PSID,
+ pwszOldPassword: LPCWSTR,
+ dwFlags: DWORD,
+ pdwSuccessCount: *mut DWORD,
+ pdwFailureCount: *mut DWORD,
+ ) -> BOOL;
+}
+pub const CRYPTPROTECTMEMORY_BLOCK_SIZE: DWORD = 16;
+pub const CRYPTPROTECTMEMORY_SAME_PROCESS: DWORD = 0x00;
+pub const CRYPTPROTECTMEMORY_CROSS_PROCESS: DWORD = 0x01;
+pub const CRYPTPROTECTMEMORY_SAME_LOGON: DWORD = 0x02;
+extern "system" {
+ pub fn CryptProtectMemory(
+ pDataIn: LPVOID,
+ cbDataIn: DWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptUnprotectMemory(
+ pDataIn: LPVOID,
+ cbDataIn: DWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/dsgetdc.rs b/vendor/winapi/src/um/dsgetdc.rs
new file mode 100644
index 000000000..860a652ec
--- /dev/null
+++ b/vendor/winapi/src/um/dsgetdc.rs
@@ -0,0 +1,267 @@
+// 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.
+//! This file contains structures, function prototypes, and definitions for the DsGetDcName API.
+use shared::guiddef::GUID;
+use shared::minwindef::{DWORD, PULONG, ULONG};
+use shared::ws2def::{LPSOCKET_ADDRESS, PSOCKET_ADDRESS};
+use um::ntsecapi::PLSA_FOREST_TRUST_INFORMATION;
+use um::winnt::{HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PHANDLE, PSID};
+pub const DS_FORCE_REDISCOVERY: ULONG = 0x00000001;
+pub const DS_DIRECTORY_SERVICE_REQUIRED: ULONG = 0x00000010;
+pub const DS_DIRECTORY_SERVICE_PREFERRED: ULONG = 0x00000020;
+pub const DS_GC_SERVER_REQUIRED: ULONG = 0x00000040;
+pub const DS_PDC_REQUIRED: ULONG = 0x00000080;
+pub const DS_BACKGROUND_ONLY: ULONG = 0x00000100;
+pub const DS_IP_REQUIRED: ULONG = 0x00000200;
+pub const DS_KDC_REQUIRED: ULONG = 0x00000400;
+pub const DS_TIMESERV_REQUIRED: ULONG = 0x00000800;
+pub const DS_WRITABLE_REQUIRED: ULONG = 0x00001000;
+pub const DS_GOOD_TIMESERV_PREFERRED: ULONG = 0x00002000;
+pub const DS_AVOID_SELF: ULONG = 0x00004000;
+pub const DS_ONLY_LDAP_NEEDED: ULONG = 0x00008000;
+pub const DS_IS_FLAT_NAME: ULONG = 0x00010000;
+pub const DS_IS_DNS_NAME: ULONG = 0x00020000;
+pub const DS_TRY_NEXTCLOSEST_SITE: ULONG = 0x00040000;
+pub const DS_DIRECTORY_SERVICE_6_REQUIRED: ULONG = 0x00080000;
+pub const DS_WEB_SERVICE_REQUIRED: ULONG = 0x00100000;
+pub const DS_DIRECTORY_SERVICE_8_REQUIRED: ULONG = 0x00200000;
+pub const DS_DIRECTORY_SERVICE_9_REQUIRED: ULONG = 0x00400000;
+pub const DS_DIRECTORY_SERVICE_10_REQUIRED: ULONG = 0x00800000;
+pub const DS_RETURN_DNS_NAME: ULONG = 0x40000000;
+pub const DS_RETURN_FLAT_NAME: ULONG = 0x80000000;
+pub const DSGETDC_VALID_FLAGS: ULONG = DS_FORCE_REDISCOVERY | DS_DIRECTORY_SERVICE_REQUIRED
+ | DS_DIRECTORY_SERVICE_PREFERRED | DS_GC_SERVER_REQUIRED | DS_PDC_REQUIRED | DS_BACKGROUND_ONLY
+ | DS_IP_REQUIRED | DS_KDC_REQUIRED | DS_TIMESERV_REQUIRED | DS_WRITABLE_REQUIRED
+ | DS_GOOD_TIMESERV_PREFERRED | DS_AVOID_SELF | DS_ONLY_LDAP_NEEDED | DS_IS_FLAT_NAME
+ | DS_IS_DNS_NAME | DS_TRY_NEXTCLOSEST_SITE | DS_DIRECTORY_SERVICE_6_REQUIRED
+ | DS_DIRECTORY_SERVICE_8_REQUIRED | DS_DIRECTORY_SERVICE_9_REQUIRED
+ | DS_DIRECTORY_SERVICE_10_REQUIRED | DS_WEB_SERVICE_REQUIRED | DS_RETURN_FLAT_NAME
+ | DS_RETURN_DNS_NAME;
+STRUCT!{struct DOMAIN_CONTROLLER_INFOA {
+ DomainControllerName: LPSTR,
+ DomainControllerAddress: LPSTR,
+ DomainControllerAddressType: ULONG,
+ DomainGuid: GUID,
+ DomainName: LPSTR,
+ DnsForestName: LPSTR,
+ Flags: ULONG,
+ DcSiteName: LPSTR,
+ ClientSiteName: LPSTR,
+}}
+pub type PDOMAIN_CONTROLLER_INFOA = *mut DOMAIN_CONTROLLER_INFOA;
+STRUCT!{struct DOMAIN_CONTROLLER_INFOW {
+ DomainControllerName: LPWSTR,
+ DomainControllerAddress: LPWSTR,
+ DomainControllerAddressType: ULONG,
+ DomainGuid: GUID,
+ DomainName: LPWSTR,
+ DnsForestName: LPWSTR,
+ Flags: ULONG,
+ DcSiteName: LPWSTR,
+ ClientSiteName: LPWSTR,
+}}
+pub type PDOMAIN_CONTROLLER_INFOW = *mut DOMAIN_CONTROLLER_INFOW;
+pub const DS_INET_ADDRESS: ULONG = 1;
+pub const DS_NETBIOS_ADDRESS: ULONG = 2;
+pub const DS_PDC_FLAG: ULONG = 0x00000001;
+pub const DS_GC_FLAG: ULONG = 0x00000004;
+pub const DS_LDAP_FLAG: ULONG = 0x00000008;
+pub const DS_DS_FLAG: ULONG = 0x00000010;
+pub const DS_KDC_FLAG: ULONG = 0x00000020;
+pub const DS_TIMESERV_FLAG: ULONG = 0x00000040;
+pub const DS_CLOSEST_FLAG: ULONG = 0x00000080;
+pub const DS_WRITABLE_FLAG: ULONG = 0x00000100;
+pub const DS_GOOD_TIMESERV_FLAG: ULONG = 0x00000200;
+pub const DS_NDNC_FLAG: ULONG = 0x00000400;
+pub const DS_SELECT_SECRET_DOMAIN_6_FLAG: ULONG = 0x00000800;
+pub const DS_FULL_SECRET_DOMAIN_6_FLAG: ULONG = 0x00001000;
+pub const DS_WS_FLAG: ULONG = 0x00002000;
+pub const DS_DS_8_FLAG: ULONG = 0x00004000;
+pub const DS_DS_9_FLAG: ULONG = 0x00008000;
+pub const DS_DS_10_FLAG: ULONG = 0x00010000;
+pub const DS_PING_FLAGS: ULONG = 0x000FFFFF;
+pub const DS_DNS_CONTROLLER_FLAG: ULONG = 0x20000000;
+pub const DS_DNS_DOMAIN_FLAG: ULONG = 0x40000000;
+pub const DS_DNS_FOREST_FLAG: ULONG = 0x80000000;
+extern "system" {
+ pub fn DsGetDcNameA(
+ ComputerName: LPCSTR,
+ DomainName: LPCSTR,
+ DomainGuid: *mut GUID,
+ SiteName: LPCSTR,
+ Flags: ULONG,
+ DomainControllerInfo: *mut PDOMAIN_CONTROLLER_INFOA,
+ ) -> DWORD;
+ pub fn DsGetDcNameW(
+ ComputerName: LPCWSTR,
+ DomainName: LPCWSTR,
+ DomainGuid: *mut GUID,
+ SiteName: LPCWSTR,
+ Flags: ULONG,
+ DomainControllerInfo: *mut PDOMAIN_CONTROLLER_INFOW,
+ ) -> DWORD;
+ pub fn DsGetSiteNameA(
+ ComputerName: LPCSTR,
+ SiteName: *mut LPSTR,
+ ) -> DWORD;
+ pub fn DsGetSiteNameW(
+ ComputerName: LPCWSTR,
+ SiteName: *mut LPWSTR,
+ ) -> DWORD;
+ pub fn DsValidateSubnetNameW(
+ SubnetName: LPCWSTR,
+ ) -> DWORD;
+ pub fn DsValidateSubnetNameA(
+ SubnetName: LPCSTR,
+ ) -> DWORD;
+ pub fn DsAddressToSiteNamesW(
+ ComputerName: LPCWSTR,
+ EntryCount: DWORD,
+ SocketAddresses: PSOCKET_ADDRESS,
+ SiteNames: *mut *mut LPWSTR,
+ ) -> DWORD;
+ pub fn DsAddressToSiteNamesA(
+ ComputerName: LPCSTR,
+ EntryCount: DWORD,
+ SocketAddresses: PSOCKET_ADDRESS,
+ SiteNames: *mut *mut LPSTR,
+ ) -> DWORD;
+ pub fn DsAddressToSiteNamesExW(
+ ComputerName: LPCWSTR,
+ EntryCount: DWORD,
+ SocketAddresses: PSOCKET_ADDRESS,
+ SiteNames: *mut *mut LPWSTR,
+ SubnetNames: *mut *mut LPWSTR,
+ ) -> DWORD;
+ pub fn DsAddressToSiteNamesExA(
+ ComputerName: LPCSTR,
+ EntryCount: DWORD,
+ SocketAddresses: PSOCKET_ADDRESS,
+ SiteNames: *mut *mut LPSTR,
+ SubnetNames: *mut *mut LPSTR,
+ ) -> DWORD;
+}
+pub const DS_DOMAIN_IN_FOREST: ULONG = 0x0001;
+pub const DS_DOMAIN_DIRECT_OUTBOUND: ULONG = 0x0002;
+pub const DS_DOMAIN_TREE_ROOT: ULONG = 0x0004;
+pub const DS_DOMAIN_PRIMARY: ULONG = 0x0008;
+pub const DS_DOMAIN_NATIVE_MODE: ULONG = 0x0010;
+pub const DS_DOMAIN_DIRECT_INBOUND: ULONG = 0x0020;
+pub const DS_DOMAIN_VALID_FLAGS: ULONG = DS_DOMAIN_IN_FOREST | DS_DOMAIN_DIRECT_OUTBOUND
+ | DS_DOMAIN_TREE_ROOT | DS_DOMAIN_PRIMARY | DS_DOMAIN_NATIVE_MODE | DS_DOMAIN_DIRECT_INBOUND;
+STRUCT!{struct DS_DOMAIN_TRUSTSW {
+ NetbiosDomainName: LPWSTR,
+ DnsDomainName: LPWSTR,
+ Flags: ULONG,
+ ParentIndex: ULONG,
+ TrustType: ULONG,
+ TrustAttributes: ULONG,
+ DomainSid: PSID,
+ DomainGuid: GUID,
+}}
+pub type PDS_DOMAIN_TRUSTSW = *mut DS_DOMAIN_TRUSTSW;
+STRUCT!{struct DS_DOMAIN_TRUSTSA {
+ NetbiosDomainName: LPSTR,
+ DnsDomainName: LPSTR,
+ Flags: ULONG,
+ ParentIndex: ULONG,
+ TrustType: ULONG,
+ TrustAttributes: ULONG,
+ DomainSid: PSID,
+ DomainGuid: GUID,
+}}
+pub type PDS_DOMAIN_TRUSTSA = *mut DS_DOMAIN_TRUSTSA;
+extern "system" {
+ pub fn DsEnumerateDomainTrustsW(
+ ServerName: LPWSTR,
+ Flags: ULONG,
+ Domains: *mut PDS_DOMAIN_TRUSTSW,
+ DomainCount: PULONG,
+ ) -> DWORD;
+ pub fn DsEnumerateDomainTrustsA(
+ ServerName: LPSTR,
+ Flags: ULONG,
+ Domains: *mut PDS_DOMAIN_TRUSTSA,
+ DomainCount: PULONG,
+ ) -> DWORD;
+ pub fn DsGetForestTrustInformationW(
+ ServerName: LPCWSTR,
+ TrustedDomainName: LPCWSTR,
+ Flags: DWORD,
+ ForestTrustInfo: *mut PLSA_FOREST_TRUST_INFORMATION,
+ ) -> DWORD;
+ pub fn DsMergeForestTrustInformationW(
+ DomainName: LPCWSTR,
+ NewForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION,
+ OldForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION,
+ MergedForestTrustInfo: *mut PLSA_FOREST_TRUST_INFORMATION,
+ ) -> DWORD;
+ pub fn DsGetDcSiteCoverageW(
+ ServerName: LPCWSTR,
+ EntryCount: PULONG,
+ SiteNames: *mut *mut LPWSTR,
+ ) -> DWORD;
+ pub fn DsGetDcSiteCoverageA(
+ ServerName: LPCSTR,
+ EntryCount: PULONG,
+ SiteNames: *mut *mut LPSTR,
+ ) -> DWORD;
+ pub fn DsDeregisterDnsHostRecordsW(
+ ServerName: LPWSTR,
+ DnsDomainName: LPWSTR,
+ DomainGuid: *mut GUID,
+ DsaGuid: *mut GUID,
+ DnsHostName: LPWSTR,
+ ) -> DWORD;
+ pub fn DsDeregisterDnsHostRecordsA(
+ ServerName: LPSTR,
+ DnsDomainName: LPSTR,
+ DomainGuid: *mut GUID,
+ DsaGuid: *mut GUID,
+ DnsHostName: LPSTR,
+ ) -> DWORD;
+}
+pub const DS_ONLY_DO_SITE_NAME: ULONG = 0x01;
+pub const DS_NOTIFY_AFTER_SITE_RECORDS: ULONG = 0x02;
+pub const DS_OPEN_VALID_OPTION_FLAGS: ULONG = DS_ONLY_DO_SITE_NAME
+ | DS_NOTIFY_AFTER_SITE_RECORDS;
+pub const DS_OPEN_VALID_FLAGS: ULONG = DS_FORCE_REDISCOVERY | DS_ONLY_LDAP_NEEDED
+ | DS_KDC_REQUIRED | DS_PDC_REQUIRED | DS_GC_SERVER_REQUIRED | DS_WRITABLE_REQUIRED;
+extern "system" {
+ pub fn DsGetDcOpenW(
+ DnsName: LPCWSTR,
+ OptionFlags: ULONG,
+ SiteName: LPCWSTR,
+ DomainGuid: *mut GUID,
+ DnsForestName: LPCWSTR,
+ DcFlags: ULONG,
+ RetGetDcContext: PHANDLE,
+ ) -> DWORD;
+ pub fn DsGetDcOpenA(
+ DnsName: LPCSTR,
+ OptionFlags: ULONG,
+ SiteName: LPCSTR,
+ DomainGuid: *mut GUID,
+ DnsForestName: LPCSTR,
+ DcFlags: ULONG,
+ RetGetDcContext: PHANDLE,
+ ) -> DWORD;
+ pub fn DsGetDcNextA(
+ GetDcContextHandle: HANDLE,
+ SockAddressCount: PULONG,
+ SockAddresses: *mut LPSOCKET_ADDRESS,
+ DnsHostName: *mut LPSTR,
+ ) -> DWORD;
+ pub fn DsGetDcNextW(
+ GetDcContextHandle: HANDLE,
+ SockAddressCount: PULONG,
+ SockAddresses: *mut LPSOCKET_ADDRESS,
+ DnsHostName: *mut LPWSTR,
+ ) -> DWORD;
+ pub fn DsGetDcCloseW(
+ GetDcContextHandle: HANDLE,
+ );
+}
diff --git a/vendor/winapi/src/um/dsound.rs b/vendor/winapi/src/um/dsound.rs
new file mode 100644
index 000000000..9c23bbf53
--- /dev/null
+++ b/vendor/winapi/src/um/dsound.rs
@@ -0,0 +1,342 @@
+// 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.
+//! DSound procedure declarations, constant definitions and macros
+use shared::guiddef::{GUID, LPCGUID, LPGUID};
+use shared::minwindef::{DWORD, LPDWORD, LPLONG, LPVOID};
+use shared::windef::HWND;
+use shared::winerror::{E_FAIL, S_OK};
+use um::mmsystem::{LPCWAVEFORMATEX, LPWAVEFORMATEX};
+use um::unknwnbase::{IUnknown, IUnknownVtbl, LPUNKNOWN};
+use um::winnt::{HRESULT, LONG};
+DEFINE_GUID!{CLSID_DirectSound,
+ 0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
+DEFINE_GUID!{CLSID_DirectSound8,
+ 0x3901cc3f, 0x84b5, 0x4fa4, 0xba, 0x35, 0xaa, 0x81, 0x72, 0xb8, 0xa0, 0x9b}
+DEFINE_GUID!{CLSID_DirectSoundCapture,
+ 0xb0210780, 0x89cd, 0x11d0, 0xaf, 0x08, 0x00, 0xa0, 0xc9, 0x25, 0xcd, 0x16}
+DEFINE_GUID!{CLSID_DirectSoundCapture8,
+ 0xe4bcac13, 0x7f99, 0x4908, 0x9a, 0x8e, 0x74, 0xe3, 0xbf, 0x24, 0xb6, 0xe1}
+DEFINE_GUID!{CLSID_DirectSoundFullDuplex,
+ 0xfea4300c, 0x7959, 0x4147, 0xb2, 0x6a, 0x23, 0x77, 0xb9, 0xe7, 0xa9, 0x1d}
+DEFINE_GUID!{DSDEVID_DefaultPlayback,
+ 0xdef00000, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03}
+DEFINE_GUID!{DSDEVID_DefaultCapture,
+ 0xdef00001, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03}
+DEFINE_GUID!{DSDEVID_DefaultVoicePlayback,
+ 0xdef00002, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03}
+DEFINE_GUID!{DSDEVID_DefaultVoiceCapture,
+ 0xdef00003, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03}
+STRUCT!{struct DSCAPS {
+ dwSize: DWORD,
+ dwFlags: DWORD,
+ dwMinSecondarySampleRate: DWORD,
+ dwMaxSecondarySampleRate: DWORD,
+ dwPrimaryBuffers: DWORD,
+ dwMaxHwMixingAllBuffers: DWORD,
+ dwMaxHwMixingStaticBuffers: DWORD,
+ dwMaxHwMixingStreamingBuffers: DWORD,
+ dwFreeHwMixingAllBuffers: DWORD,
+ dwFreeHwMixingStaticBuffers: DWORD,
+ dwFreeHwMixingStreamingBuffers: DWORD,
+ dwMaxHw3DAllBuffers: DWORD,
+ dwMaxHw3DStaticBuffers: DWORD,
+ dwMaxHw3DStreamingBuffers: DWORD,
+ dwFreeHw3DAllBuffers: DWORD,
+ dwFreeHw3DStaticBuffers: DWORD,
+ dwFreeHw3DStreamingBuffers: DWORD,
+ dwTotalHwMemBytes: DWORD,
+ dwFreeHwMemBytes: DWORD,
+ dwMaxContigFreeHwMemBytes: DWORD,
+ dwUnlockTransferRateHwBuffers: DWORD,
+ dwPlayCpuOverheadSwBuffers: DWORD,
+ dwReserved1: DWORD,
+ dwReserved2: DWORD,
+}}
+pub type LPDSCAPS = *mut DSCAPS;
+STRUCT!{struct DSBCAPS {
+ dwSize: DWORD,
+ dwFlags: DWORD,
+ dwBufferBytes: DWORD,
+ dwUnlockTransferRate: DWORD,
+ dwPlayCpuOverhead: DWORD,
+}}
+pub type LPDSBCAPS = *mut DSBCAPS;
+STRUCT!{struct DSBUFFERDESC {
+ dwSize: DWORD,
+ dwFlags: DWORD,
+ dwBufferBytes: DWORD,
+ dwReserved: DWORD,
+ lpwfxFormat: LPWAVEFORMATEX,
+ guid3DAlgorithm: GUID,
+}}
+pub type LPCDSBUFFERDESC = *const DSBUFFERDESC;
+RIDL!{#[uuid(0x279afa85, 0x4981, 0x11ce, 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60)]
+interface IDirectSoundBuffer(IDirectSoundBufferVtbl): IUnknown(IUnknownVtbl) {
+ fn GetCaps(
+ pDSBufferCaps: LPDSBCAPS,
+ ) -> HRESULT,
+ fn GetCurrentPosition(
+ pdwCurrentPlayCursor: LPDWORD,
+ pdwCurrentWriteCursor: LPDWORD,
+ ) -> HRESULT,
+ fn GetFormat(
+ pwfxFormat: LPWAVEFORMATEX,
+ dwSizeAllocated: DWORD,
+ pdwSizeWritten: LPDWORD,
+ ) -> HRESULT,
+ fn GetVolume(
+ plVolume: LPLONG,
+ ) -> HRESULT,
+ fn GetPan(
+ plPan: LPLONG,
+ ) -> HRESULT,
+ fn GetFrequency(
+ pdwFrequency: LPDWORD,
+ ) -> HRESULT,
+ fn GetStatus(
+ pdwStatus: LPDWORD,
+ ) -> HRESULT,
+ fn Initialize(
+ pDirectSound: LPDIRECTSOUND,
+ pcDSBufferDesc: LPCDSBUFFERDESC,
+ ) -> HRESULT,
+ fn Lock(
+ dwOffset: DWORD,
+ dwBytes: DWORD,
+ ppvAudioPtr1: *mut LPVOID,
+ pdwAudioBytes1: LPDWORD,
+ ppvAudioPtr2: *mut LPVOID,
+ pdwAudioBytes2: LPDWORD,
+ dwFlags: DWORD,
+ ) -> HRESULT,
+ fn Play(
+ dwReserved1: DWORD,
+ dwPriority: DWORD,
+ dwFlags: DWORD,
+ ) -> HRESULT,
+ fn SetCurrentPosition(
+ dwNewPosition: DWORD,
+ ) -> HRESULT,
+ fn SetFormat(
+ pcfxFormat: LPCWAVEFORMATEX,
+ ) -> HRESULT,
+ fn SetVolume(
+ lVolume: LONG,
+ ) -> HRESULT,
+ fn SetPan(
+ lPan: LONG,
+ ) -> HRESULT,
+ fn SetFrequency(
+ dwFrequency: DWORD,
+ ) -> HRESULT,
+ fn Stop() -> HRESULT,
+ fn Unlock(
+ pvAudioPtr1: LPVOID,
+ dwAudioBytes1: DWORD,
+ pvAudioPtr2: LPVOID,
+ dwAudioBytes2: DWORD,
+ ) -> HRESULT,
+ fn Restore() -> HRESULT,
+}}
+pub type LPDIRECTSOUNDBUFFER = *mut IDirectSoundBuffer;
+DEFINE_GUID!{IID_IReferenceClock,
+ 0x56a86897, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}
+DEFINE_GUID!{IID_IDirectSound,
+ 0x279afa83, 0x4981, 0x11ce, 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60}
+RIDL!{#[uuid(0x279afa83, 0x4981, 0x11ce, 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60)]
+interface IDirectSound(IDirectSoundVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateSoundBuffer(
+ pcDSBufferDesc: LPCDSBUFFERDESC,
+ ppDSBuffer: *mut LPDIRECTSOUNDBUFFER,
+ pUnkOuter: LPUNKNOWN,
+ ) -> HRESULT,
+ fn GetCaps(
+ pDSCaps: LPDSCAPS,
+ ) -> HRESULT,
+ fn DuplicateSoundBuffer(
+ pDSBufferOriginal: LPDIRECTSOUNDBUFFER,
+ ppDSBufferDuplicate: *mut LPDIRECTSOUNDBUFFER,
+ ) -> HRESULT,
+ fn SetCooperativeLevel(
+ hWnd: HWND,
+ dwLevel: DWORD,
+ ) -> HRESULT,
+ fn Compact() -> HRESULT,
+ fn GetSpeakerConfig(
+ pdwSpeakerConfig: LPDWORD,
+ ) -> HRESULT,
+ fn SetSpeakerConfig(
+ dwSpeakerConfig: DWORD,
+ ) -> HRESULT,
+ fn Initialize(
+ pcGuidDevice: LPCGUID,
+ ) -> HRESULT,
+}}
+pub type LPDIRECTSOUND = *mut IDirectSound;
+DEFINE_GUID!{IID_IDirectSound8,
+ 0xc50a7e93, 0xf395, 0x4834, 0x9e, 0xf6, 0x7f, 0xa9, 0x9d, 0xe5, 0x09, 0x66}
+DEFINE_GUID!{IID_IDirectSoundBuffer,
+ 0x279afa85, 0x4981, 0x11ce, 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60}
+DEFINE_GUID!{IID_IDirectSoundBuffer8,
+ 0x6825a449, 0x7524, 0x4d82, 0x92, 0x0f, 0x50, 0xe3, 0x6a, 0xb3, 0xab, 0x1e}
+DEFINE_GUID!{GUID_All_Objects,
+ 0xaa114de5, 0xc262, 0x4169, 0xa1, 0xc8, 0x23, 0xd6, 0x98, 0xcc, 0x73, 0xb5}
+DEFINE_GUID!{IID_IDirectSound3DListener,
+ 0x279afa84, 0x4981, 0x11ce, 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60}
+DEFINE_GUID!{IID_IDirectSound3DBuffer,
+ 0x279afa86, 0x4981, 0x11ce, 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60}
+DEFINE_GUID!{IID_IDirectSoundCapture,
+ 0xb0210781, 0x89cd, 0x11d0, 0xaf, 0x08, 0x00, 0xa0, 0xc9, 0x25, 0xcd, 0x16}
+DEFINE_GUID!{IID_IDirectSoundCaptureBuffer,
+ 0xb0210782, 0x89cd, 0x11d0, 0xaf, 0x08, 0x00, 0xa0, 0xc9, 0x25, 0xcd, 0x16}
+DEFINE_GUID!{IID_IDirectSoundCaptureBuffer8,
+ 0x00990df4, 0x0dbb, 0x4872, 0x83, 0x3e, 0x6d, 0x30, 0x3e, 0x80, 0xae, 0xb6}
+DEFINE_GUID!{IID_IDirectSoundNotify,
+ 0xb0210783, 0x89cd, 0x11d0, 0xaf, 0x08, 0x00, 0xa0, 0xc9, 0x25, 0xcd, 0x16}
+DEFINE_GUID!{IID_IKsPropertySet,
+ 0x31efac30, 0x515c, 0x11d0, 0xa9, 0xaa, 0x00, 0xaa, 0x00, 0x61, 0xbe, 0x93}
+DEFINE_GUID!{IID_IDirectSoundFXGargle,
+ 0xd616f352, 0xd622, 0x11ce, 0xaa, 0xc5, 0x00, 0x20, 0xaf, 0x0b, 0x99, 0xa3}
+DEFINE_GUID!{IID_IDirectSoundFXChorus,
+ 0x880842e3, 0x145f, 0x43e6, 0xa9, 0x34, 0xa7, 0x18, 0x06, 0xe5, 0x05, 0x47}
+DEFINE_GUID!{IID_IDirectSoundFXFlanger,
+ 0x903e9878, 0x2c92, 0x4072, 0x9b, 0x2c, 0xea, 0x68, 0xf5, 0x39, 0x67, 0x83}
+DEFINE_GUID!{IID_IDirectSoundFXEcho,
+ 0x8bd28edf, 0x50db, 0x4e92, 0xa2, 0xbd, 0x44, 0x54, 0x88, 0xd1, 0xed, 0x42}
+DEFINE_GUID!{IID_IDirectSoundFXDistortion,
+ 0x8ecf4326, 0x455f, 0x4d8b, 0xbd, 0xa9, 0x8d, 0x5d, 0x3e, 0x9e, 0x3e, 0x0b}
+DEFINE_GUID!{IID_IDirectSoundFXCompressor,
+ 0x4bbd1154, 0x62f6, 0x4e2c, 0xa1, 0x5c, 0xd3, 0xb6, 0xc4, 0x17, 0xf7, 0xa0}
+DEFINE_GUID!{IID_IDirectSoundFXParamEq,
+ 0xc03ca9fe, 0xfe90, 0x4204, 0x80, 0x78, 0x82, 0x33, 0x4c, 0xd1, 0x77, 0xda}
+DEFINE_GUID!{IID_IDirectSoundFXI3DL2Reverb,
+ 0x4b166a6a, 0x0d66, 0x43f3, 0x80, 0xe3, 0xee, 0x62, 0x80, 0xde, 0xe1, 0xa4}
+DEFINE_GUID!{IID_IDirectSoundFXWavesReverb,
+ 0x46858c3a, 0x0dc6, 0x45e3, 0xb7, 0x60, 0xd4, 0xee, 0xf1, 0x6c, 0xb3, 0x25}
+DEFINE_GUID!{IID_IDirectSoundCaptureFXAec,
+ 0xad74143d, 0x903d, 0x4ab7, 0x80, 0x66, 0x28, 0xd3, 0x63, 0x03, 0x6d, 0x65}
+DEFINE_GUID!{IID_IDirectSoundCaptureFXNoiseSuppress,
+ 0xed311e41, 0xfbae, 0x4175, 0x96, 0x25, 0xcd, 0x08, 0x54, 0xf6, 0x93, 0xca}
+DEFINE_GUID!{IID_IDirectSoundFullDuplex,
+ 0xedcb4c7a, 0xdaab, 0x4216, 0xa4, 0x2e, 0x6c, 0x50, 0x59, 0x6d, 0xdc, 0x1d}
+pub const DS_OK: HRESULT = S_OK;
+pub const DSERR_GENERIC: HRESULT = E_FAIL;
+pub const DSSCL_NORMAL: DWORD = 0x00000001;
+pub const DSSCL_PRIORITY: DWORD = 0x00000002;
+pub const DSSCL_EXCLUSIVE: DWORD = 0x00000003;
+pub const DSSCL_WRITEPRIMARY: DWORD = 0x00000004;
+pub const DSBCAPS_PRIMARYBUFFER: DWORD = 0x00000001;
+pub const DSBCAPS_STATIC: DWORD = 0x00000002;
+pub const DSBCAPS_LOCHARDWARE: DWORD = 0x00000004;
+pub const DSBCAPS_LOCSOFTWARE: DWORD = 0x00000008;
+pub const DSBCAPS_CTRL3D: DWORD = 0x00000010;
+pub const DSBCAPS_CTRLFREQUENCY: DWORD = 0x00000020;
+pub const DSBCAPS_CTRLPAN: DWORD = 0x00000040;
+pub const DSBCAPS_CTRLVOLUME: DWORD = 0x00000080;
+pub const DSBCAPS_CTRLPOSITIONNOTIFY: DWORD = 0x00000100;
+pub const DSBCAPS_CTRLFX: DWORD = 0x00000200;
+pub const DSBCAPS_STICKYFOCUS: DWORD = 0x00004000;
+pub const DSBCAPS_GLOBALFOCUS: DWORD = 0x00008000;
+pub const DSBCAPS_GETCURRENTPOSITION2: DWORD = 0x00010000;
+pub const DSBCAPS_MUTE3DATMAXDISTANCE: DWORD = 0x00020000;
+pub const DSBCAPS_LOCDEFER: DWORD = 0x00040000;
+pub const DSBCAPS_TRUEPLAYPOSITION: DWORD = 0x00080000;
+pub const DSBPLAY_LOOPING: DWORD = 0x00000001;
+pub const DSBPLAY_LOCHARDWARE: DWORD = 0x00000002;
+pub const DSBPLAY_LOCSOFTWARE: DWORD = 0x00000004;
+pub const DSBPLAY_TERMINATEBY_TIME: DWORD = 0x00000008;
+pub const DSBPLAY_TERMINATEBY_DISTANCE: DWORD = 0x000000010;
+pub const DSBPLAY_TERMINATEBY_PRIORITY: DWORD = 0x000000020;
+extern "system" {
+ pub fn DirectSoundCreate(
+ pcGuidDevice: LPCGUID,
+ ppDS: *mut LPDIRECTSOUND,
+ pUnkOuter: LPUNKNOWN,
+ ) -> HRESULT;
+ // pub fn DirectSoundEnumerateA(
+ // pDSEnumCallback: LPDSENUMCALLBACKA,
+ // pContext: LPVOID,
+ // ) -> HRESULT;
+ // pub fn DirectSoundEnumerateW(
+ // pDSEnumCallback: LPDSENUMCALLBACKW,
+ // pContext: LPVOID,
+ // ) -> HRESULT;
+ // pub fn DirectSoundCaptureCreate(
+ // pcGuidDevice: LPCGUID,
+ // ppDSC: *mut LPDIRECTSOUNDCAPTURE,
+ // pUnkOuter: LPUNKNOWN,
+ // ) -> HRESULT;
+ // pub fn DirectSoundCaptureEnumerateA(
+ // pDSEnumCallback: LPDSENUMCALLBACKA,
+ // pContext: LPVOID,
+ // ) -> HRESULT;
+ // pub fn DirectSoundCaptureEnumerateW(
+ // pDSEnumCallback: LPDSENUMCALLBACKW,
+ // pContext: LPVOID,
+ // ) -> HRESULT;
+ // pub fn DirectSoundCreate8(
+ // pcGuidDevice: LPCGUID,
+ // ppDS8: *mut LPDIRECTSOUND8,
+ // pUnkOuter: LPUNKNOWN,
+ // ) -> HRESULT;
+ // pub fn DirectSoundCaptureCreate8(
+ // pcGuidDevice: LPCGUID,
+ // ppDSC8: *mut LPDIRECTSOUNDCAPTURE8,
+ // pUnkOuter: LPUNKNOWN,
+ // ) -> HRESULT;
+ // pub fn DirectSoundFullDuplexCreate(
+ // pcGuidCaptureDevice: LPCGUID,
+ // pcGuidRenderDevice: LPCGUID,
+ // pcDSCBufferDesc: LPCDSCBUFFERDESC,
+ // pcDSBufferDesc: LPCDSBUFFERDESC,
+ // hWnd: HWND,
+ // dwLevel: DWORD,
+ // ppDSFD: *mut LPDIRECTSOUNDFULLDUPLEX,
+ // ppDSCBuffer8: *mut LPDIRECTSOUNDCAPTUREBUFFER8,
+ // ppDSBuffer8: *mut LPDIRECTSOUNDBUFFER8,
+ // pUnkOuter: LPUNKNOWN,
+ // ) -> HRESULT;
+ pub fn GetDeviceID(
+ pGuidSrc: LPCGUID,
+ pGuidDest: LPGUID,
+ ) -> HRESULT;
+}
+DEFINE_GUID!{DS3DALG_NO_VIRTUALIZATION,
+ 0xc241333f, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x00, 0xc0, 0x4f, 0xc2, 0x8a, 0xca}
+DEFINE_GUID!{DS3DALG_HRTF_FULL,
+ 0xc2413340, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x00, 0xc0, 0x4f, 0xc2, 0x8a, 0xca}
+DEFINE_GUID!{DS3DALG_HRTF_LIGHT,
+ 0xc2413342, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x00, 0xc0, 0x4f, 0xc2, 0x8a, 0xca}
+DEFINE_GUID!{GUID_DSFX_STANDARD_GARGLE,
+ 0xdafd8210, 0x5711, 0x4b91, 0x9f, 0xe3, 0xf7, 0x5b, 0x7a, 0xe2, 0x79, 0xbf}
+DEFINE_GUID!{GUID_DSFX_STANDARD_CHORUS,
+ 0xefe6629c, 0x81f7, 0x4281, 0xbd, 0x91, 0xc9, 0xd6, 0x04, 0xa9, 0x5a, 0xf6}
+DEFINE_GUID!{GUID_DSFX_STANDARD_FLANGER,
+ 0xefca3d92, 0xdfd8, 0x4672, 0xa6, 0x03, 0x74, 0x20, 0x89, 0x4b, 0xad, 0x98}
+DEFINE_GUID!{GUID_DSFX_STANDARD_ECHO,
+ 0xef3e932c, 0xd40b, 0x4f51, 0x8c, 0xcf, 0x3f, 0x98, 0xf1, 0xb2, 0x9d, 0x5d}
+DEFINE_GUID!{GUID_DSFX_STANDARD_DISTORTION,
+ 0xef114c90, 0xcd1d, 0x484e, 0x96, 0xe5, 0x09, 0xcf, 0xaf, 0x91, 0x2a, 0x21}
+DEFINE_GUID!{GUID_DSFX_STANDARD_COMPRESSOR,
+ 0xef011f79, 0x4000, 0x406d, 0x87, 0xaf, 0xbf, 0xfb, 0x3f, 0xc3, 0x9d, 0x57}
+DEFINE_GUID!{GUID_DSFX_STANDARD_PARAMEQ,
+ 0x120ced89, 0x3bf4, 0x4173, 0xa1, 0x32, 0x3c, 0xb4, 0x06, 0xcf, 0x32, 0x31}
+DEFINE_GUID!{GUID_DSFX_STANDARD_I3DL2REVERB,
+ 0xef985e71, 0xd5c7, 0x42d4, 0xba, 0x4d, 0x2d, 0x07, 0x3e, 0x2e, 0x96, 0xf4}
+DEFINE_GUID!{GUID_DSFX_WAVES_REVERB,
+ 0x87fc0268, 0x9a55, 0x4360, 0x95, 0xaa, 0x00, 0x4a, 0x1d, 0x9d, 0xe2, 0x6c}
+DEFINE_GUID!{GUID_DSCFX_CLASS_AEC,
+ 0xbf963d80, 0xc559, 0x11d0, 0x8a, 0x2b, 0x00, 0xa0, 0xc9, 0x25, 0x5a, 0xc1}
+DEFINE_GUID!{GUID_DSCFX_MS_AEC,
+ 0xcdebb919, 0x379a, 0x488a, 0x87, 0x65, 0xf5, 0x3c, 0xfd, 0x36, 0xde, 0x40}
+DEFINE_GUID!{GUID_DSCFX_SYSTEM_AEC,
+ 0x1c22c56d, 0x9879, 0x4f5b, 0xa3, 0x89, 0x27, 0x99, 0x6d, 0xdc, 0x28, 0x10}
+DEFINE_GUID!{GUID_DSCFX_CLASS_NS,
+ 0xe07f903f, 0x62fd, 0x4e60, 0x8c, 0xdd, 0xde, 0xa7, 0x23, 0x66, 0x65, 0xb5}
+DEFINE_GUID!{GUID_DSCFX_MS_NS,
+ 0x11c5c73b, 0x66e9, 0x4ba1, 0xa0, 0xba, 0xe8, 0x14, 0xc6, 0xee, 0xd9, 0x2d}
+DEFINE_GUID!{GUID_DSCFX_SYSTEM_NS,
+ 0x5ab0882e, 0x7274, 0x4516, 0x87, 0x7d, 0x4e, 0xee, 0x99, 0xba, 0x4f, 0xd0}
diff --git a/vendor/winapi/src/um/dsrole.rs b/vendor/winapi/src/um/dsrole.rs
new file mode 100644
index 000000000..b644d7994
--- /dev/null
+++ b/vendor/winapi/src/um/dsrole.rs
@@ -0,0 +1,66 @@
+// 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.
+//! Contains public interfaces to query the network roles of workstations, servers, and DCs
+use shared::guiddef::GUID;
+use shared::minwindef::{DWORD, PBYTE, ULONG};
+use um::winnt::{LPCWSTR, LPWSTR, PVOID};
+ENUM!{enum DSROLE_MACHINE_ROLE {
+ DsRole_RoleStandaloneWorkstation,
+ DsRole_RoleMemberWorkstation,
+ DsRole_RoleStandaloneServer,
+ DsRole_RoleMemberServer,
+ DsRole_RoleBackupDomainController,
+ DsRole_RolePrimaryDomainController,
+}}
+ENUM!{enum DSROLE_SERVER_STATE {
+ DsRoleServerUnknown = 0,
+ DsRoleServerPrimary,
+ DsRoleServerBackup,
+}}
+pub type PDSROLE_SERVER_STATE = *mut DSROLE_SERVER_STATE;
+ENUM!{enum DSROLE_PRIMARY_DOMAIN_INFO_LEVEL {
+ DsRolePrimaryDomainInfoBasic = 1,
+ DsRoleUpgradeStatus,
+ DsRoleOperationState,
+}}
+pub const DSROLE_PRIMARY_DS_RUNNING: ULONG = 0x00000001;
+pub const DSROLE_PRIMARY_DS_MIXED_MODE: ULONG = 0x00000002;
+pub const DSROLE_UPGRADE_IN_PROGRESS: ULONG = 0x00000004;
+pub const DSROLE_PRIMARY_DS_READONLY: ULONG = 0x00000008;
+pub const DSROLE_PRIMARY_DOMAIN_GUID_PRESENT: ULONG = 0x01000000;
+STRUCT!{struct DSROLE_PRIMARY_DOMAIN_INFO_BASIC {
+ MachineRole: DSROLE_MACHINE_ROLE,
+ Flags: ULONG,
+ DomainNameFlat: LPWSTR,
+ DomainNameDns: LPWSTR,
+ DomainForestName: LPWSTR,
+ DomainGuid: GUID,
+}}
+pub type PDSROLE_PRIMARY_DOMAIN_INFO_BASIC = *mut DSROLE_PRIMARY_DOMAIN_INFO_BASIC;
+STRUCT!{struct DSROLE_UPGRADE_STATUS_INFO {
+ OperationState: ULONG,
+ PreviousServerState: DSROLE_SERVER_STATE,
+}}
+pub type PDSROLE_UPGRADE_STATUS_INFO = *mut DSROLE_UPGRADE_STATUS_INFO;
+ENUM!{enum DSROLE_OPERATION_STATE {
+ DsRoleOperationIdle = 0,
+ DsRoleOperationActive,
+ DsRoleOperationNeedReboot,
+}}
+STRUCT!{struct DSROLE_OPERATION_STATE_INFO {
+ OperationState: DSROLE_OPERATION_STATE,
+}}
+pub type PDSROLE_OPERATION_STATE_INFO = *mut DSROLE_OPERATION_STATE_INFO;
+extern "system" {
+ pub fn DsRoleGetPrimaryDomainInformation(
+ lpServer: LPCWSTR,
+ InfoLevel: DSROLE_PRIMARY_DOMAIN_INFO_LEVEL,
+ Buffer: *mut PBYTE,
+ ) -> DWORD;
+ pub fn DsRoleFreeMemory(
+ Buffer: PVOID,
+ );
+}
diff --git a/vendor/winapi/src/um/dvp.rs b/vendor/winapi/src/um/dvp.rs
new file mode 100644
index 000000000..5760732e0
--- /dev/null
+++ b/vendor/winapi/src/um/dvp.rs
@@ -0,0 +1,25 @@
+// 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.
+DEFINE_GUID!{IID_IDDVideoPortContainer,
+ 0x6c142760, 0xa733, 0x11ce, 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60}
+DEFINE_GUID!{IID_IDirectDrawVideoPort,
+ 0xb36d93e0, 0x2b43, 0x11cf, 0xa2, 0xde, 0x00, 0xaa, 0x00, 0xb9, 0x33, 0x56}
+DEFINE_GUID!{IID_IDirectDrawVideoPortNotify,
+ 0xa655fb94, 0x0589, 0x4e57, 0xb3, 0x33, 0x56, 0x7a, 0x89, 0x46, 0x8c, 0x88}
+DEFINE_GUID!{DDVPTYPE_E_HREFH_VREFH,
+ 0x54f39980, 0xda60, 0x11cf, 0x9b, 0x06, 0x00, 0xa0, 0xc9, 0x03, 0xa3, 0xb8}
+DEFINE_GUID!{DDVPTYPE_E_HREFH_VREFL,
+ 0x92783220, 0xda60, 0x11cf, 0x9b, 0x06, 0x00, 0xa0, 0xc9, 0x03, 0xa3, 0xb8}
+DEFINE_GUID!{DDVPTYPE_E_HREFL_VREFH,
+ 0xa07a02e0, 0xda60, 0x11cf, 0x9b, 0x06, 0x00, 0xa0, 0xc9, 0x03, 0xa3, 0xb8}
+DEFINE_GUID!{DDVPTYPE_E_HREFL_VREFL,
+ 0xe09c77e0, 0xda60, 0x11cf, 0x9b, 0x06, 0x00, 0xa0, 0xc9, 0x03, 0xa3, 0xb8}
+DEFINE_GUID!{DDVPTYPE_CCIR656,
+ 0xfca326a0, 0xda60, 0x11cf, 0x9b, 0x06, 0x00, 0xa0, 0xc9, 0x03, 0xa3, 0xb8}
+DEFINE_GUID!{DDVPTYPE_BROOKTREE,
+ 0x1352a560, 0xda61, 0x11cf, 0x9b, 0x06, 0x00, 0xa0, 0xc9, 0x03, 0xa3, 0xb8}
+DEFINE_GUID!{DDVPTYPE_PHILIPS,
+ 0x332cf160, 0xda61, 0x11cf, 0x9b, 0x06, 0x00, 0xa0, 0xc9, 0x03, 0xa3, 0xb8}
diff --git a/vendor/winapi/src/um/dwmapi.rs b/vendor/winapi/src/um/dwmapi.rs
new file mode 100644
index 000000000..475473f9a
--- /dev/null
+++ b/vendor/winapi/src/um/dwmapi.rs
@@ -0,0 +1,295 @@
+// 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.
+//! Procedure declarations, constant definitions, and macros for the NLS component.
+use shared::basetsd::UINT32;
+use shared::minwindef::{
+ BOOL, BYTE, DWORD, HRGN, INT, LPARAM, LPCVOID, LPVOID, LRESULT, UINT, WPARAM
+};
+use shared::windef::{HBITMAP, HWND, POINT, PSIZE, RECT};
+use um::uxtheme::MARGINS;
+use um::winnt::{HANDLE, HRESULT, ULONGLONG};
+pub const DWM_BB_ENABLE: DWORD = 0x00000001;
+pub const DWM_BB_BLURREGION: DWORD = 0x00000002;
+pub const DWM_BB_TRANSITIONONMAXIMIZED: DWORD = 0x00000004;
+STRUCT!{#[repr(packed)] struct DWM_BLURBEHIND {
+ dwFlags: DWORD,
+ fEnable: BOOL,
+ hRgnBlur: HRGN,
+ fTransitionOnMaximized: BOOL,
+}}
+ENUM!{enum DWMWINDOWATTRIBUTE {
+ DWMWA_NCRENDERING_ENABLED = 1,
+ DWMWA_NCRENDERING_POLICY = 2,
+ DWMWA_TRANSITIONS_FORCEDISABLED = 3,
+ DWMWA_ALLOW_NCPAINT = 4,
+ DWMWA_CAPTION_BUTTON_BOUNDS = 5,
+ DWMWA_NONCLIENT_RTL_LAYOUT = 6,
+ DWMWA_FORCE_ICONIC_REPRESENTATION = 7,
+ DWMWA_FLIP3D_POLICY = 8,
+ DWMWA_EXTENDED_FRAME_BOUNDS = 9,
+ DWMWA_HAS_ICONIC_BITMAP = 10,
+ DWMWA_DISALLOW_PEEK = 11,
+ DWMWA_EXCLUDED_FROM_PEEK = 12,
+ DWMWA_CLOAK = 13,
+ DWMWA_CLOAKED = 14,
+ DWMWA_FREEZE_REPRESENTATION = 15,
+ DWMWA_LAST = 16,
+}}
+ENUM!{enum DWMNCRENDERINGPOLICY {
+ DWMNCRP_USEWINDOWSTYLE = 0,
+ DWMNCRP_DISABLED = 1,
+ DWMNCRP_ENABLED = 2,
+ DWMNCRP_LAST = 3,
+}}
+ENUM!{enum DWMFLIP3DWINDOWPOLICY {
+ DWMFLIP3D_DEFAULT = 0,
+ DWMFLIP3D_EXCLUDEBELOW = 1,
+ DWMFLIP3D_EXCLUDEABOVE = 2,
+ DWMFLIP3D_LAST = 3,
+}}
+pub const DWM_CLOAKED_APP: u32 = 0x00000001;
+pub const DWM_CLOAKED_SHELL: u32 = 0x00000002;
+pub const DWM_CLOAKED_INHERITED: u32 = 0x00000004;
+pub type HTHUMBNAIL = HANDLE;
+pub type PHTHUMBNAIL = *mut HTHUMBNAIL;
+pub const DWM_TNP_RECTDESTINATION: DWORD = 0x00000001;
+pub const DWM_TNP_RECTSOURCE: DWORD = 0x00000002;
+pub const DWM_TNP_OPACITY: DWORD = 0x00000004;
+pub const DWM_TNP_VISIBLE: DWORD = 0x00000008;
+pub const DWM_TNP_SOURCECLIENTAREAONLY: DWORD = 0x00000010;
+STRUCT!{#[repr(packed)] struct DWM_THUMBNAIL_PROPERTIES {
+ dwFlags: DWORD,
+ rcDestination: RECT,
+ rcSource: RECT,
+ opacity: BYTE,
+ fVisible: BOOL,
+ fSourceClientAreaOnly: BOOL,
+}}
+pub type PDWM_THUMBNAIL_PROPERTIES = *mut DWM_THUMBNAIL_PROPERTIES;
+pub type DWM_FRAME_COUNT = ULONGLONG;
+pub type QPC_TIME = ULONGLONG;
+STRUCT!{#[repr(packed)] struct UNSIGNED_RATIO {
+ uiNumerator: UINT32,
+ uiDenominator: UINT32,
+}}
+STRUCT!{#[repr(packed)] struct DWM_TIMING_INFO {
+ cbSize: UINT32,
+ rateRefresh: UNSIGNED_RATIO,
+ qpcRefreshPeriod: QPC_TIME,
+ rateCompose: UNSIGNED_RATIO,
+ qpcVBlank: QPC_TIME,
+ cRefresh: DWM_FRAME_COUNT,
+ cDXRefresh: UINT,
+ qpcCompose: QPC_TIME,
+ cFrame: DWM_FRAME_COUNT,
+ cDXPresent: UINT,
+ cRefreshFrame: DWM_FRAME_COUNT,
+ cFrameSubmitted: DWM_FRAME_COUNT,
+ cDXPresentSubmitted: UINT,
+ cFrameConfirmed: DWM_FRAME_COUNT,
+ cDXPresentConfirmed: UINT,
+ cRefreshConfirmed: DWM_FRAME_COUNT,
+ cDXRefreshConfirmed: UINT,
+ cFramesLate: DWM_FRAME_COUNT,
+ cFramesOutstanding: UINT,
+ cFrameDisplayed: DWM_FRAME_COUNT,
+ qpcFrameDisplayed: QPC_TIME,
+ cRefreshFrameDisplayed: DWM_FRAME_COUNT,
+ cFrameComplete: DWM_FRAME_COUNT,
+ qpcFrameComplete: QPC_TIME,
+ cFramePending: DWM_FRAME_COUNT,
+ qpcFramePending: QPC_TIME,
+ cFramesDisplayed: DWM_FRAME_COUNT,
+ cFramesComplete: DWM_FRAME_COUNT,
+ cFramesPending: DWM_FRAME_COUNT,
+ cFramesAvailable: DWM_FRAME_COUNT,
+ cFramesDropped: DWM_FRAME_COUNT,
+ cFramesMissed: DWM_FRAME_COUNT,
+ cRefreshNextDisplayed: DWM_FRAME_COUNT,
+ cRefreshNextPresented: DWM_FRAME_COUNT,
+ cRefreshesDisplayed: DWM_FRAME_COUNT,
+ cRefreshesPresented: DWM_FRAME_COUNT,
+ cRefreshStarted: DWM_FRAME_COUNT,
+ cPixelsReceived: ULONGLONG,
+ cPixelsDrawn: ULONGLONG,
+ cBuffersEmpty: DWM_FRAME_COUNT,
+}}
+ENUM!{enum DWM_SOURCE_FRAME_SAMPLING {
+ DWM_SOURCE_FRAME_SAMPLING_POINT = 0,
+ DWM_SOURCE_FRAME_SAMPLING_COVERAGE = 1,
+ DWM_SOURCE_FRAME_SAMPLING_LAST = 2,
+}}
+// pub const c_DwmMaxQueuedBuffers: UINT = 8;
+// pub const c_DwmMaxMonitors: UINT = 16;
+// pub const c_DwmMaxAdapters: UINT = 16;
+STRUCT!{#[repr(packed)] struct DWM_PRESENT_PARAMETERS {
+ cbSize: UINT32,
+ fQueue: BOOL,
+ cRefreshStart: DWM_FRAME_COUNT,
+ cBuffer: UINT,
+ fUseSourceRate: BOOL,
+ rateSource: UNSIGNED_RATIO,
+ cRefreshesPerFrame: UINT,
+ eSampling: DWM_SOURCE_FRAME_SAMPLING,
+}}
+// pub const DWM_FRAME_DURATION_DEFAULT: i32 = -1;
+extern "system" {
+ pub fn DwmDefWindowProc(
+ hWnd: HWND,
+ msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ plResult: *mut LRESULT,
+ ) -> BOOL;
+ pub fn DwmEnableBlurBehindWindow(
+ hWnd: HWND,
+ pBlurBehind: *const DWM_BLURBEHIND,
+ ) -> HRESULT;
+}
+pub const DWM_EC_DISABLECOMPOSITION: UINT = 0;
+pub const DWM_EC_ENABLECOMPOSITION: UINT = 1;
+extern "system" {
+ pub fn DwmEnableComposition(
+ uCompositionAction: UINT,
+ ) -> HRESULT;
+ pub fn DwmEnableMMCSS(
+ fEnableMMCSS: BOOL,
+ ) -> HRESULT;
+ pub fn DwmExtendFrameIntoClientArea(
+ hWnd: HWND,
+ pMarInset: *const MARGINS,
+ ) -> HRESULT;
+ pub fn DwmGetColorizationColor(
+ pcrColorization: *mut DWORD,
+ pfOpaqueBlend: *mut BOOL,
+ ) -> HRESULT;
+ pub fn DwmGetCompositionTimingInfo(
+ hWnd: HWND,
+ pTimingInfo: *mut DWM_TIMING_INFO,
+ ) -> HRESULT;
+ pub fn DwmGetWindowAttribute(
+ hWnd: HWND,
+ dwAttribute: DWORD,
+ pvAttribute: LPVOID,
+ cbAttribute: DWORD,
+ ) -> HRESULT;
+ pub fn DwmIsCompositionEnabled(
+ pfEnabled: *mut BOOL,
+ ) -> HRESULT;
+ pub fn DwmModifyPreviousDxFrameDuration(
+ hwnd: HWND,
+ cRefreshes: INT,
+ fRelative: BOOL,
+ ) -> HRESULT;
+ pub fn DwmQueryThumbnailSourceSize(
+ hThumbnail: HTHUMBNAIL,
+ pSize: PSIZE,
+ ) -> HRESULT;
+ pub fn DwmRegisterThumbnail(
+ hwndDestination: HWND,
+ hwndSource: HWND,
+ phThumbnailId: PHTHUMBNAIL,
+ ) -> HRESULT;
+ pub fn DwmSetDxFrameDuration(
+ hwnd: HWND,
+ cRefreshes: INT,
+ ) -> HRESULT;
+ pub fn DwmSetPresentParameters(
+ hwnd: HWND,
+ pPresentParams: *mut DWM_PRESENT_PARAMETERS,
+ ) -> HRESULT;
+ pub fn DwmSetWindowAttribute(
+ hWnd: HWND,
+ dwAttribute: DWORD,
+ pvAttribute: LPCVOID,
+ cbAttribute: DWORD,
+ ) -> HRESULT;
+ pub fn DwmUnregisterThumbnail(
+ hThumbnailId: HTHUMBNAIL,
+ ) -> HRESULT;
+ pub fn DwmUpdateThumbnailProperties(
+ hThumbnailId: HTHUMBNAIL,
+ ptnProperties: *const DWM_THUMBNAIL_PROPERTIES,
+ ) -> HRESULT;
+}
+pub const DWM_SIT_DISPLAYFRAME: DWORD = 0x00000001;
+extern "system" {
+ pub fn DwmSetIconicThumbnail(
+ hwnd: HWND,
+ hbmp: HBITMAP,
+ dwSITFlags: DWORD,
+ ) -> HRESULT;
+ pub fn DwmSetIconicLivePreviewBitmap(
+ hwnd: HWND,
+ hbmp: HBITMAP,
+ pptClient: *mut POINT,
+ dwSITFlags: DWORD,
+ ) -> HRESULT;
+ pub fn DwmInvalidateIconicBitmaps(
+ hwnd: HWND,
+ ) -> HRESULT;
+ // pub fn DwmAttachMilContent(hwnd: HWND) -> HRESULT;
+ // pub fn DwmDetachMilContent(hwnd: HWND) -> HRESULT;
+ pub fn DwmFlush() -> HRESULT;
+ // pub fn DwmGetGraphicsStreamTransformHint();
+ // pub fn DwmGetGraphicsStreamClient();
+ pub fn DwmGetTransportAttributes(
+ pfIsRemoting: *mut BOOL,
+ pfIsConnected: *mut BOOL,
+ pDwGeneration: *mut DWORD,
+ ) -> HRESULT;
+}
+ENUM!{enum DWMTRANSITION_OWNEDWINDOW_TARGET {
+ DWMTRANSITION_OWNEDWINDOW_NULL = -1i32 as u32,
+ DWMTRANSITION_OWNEDWINDOW_REPOSITION = 0,
+}}
+extern "system" {
+ pub fn DwmTransitionOwnedWindow(
+ hwnd: HWND,
+ target: DWMTRANSITION_OWNEDWINDOW_TARGET,
+ ) -> HRESULT;
+}
+ENUM!{enum GESTURE_TYPE {
+ GT_PEN_TAP = 0,
+ GT_PEN_DOUBLETAP = 1,
+ GT_PEN_RIGHTTAP = 2,
+ GT_PEN_PRESSANDHOLD = 3,
+ GT_PEN_PRESSANDHOLDABORT = 4,
+ GT_TOUCH_TAP = 5,
+ GT_TOUCH_DOUBLETAP = 6,
+ GT_TOUCH_RIGHTTAP = 7,
+ GT_TOUCH_PRESSANDHOLD = 8,
+ GT_TOUCH_PRESSANDHOLDABORT = 9,
+ GT_TOUCH_PRESSANDTAP = 10,
+}}
+extern "system" {
+ pub fn DwmRenderGesture(
+ gt: GESTURE_TYPE,
+ cContacts: UINT,
+ pdwPointerID: *const DWORD,
+ pPoints: *const POINT,
+ ) -> HRESULT;
+ pub fn DwmTetherContact(
+ dwPointerID: DWORD,
+ fEnable: BOOL,
+ ptTether: POINT,
+ ) -> HRESULT;
+}
+ENUM!{enum DWM_SHOWCONTACT {
+ DWMSC_DOWN = 0x00000001,
+ DWMSC_UP = 0x00000002,
+ DWMSC_DRAG = 0x00000004,
+ DWMSC_HOLD = 0x00000008,
+ DWMSC_PENBARREL = 0x00000010,
+ DWMSC_NONE = 0x00000000,
+ DWMSC_ALL = 0xFFFFFFFF,
+}}
+extern "system" {
+ pub fn DwmShowContact(
+ dwPointerID: DWORD,
+ eShowContact: DWM_SHOWCONTACT,
+ ) -> HRESULT;
+}
diff --git a/vendor/winapi/src/um/dwrite.rs b/vendor/winapi/src/um/dwrite.rs
new file mode 100644
index 000000000..b21cd6f8d
--- /dev/null
+++ b/vendor/winapi/src/um/dwrite.rs
@@ -0,0 +1,1477 @@
+// 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.
+//! DirectX Typography Services public API definitions.
+use ctypes::c_void;
+use shared::basetsd::{INT16, INT32, UINT16, UINT32, UINT64, UINT8};
+use shared::guiddef::REFIID;
+use shared::minwindef::{BOOL, BYTE, FILETIME, FLOAT};
+use shared::windef::{COLORREF, HDC, HMONITOR, RECT, SIZE};
+use shared::winerror::SEVERITY_ERROR;
+use um::d2d1::ID2D1SimplifiedGeometrySink;
+use um::dcommon::DWRITE_MEASURING_MODE;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::wingdi::LOGFONTW;
+use um::winnt::{HRESULT, WCHAR};
+ENUM!{enum DWRITE_FONT_FILE_TYPE {
+ DWRITE_FONT_FILE_TYPE_UNKNOWN,
+ DWRITE_FONT_FILE_TYPE_CFF,
+ DWRITE_FONT_FILE_TYPE_TRUETYPE,
+ DWRITE_FONT_FILE_TYPE_OPENTYPE_COLLECTION,
+ DWRITE_FONT_FILE_TYPE_TYPE1_PFM,
+ DWRITE_FONT_FILE_TYPE_TYPE1_PFB,
+ DWRITE_FONT_FILE_TYPE_VECTOR,
+ DWRITE_FONT_FILE_TYPE_BITMAP,
+ DWRITE_FONT_FILE_TYPE_TRUETYPE_COLLECTION = DWRITE_FONT_FILE_TYPE_OPENTYPE_COLLECTION,
+}}
+ENUM!{enum DWRITE_FONT_FACE_TYPE {
+ DWRITE_FONT_FACE_TYPE_CFF,
+ DWRITE_FONT_FACE_TYPE_TRUETYPE,
+ DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION,
+ DWRITE_FONT_FACE_TYPE_TYPE1,
+ DWRITE_FONT_FACE_TYPE_VECTOR,
+ DWRITE_FONT_FACE_TYPE_BITMAP,
+ DWRITE_FONT_FACE_TYPE_UNKNOWN,
+ DWRITE_FONT_FACE_TYPE_RAW_CFF,
+ DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION = DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION,
+}}
+ENUM!{enum DWRITE_FONT_SIMULATIONS {
+ DWRITE_FONT_SIMULATIONS_NONE = 0x0000,
+ DWRITE_FONT_SIMULATIONS_BOLD = 0x0001,
+ DWRITE_FONT_SIMULATIONS_OBLIQUE = 0x0002,
+}}
+ENUM!{enum DWRITE_FONT_WEIGHT {
+ DWRITE_FONT_WEIGHT_THIN = 100,
+ DWRITE_FONT_WEIGHT_EXTRA_LIGHT = 200,
+ DWRITE_FONT_WEIGHT_ULTRA_LIGHT = 200,
+ DWRITE_FONT_WEIGHT_LIGHT = 300,
+ DWRITE_FONT_WEIGHT_SEMI_LIGHT = 350,
+ DWRITE_FONT_WEIGHT_NORMAL = 400,
+ DWRITE_FONT_WEIGHT_REGULAR = 400,
+ DWRITE_FONT_WEIGHT_MEDIUM = 500,
+ DWRITE_FONT_WEIGHT_DEMI_BOLD = 600,
+ DWRITE_FONT_WEIGHT_SEMI_BOLD = 600,
+ DWRITE_FONT_WEIGHT_BOLD = 700,
+ DWRITE_FONT_WEIGHT_EXTRA_BOLD = 800,
+ DWRITE_FONT_WEIGHT_ULTRA_BOLD = 800,
+ DWRITE_FONT_WEIGHT_BLACK = 900,
+ DWRITE_FONT_WEIGHT_HEAVY = 900,
+ DWRITE_FONT_WEIGHT_EXTRA_BLACK = 950,
+ DWRITE_FONT_WEIGHT_ULTRA_BLACK = 950,
+}}
+ENUM!{enum DWRITE_FONT_STRETCH {
+ DWRITE_FONT_STRETCH_UNDEFINED = 0,
+ DWRITE_FONT_STRETCH_ULTRA_CONDENSED = 1,
+ DWRITE_FONT_STRETCH_EXTRA_CONDENSED = 2,
+ DWRITE_FONT_STRETCH_CONDENSED = 3,
+ DWRITE_FONT_STRETCH_SEMI_CONDENSED = 4,
+ DWRITE_FONT_STRETCH_NORMAL = 5,
+ DWRITE_FONT_STRETCH_MEDIUM = 5,
+ DWRITE_FONT_STRETCH_SEMI_EXPANDED = 6,
+ DWRITE_FONT_STRETCH_EXPANDED = 7,
+ DWRITE_FONT_STRETCH_EXTRA_EXPANDED = 8,
+ DWRITE_FONT_STRETCH_ULTRA_EXPANDED = 9,
+}}
+ENUM!{enum DWRITE_FONT_STYLE {
+ DWRITE_FONT_STYLE_NORMAL,
+ DWRITE_FONT_STYLE_OBLIQUE,
+ DWRITE_FONT_STYLE_ITALIC,
+}}
+ENUM!{enum DWRITE_INFORMATIONAL_STRING_ID {
+ DWRITE_INFORMATIONAL_STRING_NONE,
+ DWRITE_INFORMATIONAL_STRING_COPYRIGHT_NOTICE,
+ DWRITE_INFORMATIONAL_STRING_VERSION_STRINGS,
+ DWRITE_INFORMATIONAL_STRING_TRADEMARK,
+ DWRITE_INFORMATIONAL_STRING_MANUFACTURER,
+ DWRITE_INFORMATIONAL_STRING_DESIGNER,
+ DWRITE_INFORMATIONAL_STRING_DESIGNER_URL,
+ DWRITE_INFORMATIONAL_STRING_DESCRIPTION,
+ DWRITE_INFORMATIONAL_STRING_FONT_VENDOR_URL,
+ DWRITE_INFORMATIONAL_STRING_LICENSE_DESCRIPTION,
+ DWRITE_INFORMATIONAL_STRING_LICENSE_INFO_URL,
+ DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES,
+ DWRITE_INFORMATIONAL_STRING_WIN32_SUBFAMILY_NAMES,
+ DWRITE_INFORMATIONAL_STRING_PREFERRED_FAMILY_NAMES,
+ DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES,
+ DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT,
+ DWRITE_INFORMATIONAL_STRING_FULL_NAME,
+ DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME,
+ DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_CID_NAME,
+ DWRITE_INFORMATIONAL_STRING_WWS_FAMILY_NAME,
+ DWRITE_INFORMATIONAL_STRING_DESIGN_SCRIPT_LANGUAGE_TAG,
+ DWRITE_INFORMATIONAL_STRING_SUPPORTED_SCRIPT_LANGUAGE_TAG,
+}}
+STRUCT!{struct DWRITE_FONT_METRICS {
+ designUnitsPerEm: UINT16,
+ ascent: UINT16,
+ descent: UINT16,
+ lineGap: INT16,
+ capHeight: UINT16,
+ xHeight: UINT16,
+ underlinePosition: INT16,
+ underlineThickness: UINT16,
+ strikethroughPosition: INT16,
+ strikethroughThickness: UINT16,
+}}
+STRUCT!{struct DWRITE_GLYPH_METRICS {
+ leftSideBearing: INT32,
+ advanceWidth: UINT32,
+ rightSideBearing: INT32,
+ topSideBearing: INT32,
+ advanceHeight: UINT32,
+ bottomSideBearing: INT32,
+ verticalOriginY: INT32,
+}}
+STRUCT!{struct DWRITE_GLYPH_OFFSET {
+ advanceOffset: FLOAT,
+ ascenderOffset: FLOAT,
+}}
+ENUM!{enum DWRITE_FACTORY_TYPE {
+ DWRITE_FACTORY_TYPE_SHARED,
+ DWRITE_FACTORY_TYPE_ISOLATED,
+}}
+RIDL!{#[uuid(0x727cad4e, 0xd6af, 0x4c9e, 0x8a, 0x08, 0xd6, 0x95, 0xb1, 0x1c, 0xaa, 0x49)]
+interface IDWriteFontFileLoader(IDWriteFontFileLoaderVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateStreamFromKey(
+ fontFileReferenceKey: *const c_void,
+ fontFileReferenceKeySize: UINT32,
+ fontFileStream: *mut *mut IDWriteFontFileStream,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xb2d9f3ec, 0xc9fe, 0x4a11, 0xa2, 0xec, 0xd8, 0x62, 0x08, 0xf7, 0xc0, 0xa2)]
+interface IDWriteLocalFontFileLoader(IDWriteLocalFontFileLoaderVtbl):
+ IDWriteFontFileLoader(IDWriteFontFileLoaderVtbl) {
+ fn GetFilePathLengthFromKey(
+ fontFileReferenceKey: *const c_void,
+ fontFileReferenceKeySize: UINT32,
+ filePathLength: *mut UINT32,
+ ) -> HRESULT,
+ fn GetFilePathFromKey(
+ fontFileReferenceKey: *const c_void,
+ fontFileReferenceKeySize: UINT32,
+ filePath: *mut WCHAR,
+ filePathSize: UINT32,
+ ) -> HRESULT,
+ fn GetLastWriteTimeFromKey(
+ fontFileReferenceKey: *const c_void,
+ fontFileReferenceKeySize: UINT32,
+ lastWriteTime: *mut FILETIME,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x6d4865fe, 0x0ab8, 0x4d91, 0x8f, 0x62, 0x5d, 0xd6, 0xbe, 0x34, 0xa3, 0xe0)]
+interface IDWriteFontFileStream(IDWriteFontFileStreamVtbl): IUnknown(IUnknownVtbl) {
+ fn ReadFileFragment(
+ fragmentStart: *mut *const c_void,
+ fileOffset: UINT64,
+ fragmentSize: UINT64,
+ fragmentContext: *mut *mut c_void,
+ ) -> HRESULT,
+ fn ReleaseFileFragment(
+ fragmentContext: *mut c_void,
+ ) -> (),
+ fn GetFileSize(
+ fileSize: *mut UINT64,
+ ) -> HRESULT,
+ fn GetLastWriteTime(
+ lastWriteTime: *mut UINT64,
+ ) -> HRESULT,
+}}
+ENUM!{enum DWRITE_OUTLINE_THRESHOLD {
+ DWRITE_OUTLINE_THRESHOLD_ANTIALIASED,
+ DWRITE_OUTLINE_THRESHOLD_ALIASED,
+}}
+STRUCT!{struct DWRITE_FONT_METRICS1 {
+ designUnitsPerEm: UINT16,
+ ascent: UINT16,
+ descent: UINT16,
+ lineGap: INT16,
+ capHeight: UINT16,
+ xHeight: UINT16,
+ underlinePosition: INT16,
+ underlineThickness: UINT16,
+ strikethroughPosition: INT16,
+ strikethroughThickness: UINT16,
+ glyphBoxLeft: INT16,
+ glyphBoxTop: INT16,
+ glyphBoxRight: INT16,
+ glyphBoxBottom: INT16,
+ subscriptPositionX: INT16,
+ subscriptPositionY: INT16,
+ subscriptSizeX: INT16,
+ subscriptSizeY: INT16,
+ superscriptPositionX: INT16,
+ superscriptPositionY: INT16,
+ superscriptSizeX: INT16,
+ superscriptSizeY: INT16,
+ hasTypographicMetrics: BOOL,
+}}
+STRUCT!{struct DWRITE_UNICODE_RANGE {
+ first: UINT32,
+ last: UINT32,
+}}
+STRUCT!{struct DWRITE_CARET_METRICS {
+ slopeRise: INT16,
+ slopeRun: INT16,
+ offset: INT16,
+}}
+#[inline]
+pub fn DWRITE_MAKE_OPENTYPE_TAG(a: u8, b: u8, c: u8, d: u8) -> u32 {
+ ((d as u32) << 24) | ((c as u32) << 16) | ((b as u32) << 8) | (a as u32)
+}
+RIDL!{#[uuid(0x739d886a, 0xcef5, 0x47dc, 0x87, 0x69, 0x1a, 0x8b, 0x41, 0xbe, 0xbb, 0xb0)]
+interface IDWriteFontFile(IDWriteFontFileVtbl): IUnknown(IUnknownVtbl) {
+ fn GetReferenceKey(
+ fontFileReferenceKey: *mut *const c_void,
+ fontFileReferenceKeySize: *mut UINT32,
+ ) -> HRESULT,
+ fn GetLoader(
+ fontFileLoader: *mut *mut IDWriteFontFileLoader,
+ ) -> HRESULT,
+ fn Analyze(
+ isSupportedFontType: *mut BOOL,
+ fontFileType: *mut DWRITE_FONT_FILE_TYPE,
+ fontFaceType: *mut DWRITE_FONT_FACE_TYPE,
+ numberOfFaces: *mut UINT32,
+ ) -> HRESULT,
+}}
+ENUM!{enum DWRITE_PIXEL_GEOMETRY {
+ DWRITE_PIXEL_GEOMETRY_FLAT,
+ DWRITE_PIXEL_GEOMETRY_RGB,
+ DWRITE_PIXEL_GEOMETRY_BGR,
+}}
+ENUM!{enum DWRITE_RENDERING_MODE {
+ 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_GDI_CLASSIC,
+ DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL = DWRITE_RENDERING_MODE_GDI_NATURAL,
+ DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL = DWRITE_RENDERING_MODE_NATURAL,
+ DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC = DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC,
+}}
+STRUCT!{struct DWRITE_MATRIX {
+ m11: FLOAT,
+ m12: FLOAT,
+ m21: FLOAT,
+ m22: FLOAT,
+ dx: FLOAT,
+ dy: FLOAT,
+}}
+RIDL!{#[uuid(0x2f0da53a, 0x2add, 0x47cd, 0x82, 0xee, 0xd9, 0xec, 0x34, 0x68, 0x8e, 0x75)]
+interface IDWriteRenderingParams(IDWriteRenderingParamsVtbl): IUnknown(IUnknownVtbl) {
+ fn GetGamma() -> FLOAT,
+ fn GetEnhancedContrast() -> FLOAT,
+ fn GetClearTypeLevel() -> FLOAT,
+ fn GetPixelGeometry() -> DWRITE_PIXEL_GEOMETRY,
+ fn GetRenderingMode() -> DWRITE_RENDERING_MODE,
+}}
+pub type IDWriteGeometrySink = ID2D1SimplifiedGeometrySink;
+RIDL!{#[uuid(0x5f49804d, 0x7024, 0x4d43, 0xbf, 0xa9, 0xd2, 0x59, 0x84, 0xf5, 0x38, 0x49)]
+interface IDWriteFontFace(IDWriteFontFaceVtbl): IUnknown(IUnknownVtbl) {
+ fn GetType() -> DWRITE_FONT_FACE_TYPE,
+ fn GetFiles(
+ numberOfFiles: *mut UINT32,
+ fontFiles: *mut *mut IDWriteFontFile,
+ ) -> HRESULT,
+ fn GetIndex() -> UINT32,
+ fn GetSimulations() -> DWRITE_FONT_SIMULATIONS,
+ fn IsSymbolFont() -> BOOL,
+ fn GetMetrics(
+ fontFaceMetrics: *mut DWRITE_FONT_METRICS,
+ ) -> (),
+ fn GetGlyphCount() -> UINT16,
+ fn GetDesignGlyphMetrics(
+ glyphIndices: *const UINT16,
+ glyphCount: UINT32,
+ glyphMetrics: *mut DWRITE_GLYPH_METRICS,
+ isSideways: BOOL,
+ ) -> HRESULT,
+ fn GetGlyphIndices(
+ codePoints: *const UINT32,
+ codePointCount: UINT32,
+ glyphIndices: *mut UINT16,
+ ) -> HRESULT,
+ fn TryGetFontTable(
+ openTypeTableTag: UINT32,
+ tableData: *mut *const c_void,
+ tableSize: *mut UINT32,
+ tableContext: *mut *mut c_void,
+ exists: *mut BOOL,
+ ) -> HRESULT,
+ fn ReleaseFontTable(
+ tableContext: *mut c_void,
+ ) -> HRESULT,
+ fn GetGlyphRunOutline(
+ emSize: FLOAT,
+ glyphIndices: *const UINT16,
+ glyphAdvances: *const FLOAT,
+ glyphOffsets: *const DWRITE_GLYPH_OFFSET,
+ glyphCount: UINT32,
+ isSideways: BOOL,
+ isRightToLeft: BOOL,
+ geometrySink: *mut IDWriteGeometrySink,
+ ) -> HRESULT,
+ fn GetRecommendedRenderingMode(
+ emSize: FLOAT,
+ pixelsPerDip: FLOAT,
+ measuringMode: DWRITE_MEASURING_MODE,
+ renderingParams: *mut IDWriteRenderingParams,
+ renderingMode: *mut DWRITE_RENDERING_MODE,
+ ) -> HRESULT,
+ fn GetGdiCompatibleMetrics(
+ emSize: FLOAT,
+ pixelsPerDip: FLOAT,
+ transform: *const DWRITE_MATRIX,
+ fontFaceMetrics: *mut DWRITE_FONT_METRICS,
+ ) -> HRESULT,
+ fn GetGdiCompatibleGlyphMetrics(
+ enSize: FLOAT,
+ pixelsPerDip: FLOAT,
+ transform: *const DWRITE_MATRIX,
+ useGdiNatrual: BOOL,
+ glyphIndices: *const UINT16,
+ glyphCount: UINT32,
+ glyphMetrics: *mut DWRITE_GLYPH_METRICS,
+ isSideways: BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa71efdb4, 0x9fdb, 0x4838, 0xad, 0x90, 0xcf, 0xc3, 0xbe, 0x8c, 0x3d, 0xaf)]
+interface IDWriteFontFace1(IDWriteFontFace1Vtbl): IDWriteFontFace(IDWriteFontFaceVtbl) {
+ fn GetMetrics(
+ fontFaceMetrics: *mut DWRITE_FONT_METRICS1,
+ ) -> (),
+ fn GetGdiCompatibleMetrics(
+ emSize: FLOAT,
+ pixelsPerDip: FLOAT,
+ transform: *const DWRITE_MATRIX,
+ fontFaceMetrics: *mut DWRITE_FONT_METRICS1,
+ ) -> HRESULT,
+ fn GetCaretMetrics(
+ caretMetrics: *mut DWRITE_CARET_METRICS,
+ ) -> (),
+ fn GetUnicodeRanges(
+ maxRangeCount: UINT32,
+ unicodeRanges: *mut DWRITE_UNICODE_RANGE,
+ actualRangeCount: *mut UINT32,
+ ) -> HRESULT,
+ fn IsMonoSpacedFont() -> BOOL,
+ fn GetDesignGlyphAdvances(
+ glyphCount: UINT32,
+ glyphIndices: *const UINT16,
+ glyphAdvances: *mut INT32,
+ isSideways: BOOL,
+ ) -> HRESULT,
+ fn GetGdiCompatibleGlyphAdvance(
+ emSize: FLOAT,
+ pixelsPerDip: FLOAT,
+ transform: *const DWRITE_MATRIX,
+ useGdiNatural: BOOL,
+ isSideways: BOOL,
+ glyphCount: UINT32,
+ glyphIndices: *const UINT16,
+ glyphAdvances: *mut INT32,
+ ) -> HRESULT,
+ fn GetKerningPairAdjustments(
+ glyphCount: UINT32,
+ glyphIndices: *const UINT16,
+ glyphAdvanceAdjustments: *mut INT32,
+ ) -> HRESULT,
+ fn HasKerningPairs() -> BOOL,
+ fn GetRecommendedRenderingMode(
+ fontEmSize: FLOAT,
+ dpiX: FLOAT,
+ dpiY: FLOAT,
+ transform: *const DWRITE_MATRIX,
+ isSideways: BOOL,
+ outlineThreshold: DWRITE_OUTLINE_THRESHOLD,
+ measuringMode: DWRITE_MEASURING_MODE,
+ renderingMode: *mut DWRITE_RENDERING_MODE,
+ ) -> HRESULT,
+ fn GetVerticalGlyphVariants(
+ nominalGlyphIndices: *const UINT16,
+ verticalGlyphIndices: *mut UINT16,
+ ) -> HRESULT,
+ fn HasVerticalGlyphVariants() -> BOOL,
+}}
+RIDL!{#[uuid(0xcca920e4, 0x52f0, 0x492b, 0xbf, 0xa8, 0x29, 0xc7, 0x2e, 0xe0, 0xa4, 0x68)]
+interface IDWriteFontCollectionLoader(IDWriteFontCollectionLoaderVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn CreateEnumeratorFromKey(
+ factory: *mut IDWriteFactory,
+ collectionKey: *const c_void,
+ collectionKeySize: UINT32,
+ fontFileEnumerator: *mut *mut IDWriteFontFileEnumerator,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x72755049, 0x5ff7, 0x435d, 0x83, 0x48, 0x4b, 0xe9, 0x7c, 0xfa, 0x6c, 0x7c)]
+interface IDWriteFontFileEnumerator(IDWriteFontFileEnumeratorVtbl): IUnknown(IUnknownVtbl) {
+ fn MoveNext(
+ hasCurrentFile: *mut BOOL,
+ ) -> HRESULT,
+ fn GetCurrentFontFile(
+ fontFile: *mut *mut IDWriteFontFile,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x08256209, 0x099a, 0x4b34, 0xb8, 0x6d, 0xc2, 0x2b, 0x11, 0x0e, 0x77, 0x71)]
+interface IDWriteLocalizedStrings(IDWriteLocalizedStringsVtbl): IUnknown(IUnknownVtbl) {
+ fn GetCount() -> UINT32,
+ fn FindLocaleName(
+ localeName: *const WCHAR,
+ index: *mut UINT32,
+ exists: *mut BOOL,
+ ) -> HRESULT,
+ fn GetLocaleNameLength(
+ index: UINT32,
+ length: *mut UINT32,
+ ) -> HRESULT,
+ fn GetLocaleName(
+ index: UINT32,
+ localeName: *mut WCHAR,
+ size: UINT32,
+ ) -> HRESULT,
+ fn GetStringLength(
+ index: UINT32,
+ length: *mut UINT32,
+ ) -> HRESULT,
+ fn GetString(
+ index: UINT32,
+ stringBuffer: *mut WCHAR,
+ size: UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa84cee02, 0x3eea, 0x4eee, 0xa8, 0x27, 0x87, 0xc1, 0xa0, 0x2a, 0x0f, 0xcc)]
+interface IDWriteFontCollection(IDWriteFontCollectionVtbl): IUnknown(IUnknownVtbl) {
+ fn GetFontFamilyCount() -> UINT32,
+ fn GetFontFamily(
+ index: UINT32,
+ fontFamily: *mut *mut IDWriteFontFamily,
+ ) -> HRESULT,
+ fn FindFamilyName(
+ familyName: *const WCHAR,
+ index: *mut UINT32,
+ exists: *mut BOOL,
+ ) -> HRESULT,
+ fn GetFontFromFontFace(
+ fontFace: *mut IDWriteFontFace,
+ font: *mut *mut IDWriteFont,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x1a0d8438, 0x1d97, 0x4ec1, 0xae, 0xf9, 0xa2, 0xfb, 0x86, 0xed, 0x6a, 0xcb)]
+interface IDWriteFontList(IDWriteFontListVtbl): IUnknown(IUnknownVtbl) {
+ fn GetFontCollection(
+ fontCollection: *mut *mut IDWriteFontCollection,
+ ) -> HRESULT,
+ fn GetFontCount() -> UINT32,
+ fn GetFont(
+ index: UINT32,
+ font: *mut *mut IDWriteFont,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xda20d8ef, 0x812a, 0x4c43, 0x98, 0x02, 0x62, 0xec, 0x4a, 0xbd, 0x7a, 0xdd)]
+interface IDWriteFontFamily(IDWriteFontFamilyVtbl): IDWriteFontList(IDWriteFontListVtbl) {
+ fn GetFamilyNames(
+ names: *mut *mut IDWriteLocalizedStrings,
+ ) -> HRESULT,
+ fn GetFirstMatchingFont(
+ weight: DWRITE_FONT_WEIGHT,
+ stretch: DWRITE_FONT_STRETCH,
+ style: DWRITE_FONT_STYLE,
+ matchingFont: *mut *mut IDWriteFont,
+ ) -> HRESULT,
+ fn GetMatchingFonts(
+ weight: DWRITE_FONT_WEIGHT,
+ stretch: DWRITE_FONT_STRETCH,
+ style: DWRITE_FONT_STYLE,
+ matchingFonts: *mut *mut IDWriteFontList,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xacd16696, 0x8c14, 0x4f5d, 0x87, 0x7e, 0xfe, 0x3f, 0xc1, 0xd3, 0x27, 0x37)]
+interface IDWriteFont(IDWriteFontVtbl): IUnknown(IUnknownVtbl) {
+ fn GetFontFamily(
+ fontFamily: *mut *mut IDWriteFontFamily,
+ ) -> HRESULT,
+ fn GetWeight() -> DWRITE_FONT_WEIGHT,
+ fn GetStretch() -> DWRITE_FONT_STRETCH,
+ fn GetStyle() -> DWRITE_FONT_STYLE,
+ fn IsSymbolFont() -> BOOL,
+ fn GetFaceNames(
+ names: *mut *mut IDWriteLocalizedStrings,
+ ) -> HRESULT,
+ fn GetInformationalStrings(
+ informationalStringId: DWRITE_INFORMATIONAL_STRING_ID,
+ informationalStrings: *mut *mut IDWriteLocalizedStrings,
+ exists: *mut BOOL,
+ ) -> HRESULT,
+ fn GetSimulations() -> DWRITE_FONT_SIMULATIONS,
+ fn GetMetrics(
+ fontMetrics: *mut DWRITE_FONT_METRICS,
+ ) -> (),
+ fn HasCharacter(
+ unicodeValue: UINT32,
+ exists: *mut BOOL,
+ ) -> HRESULT,
+ fn CreateFontFace(
+ fontFace: *mut *mut IDWriteFontFace,
+ ) -> HRESULT,
+}}
+ENUM!{enum DWRITE_READING_DIRECTION {
+ DWRITE_READING_DIRECTION_LEFT_TO_RIGHT = 0,
+ DWRITE_READING_DIRECTION_RIGHT_TO_LEFT = 1,
+ DWRITE_READING_DIRECTION_TOP_TO_BOTTOM = 2,
+ DWRITE_READING_DIRECTION_BOTTOM_TO_TOP = 3,
+}}
+ENUM!{enum DWRITE_FLOW_DIRECTION {
+ DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM = 0,
+ DWRITE_FLOW_DIRECTION_BOTTOM_TO_TOP = 1,
+ DWRITE_FLOW_DIRECTION_LEFT_TO_RIGHT = 2,
+ DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT = 3,
+}}
+ENUM!{enum DWRITE_TEXT_ALIGNMENT {
+ DWRITE_TEXT_ALIGNMENT_LEADING,
+ DWRITE_TEXT_ALIGNMENT_TRAILING,
+ DWRITE_TEXT_ALIGNMENT_CENTER,
+ DWRITE_TEXT_ALIGNMENT_JUSTIFIED,
+}}
+ENUM!{enum DWRITE_PARAGRAPH_ALIGNMENT {
+ DWRITE_PARAGRAPH_ALIGNMENT_NEAR,
+ DWRITE_PARAGRAPH_ALIGNMENT_FAR,
+ DWRITE_PARAGRAPH_ALIGNMENT_CENTER,
+}}
+ENUM!{enum DWRITE_WORD_WRAPPING {
+ DWRITE_WORD_WRAPPING_WRAP = 0,
+ DWRITE_WORD_WRAPPING_NO_WRAP = 1,
+ DWRITE_WORD_WRAPPING_EMERGENCY_BREAK = 2,
+ DWRITE_WORD_WRAPPING_WHOLE_WORD = 3,
+ DWRITE_WORD_WRAPPING_CHARACTER = 4,
+}}
+ENUM!{enum DWRITE_LINE_SPACING_METHOD {
+ DWRITE_LINE_SPACING_METHOD_DEFAULT,
+ DWRITE_LINE_SPACING_METHOD_UNIFORM,
+ DWRITE_LINE_SPACING_METHOD_PROPORTIONAL,
+}}
+ENUM!{enum DWRITE_TRIMMING_GRANULARITY {
+ DWRITE_TRIMMING_GRANULARITY_NONE,
+ DWRITE_TRIMMING_GRANULARITY_CHARACTER,
+ DWRITE_TRIMMING_GRANULARITY_WORD,
+}}
+ENUM!{enum DWRITE_FONT_FEATURE_TAG {
+ DWRITE_FONT_FEATURE_TAG_ALTERNATIVE_FRACTIONS = 0x63726661, // 'afrc'
+ DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS_FROM_CAPITALS = 0x63703263, // 'c2pc'
+ DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS_FROM_CAPITALS = 0x63733263, // 'c2sc'
+ DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_ALTERNATES = 0x746c6163, // 'calt'
+ DWRITE_FONT_FEATURE_TAG_CASE_SENSITIVE_FORMS = 0x65736163, // 'case'
+ DWRITE_FONT_FEATURE_TAG_GLYPH_COMPOSITION_DECOMPOSITION = 0x706d6363, // 'ccmp'
+ DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_LIGATURES = 0x67696c63, // 'clig'
+ DWRITE_FONT_FEATURE_TAG_CAPITAL_SPACING = 0x70737063, // 'cpsp'
+ DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_SWASH = 0x68777363, // 'cswh'
+ DWRITE_FONT_FEATURE_TAG_CURSIVE_POSITIONING = 0x73727563, // 'curs'
+ DWRITE_FONT_FEATURE_TAG_DEFAULT = 0x746c6664, // 'dflt'
+ DWRITE_FONT_FEATURE_TAG_DISCRETIONARY_LIGATURES = 0x67696c64, // 'dlig'
+ DWRITE_FONT_FEATURE_TAG_EXPERT_FORMS = 0x74707865, // 'expt'
+ DWRITE_FONT_FEATURE_TAG_FRACTIONS = 0x63617266, // 'frac'
+ DWRITE_FONT_FEATURE_TAG_FULL_WIDTH = 0x64697766, // 'fwid'
+ DWRITE_FONT_FEATURE_TAG_HALF_FORMS = 0x666c6168, // 'half'
+ DWRITE_FONT_FEATURE_TAG_HALANT_FORMS = 0x6e6c6168, // 'haln'
+ DWRITE_FONT_FEATURE_TAG_ALTERNATE_HALF_WIDTH = 0x746c6168, // 'halt'
+ DWRITE_FONT_FEATURE_TAG_HISTORICAL_FORMS = 0x74736968, // 'hist'
+ DWRITE_FONT_FEATURE_TAG_HORIZONTAL_KANA_ALTERNATES = 0x616e6b68, // 'hkna'
+ DWRITE_FONT_FEATURE_TAG_HISTORICAL_LIGATURES = 0x67696c68, // 'hlig'
+ DWRITE_FONT_FEATURE_TAG_HALF_WIDTH = 0x64697768, // 'hwid'
+ DWRITE_FONT_FEATURE_TAG_HOJO_KANJI_FORMS = 0x6f6a6f68, // 'hojo'
+ DWRITE_FONT_FEATURE_TAG_JIS04_FORMS = 0x3430706a, // 'jp04'
+ DWRITE_FONT_FEATURE_TAG_JIS78_FORMS = 0x3837706a, // 'jp78'
+ DWRITE_FONT_FEATURE_TAG_JIS83_FORMS = 0x3338706a, // 'jp83'
+ DWRITE_FONT_FEATURE_TAG_JIS90_FORMS = 0x3039706a, // 'jp90'
+ DWRITE_FONT_FEATURE_TAG_KERNING = 0x6e72656b, // 'kern'
+ DWRITE_FONT_FEATURE_TAG_STANDARD_LIGATURES = 0x6167696c, // 'liga'
+ DWRITE_FONT_FEATURE_TAG_LINING_FIGURES = 0x6d756e6c, // 'lnum'
+ DWRITE_FONT_FEATURE_TAG_LOCALIZED_FORMS = 0x6c636f6c, // 'locl'
+ DWRITE_FONT_FEATURE_TAG_MARK_POSITIONING = 0x6b72616d, // 'mark'
+ DWRITE_FONT_FEATURE_TAG_MATHEMATICAL_GREEK = 0x6b72676d, // 'mgrk'
+ DWRITE_FONT_FEATURE_TAG_MARK_TO_MARK_POSITIONING = 0x6b6d6b6d, // 'mkmk'
+ DWRITE_FONT_FEATURE_TAG_ALTERNATE_ANNOTATION_FORMS = 0x746c616e, // 'nalt'
+ DWRITE_FONT_FEATURE_TAG_NLC_KANJI_FORMS = 0x6b636c6e, // 'nlck'
+ DWRITE_FONT_FEATURE_TAG_OLD_STYLE_FIGURES = 0x6d756e6f, // 'onum'
+ DWRITE_FONT_FEATURE_TAG_ORDINALS = 0x6e64726f, // 'ordn'
+ DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_ALTERNATE_WIDTH = 0x746c6170, // 'palt'
+ DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS = 0x70616370, // 'pcap'
+ DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_FIGURES = 0x6d756e70, // 'pnum'
+ DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_WIDTHS = 0x64697770, // 'pwid'
+ DWRITE_FONT_FEATURE_TAG_QUARTER_WIDTHS = 0x64697771, // 'qwid'
+ DWRITE_FONT_FEATURE_TAG_REQUIRED_LIGATURES = 0x67696c72, // 'rlig'
+ DWRITE_FONT_FEATURE_TAG_RUBY_NOTATION_FORMS = 0x79627572, // 'ruby'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_ALTERNATES = 0x746c6173, // 'salt'
+ DWRITE_FONT_FEATURE_TAG_SCIENTIFIC_INFERIORS = 0x666e6973, // 'sinf'
+ DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS = 0x70636d73, // 'smcp'
+ DWRITE_FONT_FEATURE_TAG_SIMPLIFIED_FORMS = 0x6c706d73, // 'smpl'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1 = 0x31307373, // 'ss01'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_2 = 0x32307373, // 'ss02'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_3 = 0x33307373, // 'ss03'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_4 = 0x34307373, // 'ss04'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_5 = 0x35307373, // 'ss05'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6 = 0x36307373, // 'ss06'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7 = 0x37307373, // 'ss07'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_8 = 0x38307373, // 'ss08'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_9 = 0x39307373, // 'ss09'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_10 = 0x30317373, // 'ss10'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_11 = 0x31317373, // 'ss11'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_12 = 0x32317373, // 'ss12'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_13 = 0x33317373, // 'ss13'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_14 = 0x34317373, // 'ss14'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_15 = 0x35317373, // 'ss15'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_16 = 0x36317373, // 'ss16'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_17 = 0x37317373, // 'ss17'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_18 = 0x38317373, // 'ss18'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_19 = 0x39317373, // 'ss19'
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_20 = 0x30327373, // 'ss20'
+ DWRITE_FONT_FEATURE_TAG_SUBSCRIPT = 0x73627573, // 'subs'
+ DWRITE_FONT_FEATURE_TAG_SUPERSCRIPT = 0x73707573, // 'sups'
+ DWRITE_FONT_FEATURE_TAG_SWASH = 0x68737773, // 'swsh'
+ DWRITE_FONT_FEATURE_TAG_TITLING = 0x6c746974, // 'titl'
+ DWRITE_FONT_FEATURE_TAG_TRADITIONAL_NAME_FORMS = 0x6d616e74, // 'tnam'
+ DWRITE_FONT_FEATURE_TAG_TABULAR_FIGURES = 0x6d756e74, // 'tnum'
+ DWRITE_FONT_FEATURE_TAG_TRADITIONAL_FORMS = 0x64617274, // 'trad'
+ DWRITE_FONT_FEATURE_TAG_THIRD_WIDTHS = 0x64697774, // 'twid'
+ DWRITE_FONT_FEATURE_TAG_UNICASE = 0x63696e75, // 'unic'
+ DWRITE_FONT_FEATURE_TAG_VERTICAL_WRITING = 0x74726576, // 'vert'
+ DWRITE_FONT_FEATURE_TAG_VERTICAL_ALTERNATES_AND_ROTATION = 0x32747276, // 'vrt2'
+ DWRITE_FONT_FEATURE_TAG_SLASHED_ZERO = 0x6f72657a, // 'zero'
+}}
+STRUCT!{struct DWRITE_TEXT_RANGE {
+ startPosition: UINT32,
+ length: UINT32,
+}}
+STRUCT!{struct DWRITE_FONT_FEATURE {
+ nameTag: DWRITE_FONT_FEATURE_TAG,
+ parameter: UINT32,
+}}
+STRUCT!{struct DWRITE_TYPOGRAPHIC_FEATURES {
+ features: *mut DWRITE_FONT_FEATURE,
+ featureCount: UINT32,
+}}
+STRUCT!{struct DWRITE_TRIMMING {
+ granularity: DWRITE_TRIMMING_GRANULARITY,
+ delimiter: UINT32,
+ delimiterCount: UINT32,
+}}
+RIDL!{#[uuid(0x9c906818, 0x31d7, 0x4fd3, 0xa1, 0x51, 0x7c, 0x5e, 0x22, 0x5d, 0xb5, 0x5a)]
+interface IDWriteTextFormat(IDWriteTextFormatVtbl): IUnknown(IUnknownVtbl) {
+ fn SetTextAlignment(
+ textAlignment: DWRITE_TEXT_ALIGNMENT,
+ ) -> HRESULT,
+ fn SetParagraphAlignment(
+ paragraphAlignment: DWRITE_PARAGRAPH_ALIGNMENT,
+ ) -> HRESULT,
+ fn SetWordWrapping(
+ wordWrapping: DWRITE_WORD_WRAPPING,
+ ) -> HRESULT,
+ fn SetReadingDirection(
+ readingDirection: DWRITE_READING_DIRECTION,
+ ) -> HRESULT,
+ fn SetFlowDirection(
+ flowDirection: DWRITE_FLOW_DIRECTION,
+ ) -> HRESULT,
+ fn SetIncrementalTabStop(
+ incrementalTabStop: FLOAT,
+ ) -> HRESULT,
+ fn SetTrimming(
+ trimmingOptions: *const DWRITE_TRIMMING,
+ trimmingSign: *mut IDWriteInlineObject,
+ ) -> HRESULT,
+ fn SetLineSpacing(
+ lineSpacingMethod: DWRITE_LINE_SPACING_METHOD,
+ lineSpacing: FLOAT,
+ baseLine: FLOAT,
+ ) -> HRESULT,
+ fn GetTextAlignment() -> DWRITE_TEXT_ALIGNMENT,
+ fn GetParagraphAlignment() -> DWRITE_PARAGRAPH_ALIGNMENT,
+ fn GetWordWrapping() -> DWRITE_WORD_WRAPPING,
+ fn GetReadingDirection() -> DWRITE_READING_DIRECTION,
+ fn GetFlowDirection() -> DWRITE_FLOW_DIRECTION,
+ fn GetIncrementalTabStop() -> FLOAT,
+ fn GetTrimming(
+ trimmingOptions: *mut DWRITE_TRIMMING,
+ trimmingSign: *mut *mut IDWriteInlineObject,
+ ) -> HRESULT,
+ fn GetLineSpacing(
+ lineSpacingMethod: *mut DWRITE_LINE_SPACING_METHOD,
+ lineSpacing: *mut FLOAT,
+ baseline: *mut FLOAT,
+ ) -> HRESULT,
+ fn GetFontCollection(
+ fontCollection: *mut *mut IDWriteFontCollection,
+ ) -> HRESULT,
+ fn GetFontFamilyNameLength() -> UINT32,
+ fn GetFontFamilyName(
+ fontFamilyName: *mut WCHAR,
+ nameSize: UINT32,
+ ) -> HRESULT,
+ fn GetFontWeight() -> DWRITE_FONT_WEIGHT,
+ fn GetFontStyle() -> DWRITE_FONT_STYLE,
+ fn GetFontStretch() -> DWRITE_FONT_STRETCH,
+ fn GetFontSize() -> FLOAT,
+ fn GetLocaleNameLength() -> UINT32,
+ fn GetLocaleName(
+ localeName: *mut WCHAR,
+ nameSize: UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x55f1112b, 0x1dc2, 0x4b3c, 0x95, 0x41, 0xf4, 0x68, 0x94, 0xed, 0x85, 0xb6)]
+interface IDWriteTypography(IDWriteTypographyVtbl): IUnknown(IUnknownVtbl) {
+ fn AddFontFeature(
+ fontFeature: DWRITE_FONT_FEATURE,
+ ) -> HRESULT,
+ fn GetFontFeatureCount() -> UINT32,
+ fn GetFontFeature(
+ fontFeatureIndex: UINT32,
+ fontFeature: *mut DWRITE_FONT_FEATURE,
+ ) -> HRESULT,
+}}
+ENUM!{enum DWRITE_SCRIPT_SHAPES {
+ DWRITE_SCRIPT_SHAPES_DEFAULT = 0,
+ DWRITE_SCRIPT_SHAPES_NO_VISUAL = 1,
+}}
+STRUCT!{struct DWRITE_SCRIPT_ANALYSIS {
+ script: UINT16,
+ shapes: DWRITE_SCRIPT_SHAPES,
+}}
+ENUM!{enum DWRITE_BREAK_CONDITION {
+ DWRITE_BREAK_CONDITION_NEUTRAL,
+ DWRITE_BREAK_CONDITION_CAN_BREAK,
+ DWRITE_BREAK_CONDITION_MAY_NOT_BREAK,
+ DWRITE_BREAK_CONDITION_MUST_BREAK,
+}}
+STRUCT!{struct DWRITE_LINE_BREAKPOINT {
+ bit_fields: UINT8,
+}}
+BITFIELD!{DWRITE_LINE_BREAKPOINT bit_fields: UINT8 [
+ breakConditionBefore set_breakConditionBefore[0..2],
+ breakConditionAfter set_breakConditionAfter[2..4],
+ isWhitespace set_isWhitespace[4..5],
+ isSoftHyphen set_isSoftHyphen[5..6],
+ padding set_padding[6..8],
+]}
+ENUM!{enum DWRITE_NUMBER_SUBSTITUTION_METHOD {
+ DWRITE_NUMBER_SUBSTITUTION_METHOD_FROM_CULTURE,
+ DWRITE_NUMBER_SUBSTITUTION_METHOD_CONTEXTUAL,
+ DWRITE_NUMBER_SUBSTITUTION_METHOD_NONE,
+ DWRITE_NUMBER_SUBSTITUTION_METHOD_NATIONAL,
+ DWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL,
+}}
+RIDL!{#[uuid(0x14885cc9, 0xbab0, 0x4f90, 0xb6, 0xed, 0x5c, 0x36, 0x6a, 0x2c, 0xd0, 0x3d)]
+interface IDWriteNumberSubstitution(IDWriteNumberSubstitutionVtbl): IUnknown(IUnknownVtbl) {}}
+STRUCT!{struct DWRITE_SHAPING_TEXT_PROPERTIES {
+ bit_fields: UINT16,
+}}
+BITFIELD!{DWRITE_SHAPING_TEXT_PROPERTIES bit_fields: UINT16 [
+ isShapedAlone set_isShapedAlone[0..1],
+ reserved set_reserved[1..16],
+]}
+STRUCT!{struct DWRITE_SHAPING_GLYPH_PROPERTIES {
+ bit_fields: UINT16,
+}}
+BITFIELD!{DWRITE_SHAPING_GLYPH_PROPERTIES bit_fields: UINT16 [
+ justification set_justification[0..4],
+ isClusterStart set_isClusterStart[4..5],
+ isDiacritic set_isDiacritic[5..6],
+ isZeroWidthSpace set_isZeroWidthSpace[6..7],
+ reserved set_reserved[7..16],
+]}
+RIDL!{#[uuid(0x688e1a58, 0x5094, 0x47c8, 0xad, 0xc8, 0xfb, 0xce, 0xa6, 0x0a, 0xe9, 0x2b)]
+interface IDWriteTextAnalysisSource(IDWriteTextAnalysisSourceVtbl): IUnknown(IUnknownVtbl) {
+ fn GetTextAtPosition(
+ textPosition: UINT32,
+ textString: *mut *const WCHAR,
+ textLength: *mut UINT32,
+ ) -> HRESULT,
+ fn GetTextBeforePosition(
+ textPosition: UINT32,
+ textString: *mut *const WCHAR,
+ textLength: *mut UINT32,
+ ) -> HRESULT,
+ fn GetParagraphReadingDirection() -> DWRITE_READING_DIRECTION,
+ fn GetLocaleName(
+ textPosition: UINT32,
+ textLength: *mut UINT32,
+ localeName: *mut *const WCHAR,
+ ) -> HRESULT,
+ fn GetNumberSubstitution(
+ textPosition: UINT32,
+ textLength: *mut UINT32,
+ numberSubstitution: *mut *mut IDWriteNumberSubstitution,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x5810cd44, 0x0ca0, 0x4701, 0xb3, 0xfa, 0xbe, 0xc5, 0x18, 0x2a, 0xe4, 0xf6)]
+interface IDWriteTextAnalysisSink(IDWriteTextAnalysisSinkVtbl): IUnknown(IUnknownVtbl) {
+ fn SetScriptAnalysis(
+ textPosition: UINT32,
+ textLength: UINT32,
+ scriptAnalysis: *const DWRITE_SCRIPT_ANALYSIS,
+ ) -> HRESULT,
+ fn SetLineBreakpoints(
+ textPosition: UINT32,
+ textLength: UINT32,
+ lineBreakpoints: *const DWRITE_LINE_BREAKPOINT,
+ ) -> HRESULT,
+ fn SetBidiLevel(
+ textPosition: UINT32,
+ textLength: UINT32,
+ explicitLevel: UINT8,
+ resolvedLevel: UINT8,
+ ) -> HRESULT,
+ fn SetNumberSubstitution(
+ textPosition: UINT32,
+ textLength: UINT32,
+ numberSubstitution: *mut IDWriteNumberSubstitution,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xb7e6163e, 0x7f46, 0x43b4, 0x84, 0xb3, 0xe4, 0xe6, 0x24, 0x9c, 0x36, 0x5d)]
+interface IDWriteTextAnalyzer(IDWriteTextAnalyzerVtbl): IUnknown(IUnknownVtbl) {
+ fn AnalyzeScript(
+ analysisSource: *mut IDWriteTextAnalysisSource,
+ textPosition: UINT32,
+ textLength: UINT32,
+ analysisSink: *mut IDWriteTextAnalysisSink,
+ ) -> HRESULT,
+ fn AnalyzeBidi(
+ analysisSource: *mut IDWriteTextAnalysisSource,
+ textPosition: UINT32,
+ textLength: UINT32,
+ analysisSink: *mut IDWriteTextAnalysisSink,
+ ) -> HRESULT,
+ fn AnalyzeNumberSubstitution(
+ analysisSource: *mut IDWriteTextAnalysisSource,
+ textPosition: UINT32,
+ textLength: UINT32,
+ analysisSink: *mut IDWriteTextAnalysisSink,
+ ) -> HRESULT,
+ fn AnalyzeLineBreakpoints(
+ analysisSource: *mut IDWriteTextAnalysisSource,
+ textPosition: UINT32,
+ textLength: UINT32,
+ analysisSink: *mut IDWriteTextAnalysisSink,
+ ) -> HRESULT,
+ fn GetGlyphs(
+ textString: *const WCHAR,
+ textLength: UINT32,
+ fontFace: *mut IDWriteFontFace,
+ isSideways: BOOL,
+ isRightToLeft: BOOL,
+ scriptAnalysis: *const DWRITE_SCRIPT_ANALYSIS,
+ localeName: *const WCHAR,
+ numberSubstitution: *mut IDWriteNumberSubstitution,
+ features: *mut *const DWRITE_TYPOGRAPHIC_FEATURES,
+ featureRangeLengths: *const UINT32,
+ featureRanges: UINT32,
+ maxGlyphCount: UINT32,
+ clusterMap: *mut UINT16,
+ textProps: *mut DWRITE_SHAPING_TEXT_PROPERTIES,
+ glyphIndices: *mut UINT16,
+ glyphProps: *mut DWRITE_SHAPING_GLYPH_PROPERTIES,
+ actualGlyphCount: *mut UINT32,
+ ) -> HRESULT,
+ fn GetGlyphPlacements(
+ textString: *const WCHAR,
+ clusterMap: *const UINT16,
+ textProps: *mut DWRITE_SHAPING_TEXT_PROPERTIES,
+ textLength: UINT32,
+ glyphIndices: *const UINT16,
+ glyphProps: *const DWRITE_SHAPING_GLYPH_PROPERTIES,
+ glyphCount: UINT32,
+ fontFace: *mut IDWriteFontFace,
+ fontEmSize: FLOAT,
+ isSideways: BOOL,
+ isRightToLeft: BOOL,
+ scriptAnalysis: *const DWRITE_SCRIPT_ANALYSIS,
+ localeName: *const WCHAR,
+ features: *mut *const DWRITE_TYPOGRAPHIC_FEATURES,
+ featureRangeLengths: *const UINT32,
+ featureRanges: UINT32,
+ glyphAdvances: *mut FLOAT,
+ glyphOffsets: *mut DWRITE_GLYPH_OFFSET,
+ ) -> HRESULT,
+ fn GetGdiCompatibleGlyphPlacements(
+ textString: *const WCHAR,
+ clusterMap: *const UINT16,
+ textProps: *mut DWRITE_SHAPING_TEXT_PROPERTIES,
+ textLength: UINT32,
+ glyphIndices: *const UINT16,
+ glyphProps: *const DWRITE_SHAPING_GLYPH_PROPERTIES,
+ glyphCount: UINT32,
+ fontFace: *mut IDWriteFontFace,
+ fontEmSize: FLOAT,
+ pixelsPerDip: FLOAT,
+ transform: *const DWRITE_MATRIX,
+ useGdiNatrual: BOOL,
+ isSideways: BOOL,
+ isRightToLeft: BOOL,
+ scriptAnalysis: *const DWRITE_SCRIPT_ANALYSIS,
+ localeName: *const WCHAR,
+ features: *mut *const DWRITE_TYPOGRAPHIC_FEATURES,
+ featureRangeLengths: *const UINT32,
+ featureRanges: UINT32,
+ glyphAdvances: *mut FLOAT,
+ glyphOffsets: *mut DWRITE_GLYPH_OFFSET,
+ ) -> HRESULT,
+}}
+STRUCT!{struct DWRITE_GLYPH_RUN {
+ fontFace: *mut IDWriteFontFace,
+ fontEmSize: FLOAT,
+ glyphCount: UINT32,
+ glyphIndices: *const UINT16,
+ glyphAdvances: *const FLOAT,
+ glyphOffsets: *const DWRITE_GLYPH_OFFSET,
+ isSideways: BOOL,
+ bidiLevel: UINT32,
+}}
+STRUCT!{struct DWRITE_GLYPH_RUN_DESCRIPTION {
+ localeName: *const WCHAR,
+ string: *const WCHAR,
+ stringLength: UINT32,
+ clusterMap: *const UINT16,
+ textPosition: UINT32,
+}}
+STRUCT!{struct DWRITE_UNDERLINE {
+ width: FLOAT,
+ thickness: FLOAT,
+ offset: FLOAT,
+ runHeight: FLOAT,
+ readingDirection: DWRITE_READING_DIRECTION,
+ flowDirection: DWRITE_FLOW_DIRECTION,
+ localeName: *const WCHAR,
+ measuringMode: DWRITE_MEASURING_MODE,
+}}
+STRUCT!{struct DWRITE_STRIKETHROUGH {
+ width: FLOAT,
+ thickness: FLOAT,
+ offset: FLOAT,
+ readingDirection: DWRITE_READING_DIRECTION,
+ flowDirection: DWRITE_FLOW_DIRECTION,
+ localeName: *const WCHAR,
+ measuringMode: DWRITE_MEASURING_MODE,
+}}
+STRUCT!{struct DWRITE_LINE_METRICS {
+ length: UINT32,
+ trailingWhitespaceLength: UINT32,
+ newlineLength: UINT32,
+ height: FLOAT,
+ baseline: FLOAT,
+ isTrimmed: BOOL,
+}}
+STRUCT!{struct DWRITE_CLUSTER_METRICS {
+ width: FLOAT,
+ length: UINT16,
+ bit_fields: UINT16,
+}}
+BITFIELD!{DWRITE_CLUSTER_METRICS bit_fields: UINT16 [
+ canWrapLineAfter set_canWrapLineAfter[0..1],
+ isWhitespace set_isWhitespace[1..2],
+ isNewline set_isNewline[2..3],
+ isSoftHyphen set_isSoftHyphen[3..4],
+ isRightToLeft set_isRightToLeft[4..5],
+ padding set_padding[5..16],
+]}
+STRUCT!{struct DWRITE_TEXT_METRICS {
+ left: FLOAT,
+ top: FLOAT,
+ width: FLOAT,
+ widthIncludingTrailingWhitespace: FLOAT,
+ height: FLOAT,
+ layoutWidth: FLOAT,
+ layoutHeight: FLOAT,
+ maxBidiReorderingDepth: UINT32,
+ lineCount: UINT32,
+}}
+STRUCT!{struct DWRITE_INLINE_OBJECT_METRICS {
+ width: FLOAT,
+ height: FLOAT,
+ baseline: FLOAT,
+ supportsSideways: BOOL,
+}}
+STRUCT!{struct DWRITE_OVERHANG_METRICS {
+ left: FLOAT,
+ top: FLOAT,
+ right: FLOAT,
+ bottom: FLOAT,
+}}
+STRUCT!{struct DWRITE_HIT_TEST_METRICS {
+ textPosition: UINT32,
+ length: UINT32,
+ left: FLOAT,
+ top: FLOAT,
+ width: FLOAT,
+ height: FLOAT,
+ bidiLevel: UINT32,
+ isText: BOOL,
+ isTrimmed: BOOL,
+}}
+RIDL!{#[uuid(0x8339fde3, 0x106f, 0x47ab, 0x83, 0x73, 0x1c, 0x62, 0x95, 0xeb, 0x10, 0xb3)]
+interface IDWriteInlineObject(IDWriteInlineObjectVtbl): IUnknown(IUnknownVtbl) {
+ fn Draw(
+ clientDrawingContext: *mut c_void,
+ renderer: *mut IDWriteTextRenderer,
+ originX: FLOAT,
+ originY: FLOAT,
+ isSideways: BOOL,
+ isRightToLeft: BOOL,
+ clientDrawingEffect: *mut IUnknown,
+ ) -> HRESULT,
+ fn GetMetrics(
+ metrics: *mut DWRITE_INLINE_OBJECT_METRICS,
+ ) -> HRESULT,
+ fn GetOverhangMetrics(
+ overhangs: *mut DWRITE_OVERHANG_METRICS,
+ ) -> HRESULT,
+ fn GetBreakConditions(
+ breakConditionBefore: *mut DWRITE_BREAK_CONDITION,
+ breakConditionAfter: *mut DWRITE_BREAK_CONDITION,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xeaf3a2da, 0xecf4, 0x4d24, 0xb6, 0x44, 0xb3, 0x4f, 0x68, 0x42, 0x02, 0x4b)]
+interface IDWritePixelSnapping(IDWritePixelSnappingVtbl): IUnknown(IUnknownVtbl) {
+ fn IsPixelSnappingDisabled(
+ clientDrawingContext: *mut c_void,
+ isDisabled: *mut BOOL,
+ ) -> HRESULT,
+ fn GetCurrentTransform(
+ clientDrawingContext: *mut c_void,
+ transform: *mut DWRITE_MATRIX,
+ ) -> HRESULT,
+ fn GetPixelsPerDip(
+ clientDrawingContext: *mut c_void,
+ pixelsPerDip: *mut FLOAT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xef8a8135, 0x5cc6, 0x45fe, 0x88, 0x25, 0xc5, 0xa0, 0x72, 0x4e, 0xb8, 0x19)]
+interface IDWriteTextRenderer(IDWriteTextRendererVtbl):
+ IDWritePixelSnapping(IDWritePixelSnappingVtbl) {
+ fn DrawGlyphRun(
+ clientDrawingContext: *mut c_void,
+ baselineOriginX: FLOAT,
+ baselineOriginY: FLOAT,
+ measuringMode: DWRITE_MEASURING_MODE,
+ glyphRun: *const DWRITE_GLYPH_RUN,
+ glyphRunDescription: *const DWRITE_GLYPH_RUN_DESCRIPTION,
+ clientDrawingEffect: *mut IUnknown,
+ ) -> HRESULT,
+ fn DrawUnderline(
+ clientDrawingContext: *mut c_void,
+ baselineOriginX: FLOAT,
+ baselineOriginY: FLOAT,
+ underline: *const DWRITE_UNDERLINE,
+ clientDrawingEffect: *mut IUnknown,
+ ) -> HRESULT,
+ fn DrawStrikethrough(
+ clientDrawingContext: *mut c_void,
+ baselineOriginX: FLOAT,
+ baselineOriginY: FLOAT,
+ strikethrough: *const DWRITE_STRIKETHROUGH,
+ clientDrawingEffect: *mut IUnknown,
+ ) -> HRESULT,
+ fn DrawInlineObject(
+ clientDrawingContext: *mut c_void,
+ baselineOriginX: FLOAT,
+ baselineOriginY: FLOAT,
+ inlineObject: *mut IDWriteInlineObject,
+ isSideways: BOOL,
+ isRightToLeft: BOOL,
+ clientDrawingEffect: *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x53737037, 0x6d14, 0x410b, 0x9b, 0xfe, 0x0b, 0x18, 0x2b, 0xb7, 0x09, 0x61)]
+interface IDWriteTextLayout(IDWriteTextLayoutVtbl):
+ IDWriteTextFormat(IDWriteTextFormatVtbl) {
+ fn SetMaxWidth(
+ maxWidth: FLOAT,
+ ) -> HRESULT,
+ fn SetMaxHeight(
+ maxHeight: FLOAT,
+ ) -> HRESULT,
+ fn SetFontCollection(
+ fontCollection: *mut IDWriteFontCollection,
+ textRange: DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn SetFontFamilyName(
+ fontFamilyName: *const WCHAR,
+ textRange: DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn SetFontWeight(
+ fontWeight: DWRITE_FONT_WEIGHT,
+ textRange: DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn SetFontStyle(
+ fontStyle: DWRITE_FONT_STYLE,
+ textRange: DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn SetFontStretch(
+ fontStretch: DWRITE_FONT_STRETCH,
+ textRange: DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn SetFontSize(
+ fontSize: FLOAT,
+ textRange: DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn SetUnderline(
+ hasUnderline: BOOL,
+ textRange: DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn SetStrikethrough(
+ hasStrikethrough: BOOL,
+ textRange: DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn SetDrawingEffect(
+ drawingEffect: *mut IUnknown,
+ textRange: DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn SetInlineObject(
+ inlineObject: *mut IDWriteInlineObject,
+ textRange: DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn SetTypography(
+ typography: *mut IDWriteTypography,
+ textRange: DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn SetLocaleName(
+ localeName: *const WCHAR,
+ textRange: DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn GetMaxWidth() -> FLOAT,
+ fn GetMaxHeight() -> FLOAT,
+ fn GetFontCollection(
+ currentPosition: UINT32,
+ fontCollection: *mut *mut IDWriteFontCollection,
+ textRange: *mut DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn GetFontFamilyNameLength(
+ currentPosition: UINT32,
+ nameLength: *mut UINT32,
+ textRange: *mut DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn GetFontFamilyName(
+ currentPosition: UINT32,
+ fontFamilyName: *mut WCHAR,
+ nameSize: UINT32,
+ textRange: *mut DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn GetFontWeight(
+ currentPosition: UINT32,
+ fontWeight: *mut DWRITE_FONT_WEIGHT,
+ textRange: *mut DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn GetFontStyle(
+ currentPosition: UINT32,
+ fontStyle: *mut DWRITE_FONT_STYLE,
+ textRange: *mut DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn GetFontStretch(
+ currentPosition: UINT32,
+ fontStretch: *mut DWRITE_FONT_STRETCH,
+ textRange: *mut DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn GetFontSize(
+ currentPosition: UINT32,
+ fontSize: *mut FLOAT,
+ textRange: *mut DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn GetUnderline(
+ currentPosition: UINT32,
+ hasUnderline: *mut BOOL,
+ textRange: *mut DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn GetStrikethrough(
+ currentPosition: UINT32,
+ hasStrikethrough: *mut BOOL,
+ textRange: *mut DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn GetDrawingEffect(
+ currentPosition: UINT32,
+ drawingEffect: *mut *mut IUnknown,
+ textRange: *mut DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn GetInlineObject(
+ currentPosition: UINT32,
+ inlineObject: *mut *mut IDWriteInlineObject,
+ textRange: *mut DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn GetTypography(
+ currentPosition: UINT32,
+ typography: *mut *mut IDWriteTypography,
+ textRange: *mut DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn GetLocaleNameLength(
+ currentPosition: UINT32,
+ nameLength: *mut UINT32,
+ textRange: *mut DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn GetLocaleName(
+ currentPosition: UINT32,
+ localeName: *mut WCHAR,
+ nameSize: UINT32,
+ textRange: *mut DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn Draw(
+ clientDrawingContext: *mut c_void,
+ renderer: *mut IDWriteTextRenderer,
+ originX: FLOAT,
+ originY: FLOAT,
+ ) -> HRESULT,
+ fn GetLineMetrics(
+ lineMetrics: *mut DWRITE_LINE_METRICS,
+ maxLineCount: UINT32,
+ actualLineCount: *mut UINT32,
+ ) -> HRESULT,
+ fn GetMetrics(
+ textMetrics: *mut DWRITE_TEXT_METRICS,
+ ) -> HRESULT,
+ fn GetOverhangMetrics(
+ overhangs: *mut DWRITE_OVERHANG_METRICS,
+ ) -> HRESULT,
+ fn GetClusterMetrics(
+ clusterMetrics: *mut DWRITE_CLUSTER_METRICS,
+ maxClusterCount: UINT32,
+ actualClusterCount: *mut UINT32,
+ ) -> HRESULT,
+ fn DetermineMinWidth(
+ minWidth: *mut FLOAT,
+ ) -> HRESULT,
+ fn HitTestPoint(
+ pointX: FLOAT,
+ pointY: FLOAT,
+ isTrailingHit: *mut BOOL,
+ isInside: *mut BOOL,
+ hitTestMetrics: *mut DWRITE_HIT_TEST_METRICS,
+ ) -> HRESULT,
+ fn HitTestTextPosition(
+ textPosition: UINT32,
+ isTrailingHit: BOOL,
+ pointX: *mut FLOAT,
+ pointY: *mut FLOAT,
+ hitTestMetrics: *mut DWRITE_HIT_TEST_METRICS,
+ ) -> HRESULT,
+ fn HitTestTextRange(
+ textPosition: UINT32,
+ textLength: UINT32,
+ originX: FLOAT,
+ originY: FLOAT,
+ hitTestMetrics: *mut DWRITE_HIT_TEST_METRICS,
+ maxHitTestMetricsCount: UINT32,
+ actualHitTestMetricsCount: *mut UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x5e5a32a3, 0x8dff, 0x4773, 0x9f, 0xf6, 0x06, 0x96, 0xea, 0xb7, 0x72, 0x67)]
+interface IDWriteBitmapRenderTarget(IDWriteBitmapRenderTargetVtbl): IUnknown(IUnknownVtbl) {
+ fn DrawGlyphRun(
+ baselineOriginX: FLOAT,
+ baselineOriginY: FLOAT,
+ measuringMode: DWRITE_MEASURING_MODE,
+ glyphRun: *const DWRITE_GLYPH_RUN,
+ renderingParams: *mut IDWriteRenderingParams,
+ textColor: COLORREF,
+ blackBoxRect: *mut RECT,
+ ) -> HRESULT,
+ fn GetMemoryDC() -> HDC,
+ fn GetPixelsPerDip() -> FLOAT,
+ fn SetPixelsPerDip(
+ pixelsPerDip: FLOAT,
+ ) -> HRESULT,
+ fn GetCurrentTransform(
+ transform: *mut DWRITE_MATRIX,
+ ) -> HRESULT,
+ fn SetCurrentTransform(
+ transform: *const DWRITE_MATRIX,
+ ) -> HRESULT,
+ fn GetSize(
+ size: *mut SIZE,
+ ) -> HRESULT,
+ fn Resize(
+ width: UINT32,
+ height: UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x1edd9491, 0x9853, 0x4299, 0x89, 0x8f, 0x64, 0x32, 0x98, 0x3b, 0x6f, 0x3a)]
+interface IDWriteGdiInterop(IDWriteGdiInteropVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateFontFromLOGFONT(
+ logFont: *const LOGFONTW,
+ font: *mut *mut IDWriteFont,
+ ) -> HRESULT,
+ fn ConvertFontToLOGFONT(
+ font: *mut IDWriteFont,
+ logFont: *mut LOGFONTW,
+ isSystemFont: *mut BOOL,
+ ) -> HRESULT,
+ fn ConvertFontFaceToLOGFONT(
+ font: *mut IDWriteFontFace,
+ logFont: *mut LOGFONTW,
+ ) -> HRESULT,
+ fn CreateFontFaceFromHdc(
+ hdc: HDC,
+ fontFace: *mut *mut IDWriteFontFace,
+ ) -> HRESULT,
+ fn CreateBitmapRenderTarget(
+ hdc: HDC,
+ width: UINT32,
+ height: UINT32,
+ renderTarget: *mut *mut IDWriteBitmapRenderTarget,
+ ) -> HRESULT,
+}}
+ENUM!{enum DWRITE_TEXTURE_TYPE {
+ DWRITE_TEXTURE_ALIASED_1x1 = 0,
+ DWRITE_TEXTURE_CLEARTYPE_3x1 = 1,
+}}
+pub const DWRITE_ALPHA_MAX: BYTE = 255;
+RIDL!{#[uuid(0x7d97dbf7, 0xe085, 0x42d4, 0x81, 0xe3, 0x6a, 0x88, 0x3b, 0xde, 0xd1, 0x18)]
+interface IDWriteGlyphRunAnalysis(IDWriteGlyphRunAnalysisVtbl): IUnknown(IUnknownVtbl) {
+ fn GetAlphaTextureBounds(
+ textureType: DWRITE_TEXTURE_TYPE,
+ textureBounds: *mut RECT,
+ ) -> HRESULT,
+ fn CreateAlphaTexture(
+ textureType: DWRITE_TEXTURE_TYPE,
+ textureBounds: *const RECT,
+ alphaValues: *mut BYTE,
+ bufferSize: UINT32,
+ ) -> HRESULT,
+ fn GetAlphaBlendParams(
+ renderingParams: *mut IDWriteRenderingParams,
+ blendGamma: *mut FLOAT,
+ blendEnhancedContrast: *mut FLOAT,
+ blendClearTypeLevel: *mut FLOAT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xb859ee5a, 0xd838, 0x4b5b, 0xa2, 0xe8, 0x1a, 0xdc, 0x7d, 0x93, 0xdb, 0x48)]
+interface IDWriteFactory(IDWriteFactoryVtbl): IUnknown(IUnknownVtbl) {
+ fn GetSystemFontCollection(
+ fontCollection: *mut *mut IDWriteFontCollection,
+ checkForUpdates: BOOL,
+ ) -> HRESULT,
+ fn CreateCustomFontCollection(
+ collectionLoader: *mut IDWriteFontCollectionLoader,
+ collectionKey: *const c_void,
+ collectionKeySize: UINT32,
+ fontCollection: *mut *mut IDWriteFontCollection,
+ ) -> HRESULT,
+ fn RegisterFontCollectionLoader(
+ fontCollectionLoader: *mut IDWriteFontCollectionLoader,
+ ) -> HRESULT,
+ fn UnregisterFontCollectionLoader(
+ fontCollectionLoader: *mut IDWriteFontCollectionLoader,
+ ) -> HRESULT,
+ fn CreateFontFileReference(
+ filePath: *const WCHAR,
+ lastWriteTime: *const FILETIME,
+ fontFile: *mut *mut IDWriteFontFile,
+ ) -> HRESULT,
+ fn CreateCustomFontFileReference(
+ fontFileReferenceKey: *const c_void,
+ fontFileReferenceKeySize: UINT32,
+ fontFileLoader: *mut IDWriteFontFileLoader,
+ fontFile: *mut *mut IDWriteFontFile,
+ ) -> HRESULT,
+ fn CreateFontFace(
+ fontFaceType: DWRITE_FONT_FACE_TYPE,
+ numberOfFiles: UINT32,
+ fontFiles: *const *mut IDWriteFontFile,
+ faceIndex: UINT32,
+ fontFaceSimulationFlags: DWRITE_FONT_SIMULATIONS,
+ fontFace: *mut *mut IDWriteFontFace,
+ ) -> HRESULT,
+ fn CreateRenderingParams(
+ renderingParams: *mut *mut IDWriteRenderingParams,
+ ) -> HRESULT,
+ fn CreateMonitorRenderingParams(
+ monitor: HMONITOR,
+ renderingParams: *mut *mut IDWriteRenderingParams,
+ ) -> HRESULT,
+ fn CreateCustomRenderingParams(
+ gamma: FLOAT,
+ enhancedContrast: FLOAT,
+ clearTypeLevel: FLOAT,
+ pixelGeometry: DWRITE_PIXEL_GEOMETRY,
+ renderingMode: DWRITE_RENDERING_MODE,
+ renderingParams: *mut *mut IDWriteRenderingParams,
+ ) -> HRESULT,
+ fn RegisterFontFileLoader(
+ fontFileLoader: *mut IDWriteFontFileLoader,
+ ) -> HRESULT,
+ fn UnregisterFontFileLoader(
+ fontFileLoader: *mut IDWriteFontFileLoader,
+ ) -> HRESULT,
+ fn CreateTextFormat(
+ fontFamilyName: *const WCHAR,
+ fontCollection: *mut IDWriteFontCollection,
+ fontWeight: DWRITE_FONT_WEIGHT,
+ fontStyle: DWRITE_FONT_STYLE,
+ fontStretch: DWRITE_FONT_STRETCH,
+ fontSize: FLOAT,
+ localeName: *const WCHAR,
+ textFormat: *mut *mut IDWriteTextFormat,
+ ) -> HRESULT,
+ fn CreateTypography(
+ typography: *mut *mut IDWriteTypography,
+ ) -> HRESULT,
+ fn GetGdiInterop(
+ gdiInterop: *mut *mut IDWriteGdiInterop,
+ ) -> HRESULT,
+ fn CreateTextLayout(
+ string: *const WCHAR,
+ stringLength: UINT32,
+ textFormat: *mut IDWriteTextFormat,
+ maxWidth: FLOAT,
+ maxHeight: FLOAT,
+ textLayout: *mut *mut IDWriteTextLayout,
+ ) -> HRESULT,
+ fn CreateGdiCompatibleTextLayout(
+ string: *const WCHAR,
+ stringLength: UINT32,
+ textFormat: *mut IDWriteTextFormat,
+ layoutWidth: FLOAT,
+ layoutHeight: FLOAT,
+ pixelsPerDip: FLOAT,
+ transform: *const DWRITE_MATRIX,
+ useGdiNatrual: BOOL,
+ textLayout: *mut *mut IDWriteTextLayout,
+ ) -> HRESULT,
+ fn CreateEllipsisTrimmingSign(
+ textFormat: *mut IDWriteTextFormat,
+ trimmingSign: *mut *mut IDWriteInlineObject,
+ ) -> HRESULT,
+ fn CreateTextAnalyzer(
+ textAnalyzer: *mut *mut IDWriteTextAnalyzer,
+ ) -> HRESULT,
+ fn CreateNumberSubstitution(
+ substitutionMethod: DWRITE_NUMBER_SUBSTITUTION_METHOD,
+ localeName: *const WCHAR,
+ ignoreUserOverride: BOOL,
+ numberSubstitution: *mut *mut IDWriteNumberSubstitution,
+ ) -> HRESULT,
+ fn CreateGlyphRunAnalysis(
+ glyphRun: *const DWRITE_GLYPH_RUN,
+ pixelsPerDip: FLOAT,
+ transform: *const DWRITE_MATRIX,
+ renderingMode: DWRITE_RENDERING_MODE,
+ measuringMode: DWRITE_MEASURING_MODE,
+ baselineOriginX: FLOAT,
+ baselineOriginY: FLOAT,
+ glyphRunAnalysis: *mut *mut IDWriteGlyphRunAnalysis,
+ ) -> HRESULT,
+}}
+pub const FACILITY_DWRITE: HRESULT = 0x898;
+pub const DWRITE_ERR_BASE: HRESULT = 0x5000;
+#[inline]
+pub fn MAKE_DWRITE_HR(severity: HRESULT, code: HRESULT) -> HRESULT {
+ MAKE_HRESULT!(severity, FACILITY_DWRITE, DWRITE_ERR_BASE + code)
+}
+#[inline]
+pub fn MAKE_DWRITE_HR_ERR(code: HRESULT) -> HRESULT {
+ MAKE_DWRITE_HR(SEVERITY_ERROR, code)
+}
+extern "system" {
+ pub fn DWriteCreateFactory(
+ factoryType: DWRITE_FACTORY_TYPE, iid: REFIID, factory: *mut *mut IUnknown,
+ ) -> HRESULT;
+}
diff --git a/vendor/winapi/src/um/dwrite_1.rs b/vendor/winapi/src/um/dwrite_1.rs
new file mode 100644
index 000000000..b762bbdcb
--- /dev/null
+++ b/vendor/winapi/src/um/dwrite_1.rs
@@ -0,0 +1,746 @@
+// 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 content of dwrite_1.h
+use shared::basetsd::{INT16, INT32, UINT16, UINT32, UINT8};
+use shared::minwindef::{BOOL, FLOAT};
+use um::dcommon::DWRITE_MEASURING_MODE;
+use um::dwrite::{
+ DWRITE_GLYPH_OFFSET, DWRITE_MATRIX, DWRITE_PIXEL_GEOMETRY, DWRITE_RENDERING_MODE,
+ DWRITE_SCRIPT_ANALYSIS, DWRITE_SHAPING_GLYPH_PROPERTIES, DWRITE_TEXT_RANGE,
+ IDWriteBitmapRenderTarget, IDWriteBitmapRenderTargetVtbl, IDWriteFactory, IDWriteFactoryVtbl,
+ IDWriteFont, IDWriteFontCollection, IDWriteFontFace, IDWriteFontFaceVtbl, IDWriteFontVtbl,
+ IDWriteRenderingParams, IDWriteRenderingParamsVtbl, IDWriteTextAnalysisSink,
+ IDWriteTextAnalysisSinkVtbl, IDWriteTextAnalysisSource, IDWriteTextAnalysisSourceVtbl,
+ IDWriteTextAnalyzer, IDWriteTextAnalyzerVtbl, IDWriteTextLayout, IDWriteTextLayoutVtbl,
+};
+use um::winnt::{HRESULT, WCHAR};
+ENUM!{enum DWRITE_PANOSE_FAMILY {
+ DWRITE_PANOSE_FAMILY_ANY = 0x0, // 0
+ DWRITE_PANOSE_FAMILY_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_FAMILY_TEXT_DISPLAY = 0x2, // 2
+ DWRITE_PANOSE_FAMILY_SCRIPT = 0x3, // 3
+ DWRITE_PANOSE_FAMILY_DECORATIVE = 0x4, // 4
+ DWRITE_PANOSE_FAMILY_SYMBOL = 0x5, // 5
+ DWRITE_PANOSE_FAMILY_PICTORIAL = 0x5, // 5
+}}
+ENUM!{enum DWRITE_PANOSE_SERIF_STYLE {
+ DWRITE_PANOSE_SERIF_STYLE_ANY = 0x0, // 0
+ DWRITE_PANOSE_SERIF_STYLE_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_SERIF_STYLE_COVE = 0x2, // 2
+ DWRITE_PANOSE_SERIF_STYLE_OBTUSE_COVE = 0x3, // 3
+ DWRITE_PANOSE_SERIF_STYLE_SQUARE_COVE = 0x4, // 4
+ DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SQUARE_COVE = 0x5, // 5
+ DWRITE_PANOSE_SERIF_STYLE_SQUARE = 0x6, // 6
+ DWRITE_PANOSE_SERIF_STYLE_THIN = 0x7, // 7
+ DWRITE_PANOSE_SERIF_STYLE_OVAL = 0x8, // 8
+ DWRITE_PANOSE_SERIF_STYLE_EXAGGERATED = 0x9, // 9
+ DWRITE_PANOSE_SERIF_STYLE_TRIANGLE = 0xA, // 10
+ DWRITE_PANOSE_SERIF_STYLE_NORMAL_SANS = 0xB, // 11
+ DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SANS = 0xC, // 12
+ DWRITE_PANOSE_SERIF_STYLE_PERPENDICULAR_SANS = 0xD, // 13
+ DWRITE_PANOSE_SERIF_STYLE_FLARED = 0xE, // 14
+ DWRITE_PANOSE_SERIF_STYLE_ROUNDED = 0xF, // 15
+ DWRITE_PANOSE_SERIF_STYLE_SCRIPT = 0x10, // 16
+ DWRITE_PANOSE_SERIF_STYLE_PERP_SANS = 0xD, // 13
+ DWRITE_PANOSE_SERIF_STYLE_BONE = 0x8, // 8
+}}
+ENUM!{enum DWRITE_PANOSE_WEIGHT {
+ DWRITE_PANOSE_WEIGHT_ANY = 0x0, // 0
+ DWRITE_PANOSE_WEIGHT_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_WEIGHT_VERY_LIGHT = 0x2, // 2
+ DWRITE_PANOSE_WEIGHT_LIGHT = 0x3, // 3
+ DWRITE_PANOSE_WEIGHT_THIN = 0x4, // 4
+ DWRITE_PANOSE_WEIGHT_BOOK = 0x5, // 5
+ DWRITE_PANOSE_WEIGHT_MEDIUM = 0x6, // 6
+ DWRITE_PANOSE_WEIGHT_DEMI = 0x7, // 7
+ DWRITE_PANOSE_WEIGHT_BOLD = 0x8, // 8
+ DWRITE_PANOSE_WEIGHT_HEAVY = 0x9, // 9
+ DWRITE_PANOSE_WEIGHT_BLACK = 0xA, // 10
+ DWRITE_PANOSE_WEIGHT_EXTRA_BLACK = 0xB, // 11
+ DWRITE_PANOSE_WEIGHT_NORD = 0xB, // 11
+}}
+ENUM!{enum DWRITE_PANOSE_PROPORTION {
+ DWRITE_PANOSE_PROPORTION_ANY = 0x0, // 0
+ DWRITE_PANOSE_PROPORTION_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_PROPORTION_OLD_STYLE = 0x2, // 2
+ DWRITE_PANOSE_PROPORTION_MODERN = 0x3, // 3
+ DWRITE_PANOSE_PROPORTION_EVEN_WIDTH = 0x4, // 4
+ DWRITE_PANOSE_PROPORTION_EXPANDED = 0x5, // 5
+ DWRITE_PANOSE_PROPORTION_CONDENSED = 0x6, // 6
+ DWRITE_PANOSE_PROPORTION_VERY_EXPANDED = 0x7, // 7
+ DWRITE_PANOSE_PROPORTION_VERY_CONDENSED = 0x8, // 8
+ DWRITE_PANOSE_PROPORTION_MONOSPACED = 0x9, // 9
+}}
+ENUM!{enum DWRITE_PANOSE_CONTRAST {
+ DWRITE_PANOSE_CONTRAST_ANY = 0x0, // 0
+ DWRITE_PANOSE_CONTRAST_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_CONTRAST_NONE = 0x2, // 2
+ DWRITE_PANOSE_CONTRAST_VERY_LOW = 0x3, // 3
+ DWRITE_PANOSE_CONTRAST_LOW = 0x4, // 4
+ DWRITE_PANOSE_CONTRAST_MEDIUM_LOW = 0x5, // 5
+ DWRITE_PANOSE_CONTRAST_MEDIUM = 0x6, // 6
+ DWRITE_PANOSE_CONTRAST_MEDIUM_HIGH = 0x7, // 7
+ DWRITE_PANOSE_CONTRAST_HIGH = 0x8, // 8
+ DWRITE_PANOSE_CONTRAST_VERY_HIGH = 0x9, // 9
+ DWRITE_PANOSE_CONTRAST_HORIZONTAL_LOW = 0xA, // 10
+ DWRITE_PANOSE_CONTRAST_HORIZONTAL_MEDIUM = 0xB, // 11
+ DWRITE_PANOSE_CONTRAST_HORIZONTAL_HIGH = 0xC, // 12
+ DWRITE_PANOSE_CONTRAST_BROKEN = 0xD, // 13
+}}
+ENUM!{enum DWRITE_PANOSE_STROKE_VARIATION {
+ DWRITE_PANOSE_STROKE_VARIATION_ANY = 0x0, // 0
+ DWRITE_PANOSE_STROKE_VARIATION_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_STROKE_VARIATION_NO_VARIATION = 0x2, // 2
+ DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_DIAGONAL = 0x3, // 3
+ DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_TRANSITIONAL = 0x4, // 4
+ DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_VERTICAL = 0x5, // 5
+ DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_HORIZONTAL = 0x6, // 6
+ DWRITE_PANOSE_STROKE_VARIATION_RAPID_VERTICAL = 0x7, // 7
+ DWRITE_PANOSE_STROKE_VARIATION_RAPID_HORIZONTAL = 0x8, // 8
+ DWRITE_PANOSE_STROKE_VARIATION_INSTANT_VERTICAL = 0x9, // 9
+ DWRITE_PANOSE_STROKE_VARIATION_INSTANT_HORIZONTAL = 0xA, // 10
+}}
+ENUM!{enum DWRITE_PANOSE_ARM_STYLE {
+ DWRITE_PANOSE_ARM_STYLE_ANY = 0x0, // 0
+ DWRITE_PANOSE_ARM_STYLE_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORIZONTAL = 0x2, // 2
+ DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_WEDGE = 0x3, // 3
+ DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL = 0x4, // 4
+ DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_SINGLE_SERIF = 0x5, // 5
+ DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_DOUBLE_SERIF = 0x6, // 6
+ DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_HORIZONTAL = 0x7, // 7
+ DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_WEDGE = 0x8, // 8
+ DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_VERTICAL = 0x9, // 9
+ DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_SINGLE_SERIF = 0xA, // 10
+ DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_DOUBLE_SERIF = 0xB, // 11
+ DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORZ = 0x2, // 2
+ DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERT = 0x4, // 4
+ DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_HORZ = 0x7, // 7
+ DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_WEDGE = 0x8, // 8
+ DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_VERT = 0x9, // 9
+ DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_SINGLE_SERIF = 0xA, // 10
+ DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_DOUBLE_SERIF = 0xB, // 11
+}}
+ENUM!{enum DWRITE_PANOSE_LETTERFORM {
+ DWRITE_PANOSE_LETTERFORM_ANY = 0x0, // 0
+ DWRITE_PANOSE_LETTERFORM_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_LETTERFORM_NORMAL_CONTACT = 0x2, // 2
+ DWRITE_PANOSE_LETTERFORM_NORMAL_WEIGHTED = 0x3, // 3
+ DWRITE_PANOSE_LETTERFORM_NORMAL_BOXED = 0x4, // 4
+ DWRITE_PANOSE_LETTERFORM_NORMAL_FLATTENED = 0x5, // 5
+ DWRITE_PANOSE_LETTERFORM_NORMAL_ROUNDED = 0x6, // 6
+ DWRITE_PANOSE_LETTERFORM_NORMAL_OFF_CENTER = 0x7, // 7
+ DWRITE_PANOSE_LETTERFORM_NORMAL_SQUARE = 0x8, // 8
+ DWRITE_PANOSE_LETTERFORM_OBLIQUE_CONTACT = 0x9, // 9
+ DWRITE_PANOSE_LETTERFORM_OBLIQUE_WEIGHTED = 0xA, // 10
+ DWRITE_PANOSE_LETTERFORM_OBLIQUE_BOXED = 0xB, // 11
+ DWRITE_PANOSE_LETTERFORM_OBLIQUE_FLATTENED = 0xC, // 12
+ DWRITE_PANOSE_LETTERFORM_OBLIQUE_ROUNDED = 0xD, // 13
+ DWRITE_PANOSE_LETTERFORM_OBLIQUE_OFF_CENTER = 0xE, // 14
+ DWRITE_PANOSE_LETTERFORM_OBLIQUE_SQUARE = 0xF, // 15
+}}
+ENUM!{enum DWRITE_PANOSE_MIDLINE {
+ DWRITE_PANOSE_MIDLINE_ANY = 0x0, // 0
+ DWRITE_PANOSE_MIDLINE_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_MIDLINE_STANDARD_TRIMMED = 0x2, // 2
+ DWRITE_PANOSE_MIDLINE_STANDARD_POINTED = 0x3, // 3
+ DWRITE_PANOSE_MIDLINE_STANDARD_SERIFED = 0x4, // 4
+ DWRITE_PANOSE_MIDLINE_HIGH_TRIMMED = 0x5, // 5
+ DWRITE_PANOSE_MIDLINE_HIGH_POINTED = 0x6, // 6
+ DWRITE_PANOSE_MIDLINE_HIGH_SERIFED = 0x7, // 7
+ DWRITE_PANOSE_MIDLINE_CONSTANT_TRIMMED = 0x8, // 8
+ DWRITE_PANOSE_MIDLINE_CONSTANT_POINTED = 0x9, // 9
+ DWRITE_PANOSE_MIDLINE_CONSTANT_SERIFED = 0xA, // 10
+ DWRITE_PANOSE_MIDLINE_LOW_TRIMMED = 0xB, // 11
+ DWRITE_PANOSE_MIDLINE_LOW_POINTED = 0xC, // 12
+ DWRITE_PANOSE_MIDLINE_LOW_SERIFED = 0xD, // 13
+}}
+ENUM!{enum DWRITE_PANOSE_XHEIGHT {
+ DWRITE_PANOSE_XHEIGHT_ANY = 0x0, // 0
+ DWRITE_PANOSE_XHEIGHT_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_XHEIGHT_CONSTANT_SMALL = 0x2, // 2
+ DWRITE_PANOSE_XHEIGHT_CONSTANT_STANDARD = 0x3, // 3
+ DWRITE_PANOSE_XHEIGHT_CONSTANT_LARGE = 0x4, // 4
+ DWRITE_PANOSE_XHEIGHT_DUCKING_SMALL = 0x5, // 5
+ DWRITE_PANOSE_XHEIGHT_DUCKING_STANDARD = 0x6, // 6
+ DWRITE_PANOSE_XHEIGHT_DUCKING_LARGE = 0x7, // 7
+ DWRITE_PANOSE_XHEIGHT_CONSTANT_STD = 0x3, // 3
+ DWRITE_PANOSE_XHEIGHT_DUCKING_STD = 0x6, // 6
+}}
+ENUM!{enum DWRITE_PANOSE_TOOL_KIND {
+ DWRITE_PANOSE_TOOL_KIND_ANY = 0x0, // 0
+ DWRITE_PANOSE_TOOL_KIND_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_TOOL_KIND_FLAT_NIB = 0x2, // 2
+ DWRITE_PANOSE_TOOL_KIND_PRESSURE_POINT = 0x3, // 3
+ DWRITE_PANOSE_TOOL_KIND_ENGRAVED = 0x4, // 4
+ DWRITE_PANOSE_TOOL_KIND_BALL = 0x5, // 5
+ DWRITE_PANOSE_TOOL_KIND_BRUSH = 0x6, // 6
+ DWRITE_PANOSE_TOOL_KIND_ROUGH = 0x7, // 7
+ DWRITE_PANOSE_TOOL_KIND_FELT_PEN_BRUSH_TIP = 0x8, // 8
+ DWRITE_PANOSE_TOOL_KIND_WILD_BRUSH = 0x9, // 9
+}}
+ENUM!{enum DWRITE_PANOSE_SPACING {
+ DWRITE_PANOSE_SPACING_ANY = 0x0, // 0
+ DWRITE_PANOSE_SPACING_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_SPACING_PROPORTIONAL_SPACED = 0x2, // 2
+ DWRITE_PANOSE_SPACING_MONOSPACED = 0x3, // 3
+}}
+ENUM!{enum DWRITE_PANOSE_ASPECT_RATIO {
+ DWRITE_PANOSE_ASPECT_RATIO_ANY = 0x0, // 0
+ DWRITE_PANOSE_ASPECT_RATIO_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_ASPECT_RATIO_VERY_CONDENSED = 0x2, // 2
+ DWRITE_PANOSE_ASPECT_RATIO_CONDENSED = 0x3, // 3
+ DWRITE_PANOSE_ASPECT_RATIO_NORMAL = 0x4, // 4
+ DWRITE_PANOSE_ASPECT_RATIO_EXPANDED = 0x5, // 5
+ DWRITE_PANOSE_ASPECT_RATIO_VERY_EXPANDED = 0x6, // 6
+}}
+ENUM!{enum DWRITE_PANOSE_SCRIPT_TOPOLOGY {
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_ANY = 0x0, // 0
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_DISCONNECTED = 0x2, // 2
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_TRAILING = 0x3, // 3
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_CONNECTED = 0x4, // 4
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_DISCONNECTED = 0x5, // 5
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_TRAILING = 0x6, // 6
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_CONNECTED = 0x7, // 7
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_DISCONNECTED = 0x8, // 8
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_TRAILING = 0x9, // 9
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_CONNECTED = 0xA, // 10
+}}
+ENUM!{enum DWRITE_PANOSE_SCRIPT_FORM {
+ DWRITE_PANOSE_SCRIPT_FORM_ANY = 0x0, // 0
+ DWRITE_PANOSE_SCRIPT_FORM_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_NO_WRAPPING = 0x2, // 2
+ DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_SOME_WRAPPING = 0x3, // 3
+ DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_MORE_WRAPPING = 0x4, // 4
+ DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_EXTREME_WRAPPING = 0x5, // 5
+ DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_NO_WRAPPING = 0x6, // 6
+ DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_SOME_WRAPPING = 0x7, // 7
+ DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_MORE_WRAPPING = 0x8, // 8
+ DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_EXTREME_WRAPPING = 0x9, // 9
+ DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_NO_WRAPPING = 0xA, // 10
+ DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_SOME_WRAPPING = 0xB, // 11
+ DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_MORE_WRAPPING = 0xC, // 12
+ DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_EXTREME_WRAPPING = 0xD, // 13
+}}
+ENUM!{enum DWRITE_PANOSE_FINIALS {
+ DWRITE_PANOSE_FINIALS_ANY = 0x0, // 0
+ DWRITE_PANOSE_FINIALS_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_FINIALS_NONE_NO_LOOPS = 0x2, // 2
+ DWRITE_PANOSE_FINIALS_NONE_CLOSED_LOOPS = 0x3, // 3
+ DWRITE_PANOSE_FINIALS_NONE_OPEN_LOOPS = 0x4, // 4
+ DWRITE_PANOSE_FINIALS_SHARP_NO_LOOPS = 0x5, // 5
+ DWRITE_PANOSE_FINIALS_SHARP_CLOSED_LOOPS = 0x6, // 6
+ DWRITE_PANOSE_FINIALS_SHARP_OPEN_LOOPS = 0x7, // 7
+ DWRITE_PANOSE_FINIALS_TAPERED_NO_LOOPS = 0x8, // 8
+ DWRITE_PANOSE_FINIALS_TAPERED_CLOSED_LOOPS = 0x9, // 9
+ DWRITE_PANOSE_FINIALS_TAPERED_OPEN_LOOPS = 0xA, // 10
+ DWRITE_PANOSE_FINIALS_ROUND_NO_LOOPS = 0xB, // 11
+ DWRITE_PANOSE_FINIALS_ROUND_CLOSED_LOOPS = 0xC, // 12
+ DWRITE_PANOSE_FINIALS_ROUND_OPEN_LOOPS = 0xD, // 13
+}}
+ENUM!{enum DWRITE_PANOSE_XASCENT {
+ DWRITE_PANOSE_XASCENT_ANY = 0x0, // 0
+ DWRITE_PANOSE_XASCENT_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_XASCENT_VERY_LOW = 0x2, // 2
+ DWRITE_PANOSE_XASCENT_LOW = 0x3, // 3
+ DWRITE_PANOSE_XASCENT_MEDIUM = 0x4, // 4
+ DWRITE_PANOSE_XASCENT_HIGH = 0x5, // 5
+ DWRITE_PANOSE_XASCENT_VERY_HIGH = 0x6, // 6
+}}
+ENUM!{enum DWRITE_PANOSE_DECORATIVE_CLASS {
+ DWRITE_PANOSE_DECORATIVE_CLASS_ANY = 0x0, // 0
+ DWRITE_PANOSE_DECORATIVE_CLASS_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_DECORATIVE_CLASS_DERIVATIVE = 0x2, // 2
+ DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_TOPOLOGY = 0x3, // 3
+ DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ELEMENTS = 0x4, // 4
+ DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ASPECT = 0x5, // 5
+ DWRITE_PANOSE_DECORATIVE_CLASS_INITIALS = 0x6, // 6
+ DWRITE_PANOSE_DECORATIVE_CLASS_CARTOON = 0x7, // 7
+ DWRITE_PANOSE_DECORATIVE_CLASS_PICTURE_STEMS = 0x8, // 8
+ DWRITE_PANOSE_DECORATIVE_CLASS_ORNAMENTED = 0x9, // 9
+ DWRITE_PANOSE_DECORATIVE_CLASS_TEXT_AND_BACKGROUND = 0xA, // 10
+ DWRITE_PANOSE_DECORATIVE_CLASS_COLLAGE = 0xB, // 11
+ DWRITE_PANOSE_DECORATIVE_CLASS_MONTAGE = 0xC, // 12
+}}
+ENUM!{enum DWRITE_PANOSE_ASPECT {
+ DWRITE_PANOSE_ASPECT_ANY = 0x0, // 0
+ DWRITE_PANOSE_ASPECT_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_ASPECT_SUPER_CONDENSED = 0x2, // 2
+ DWRITE_PANOSE_ASPECT_VERY_CONDENSED = 0x3, // 3
+ DWRITE_PANOSE_ASPECT_CONDENSED = 0x4, // 4
+ DWRITE_PANOSE_ASPECT_NORMAL = 0x5, // 5
+ DWRITE_PANOSE_ASPECT_EXTENDED = 0x6, // 6
+ DWRITE_PANOSE_ASPECT_VERY_EXTENDED = 0x7, // 7
+ DWRITE_PANOSE_ASPECT_SUPER_EXTENDED = 0x8, // 8
+ DWRITE_PANOSE_ASPECT_MONOSPACED = 0x9, // 9
+}}
+ENUM!{enum DWRITE_PANOSE_FILL {
+ DWRITE_PANOSE_FILL_ANY = 0x0, // 0
+ DWRITE_PANOSE_FILL_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_FILL_STANDARD_SOLID_FILL = 0x2, // 2
+ DWRITE_PANOSE_FILL_NO_FILL = 0x3, // 3
+ DWRITE_PANOSE_FILL_PATTERNED_FILL = 0x4, // 4
+ DWRITE_PANOSE_FILL_COMPLEX_FILL = 0x5, // 5
+ DWRITE_PANOSE_FILL_SHAPED_FILL = 0x6, // 6
+ DWRITE_PANOSE_FILL_DRAWN_DISTRESSED = 0x7, // 7
+}}
+ENUM!{enum DWRITE_PANOSE_LINING {
+ DWRITE_PANOSE_LINING_ANY = 0x0, // 0
+ DWRITE_PANOSE_LINING_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_LINING_NONE = 0x2, // 2
+ DWRITE_PANOSE_LINING_INLINE = 0x3, // 3
+ DWRITE_PANOSE_LINING_OUTLINE = 0x4, // 4
+ DWRITE_PANOSE_LINING_ENGRAVED = 0x5, // 5
+ DWRITE_PANOSE_LINING_SHADOW = 0x6, // 6
+ DWRITE_PANOSE_LINING_RELIEF = 0x7, // 7
+ DWRITE_PANOSE_LINING_BACKDROP = 0x8, // 8
+}}
+ENUM!{enum DWRITE_PANOSE_DECORATIVE_TOPOLOGY {
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ANY = 0x0, // 0
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_STANDARD = 0x2, // 2
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SQUARE = 0x3, // 3
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_MULTIPLE_SEGMENT = 0x4, // 4
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ART_DECO = 0x5, // 5
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UNEVEN_WEIGHTING = 0x6, // 6
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_ARMS = 0x7, // 7
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_FORMS = 0x8, // 8
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_LOMBARDIC_FORMS = 0x9, // 9
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UPPER_CASE_IN_LOWER_CASE = 0xA, // 10
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_IMPLIED_TOPOLOGY = 0xB, // 11
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_HORSESHOE_E_AND_A = 0xC, // 12
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_CURSIVE = 0xD, // 13
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_BLACKLETTER = 0xE, // 14
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SWASH_VARIANCE = 0xF, // 15
+}}
+ENUM!{enum DWRITE_PANOSE_CHARACTER_RANGES {
+ DWRITE_PANOSE_CHARACTER_RANGES_ANY = 0x0, // 0
+ DWRITE_PANOSE_CHARACTER_RANGES_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_CHARACTER_RANGES_EXTENDED_COLLECTION = 0x2, // 2
+ DWRITE_PANOSE_CHARACTER_RANGES_LITERALS = 0x3, // 3
+ DWRITE_PANOSE_CHARACTER_RANGES_NO_LOWER_CASE = 0x4, // 4
+ DWRITE_PANOSE_CHARACTER_RANGES_SMALL_CAPS = 0x5, // 5
+}}
+ENUM!{enum DWRITE_PANOSE_SYMBOL_KIND {
+ DWRITE_PANOSE_SYMBOL_KIND_ANY = 0x0, // 0
+ DWRITE_PANOSE_SYMBOL_KIND_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_SYMBOL_KIND_MONTAGES = 0x2, // 2
+ DWRITE_PANOSE_SYMBOL_KIND_PICTURES = 0x3, // 3
+ DWRITE_PANOSE_SYMBOL_KIND_SHAPES = 0x4, // 4
+ DWRITE_PANOSE_SYMBOL_KIND_SCIENTIFIC = 0x5, // 5
+ DWRITE_PANOSE_SYMBOL_KIND_MUSIC = 0x6, // 6
+ DWRITE_PANOSE_SYMBOL_KIND_EXPERT = 0x7, // 7
+ DWRITE_PANOSE_SYMBOL_KIND_PATTERNS = 0x8, // 8
+ DWRITE_PANOSE_SYMBOL_KIND_BOARDERS = 0x9, // 9
+ DWRITE_PANOSE_SYMBOL_KIND_ICONS = 0xA, // 10
+ DWRITE_PANOSE_SYMBOL_KIND_LOGOS = 0xB, // 11
+ DWRITE_PANOSE_SYMBOL_KIND_INDUSTRY_SPECIFIC = 0xC, // 12
+}}
+ENUM!{enum DWRITE_PANOSE_SYMBOL_ASPECT_RATIO {
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_ANY = 0x0, // 0
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_FIT = 0x1, // 1
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_WIDTH = 0x2, // 2
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_EXCEPTIONALLY_WIDE = 0x3, // 3
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_SUPER_WIDE = 0x4, // 4
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_WIDE = 0x5, // 5
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_WIDE = 0x6, // 6
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NORMAL = 0x7, // 7
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NARROW = 0x8, // 8
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_NARROW = 0x9, // 9
+}}
+ENUM!{enum DWRITE_OUTLINE_THRESHOLD {
+ DWRITE_OUTLINE_THRESHOLD_ANTIALIASED = 0x0, // 0
+ DWRITE_OUTLINE_THRESHOLD_ALIASED = 0x1, // 1
+}}
+ENUM!{enum DWRITE_BASELINE {
+ DWRITE_BASELINE_DEFAULT = 0x0, // 0
+ DWRITE_BASELINE_ROMAN = 0x1, // 1
+ DWRITE_BASELINE_CENTRAL = 0x2, // 2
+ DWRITE_BASELINE_MATH = 0x3, // 3
+ DWRITE_BASELINE_HANGING = 0x4, // 4
+ DWRITE_BASELINE_IDEOGRAPHIC_BOTTOM = 0x5, // 5
+ DWRITE_BASELINE_IDEOGRAPHIC_TOP = 0x6, // 6
+ DWRITE_BASELINE_MINIMUM = 0x7, // 7
+ DWRITE_BASELINE_MAXIMUM = 0x8, // 8
+}}
+ENUM!{enum DWRITE_VERTICAL_GLYPH_ORIENTATION {
+ DWRITE_VERTICAL_GLYPH_ORIENTATION_DEFAULT = 0x0, // 0
+ DWRITE_VERTICAL_GLYPH_ORIENTATION_STACKED = 0x1, // 1
+}}
+ENUM!{enum DWRITE_GLYPH_ORIENTATION_ANGLE {
+ DWRITE_GLYPH_ORIENTATION_ANGLE_0_DEGREES = 0x0, // 0
+ DWRITE_GLYPH_ORIENTATION_ANGLE_90_DEGREES = 0x1, // 1
+ DWRITE_GLYPH_ORIENTATION_ANGLE_180_DEGREES = 0x2, // 2
+ DWRITE_GLYPH_ORIENTATION_ANGLE_270_DEGREES = 0x3, // 3
+}}
+STRUCT!{struct DWRITE_FONT_METRICS1 {
+ designUnitsPerEm: UINT16,
+ ascent: UINT16,
+ descent: UINT16,
+ lineGap: INT16,
+ capHeight: UINT16,
+ xHeight: UINT16,
+ underlinePosition: INT16,
+ underlineThickness: UINT16,
+ strikethroughPosition: INT16,
+ strikethroughThickness: UINT16,
+ glyphBoxLeft: INT16,
+ glyphBoxTop: INT16,
+ glyphBoxRight: INT16,
+ glyphBoxBottom: INT16,
+ subscriptPositionX: INT16,
+ subscriptPositionY: INT16,
+ subscriptSizeX: INT16,
+ subscriptSizeY: INT16,
+ superscriptPositionX: INT16,
+ superscriptPositionY: INT16,
+ superscriptSizeX: INT16,
+ superscriptSizeY: INT16,
+ hasTypographicMetrics: BOOL,
+}}
+STRUCT!{struct DWRITE_CARET_METRICS {
+ slopeRise: INT16,
+ slopeRun: INT16,
+ offset: INT16,
+}}
+STRUCT!{struct DWRITE_PANOSE_text {
+ familyKind: UINT8,
+ serifStyle: UINT8,
+ weight: UINT8,
+ proportion: UINT8,
+ contrast: UINT8,
+ strokeVariation: UINT8,
+ armStyle: UINT8,
+ letterform: UINT8,
+ midline: UINT8,
+ xHeight: UINT8,
+}}
+STRUCT!{struct DWRITE_PANOSE_script {
+ familyKind: UINT8,
+ toolKind: UINT8,
+ weight: UINT8,
+ spacing: UINT8,
+ aspectRatio: UINT8,
+ contrast: UINT8,
+ scriptTopology: UINT8,
+ scriptForm: UINT8,
+ finials: UINT8,
+ xAscent: UINT8,
+}}
+STRUCT!{struct DWRITE_PANOSE_decorative {
+ familyKind: UINT8,
+ decorativeClass: UINT8,
+ weight: UINT8,
+ aspect: UINT8,
+ contrast: UINT8,
+ serifVariant: UINT8,
+ fill: UINT8,
+ lining: UINT8,
+ decorativeTopology: UINT8,
+ characterRange: UINT8,
+}}
+STRUCT!{struct DWRITE_PANOSE_symbol {
+ familyKind: UINT8,
+ symbolKind: UINT8,
+ weight: UINT8,
+ spacing: UINT8,
+ aspectRatioAndContrast: UINT8,
+ aspectRatio94: UINT8,
+ aspectRatio119: UINT8,
+ aspectRatio157: UINT8,
+ aspectRatio163: UINT8,
+ aspectRatio211: UINT8,
+}}
+UNION!{union DWRITE_PANOSE {
+ [u8; 10],
+ values values_mut: [UINT8; 10],
+ familyKind familyKind_mut: UINT8,
+ text text_mut: DWRITE_PANOSE_text,
+ script script_mut: DWRITE_PANOSE_script,
+ decorative decorative_mut: DWRITE_PANOSE_decorative,
+ symbol symbol_mut: DWRITE_PANOSE_symbol,
+}}
+STRUCT!{struct DWRITE_UNICODE_RANGE {
+ first: UINT32,
+ last: UINT32,
+}}
+STRUCT!{struct DWRITE_SCRIPT_PROPERTIES {
+ isoScriptCode: UINT32,
+ isoScriptNumber: UINT32,
+ clusterLookahead: UINT32,
+ justificationCharacter: UINT32,
+ bitfield0: UINT32,
+}}
+BITFIELD!{DWRITE_SCRIPT_PROPERTIES bitfield0: UINT32 [
+ restrictCaretToClusters set_restrictCaretToClusters[0..1],
+ usesWordDividers set_usesWordDividers[1..2],
+ isDiscreteWriting set_isDiscreteWriting[2..3],
+ isBlockWriting set_isBlockWriting[3..4],
+ isDistributedWithinCluster set_isDistributedWithinCluster[4..5],
+ isConnectedWriting set_isConnectedWriting[5..6],
+ isCursiveWriting set_isCursiveWriting[6..7],
+ reserved set_reserved[7..32],
+]}
+STRUCT!{struct DWRITE_JUSTIFICATION_OPPORTUNITY {
+ expansionMinimum: FLOAT,
+ expansionMaximum: FLOAT,
+ compressionMaximum: FLOAT,
+ bitfield0: UINT32,
+}}
+BITFIELD!{DWRITE_JUSTIFICATION_OPPORTUNITY bitfield0: UINT32 [
+ expansionPriority set_expansionPriority[0..8],
+ compressionPriority set_compressionPriority[8..16],
+ allowResidualExpansion set_allowResidualExpansion[16..17],
+ allowResidualCompression set_allowResidualCompression[17..18],
+ applyToLeadingEdge set_applyToLeadingEdge[18..19],
+ applyToTrailingEdge set_applyToTrailingEdge[19..20],
+ reserved set_reserved[20..32],
+]}
+RIDL!{#[uuid(0x30572f99, 0xdac6, 0x41db, 0xa1, 0x6e, 0x04, 0x86, 0x30, 0x7e, 0x60, 0x6a)]
+interface IDWriteFactory1(IDWriteFactory1Vtbl): IDWriteFactory(IDWriteFactoryVtbl) {
+ fn GetEudcFontCollection(
+ fontCollection: *mut *mut IDWriteFontCollection,
+ checkForUpdates: BOOL,
+ ) -> HRESULT,
+ fn CreateCustomRenderingParams(
+ gamma: FLOAT,
+ enhancedContrast: FLOAT,
+ enhancedContrastGrayscale: FLOAT,
+ clearTypeLevel: FLOAT,
+ pixelGeometry: DWRITE_PIXEL_GEOMETRY,
+ renderingMode: DWRITE_RENDERING_MODE,
+ renderingParams: *mut *mut IDWriteRenderingParams1,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa71efdb4, 0x9fdb, 0x4838, 0xad, 0x90, 0xcf, 0xc3, 0xbe, 0x8c, 0x3d, 0xaf)]
+interface IDWriteFontFace1(IDWriteFontFace1Vtbl): IDWriteFontFace(IDWriteFontFaceVtbl) {
+ fn GetMetrics(
+ fontMetrics: *mut DWRITE_FONT_METRICS1,
+ ) -> (),
+ fn GetGdiCompatibleMetrics(
+ emSize: FLOAT,
+ pixelsPerDip: FLOAT,
+ transform: *const DWRITE_MATRIX,
+ fontMetrics: *mut DWRITE_FONT_METRICS1,
+ ) -> HRESULT,
+ fn GetCaretMetrics(
+ caretMetrics: *mut DWRITE_CARET_METRICS,
+ ) -> (),
+ fn GetUnicodeRanges(
+ maxRangeCount: UINT32,
+ unicodeRanges: *mut DWRITE_UNICODE_RANGE,
+ actualRangeCount: *mut UINT32,
+ ) -> HRESULT,
+ fn IsMonospacedFont() -> BOOL,
+ fn GetDesignGlyphAdvances(
+ glyphCount: UINT32,
+ glyphIndices: *const UINT16,
+ glyphAdvances: *mut INT32,
+ isSideways: BOOL,
+ ) -> HRESULT,
+ fn GetGdiCompatibleGlyphAdvances(
+ emSize: FLOAT,
+ pixelsPerDip: FLOAT,
+ transform: *const DWRITE_MATRIX,
+ useGdiNatural: BOOL,
+ isSideways: BOOL,
+ glyphCount: UINT32,
+ glyphIndices: *const UINT16,
+ glyphAdvances: *mut INT32,
+ ) -> HRESULT,
+ fn GetKerningPairAdjustments(
+ glyphCount: UINT32,
+ glyphIndices: *const UINT16,
+ glyphAdvanceAdjustments: *mut INT32,
+ ) -> HRESULT,
+ fn HasKerningPairs() -> BOOL,
+ fn GetRecommendedRenderingMode(
+ fontEmSize: FLOAT,
+ dpiX: FLOAT,
+ dpiY: FLOAT,
+ transform: *const DWRITE_MATRIX,
+ isSideways: BOOL,
+ outlineThreshold: DWRITE_OUTLINE_THRESHOLD,
+ measuringMode: DWRITE_MEASURING_MODE,
+ renderingMode: *mut DWRITE_RENDERING_MODE,
+ ) -> HRESULT,
+ fn GetVerticalGlyphVariants(
+ glyphCount: UINT32,
+ nominalGlyphIndices: *const UINT16,
+ verticalGlyphIndices: *mut UINT16,
+ ) -> HRESULT,
+ fn HasVerticalGlyphVariants() -> BOOL,
+}}
+RIDL!{#[uuid(0xacd16696, 0x8c14, 0x4f5d, 0x87, 0x7e, 0xfe, 0x3f, 0xc1, 0xd3, 0x27, 0x38)]
+interface IDWriteFont1(IDWriteFont1Vtbl): IDWriteFont(IDWriteFontVtbl) {
+ fn GetMetrics(
+ fontMetrics: *mut DWRITE_FONT_METRICS1,
+ ) -> (),
+ fn GetPanose(
+ panose: *mut DWRITE_PANOSE,
+ ) -> (),
+ fn GetUnicodeRanges(
+ maxRangeCount: UINT32,
+ unicodeRanges: *mut DWRITE_UNICODE_RANGE,
+ actualRangeCount: *mut UINT32,
+ ) -> HRESULT,
+ fn IsMonospacedFont() -> BOOL,
+}}
+RIDL!{#[uuid(0x94413cf4, 0xa6fc, 0x4248, 0x8b, 0x50, 0x66, 0x74, 0x34, 0x8f, 0xca, 0xd3)]
+interface IDWriteRenderingParams1(IDWriteRenderingParams1Vtbl):
+ IDWriteRenderingParams(IDWriteRenderingParamsVtbl) {
+ fn GetGrayscaleEnhancedContrast() -> FLOAT,
+}}
+RIDL!{#[uuid(0x80dad800, 0xe21f, 0x4e83, 0x96, 0xce, 0xbf, 0xcc, 0xe5, 0x00, 0xdb, 0x7c)]
+interface IDWriteTextAnalyzer1(IDWriteTextAnalyzer1Vtbl):
+ IDWriteTextAnalyzer(IDWriteTextAnalyzerVtbl) {
+ fn ApplyCharacterSpacing(
+ leadingSpacing: FLOAT,
+ trailingSpacing: FLOAT,
+ minimumAdvanceWidth: FLOAT,
+ textLength: UINT32,
+ glyphCount: UINT32,
+ clusterMap: *const UINT16,
+ glyphAdvances: *const FLOAT,
+ glyphOffsets: *const DWRITE_GLYPH_OFFSET,
+ glyphProperties: *const DWRITE_SHAPING_GLYPH_PROPERTIES,
+ modifiedGlyphAdvances: *mut FLOAT,
+ modifiedGlyphOffsets: *mut DWRITE_GLYPH_OFFSET,
+ ) -> HRESULT,
+ fn GetBaseline(
+ fontFace: *mut IDWriteFontFace,
+ baseline: DWRITE_BASELINE,
+ isVertical: BOOL,
+ isSimulationAllowed: BOOL,
+ scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
+ localeName: *const WCHAR,
+ baselineCoordinate: *mut INT32,
+ exists: *mut BOOL,
+ ) -> HRESULT,
+ fn AnalyzeVerticalGlyphOrientation(
+ analysisSource: *mut IDWriteTextAnalysisSource1,
+ textPosition: UINT32,
+ textLength: UINT32,
+ analysisSink: *mut IDWriteTextAnalysisSink1,
+ ) -> HRESULT,
+ fn GetGlyphOrientationTransform(
+ glyphOrientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
+ isSideways: BOOL,
+ transform: *mut DWRITE_MATRIX,
+ ) -> HRESULT,
+ fn GetScriptProperties(
+ scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
+ scriptProperties: *mut DWRITE_SCRIPT_PROPERTIES,
+ ) -> HRESULT,
+ fn GetTextComplexity(
+ textString: *const WCHAR,
+ textLength: UINT32,
+ fontFace: *mut IDWriteFontFace,
+ isTextSimple: *mut BOOL,
+ textLengthRead: *mut UINT32,
+ glyphIndices: *mut UINT16,
+ ) -> HRESULT,
+ fn GetJustificationOpportunities(
+ fontFace: *mut IDWriteFontFace,
+ fontEmSize: FLOAT,
+ scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
+ textLength: UINT32,
+ glyphCount: UINT32,
+ textString: *const WCHAR,
+ clusterMap: *const UINT16,
+ glyphProperties: *const DWRITE_SHAPING_GLYPH_PROPERTIES,
+ justificationOpportunities: *mut DWRITE_JUSTIFICATION_OPPORTUNITY,
+ ) -> HRESULT,
+ fn JustifyGlyphAdvances(
+ lineWidth: FLOAT,
+ glyphCount: UINT32,
+ justificationOpportunities: *const DWRITE_JUSTIFICATION_OPPORTUNITY,
+ glyphAdvances: *const FLOAT,
+ glyphOffsets: *const DWRITE_GLYPH_OFFSET,
+ justifiedGlyphAdvances: *mut FLOAT,
+ justifiedGlyphOffsets: *mut DWRITE_GLYPH_OFFSET,
+ ) -> HRESULT,
+ fn GetJustifiedGlyphs(
+ fontFace: *mut IDWriteFontFace,
+ fontEmSize: FLOAT,
+ scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
+ textLength: UINT32,
+ glyphCount: UINT32,
+ maxGlyphCount: UINT32,
+ clusterMap: *const UINT16,
+ glyphIndices: *const UINT16,
+ glyphAdvances: *const FLOAT,
+ justifiedGlyphAdvances: *const FLOAT,
+ justifiedGlyphOffsets: *const DWRITE_GLYPH_OFFSET,
+ glyphProperties: *const DWRITE_SHAPING_GLYPH_PROPERTIES,
+ actualGlyphCount: *mut UINT32,
+ modifiedClusterMap: *mut UINT16,
+ modifiedGlyphIndices: *mut UINT16,
+ modifiedGlyphAdvances: *mut FLOAT,
+ modifiedGlyphOffsets: *mut DWRITE_GLYPH_OFFSET,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x639cfad8, 0x0fb4, 0x4b21, 0xa5, 0x8a, 0x06, 0x79, 0x20, 0x12, 0x00, 0x09)]
+interface IDWriteTextAnalysisSource1(IDWriteTextAnalysisSource1Vtbl):
+ IDWriteTextAnalysisSource(IDWriteTextAnalysisSourceVtbl) {
+ fn GetVerticalGlyphOrientation(
+ textPosition: UINT32,
+ textLength: *mut UINT32,
+ glyphOrientation: *mut DWRITE_VERTICAL_GLYPH_ORIENTATION,
+ bidiLevel: *mut UINT8,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xb0d941a0, 0x85e7, 0x4d8b, 0x9f, 0xd3, 0x5c, 0xed, 0x99, 0x34, 0x48, 0x2a)]
+interface IDWriteTextAnalysisSink1(IDWriteTextAnalysisSink1Vtbl):
+ IDWriteTextAnalysisSink(IDWriteTextAnalysisSinkVtbl) {
+ fn SetGlyphOrientation(
+ textPosition: UINT32,
+ textLength: UINT32,
+ glyphOrientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
+ adjustedBidiLevel: UINT8,
+ isSideways: BOOL,
+ isRightToLeft: BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x9064d822, 0x80a7, 0x465c, 0xa9, 0x86, 0xdf, 0x65, 0xf7, 0x8b, 0x8f, 0xeb)]
+interface IDWriteTextLayout1(IDWriteTextLayout1Vtbl):
+ IDWriteTextLayout(IDWriteTextLayoutVtbl) {
+ fn SetPairKerning(
+ isPairKerningEnabled: BOOL,
+ textRange: DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn GetPairKerning(
+ currentPosition: UINT32,
+ isPairKerningEnabled: *mut BOOL,
+ textRange: *mut DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn SetCharacterSpacing(
+ leadingSpacing: FLOAT,
+ trailingSpacing: FLOAT,
+ minimumAdvanceWidth: FLOAT,
+ textRange: DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+ fn GetCharacterSpacing(
+ currentPosition: UINT32,
+ leadingSpacing: *mut FLOAT,
+ trailingSpacing: *mut FLOAT,
+ minimumAdvanceWidth: *mut FLOAT,
+ textRange: *mut DWRITE_TEXT_RANGE,
+ ) -> HRESULT,
+}}
+ENUM!{enum DWRITE_TEXT_ANTIALIAS_MODE {
+ DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE = 0x0, // 0
+ DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE = 0x1, // 1
+}}
+RIDL!{#[uuid(0x791e8298, 0x3ef3, 0x4230, 0x98, 0x80, 0xc9, 0xbd, 0xec, 0xc4, 0x20, 0x64)]
+interface IDWriteBitmapRenderTarget1(IDWriteBitmapRenderTarget1Vtbl):
+ IDWriteBitmapRenderTarget(IDWriteBitmapRenderTargetVtbl) {
+ fn GetTextAntialiasMode() -> DWRITE_TEXT_ANTIALIAS_MODE,
+ fn SetTextAntialiasMode(
+ antialiasMode: DWRITE_TEXT_ANTIALIAS_MODE,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/dwrite_2.rs b/vendor/winapi/src/um/dwrite_2.rs
new file mode 100644
index 000000000..e9810bba0
--- /dev/null
+++ b/vendor/winapi/src/um/dwrite_2.rs
@@ -0,0 +1,293 @@
+// 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 content of dwrite_2.h
+use ctypes::{c_void, wchar_t};
+use shared::basetsd::{UINT16, UINT32, UINT8};
+use shared::d3d9types::D3DCOLORVALUE;
+use shared::minwindef::{BOOL, FLOAT};
+use um::dcommon::DWRITE_MEASURING_MODE;
+use um::dwrite::{
+ DWRITE_FONT_FEATURE_TAG, DWRITE_FONT_STRETCH, DWRITE_FONT_STYLE, DWRITE_FONT_WEIGHT,
+ DWRITE_GLYPH_RUN, DWRITE_GLYPH_RUN_DESCRIPTION, DWRITE_MATRIX, DWRITE_PIXEL_GEOMETRY,
+ DWRITE_RENDERING_MODE, DWRITE_SCRIPT_ANALYSIS, DWRITE_STRIKETHROUGH, DWRITE_UNDERLINE,
+ IDWriteFont, IDWriteFontCollection, IDWriteFontFace, IDWriteGlyphRunAnalysis,
+ IDWriteInlineObject, IDWriteRenderingParams, IDWriteTextAnalysisSource, IDWriteTextFormat,
+ IDWriteTextFormatVtbl, IDWriteTextRenderer, IDWriteTextRendererVtbl,
+};
+use um::dwrite_1::{
+ DWRITE_GLYPH_ORIENTATION_ANGLE, DWRITE_OUTLINE_THRESHOLD, DWRITE_TEXT_ANTIALIAS_MODE,
+ DWRITE_UNICODE_RANGE, DWRITE_VERTICAL_GLYPH_ORIENTATION, IDWriteFactory1,
+ IDWriteFactory1Vtbl, IDWriteFont1, IDWriteFont1Vtbl, IDWriteFontFace1, IDWriteFontFace1Vtbl,
+ IDWriteRenderingParams1, IDWriteRenderingParams1Vtbl, IDWriteTextAnalyzer1,
+ IDWriteTextAnalyzer1Vtbl, IDWriteTextLayout1, IDWriteTextLayout1Vtbl,
+};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, WCHAR};
+ENUM!{enum DWRITE_OPTICAL_ALIGNMENT {
+ DWRITE_OPTICAL_ALIGNMENT_NONE = 0x0, // 0
+ DWRITE_OPTICAL_ALIGNMENT_NO_SIDE_BEARINGS = 0x1, // 1
+}}
+ENUM!{enum DWRITE_GRID_FIT_MODE {
+ DWRITE_GRID_FIT_MODE_DEFAULT = 0x0, // 0
+ DWRITE_GRID_FIT_MODE_DISABLED = 0x1, // 1
+ DWRITE_GRID_FIT_MODE_ENABLED = 0x2, // 2
+}}
+STRUCT!{struct DWRITE_TEXT_METRICS1 {
+ left: FLOAT,
+ top: FLOAT,
+ width: FLOAT,
+ widthIncludingTrailingWhitespace: FLOAT,
+ height: FLOAT,
+ layoutWidth: FLOAT,
+ layoutHeight: FLOAT,
+ maxBidiReorderingDepth: UINT32,
+ lineCount: UINT32,
+ heightIncludingTrailingWhitespace: FLOAT,
+}}
+RIDL!{#[uuid(0xd3e0e934, 0x22a0, 0x427e, 0xaa, 0xe4, 0x7d, 0x95, 0x74, 0xb5, 0x9d, 0xb1)]
+interface IDWriteTextRenderer1(IDWriteTextRenderer1Vtbl):
+ IDWriteTextRenderer(IDWriteTextRendererVtbl) {
+ fn DrawGlyphRun(
+ clientDrawingContext: *mut c_void,
+ baselineOriginX: FLOAT,
+ baselineOriginY: FLOAT,
+ orientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
+ measuringMode: DWRITE_MEASURING_MODE,
+ glyphRun: *const DWRITE_GLYPH_RUN,
+ glyphRunDescription: *const DWRITE_GLYPH_RUN_DESCRIPTION,
+ clientDrawingEffect: *mut IUnknown,
+ ) -> HRESULT,
+ fn DrawUnderline(
+ clientDrawingContext: *mut c_void,
+ baselineOriginX: FLOAT,
+ baselineOriginY: FLOAT,
+ orientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
+ underline: *const DWRITE_UNDERLINE,
+ clientDrawingEffect: *mut IUnknown,
+ ) -> HRESULT,
+ fn DrawStrikethrough(
+ clientDrawingContext: *mut c_void,
+ baselineOriginX: FLOAT,
+ baselineOriginY: FLOAT,
+ orientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
+ strikethrough: *const DWRITE_STRIKETHROUGH,
+ clientDrawingEffect: *mut IUnknown,
+ ) -> HRESULT,
+ fn DrawInlineObject(
+ clientDrawingContext: *mut c_void,
+ originX: FLOAT,
+ originY: FLOAT,
+ orientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
+ inlineObject: *mut IDWriteInlineObject,
+ isSideways: BOOL,
+ isRightToLeft: BOOL,
+ clientDrawingEffect: *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x5f174b49, 0x0d8b, 0x4cfb, 0x8b, 0xca, 0xf1, 0xcc, 0xe9, 0xd0, 0x6c, 0x67)]
+interface IDWriteTextFormat1(IDWriteTextFormat1Vtbl):
+ IDWriteTextFormat(IDWriteTextFormatVtbl) {
+ fn SetVerticalGlyphOrientation(
+ glyphOrientation: DWRITE_VERTICAL_GLYPH_ORIENTATION,
+ ) -> HRESULT,
+ fn GetVerticalGlyphOrientation() -> DWRITE_VERTICAL_GLYPH_ORIENTATION,
+ fn SetLastLineWrapping(
+ isLastLineWrappingEnabled: BOOL,
+ ) -> HRESULT,
+ fn GetLastLineWrapping() -> BOOL,
+ fn SetOpticalAlignment(
+ opticalAlignment: DWRITE_OPTICAL_ALIGNMENT,
+ ) -> HRESULT,
+ fn GetOpticalAlignment() -> DWRITE_OPTICAL_ALIGNMENT,
+ fn SetFontFallback(
+ fontFallback: *mut IDWriteFontFallback,
+ ) -> HRESULT,
+ fn GetFontFallback(
+ fontFallback: *mut *mut IDWriteFontFallback,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x1093c18f, 0x8d5e, 0x43f0, 0xb0, 0x64, 0x09, 0x17, 0x31, 0x1b, 0x52, 0x5e)]
+interface IDWriteTextLayout2(IDWriteTextLayout2Vtbl):
+ IDWriteTextLayout1(IDWriteTextLayout1Vtbl) {
+ fn GetMetrics(
+ textMetrics: *mut DWRITE_TEXT_METRICS1,
+ ) -> HRESULT,
+ fn SetVerticalGlyphOrientation(
+ glyphOrientation: DWRITE_VERTICAL_GLYPH_ORIENTATION,
+ ) -> HRESULT,
+ fn GetVerticalGlyphOrientation() -> DWRITE_VERTICAL_GLYPH_ORIENTATION,
+ fn SetLastLineWrapping(
+ isLastLineWrappingEnabled: BOOL,
+ ) -> HRESULT,
+ fn GetLastLineWrapping() -> BOOL,
+ fn SetOpticalAlignment(
+ opticalAlignment: DWRITE_OPTICAL_ALIGNMENT,
+ ) -> HRESULT,
+ fn GetOpticalAlignment() -> DWRITE_OPTICAL_ALIGNMENT,
+ fn SetFontFallback(
+ fontFallback: *mut IDWriteFontFallback,
+ ) -> HRESULT,
+ fn GetFontFallback(
+ fontFallback: *mut *mut IDWriteFontFallback,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x553a9ff3, 0x5693, 0x4df7, 0xb5, 0x2b, 0x74, 0x80, 0x6f, 0x7f, 0x2e, 0xb9)]
+interface IDWriteTextAnalyzer2(IDWriteTextAnalyzer2Vtbl):
+ IDWriteTextAnalyzer1(IDWriteTextAnalyzer1Vtbl) {
+ fn GetGlyphOrientationTransform(
+ glyphOrientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
+ isSideways: BOOL,
+ originX: FLOAT,
+ originY: FLOAT,
+ transform: *mut DWRITE_MATRIX,
+ ) -> HRESULT,
+ fn GetTypographicFeatures(
+ fontFace: *mut IDWriteFontFace,
+ scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
+ localeName: *const WCHAR,
+ maxTagCount: UINT32,
+ actualTagCount: *mut UINT32,
+ tags: *mut DWRITE_FONT_FEATURE_TAG,
+ ) -> HRESULT,
+ fn CheckTypographicFeature(
+ fontFace: *mut IDWriteFontFace,
+ scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
+ localeName: *const WCHAR,
+ featureTag: DWRITE_FONT_FEATURE_TAG,
+ glyphCount: UINT32,
+ glyphIndices: *const UINT16,
+ featureApplies: *mut UINT8,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xefa008f9, 0xf7a1, 0x48bf, 0xb0, 0x5c, 0xf2, 0x24, 0x71, 0x3c, 0xc0, 0xff)]
+interface IDWriteFontFallback(IDWriteFontFallbackVtbl): IUnknown(IUnknownVtbl) {
+ fn MapCharacters(
+ analysisSource: *mut IDWriteTextAnalysisSource,
+ textPosition: UINT32,
+ textLength: UINT32,
+ baseFontCollection: *mut IDWriteFontCollection,
+ baseFamilyName: *mut wchar_t,
+ baseWeight: DWRITE_FONT_WEIGHT,
+ baseStyle: DWRITE_FONT_STYLE,
+ baseStretch: DWRITE_FONT_STRETCH,
+ mappedLength: *mut UINT32,
+ mappedFont: *mut *mut IDWriteFont,
+ scale: *mut FLOAT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xfd882d06, 0x8aba, 0x4fb8, 0xb8, 0x49, 0x8b, 0xe8, 0xb7, 0x3e, 0x14, 0xde)]
+interface IDWriteFontFallbackBuilder(IDWriteFontFallbackBuilderVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn AddMapping(
+ ranges: *const DWRITE_UNICODE_RANGE,
+ rangesCount: UINT32,
+ targetFamilyNames: *mut *const WCHAR,
+ targetFamilyNamesCount: UINT32,
+ fontCollection: *mut IDWriteFontCollection,
+ localeName: *const WCHAR,
+ baseFamilyName: *const WCHAR,
+ scale: FLOAT,
+ ) -> HRESULT,
+ fn AddMappings(
+ fontFallback: *mut IDWriteFontFallback,
+ ) -> HRESULT,
+ fn CreateFontFallback(
+ fontFallback: *mut *mut IDWriteFontFallback,
+ ) -> HRESULT,
+}}
+pub type DWRITE_COLOR_F = D3DCOLORVALUE;
+RIDL!{#[uuid(0x29748ed6, 0x8c9c, 0x4a6a, 0xbe, 0x0b, 0xd9, 0x12, 0xe8, 0x53, 0x89, 0x44)]
+interface IDWriteFont2(IDWriteFont2Vtbl): IDWriteFont1(IDWriteFont1Vtbl) {
+ fn IsColorFont() -> BOOL,
+}}
+RIDL!{#[uuid(0xd8b768ff, 0x64bc, 0x4e66, 0x98, 0x2b, 0xec, 0x8e, 0x87, 0xf6, 0x93, 0xf7)]
+interface IDWriteFontFace2(IDWriteFontFace2Vtbl):
+ IDWriteFontFace1(IDWriteFontFace1Vtbl) {
+ fn IsColorFont() -> BOOL,
+ fn GetColorPaletteCount() -> UINT32,
+ fn GetPaletteEntryCount() -> UINT32,
+ fn GetPaletteEntries(
+ colorPaletteIndex: UINT32,
+ firstEntryIndex: UINT32,
+ entryCount: UINT32,
+ paletteEntries: *mut DWRITE_COLOR_F,
+ ) -> HRESULT,
+ fn GetRecommendedRenderingMode(
+ fontEmSize: FLOAT,
+ dpiX: FLOAT,
+ dpiY: FLOAT,
+ transform: *const DWRITE_MATRIX,
+ isSideways: BOOL,
+ outlineThreshold: DWRITE_OUTLINE_THRESHOLD,
+ measuringMode: DWRITE_MEASURING_MODE,
+ renderingParams: *mut IDWriteRenderingParams,
+ renderingMode: *mut DWRITE_RENDERING_MODE,
+ gridFitMode: *mut DWRITE_GRID_FIT_MODE,
+ ) -> HRESULT,
+}}
+STRUCT!{struct DWRITE_COLOR_GLYPH_RUN {
+ glyphRun: DWRITE_GLYPH_RUN,
+ glyphRunDescription: *mut DWRITE_GLYPH_RUN_DESCRIPTION,
+ baselineOriginX: FLOAT,
+ baselineOriginY: FLOAT,
+ runColor: DWRITE_COLOR_F,
+ paletteIndex: UINT16,
+}}
+RIDL!{#[uuid(0xd31fbe17, 0xf157, 0x41a2, 0x8d, 0x24, 0xcb, 0x77, 0x9e, 0x05, 0x60, 0xe8)]
+interface IDWriteColorGlyphRunEnumerator(IDWriteColorGlyphRunEnumeratorVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn MoveNext(
+ hasRun: *mut BOOL,
+ ) -> HRESULT,
+ fn GetCurrentRun(
+ colorGlyphRun: *mut *const DWRITE_COLOR_GLYPH_RUN,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xf9d711c3, 0x9777, 0x40ae, 0x87, 0xe8, 0x3e, 0x5a, 0xf9, 0xbf, 0x09, 0x48)]
+interface IDWriteRenderingParams2(IDWriteRenderingParams2Vtbl):
+ IDWriteRenderingParams1(IDWriteRenderingParams1Vtbl) {
+ fn GetGridFitMode() -> DWRITE_GRID_FIT_MODE,
+}}
+RIDL!{#[uuid(0x0439fc60, 0xca44, 0x4994, 0x8d, 0xee, 0x3a, 0x9a, 0xf7, 0xb7, 0x32, 0xec)]
+interface IDWriteFactory2(IDWriteFactory2Vtbl): IDWriteFactory1(IDWriteFactory1Vtbl) {
+ fn GetSystemFontFallback(
+ fontFallback: *mut *mut IDWriteFontFallback,
+ ) -> HRESULT,
+ fn CreateFontFallbackBuilder(
+ fontFallbackBuilder: *mut *mut IDWriteFontFallbackBuilder,
+ ) -> HRESULT,
+ fn TranslateColorGlyphRun(
+ baselineOriginX: FLOAT,
+ baselineOriginY: FLOAT,
+ glyphRun: *const DWRITE_GLYPH_RUN,
+ glyphRunDescription: *const DWRITE_GLYPH_RUN_DESCRIPTION,
+ measuringMode: DWRITE_MEASURING_MODE,
+ worldToDeviceTransform: *const DWRITE_MATRIX,
+ colorPaletteIndex: UINT32,
+ colorLayers: *mut *mut IDWriteColorGlyphRunEnumerator,
+ ) -> HRESULT,
+ fn CreateCustomRenderingParams(
+ gamma: FLOAT,
+ enhancedContrast: FLOAT,
+ grayscaleEnhancedContrast: FLOAT,
+ clearTypeLevel: FLOAT,
+ pixelGeometry: DWRITE_PIXEL_GEOMETRY,
+ renderingMode: DWRITE_RENDERING_MODE,
+ gridFitMode: DWRITE_GRID_FIT_MODE,
+ renderingParams: *mut *mut IDWriteRenderingParams2,
+ ) -> HRESULT,
+ fn CreateGlyphRunAnalysis(
+ glyphRun: *const DWRITE_GLYPH_RUN,
+ transform: *const DWRITE_MATRIX,
+ renderingMode: DWRITE_RENDERING_MODE,
+ measuringMode: DWRITE_MEASURING_MODE,
+ gridFitMode: DWRITE_GRID_FIT_MODE,
+ antialiasMode: DWRITE_TEXT_ANTIALIAS_MODE,
+ baselineOriginX: FLOAT,
+ baselineOriginY: FLOAT,
+ glyphRunAnalysis: *mut *mut IDWriteGlyphRunAnalysis,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/dwrite_3.rs b/vendor/winapi/src/um/dwrite_3.rs
new file mode 100644
index 000000000..f6645c347
--- /dev/null
+++ b/vendor/winapi/src/um/dwrite_3.rs
@@ -0,0 +1,578 @@
+// 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 content of dwrite_3.h
+use ctypes::c_void;
+use shared::basetsd::{UINT16, UINT32, UINT64};
+use shared::minwindef::{BOOL, FILETIME, FLOAT};
+use um::dcommon::{DWRITE_GLYPH_IMAGE_DATA, DWRITE_GLYPH_IMAGE_FORMATS, DWRITE_MEASURING_MODE};
+use um::dwrite::{
+ DWRITE_FONT_SIMULATIONS, DWRITE_FONT_STRETCH, DWRITE_FONT_STYLE, DWRITE_FONT_WEIGHT,
+ DWRITE_GLYPH_RUN, DWRITE_INFORMATIONAL_STRING_ID, DWRITE_LINE_SPACING_METHOD, DWRITE_MATRIX,
+ DWRITE_PIXEL_GEOMETRY, DWRITE_RENDERING_MODE_ALIASED, DWRITE_RENDERING_MODE_DEFAULT,
+ DWRITE_RENDERING_MODE_GDI_CLASSIC, DWRITE_RENDERING_MODE_GDI_NATURAL,
+ DWRITE_RENDERING_MODE_NATURAL, DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC,
+ DWRITE_RENDERING_MODE_OUTLINE, IDWriteFont, IDWriteFontCollection, IDWriteFontCollectionVtbl,
+ IDWriteFontFace, IDWriteFontFamily, IDWriteFontFamilyVtbl, IDWriteFontFile, IDWriteFontList,
+ IDWriteFontListVtbl, IDWriteGdiInterop, IDWriteGdiInteropVtbl, IDWriteGlyphRunAnalysis,
+ IDWriteLocalizedStrings, IDWriteRenderingParams,
+};
+use um::dwrite_1::{DWRITE_OUTLINE_THRESHOLD, DWRITE_PANOSE, DWRITE_TEXT_ANTIALIAS_MODE};
+use um::dwrite_2::{
+ DWRITE_GRID_FIT_MODE, IDWriteFactory2, IDWriteFactory2Vtbl, IDWriteFont2, IDWriteFont2Vtbl,
+ IDWriteFontFace2, IDWriteFontFace2Vtbl, IDWriteRenderingParams2, IDWriteRenderingParams2Vtbl,
+ IDWriteTextFormat1, IDWriteTextFormat1Vtbl, IDWriteTextLayout2, IDWriteTextLayout2Vtbl,
+};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::wingdi::{FONTSIGNATURE, LOGFONTW};
+use um::winnt::{HRESULT, WCHAR};
+pub const DWRITE_E_REMOTEFONT: HRESULT = 0x8898500D;
+pub const DWRITE_E_DOWNLOADCANCELLED: HRESULT = 0x8898500E;
+pub const DWRITE_E_DOWNLOADFAILED: HRESULT = 0x8898500F;
+pub const DWRITE_E_TOOMANYDOWNLOADS: HRESULT = 0x88985010;
+ENUM!{enum DWRITE_FONT_PROPERTY_ID {
+ DWRITE_FONT_PROPERTY_ID_NONE,
+ DWRITE_FONT_PROPERTY_ID_FAMILY_NAME,
+ DWRITE_FONT_PROPERTY_ID_PREFERRED_FAMILY_NAME,
+ DWRITE_FONT_PROPERTY_ID_FACE_NAME,
+ DWRITE_FONT_PROPERTY_ID_FULL_NAME,
+ DWRITE_FONT_PROPERTY_ID_WIN32_FAMILY_NAME,
+ DWRITE_FONT_PROPERTY_ID_POSTSCRIPT_NAME,
+ DWRITE_FONT_PROPERTY_ID_DESIGN_SCRIPT_LANGUAGE_TAG,
+ DWRITE_FONT_PROPERTY_ID_SUPPORTED_SCRIPT_LANGUAGE_TAG,
+ DWRITE_FONT_PROPERTY_ID_SEMANTIC_TAG,
+ DWRITE_FONT_PROPERTY_ID_WEIGHT ,
+ DWRITE_FONT_PROPERTY_ID_STRETCH,
+ DWRITE_FONT_PROPERTY_ID_STYLE,
+ DWRITE_FONT_PROPERTY_ID_TOTAL,
+}}
+STRUCT!{struct DWRITE_FONT_PROPERTY {
+ propertyId: DWRITE_FONT_PROPERTY_ID,
+ propertyValue: *const WCHAR,
+ localeName: *const WCHAR,
+}}
+ENUM!{enum DWRITE_LOCALITY {
+ DWRITE_LOCALITY_REMOTE,
+ DWRITE_LOCALITY_PARTIAL,
+ DWRITE_LOCALITY_LOCAL,
+}}
+ENUM!{enum DWRITE_RENDERING_MODE1 {
+ DWRITE_RENDERING_MODE1_DEFAULT = DWRITE_RENDERING_MODE_DEFAULT,
+ DWRITE_RENDERING_MODE1_ALIASED = DWRITE_RENDERING_MODE_ALIASED,
+ DWRITE_RENDERING_MODE1_GDI_CLASSIC = DWRITE_RENDERING_MODE_GDI_CLASSIC,
+ DWRITE_RENDERING_MODE1_GDI_NATURAL = DWRITE_RENDERING_MODE_GDI_NATURAL,
+ DWRITE_RENDERING_MODE1_NATURAL = DWRITE_RENDERING_MODE_NATURAL,
+ DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC = DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC,
+ DWRITE_RENDERING_MODE1_OUTLINE = DWRITE_RENDERING_MODE_OUTLINE,
+ DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC_DOWNSAMPLED,
+}}
+RIDL!{#[uuid(0xb7924baa, 0x391b, 0x412a, 0x8c, 0x5c, 0xe4, 0x4c, 0xc2, 0xd8, 0x67, 0xdc)]
+interface IDWriteRenderingParams3(IDWriteRenderingParams3Vtbl):
+ IDWriteRenderingParams2(IDWriteRenderingParams2Vtbl) {
+ fn GetRenderingMode1() -> DWRITE_RENDERING_MODE1,
+}}
+RIDL!{#[uuid(0x9a1b41c3, 0xd3bb, 0x466a, 0x87, 0xfc, 0xfe, 0x67, 0x55, 0x6a, 0x3b, 0x65)]
+interface IDWriteFactory3(IDWriteFactory3Vtbl): IDWriteFactory2(IDWriteFactory2Vtbl) {
+ fn CreateGlyphRunAnalysis(
+ glyphRun: *const DWRITE_GLYPH_RUN,
+ transform: *const DWRITE_MATRIX,
+ renderingMode: DWRITE_RENDERING_MODE1,
+ measuringMode: DWRITE_MEASURING_MODE,
+ gridFitMode: DWRITE_GRID_FIT_MODE,
+ antialiasMode: DWRITE_TEXT_ANTIALIAS_MODE,
+ baselineOriginX: FLOAT,
+ baselineOriginY: FLOAT,
+ glyphRunAnalysis: *mut *mut IDWriteGlyphRunAnalysis,
+ ) -> HRESULT,
+ fn CreateCustomRenderingParams(
+ gamma: FLOAT,
+ enhancedContrast: FLOAT,
+ grayscaleEnhancedContrast: FLOAT,
+ clearTypeLevel: FLOAT,
+ pixelGeometry: DWRITE_PIXEL_GEOMETRY,
+ renderingMode: DWRITE_RENDERING_MODE1,
+ gridFitMode: DWRITE_GRID_FIT_MODE,
+ renderingParams: *mut *mut IDWriteRenderingParams3,
+ ) -> HRESULT,
+ fn CreateFontFaceReference_2(
+ fontFile: *mut IDWriteFontFile,
+ faceIndex: UINT32,
+ fontSimulations: DWRITE_FONT_SIMULATIONS,
+ fontFaceReference: *mut *mut IDWriteFontFaceReference,
+ ) -> HRESULT,
+ fn CreateFontFaceReference_1(
+ filePath: *const WCHAR,
+ lastWriteTime: *const FILETIME,
+ faceIndex: UINT32,
+ fontSimulations: DWRITE_FONT_SIMULATIONS,
+ fontFaceReference: *mut *mut IDWriteFontFaceReference,
+ ) -> HRESULT,
+ fn GetSystemFontSet(
+ fontSet: *mut *mut IDWriteFontSet,
+ ) -> HRESULT,
+ fn CreateFontSetBuilder(
+ fontSetBuilder: *mut *mut IDWriteFontSetBuilder,
+ ) -> HRESULT,
+ fn CreateFontCollectionFromFontSet(
+ fontSet: *mut IDWriteFontSet,
+ fontCollection: *mut *mut IDWriteFontCollection1,
+ ) -> HRESULT,
+ fn GetSystemFontCollection(
+ includeDownloadableFonts: BOOL,
+ fontCollection: *mut *mut IDWriteFontCollection1,
+ checkForUpdates: BOOL,
+ ) -> HRESULT,
+ fn GetFontDownloadQueue(
+ fontDownloadQueue: *mut *mut IDWriteFontDownloadQueue,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x53585141, 0xd9f8, 0x4095, 0x83, 0x21, 0xd7, 0x3c, 0xf6, 0xbd, 0x11, 0x6b)]
+interface IDWriteFontSet(IDWriteFontSetVtbl): IUnknown(IUnknownVtbl) {
+ fn GetFontCount() -> UINT32,
+ fn GetFontFaceReference(
+ listIndex: UINT32,
+ fontFaceReference: *mut *mut IDWriteFontFaceReference,
+ ) -> HRESULT,
+ fn FindFontFaceReference(
+ fontFaceReference: *mut IDWriteFontFaceReference,
+ listIndex: *mut UINT32,
+ exists: *mut BOOL,
+ ) -> HRESULT,
+ fn FindFontFace(
+ fontFace: *mut IDWriteFontFace,
+ listIndex: *mut UINT32,
+ exists: *mut BOOL,
+ ) -> HRESULT,
+ fn GetPropertyValues_3(
+ propertyID: DWRITE_FONT_PROPERTY_ID,
+ values: *mut *mut IDWriteStringList,
+ ) -> HRESULT,
+ fn GetPropertyValues_2(
+ propertyID: DWRITE_FONT_PROPERTY_ID,
+ preferredLocaleNames: *const WCHAR,
+ values: *mut *mut IDWriteStringList,
+ ) -> HRESULT,
+ fn GetPropertyValues_1(
+ listIndex: UINT32,
+ propertyId: DWRITE_FONT_PROPERTY_ID,
+ exists: *mut BOOL,
+ values: *mut *mut IDWriteLocalizedStrings,
+ ) -> HRESULT,
+ fn GetPropertyOccurrenceCount(
+ property: *const DWRITE_FONT_PROPERTY,
+ propertyOccurrenceCount: *mut UINT32,
+ ) -> HRESULT,
+ fn GetMatchingFonts_2(
+ familyName: *const WCHAR,
+ fontWeight: DWRITE_FONT_WEIGHT,
+ fontStretch: DWRITE_FONT_STRETCH,
+ fontStyle: DWRITE_FONT_STYLE,
+ filteredSet: *mut *mut IDWriteFontSet,
+ ) -> HRESULT,
+ fn GetMatchingFonts_1(
+ properties: *const DWRITE_FONT_PROPERTY,
+ propertyCount: UINT32,
+ filteredSet: *mut *mut IDWriteFontSet,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x2f642afe, 0x9c68, 0x4f40, 0xb8, 0xbe, 0x45, 0x74, 0x01, 0xaf, 0xcb, 0x3d)]
+interface IDWriteFontSetBuilder(IDWriteFontSetBuilderVtbl): IUnknown(IUnknownVtbl) {
+ fn AddFontFaceReference_2(
+ fontFaceReference: *mut IDWriteFontFaceReference,
+ properties: *const DWRITE_FONT_PROPERTY,
+ propertyCount: UINT32,
+ ) -> HRESULT,
+ fn AddFontFaceReference_1(
+ fontFaceReference: *mut IDWriteFontFaceReference,
+ ) -> HRESULT,
+ fn AddFontSet(
+ fontSet: *mut IDWriteFontSet,
+ ) -> HRESULT,
+ fn CreateFontSet(
+ fontSet: *mut *mut IDWriteFontSet,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x53585141, 0xd9f8, 0x4095, 0x83, 0x21, 0xd7, 0x3c, 0xf6, 0xbd, 0x11, 0x6c)]
+interface IDWriteFontCollection1(IDWriteFontCollection1Vtbl):
+ IDWriteFontCollection(IDWriteFontCollectionVtbl) {
+ fn GetFontSet(
+ fontSet: *mut *mut IDWriteFontSet,
+ ) -> HRESULT,
+ fn GetFontFamily(
+ index: UINT32,
+ fontFamily: *mut *mut IDWriteFontFamily1,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xda20d8ef, 0x812a, 0x4c43, 0x98, 0x02, 0x62, 0xec, 0x4a, 0xbd, 0x7a, 0xdf)]
+interface IDWriteFontFamily1(IDWriteFontFamily1Vtbl):
+ IDWriteFontFamily(IDWriteFontFamilyVtbl) {
+ fn GetFontLocality(
+ listIndex: UINT32,
+ ) -> DWRITE_LOCALITY,
+ fn GetFont(
+ listIndex: UINT32,
+ font: *mut *mut IDWriteFont3,
+ ) -> HRESULT,
+ fn GetFontFaceReference(
+ listIndex: UINT32,
+ fontFaceReference: *mut *mut IDWriteFontFaceReference,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xda20d8ef, 0x812a, 0x4c43, 0x98, 0x02, 0x62, 0xec, 0x4a, 0xbd, 0x7a, 0xde)]
+interface IDWriteFontList1(IDWriteFontList1Vtbl): IDWriteFontList(IDWriteFontListVtbl) {
+ fn GetFontLocality(
+ listIndex: UINT32,
+ ) -> DWRITE_LOCALITY,
+ fn GetFont(
+ listIndex: UINT32,
+ font: *mut *mut IDWriteFont3,
+ ) -> HRESULT,
+ fn GetFontFaceReference(
+ listIndex: UINT32,
+ fontFaceReference: *mut *mut IDWriteFontFaceReference,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x5e7fa7ca, 0xdde3, 0x424c, 0x89, 0xf0, 0x9f, 0xcd, 0x6f, 0xed, 0x58, 0xcd)]
+interface IDWriteFontFaceReference(IDWriteFontFaceReferenceVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn CreateFontFace(
+ fontFace: *mut *mut IDWriteFontFace3,
+ ) -> HRESULT,
+ fn CreateFontFaceWithSimulations(
+ fontFaceSimulationFlags: DWRITE_FONT_SIMULATIONS,
+ fontFace: *mut *mut IDWriteFontFace3,
+ ) -> HRESULT,
+ fn Equals(
+ fontFaceReference: *mut IDWriteFontFaceReference,
+ ) -> BOOL,
+ fn GetFontFaceIndex() -> UINT32,
+ fn GetSimulations() -> DWRITE_FONT_SIMULATIONS,
+ fn GetFontFile(
+ fontFile: *mut *mut IDWriteFontFile,
+ ) -> HRESULT,
+ fn GetLocalFileSize() -> UINT64,
+ fn GetFileSize() -> UINT64,
+ fn GetFileTime(
+ lastWriteTime: *mut FILETIME,
+ ) -> HRESULT,
+ fn GetLocality() -> DWRITE_LOCALITY,
+ fn EnqueueFontDownloadRequest() -> HRESULT,
+ fn EnqueueCharacterDownloadRequest(
+ characters: *const WCHAR,
+ characterCount: UINT32,
+ ) -> HRESULT,
+ fn EnqueueGlyphDownloadRequest(
+ glyphIndices: *const UINT16,
+ glyphCount: UINT32,
+ ) -> HRESULT,
+ fn EnqueueFileFragmentDownloadRequest(
+ fileOffset: UINT64,
+ fragmentSize: UINT64,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x29748ed6, 0x8c9c, 0x4a6a, 0xbe, 0x0b, 0xd9, 0x12, 0xe8, 0x53, 0x89, 0x44)]
+interface IDWriteFont3(IDWriteFont3Vtbl): IDWriteFont2(IDWriteFont2Vtbl) {
+ fn CreateFontFace(
+ fontFace: *mut *mut IDWriteFontFace3,
+ ) -> HRESULT,
+ fn Equals(
+ font: *mut IDWriteFont,
+ ) -> BOOL,
+ fn GetFontFaceReference(
+ fontFaceReference: *mut *mut IDWriteFontFaceReference,
+ ) -> HRESULT,
+ fn HasCharacter(
+ unicodeValue: UINT32,
+ ) -> BOOL,
+ fn GetLocality() -> DWRITE_LOCALITY,
+}}
+RIDL!{#[uuid(0xd37d7598, 0x09be, 0x4222, 0xa2, 0x36, 0x20, 0x81, 0x34, 0x1c, 0xc1, 0xf2)]
+interface IDWriteFontFace3(IDWriteFontFace3Vtbl):
+ IDWriteFontFace2(IDWriteFontFace2Vtbl) {
+ fn GetFontFaceReference(
+ fontFaceReference: *mut *mut IDWriteFontFaceReference,
+ ) -> HRESULT,
+ fn GetPanose(
+ panose: *mut DWRITE_PANOSE,
+ ) -> (),
+ fn GetWeight() -> DWRITE_FONT_WEIGHT,
+ fn GetStretch() -> DWRITE_FONT_STRETCH,
+ fn GetStyle() -> DWRITE_FONT_STYLE,
+ fn GetFamilyNames(
+ names: *mut *mut IDWriteLocalizedStrings,
+ ) -> HRESULT,
+ fn GetFaceNames(
+ names: *mut *mut IDWriteLocalizedStrings,
+ ) -> HRESULT,
+ fn GetInformationalStrings(
+ informationalStringID: DWRITE_INFORMATIONAL_STRING_ID,
+ informationalStrings: *mut *mut IDWriteLocalizedStrings,
+ exists: *mut BOOL,
+ ) -> HRESULT,
+ fn HasCharacter(
+ unicodeValue: UINT32,
+ ) -> BOOL,
+ fn GetRecommendedRenderingMode(
+ fontEmSize: FLOAT,
+ dpiX: FLOAT,
+ dpiY: FLOAT,
+ transform: *const DWRITE_MATRIX,
+ isSideways: BOOL,
+ outlineThreshold: DWRITE_OUTLINE_THRESHOLD,
+ measuringMode: DWRITE_MEASURING_MODE,
+ renderingParams: *mut IDWriteRenderingParams,
+ renderingMode: *mut DWRITE_RENDERING_MODE1,
+ gridFitMode: *mut DWRITE_GRID_FIT_MODE,
+ ) -> HRESULT,
+ fn IsCharacterLocal(
+ unicodeValue: UINT32,
+ ) -> BOOL,
+ fn IsGlyphLocal(
+ glyphId: UINT16,
+ ) -> BOOL,
+ fn AreCharactersLocal(
+ characters: *const WCHAR,
+ characterCount: UINT32,
+ enqueueIfNotLocal: BOOL,
+ isLocal: *mut BOOL,
+ ) -> HRESULT,
+ fn AreGlyphsLocal(
+ glyphIndices: *const UINT16,
+ glyphCount: UINT32,
+ enqueueIfNotLocal: BOOL,
+ isLocal: *mut BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xcfee3140, 0x1157, 0x47ca, 0x8b, 0x85, 0x31, 0xbf, 0xcf, 0x3f, 0x2d, 0x0e)]
+interface IDWriteStringList(IDWriteStringListVtbl): IUnknown(IUnknownVtbl) {
+ fn GetCount() -> UINT32,
+ fn GetLocaleNameLength(
+ listIndex: UINT32,
+ length: *mut UINT32,
+ ) -> HRESULT,
+ fn GetLocaleName(
+ listIndex: UINT32,
+ localeName: *mut WCHAR,
+ size: UINT32,
+ ) -> HRESULT,
+ fn GetStringLength(
+ listIndex: UINT32,
+ length: *mut UINT32,
+ ) -> HRESULT,
+ fn GetString(
+ listIndex: UINT32,
+ stringBuffer: *mut WCHAR,
+ stringBufferSize: UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xb06fe5b9, 0x43ec, 0x4393, 0x88, 0x1b, 0xdb, 0xe4, 0xdc, 0x72, 0xfd, 0xa7)]
+interface IDWriteFontDownloadListener(IDWriteFontDownloadListenerVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn DownloadCompleted(
+ downloadQueue: *mut IDWriteFontDownloadQueue,
+ context: *mut IUnknown,
+ downloadResult: HRESULT,
+ ) -> (),
+}}
+RIDL!{#[uuid(0xb71e6052, 0x5aea, 0x4fa3, 0x83, 0x2e, 0xf6, 0x0d, 0x43, 0x1f, 0x7e, 0x91)]
+interface IDWriteFontDownloadQueue(IDWriteFontDownloadQueueVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn AddListener(
+ listener: *mut IDWriteFontDownloadListener,
+ token: *mut UINT32,
+ ) -> HRESULT,
+ fn RemoveListener(
+ token: UINT32,
+ ) -> HRESULT,
+ fn IsEmpty() -> BOOL,
+ fn BeginDownload(
+ context: *mut IUnknown,
+ ) -> HRESULT,
+ fn CancelDownload() -> HRESULT,
+ fn GetGenerationCount() -> UINT64,
+}}
+RIDL!{#[uuid(0x4556be70, 0x3abd, 0x4f70, 0x90, 0xbe, 0x42, 0x17, 0x80, 0xa6, 0xf5, 0x15)]
+interface IDWriteGdiInterop1(IDWriteGdiInterop1Vtbl):
+ IDWriteGdiInterop(IDWriteGdiInteropVtbl) {
+ fn CreateFontFromLOGFONT(
+ logFont: *const LOGFONTW,
+ fontCollection: *mut IDWriteFontCollection,
+ font: *mut *mut IDWriteFont,
+ ) -> HRESULT,
+ fn GetFontSignature_2(
+ fontFace: *mut IDWriteFontFace,
+ fontSignature: *mut FONTSIGNATURE,
+ ) -> HRESULT,
+ fn GetFontSignature_1(
+ font: *mut IDWriteFont,
+ fontSignature: *mut FONTSIGNATURE,
+ ) -> HRESULT,
+ fn GetMatchingFontsByLOGFONT(
+ logFont: *const LOGFONTW,
+ fontSet: *mut IDWriteFontSet,
+ filteredSet: *mut *mut IDWriteFontSet,
+ ) -> HRESULT,
+}}
+STRUCT!{struct DWRITE_LINE_METRICS1 {
+ length: UINT32,
+ trailingWhitespaceLength: UINT32,
+ newlineLength: UINT32,
+ height: FLOAT,
+ baseline: FLOAT,
+ isTrimmed: BOOL,
+ leadingBefore: FLOAT,
+ leadingAfter: FLOAT,
+}}
+ENUM!{enum DWRITE_FONT_LINE_GAP_USAGE {
+ DWRITE_FONT_LINE_GAP_USAGE_DEFAULT,
+ DWRITE_FONT_LINE_GAP_USAGE_DISABLED,
+ DWRITE_FONT_LINE_GAP_USAGE_ENABLED,
+}}
+STRUCT!{struct DWRITE_LINE_SPACING {
+ method: DWRITE_LINE_SPACING_METHOD,
+ height: FLOAT,
+ baseline: FLOAT,
+ leadingBefore: FLOAT,
+ fontLineGapUsage: DWRITE_FONT_LINE_GAP_USAGE,
+}}
+RIDL!{#[uuid(0xf67e0edd, 0x9e3d, 0x4ecc, 0x8c, 0x32, 0x41, 0x83, 0x25, 0x3d, 0xfe, 0x70)]
+interface IDWriteTextFormat2(IDWriteTextFormat2Vtbl):
+ IDWriteTextFormat1(IDWriteTextFormat1Vtbl) {
+ fn SetLineSpacing(
+ lineSpacingOptions: *const DWRITE_LINE_SPACING,
+ ) -> HRESULT,
+ fn GetLineSpacing(
+ lineSpacingOptions: *mut DWRITE_LINE_SPACING,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x07ddcd52, 0x020e, 0x4de8, 0xac, 0x33, 0x6c, 0x95, 0x3d, 0x83, 0xf9, 0x2d)]
+interface IDWriteTextLayout3(IDWriteTextLayout3Vtbl):
+ IDWriteTextLayout2(IDWriteTextLayout2Vtbl) {
+ fn InvalidateLayout() -> HRESULT,
+ fn SetLineSpacing(
+ lineSpacingOptions: *const DWRITE_LINE_SPACING,
+ ) -> HRESULT,
+ fn GetLineSpacing(
+ lineSpacingOptions: *mut DWRITE_LINE_SPACING,
+ ) -> HRESULT,
+ fn GetLineMetrics(
+ lineMetrics: *mut DWRITE_LINE_METRICS1,
+ maxLineCount: UINT32,
+ actualLineCount: *mut UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x27f2a904, 0x4eb8, 0x441d, 0x96, 0x78, 0x05, 0x63, 0xf5, 0x3e, 0x3e, 0x2f)]
+interface IDWriteFontFace4(IDWriteFontFace4Vtbl): IDWriteFontFace3(IDWriteFontFace3Vtbl) {
+ fn GetGlyphImageFormats_2(
+ glyph: UINT16,
+ ppemFirst: UINT32,
+ ppemLast: UINT32,
+ formats: *mut DWRITE_GLYPH_IMAGE_FORMATS,
+ ) -> HRESULT,
+ fn GetGlyphImageFormats_1() -> DWRITE_GLYPH_IMAGE_FORMATS,
+ fn GetGlyphImageData(
+ glyph: UINT16,
+ ppem: UINT32,
+ format: DWRITE_GLYPH_IMAGE_FORMATS,
+ data: *mut DWRITE_GLYPH_IMAGE_DATA,
+ context: *mut *mut c_void,
+ ) -> HRESULT,
+ fn ReleaseGlyphImageData(
+ context: *mut c_void,
+ ) -> (),
+}}
+ENUM!{enum DWRITE_FONT_AXIS_TAG {
+ DWRITE_FONT_AXIS_TAG_WEIGHT = 0x74686777,
+ DWRITE_FONT_AXIS_TAG_WIDTH = 0x68746477,
+ DWRITE_FONT_AXIS_TAG_SLANT = 0x746e6c73,
+ DWRITE_FONT_AXIS_TAG_OPTICAL_SIZE = 0x7a73706f,
+ DWRITE_FONT_AXIS_TAG_ITALIC = 0x6c617469,
+}}
+STRUCT!{struct DWRITE_FONT_AXIS_VALUE {
+ axisTag: DWRITE_FONT_AXIS_TAG,
+ value: FLOAT,
+}}
+STRUCT!{struct DWRITE_FONT_AXIS_RANGE {
+ axisTag: DWRITE_FONT_AXIS_TAG,
+ minValue: FLOAT,
+ maxValue: FLOAT,
+}}
+ENUM!{enum DWRITE_FONT_AXIS_ATTRIBUTES {
+ DWRITE_FONT_AXIS_ATTRIBUTES_NONE,
+ DWRITE_FONT_AXIS_ATTRIBUTES_VARIABLE,
+ DWRITE_FONT_AXIS_ATTRIBUTES_HIDDEN,
+}}
+RIDL!{#[uuid(0x98eff3a5, 0xb667, 0x479a, 0xb1, 0x45, 0xe2, 0xfa, 0x5b, 0x9f, 0xdc, 0x29)]
+interface IDWriteFontFace5(IDWriteFontFace5Vtbl): IDWriteFontFace4(IDWriteFontFace4Vtbl) {
+ fn GetFontAxisValueCount() -> UINT32,
+ fn GetFontAxisValues(
+ values: *mut DWRITE_FONT_AXIS_VALUE,
+ valueCount: UINT32,
+ ) -> HRESULT,
+ fn HasVariations() -> BOOL,
+ fn GetFontResource(
+ resource: *mut *mut IDWriteFontResource,
+ ) -> HRESULT,
+ fn Equals(
+ fontFace: *mut IDWriteFontFace,
+ ) -> BOOL,
+}}
+RIDL!{#[uuid(0xc081fe77, 0x2fd1, 0x41ac, 0xa5, 0xa3, 0x34, 0x98, 0x3c, 0x4b, 0xa6, 0x1a)]
+interface IDWriteFontFaceReference1(IDWriteFontFaceReference1Vtbl):
+ IDWriteFontFaceReference(IDWriteFontFaceReferenceVtbl) {
+ fn CreateFontFace(
+ fontFace: *mut *mut IDWriteFontFace5,
+ ) -> HRESULT,
+ fn GetFontAxisValueCount() -> UINT32,
+ fn GetFontAxisValues(
+ values: *mut DWRITE_FONT_AXIS_VALUE,
+ numValues: UINT32,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x1f803a76, 0x6871, 0x48e8, 0x98, 0x7f, 0xb9, 0x75, 0x55, 0x1c, 0x50, 0xf2)]
+interface IDWriteFontResource(IDWriteFontResourceVtbl): IUnknown(IUnknownVtbl) {
+ fn GetFontFile(
+ fontFile: *mut *mut IDWriteFontFile,
+ ) -> HRESULT,
+ fn GetFontFaceIndex() -> UINT32,
+ fn GetFontAxisCount() -> UINT32,
+ fn GetDefaultFontAxisValues(
+ values: *const DWRITE_FONT_AXIS_VALUE,
+ numValues: UINT32,
+ ) -> HRESULT,
+ fn GetFontAxisRanges(
+ ranges: *const DWRITE_FONT_AXIS_RANGE,
+ numRanges: UINT32,
+ ) -> HRESULT,
+ fn GetFontAxisAttributes(
+ axis: UINT32,
+ ) -> DWRITE_FONT_AXIS_ATTRIBUTES,
+ fn GetAxisNames(
+ axis: UINT32,
+ names: *mut *mut IDWriteLocalizedStrings,
+ ) -> HRESULT,
+ fn GetAxisValueNameCount(
+ axis: UINT32,
+ ) -> UINT32,
+ fn GetAxisValueNames(
+ axis: UINT32,
+ axisValue: UINT32,
+ axisRange: *mut DWRITE_FONT_AXIS_RANGE,
+ names: *mut *mut IDWriteLocalizedStrings,
+ ) -> HRESULT,
+ fn HasVariations() -> BOOL,
+ fn CreateFontFace(
+ simulations: DWRITE_FONT_SIMULATIONS,
+ axisValues: *const DWRITE_FONT_AXIS_VALUE,
+ numValues: UINT32,
+ fontFace: *mut *mut IDWriteFontFace5,
+ ) -> HRESULT,
+ fn CreateFontFaceReference(
+ simulations: DWRITE_FONT_SIMULATIONS,
+ axisValues: *const DWRITE_FONT_AXIS_VALUE,
+ numValues: UINT32,
+ reference: *mut *mut IDWriteFontFaceReference1,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/dxdiag.rs b/vendor/winapi/src/um/dxdiag.rs
new file mode 100644
index 000000000..6f46c7ac7
--- /dev/null
+++ b/vendor/winapi/src/um/dxdiag.rs
@@ -0,0 +1,11 @@
+// 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.
+DEFINE_GUID!{CLSID_DxDiagProvider,
+ 0xa65b8071, 0x3bfe, 0x4213, 0x9a, 0x5b, 0x49, 0x1d, 0xa4, 0x46, 0x1c, 0xa7}
+DEFINE_GUID!{IID_IDxDiagProvider,
+ 0x9c6b4cb0, 0x23f8, 0x49cc, 0xa3, 0xed, 0x45, 0xa5, 0x50, 0x00, 0xa6, 0xd2}
+DEFINE_GUID!{IID_IDxDiagContainer,
+ 0x7d0f462f, 0x4064, 0x4862, 0xbc, 0x7f, 0x93, 0x3e, 0x50, 0x58, 0xc1, 0x0f}
diff --git a/vendor/winapi/src/um/dxfile.rs b/vendor/winapi/src/um/dxfile.rs
new file mode 100644
index 000000000..67ba32c4b
--- /dev/null
+++ b/vendor/winapi/src/um/dxfile.rs
@@ -0,0 +1,23 @@
+// 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.
+DEFINE_GUID!{CLSID_CDirectXFile,
+ 0x4516ec43, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3}
+DEFINE_GUID!{IID_IDirectXFile,
+ 0x3d82ab40, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33}
+DEFINE_GUID!{IID_IDirectXFileEnumObject,
+ 0x3d82ab41, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33}
+DEFINE_GUID!{IID_IDirectXFileSaveObject,
+ 0x3d82ab42, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33}
+DEFINE_GUID!{IID_IDirectXFileObject,
+ 0x3d82ab43, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33}
+DEFINE_GUID!{IID_IDirectXFileData,
+ 0x3d82ab44, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33}
+DEFINE_GUID!{IID_IDirectXFileDataReference,
+ 0x3d82ab45, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33}
+DEFINE_GUID!{IID_IDirectXFileBinary,
+ 0x3d82ab46, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33}
+DEFINE_GUID!{TID_DXFILEHeader,
+ 0x3d82ab43, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33}
diff --git a/vendor/winapi/src/um/dxgidebug.rs b/vendor/winapi/src/um/dxgidebug.rs
new file mode 100644
index 000000000..3478da300
--- /dev/null
+++ b/vendor/winapi/src/um/dxgidebug.rs
@@ -0,0 +1,235 @@
+// 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 ctypes::{c_char, c_int, c_void};
+use shared::basetsd::{SIZE_T, UINT64};
+use shared::guiddef::{GUID, REFIID};
+use shared::minwindef::{BOOL, DWORD, UINT};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPCSTR};
+pub const DXGI_DEBUG_BINARY_VERSION: DWORD = 1;
+ENUM!{enum DXGI_DEBUG_RLO_FLAGS {
+ DXGI_DEBUG_RLO_SUMMARY = 0x1,
+ DXGI_DEBUG_RLO_DETAIL = 0x2,
+ DXGI_DEBUG_RLO_IGNORE_INTERNAL = 0x4,
+ DXGI_DEBUG_RLO_ALL = 0x7,
+}}
+pub type DXGI_DEBUG_ID = GUID;
+DEFINE_GUID!{DXGI_DEBUG_ALL,
+ 0xe48ae283, 0xda80, 0x490b, 0x87, 0xe6, 0x43, 0xe9, 0xa9, 0xcf, 0xda, 0x08}
+DEFINE_GUID!{DXGI_DEBUG_DX,
+ 0x35cdd7fc, 0x13b2, 0x421d, 0xa5, 0xd7, 0x7e, 0x44, 0x51, 0x28, 0x7d, 0x64}
+DEFINE_GUID!{DXGI_DEBUG_DXGI,
+ 0x25cddaa4, 0xb1c6, 0x47e1, 0xac, 0x3e, 0x98, 0x87, 0x5b, 0x5a, 0x2e, 0x2a}
+DEFINE_GUID!{DXGI_DEBUG_APP,
+ 0x06cd6e01, 0x4219, 0x4ebd, 0x87, 0x09, 0x27, 0xed, 0x23, 0x36, 0x0c, 0x62}
+ENUM!{enum DXGI_INFO_QUEUE_MESSAGE_CATEGORY {
+ DXGI_INFO_QUEUE_MESSAGE_CATEGORY_UNKNOWN = 0,
+ DXGI_INFO_QUEUE_MESSAGE_CATEGORY_MISCELLANEOUS = 1,
+ DXGI_INFO_QUEUE_MESSAGE_CATEGORY_INITIALIZATION = 2,
+ DXGI_INFO_QUEUE_MESSAGE_CATEGORY_CLEANUP = 3,
+ DXGI_INFO_QUEUE_MESSAGE_CATEGORY_COMPILATION = 4,
+ DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_CREATION = 5,
+ DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_SETTING = 6,
+ DXGI_INFO_QUEUE_MESSAGE_CATEGORY_STATE_GETTING = 7,
+ DXGI_INFO_QUEUE_MESSAGE_CATEGORY_RESOURCE_MANIPULATION = 8,
+ DXGI_INFO_QUEUE_MESSAGE_CATEGORY_EXECUTION = 9,
+ DXGI_INFO_QUEUE_MESSAGE_CATEGORY_SHADER = 10,
+}}
+ENUM!{enum DXGI_INFO_QUEUE_MESSAGE_SEVERITY {
+ DXGI_INFO_QUEUE_MESSAGE_SEVERITY_CORRUPTION = 0,
+ DXGI_INFO_QUEUE_MESSAGE_SEVERITY_ERROR = 1,
+ DXGI_INFO_QUEUE_MESSAGE_SEVERITY_WARNING = 2,
+ DXGI_INFO_QUEUE_MESSAGE_SEVERITY_INFO = 3,
+ DXGI_INFO_QUEUE_MESSAGE_SEVERITY_MESSAGE = 4,
+}}
+pub type DXGI_INFO_QUEUE_MESSAGE_ID = c_int;
+STRUCT!{struct DXGI_INFO_QUEUE_MESSAGE {
+ Producer: DXGI_DEBUG_ID,
+ Category: DXGI_INFO_QUEUE_MESSAGE_CATEGORY,
+ Severity: DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
+ ID: DXGI_INFO_QUEUE_MESSAGE_ID,
+ pDescription: *const c_char,
+ DescriptionByteLength: SIZE_T,
+}}
+STRUCT!{struct DXGI_INFO_QUEUE_FILTER_DESC {
+ NumCategories: UINT,
+ pCategoryList: *mut DXGI_INFO_QUEUE_MESSAGE_CATEGORY,
+ NumSeverities: UINT,
+ pSeverityList: *mut DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
+ NumIDs: UINT,
+ pIDList: *mut DXGI_INFO_QUEUE_MESSAGE_ID,
+}}
+STRUCT!{struct DXGI_INFO_QUEUE_FILTER {
+ AllowList: DXGI_INFO_QUEUE_FILTER_DESC,
+ DenyList: DXGI_INFO_QUEUE_FILTER_DESC,
+}}
+pub const DXGI_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT: DWORD = 1024;
+extern "system" {
+ pub fn DXGIGetDebugInterface(
+ riid: REFIID,
+ ppDebug: *mut *mut c_void,
+ ) -> HRESULT;
+}
+RIDL!{#[uuid(0xd67441c7, 0x672a, 0x476f, 0x9e, 0x82, 0xcd, 0x55, 0xb4, 0x49, 0x49, 0xce)]
+interface IDXGIInfoQueue(IDXGIInfoQueueVtbl): IUnknown(IUnknownVtbl) {
+ fn SetMessageCountLimit(
+ Producer: DXGI_DEBUG_ID,
+ MessageCountLimit: UINT64,
+ ) -> HRESULT,
+ fn ClearStoredMessages(
+ Producer: DXGI_DEBUG_ID,
+ ) -> (),
+ fn GetMessage(
+ Producer: DXGI_DEBUG_ID,
+ MessageIndex: UINT64,
+ pMessage: *mut DXGI_INFO_QUEUE_MESSAGE,
+ pMessageByteLength: *mut SIZE_T,
+ ) -> HRESULT,
+ fn GetNumStoredMessagesAllowedByRetrievalFilters(
+ Producer: DXGI_DEBUG_ID,
+ ) -> UINT64,
+ fn GetNumStoredMessages(
+ Producer: DXGI_DEBUG_ID,
+ ) -> UINT64,
+ fn GetNumMessagesDiscardedByMessageCountLimit(
+ Producer: DXGI_DEBUG_ID,
+ ) -> UINT64,
+ fn GetMessageCountLimit(
+ Producer: DXGI_DEBUG_ID,
+ ) -> UINT64,
+ fn GetNumMessagesAllowedByStorageFilter(
+ Producer: DXGI_DEBUG_ID,
+ ) -> UINT64,
+ fn GetNumMessagesDeniedByStorageFilter(
+ Producer: DXGI_DEBUG_ID,
+ ) -> UINT64,
+ fn AddStorageFilterEntries(
+ Producer: DXGI_DEBUG_ID,
+ pFilter: *const DXGI_INFO_QUEUE_FILTER,
+ ) -> HRESULT,
+ fn GetStorageFilter(
+ Producer: DXGI_DEBUG_ID,
+ pFilter: *mut DXGI_INFO_QUEUE_FILTER,
+ pFilterByteLength: *mut SIZE_T,
+ ) -> HRESULT,
+ fn ClearStorageFilter(
+ Producer: DXGI_DEBUG_ID,
+ ) -> (),
+ fn PushEmptyStorageFilter(
+ Producer: DXGI_DEBUG_ID,
+ ) -> HRESULT,
+ fn PushDenyAllStorageFilter(
+ Producer: DXGI_DEBUG_ID,
+ ) -> HRESULT,
+ fn PushCopyOfStorageFilter(
+ Producer: DXGI_DEBUG_ID,
+ ) -> HRESULT,
+ fn PushStorageFilter(
+ Producer: DXGI_DEBUG_ID,
+ pFilter: *const DXGI_INFO_QUEUE_FILTER,
+ ) -> HRESULT,
+ fn PopStorageFilter(
+ Producer: DXGI_DEBUG_ID,
+ ) -> (),
+ fn GetStorageFilterStackSize(
+ Producer: DXGI_DEBUG_ID,
+ ) -> UINT,
+ fn AddRetrievalFilterEntries(
+ Producer: DXGI_DEBUG_ID,
+ pFilter: *const DXGI_INFO_QUEUE_FILTER,
+ ) -> HRESULT,
+ fn GetRetrievalFilter(
+ Producer: DXGI_DEBUG_ID,
+ pFilter: *mut DXGI_INFO_QUEUE_FILTER,
+ pFilterByteLength: *mut SIZE_T,
+ ) -> HRESULT,
+ fn ClearRetrievalFilter(
+ Producer: DXGI_DEBUG_ID,
+ ) -> (),
+ fn PushEmptyRetrievalFilter(
+ Producer: DXGI_DEBUG_ID,
+ ) -> HRESULT,
+ fn PushDenyAllRetrievalFilter(
+ Producer: DXGI_DEBUG_ID,
+ ) -> HRESULT,
+ fn PushCopyOfRetrievalFilter(
+ Producer: DXGI_DEBUG_ID,
+ ) -> HRESULT,
+ fn PushRetrievalFilter(
+ Producer: DXGI_DEBUG_ID,
+ pFilter: *const DXGI_INFO_QUEUE_FILTER,
+ ) -> HRESULT,
+ fn PopRetrievalFilter(
+ Producer: DXGI_DEBUG_ID,
+ ) -> (),
+ fn GetRetrievalFilterStackSize(
+ Producer: DXGI_DEBUG_ID,
+ ) -> UINT,
+ fn AddMessage(
+ Producer: DXGI_DEBUG_ID,
+ Category: DXGI_INFO_QUEUE_MESSAGE_CATEGORY,
+ Severity: DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
+ ID: DXGI_INFO_QUEUE_MESSAGE_ID,
+ pDescription: LPCSTR,
+ ) -> HRESULT,
+ fn AddApplicationMessage(
+ Severity: DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
+ pDescription: LPCSTR,
+ ) -> HRESULT,
+ fn SetBreakOnCategory(
+ Producer: DXGI_DEBUG_ID,
+ Category: DXGI_INFO_QUEUE_MESSAGE_CATEGORY,
+ bEnable: BOOL,
+ ) -> HRESULT,
+ fn SetBreakOnSeverity(
+ Producer: DXGI_DEBUG_ID,
+ Severity: DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
+ bEnable: BOOL,
+ ) -> HRESULT,
+ fn SetBreakOnID(
+ Producer: DXGI_DEBUG_ID,
+ ID: DXGI_INFO_QUEUE_MESSAGE_ID,
+ bEnable: BOOL,
+ ) -> HRESULT,
+ fn GetBreakOnCategory(
+ Producer: DXGI_DEBUG_ID,
+ Category: DXGI_INFO_QUEUE_MESSAGE_CATEGORY,
+ ) -> BOOL,
+ fn GetBreakOnSeverity(
+ Producer: DXGI_DEBUG_ID,
+ Severity: DXGI_INFO_QUEUE_MESSAGE_SEVERITY,
+ ) -> BOOL,
+ fn GetBreakOnID(
+ Producer: DXGI_DEBUG_ID,
+ ID: DXGI_INFO_QUEUE_MESSAGE_ID,
+ ) -> BOOL,
+ fn SetMuteDebugOutput(
+ Producer: DXGI_DEBUG_ID,
+ bMute: BOOL,
+ ) -> (),
+ fn GetMuteDebugOutput(
+ Producer: DXGI_DEBUG_ID,
+ ) -> BOOL,
+}}
+RIDL!{#[uuid(0x119e7452, 0xde9e, 0x40fe, 0x88, 0x06, 0x88, 0xf9, 0x0c, 0x12, 0xb4, 0x41)]
+interface IDXGIDebug(IDXGIDebugVtbl): IUnknown(IUnknownVtbl) {
+ fn ReportLiveObjects(
+ apiid: GUID,
+ flags: DXGI_DEBUG_RLO_FLAGS,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x119e7452, 0xde9e, 0x40fe, 0x88, 0x06, 0x88, 0xf9, 0x0c, 0x12, 0xb4, 0x41)]
+interface IDXGIDebug1(IDXGIDebug1Vtbl): IDXGIDebug(IDXGIDebugVtbl) {
+ fn EnableLeakTrackingForThread() -> (),
+ fn DisableLeakTrackingForThread() -> (),
+ fn IsLeakTrackingEnabledForThread() -> BOOL,
+}}
+DEFINE_GUID!{IID_IDXGIInfoQueue,
+ 0xd67441c7, 0x672a, 0x476f, 0x9e, 0x82, 0xcd, 0x55, 0xb4, 0x49, 0x49, 0xce}
+DEFINE_GUID!{IID_IDXGIDebug,
+ 0x119e7452, 0xde9e, 0x40fe, 0x88, 0x06, 0x88, 0xf9, 0x0c, 0x12, 0xb4, 0x41}
+DEFINE_GUID!{IID_IDXGIDebug1,
+ 0xc5a05f0c, 0x16f2, 0x4adf, 0x9f, 0x4d, 0xa8, 0xc4, 0xd5, 0x8a, 0xc5, 0x50}
diff --git a/vendor/winapi/src/um/dxva2api.rs b/vendor/winapi/src/um/dxva2api.rs
new file mode 100644
index 000000000..db07c40e9
--- /dev/null
+++ b/vendor/winapi/src/um/dxva2api.rs
@@ -0,0 +1,706 @@
+// 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 ctypes::{c_float, c_void};
+use shared::basetsd::UINT64;
+use shared::d3d9::{IDirect3DDevice9, IDirect3DSurface9};
+use shared::d3d9types::{D3DFORMAT, D3DPOOL};
+use shared::guiddef::{GUID, REFGUID, REFIID};
+use shared::minwindef::{BOOL, DWORD, FLOAT, HIWORD, LOWORD, UCHAR, UINT, USHORT};
+use shared::windef::{RECT, SIZE};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HANDLE, HRESULT, LONG, LONGLONG, PVOID, SHORT};
+DEFINE_GUID!{DXVA2_ModeMPEG2_MoComp,
+ 0xe6a9f44b, 0x61b0, 0x4563, 0x9e, 0xa4, 0x63, 0xd2, 0xa3, 0xc6, 0xfe, 0x66}
+DEFINE_GUID!{DXVA2_ModeMPEG2_IDCT,
+ 0xbf22ad00, 0x03ea, 0x4690, 0x80, 0x77, 0x47, 0x33, 0x46, 0x20, 0x9b, 0x7e}
+DEFINE_GUID!{DXVA2_ModeMPEG2_VLD,
+ 0xee27417f, 0x5e28, 0x4e65, 0xbe, 0xea, 0x1d, 0x26, 0xb5, 0x08, 0xad, 0xc9}
+DEFINE_GUID!{DXVA2_ModeMPEG1_VLD,
+ 0x6f3ec719, 0x3735, 0x42cc, 0x80, 0x63, 0x65, 0xcc, 0x3c, 0xb3, 0x66, 0x16}
+DEFINE_GUID!{DXVA2_ModeMPEG2and1_VLD,
+ 0x86695f12, 0x340e, 0x4f04, 0x9f, 0xd3, 0x92, 0x53, 0xdd, 0x32, 0x74, 0x60}
+DEFINE_GUID!{DXVA2_ModeH264_A,
+ 0x1b81be64, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{DXVA2_ModeH264_B,
+ 0x1b81be65, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{DXVA2_ModeH264_C,
+ 0x1b81be66, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{DXVA2_ModeH264_D,
+ 0x1b81be67, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{DXVA2_ModeH264_E,
+ 0x1b81be68, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{DXVA2_ModeH264_F,
+ 0x1b81be69, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{DXVA2_ModeH264_VLD_WithFMOASO_NoFGT,
+ 0xd5f04ff9, 0x3418, 0x45d8, 0x95, 0x61, 0x32, 0xa7, 0x6a, 0xae, 0x2d, 0xdd}
+DEFINE_GUID!{DXVA2_ModeH264_VLD_Stereo_Progressive_NoFGT,
+ 0xd79be8da, 0x0cf1, 0x4c81, 0xb8, 0x2a, 0x69, 0xa4, 0xe2, 0x36, 0xf4, 0x3d}
+DEFINE_GUID!{DXVA2_ModeH264_VLD_Stereo_NoFGT,
+ 0xf9aaccbb, 0xc2b6, 0x4cfc, 0x87, 0x79, 0x57, 0x07, 0xb1, 0x76, 0x05, 0x52}
+DEFINE_GUID!{DXVA2_ModeH264_VLD_Multiview_NoFGT,
+ 0x705b9d82, 0x76cf, 0x49d6, 0xb7, 0xe6, 0xac, 0x88, 0x72, 0xdb, 0x01, 0x3c}
+DEFINE_GUID!{DXVA2_ModeWMV8_A,
+ 0x1b81be80, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{DXVA2_ModeWMV8_B,
+ 0x1b81be81, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{DXVA2_ModeWMV9_A,
+ 0x1b81be90, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{DXVA2_ModeWMV9_B,
+ 0x1b81be91, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{DXVA2_ModeWMV9_C,
+ 0x1b81be94, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{DXVA2_ModeVC1_A,
+ 0x1b81bea0, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{DXVA2_ModeVC1_B,
+ 0x1b81bea1, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{DXVA2_ModeVC1_C,
+ 0x1b81bea2, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{DXVA2_ModeVC1_D,
+ 0x1b81bea3, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{DXVA2_ModeVC1_D2010,
+ 0x1b81bea4, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{DXVA2_NoEncrypt,
+ 0x1b81bed0, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5}
+DEFINE_GUID!{DXVA2_VideoProcProgressiveDevice,
+ 0x5a54a0c9, 0xc7ec, 0x4bd9, 0x8e, 0xde, 0xf3, 0xc7, 0x5d, 0xc4, 0x39, 0x3b}
+DEFINE_GUID!{DXVA2_VideoProcBobDevice,
+ 0x335aa36e, 0x7884, 0x43a4, 0x9c, 0x91, 0x7f, 0x87, 0xfa, 0xf3, 0xe3, 0x7e}
+DEFINE_GUID!{DXVA2_VideoProcSoftwareDevice,
+ 0x4553d47f, 0xee7e, 0x4e3f, 0x94, 0x75, 0xdb, 0xf1, 0x37, 0x6c, 0x48, 0x10}
+DEFINE_GUID!{DXVA2_ModeMPEG4pt2_VLD_Simple,
+ 0xefd64d74, 0xc9e8, 0x41d7, 0xa5, 0xe9, 0xe9, 0xb0, 0xe3, 0x9f, 0xa3, 0x19}
+DEFINE_GUID!{DXVA2_ModeMPEG4pt2_VLD_AdvSimple_NoGMC,
+ 0xed418a9f, 0x010d, 0x4eda, 0x9a, 0xe3, 0x9a, 0x65, 0x35, 0x8d, 0x8d, 0x2e}
+DEFINE_GUID!{DXVA2_ModeMPEG4pt2_VLD_AdvSimple_GMC,
+ 0xab998b5b, 0x4258, 0x44a9, 0x9f, 0xeb, 0x94, 0xe5, 0x97, 0xa6, 0xba, 0xae}
+DEFINE_GUID!{DXVA2_ModeHEVC_VLD_Main,
+ 0x5b11d51b, 0x2f4c, 0x4452, 0xbc, 0xc3, 0x09, 0xf2, 0xa1, 0x16, 0x0c, 0xc0}
+DEFINE_GUID!{DXVA2_ModeHEVC_VLD_Main10,
+ 0x107af0e0, 0xef1a, 0x4d19, 0xab, 0xa8, 0x67, 0xa1, 0x63, 0x07, 0x3d, 0x13}
+DEFINE_GUID!{DXVA2_ModeVP9_VLD_Profile0,
+ 0x463707f8, 0xa1d0, 0x4585, 0x87, 0x6d, 0x83, 0xaa, 0x6d, 0x60, 0xb8, 0x9e}
+DEFINE_GUID!{DXVA2_ModeVP9_VLD_10bit_Profile2,
+ 0xa4c749ef, 0x6ecf, 0x48aa, 0x84, 0x48, 0x50, 0xa7, 0xa1, 0x16, 0x5f, 0xf7}
+DEFINE_GUID!{DXVA2_ModeVP8_VLD,
+ 0x90b899ea, 0x3a62, 0x4705, 0x88, 0xb3, 0x8d, 0xf0, 0x4b, 0x27, 0x44, 0xe7}
+pub const DXVA2_ModeMPEG2_MOCOMP: GUID = DXVA2_ModeMPEG2_MoComp;
+pub const DXVA2_ModeWMV8_PostProc: GUID = DXVA2_ModeWMV8_A;
+pub const DXVA2_ModeWMV8_MoComp: GUID = DXVA2_ModeWMV8_B;
+pub const DXVA2_ModeWMV9_PostProc: GUID = DXVA2_ModeWMV9_A;
+pub const DXVA2_ModeWMV9_MoComp: GUID = DXVA2_ModeWMV9_B;
+pub const DXVA2_ModeWMV9_IDCT: GUID = DXVA2_ModeWMV9_C;
+pub const DXVA2_ModeVC1_PostProc: GUID = DXVA2_ModeVC1_A;
+pub const DXVA2_ModeVC1_MoComp: GUID = DXVA2_ModeVC1_B;
+pub const DXVA2_ModeVC1_IDCT: GUID = DXVA2_ModeVC1_C;
+pub const DXVA2_ModeVC1_VLD: GUID = DXVA2_ModeVC1_D;
+pub const DXVA2_ModeH264_MoComp_NoFGT: GUID = DXVA2_ModeH264_A;
+pub const DXVA2_ModeH264_MoComp_FGT: GUID = DXVA2_ModeH264_B;
+pub const DXVA2_ModeH264_IDCT_NoFGT: GUID = DXVA2_ModeH264_C;
+pub const DXVA2_ModeH264_IDCT_FGT: GUID = DXVA2_ModeH264_D;
+pub const DXVA2_ModeH264_VLD_NoFGT: GUID = DXVA2_ModeH264_E;
+pub const DXVA2_ModeH264_VLD_FGT: GUID = DXVA2_ModeH264_F;
+pub const DXVA2_E_NOT_INITIALIZED: HRESULT = 0x80041000;
+pub const DXVA2_E_NEW_VIDEO_DEVICE: HRESULT = 0x80041001;
+pub const DXVA2_E_VIDEO_DEVICE_LOCKED: HRESULT = 0x80041002;
+pub const DXVA2_E_NOT_AVAILABLE: HRESULT = 0x80041003;
+DEFINE_GUID!{IID_IDirect3DDeviceManager9,
+ 0xa0cade0f, 0x06d5, 0x4cf4, 0xa1, 0xc7, 0xf3, 0xcd, 0xd7, 0x25, 0xaa, 0x75}
+DEFINE_GUID!{IID_IDirectXVideoAccelerationService,
+ 0xfc51a550, 0xd5e7, 0x11d9, 0xaf, 0x55, 0x00, 0x05, 0x4e, 0x43, 0xff, 0x02}
+DEFINE_GUID!{IID_IDirectXVideoDecoderService,
+ 0xfc51a551, 0xd5e7, 0x11d9, 0xaf, 0x55, 0x00, 0x05, 0x4e, 0x43, 0xff, 0x02}
+DEFINE_GUID!{IID_IDirectXVideoProcessorService,
+ 0xfc51a552, 0xd5e7, 0x11d9, 0xaf, 0x55, 0x00, 0x05, 0x4e, 0x43, 0xff, 0x02}
+DEFINE_GUID!{IID_IDirectXVideoDecoder,
+ 0xf2b0810a, 0xfd00, 0x43c9, 0x91, 0x8c, 0xdf, 0x94, 0xe2, 0xd8, 0xef, 0x7d}
+DEFINE_GUID!{IID_IDirectXVideoProcessor,
+ 0x8c3a39f0, 0x916e, 0x4690, 0x80, 0x4f, 0x4c, 0x80, 0x01, 0x35, 0x5d, 0x25}
+DEFINE_GUID!{IID_IDirectXVideoMemoryConfiguration,
+ 0xb7f916dd, 0xdb3b, 0x49c1, 0x84, 0xd7, 0xe4, 0x5e, 0xf9, 0x9e, 0xc7, 0x26}
+pub const MAX_DEINTERLACE_SURFACES: usize = 32;
+pub const MAX_SUBSTREAMS: usize = 15;
+STRUCT!{struct DXVA2_ExtendedFormat {
+ value: UINT,
+}}
+BITFIELD!{DXVA2_ExtendedFormat value: UINT [
+ SampleFormat set_SampleFormat[0..8],
+ VideoChromaSubsampling set_VideoChromaSubsampling[8..12],
+ NominalRange set_NominalRange[12..15],
+ VideoTransferMatrix set_VideoTransferMatrix[15..18],
+ VideoLighting set_VideoLighting[18..22],
+ VideoPrimaries set_VideoPrimaries[22..27],
+ VideoTransferFunction set_VideoTransferFunction[27..32],
+]}
+ENUM!{enum DXVA2_SampleFormat {
+ DXVA2_SampleFormatMask = 0xff,
+ DXVA2_SampleUnknown = 0,
+ DXVA2_SampleProgressiveFrame = 2,
+ DXVA2_SampleFieldInterleavedEvenFirst = 3,
+ DXVA2_SampleFieldInterleavedOddFirst = 4,
+ DXVA2_SampleFieldSingleEven = 5,
+ DXVA2_SampleFieldSingleOdd = 6,
+ DXVA2_SampleSubStream = 7,
+}}
+ENUM!{enum DXVA2_VideoChromaSubSampling {
+ DXVA2_VideoChromaSubsamplingMask = 0xf,
+ DXVA2_VideoChromaSubsampling_Unknown = 0,
+ DXVA2_VideoChromaSubsampling_ProgressiveChroma = 0x8,
+ DXVA2_VideoChromaSubsampling_Horizontally_Cosited = 0x4,
+ DXVA2_VideoChromaSubsampling_Vertically_Cosited = 0x2,
+ DXVA2_VideoChromaSubsampling_Vertically_AlignedChromaPlanes = 0x1,
+ DXVA2_VideoChromaSubsampling_MPEG2 = DXVA2_VideoChromaSubsampling_Horizontally_Cosited |
+ DXVA2_VideoChromaSubsampling_Vertically_AlignedChromaPlanes,
+ DXVA2_VideoChromaSubsampling_MPEG1 =
+ DXVA2_VideoChromaSubsampling_Vertically_AlignedChromaPlanes,
+ DXVA2_VideoChromaSubsampling_DV_PAL = DXVA2_VideoChromaSubsampling_Horizontally_Cosited |
+ DXVA2_VideoChromaSubsampling_Vertically_Cosited,
+ DXVA2_VideoChromaSubsampling_Cosited = DXVA2_VideoChromaSubsampling_Horizontally_Cosited |
+ DXVA2_VideoChromaSubsampling_Vertically_Cosited |
+ DXVA2_VideoChromaSubsampling_Vertically_AlignedChromaPlanes,
+}}
+ENUM!{enum DXVA2_NominalRange {
+ DXVA2_NominalRangeMask = 0x7,
+ DXVA2_NominalRange_Unknown = 0,
+ DXVA2_NominalRange_Normal = 1,
+ DXVA2_NominalRange_Wide = 2,
+ DXVA2_NominalRange_0_255 = 1,
+ DXVA2_NominalRange_16_235 = 2,
+ DXVA2_NominalRange_48_208 = 3,
+}}
+ENUM!{enum DXVA2_VideoTransferMatrix {
+ DXVA2_VideoTransferMatrixMask = 0x7,
+ DXVA2_VideoTransferMatrix_Unknown = 0,
+ DXVA2_VideoTransferMatrix_BT709 = 1,
+ DXVA2_VideoTransferMatrix_BT601 = 2,
+ DXVA2_VideoTransferMatrix_SMPTE240M = 3,
+}}
+ENUM!{enum DXVA2_VideoLighting {
+ DXVA2_VideoLightingMask = 0xf,
+ DXVA2_VideoLighting_Unknown = 0,
+ DXVA2_VideoLighting_bright = 1,
+ DXVA2_VideoLighting_office = 2,
+ DXVA2_VideoLighting_dim = 3,
+ DXVA2_VideoLighting_dark = 4,
+}}
+ENUM!{enum DXVA2_VideoPrimaries {
+ DXVA2_VideoPrimariesMask = 0x1f,
+ DXVA2_VideoPrimaries_Unknown = 0,
+ DXVA2_VideoPrimaries_reserved = 1,
+ DXVA2_VideoPrimaries_BT709 = 2,
+ DXVA2_VideoPrimaries_BT470_2_SysM = 3,
+ DXVA2_VideoPrimaries_BT470_2_SysBG = 4,
+ DXVA2_VideoPrimaries_SMPTE170M = 5,
+ DXVA2_VideoPrimaries_SMPTE240M = 6,
+ DXVA2_VideoPrimaries_EBU3213 = 7,
+ DXVA2_VideoPrimaries_SMPTE_C = 8,
+}}
+ENUM!{enum DXVA2_VideoTransferFunction {
+ DXVA2_VideoTransFuncMask = 0x1f,
+ DXVA2_VideoTransFunc_Unknown = 0,
+ DXVA2_VideoTransFunc_10 = 1,
+ DXVA2_VideoTransFunc_18 = 2,
+ DXVA2_VideoTransFunc_20 = 3,
+ DXVA2_VideoTransFunc_22 = 4,
+ DXVA2_VideoTransFunc_709 = 5,
+ DXVA2_VideoTransFunc_240M = 6,
+ DXVA2_VideoTransFunc_sRGB = 7,
+ DXVA2_VideoTransFunc_28 = 8,
+}}
+pub const DXVA2_VideoTransFunc_22_709: DWORD = DXVA2_VideoTransFunc_709;
+pub const DXVA2_VideoTransFunc_22_240M: DWORD = DXVA2_VideoTransFunc_240M;
+pub const DXVA2_VideoTransFunc_22_8bit_sRGB: DWORD = DXVA2_VideoTransFunc_sRGB;
+STRUCT!{struct DXVA2_Frequency {
+ Numerator: UINT,
+ Denominator: UINT,
+}}
+STRUCT!{struct DXVA2_VideoDesc {
+ SampleWidth: UINT,
+ SampleHeight: UINT,
+ SampleFormat: DXVA2_ExtendedFormat,
+ Format: D3DFORMAT,
+ InputSampleFreq: DXVA2_Frequency,
+ OutputFrameFreq: DXVA2_Frequency,
+ UABProtectionLevel: UINT,
+ Reserved: UINT,
+}}
+ENUM!{enum __MIDL___MIDL_itf_dxva2api_0000_0000_0003 {
+ DXVA2_DeinterlaceTech_Unknown = 0,
+ DXVA2_DeinterlaceTech_BOBLineReplicate = 0x1,
+ DXVA2_DeinterlaceTech_BOBVerticalStretch = 0x2,
+ DXVA2_DeinterlaceTech_BOBVerticalStretch4Tap = 0x4,
+ DXVA2_DeinterlaceTech_MedianFiltering = 0x8,
+ DXVA2_DeinterlaceTech_EdgeFiltering = 0x10,
+ DXVA2_DeinterlaceTech_FieldAdaptive = 0x20,
+ DXVA2_DeinterlaceTech_PixelAdaptive = 0x40,
+ DXVA2_DeinterlaceTech_MotionVectorSteered = 0x80,
+ DXVA2_DeinterlaceTech_InverseTelecine = 0x100,
+ DXVA2_DeinterlaceTech_Mask = 0x1ff,
+}}
+ENUM!{enum __MIDL___MIDL_itf_dxva2api_0000_0000_0004 {
+ DXVA2_NoiseFilterLumaLevel = 1,
+ DXVA2_NoiseFilterLumaThreshold = 2,
+ DXVA2_NoiseFilterLumaRadius = 3,
+ DXVA2_NoiseFilterChromaLevel = 4,
+ DXVA2_NoiseFilterChromaThreshold = 5,
+ DXVA2_NoiseFilterChromaRadius = 6,
+ DXVA2_DetailFilterLumaLevel = 7,
+ DXVA2_DetailFilterLumaThreshold = 8,
+ DXVA2_DetailFilterLumaRadius = 9,
+ DXVA2_DetailFilterChromaLevel = 10,
+ DXVA2_DetailFilterChromaThreshold = 11,
+ DXVA2_DetailFilterChromaRadius = 12,
+}}
+ENUM!{enum __MIDL___MIDL_itf_dxva2api_0000_0000_0005 {
+ DXVA2_NoiseFilterTech_Unsupported = 0,
+ DXVA2_NoiseFilterTech_Unknown = 0x1,
+ DXVA2_NoiseFilterTech_Median = 0x2,
+ DXVA2_NoiseFilterTech_Temporal = 0x4,
+ DXVA2_NoiseFilterTech_BlockNoise = 0x8,
+ DXVA2_NoiseFilterTech_MosquitoNoise = 0x10,
+ DXVA2_NoiseFilterTech_Mask = 0x1f,
+}}
+ENUM!{enum __MIDL___MIDL_itf_dxva2api_0000_0000_0006 {
+ DXVA2_DetailFilterTech_Unsupported = 0,
+ DXVA2_DetailFilterTech_Unknown = 0x1,
+ DXVA2_DetailFilterTech_Edge = 0x2,
+ DXVA2_DetailFilterTech_Sharpening = 0x4,
+ DXVA2_DetailFilterTech_Mask = 0x7,
+}}
+ENUM!{enum __MIDL___MIDL_itf_dxva2api_0000_0000_0007 {
+ DXVA2_ProcAmp_None = 0,
+ DXVA2_ProcAmp_Brightness = 0x1,
+ DXVA2_ProcAmp_Contrast = 0x2,
+ DXVA2_ProcAmp_Hue = 0x4,
+ DXVA2_ProcAmp_Saturation = 0x8,
+ DXVA2_ProcAmp_Mask = 0xf,
+}}
+ENUM!{enum __MIDL___MIDL_itf_dxva2api_0000_0000_0008 {
+ DXVA2_VideoProcess_None = 0,
+ DXVA2_VideoProcess_YUV2RGB = 0x1,
+ DXVA2_VideoProcess_StretchX = 0x2,
+ DXVA2_VideoProcess_StretchY = 0x4,
+ DXVA2_VideoProcess_AlphaBlend = 0x8,
+ DXVA2_VideoProcess_SubRects = 0x10,
+ DXVA2_VideoProcess_SubStreams = 0x20,
+ DXVA2_VideoProcess_SubStreamsExtended = 0x40,
+ DXVA2_VideoProcess_YUV2RGBExtended = 0x80,
+ DXVA2_VideoProcess_AlphaBlendExtended = 0x100,
+ DXVA2_VideoProcess_Constriction = 0x200,
+ DXVA2_VideoProcess_NoiseFilter = 0x400,
+ DXVA2_VideoProcess_DetailFilter = 0x800,
+ DXVA2_VideoProcess_PlanarAlpha = 0x1000,
+ DXVA2_VideoProcess_LinearScaling = 0x2000,
+ DXVA2_VideoProcess_GammaCompensated = 0x4000,
+ DXVA2_VideoProcess_MaintainsOriginalFieldData = 0x8000,
+ DXVA2_VideoProcess_Mask = 0xffff,
+}}
+ENUM!{enum __MIDL___MIDL_itf_dxva2api_0000_0000_0009 {
+ DXVA2_VPDev_HardwareDevice = 0x1,
+ DXVA2_VPDev_EmulatedDXVA1 = 0x2,
+ DXVA2_VPDev_SoftwareDevice = 0x4,
+ DXVA2_VPDev_Mask = 0x7,
+}}
+ENUM!{enum __MIDL___MIDL_itf_dxva2api_0000_0000_0010 {
+ DXVA2_SampleData_RFF = 0x1,
+ DXVA2_SampleData_TFF = 0x2,
+ DXVA2_SampleData_RFF_TFF_Present = 0x4,
+ DXVA2_SampleData_Mask = 0xffff,
+}}
+ENUM!{enum __MIDL___MIDL_itf_dxva2api_0000_0000_0011 {
+ DXVA2_DestData_RFF = 0x1,
+ DXVA2_DestData_TFF = 0x2,
+ DXVA2_DestData_RFF_TFF_Present = 0x4,
+ DXVA2_DestData_Mask = 0xffff,
+}}
+STRUCT!{struct DXVA2_VideoProcessorCaps {
+ DeviceCaps: UINT,
+ InputPool: D3DPOOL,
+ NumForwardRefSamples: UINT,
+ NumBackwardRefSamples: UINT,
+ Reserved: UINT,
+ DeinterlaceTechnology: UINT,
+ ProcAmpControlCaps: UINT,
+ VideoProcessorOperations: UINT,
+ NoiseFilterTechnology: UINT,
+ DetailFilterTechnology: UINT,
+}}
+STRUCT!{struct DXVA2_Fixed32_s {
+ Fraction: USHORT,
+ Value: SHORT,
+}}
+UNION!{union DXVA2_Fixed32 {
+ [u32; 1],
+ s s_mut: DXVA2_Fixed32_s,
+ ll s_ll: LONG,
+}}
+STRUCT!{struct DXVA2_AYUVSample8 {
+ Cr: UCHAR,
+ Cb: UCHAR,
+ Y: UCHAR,
+ Alpha: UCHAR,
+}}
+STRUCT!{struct DXVA2_AYUVSample16 {
+ Cr: USHORT,
+ Cb: USHORT,
+ Y: USHORT,
+ Alpha: USHORT,
+}}
+pub type REFERENCE_TIME = LONGLONG;
+STRUCT!{struct DXVA2_VideoSample {
+ Start: REFERENCE_TIME,
+ End: REFERENCE_TIME,
+ SampleFormat: DXVA2_ExtendedFormat,
+ SrcSurface: *mut IDirect3DSurface9,
+ SrcRect: RECT,
+ DstRect: RECT,
+ Pal: [DXVA2_AYUVSample8; 16],
+ PlanarAlpha: DXVA2_Fixed32,
+ SampleData: DWORD,
+}}
+STRUCT!{struct DXVA2_ValueRange {
+ MinValue: DXVA2_Fixed32,
+ MaxValue: DXVA2_Fixed32,
+ DefaultValue: DXVA2_Fixed32,
+ StepSize: DXVA2_Fixed32,
+}}
+STRUCT!{struct DXVA2_ProcAmpValues {
+ Brightness: DXVA2_Fixed32,
+ Contrast: DXVA2_Fixed32,
+ Hue: DXVA2_Fixed32,
+ Saturation: DXVA2_Fixed32,
+}}
+STRUCT!{struct DXVA2_FilterValues {
+ Level: DXVA2_Fixed32,
+ Threshold: DXVA2_Fixed32,
+ Radius: DXVA2_Fixed32,
+}}
+STRUCT!{struct DXVA2_VideoProcessBltParams {
+ TargetFrame: REFERENCE_TIME,
+ TargetRect: RECT,
+ ConstrictionSize: SIZE,
+ StreamingFlags: UINT,
+ BackgroundColor: DXVA2_AYUVSample16,
+ DestFormat: DXVA2_ExtendedFormat,
+ ProcAmpValues: DXVA2_ProcAmpValues,
+ Alpha: DXVA2_Fixed32,
+ NoiseFilterLuma: DXVA2_FilterValues,
+ NoiseFilterChroma: DXVA2_FilterValues,
+ DetailFilterLuma: DXVA2_FilterValues,
+ DetailFilterChroma: DXVA2_FilterValues,
+ DestData: DWORD,
+}}
+ENUM!{enum __MIDL___MIDL_itf_dxva2api_0000_0000_0012 {
+ DXVA2_PictureParametersBufferType = 0,
+ DXVA2_MacroBlockControlBufferType = 1,
+ DXVA2_ResidualDifferenceBufferType = 2,
+ DXVA2_DeblockingControlBufferType = 3,
+ DXVA2_InverseQuantizationMatrixBufferType = 4,
+ DXVA2_SliceControlBufferType = 5,
+ DXVA2_BitStreamDateBufferType = 6,
+ DXVA2_MotionVectorBuffer = 7,
+ DXVA2_FilmGrainBuffer = 8,
+}}
+ENUM!{enum __MIDL___MIDL_itf_dxva2api_0000_0000_0013 {
+ DXVA2_VideoDecoderRenderTarget = 0,
+ DXVA2_VideoProcessorRenderTarget = 1,
+ DXVA2_VideoSoftwareRenderTarget = 2,
+}}
+STRUCT!{struct DXVA2_ConfigPictureDecode {
+ guidConfigBitstreamEncryption: GUID,
+ guidConfigMBcontrolEncryption: GUID,
+ guidConfigResidDiffEncryption: GUID,
+ ConfigBitstreamRaw: UINT,
+ ConfigMBcontrolRasterOrder: UINT,
+ ConfigResidDiffHost: UINT,
+ ConfigSpatialResid8: UINT,
+ ConfigResid8Subtraction: UINT,
+ ConfigSpatialHost8or9Clipping: UINT,
+ ConfigSpatialResidInterleaved: UINT,
+ ConfigIntraResidUnsigned: UINT,
+ ConfigResidDiffAccelerator: UINT,
+ ConfigHostInverseScan: UINT,
+ ConfigSpecificIDCT: UINT,
+ Config4GroupedCoefs: UINT,
+ ConfigMinRenderTargetBuffCount: USHORT,
+ ConfigDecoderSpecific: USHORT,
+}}
+STRUCT!{struct DXVA2_DecodeBufferDesc {
+ CompressedBufferType: DWORD,
+ BufferIndex: UINT,
+ DataOffset: UINT,
+ DataSize: UINT,
+ FirstMBaddress: UINT,
+ NumMBsInBuffer: UINT,
+ Width: UINT,
+ Height: UINT,
+ Stride: UINT,
+ ReservedBits: UINT,
+ pvPVPState: PVOID,
+}}
+STRUCT!{struct DXVA2_AES_CTR_IV {
+ IV: UINT64,
+ Count: UINT64,
+}}
+STRUCT!{struct DXVA2_DecodeExtensionData {
+ Function: UINT,
+ pPrivateInputData: PVOID,
+ PrivateInputDataSize: UINT,
+ pPrivateOutputData: PVOID,
+ PrivateOutputDataSize: UINT,
+}}
+pub const DXVA2_DECODE_GET_DRIVER_HANDLE: UINT = 0x725;
+pub const DXVA2_DECODE_SPECIFY_ENCRYPTED_BLOCKS: UINT = 0x724;
+STRUCT!{struct DXVA2_DecodeExecuteParams {
+ NumCompBuffers: UINT,
+ pCompressedBuffers: *mut DXVA2_DecodeBufferDesc,
+ pExtensionData: *mut DXVA2_DecodeExtensionData,
+}}
+RIDL!{#[uuid(0xa0cade0f, 0x06d5, 0x4cf4, 0xa1, 0xc7, 0xf3, 0xcd, 0xd7, 0x25, 0xaa, 0x75)]
+interface IDirect3DDeviceManager9(IDirect3DDeviceManager9Vtbl): IUnknown(IUnknownVtbl) {
+ fn ResetDevice(
+ pDevice: *mut IDirect3DDevice9,
+ resetToken: UINT,
+ ) -> HRESULT,
+ fn OpenDeviceHandle(
+ phDevice: *mut HANDLE,
+ ) -> HRESULT,
+ fn CloseDeviceHandle(
+ hDevice: HANDLE,
+ ) -> HRESULT,
+ fn TestDevice(
+ hDevice: HANDLE,
+ ) -> HRESULT,
+ fn LockDevice(
+ hDevice: HANDLE,
+ ppDevice: *mut *mut IDirect3DDevice9,
+ fBloc: BOOL,
+ ) -> HRESULT,
+ fn UnlockDevice(
+ hDevice: HANDLE,
+ fSaveState: BOOL,
+ ) -> HRESULT,
+ fn GetVideoService(
+ hDevice: HANDLE,
+ riid: REFIID,
+ ppService: *mut *mut c_void,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xfc51a550, 0xd5e7, 0x11d9, 0xaf, 0x55, 0x00, 0x05, 0x4e, 0x43, 0xff, 0x02)]
+interface IDirectXVideoAccelerationService(IDirectXVideoAccelerationServiceVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn CreateSurface(
+ Width: UINT,
+ Height: UINT,
+ BackBuffers: UINT,
+ Format: D3DFORMAT,
+ Pool: D3DPOOL,
+ Usage: DWORD,
+ DxvaType: DWORD,
+ ppSurface: *mut *mut IDirect3DSurface9,
+ pSharedHandle: *mut HANDLE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xfc51a551, 0xd5e7, 0x11d9, 0xaf, 0x55, 0x00, 0x05, 0x4e, 0x43, 0xff, 0x02)]
+interface IDirectXVideoDecoderService(IDirectXVideoDecoderServiceVtbl):
+ IDirectXVideoAccelerationService(IDirectXVideoAccelerationServiceVtbl) {
+ fn GetDecoderDeviceGuids(
+ pCount: *mut UINT,
+ pGuids: *mut *mut GUID,
+ ) -> HRESULT,
+ fn GetDecoderRenderTargets(
+ Guid: REFGUID,
+ pCount: *mut UINT,
+ pFormats: *mut *mut D3DFORMAT,
+ ) -> HRESULT,
+ fn GetDecoderConfigurations(
+ Guid: REFGUID,
+ pVideoDesc: *const DXVA2_VideoDesc,
+ pReserved: *mut c_void,
+ pCount: *mut UINT,
+ ppConfigs: *mut *mut DXVA2_ConfigPictureDecode,
+ ) -> HRESULT,
+ fn CreateVideoDecoder(
+ Guid: REFGUID,
+ pVideoDesc: *const DXVA2_VideoDesc,
+ pConfig: *const DXVA2_ConfigPictureDecode,
+ ppDecoderRenderTargets: *mut *mut IDirect3DSurface9,
+ NumRenderTargets: UINT,
+ ppDecode: *mut *mut IDirectXVideoDecoder,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xfc51a552, 0xd5e7, 0x11d9, 0xaf, 0x55, 0x00, 0x05, 0x4e, 0x43, 0xff, 0x02)]
+interface IDirectXVideoProcessorService(IDirectXVideoProcessorServiceVtbl):
+ IDirectXVideoAccelerationService(IDirectXVideoAccelerationServiceVtbl) {
+ fn RegisterVideoProcessorSoftwareDevice(
+ pCallbacks: *mut c_void,
+ ) -> HRESULT,
+ fn GetVideoProcessorDeviceGuids(
+ pVideoDesc: *mut DXVA2_VideoDesc,
+ pCount: *mut UINT,
+ pGuids: *mut *mut GUID,
+ ) -> HRESULT,
+ fn GetVideoProcessorRenderTargets(
+ VideoProcDeviceGuid: REFGUID,
+ pVideoDesc: *const DXVA2_VideoDesc,
+ pCount: *mut UINT,
+ pFormats: *mut *mut D3DFORMAT,
+ ) -> HRESULT,
+ fn GetVideoProcessorSubStreamFormats(
+ VideoProcDeviceGuid: REFGUID,
+ pVideoDesc: *const DXVA2_VideoDesc,
+ RenderTargetFormat: D3DFORMAT,
+ pCount: *mut UINT,
+ pFormats: *mut *mut D3DFORMAT,
+ ) -> HRESULT,
+ fn GetVideoProcessorCaps(
+ VideoProcDeviceGuid: REFGUID,
+ pVideoDesc: *const DXVA2_VideoDesc,
+ RenderTargetFormat: D3DFORMAT,
+ pCaps: *mut DXVA2_VideoProcessorCaps,
+ ) -> HRESULT,
+ fn GetProcAmpRange(
+ VideoProcDeviceGuid: REFGUID,
+ pVideoDesc: *const DXVA2_VideoDesc,
+ RenderTargetFormat: D3DFORMAT,
+ ProcAmpCap: UINT,
+ pRange: *mut DXVA2_ValueRange,
+ ) -> HRESULT,
+ fn GetFilterPropertyRange(
+ VideoProcDeviceGuid: REFGUID,
+ pVideoDesc: *const DXVA2_VideoDesc,
+ RenderTargetFormat: D3DFORMAT,
+ FilterSetting: UINT,
+ pRange: *mut DXVA2_ValueRange,
+ ) -> HRESULT,
+ fn CreateVideoProcessor(
+ VideoProcDeviceGuid: REFGUID,
+ pVideoDesc: *const DXVA2_VideoDesc,
+ RenderTargetFormat: D3DFORMAT,
+ MaxNumSubStreams: UINT,
+ ppVidProcess: *mut *mut IDirectXVideoProcessor,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xf2b0810a, 0xfd00, 0x43c9, 0x91, 0x8c, 0xdf, 0x94, 0xe2, 0xd8, 0xef, 0x7d)]
+interface IDirectXVideoDecoder(IDirectXVideoDecoderVtbl): IUnknown(IUnknownVtbl) {
+ fn GetVideoDecoderService(
+ ppService: *mut *mut IDirectXVideoDecoderService,
+ ) -> HRESULT,
+ fn GetCreationParameters(
+ pDeviceGuid: *mut GUID,
+ pVideoDesc: *mut DXVA2_VideoDesc,
+ pConfig: *mut DXVA2_ConfigPictureDecode,
+ pDecoderRenderTargets: *mut *mut *mut IDirect3DSurface9,
+ pNumSurfaces: *mut UINT,
+ ) -> HRESULT,
+ fn GetBuffer(
+ BufferType: UINT,
+ ppBuffer: *mut *mut c_void,
+ pBufferSize: *mut UINT,
+ ) -> HRESULT,
+ fn ReleaseBuffer(
+ BufferType: UINT,
+ ) -> HRESULT,
+ fn BeginFrame(
+ pRenderTarget: *mut IDirect3DSurface9,
+ pvPVPData: *mut c_void,
+ ) -> HRESULT,
+ fn EndFrame(
+ pHandleComplete: *mut HANDLE,
+ ) -> HRESULT,
+ fn Execute(
+ pExecuteParams: *const DXVA2_DecodeExecuteParams,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8c3a39f0, 0x916e, 0x4690, 0x80, 0x4f, 0x4c, 0x80, 0x01, 0x35, 0x5d, 0x25)]
+interface IDirectXVideoProcessor(IDirectXVideoProcessorVtbl): IUnknown(IUnknownVtbl) {
+ fn GetVideoProcessorService(
+ ppService: *mut *mut IDirectXVideoProcessorService,
+ ) -> HRESULT,
+ fn GetCreationParameters(
+ pDeviceGuid: *mut GUID,
+ pVideoDesc: *mut DXVA2_VideoDesc,
+ pRenderTargetFormat: *mut D3DFORMAT,
+ pMaxNumSubStreams: *mut UINT,
+ ) -> HRESULT,
+ fn GetVideoProcessorCaps(
+ pCaps: *mut DXVA2_VideoProcessorCaps,
+ ) -> HRESULT,
+ fn GetProcAmpRange(
+ ProcAmpCap: UINT,
+ pRange: *mut DXVA2_ValueRange,
+ ) -> HRESULT,
+ fn GetFilterPropertyRange(
+ FilterSetting: UINT,
+ pRange: *mut DXVA2_ValueRange,
+ ) -> HRESULT,
+ fn VideoProcessBlt(
+ pRenderTarget: *mut IDirect3DSurface9,
+ pBltParams: *const DXVA2_VideoProcessBltParams,
+ pSamples: *const DXVA2_VideoSample,
+ NumSamples: UINT,
+ pHandleComplete: *mut HANDLE,
+ ) -> HRESULT,
+}}
+ENUM!{enum DXVA2_SurfaceType {
+ DXVA2_SurfaceType_DecoderRenderTarget = 0,
+ DXVA2_SurfaceType_ProcessorRenderTarget = 1,
+ DXVA2_SurfaceType_D3DRenderTargetTexture = 2,
+}}
+RIDL!{#[uuid(0xb7f916dd, 0xdb3b, 0x49c1, 0x84, 0xd7, 0xe4, 0x5e, 0xf9, 0x9e, 0xc7, 0x26)]
+interface IDirectXVideoMemoryConfiguration(IDirectXVideoMemoryConfigurationVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn GetAvailableSurfaceTypeByIndex(
+ dwTypeIndex: DWORD,
+ pdwType: *mut DXVA2_SurfaceType,
+ ) -> HRESULT,
+ fn SetSurfaceType(
+ dwType: DXVA2_SurfaceType,
+ ) -> HRESULT,
+}}
+extern "system" {
+ pub fn DXVA2CreateDirect3DDeviceManager9(
+ pResetToken: *mut UINT,
+ ppDeviceManager: *mut *mut IDirect3DDeviceManager9,
+ ) -> HRESULT;
+ pub fn DXVA2CreateVideoService(
+ pDD: *mut IDirect3DDevice9,
+ riid: REFIID,
+ ppService: *mut *mut c_void,
+ ) -> HRESULT;
+}
+#[inline]
+pub fn DXVA2FloatToFixed(_float_: c_float) -> DXVA2_Fixed32 {
+ unsafe {
+ let mut _fixed_: DXVA2_Fixed32 = ::core::mem::uninitialized();
+ _fixed_.s_mut().Fraction = LOWORD((_float_ * 0x10000 as c_float) as DWORD);
+ _fixed_.s_mut().Value = HIWORD((_float_ * 0x10000 as c_float) as DWORD) as SHORT;
+ _fixed_
+ }
+}
+#[inline]
+pub fn DXVA2FixedToFloat(_fixed_: DXVA2_Fixed32) -> c_float {
+ unsafe {
+ _fixed_.s().Value as FLOAT + _fixed_.s().Fraction as FLOAT / 0x10000 as FLOAT
+ }
+}
+#[inline]
+pub fn DXVA2_Fixed32TransparentAlpha() -> DXVA2_Fixed32 {
+ unsafe {
+ let mut _fixed_: DXVA2_Fixed32 = ::core::mem::uninitialized();
+ _fixed_.s_mut().Fraction = 0;
+ _fixed_.s_mut().Value = 0;
+ _fixed_
+ }
+}
+#[inline]
+pub fn DXVA2_Fixed32OpaqueAlpha() -> DXVA2_Fixed32 {
+ unsafe {
+ let mut _fixed_: DXVA2_Fixed32 = ::core::mem::uninitialized();
+ _fixed_.s_mut().Fraction = 0;
+ _fixed_.s_mut().Value = 1;
+ _fixed_
+ }
+}
diff --git a/vendor/winapi/src/um/dxvahd.rs b/vendor/winapi/src/um/dxvahd.rs
new file mode 100644
index 000000000..755dfdc23
--- /dev/null
+++ b/vendor/winapi/src/um/dxvahd.rs
@@ -0,0 +1,555 @@
+// 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 ctypes::c_void;
+use shared::d3d9::{IDirect3DDevice9Ex, IDirect3DSurface9};
+use shared::d3d9types::{D3DCOLOR, D3DFORMAT, D3DPOOL};
+use shared::guiddef::GUID;
+use shared::minwindef::{BOOL, DWORD, FLOAT, INT, UINT};
+use shared::windef::{RECT, SIZE};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HANDLE, HRESULT, ULONGLONG};
+DEFINE_GUID!{IID_IDXVAHD_Device,
+ 0x95f12dfd, 0xd77e, 0x49be, 0x81, 0x5f, 0x57, 0xd5, 0x79, 0x63, 0x4d, 0x6d}
+DEFINE_GUID!{IID_IDXVAHD_VideoProcessor,
+ 0x95f4edf4, 0x6e03, 0x4cd7, 0xbe, 0x1b, 0x30, 0x75, 0xd6, 0x65, 0xaa, 0x52}
+ENUM!{enum DXVAHD_FRAME_FORMAT {
+ DXVAHD_FRAME_FORMAT_PROGRESSIVE = 0,
+ DXVAHD_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST = 1,
+ DXVAHD_FRAME_FORMAT_INTERLACED_BOTTOM_FIELD_FIRST = 2,
+}}
+ENUM!{enum DXVAHD_DEVICE_USAGE {
+ DXVAHD_DEVICE_USAGE_PLAYBACK_NORMAL = 0,
+ DXVAHD_DEVICE_USAGE_OPTIMAL_SPEED = 1,
+ DXVAHD_DEVICE_USAGE_OPTIMAL_QUALITY = 2,
+}}
+ENUM!{enum DXVAHD_SURFACE_TYPE {
+ DXVAHD_SURFACE_TYPE_VIDEO_INPUT = 0,
+ DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE = 1,
+ DXVAHD_SURFACE_TYPE_VIDEO_OUTPUT = 2,
+}}
+ENUM!{enum DXVAHD_DEVICE_TYPE {
+ DXVAHD_DEVICE_TYPE_HARDWARE = 0,
+ DXVAHD_DEVICE_TYPE_SOFTWARE = 1,
+ DXVAHD_DEVICE_TYPE_REFERENCE = 2,
+ DXVAHD_DEVICE_TYPE_OTHER = 3,
+}}
+ENUM!{enum DXVAHD_DEVICE_CAPS {
+ DXVAHD_DEVICE_CAPS_LINEAR_SPACE = 0x1,
+ DXVAHD_DEVICE_CAPS_xvYCC = 0x2,
+ DXVAHD_DEVICE_CAPS_RGB_RANGE_CONVERSION = 0x4,
+ DXVAHD_DEVICE_CAPS_YCbCr_MATRIX_CONVERSION = 0x8,
+}}
+ENUM!{enum DXVAHD_FEATURE_CAPS {
+ DXVAHD_FEATURE_CAPS_ALPHA_FILL = 0x1,
+ DXVAHD_FEATURE_CAPS_CONSTRICTION = 0x2,
+ DXVAHD_FEATURE_CAPS_LUMA_KEY = 0x4,
+ DXVAHD_FEATURE_CAPS_ALPHA_PALETTE = 0x8,
+}}
+ENUM!{enum DXVAHD_FILTER_CAPS {
+ DXVAHD_FILTER_CAPS_BRIGHTNESS = 0x1,
+ DXVAHD_FILTER_CAPS_CONTRAST = 0x2,
+ DXVAHD_FILTER_CAPS_HUE = 0x4,
+ DXVAHD_FILTER_CAPS_SATURATION = 0x8,
+ DXVAHD_FILTER_CAPS_NOISE_REDUCTION = 0x10,
+ DXVAHD_FILTER_CAPS_EDGE_ENHANCEMENT = 0x20,
+ DXVAHD_FILTER_CAPS_ANAMORPHIC_SCALING = 0x40,
+}}
+ENUM!{enum DXVAHD_INPUT_FORMAT_CAPS {
+ DXVAHD_INPUT_FORMAT_CAPS_RGB_INTERLACED = 0x1,
+ DXVAHD_INPUT_FORMAT_CAPS_RGB_PROCAMP = 0x2,
+ DXVAHD_INPUT_FORMAT_CAPS_RGB_LUMA_KEY = 0x4,
+ DXVAHD_INPUT_FORMAT_CAPS_PALETTE_INTERLACED = 0x8,
+}}
+ENUM!{enum DXVAHD_PROCESSOR_CAPS {
+ DXVAHD_PROCESSOR_CAPS_DEINTERLACE_BLEND = 0x1,
+ DXVAHD_PROCESSOR_CAPS_DEINTERLACE_BOB = 0x2,
+ DXVAHD_PROCESSOR_CAPS_DEINTERLACE_ADAPTIVE = 0x4,
+ DXVAHD_PROCESSOR_CAPS_DEINTERLACE_MOTION_COMPENSATION = 0x8,
+ DXVAHD_PROCESSOR_CAPS_INVERSE_TELECINE = 0x10,
+ DXVAHD_PROCESSOR_CAPS_FRAME_RATE_CONVERSION = 0x20,
+}}
+ENUM!{enum DXVAHD_ITELECINE_CAPS {
+ DXVAHD_ITELECINE_CAPS_32 = 0x1,
+ DXVAHD_ITELECINE_CAPS_22 = 0x2,
+ DXVAHD_ITELECINE_CAPS_2224 = 0x4,
+ DXVAHD_ITELECINE_CAPS_2332 = 0x8,
+ DXVAHD_ITELECINE_CAPS_32322 = 0x10,
+ DXVAHD_ITELECINE_CAPS_55 = 0x20,
+ DXVAHD_ITELECINE_CAPS_64 = 0x40,
+ DXVAHD_ITELECINE_CAPS_87 = 0x80,
+ DXVAHD_ITELECINE_CAPS_222222222223 = 0x100,
+ DXVAHD_ITELECINE_CAPS_OTHER = 0x80000000,
+}}
+ENUM!{enum DXVAHD_FILTER {
+ DXVAHD_FILTER_BRIGHTNESS = 0,
+ DXVAHD_FILTER_CONTRAST = 1,
+ DXVAHD_FILTER_HUE = 2,
+ DXVAHD_FILTER_SATURATION = 3,
+ DXVAHD_FILTER_NOISE_REDUCTION = 4,
+ DXVAHD_FILTER_EDGE_ENHANCEMENT = 5,
+ DXVAHD_FILTER_ANAMORPHIC_SCALING = 6,
+}}
+ENUM!{enum DXVAHD_BLT_STATE {
+ DXVAHD_BLT_STATE_TARGET_RECT = 0,
+ DXVAHD_BLT_STATE_BACKGROUND_COLOR = 1,
+ DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE = 2,
+ DXVAHD_BLT_STATE_ALPHA_FILL = 3,
+ DXVAHD_BLT_STATE_CONSTRICTION = 4,
+ DXVAHD_BLT_STATE_PRIVATE = 1000,
+}}
+ENUM!{enum DXVAHD_ALPHA_FILL_MODE {
+ DXVAHD_ALPHA_FILL_MODE_OPAQUE = 0,
+ DXVAHD_ALPHA_FILL_MODE_BACKGROUND = 1,
+ DXVAHD_ALPHA_FILL_MODE_DESTINATION = 2,
+ DXVAHD_ALPHA_FILL_MODE_SOURCE_STREAM = 3,
+}}
+ENUM!{enum DXVAHD_STREAM_STATE {
+ DXVAHD_STREAM_STATE_D3DFORMAT = 0,
+ DXVAHD_STREAM_STATE_FRAME_FORMAT = 1,
+ DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE = 2,
+ DXVAHD_STREAM_STATE_OUTPUT_RATE = 3,
+ DXVAHD_STREAM_STATE_SOURCE_RECT = 4,
+ DXVAHD_STREAM_STATE_DESTINATION_RECT = 5,
+ DXVAHD_STREAM_STATE_ALPHA = 6,
+ DXVAHD_STREAM_STATE_PALETTE = 7,
+ DXVAHD_STREAM_STATE_LUMA_KEY = 8,
+ DXVAHD_STREAM_STATE_ASPECT_RATIO = 9,
+ DXVAHD_STREAM_STATE_FILTER_BRIGHTNESS = 100,
+ DXVAHD_STREAM_STATE_FILTER_CONTRAST = 101,
+ DXVAHD_STREAM_STATE_FILTER_HUE = 102,
+ DXVAHD_STREAM_STATE_FILTER_SATURATION = 103,
+ DXVAHD_STREAM_STATE_FILTER_NOISE_REDUCTION = 104,
+ DXVAHD_STREAM_STATE_FILTER_EDGE_ENHANCEMENT = 105,
+ DXVAHD_STREAM_STATE_FILTER_ANAMORPHIC_SCALING = 106,
+ DXVAHD_STREAM_STATE_PRIVATE = 1000,
+}}
+ENUM!{enum DXVAHD_OUTPUT_RATE {
+ DXVAHD_OUTPUT_RATE_NORMAL = 0,
+ DXVAHD_OUTPUT_RATE_HALF = 1,
+ DXVAHD_OUTPUT_RATE_CUSTOM = 2,
+}}
+STRUCT!{struct DXVAHD_RATIONAL {
+ Numerator: UINT,
+ Denominator: UINT,
+}}
+STRUCT!{struct DXVAHD_COLOR_RGBA {
+ R: FLOAT,
+ G: FLOAT,
+ B: FLOAT,
+ A: FLOAT,
+}}
+STRUCT!{struct DXVAHD_COLOR_YCbCrA {
+ Y: FLOAT,
+ Cb: FLOAT,
+ Cr: FLOAT,
+ A: FLOAT,
+}}
+UNION!{union DXVAHD_COLOR {
+ [u32; 4],
+ RGB RGB_mut: DXVAHD_COLOR_RGBA,
+ YCbCr YCbCr_mut: DXVAHD_COLOR_YCbCrA,
+}}
+STRUCT!{struct DXVAHD_CONTENT_DESC {
+ InputFrameFormat: DXVAHD_FRAME_FORMAT,
+ InputFrameRate: DXVAHD_RATIONAL,
+ InputWidth: UINT,
+ InputHeight: UINT,
+ OutputFrameRate: DXVAHD_RATIONAL,
+ OutputWidth: UINT,
+ OutputHeight: UINT,
+}}
+STRUCT!{struct DXVAHD_VPDEVCAPS {
+ DeviceType: DXVAHD_DEVICE_TYPE,
+ DeviceCaps: UINT,
+ FeatureCaps: UINT,
+ FilterCaps: UINT,
+ InputFormatCaps: UINT,
+ InputPool: D3DPOOL,
+ OutputFormatCount: UINT,
+ InputFormatCount: UINT,
+ VideoProcessorCount: UINT,
+ MaxInputStreams: UINT,
+ MaxStreamStates: UINT,
+}}
+STRUCT!{struct DXVAHD_VPCAPS {
+ VPGuid: GUID,
+ PastFrames: UINT,
+ FutureFrames: UINT,
+ ProcessorCaps: UINT,
+ ITelecineCaps: UINT,
+ CustomRateCount: UINT,
+}}
+STRUCT!{struct DXVAHD_CUSTOM_RATE_DATA {
+ CustomRate: DXVAHD_RATIONAL,
+ OutputFrames: UINT,
+ InputInterlaced: BOOL,
+ InputFramesOrFields: UINT,
+}}
+STRUCT!{struct DXVAHD_FILTER_RANGE_DATA {
+ Minimum: INT,
+ Maximum: INT,
+ Default: INT,
+ Multiplier: FLOAT,
+}}
+STRUCT!{struct DXVAHD_BLT_STATE_TARGET_RECT_DATA {
+ Enable: BOOL,
+ TargetRect: RECT,
+}}
+STRUCT!{struct DXVAHD_BLT_STATE_BACKGROUND_COLOR_DATA {
+ YCbCr: BOOL,
+ BackgroundColor: DXVAHD_COLOR,
+}}
+STRUCT!{struct DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE_DATA {
+ Value: UINT,
+}}
+BITFIELD!{DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE_DATA Value: UINT [
+ Usage set_Usage[0..1],
+ RGB_Range set_RGB_Range[1..2],
+ YCbCr_Matrix set_YCbCr_Matrix[2..3],
+ YCbCr_xvYCC set_YCbCr_xvYCC[3..4],
+ Reserved set_Reserved[4..32],
+]}
+STRUCT!{struct DXVAHD_BLT_STATE_ALPHA_FILL_DATA {
+ Mode: DXVAHD_ALPHA_FILL_MODE,
+ StreamNumber: UINT,
+}}
+STRUCT!{struct DXVAHD_BLT_STATE_CONSTRICTION_DATA {
+ Enable: BOOL,
+ Size: SIZE,
+}}
+STRUCT!{struct DXVAHD_BLT_STATE_PRIVATE_DATA {
+ Guid: GUID,
+ DataSize: UINT,
+ pData: *mut c_void,
+}}
+STRUCT!{struct DXVAHD_STREAM_STATE_D3DFORMAT_DATA {
+ Format: D3DFORMAT,
+}}
+STRUCT!{struct DXVAHD_STREAM_STATE_FRAME_FORMAT_DATA {
+ FrameFormat: DXVAHD_FRAME_FORMAT,
+}}
+STRUCT!{struct DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE_DATA {
+ Value: UINT,
+}}
+BITFIELD!{DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE_DATA Value: UINT [
+ Type set_Type[0..1],
+ RGB_Range set_RGB_Range[1..2],
+ YCbCr_Matrix set_YCbCr_Matrix[2..3],
+ YCbCr_xvYCC set_YCbCr_xvYCC[3..4],
+ Reserved set_Reserved[4..32],
+]}
+STRUCT!{struct DXVAHD_STREAM_STATE_OUTPUT_RATE_DATA {
+ RepeatFrame: BOOL,
+ OutputRate: DXVAHD_OUTPUT_RATE,
+ CustomRate: DXVAHD_RATIONAL,
+}}
+STRUCT!{struct DXVAHD_STREAM_STATE_SOURCE_RECT_DATA {
+ Enable: BOOL,
+ SourceRect: RECT,
+}}
+STRUCT!{struct DXVAHD_STREAM_STATE_DESTINATION_RECT_DATA {
+ Enable: BOOL,
+ DestinationRect: RECT,
+}}
+STRUCT!{struct DXVAHD_STREAM_STATE_ALPHA_DATA {
+ Enable: BOOL,
+ Alpha: FLOAT,
+}}
+STRUCT!{struct DXVAHD_STREAM_STATE_PALETTE_DATA {
+ Count: UINT,
+ pEntries: *mut D3DCOLOR,
+}}
+STRUCT!{struct DXVAHD_STREAM_STATE_LUMA_KEY_DATA {
+ Enable: BOOL,
+ Lower: FLOAT,
+ Upper: FLOAT,
+}}
+STRUCT!{struct DXVAHD_STREAM_STATE_ASPECT_RATIO_DATA {
+ Enable: BOOL,
+ SourceAspectRatio: DXVAHD_RATIONAL,
+ DestinationAspectRatio: DXVAHD_RATIONAL,
+}}
+STRUCT!{struct DXVAHD_STREAM_STATE_FILTER_DATA {
+ Enable: BOOL,
+ Level: INT,
+}}
+STRUCT!{struct DXVAHD_STREAM_STATE_PRIVATE_DATA {
+ Guid: GUID,
+ DataSize: UINT,
+ pData: *mut c_void,
+}}
+STRUCT!{struct DXVAHD_STREAM_DATA {
+ Enable: BOOL,
+ OutputIndex: UINT,
+ InputFrameOrField: UINT,
+ PastFrames: UINT,
+ FutureFrames: UINT,
+ ppPastSurfaces: *mut *mut IDirect3DSurface9,
+ pInputSurface: *mut IDirect3DSurface9,
+ ppFutureSurfaces: *mut *mut IDirect3DSurface9,
+}}
+STRUCT!{struct DXVAHD_STREAM_STATE_PRIVATE_IVTC_DATA {
+ Enable: BOOL,
+ ITelecineFlags: UINT,
+ Frames: UINT,
+ InputField: UINT,
+}}
+RIDL!{#[uuid(0x95f12dfd, 0xd77e, 0x49be, 0x81, 0x5f, 0x57, 0xd5, 0x79, 0x63, 0x4d, 0x6d)]
+interface IDXVAHD_Device(IDXVAHD_DeviceVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateVideoSurface(
+ Width: UINT,
+ Height: UINT,
+ Format: D3DFORMAT,
+ Pool: D3DPOOL,
+ Usage: DWORD,
+ Type: DXVAHD_SURFACE_TYPE,
+ NumSurfaces: UINT,
+ ppSurfaces: *mut *mut IDirect3DSurface9,
+ pSharedHandle: *mut HANDLE,
+ ) -> HRESULT,
+ fn GetVideoProcessorDeviceCaps(
+ pCaps: *mut DXVAHD_VPDEVCAPS,
+ ) -> HRESULT,
+ fn GetVideoProcessorOutputFormats(
+ Count: UINT,
+ pFormats: *mut D3DFORMAT,
+ ) -> HRESULT,
+ fn GetVideoProcessorInputFormats(
+ Count: UINT,
+ pFormats: *mut D3DFORMAT,
+ ) -> HRESULT,
+ fn GetVideoProcessorCaps(
+ Count: UINT,
+ pCaps: *mut DXVAHD_VPCAPS,
+ ) -> HRESULT,
+ fn GetVideoProcessorCustomRates(
+ pVPGuid: *const GUID,
+ Count: UINT,
+ pRates: *mut DXVAHD_CUSTOM_RATE_DATA,
+ ) -> HRESULT,
+ fn GetVideoProcessorFilterRange(
+ Filter: DXVAHD_FILTER,
+ pRange: *mut DXVAHD_FILTER_RANGE_DATA,
+ ) -> HRESULT,
+ fn CreateVideoProcessor(
+ pVPGuid: *const GUID,
+ ppVideoProcessor: *mut *mut IDXVAHD_VideoProcessor,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x95f4edf4, 0x6e03, 0x4cd7, 0xbe, 0x1b, 0x30, 0x75, 0xd6, 0x65, 0xaa, 0x52)]
+interface IDXVAHD_VideoProcessor(IDXVAHD_VideoProcessorVtbl): IUnknown(IUnknownVtbl) {
+ fn SetVideoProcessBltState(
+ State: DXVAHD_BLT_STATE,
+ DataSize: UINT,
+ pData: *const c_void,
+ ) -> HRESULT,
+ fn GetVideoProcessBltState(
+ State: DXVAHD_BLT_STATE,
+ DataSize: UINT,
+ pData: *mut c_void,
+ ) -> HRESULT,
+ fn SetVideoProcessStreamState(
+ StreamNumber: UINT,
+ State: DXVAHD_STREAM_STATE,
+ DataSize: UINT,
+ pData: *const c_void,
+ ) -> HRESULT,
+ fn GetVideoProcessStreamState(
+ StreamNumber: UINT,
+ State: DXVAHD_STREAM_STATE,
+ DataSize: UINT,
+ pData: *mut c_void,
+ ) -> HRESULT,
+ fn VideoProcessBltHD(
+ pOutputSurface: *mut IDirect3DSurface9,
+ OutputFrame: UINT,
+ StreamCount: UINT,
+ pStreams: *const DXVAHD_STREAM_DATA,
+ ) -> HRESULT,
+}}
+FN!{stdcall PDXVAHDSW_CreateDevice(
+ pD3DDevice: *mut IDirect3DDevice9Ex,
+ phDevice: *mut HANDLE,
+) -> HRESULT}
+FN!{stdcall PDXVAHDSW_ProposeVideoPrivateFormat(
+ hDevice: HANDLE,
+ pFormat: *mut D3DFORMAT,
+) -> HRESULT}
+FN!{stdcall PDXVAHDSW_GetVideoProcessorDeviceCaps(
+ hDevice: HANDLE,
+ pContentDesc: *const DXVAHD_CONTENT_DESC,
+ Usage: DXVAHD_DEVICE_USAGE,
+ pCaps: *mut DXVAHD_VPDEVCAPS,
+) -> HRESULT}
+FN!{stdcall PDXVAHDSW_GetVideoProcessorOutputFormats(
+ hDevice: HANDLE,
+ pContentDesc: *const DXVAHD_CONTENT_DESC,
+ Usage: DXVAHD_DEVICE_USAGE,
+ Count: UINT,
+ pFormats: *mut D3DFORMAT,
+) -> HRESULT}
+FN!{stdcall PDXVAHDSW_GetVideoProcessorInputFormats(
+ hDevice: HANDLE,
+ pContentDesc: *const DXVAHD_CONTENT_DESC,
+ Usage: DXVAHD_DEVICE_USAGE,
+ Count: UINT,
+ pFormats: *mut D3DFORMAT,
+) -> HRESULT}
+FN!{stdcall PDXVAHDSW_GetVideoProcessorCaps(
+ hDevice: HANDLE,
+ pContentDesc: *const DXVAHD_CONTENT_DESC,
+ Usage: DXVAHD_DEVICE_USAGE,
+ Count: UINT,
+ pCaps: *mut DXVAHD_VPCAPS,
+) -> HRESULT}
+FN!{stdcall PDXVAHDSW_GetVideoProcessorCustomRates(
+ hDevice: HANDLE,
+ pVPGuid: *const GUID,
+ Count: UINT,
+ pRates: *mut DXVAHD_CUSTOM_RATE_DATA,
+) -> HRESULT}
+FN!{stdcall PDXVAHDSW_GetVideoProcessorFilterRange(
+ hDevice: HANDLE,
+ Filter: DXVAHD_FILTER,
+ pRange: *mut DXVAHD_FILTER_RANGE_DATA,
+) -> HRESULT}
+FN!{stdcall PDXVAHDSW_DestroyDevice(
+ hDevice: HANDLE,
+) -> HRESULT}
+FN!{stdcall PDXVAHDSW_CreateVideoProcessor(
+ hDevice: HANDLE,
+ pVPGuid: *const GUID,
+ phVideoProcessor: *mut HANDLE,
+) -> HRESULT}
+FN!{stdcall PDXVAHDSW_SetVideoProcessBltState(
+ hVideoProcessor: HANDLE,
+ State: DXVAHD_BLT_STATE,
+ DataSize: UINT,
+ pData: *const c_void,
+) -> HRESULT}
+FN!{stdcall PDXVAHDSW_GetVideoProcessBltStatePrivate(
+ hVideoProcessor: HANDLE,
+ pData: *mut DXVAHD_BLT_STATE_PRIVATE_DATA,
+) -> HRESULT}
+FN!{stdcall PDXVAHDSW_SetVideoProcessStreamState(
+ hVideoProcessor: HANDLE,
+ StreamNumber: UINT,
+ State: DXVAHD_STREAM_STATE,
+ DataSize: UINT,
+ pData: *const c_void,
+) -> HRESULT}
+FN!{stdcall PDXVAHDSW_GetVideoProcessStreamStatePrivate(
+ hVideoProcessor: HANDLE,
+ StreamNumber: UINT,
+ pData: *mut DXVAHD_STREAM_STATE_PRIVATE_DATA,
+) -> HRESULT}
+FN!{stdcall PDXVAHDSW_VideoProcessBltHD(
+ hVideoProcessor: HANDLE,
+ pOutputSurface: *mut IDirect3DSurface9,
+ OutputFrame: UINT,
+ StreamCount: UINT,
+ pStreams: *const DXVAHD_STREAM_DATA,
+) -> HRESULT}
+FN!{stdcall PDXVAHDSW_DestroyVideoProcessor(
+ hVideoProcessor: HANDLE,
+) -> HRESULT}
+STRUCT!{struct DXVAHDSW_CALLBACKS {
+ CreateDevice: PDXVAHDSW_CreateDevice,
+ ProposeVideoPrivateFormat: PDXVAHDSW_ProposeVideoPrivateFormat,
+ GetVideoProcessorDeviceCaps: PDXVAHDSW_GetVideoProcessorDeviceCaps,
+ GetVideoProcessorOutputFormats: PDXVAHDSW_GetVideoProcessorOutputFormats,
+ GetVideoProcessorInputFormats: PDXVAHDSW_GetVideoProcessorInputFormats,
+ GetVideoProcessorCaps: PDXVAHDSW_GetVideoProcessorCaps,
+ GetVideoProcessorCustomRates: PDXVAHDSW_GetVideoProcessorCustomRates,
+ GetVideoProcessorFilterRange: PDXVAHDSW_GetVideoProcessorFilterRange,
+ DestroyDevice: PDXVAHDSW_DestroyDevice,
+ CreateVideoProcessor: PDXVAHDSW_CreateVideoProcessor,
+ SetVideoProcessBltState: PDXVAHDSW_SetVideoProcessBltState,
+ GetVideoProcessBltStatePrivate: PDXVAHDSW_GetVideoProcessBltStatePrivate,
+ SetVideoProcessStreamState: PDXVAHDSW_SetVideoProcessStreamState,
+ GetVideoProcessStreamStatePrivate: PDXVAHDSW_GetVideoProcessStreamStatePrivate,
+ VideoProcessBltHD: PDXVAHDSW_VideoProcessBltHD,
+ DestroyVideoProcessor: PDXVAHDSW_DestroyVideoProcessor,
+}}
+FN!{stdcall PDXVAHDSW_Plugin(
+ Size: UINT,
+ pCallbacks: *mut c_void,
+) -> HRESULT}
+DEFINE_GUID!{DXVAHDControlGuid,
+ 0xa0386e75, 0xf70c, 0x464c, 0xa9, 0xce, 0x33, 0xc4, 0x4e, 0x09, 0x16, 0x23}
+DEFINE_GUID!{DXVAHDETWGUID_CREATEVIDEOPROCESSOR,
+ 0x681e3d1e, 0x5674, 0x4fb3, 0xa5, 0x03, 0x2f, 0x20, 0x55, 0xe9, 0x1f, 0x60}
+DEFINE_GUID!{DXVAHDETWGUID_VIDEOPROCESSBLTSTATE,
+ 0x76c94b5a, 0x193f, 0x4692, 0x94, 0x84, 0xa4, 0xd9, 0x99, 0xda, 0x81, 0xa8}
+DEFINE_GUID!{DXVAHDETWGUID_VIDEOPROCESSSTREAMSTATE,
+ 0x262c0b02, 0x209d, 0x47ed, 0x94, 0xd8, 0x82, 0xae, 0x02, 0xb8, 0x4a, 0xa7}
+DEFINE_GUID!{DXVAHDETWGUID_VIDEOPROCESSBLTHD,
+ 0xbef3d435, 0x78c7, 0x4de3, 0x97, 0x07, 0xcd, 0x1b, 0x08, 0x3b, 0x16, 0x0a}
+DEFINE_GUID!{DXVAHDETWGUID_VIDEOPROCESSBLTHD_STREAM,
+ 0x27ae473e, 0xa5fc, 0x4be5, 0xb4, 0xe3, 0xf2, 0x49, 0x94, 0xd3, 0xc4, 0x95}
+DEFINE_GUID!{DXVAHDETWGUID_DESTROYVIDEOPROCESSOR,
+ 0xf943f0a0, 0x3f16, 0x43e0, 0x80, 0x93, 0x10, 0x5a, 0x98, 0x6a, 0xa5, 0xf1}
+STRUCT!{struct DXVAHDETW_CREATEVIDEOPROCESSOR {
+ pObject: ULONGLONG,
+ pD3D9Ex: ULONGLONG,
+ VPGuid: GUID,
+}}
+STRUCT!{struct DXVAHDETW_VIDEOPROCESSBLTSTATE {
+ pObject: ULONGLONG,
+ State: DXVAHD_BLT_STATE,
+ DataSize: UINT,
+ SetState: BOOL,
+}}
+STRUCT!{struct DXVAHDETW_VIDEOPROCESSSTREAMSTATE {
+ pObject: ULONGLONG,
+ StreamNumber: UINT,
+ State: DXVAHD_STREAM_STATE,
+ DataSize: UINT,
+ SetState: BOOL,
+}}
+STRUCT!{struct DXVAHDETW_VIDEOPROCESSBLTHD {
+ pObject: ULONGLONG,
+ pOutputSurface: ULONGLONG,
+ TargetRect: RECT,
+ OutputFormat: D3DFORMAT,
+ ColorSpace: UINT,
+ OutputFrame: UINT,
+ StreamCount: UINT,
+ Enter: BOOL,
+}}
+STRUCT!{struct DXVAHDETW_VIDEOPROCESSBLTHD_STREAM {
+ pObject: ULONGLONG,
+ pInputSurface: ULONGLONG,
+ SourceRect: RECT,
+ DestinationRect: RECT,
+ InputFormat: D3DFORMAT,
+ FrameFormat: DXVAHD_FRAME_FORMAT,
+ ColorSpace: UINT,
+ StreamNumber: UINT,
+ OutputIndex: UINT,
+ InputFrameOrField: UINT,
+ PastFrames: UINT,
+ FutureFrames: UINT,
+}}
+STRUCT!{struct DXVAHDETW_DESTROYVIDEOPROCESSOR {
+ pObject: ULONGLONG,
+}}
+extern "system" {
+ pub fn DXVAHD_CreateDevice(
+ pD3DDevice: *mut IDirect3DDevice9Ex,
+ pContentDesc: *const DXVAHD_CONTENT_DESC,
+ Usage: DXVAHD_DEVICE_USAGE,
+ pPlugin: PDXVAHDSW_Plugin,
+ ppDevice: *mut *mut IDXVAHD_Device,
+ ) -> HRESULT;
+}
+FN!{stdcall PDXVAHD_CreateDevice(
+ pD3DDevice: *mut IDirect3DDevice9Ex,
+ pContentDesc: *const DXVAHD_CONTENT_DESC,
+ Usage: DXVAHD_DEVICE_USAGE,
+ pPlugin: PDXVAHDSW_Plugin,
+ ppDevice: *mut *mut IDXVAHD_Device,
+) -> HRESULT}
diff --git a/vendor/winapi/src/um/eaptypes.rs b/vendor/winapi/src/um/eaptypes.rs
new file mode 100644
index 000000000..0a41e1a87
--- /dev/null
+++ b/vendor/winapi/src/um/eaptypes.rs
@@ -0,0 +1,403 @@
+// 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::guiddef::GUID;
+use shared::minwindef::{BOOL, BYTE, DWORD};
+use um::winnt::LPWSTR;
+pub const eapPropCipherSuiteNegotiation: DWORD = 0x00000001;
+pub const eapPropMutualAuth: DWORD = 0x00000002;
+pub const eapPropIntegrity: DWORD = 0x00000004;
+pub const eapPropReplayProtection: DWORD = 0x00000008;
+pub const eapPropConfidentiality: DWORD = 0x00000010;
+pub const eapPropKeyDerivation: DWORD = 0x00000020;
+pub const eapPropKeyStrength64: DWORD = 0x00000040;
+pub const eapPropKeyStrength128: DWORD = 0x00000080;
+pub const eapPropKeyStrength256: DWORD = 0x00000100;
+pub const eapPropKeyStrength512: DWORD = 0x00000200;
+pub const eapPropKeyStrength1024: DWORD = 0x00000400;
+pub const eapPropDictionaryAttackResistance: DWORD = 0x00000800;
+pub const eapPropFastReconnect: DWORD = 0x00001000;
+pub const eapPropCryptoBinding: DWORD = 0x00002000;
+pub const eapPropSessionIndependence: DWORD = 0x00004000;
+pub const eapPropFragmentation: DWORD = 0x00008000;
+pub const eapPropChannelBinding: DWORD = 0x00010000;
+pub const eapPropNap: DWORD = 0x00020000;
+pub const eapPropStandalone: DWORD = 0x00040000;
+pub const eapPropMppeEncryption: DWORD = 0x00080000;
+pub const eapPropTunnelMethod: DWORD = 0x00100000;
+pub const eapPropSupportsConfig: DWORD = 0x00200000;
+pub const eapPropCertifiedMethod: DWORD = 0x00400000;
+pub const eapPropHiddenMethod: DWORD = 0x00800000;
+pub const eapPropMachineAuth: DWORD = 0x01000000;
+pub const eapPropUserAuth: DWORD = 0x02000000;
+pub const eapPropIdentityPrivacy: DWORD = 0x04000000;
+pub const eapPropMethodChaining: DWORD = 0x08000000;
+pub const eapPropSharedStateEquivalence: DWORD = 0x10000000;
+pub const eapPropReserved: DWORD = 0x80000000;
+pub const EAP_VALUENAME_PROPERTIES: &'static str = "Properties";
+pub type EAP_SESSIONID = DWORD;
+STRUCT!{struct EAP_TYPE {
+ type_: BYTE,
+ dwVendorId: DWORD,
+ dwVendorType: DWORD,
+}}
+STRUCT!{struct EAP_METHOD_TYPE {
+ eapType: EAP_TYPE,
+ dwAuthorId: DWORD,
+}}
+STRUCT!{struct EAP_METHOD_INFO {
+ eaptype: EAP_METHOD_TYPE,
+ pwszAuthorName: LPWSTR,
+ pwszFriendlyName: LPWSTR,
+ eapProperties: DWORD,
+ pInnerMethodInfo: *mut EAP_METHOD_INFO,
+}}
+STRUCT!{struct EAP_METHOD_INFO_EX {
+ eaptype: EAP_METHOD_TYPE,
+ pwszAuthorName: LPWSTR,
+ pwszFriendlyName: LPWSTR,
+ eapProperties: DWORD,
+ pInnerMethodInfoArray: *mut EAP_METHOD_INFO_ARRAY_EX,
+}}
+STRUCT!{struct EAP_METHOD_INFO_ARRAY {
+ dwNumberOfMethods: DWORD,
+ pEapMethods: *mut EAP_METHOD_INFO,
+}}
+STRUCT!{struct EAP_METHOD_INFO_ARRAY_EX {
+ dwNumberOfMethods: DWORD,
+ pEapMethods: *mut EAP_METHOD_INFO_EX,
+}}
+STRUCT!{struct EAP_ERROR {
+ dwWinError: DWORD,
+ type_: EAP_METHOD_TYPE,
+ dwReasonCode: DWORD,
+ rootCauseGuid: GUID,
+ repairGuid: GUID,
+ helpLinkGuid: GUID,
+ pRootCauseString: LPWSTR,
+ pRepairString: LPWSTR,
+}}
+ENUM!{enum EAP_ATTRIBUTE_TYPE {
+ eatMinimum = 0,
+ eatUserName = 1,
+ eatUserPassword = 2,
+ eatMD5CHAPPassword = 3,
+ eatNASIPAddress = 4,
+ eatNASPort = 5,
+ eatServiceType = 6,
+ eatFramedProtocol = 7,
+ eatFramedIPAddress = 8,
+ eatFramedIPNetmask = 9,
+ eatFramedRouting = 10,
+ eatFilterId = 11,
+ eatFramedMTU = 12,
+ eatFramedCompression = 13,
+ eatLoginIPHost = 14,
+ eatLoginService = 15,
+ eatLoginTCPPort = 16,
+ eatUnassigned17 = 17,
+ eatReplyMessage = 18,
+ eatCallbackNumber = 19,
+ eatCallbackId = 20,
+ eatUnassigned21 = 21,
+ eatFramedRoute = 22,
+ eatFramedIPXNetwork = 23,
+ eatState = 24,
+ eatClass = 25,
+ eatVendorSpecific = 26,
+ eatSessionTimeout = 27,
+ eatIdleTimeout = 28,
+ eatTerminationAction = 29,
+ eatCalledStationId = 30,
+ eatCallingStationId = 31,
+ eatNASIdentifier = 32,
+ eatProxyState = 33,
+ eatLoginLATService = 34,
+ eatLoginLATNode = 35,
+ eatLoginLATGroup = 36,
+ eatFramedAppleTalkLink = 37,
+ eatFramedAppleTalkNetwork = 38,
+ eatFramedAppleTalkZone = 39,
+ eatAcctStatusType = 40,
+ eatAcctDelayTime = 41,
+ eatAcctInputOctets = 42,
+ eatAcctOutputOctets = 43,
+ eatAcctSessionId = 44,
+ eatAcctAuthentic = 45,
+ eatAcctSessionTime = 46,
+ eatAcctInputPackets = 47,
+ eatAcctOutputPackets = 48,
+ eatAcctTerminateCause = 49,
+ eatAcctMultiSessionId = 50,
+ eatAcctLinkCount = 51,
+ eatAcctEventTimeStamp = 55,
+ eatMD5CHAPChallenge = 60,
+ eatNASPortType = 61,
+ eatPortLimit = 62,
+ eatLoginLATPort = 63,
+ eatTunnelType = 64,
+ eatTunnelMediumType = 65,
+ eatTunnelClientEndpoint = 66,
+ eatTunnelServerEndpoint = 67,
+ eatARAPPassword = 70,
+ eatARAPFeatures = 71,
+ eatARAPZoneAccess = 72,
+ eatARAPSecurity = 73,
+ eatARAPSecurityData = 74,
+ eatPasswordRetry = 75,
+ eatPrompt = 76,
+ eatConnectInfo = 77,
+ eatConfigurationToken = 78,
+ eatEAPMessage = 79,
+ eatSignature = 80,
+ eatARAPChallengeResponse = 84,
+ eatAcctInterimInterval = 85,
+ eatNASIPv6Address = 95,
+ eatFramedInterfaceId = 96,
+ eatFramedIPv6Prefix = 97,
+ eatLoginIPv6Host = 98,
+ eatFramedIPv6Route = 99,
+ eatFramedIPv6Pool = 100,
+ eatARAPGuestLogon = 8096,
+ eatCertificateOID = 8097,
+ eatEAPConfiguration = 8098,
+ eatPEAPEmbeddedEAPTypeId = 8099,
+ eatPEAPFastRoamedSession = 8100,
+ eatFastRoamedSession = 8100,
+ eatEAPTLV = 8102,
+ eatCredentialsChanged = 8103,
+ eatInnerEapMethodType = 8104,
+ eatClearTextPassword = 8107,
+ eatQuarantineSoH = 8150,
+ eatCertificateThumbprint = 8250,
+ eatPeerId = 9000,
+ eatServerId = 9001,
+ eatMethodId = 9002,
+ eatEMSK = 9003,
+ eatSessionId = 9004,
+ eatReserved = 0xFFFFFFFF,
+}}
+pub type EapAttributeType = EAP_ATTRIBUTE_TYPE;
+STRUCT!{struct EAP_ATTRIBUTE {
+ eaType: EAP_ATTRIBUTE_TYPE,
+ dwLength: DWORD,
+ pValue: *mut BYTE,
+}}
+pub type EapAttribute = EAP_ATTRIBUTE;
+STRUCT!{struct EAP_ATTRIBUTES {
+ dwNumberOfAttributes: DWORD,
+ pAttribs: *mut EAP_ATTRIBUTE,
+}}
+pub type EapAttributes = EAP_ATTRIBUTES;
+pub const EAP_FLAG_Reserved1: DWORD = 0x00000001;
+pub const EAP_FLAG_NON_INTERACTIVE: DWORD = 0x00000002;
+pub const EAP_FLAG_LOGON: DWORD = 0x00000004;
+pub const EAP_FLAG_PREVIEW: DWORD = 0x00000008;
+pub const EAP_FLAG_Reserved2: DWORD = 0x00000010;
+pub const EAP_FLAG_MACHINE_AUTH: DWORD = 0x00000020;
+pub const EAP_FLAG_GUEST_ACCESS: DWORD = 0x00000040;
+pub const EAP_FLAG_Reserved3: DWORD = 0x00000080;
+pub const EAP_FLAG_Reserved4: DWORD = 0x00000100;
+pub const EAP_FLAG_RESUME_FROM_HIBERNATE: DWORD = 0x00000200;
+pub const EAP_FLAG_Reserved5: DWORD = 0x00000400;
+pub const EAP_FLAG_Reserved6: DWORD = 0x00000800;
+pub const EAP_FLAG_FULL_AUTH: DWORD = 0x00001000;
+pub const EAP_FLAG_PREFER_ALT_CREDENTIALS: DWORD = 0x00002000;
+pub const EAP_FLAG_Reserved7: DWORD = 0x00004000;
+pub const EAP_PEER_FLAG_HEALTH_STATE_CHANGE: DWORD = 0x00008000;
+pub const EAP_FLAG_SUPRESS_UI: DWORD = 0x00010000;
+pub const EAP_FLAG_PRE_LOGON: DWORD = 0x00020000;
+pub const EAP_FLAG_USER_AUTH: DWORD = 0x00040000;
+pub const EAP_FLAG_CONFG_READONLY: DWORD = 0x00080000;
+pub const EAP_FLAG_Reserved8: DWORD = 0x00100000;
+pub const EAP_FLAG_Reserved9: DWORD = 0x00400000;
+pub const EAP_FLAG_VPN: DWORD = 0x00800000;
+pub const EAP_CONFIG_INPUT_FIELD_PROPS_DEFAULT: DWORD = 0x00000000;
+pub const EAP_CONFIG_INPUT_FIELD_PROPS_NON_DISPLAYABLE: DWORD = 0x00000001;
+pub const EAP_CONFIG_INPUT_FIELD_PROPS_NON_PERSIST: DWORD = 0x00000002;
+pub const EAP_UI_INPUT_FIELD_PROPS_DEFAULT: DWORD = EAP_CONFIG_INPUT_FIELD_PROPS_DEFAULT;
+pub const EAP_UI_INPUT_FIELD_PROPS_NON_DISPLAYABLE: DWORD =
+ EAP_CONFIG_INPUT_FIELD_PROPS_NON_DISPLAYABLE;
+pub const EAP_UI_INPUT_FIELD_PROPS_NON_PERSIST: DWORD = 0x00000002;
+pub const EAP_UI_INPUT_FIELD_PROPS_READ_ONLY: DWORD = 0x00000004;
+ENUM!{enum EAP_CONFIG_INPUT_FIELD_TYPE {
+ EapConfigInputUsername = 0,
+ EapConfigInputPassword = 1,
+ EapConfigInputNetworkUsername = 2,
+ EapConfigInputNetworkPassword = 3,
+ EapConfigInputPin = 4,
+ EapConfigInputPSK = 5,
+ EapConfigInputEdit = 6,
+ EapConfigSmartCardUsername = 7,
+ EapConfigSmartCardError = 8,
+}}
+pub type PEAP_CONFIG_INPUT_FIELD_TYPE = *mut EAP_CONFIG_INPUT_FIELD_TYPE;
+pub const EAP_CREDENTIAL_VERSION: i32 = 1;
+pub const EAP_INTERACTIVE_UI_DATA_VERSION: i32 = 1;
+pub const EAPHOST_PEER_API_VERSION: i32 = 1;
+pub const EAPHOST_METHOD_API_VERSION: i32 = 1;
+pub const MAX_EAP_CONFIG_INPUT_FIELD_LENGTH: i32 = 256;
+pub const MAX_EAP_CONFIG_INPUT_FIELD_VALUE_LENGTH: i32 = 1024;
+STRUCT!{struct EAP_CONFIG_INPUT_FIELD_DATA {
+ dwSize: DWORD,
+ Type: EAP_CONFIG_INPUT_FIELD_TYPE,
+ dwFlagProps: DWORD,
+ pwszLabel: LPWSTR,
+ pwszData: LPWSTR,
+ dwMinDataLength: DWORD,
+ dwMaxDataLength: DWORD,
+}}
+pub type PEAP_CONFIG_INPUT_FIELD_DATA = *mut EAP_CONFIG_INPUT_FIELD_DATA;
+STRUCT!{struct EAP_CONFIG_INPUT_FIELD_ARRAY {
+ dwVersion: DWORD,
+ dwNumberOfFields: DWORD,
+ pFields: *mut EAP_CONFIG_INPUT_FIELD_DATA,
+}}
+pub type PEAP_CONFIG_INPUT_FIELD_ARRAY = *mut EAP_CONFIG_INPUT_FIELD_ARRAY;
+ENUM!{enum EAP_INTERACTIVE_UI_DATA_TYPE {
+ EapCredReq = 0,
+ EapCredResp = 1,
+ EapCredExpiryReq = 2,
+ EapCredExpiryResp = 3,
+ EapCredLogonReq = 4,
+ EapCredLogonResp = 5,
+}}
+pub type EAP_CRED_REQ = EAP_CONFIG_INPUT_FIELD_ARRAY;
+pub type EAP_CRED_RESP = EAP_CONFIG_INPUT_FIELD_ARRAY;
+pub type EAP_CRED_LOGON_REQ = EAP_CONFIG_INPUT_FIELD_ARRAY;
+pub type EAP_CRED_LOGON_RESP = EAP_CONFIG_INPUT_FIELD_ARRAY;
+STRUCT!{struct EAP_CRED_EXPIRY_REQ {
+ curCreds: EAP_CONFIG_INPUT_FIELD_ARRAY,
+ newCreds: EAP_CONFIG_INPUT_FIELD_ARRAY,
+}}
+pub type EAP_CRED_EXPIRY_RESP = EAP_CRED_EXPIRY_REQ;
+UNION!{union EAP_UI_DATA_FORMAT {
+ [usize; 1],
+ credData credData_mut: *mut EAP_CRED_REQ,
+ credExpiryData credExpiryData_mut: *mut EAP_CRED_EXPIRY_REQ,
+ credLogonData credLogonData_mut: *mut EAP_CRED_LOGON_REQ,
+}}
+STRUCT!{struct EAP_INTERACTIVE_UI_DATA {
+ dwVersion: DWORD,
+ dwSize: DWORD,
+ dwDataType: EAP_INTERACTIVE_UI_DATA_TYPE,
+ cbUiData: DWORD,
+ pbUiData: EAP_UI_DATA_FORMAT,
+}}
+ENUM!{enum EAP_METHOD_PROPERTY_TYPE {
+ emptPropCipherSuiteNegotiation = 0,
+ emptPropMutualAuth = 1,
+ emptPropIntegrity = 2,
+ emptPropReplayProtection = 3,
+ emptPropConfidentiality = 4,
+ emptPropKeyDerivation = 5,
+ emptPropKeyStrength64 = 6,
+ emptPropKeyStrength128 = 7,
+ emptPropKeyStrength256 = 8,
+ emptPropKeyStrength512 = 9,
+ emptPropKeyStrength1024 = 10,
+ emptPropDictionaryAttackResistance = 11,
+ emptPropFastReconnect = 12,
+ emptPropCryptoBinding = 13,
+ emptPropSessionIndependence = 14,
+ emptPropFragmentation = 15,
+ emptPropChannelBinding = 16,
+ emptPropNap = 17,
+ emptPropStandalone = 18,
+ emptPropMppeEncryption = 19,
+ emptPropTunnelMethod = 20,
+ emptPropSupportsConfig = 21,
+ emptPropCertifiedMethod = 22,
+ emptPropHiddenMethod = 23,
+ emptPropMachineAuth = 24,
+ emptPropUserAuth = 25,
+ emptPropIdentityPrivacy = 26,
+ emptPropMethodChaining = 27,
+ emptPropSharedStateEquivalence = 28,
+ emptLegacyMethodPropertyFlag = 31,
+ emptPropVendorSpecific = 255,
+}}
+ENUM!{enum EAP_METHOD_PROPERTY_VALUE_TYPE {
+ empvtBool = 0,
+ empvtDword = 1,
+ empvtString = 2,
+}}
+STRUCT!{struct EAP_METHOD_PROPERTY_VALUE_BOOL {
+ length: DWORD,
+ value: BOOL,
+}}
+STRUCT!{struct EAP_METHOD_PROPERTY_VALUE_DWORD {
+ length: DWORD,
+ value: DWORD,
+}}
+STRUCT!{struct EAP_METHOD_PROPERTY_VALUE_STRING {
+ length: DWORD,
+ value: *mut BYTE,
+}}
+UNION!{union EAP_METHOD_PROPERTY_VALUE {
+ [usize; 2],
+ empvBool empvBool_mut: EAP_METHOD_PROPERTY_VALUE_BOOL,
+ empvDword empvDword_mut: EAP_METHOD_PROPERTY_VALUE_DWORD,
+ empvString empvString_mut: EAP_METHOD_PROPERTY_VALUE_STRING,
+}}
+STRUCT!{struct EAP_METHOD_PROPERTY {
+ eapMethodPropertyType: EAP_METHOD_PROPERTY_TYPE,
+ eapMethodPropertyValueType: EAP_METHOD_PROPERTY_VALUE_TYPE,
+ eapMethodPropertyValue: EAP_METHOD_PROPERTY_VALUE,
+}}
+STRUCT!{struct EAP_METHOD_PROPERTY_ARRAY {
+ dwNumberOfProperties: DWORD,
+ pMethodProperty: *mut EAP_METHOD_PROPERTY,
+}}
+STRUCT!{struct EAPHOST_IDENTITY_UI_PARAMS {
+ eapMethodType: EAP_METHOD_TYPE,
+ dwFlags: DWORD,
+ dwSizeofConnectionData: DWORD,
+ pConnectionData: *mut BYTE,
+ dwSizeofUserData: DWORD,
+ pUserData: *mut BYTE,
+ dwSizeofUserDataOut: DWORD,
+ pUserDataOut: *mut BYTE,
+ pwszIdentity: LPWSTR,
+ dwError: DWORD,
+ pEapError: *mut EAP_ERROR,
+}}
+STRUCT!{struct EAPHOST_INTERACTIVE_UI_PARAMS {
+ dwSizeofContextData: DWORD,
+ pContextData: *mut BYTE,
+ dwSizeofInteractiveUIData: DWORD,
+ pInteractiveUIData: *mut BYTE,
+ dwError: DWORD,
+ pEapError: *mut EAP_ERROR,
+}}
+ENUM!{enum EapCredentialType {
+ EAP_EMPTY_CREDENTIAL = 0,
+ EAP_USERNAME_PASSWORD_CREDENTIAL = 1,
+ EAP_WINLOGON_CREDENTIAL = 2,
+ EAP_CERTIFICATE_CREDENTIAL = 3,
+ EAP_SIM_CREDENTIAL = 4,
+}}
+STRUCT!{struct EapUsernamePasswordCredential {
+ username: LPWSTR,
+ password: LPWSTR,
+}}
+pub const CERTIFICATE_HASH_LENGTH: usize = 20;
+STRUCT!{struct EapCertificateCredential {
+ certHash: [BYTE; CERTIFICATE_HASH_LENGTH],
+ password: LPWSTR,
+}}
+STRUCT!{struct EapSimCredential {
+ iccID: LPWSTR,
+}}
+UNION!{union EapCredentialTypeData {
+ [u32; 6] [u64; 4],
+ username_password username_password_mut: EapUsernamePasswordCredential,
+ certificate certificate_mut: EapCertificateCredential,
+ sim sim_mut: EapSimCredential,
+}}
+STRUCT!{struct EapCredential {
+ credType: EapCredentialType,
+ credData: EapCredentialTypeData,
+}}
diff --git a/vendor/winapi/src/um/enclaveapi.rs b/vendor/winapi/src/um/enclaveapi.rs
new file mode 100644
index 000000000..b2da8e145
--- /dev/null
+++ b/vendor/winapi/src/um/enclaveapi.rs
@@ -0,0 +1,64 @@
+// 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::{PSIZE_T, SIZE_T};
+use shared::minwindef::{BOOL, DWORD, LPCVOID, LPDWORD, LPVOID};
+use shared::ntdef::{HANDLE};
+use um::minwinbase::LPENCLAVE_ROUTINE;
+use um::winnt::{LPCSTR, LPCWSTR};
+extern "system" {
+ pub fn IsEnclaveTypeSupported(
+ flEnclaveType: DWORD,
+ ) -> BOOL;
+ pub fn CreateEnclave(
+ hProcess: HANDLE,
+ lpAddress: LPVOID,
+ dwSize: SIZE_T,
+ dwInitialCommitment: SIZE_T,
+ flEnclaveType: DWORD,
+ lpEnclaveInformation: LPCVOID,
+ dwInfoLength: DWORD,
+ lpEnclaveError: LPDWORD,
+ ) -> LPVOID;
+ pub fn LoadEnclaveData(
+ hProcess: HANDLE,
+ lpAddress: LPVOID,
+ lpBuffer: LPCVOID,
+ nSize: SIZE_T,
+ flProtect: DWORD,
+ lpPageInformation: LPCVOID,
+ dwInfoLength: DWORD,
+ lpNumberOfBytesWritten: PSIZE_T,
+ lpEnclaveError: LPDWORD,
+ ) -> BOOL;
+ pub fn InitializeEnclave(
+ hProcess: HANDLE,
+ lpAddress: LPVOID,
+ lpEnclaveInformation: LPCVOID,
+ dwInfoLength: DWORD,
+ lpEnclaveError: LPDWORD,
+ ) -> BOOL;
+ pub fn LoadEnclaveImageA(
+ lpEnclaveAddress: LPVOID,
+ lpImageName: LPCSTR,
+ ) -> BOOL;
+ pub fn LoadEnclaveImageW(
+ lpEnclaveAddress: LPVOID,
+ lpImageName: LPCWSTR,
+ ) -> BOOL;
+ pub fn CallEnclave(
+ lpRoutine: LPENCLAVE_ROUTINE,
+ lpParameter: LPVOID,
+ fWaitForThread: BOOL,
+ lpReturnValue: *mut LPVOID,
+ ) -> BOOL;
+ pub fn TerminateEnclave(
+ lpAddress: LPVOID,
+ fWait: BOOL,
+ ) -> BOOL;
+ pub fn DeleteEnclave(
+ lpAddress: LPVOID,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/endpointvolume.rs b/vendor/winapi/src/um/endpointvolume.rs
new file mode 100644
index 000000000..384e47b6c
--- /dev/null
+++ b/vendor/winapi/src/um/endpointvolume.rs
@@ -0,0 +1,123 @@
+// 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 ctypes::c_float;
+use shared::basetsd::UINT32;
+use shared::guiddef::{GUID, LPCGUID};
+use shared::minwindef::{BOOL, DWORD, UINT};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::HRESULT;
+STRUCT!{struct AUDIO_VOLUME_NOTIFICATION_DATA {
+ guidEventContext: GUID,
+ bMuted: BOOL,
+ fMasterVolume: c_float,
+ nChannels: UINT,
+ afChannelVolumes: [c_float; 1],
+}}
+pub type PAUDIO_VOLUME_NOTIFICATION_DATA = *mut AUDIO_VOLUME_NOTIFICATION_DATA;
+pub const ENDPOINT_HARDWARE_SUPPORT_VOLUME: DWORD = 0x00000001;
+pub const ENDPOINT_HARDWARE_SUPPORT_MUTE: DWORD = 0x00000002;
+pub const ENDPOINT_HARDWARE_SUPPORT_METER: DWORD = 0x00000004;
+RIDL!{#[uuid(0x657804fa, 0xd6ad, 0x4496, 0x8a, 0x60, 0x35, 0x27, 0x52, 0xaf, 0x4f, 0x89)]
+interface IAudioEndpointVolumeCallback(IAudioEndpointVolumeCallbackVtbl): IUnknown(IUnknownVtbl) {
+ fn OnNotify(
+ pNotify: PAUDIO_VOLUME_NOTIFICATION_DATA,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x5cdf2c82, 0x841e, 0x4546, 0x97, 0x22, 0x0c, 0xf7, 0x40, 0x78, 0x22, 0x9a)]
+interface IAudioEndpointVolume(IAudioEndpointVolumeVtbl): IUnknown(IUnknownVtbl) {
+ fn RegisterControlChangeNotify(
+ pNotify: *mut IAudioEndpointVolumeCallback,
+ ) -> HRESULT,
+ fn UnregisterControlChangeNotify(
+ pNotify: *mut IAudioEndpointVolumeCallback,
+ ) -> HRESULT,
+ fn GetChannelCount(
+ pnChannelCount: *mut UINT,
+ ) -> HRESULT,
+ fn SetMasterVolumeLevel(
+ fLevelDB: c_float,
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+ fn SetMasterVolumeLevelScalar(
+ fLevel: c_float,
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+ fn GetMasterVolumeLevel(
+ pfLevelDB: *mut c_float,
+ ) -> HRESULT,
+ fn GetMasterVolumeLevelScalar(
+ pfLevel: *mut c_float,
+ ) -> HRESULT,
+ fn SetChannelVolumeLevel(
+ nChannel: UINT,
+ fLevelDB: c_float,
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+ fn SetChannelVolumeLevelScalar(
+ nChannel: UINT,
+ fLevel: c_float,
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+ fn GetChannelVolumeLevel(
+ nChannel: UINT,
+ pfLevelDB: *mut c_float,
+ ) -> HRESULT,
+ fn GetChannelVolumeLevelScalar(
+ nChannel: UINT,
+ pfLevel: *mut c_float,
+ ) -> HRESULT,
+ fn SetMute(
+ bMute: BOOL,
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+ fn GetMute(
+ pbMute: *mut BOOL,
+ ) -> HRESULT,
+ fn GetVolumeStepInfo(
+ pnStep: *mut UINT,
+ pnStepCount: *mut UINT,
+ ) -> HRESULT,
+ fn VolumeStepUp(
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+ fn VolumeStepDown(
+ pguidEventContext: LPCGUID,
+ ) -> HRESULT,
+ fn QueryHardwareSupport(
+ pdwHardwareSupportMask: *mut DWORD,
+ ) -> HRESULT,
+ fn GetVolumeRange(
+ pflVolumeMindB: *mut c_float,
+ pflVolumeMaxdB: *mut c_float,
+ pflVolumeIncrementdB: *mut c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x66e11784, 0xf695, 0x4f28, 0xa5, 0x05, 0xa7, 0x08, 0x00, 0x81, 0xa7, 0x8f)]
+interface IAudioEndpointVolumeEx(IAudioEndpointVolumeExVtbl):
+ IAudioEndpointVolume(IAudioEndpointVolumeVtbl) {
+ fn GetVolumeRangeChannel(
+ iChannel: UINT,
+ pflVolumeMindB: *mut c_float,
+ pflVolumeMaxdB: *mut c_float,
+ pflVolumeIncrementdB: *mut c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xc02216f6, 0x8c67, 0x4b5b, 0x9d, 0x00, 0xd0, 0x08, 0xe7, 0x3e, 0x00, 0x64)]
+interface IAudioMeterInformation(IAudioMeterInformationVtbl): IUnknown(IUnknownVtbl) {
+ fn GetPeakValue(
+ pfPeak: *mut c_float,
+ ) -> HRESULT,
+ fn GetMeteringChannelCount(
+ pnChannelCount: *mut UINT,
+ ) -> HRESULT,
+ fn GetChannelsPeakValues(
+ u32ChannelCount: UINT32,
+ afPeakValues: *mut c_float,
+ ) -> HRESULT,
+ fn QueryHardwareSupport(
+ pdwHardwareSupportMask: *mut DWORD,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/errhandlingapi.rs b/vendor/winapi/src/um/errhandlingapi.rs
new file mode 100644
index 000000000..66d7618de
--- /dev/null
+++ b/vendor/winapi/src/um/errhandlingapi.rs
@@ -0,0 +1,75 @@
+// 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.
+//! ApiSet Contract for api-ms-win-core-errorhandling-l1
+use shared::basetsd::ULONG_PTR;
+use shared::minwindef::{BOOL, DWORD, LPDWORD, UINT, ULONG};
+use um::winnt::{
+ EXCEPTION_POINTERS, LONG, LPCSTR, LPCWSTR, PCONTEXT, PEXCEPTION_RECORD,
+ PVECTORED_EXCEPTION_HANDLER, PVOID,
+};
+FN!{stdcall PTOP_LEVEL_EXCEPTION_FILTER(
+ ExceptionInfo: *mut EXCEPTION_POINTERS,
+) -> LONG}
+pub type LPTOP_LEVEL_EXCEPTION_FILTER = PTOP_LEVEL_EXCEPTION_FILTER;
+extern "system" {
+ pub fn RaiseException(
+ dwExceptionCode: DWORD,
+ dwExceptionFlags: DWORD,
+ nNumberOfArguments: DWORD,
+ lpArguments: *const ULONG_PTR,
+ );
+ pub fn UnhandledExceptionFilter(
+ ExceptionInfo: *mut EXCEPTION_POINTERS,
+ ) -> LONG;
+ pub fn SetUnhandledExceptionFilter(
+ lpTopLevelExceptionFilter: LPTOP_LEVEL_EXCEPTION_FILTER,
+ ) -> LPTOP_LEVEL_EXCEPTION_FILTER;
+ pub fn GetLastError() -> DWORD;
+ pub fn SetLastError(
+ dwErrCode: DWORD,
+ );
+ pub fn GetErrorMode() -> UINT;
+ pub fn SetErrorMode(
+ uMode: UINT,
+ ) -> UINT;
+ pub fn AddVectoredExceptionHandler(
+ First: ULONG,
+ Handler: PVECTORED_EXCEPTION_HANDLER,
+ ) -> PVOID;
+ pub fn RemoveVectoredExceptionHandler(
+ Handle: PVOID,
+ ) -> ULONG;
+ pub fn AddVectoredContinueHandler(
+ First: ULONG,
+ Handler: PVECTORED_EXCEPTION_HANDLER,
+ ) -> PVOID;
+ pub fn RemoveVectoredContinueHandler(
+ Handle: PVOID,
+ ) -> ULONG;
+}
+// RestoreLastError
+extern "system" {
+ pub fn RaiseFailFastException(
+ pExceptionRecord: PEXCEPTION_RECORD,
+ pContextRecord: PCONTEXT,
+ dwFlags: DWORD,
+ );
+ pub fn FatalAppExitA(
+ uAction: UINT,
+ lpMessageText: LPCSTR,
+ );
+ pub fn FatalAppExitW(
+ uAction: UINT,
+ lpMessageText: LPCWSTR,
+ );
+ pub fn GetThreadErrorMode() -> DWORD;
+ pub fn SetThreadErrorMode(
+ dwNewMode: DWORD,
+ lpOldMode: LPDWORD,
+ ) -> BOOL;
+}
+// What library provides this function?
+// TerminateProcessOnMemoryExhaustion
diff --git a/vendor/winapi/src/um/evntcons.rs b/vendor/winapi/src/um/evntcons.rs
new file mode 100644
index 000000000..48d4d700d
--- /dev/null
+++ b/vendor/winapi/src/um/evntcons.rs
@@ -0,0 +1,229 @@
+// 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::ULONG64;
+use shared::evntprov::EVENT_DESCRIPTOR;
+use shared::evntrace::ETW_BUFFER_CONTEXT;
+use shared::guiddef::{GUID, LPGUID};
+use shared::minwindef::{PUCHAR, PULONG, PUSHORT, UCHAR, ULONG, USHORT};
+use um::winnt::{
+ ANYSIZE_ARRAY, BOOLEAN, LARGE_INTEGER, PCSTR, PSECURITY_DESCRIPTOR, PSID, PVOID, ULONGLONG,
+};
+pub const EVENT_HEADER_EXT_TYPE_RELATED_ACTIVITYID: USHORT = 0x0001;
+pub const EVENT_HEADER_EXT_TYPE_SID: USHORT = 0x0002;
+pub const EVENT_HEADER_EXT_TYPE_TS_ID: USHORT = 0x0003;
+pub const EVENT_HEADER_EXT_TYPE_INSTANCE_INFO: USHORT = 0x0004;
+pub const EVENT_HEADER_EXT_TYPE_STACK_TRACE32: USHORT = 0x0005;
+pub const EVENT_HEADER_EXT_TYPE_STACK_TRACE64: USHORT = 0x0006;
+pub const EVENT_HEADER_EXT_TYPE_PEBS_INDEX: USHORT = 0x0007;
+pub const EVENT_HEADER_EXT_TYPE_PMC_COUNTERS: USHORT = 0x0008;
+pub const EVENT_HEADER_EXT_TYPE_PSM_KEY: USHORT = 0x0009;
+pub const EVENT_HEADER_EXT_TYPE_EVENT_KEY: USHORT = 0x000A;
+pub const EVENT_HEADER_EXT_TYPE_EVENT_SCHEMA_TL: USHORT = 0x000B;
+pub const EVENT_HEADER_EXT_TYPE_PROV_TRAITS: USHORT = 0x000C;
+pub const EVENT_HEADER_EXT_TYPE_PROCESS_START_KEY: USHORT = 0x000D;
+pub const EVENT_HEADER_EXT_TYPE_CONTROL_GUID: USHORT = 0x000E;
+pub const EVENT_HEADER_EXT_TYPE_MAX: USHORT = 0x000F;
+STRUCT!{struct EVENT_HEADER_EXTENDED_DATA_ITEM_s {
+ bitfield: USHORT,
+}}
+BITFIELD!{EVENT_HEADER_EXTENDED_DATA_ITEM_s bitfield: USHORT [
+ Linkage set_Linkage[0..1],
+ Reserved2 set_Reserved2[1..16],
+]}
+STRUCT!{struct EVENT_HEADER_EXTENDED_DATA_ITEM {
+ Reserved1: USHORT,
+ ExtType: USHORT,
+ s: EVENT_HEADER_EXTENDED_DATA_ITEM_s,
+ DataSize: USHORT,
+ DataPtr: ULONGLONG,
+}}
+pub type PEVENT_HEADER_EXTENDED_DATA_ITEM = *mut EVENT_HEADER_EXTENDED_DATA_ITEM;
+STRUCT!{struct EVENT_EXTENDED_ITEM_INSTANCE {
+ InstanceId: ULONG,
+ ParentInstanceId: ULONG,
+ ParentGuid: GUID,
+}}
+pub type PEVENT_EXTENDED_ITEM_INSTANCE = *mut EVENT_EXTENDED_ITEM_INSTANCE;
+STRUCT!{struct EVENT_EXTENDED_ITEM_RELATED_ACTIVITYID {
+ RelatedActivityId: GUID,
+}}
+pub type PEVENT_EXTENDED_ITEM_RELATED_ACTIVITYID = *mut EVENT_EXTENDED_ITEM_RELATED_ACTIVITYID;
+STRUCT!{struct EVENT_EXTENDED_ITEM_TS_ID {
+ SessionId: ULONG,
+}}
+pub type PEVENT_EXTENDED_ITEM_TS_ID = *mut EVENT_EXTENDED_ITEM_TS_ID;
+STRUCT!{struct EVENT_EXTENDED_ITEM_STACK_TRACE32 {
+ MatchId: ULONG64,
+ Address: [ULONG; ANYSIZE_ARRAY],
+}}
+pub type PEVENT_EXTENDED_ITEM_STACK_TRACE32 = *mut EVENT_EXTENDED_ITEM_STACK_TRACE32;
+STRUCT!{struct EVENT_EXTENDED_ITEM_STACK_TRACE64 {
+ MatchId: ULONG64,
+ Address: [ULONG64; ANYSIZE_ARRAY],
+}}
+pub type PEVENT_EXTENDED_ITEM_STACK_TRACE64 = *mut EVENT_EXTENDED_ITEM_STACK_TRACE64;
+STRUCT!{struct EVENT_EXTENDED_ITEM_PEBS_INDEX {
+ PebsIndex: ULONG64,
+}}
+pub type PEVENT_EXTENDED_ITEM_PEBS_INDEX = *mut EVENT_EXTENDED_ITEM_PEBS_INDEX;
+STRUCT!{struct EVENT_EXTENDED_ITEM_PMC_COUNTERS {
+ Counter: [ULONG64; ANYSIZE_ARRAY],
+}}
+pub type PEVENT_EXTENDED_ITEM_PMC_COUNTERS = *mut EVENT_EXTENDED_ITEM_PMC_COUNTERS;
+STRUCT!{struct EVENT_EXTENDED_ITEM_PROCESS_START_KEY {
+ ProcessStartKey: ULONG64,
+}}
+pub type PEVENT_EXTENDED_ITEM_PROCESS_START_KEY = *mut EVENT_EXTENDED_ITEM_PROCESS_START_KEY;
+STRUCT!{struct EVENT_EXTENDED_ITEM_EVENT_KEY {
+ Key: ULONG64,
+}}
+pub type PEVENT_EXTENDED_ITEM_EVENT_KEY = *mut EVENT_EXTENDED_ITEM_EVENT_KEY;
+pub const EVENT_HEADER_PROPERTY_XML: USHORT = 0x0001;
+pub const EVENT_HEADER_PROPERTY_FORWARDED_XML: USHORT = 0x0002;
+pub const EVENT_HEADER_PROPERTY_LEGACY_EVENTLOG: USHORT = 0x0004;
+pub const EVENT_HEADER_PROPERTY_RELOGGABLE: USHORT = 0x0008;
+pub const EVENT_HEADER_FLAG_EXTENDED_INFO: USHORT = 0x0001;
+pub const EVENT_HEADER_FLAG_PRIVATE_SESSION: USHORT = 0x0002;
+pub const EVENT_HEADER_FLAG_STRING_ONLY: USHORT = 0x0004;
+pub const EVENT_HEADER_FLAG_TRACE_MESSAGE: USHORT = 0x0008;
+pub const EVENT_HEADER_FLAG_NO_CPUTIME: USHORT = 0x0010;
+pub const EVENT_HEADER_FLAG_32_BIT_HEADER: USHORT = 0x0020;
+pub const EVENT_HEADER_FLAG_64_BIT_HEADER: USHORT = 0x0040;
+pub const EVENT_HEADER_FLAG_CLASSIC_HEADER: USHORT = 0x0100;
+pub const EVENT_HEADER_FLAG_PROCESSOR_INDEX: USHORT = 0x0200;
+STRUCT!{struct EVENT_HEADER_u_s {
+ KernelTime: ULONG,
+ UserTime: ULONG,
+}}
+UNION!{union EVENT_HEADER_u {
+ [u64; 1],
+ s s_mut: EVENT_HEADER_u_s,
+ ProcessorTime ProcessorTime_mut: ULONG64,
+}}
+STRUCT!{struct EVENT_HEADER {
+ Size: USHORT,
+ HeaderType: USHORT,
+ Flags: USHORT,
+ EventProperty: USHORT,
+ ThreadId: ULONG,
+ ProcessId: ULONG,
+ TimeStamp: LARGE_INTEGER,
+ ProviderId: GUID,
+ EventDescriptor: EVENT_DESCRIPTOR,
+ u: EVENT_HEADER_u,
+ ActivityId: GUID,
+}}
+pub type PEVENT_HEADER = *mut EVENT_HEADER;
+STRUCT!{struct EVENT_RECORD {
+ EventHeader: EVENT_HEADER,
+ BufferContext: ETW_BUFFER_CONTEXT,
+ ExtendedDataCount: USHORT,
+ UserDataLength: USHORT,
+ ExtendedData: PEVENT_HEADER_EXTENDED_DATA_ITEM,
+ UserData: PVOID,
+ UserContext: PVOID,
+}}
+pub type PEVENT_RECORD = *mut EVENT_RECORD;
+pub type PCEVENT_RECORD = *const EVENT_RECORD;
+pub const EVENT_ENABLE_PROPERTY_SID: USHORT = 0x00000001;
+pub const EVENT_ENABLE_PROPERTY_TS_ID: USHORT = 0x00000002;
+pub const EVENT_ENABLE_PROPERTY_STACK_TRACE: USHORT = 0x00000004;
+pub const EVENT_ENABLE_PROPERTY_PSM_KEY: USHORT = 0x00000008;
+pub const EVENT_ENABLE_PROPERTY_IGNORE_KEYWORD_0: USHORT = 0x00000010;
+pub const EVENT_ENABLE_PROPERTY_PROVIDER_GROUP: USHORT = 0x00000020;
+pub const EVENT_ENABLE_PROPERTY_ENABLE_KEYWORD_0: USHORT = 0x00000040;
+pub const EVENT_ENABLE_PROPERTY_PROCESS_START_KEY: USHORT = 0x00000080;
+pub const EVENT_ENABLE_PROPERTY_EVENT_KEY: USHORT = 0x00000100;
+pub const EVENT_ENABLE_PROPERTY_EXCLUDE_INPRIVATE: USHORT = 0x00000200;
+pub const PROCESS_TRACE_MODE_REAL_TIME: ULONG = 0x00000100;
+pub const PROCESS_TRACE_MODE_RAW_TIMESTAMP: ULONG = 0x00001000;
+pub const PROCESS_TRACE_MODE_EVENT_RECORD: ULONG = 0x10000000;
+#[inline]
+pub unsafe fn GetEventProcessorIndex(EventRecord: PCEVENT_RECORD) -> ULONG {
+ if (*EventRecord).EventHeader.Flags & EVENT_HEADER_FLAG_PROCESSOR_INDEX != 0 {
+ *(*EventRecord).BufferContext.u.ProcessorIndex() as ULONG
+ } else {
+ (*EventRecord).BufferContext.u.s().ProcessorNumber as ULONG
+ }
+}
+ENUM!{enum ETW_PROVIDER_TRAIT_TYPE {
+ EtwProviderTraitTypeGroup = 1,
+ EtwProviderTraitDecodeGuid = 2,
+ EtwProviderTraitTypeMax,
+}}
+#[inline]
+unsafe fn strnlen(s: PCSTR, max_len: isize) -> isize {
+ let mut len = 0;
+ while *s.offset(len) != 0 && len < max_len {
+ len += 1
+ }
+ len
+}
+// Taken from Rust 1.17.0 sources
+#[inline]
+unsafe fn read_unaligned<T>(src: *const T) -> T {
+ use core::{mem, ptr};
+ let mut tmp: T = mem::uninitialized();
+ ptr::copy_nonoverlapping(
+ src as *const u8,
+ &mut tmp as *mut T as *mut u8,
+ mem::size_of::<T>(),
+ );
+ tmp
+}
+#[inline]
+pub unsafe fn EtwGetTraitFromProviderTraits(
+ ProviderTraits: PVOID, TraitType: UCHAR, Trait: *mut PVOID, Size: PUSHORT,
+) {
+ use core::ptr::null_mut;
+ let ByteCount = read_unaligned(ProviderTraits as *mut USHORT) as isize;
+ let mut Ptr = ProviderTraits as PUCHAR;
+ let PtrEnd = Ptr.offset(ByteCount);
+ *Trait = null_mut();
+ *Size = 0;
+ if ByteCount < 3 {
+ return;
+ }
+ Ptr = Ptr.offset(2);
+ Ptr = Ptr.offset(strnlen(Ptr as PCSTR, (ByteCount - 3) as isize));
+ Ptr = Ptr.offset(1);
+ while Ptr < PtrEnd {
+ let TraitByteCount = read_unaligned(Ptr as *const USHORT);
+ if TraitByteCount < 3 {
+ return;
+ }
+ if *Ptr.offset(2) == TraitType && Ptr.offset(TraitByteCount as isize) <= PtrEnd {
+ *Trait = Ptr.offset(3) as PVOID;
+ *Size = TraitByteCount - 3;
+ return;
+ }
+ Ptr = Ptr.offset(TraitByteCount as isize);
+ }
+}
+ENUM!{enum EVENTSECURITYOPERATION {
+ EventSecuritySetDACL,
+ EventSecuritySetSACL,
+ EventSecurityAddDACL,
+ EventSecurityAddSACL,
+ EventSecurityMax,
+}}
+extern "system" {
+ pub fn EventAccessControl(
+ Guid: LPGUID,
+ Operation: ULONG,
+ Sid: PSID,
+ Rights: ULONG,
+ AllowOrDeny: BOOLEAN,
+ ) -> ULONG;
+ pub fn EventAccessQuery(
+ Guid: LPGUID,
+ Buffer: PSECURITY_DESCRIPTOR,
+ BufferSize: PULONG,
+ ) -> ULONG;
+ pub fn EventAccessRemove(
+ Guid: LPGUID,
+ ) -> ULONG;
+}
diff --git a/vendor/winapi/src/um/exdisp.rs b/vendor/winapi/src/um/exdisp.rs
new file mode 100644
index 000000000..3d44fd385
--- /dev/null
+++ b/vendor/winapi/src/um/exdisp.rs
@@ -0,0 +1,220 @@
+// 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 ExDisp.h
+use shared::basetsd::SHANDLE_PTR;
+use shared::wtypes::{BSTR, VARIANT_BOOL};
+use um::docobj::{OLECMDEXECOPT, OLECMDF, OLECMDID};
+use um::oaidl::{IDispatch, IDispatchVtbl, VARIANT};
+use um::ocidl::READYSTATE;
+use um::winnt::{HRESULT, INT, LONG};
+DEFINE_GUID!{IID_IWebBrowser2,
+ 0xd30c1661, 0xcdaf, 0x11d0, 0x8a, 0x3e, 0x00, 0xc0, 0x4f, 0xc9, 0xe2, 0x6e}
+RIDL!{#[uuid(0xeab22ac1, 0x30c1, 0x11cf, 0xa7, 0xeb, 0x00, 0x00, 0xc0, 0x5b, 0xae, 0x0b)]
+interface IWebBrowser(IWebBrowserVtbl): IDispatch(IDispatchVtbl) {
+ fn GoBack() -> HRESULT,
+ fn GoForward() -> HRESULT,
+ fn GoHome() -> HRESULT,
+ fn GoSearch() -> HRESULT,
+ fn Navigate(
+ URL: BSTR,
+ Flags: *const VARIANT,
+ TargetFrameName: *const VARIANT,
+ PostData: *const VARIANT,
+ Headers: *const VARIANT,
+ ) -> HRESULT,
+ fn Refresh() -> HRESULT,
+ fn Refresh2(
+ Level: *const VARIANT,
+ ) -> HRESULT,
+ fn Stop() -> HRESULT,
+ fn get_Application(
+ ppDisp: *mut *mut IDispatch,
+ ) -> HRESULT,
+ fn get_Parent(
+ ppDisp: *mut *mut IDispatch,
+ ) -> HRESULT,
+ fn get_Container(
+ ppDisp: *mut *mut IDispatch,
+ ) -> HRESULT,
+ fn get_Document(
+ ppDisp: *mut *mut IDispatch,
+ ) -> HRESULT,
+ fn get_TopLevelContainer(
+ pBool: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_Type(
+ Type: *mut BSTR,
+ ) -> HRESULT,
+ fn get_Left(
+ pl: *mut LONG,
+ ) -> HRESULT,
+ fn put_Left(
+ Left: LONG,
+ ) -> HRESULT,
+ fn get_Top(
+ pl: *mut LONG,
+ ) -> HRESULT,
+ fn put_Top(
+ Top: LONG,
+ ) -> HRESULT,
+ fn get_Width(
+ pl: *mut LONG,
+ ) -> HRESULT,
+ fn put_Width(
+ Width: LONG,
+ ) -> HRESULT,
+ fn get_Height(
+ pl: *mut LONG,
+ ) -> HRESULT,
+ fn put_Height(
+ Height: LONG,
+ ) -> HRESULT,
+ fn get_LocationName(
+ LocationName: *mut BSTR,
+ ) -> HRESULT,
+ fn get_LocationURL(
+ LocationURL: *mut BSTR,
+ ) -> HRESULT,
+ fn get_Busy(
+ pBool: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x0002df05, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IWebBrowserApp(IWebBrowserAppVtbl): IWebBrowser(IWebBrowserVtbl) {
+ fn Quit() -> HRESULT,
+ fn ClientToWindow(
+ pcx: *mut INT,
+ pcy: *mut INT,
+ ) -> HRESULT,
+ fn PutProperty(
+ Property: BSTR,
+ vtValue: VARIANT,
+ ) -> HRESULT,
+ fn GetProperty(
+ Property: BSTR,
+ pvtValue: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_Name(
+ Name: *mut BSTR,
+ ) -> HRESULT,
+ fn get_HWND(
+ pHWND: *mut SHANDLE_PTR,
+ ) -> HRESULT,
+ fn get_FullName(
+ FullName: *mut BSTR,
+ ) -> HRESULT,
+ fn get_Path(
+ Path: *mut BSTR,
+ ) -> HRESULT,
+ fn get_Visible(
+ pBool: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_Visible(
+ Value: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_StatusBar(
+ pBool: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_StatusBar(
+ Value: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_StatusText(
+ StatusText: *mut BSTR,
+ ) -> HRESULT,
+ fn put_StatusText(
+ StatusText: BSTR,
+ ) -> HRESULT,
+ fn get_ToolBar(
+ Value: *mut INT,
+ ) -> HRESULT,
+ fn put_ToolBar(
+ Value: INT,
+ ) -> HRESULT,
+ fn get_MenuBar(
+ Value: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_MenuBar(
+ Value: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_FullScreen(
+ pbFullScreen: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_FullScreen(
+ bFullScreen: VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xd30c1661, 0xcdaf, 0x11d0, 0x8a, 0x3e, 0x00, 0xc0, 0x4f, 0xc9, 0xe2, 0x6e)]
+interface IWebBrowser2(IWebBrowser2Vtbl): IWebBrowserApp(IWebBrowserAppVtbl) {
+ fn Navigate2(
+ URL: *const VARIANT,
+ Flags: *const VARIANT,
+ TargetFrameName: *const VARIANT,
+ PostData: *const VARIANT,
+ Headers: *const VARIANT,
+ ) -> HRESULT,
+ fn QueryStatusWB(
+ cmdID: OLECMDID,
+ pcmdf: *mut OLECMDF,
+ ) -> HRESULT,
+ fn ExecWB(
+ cmdID: OLECMDID,
+ cmdexecopt: OLECMDEXECOPT,
+ pvaIn: *const VARIANT,
+ pvaOut: *mut VARIANT,
+ ) -> HRESULT,
+ fn ShowBrowserBar(
+ pvaClsid: *const VARIANT,
+ pvarShow: *const VARIANT,
+ pvarSize: *const VARIANT,
+ ) -> HRESULT,
+ fn get_ReadyState(
+ plReadyState: *mut READYSTATE,
+ ) -> HRESULT,
+ fn get_Offline(
+ pbOffline: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_Offline(
+ bOffline: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_Silent(
+ pbSilent: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_Silent(
+ bSilent: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_RegisterAsBrowser(
+ pbRegister: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_RegisterAsBrowser(
+ bRegister: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_RegisterAsDropTarget(
+ pbRegister: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_RegisterAsDropTarget(
+ bRegister: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_TheaterMode(
+ pbRegister: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_TheaterMode(
+ bRegister: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_AddressBar(
+ Value: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_AddressBar(
+ Value: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_Resizable(
+ Value: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_Resizable(
+ Value: VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+DEFINE_GUID!{CLSID_InternetExplorer,
+ 0x0002df01, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
diff --git a/vendor/winapi/src/um/fibersapi.rs b/vendor/winapi/src/um/fibersapi.rs
new file mode 100644
index 000000000..c2e3b08ff
--- /dev/null
+++ b/vendor/winapi/src/um/fibersapi.rs
@@ -0,0 +1,23 @@
+// 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::minwindef::{BOOL, DWORD};
+use um::winnt::{PFLS_CALLBACK_FUNCTION, PVOID};
+extern "system" {
+ pub fn FlsAlloc(
+ lpCallback: PFLS_CALLBACK_FUNCTION,
+ ) -> DWORD;
+ pub fn FlsGetValue(
+ dwFlsIndex: DWORD,
+ ) -> PVOID;
+ pub fn FlsSetValue(
+ dwFlsIndex: DWORD,
+ lpFlsData: PVOID,
+ ) -> BOOL;
+ pub fn FlsFree(
+ dwFlsIndex: DWORD,
+ ) -> BOOL;
+ pub fn IsThreadAFiber() -> BOOL;
+}
diff --git a/vendor/winapi/src/um/fileapi.rs b/vendor/winapi/src/um/fileapi.rs
new file mode 100644
index 000000000..ed183a5fb
--- /dev/null
+++ b/vendor/winapi/src/um/fileapi.rs
@@ -0,0 +1,639 @@
+// 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.
+//! ApiSet Contract for api-ms-win-core-file-l1
+use shared::minwindef::{
+ BOOL, DWORD, FILETIME, LPCVOID, LPDWORD, LPFILETIME, LPVOID, PDWORD, PUCHAR, UCHAR, UINT,
+ ULONG, WORD,
+};
+use um::minwinbase::{
+ FILE_INFO_BY_HANDLE_CLASS, FINDEX_INFO_LEVELS, FINDEX_SEARCH_OPS, GET_FILEEX_INFO_LEVELS,
+ LPOVERLAPPED, LPOVERLAPPED_COMPLETION_ROUTINE, LPSECURITY_ATTRIBUTES, LPWIN32_FIND_DATAA,
+ LPWIN32_FIND_DATAW
+};
+use um::winnt::{
+ BOOLEAN, CCHAR, FILE_ID_128, FILE_SEGMENT_ELEMENT, HANDLE, LARGE_INTEGER, LONG, LONGLONG,
+ LPCSTR, LPCWSTR, LPSTR, LPWCH, LPWSTR, PLARGE_INTEGER, PLONG, PULARGE_INTEGER, PWSTR,
+ ULONGLONG, WCHAR,
+};
+pub const CREATE_NEW: DWORD = 1;
+pub const CREATE_ALWAYS: DWORD = 2;
+pub const OPEN_EXISTING: DWORD = 3;
+pub const OPEN_ALWAYS: DWORD = 4;
+pub const TRUNCATE_EXISTING: DWORD = 5;
+pub const INVALID_FILE_SIZE: DWORD = 0xFFFFFFFF;
+pub const INVALID_SET_FILE_POINTER: DWORD = 0xFFFFFFFF;
+pub const INVALID_FILE_ATTRIBUTES: DWORD = 0xFFFFFFFF;
+STRUCT!{struct WIN32_FILE_ATTRIBUTE_DATA {
+ dwFileAttributes: DWORD,
+ ftCreationTime: FILETIME,
+ ftLastAccessTime: FILETIME,
+ ftLastWriteTime: FILETIME,
+ nFileSizeHigh: DWORD,
+ nFileSizeLow: DWORD,
+}}
+pub type LPWIN32_FILE_ATTRIBUTE_DATA = *mut WIN32_FILE_ATTRIBUTE_DATA;
+STRUCT!{struct BY_HANDLE_FILE_INFORMATION {
+ dwFileAttributes: DWORD,
+ ftCreationTime: FILETIME,
+ ftLastAccessTime: FILETIME,
+ ftLastWriteTime: FILETIME,
+ dwVolumeSerialNumber: DWORD,
+ nFileSizeHigh: DWORD,
+ nFileSizeLow: DWORD,
+ nNumberOfLinks: DWORD,
+ nFileIndexHigh: DWORD,
+ nFileIndexLow: DWORD,
+}}
+pub type PBY_HANDLE_FILE_INFORMATION = *mut BY_HANDLE_FILE_INFORMATION;
+pub type LPBY_HANDLE_FILE_INFORMATION = *mut BY_HANDLE_FILE_INFORMATION;
+STRUCT!{struct CREATEFILE2_EXTENDED_PARAMETERS {
+ dwSize: DWORD,
+ dwFileAttributes: DWORD,
+ dwFileFlags: DWORD,
+ dwSecurityQosFlags: DWORD,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ hTemplateFile: HANDLE,
+}}
+pub type PCREATEFILE2_EXTENDED_PARAMETERS = *mut CREATEFILE2_EXTENDED_PARAMETERS;
+pub type LPCREATEFILE2_EXTENDED_PARAMETERS = *mut CREATEFILE2_EXTENDED_PARAMETERS;
+ENUM!{enum PRIORITY_HINT {
+ IoPriorityHintVeryLow = 0,
+ IoPriorityHintLow = 1,
+ IoPriorityHintNormal = 2,
+ MaximumIoPriorityHintType = 3,
+}}
+STRUCT!{struct FILE_BASIC_INFO {
+ CreationTime: LARGE_INTEGER,
+ LastAccessTime: LARGE_INTEGER,
+ LastWriteTime: LARGE_INTEGER,
+ ChangeTime: LARGE_INTEGER,
+ FileAttributes: DWORD,
+}}
+STRUCT!{struct FILE_STANDARD_INFO {
+ AllocationSize: LARGE_INTEGER,
+ EndOfFile: LARGE_INTEGER,
+ NumberOfLinks: DWORD,
+ DeletePending: BOOLEAN,
+ Directory: BOOLEAN,
+}}
+STRUCT!{struct FILE_NAME_INFO {
+ FileNameLength: DWORD,
+ FileName: [WCHAR; 1],
+}}
+STRUCT!{struct FILE_RENAME_INFO {
+ ReplaceIfExists: BOOL,
+ RootDirectory: HANDLE,
+ FileNameLength: DWORD,
+ FileName: [WCHAR; 1],
+}}
+STRUCT!{struct FILE_DISPOSITION_INFO {
+ DeleteFile: BOOLEAN,
+}}
+STRUCT!{struct FILE_ALLOCATION_INFO {
+ AllocationSize: LARGE_INTEGER,
+}}
+STRUCT!{struct FILE_END_OF_FILE_INFO {
+ EndOfFile: LARGE_INTEGER,
+}}
+STRUCT!{struct FILE_STREAM_INFO {
+ NextEntryOffset: DWORD,
+ StreamNameLength: DWORD,
+ StreamSize: LARGE_INTEGER,
+ StreamAllocationSize: LARGE_INTEGER,
+ StreamName: [WCHAR; 1],
+}}
+STRUCT!{struct FILE_COMPRESSION_INFO {
+ CompressedFileSize: LARGE_INTEGER,
+ CompressionFormat: WORD,
+ CompressionUnitShift: UCHAR,
+ ChunkShift: UCHAR,
+ ClusterShift: UCHAR,
+ Reserved: [UCHAR; 3],
+}}
+STRUCT!{struct FILE_ATTRIBUTE_TAG_INFO {
+ NextEntryOffset: DWORD,
+ ReparseTag: DWORD,
+}}
+STRUCT!{struct FILE_ID_BOTH_DIR_INFO {
+ NextEntryOffset: DWORD,
+ FileIndex: DWORD,
+ CreationTime: LARGE_INTEGER,
+ LastAccessTime: LARGE_INTEGER,
+ LastWriteTime: LARGE_INTEGER,
+ ChangeTime: LARGE_INTEGER,
+ EndOfFile: LARGE_INTEGER,
+ AllocationSize: LARGE_INTEGER,
+ FileAttributes: DWORD,
+ FileNameLength: DWORD,
+ EaSize: DWORD,
+ ShortNameLength: CCHAR,
+ ShortName: [WCHAR; 12],
+ FileId: LARGE_INTEGER,
+ FileName: [WCHAR; 1],
+}}
+STRUCT!{struct FILE_IO_PRIORITY_HINT_INFO {
+ PriorityHint: PRIORITY_HINT,
+}}
+STRUCT!{struct FILE_FULL_DIR_INFO {
+ NextEntryOffset: ULONG,
+ FileIndex: ULONG,
+ CreationTime: LARGE_INTEGER,
+ LastAccessTime: LARGE_INTEGER,
+ LastWriteTime: LARGE_INTEGER,
+ ChangeTime: LARGE_INTEGER,
+ EndOfFile: LARGE_INTEGER,
+ AllocationSize: LARGE_INTEGER,
+ FileAttributes: ULONG,
+ FileNameLength: ULONG,
+ EaSize: ULONG,
+ FileName: [WCHAR; 1],
+}}
+STRUCT!{struct FILE_STORAGE_INFO {
+ LogicalBytesPerSector: ULONG,
+ PhysicalBytesPerSectorForAtomicity: ULONG,
+ PhysicalBytesPerSectorForPerformance: ULONG,
+ FileSystemEffectivePhysicalBytesPerSectorForAtomicity: ULONG,
+ Flags: ULONG,
+ ByteOffsetForSectorAlignment: ULONG,
+ ByteOffsetForPartitionAlignment: ULONG,
+}}
+STRUCT!{struct FILE_ALIGNMENT_INFO {
+ AlignmentRequirement: ULONG,
+}}
+STRUCT!{struct FILE_ID_INFO {
+ VolumeSerialNumber: ULONGLONG,
+ FileId: FILE_ID_128,
+}}
+extern "system" {
+ pub fn CompareFileTime(
+ lpFileTime1: *const FILETIME,
+ lpFileTime2: *const FILETIME,
+ ) -> LONG;
+ pub fn CreateDirectoryA(
+ lpPathName: LPCSTR,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ ) -> BOOL;
+ pub fn CreateDirectoryW(
+ lpPathName: LPCWSTR,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ ) -> BOOL;
+ pub fn CreateFileA(
+ lpFileName: LPCSTR,
+ dwDesiredAccess: DWORD,
+ dwShareMode: DWORD,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ dwCreationDisposition: DWORD,
+ dwFlagsAndAttributes: DWORD,
+ hTemplateFile: HANDLE,
+ ) -> HANDLE;
+ pub fn CreateFileW(
+ lpFileName: LPCWSTR,
+ dwDesiredAccess: DWORD,
+ dwShareMode: DWORD,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ dwCreationDisposition: DWORD,
+ dwFlagsAndAttributes: DWORD,
+ hTemplateFile: HANDLE,
+ ) -> HANDLE;
+ pub fn DefineDosDeviceW(
+ dwFlags: DWORD,
+ lpDeviceName: LPCWSTR,
+ lpTargetPath: LPCWSTR,
+ ) -> BOOL;
+ pub fn DeleteFileA(
+ lpFileName: LPCSTR,
+ ) -> BOOL;
+ pub fn DeleteFileW(
+ lpFileName: LPCWSTR,
+ ) -> BOOL;
+ pub fn DeleteVolumeMountPointW(
+ lpszVolumeMountPoint: LPCWSTR,
+ ) -> BOOL;
+ pub fn FileTimeToLocalFileTime(
+ lpFileTime: *const FILETIME,
+ lpLocalFileTime: LPFILETIME,
+ ) -> BOOL;
+ pub fn FindClose(
+ hFindFile: HANDLE,
+ ) -> BOOL;
+ pub fn FindCloseChangeNotification(
+ hChangeHandle: HANDLE,
+ ) -> BOOL;
+ pub fn FindFirstChangeNotificationA(
+ lpPathName: LPCSTR,
+ bWatchSubtree: BOOL,
+ dwNotifyFilter: DWORD,
+ ) -> HANDLE;
+ pub fn FindFirstChangeNotificationW(
+ lpPathName: LPCWSTR,
+ bWatchSubtree: BOOL,
+ dwNotifyFilter: DWORD,
+ ) -> HANDLE;
+ pub fn FindFirstFileA(
+ lpFileName: LPCSTR,
+ lpFindFileData: LPWIN32_FIND_DATAA,
+ ) -> HANDLE;
+ pub fn FindFirstFileW(
+ lpFileName: LPCWSTR,
+ lpFindFileData: LPWIN32_FIND_DATAW,
+ ) -> HANDLE;
+ pub fn FindFirstFileExA(
+ lpFileName: LPCSTR,
+ fInfoLevelId: FINDEX_INFO_LEVELS,
+ lpFindFileData: LPVOID,
+ fSearchOp: FINDEX_SEARCH_OPS,
+ lpSearchFilter: LPVOID,
+ dwAdditionalFlags: DWORD,
+ ) -> HANDLE;
+ pub fn FindFirstFileExW(
+ lpFileName: LPCWSTR,
+ fInfoLevelId: FINDEX_INFO_LEVELS,
+ lpFindFileData: LPVOID,
+ fSearchOp: FINDEX_SEARCH_OPS,
+ lpSearchFilter: LPVOID,
+ dwAdditionalFlags: DWORD,
+ ) -> HANDLE;
+ pub fn FindFirstVolumeW(
+ lpszVolumeName: LPWSTR,
+ cchBufferLength: DWORD,
+ ) -> HANDLE;
+ pub fn FindNextChangeNotification(
+ hChangeHandle: HANDLE,
+ ) -> BOOL;
+ pub fn FindNextFileA(
+ hFindFile: HANDLE,
+ lpFindFileData: LPWIN32_FIND_DATAA,
+ ) -> BOOL;
+ pub fn FindNextFileW(
+ hFindFile: HANDLE,
+ lpFindFileData: LPWIN32_FIND_DATAW,
+ ) -> BOOL;
+ pub fn FindNextVolumeW(
+ hFindVolume: HANDLE,
+ lpszVolumeName: LPWSTR,
+ cchBufferLength: DWORD,
+ ) -> BOOL;
+ pub fn FindVolumeClose(
+ hFindVolume: HANDLE,
+ ) -> BOOL;
+ pub fn FlushFileBuffers(
+ hFile: HANDLE,
+ ) -> BOOL;
+ pub fn GetDiskFreeSpaceA(
+ lpRootPathName: LPCSTR,
+ lpSectorsPerCluster: LPDWORD,
+ lpBytesPerSector: LPDWORD,
+ lpNumberOfFreeClusters: LPDWORD,
+ lpTotalNumberOfClusters: LPDWORD,
+ ) -> BOOL;
+ pub fn GetDiskFreeSpaceW(
+ lpRootPathName: LPCWSTR,
+ lpSectorsPerCluster: LPDWORD,
+ lpBytesPerSector: LPDWORD,
+ lpNumberOfFreeClusters: LPDWORD,
+ lpTotalNumberOfClusters: LPDWORD,
+ ) -> BOOL;
+ pub fn GetDiskFreeSpaceExA(
+ lpDirectoryName: LPCSTR,
+ lpFreeBytesAvailableToCaller: PULARGE_INTEGER,
+ lpTotalNumberOfBytes: PULARGE_INTEGER,
+ lpTotalNumberOfFreeBytes: PULARGE_INTEGER,
+ ) -> BOOL;
+ pub fn GetDiskFreeSpaceExW(
+ lpDirectoryName: LPCWSTR,
+ lpFreeBytesAvailableToCaller: PULARGE_INTEGER,
+ lpTotalNumberOfBytes: PULARGE_INTEGER,
+ lpTotalNumberOfFreeBytes: PULARGE_INTEGER,
+ ) -> BOOL;
+ pub fn GetDriveTypeA(
+ lpRootPathName: LPCSTR,
+ ) -> UINT;
+ pub fn GetDriveTypeW(
+ lpRootPathName: LPCWSTR,
+ ) -> UINT;
+ pub fn GetFileAttributesA(
+ lpFileName: LPCSTR,
+ ) -> DWORD;
+ pub fn GetFileAttributesW(
+ lpFileName: LPCWSTR,
+ ) -> DWORD;
+ pub fn GetFileAttributesExA(
+ lpFileName: LPCSTR,
+ fInfoLevelId: GET_FILEEX_INFO_LEVELS,
+ lpFileInformation: LPVOID,
+ ) -> BOOL;
+ pub fn GetFileAttributesExW(
+ lpFileName: LPCWSTR,
+ fInfoLevelId: GET_FILEEX_INFO_LEVELS,
+ lpFileInformation: LPVOID,
+ ) -> BOOL;
+ pub fn GetFileInformationByHandle(
+ hFile: HANDLE,
+ lpFileInformation: LPBY_HANDLE_FILE_INFORMATION,
+ ) -> BOOL;
+ pub fn GetFileSize(
+ hFile: HANDLE,
+ lpFileSizeHigh: LPDWORD,
+ ) -> DWORD;
+ pub fn GetFileSizeEx(
+ hFile: HANDLE,
+ lpFileSize: PLARGE_INTEGER,
+ ) -> BOOL;
+ pub fn GetFileType(
+ hFile: HANDLE,
+ ) -> DWORD;
+ pub fn GetFinalPathNameByHandleA(
+ hFile: HANDLE,
+ lpszFilePath: LPSTR,
+ cchFilePath: DWORD,
+ dwFlags: DWORD,
+ ) -> DWORD;
+ pub fn GetFinalPathNameByHandleW(
+ hFile: HANDLE,
+ lpszFilePath: LPWSTR,
+ cchFilePath: DWORD,
+ dwFlags: DWORD,
+ ) -> DWORD;
+ pub fn GetFileTime(
+ hFile: HANDLE,
+ lpCreationTime: LPFILETIME,
+ lpLastAccessTime: LPFILETIME,
+ lpLastWriteTime: LPFILETIME,
+ ) -> BOOL;
+ pub fn GetFullPathNameW(
+ lpFileName: LPCWSTR,
+ nBufferLength: DWORD,
+ lpBuffer: LPWSTR,
+ lpFilePart: *mut LPWSTR,
+ ) -> DWORD;
+ pub fn GetFullPathNameA(
+ lpFileName: LPCSTR,
+ nBufferLength: DWORD,
+ lpBuffer: LPSTR,
+ lpFilePart: *mut LPSTR,
+ ) -> DWORD;
+ pub fn GetLogicalDrives() -> DWORD;
+ pub fn GetLogicalDriveStringsW(
+ nBufferLength: DWORD,
+ lpBuffer: LPWSTR,
+ ) -> DWORD;
+ pub fn GetLongPathNameA(
+ lpszShortPath: LPCSTR,
+ lpszLongPath: LPSTR,
+ cchBuffer: DWORD,
+ ) -> DWORD;
+ pub fn GetLongPathNameW(
+ lpszShortPath: LPCWSTR,
+ lpszLongPath: LPWSTR,
+ cchBuffer: DWORD,
+ ) -> DWORD;
+ pub fn GetShortPathNameW(
+ lpszLongPath: LPCWSTR,
+ lpszShortPath: LPWSTR,
+ cchBuffer: DWORD,
+ ) -> DWORD;
+ pub fn GetTempFileNameW(
+ lpPathName: LPCWSTR,
+ lpPrefixString: LPCWSTR,
+ uUnique: UINT,
+ lpTempFileName: LPWSTR,
+ ) -> UINT;
+ pub fn GetVolumeInformationByHandleW(
+ hFile: HANDLE,
+ lpVolumeNameBuffer: LPWSTR,
+ nVolumeNameSize: DWORD,
+ lpVolumeSerialNumber: LPDWORD,
+ lpMaximumComponentLength: LPDWORD,
+ lpFileSystemFlags: LPDWORD,
+ lpFileSystemNameBuffer: LPWSTR,
+ nFileSystemNameSize: DWORD,
+ ) -> BOOL;
+ pub fn GetVolumeInformationW(
+ lpRootPathName: LPCWSTR,
+ lpVolumeNameBuffer: LPWSTR,
+ nVolumeNameSize: DWORD,
+ lpVolumeSerialNumber: LPDWORD,
+ lpMaximumComponentLength: LPDWORD,
+ lpFileSystemFlags: LPDWORD,
+ lpFileSystemNameBuffer: LPWSTR,
+ nFileSystemNameSize: DWORD,
+ ) -> BOOL;
+ pub fn GetVolumePathNameW(
+ lpszFileName: LPCWSTR,
+ lpszVolumePathName: LPWSTR,
+ cchBufferLength: DWORD,
+ ) -> BOOL;
+ pub fn LocalFileTimeToFileTime(
+ lpLocalFileTime: *const FILETIME,
+ lpFileTime: LPFILETIME,
+ ) -> BOOL;
+ pub fn LockFile(
+ hFile: HANDLE,
+ dwFileOffsetLow: DWORD,
+ dwFileOffsetHigh: DWORD,
+ nNumberOfBytesToLockLow: DWORD,
+ nNumberOfBytesToLockHigh: DWORD,
+ ) -> BOOL;
+ pub fn LockFileEx(
+ hFile: HANDLE,
+ dwFlags: DWORD,
+ dwReserved: DWORD,
+ nNumberOfBytesToLockLow: DWORD,
+ nNumberOfBytesToLockHigh: DWORD,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn QueryDosDeviceW(
+ lpDeviceName: LPCWSTR,
+ lpTargetPath: LPWSTR,
+ ucchMax: DWORD,
+ ) -> DWORD;
+ pub fn ReadFile(
+ hFile: HANDLE,
+ lpBuffer: LPVOID,
+ nNumberOfBytesToRead: DWORD,
+ lpNumberOfBytesRead: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn ReadFileEx(
+ hFile: HANDLE,
+ lpBuffer: LPVOID,
+ nNumberOfBytesToRead: DWORD,
+ lpOverlapped: LPOVERLAPPED,
+ lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE,
+ ) -> BOOL;
+ pub fn ReadFileScatter(
+ hFile: HANDLE,
+ aSegmentArray: *mut FILE_SEGMENT_ELEMENT,
+ nNumberOfBytesToRead: DWORD,
+ lpReserved: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn RemoveDirectoryA(
+ lpPathName: LPCSTR,
+ ) -> BOOL;
+ pub fn RemoveDirectoryW(
+ lpPathName: LPCWSTR,
+ ) -> BOOL;
+ pub fn SetEndOfFile(
+ hFile: HANDLE,
+ ) -> BOOL;
+ pub fn SetFileAttributesA(
+ lpFileName: LPCSTR,
+ dwFileAttributes: DWORD,
+ ) -> BOOL;
+ pub fn SetFileAttributesW(
+ lpFileName: LPCWSTR,
+ dwFileAttributes: DWORD,
+ ) -> BOOL;
+ pub fn SetFileInformationByHandle(
+ hFile: HANDLE,
+ FileInformationClass: FILE_INFO_BY_HANDLE_CLASS,
+ lpFileInformation: LPVOID,
+ dwBufferSize: DWORD,
+ ) -> BOOL;
+ pub fn SetFilePointer(
+ hFile: HANDLE,
+ lDistanceToMove: LONG,
+ lpDistanceToMoveHigh: PLONG,
+ dwMoveMethod: DWORD,
+ ) -> DWORD;
+ pub fn SetFilePointerEx(
+ hFile: HANDLE,
+ liDistanceToMove: LARGE_INTEGER,
+ lpNewFilePointer: PLARGE_INTEGER,
+ dwMoveMethod: DWORD,
+ ) -> BOOL;
+ pub fn SetFileTime(
+ hFile: HANDLE,
+ lpCreationTime: *const FILETIME,
+ lpLastAccessTime: *const FILETIME,
+ lpLastWriteTime: *const FILETIME,
+ ) -> BOOL;
+ pub fn SetFileValidData(
+ hFile: HANDLE,
+ ValidDataLength: LONGLONG,
+ ) -> BOOL;
+ pub fn UnlockFile(
+ hFile: HANDLE,
+ dwFileOffsetLow: DWORD,
+ dwFileOffsetHigh: DWORD,
+ nNumberOfBytesToUnlockLow: DWORD,
+ nNumberOfBytesToUnlockHigh: DWORD,
+ ) -> BOOL;
+ pub fn UnlockFileEx(
+ hFile: HANDLE,
+ dwReserved: DWORD,
+ nNumberOfBytesToUnlockLow: DWORD,
+ nNumberOfBytesToUnlockHigh: DWORD,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn WriteFile(
+ hFile: HANDLE,
+ lpBuffer: LPCVOID,
+ nNumberOfBytesToWrite: DWORD,
+ lpNumberOfBytesWritten: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn WriteFileEx(
+ hFile: HANDLE,
+ lpBuffer: LPCVOID,
+ nNumberOfBytesToWrite: DWORD,
+ lpOverlapped: LPOVERLAPPED,
+ lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE,
+ ) -> BOOL;
+ pub fn WriteFileGather(
+ hFile: HANDLE,
+ aSegmentArray: *mut FILE_SEGMENT_ELEMENT,
+ nNumberOfBytesToWrite: DWORD,
+ lpReserved: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn GetTempPathW(
+ nBufferLength: DWORD,
+ lpBuffer: LPWSTR,
+ ) -> DWORD;
+ pub fn GetVolumeNameForVolumeMountPointW(
+ lpszVolumeMountPoint: LPCWSTR,
+ lpszVolumeName: LPWSTR,
+ cchBufferLength: DWORD,
+ ) -> BOOL;
+ pub fn GetVolumePathNamesForVolumeNameW(
+ lpszVolumeName: LPCWSTR,
+ lpszVolumePathNames: LPWCH,
+ cchBufferLength: DWORD,
+ lpcchReturnLength: PDWORD,
+ ) -> BOOL;
+ pub fn CreateFile2(
+ lpFileName: LPCWSTR,
+ dwDesiredAccess: DWORD,
+ dwShareMode: DWORD,
+ dwCreationDisposition: DWORD,
+ pCreateExParams: LPCREATEFILE2_EXTENDED_PARAMETERS,
+ ) -> HANDLE;
+ pub fn SetFileIoOverlappedRange(
+ FileHandle: HANDLE,
+ OverlappedRangeStart: PUCHAR,
+ Length: ULONG,
+ ) -> BOOL;
+ pub fn GetCompressedFileSizeA(
+ lpFileName: LPCSTR,
+ lpFileSizeHigh: LPDWORD,
+ ) -> DWORD;
+ pub fn GetCompressedFileSizeW(
+ lpFileName: LPCWSTR,
+ lpFileSizeHigh: LPDWORD,
+ ) -> DWORD;
+}
+ENUM!{enum STREAM_INFO_LEVELS {
+ FindStreamInfoStandard,
+ FindStreamInfoMaxInfoLevel,
+}}
+extern "system" {
+ pub fn FindFirstStreamW(
+ lpFileName: LPCWSTR,
+ InfoLevel: STREAM_INFO_LEVELS,
+ lpFindStreamData: LPVOID,
+ dwFlags: DWORD,
+ ) -> HANDLE;
+ pub fn FindNextStreamW(
+ hFindStream: HANDLE,
+ lpFindStreamData: LPVOID,
+ ) -> BOOL;
+ pub fn AreFileApisANSI() -> BOOL;
+ pub fn GetTempPathA(
+ nBufferLength: DWORD,
+ lpBuffer: LPSTR,
+ ) -> DWORD;
+ pub fn FindFirstFileNameW(
+ lpFileName: LPCWSTR,
+ dwFlags: DWORD,
+ StringLength: LPDWORD,
+ LinkName: PWSTR,
+ ) -> HANDLE;
+ pub fn FindNextFileNameW(
+ hFindStream: HANDLE,
+ StringLength: LPDWORD,
+ LinkName: PWSTR,
+ ) -> BOOL;
+ pub fn GetVolumeInformationA(
+ lpRootPathName: LPCSTR,
+ lpVolumeNameBuffer: LPSTR,
+ nVolumeNameSize: DWORD,
+ lpVolumeSerialNumber: LPDWORD,
+ lpMaximumComponentLength: LPDWORD,
+ lpFileSystemFlags: LPDWORD,
+ lpFileSystemNameBuffer: LPSTR,
+ nFileSystemNameSize: DWORD,
+ ) -> BOOL;
+ pub fn GetTempFileNameA(
+ lpPathName: LPCSTR,
+ lpPrefixString: LPCSTR,
+ uUnique: UINT,
+ lpTempFileName: LPSTR,
+ ) -> UINT;
+ pub fn SetFileApisToOEM();
+ pub fn SetFileApisToANSI();
+}
diff --git a/vendor/winapi/src/um/functiondiscoverykeys_devpkey.rs b/vendor/winapi/src/um/functiondiscoverykeys_devpkey.rs
new file mode 100644
index 000000000..045547512
--- /dev/null
+++ b/vendor/winapi/src/um/functiondiscoverykeys_devpkey.rs
@@ -0,0 +1,117 @@
+// 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::wtypes::PROPERTYKEY;
+//52
+DEFINE_PROPERTYKEY!{PKEY_Device_DeviceDesc,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 2}
+DEFINE_PROPERTYKEY!{PKEY_Device_HardwareIds,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 3}
+DEFINE_PROPERTYKEY!{PKEY_Device_CompatibleIds,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 4}
+DEFINE_PROPERTYKEY!{PKEY_Device_Service,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 6}
+DEFINE_PROPERTYKEY!{PKEY_Device_Class,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 9}
+DEFINE_PROPERTYKEY!{PKEY_Device_ClassGuid,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 10}
+DEFINE_PROPERTYKEY!{PKEY_Device_Driver,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 11}
+DEFINE_PROPERTYKEY!{PKEY_Device_ConfigFlags,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 12}
+DEFINE_PROPERTYKEY!{PKEY_Device_Manufacturer,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 13}
+DEFINE_PROPERTYKEY!{PKEY_Device_FriendlyName,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 14}
+DEFINE_PROPERTYKEY!{PKEY_Device_LocationInfo,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 15}
+DEFINE_PROPERTYKEY!{PKEY_Device_PDOName,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 16}
+DEFINE_PROPERTYKEY!{PKEY_Device_Capabilities,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 17}
+DEFINE_PROPERTYKEY!{PKEY_Device_UINumber,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 18}
+DEFINE_PROPERTYKEY!{PKEY_Device_UpperFilters,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 19}
+DEFINE_PROPERTYKEY!{PKEY_Device_LowerFilters,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 20}
+DEFINE_PROPERTYKEY!{PKEY_Device_BusTypeGuid,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 21}
+DEFINE_PROPERTYKEY!{PKEY_Device_LegacyBusType,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 22}
+DEFINE_PROPERTYKEY!{PKEY_Device_BusNumber,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 23}
+DEFINE_PROPERTYKEY!{PKEY_Device_EnumeratorName,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 24}
+DEFINE_PROPERTYKEY!{PKEY_Device_Security,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 25}
+DEFINE_PROPERTYKEY!{PKEY_Device_SecuritySDS,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 26}
+DEFINE_PROPERTYKEY!{PKEY_Device_DevType,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 27}
+DEFINE_PROPERTYKEY!{PKEY_Device_Exclusive,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 28}
+DEFINE_PROPERTYKEY!{PKEY_Device_Characteristics,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 29}
+DEFINE_PROPERTYKEY!{PKEY_Device_Address,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 30}
+DEFINE_PROPERTYKEY!{PKEY_Device_UINumberDescFormat,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 31}
+DEFINE_PROPERTYKEY!{PKEY_Device_PowerData,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 32}
+DEFINE_PROPERTYKEY!{PKEY_Device_RemovalPolicy,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 33}
+DEFINE_PROPERTYKEY!{PKEY_Device_RemovalPolicyDefault,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 34}
+DEFINE_PROPERTYKEY!{PKEY_Device_RemovalPolicyOverride,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 35}
+DEFINE_PROPERTYKEY!{PKEY_Device_InstallState,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 36}
+DEFINE_PROPERTYKEY!{PKEY_Device_LocationPaths,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 37}
+DEFINE_PROPERTYKEY!{PKEY_Device_BaseContainerId,
+ 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 38}
+//137
+DEFINE_PROPERTYKEY!{PKEY_Device_DriverDate,
+ 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 2}
+DEFINE_PROPERTYKEY!{PKEY_Device_DriverVersion,
+ 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 3}
+DEFINE_PROPERTYKEY!{PKEY_Device_DriverDesc,
+ 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 4}
+DEFINE_PROPERTYKEY!{PKEY_Device_DriverInfPath,
+ 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 5}
+DEFINE_PROPERTYKEY!{PKEY_Device_DriverInfSection,
+ 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 6}
+DEFINE_PROPERTYKEY!{PKEY_Device_DriverInfSectionExt,
+ 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 7}
+DEFINE_PROPERTYKEY!{PKEY_Device_MatchingDeviceId,
+ 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 8}
+DEFINE_PROPERTYKEY!{PKEY_Device_DriverProvider,
+ 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 9}
+DEFINE_PROPERTYKEY!{PKEY_Device_DriverPropPageProvider,
+ 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 10}
+DEFINE_PROPERTYKEY!{PKEY_Device_DriverCoInstallers,
+ 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 11}
+DEFINE_PROPERTYKEY!{PKEY_Device_ResourcePickerTags,
+ 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 12}
+DEFINE_PROPERTYKEY!{PKEY_Device_ResourcePickerExceptions,
+ 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 13}
+DEFINE_PROPERTYKEY!{PKEY_Device_DriverRank,
+ 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 14}
+DEFINE_PROPERTYKEY!{PKEY_Device_DriverLogoLevel,
+ 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 15}
+DEFINE_PROPERTYKEY!{PKEY_Device_NoConnectSound,
+ 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 17}
+DEFINE_PROPERTYKEY!{PKEY_Device_GenericDriverInstalled,
+ 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 18}
+DEFINE_PROPERTYKEY!{PKEY_Device_AdditionalSoftwareRequested,
+ 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 19}
+//209
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_FriendlyName,
+ 0x026e516e, 0xb814, 0x414b, 0x83, 0xcd, 0x85, 0x6d, 0x6f, 0xef, 0x48, 0x22, 2}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Enabled,
+ 0x026e516e, 0xb814, 0x414b, 0x83, 0xcd, 0x85, 0x6d, 0x6f, 0xef, 0x48, 0x22, 3}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_ClassGuid,
+ 0x026e516e, 0xb814, 0x414b, 0x83, 0xcd, 0x85, 0x6d, 0x6f, 0xef, 0x48, 0x22, 4}
diff --git a/vendor/winapi/src/um/gl/gl.rs b/vendor/winapi/src/um/gl/gl.rs
new file mode 100644
index 000000000..d7c1b586e
--- /dev/null
+++ b/vendor/winapi/src/um/gl/gl.rs
@@ -0,0 +1,52 @@
+// 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 ctypes::{c_double, c_float, c_int, c_schar, c_short, c_uchar, c_uint, c_ushort, c_void};
+//48
+pub type GLenum = c_uint;
+pub type GLboolean = c_uchar;
+pub type GLbitfield = c_uint;
+pub type GLbyte = c_schar;
+pub type GLshort = c_short;
+pub type GLint = c_int;
+pub type GLsizei = c_int;
+pub type GLubyte = c_uchar;
+pub type GLushort = c_ushort;
+pub type GLuint = c_uint;
+pub type GLfloat = c_float;
+pub type GLclampf = c_float;
+pub type GLdouble = c_double;
+pub type GLclampd = c_double;
+pub type GLvoid = c_void;
+//63
+//68
+//AccumOp
+pub const GL_ACCUM: GLenum = 0x0100;
+pub const GL_LOAD: GLenum = 0x0101;
+pub const GL_RETURN: GLenum = 0x0102;
+pub const GL_MULT: GLenum = 0x0103;
+pub const GL_ADD: GLenum = 0x0104;
+//AlphaFunction
+pub const GL_NEVER: GLenum = 0x0200;
+pub const GL_LESS: GLenum = 0x0201;
+pub const GL_EQUAL: GLenum = 0x0202;
+pub const GL_LEQUAL: GLenum = 0x0203;
+pub const GL_GREATER: GLenum = 0x0204;
+pub const GL_NOTEQUAL: GLenum = 0x0205;
+pub const GL_GEQUAL: GLenum = 0x0206;
+pub const GL_ALWAYS: GLenum = 0x0207;
+// TODO: we're missing about 1500 lines of defines and methods
+// until that time, you can use the excellent GL crate
+// https://github.com/brendanzab/gl-rs
+extern "system" {
+ pub fn glAccum(
+ op: GLenum,
+ value: GLfloat,
+ );
+ pub fn glAlphaFunc(
+ func: GLenum,
+ reference: GLclampf,
+ );
+}
diff --git a/vendor/winapi/src/um/gl/mod.rs b/vendor/winapi/src/um/gl/mod.rs
new file mode 100644
index 000000000..6ce6d067f
--- /dev/null
+++ b/vendor/winapi/src/um/gl/mod.rs
@@ -0,0 +1,7 @@
+// 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.
+//! Headers for user mode only
+#[cfg(feature = "gl-gl")] pub mod gl;
diff --git a/vendor/winapi/src/um/handleapi.rs b/vendor/winapi/src/um/handleapi.rs
new file mode 100644
index 000000000..1d7e43d77
--- /dev/null
+++ b/vendor/winapi/src/um/handleapi.rs
@@ -0,0 +1,36 @@
+// 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.
+//! handleapi include file
+use shared::minwindef::{BOOL, DWORD, LPDWORD, LPHANDLE};
+use um::winnt::HANDLE;
+pub const INVALID_HANDLE_VALUE: HANDLE = -1isize as HANDLE;
+extern "system" {
+ pub fn CloseHandle(
+ hObject: HANDLE,
+ ) -> BOOL;
+ pub fn DuplicateHandle(
+ hSourceProcessHandle: HANDLE,
+ hSourceHandle: HANDLE,
+ hTargetProcessHandle: HANDLE,
+ lpTargetHandle: LPHANDLE,
+ dwDesiredAccess: DWORD,
+ bInheritHandle: BOOL,
+ dwOptions: DWORD,
+ ) -> BOOL;
+ pub fn CompareObjectHandles(
+ hFirstObjectHandle: HANDLE,
+ hSecondObjectHandle: HANDLE,
+ ) -> BOOL;
+ pub fn GetHandleInformation(
+ hObject: HANDLE,
+ lpdwFlags: LPDWORD,
+ ) -> BOOL;
+ pub fn SetHandleInformation(
+ hObject: HANDLE,
+ dwMask: DWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/heapapi.rs b/vendor/winapi/src/um/heapapi.rs
new file mode 100644
index 000000000..83073b31e
--- /dev/null
+++ b/vendor/winapi/src/um/heapapi.rs
@@ -0,0 +1,92 @@
+// 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.
+//! ApiSet Contract for api-ms-win-core-heap-l1
+use shared::basetsd::{PSIZE_T, SIZE_T};
+use shared::minwindef::{BOOL, DWORD, LPCVOID, LPVOID};
+use um::minwinbase::LPPROCESS_HEAP_ENTRY;
+use um::winnt::{HANDLE, HEAP_INFORMATION_CLASS, PHANDLE, PVOID};
+STRUCT!{struct HEAP_SUMMARY {
+ cb: DWORD,
+ cbAllocated: SIZE_T,
+ cbCommitted: SIZE_T,
+ cbReserved: SIZE_T,
+ cbMaxReserve: SIZE_T,
+}}
+pub type PHEAP_SUMMARY = *mut HEAP_SUMMARY;
+pub type LPHEAP_SUMMARY = PHEAP_SUMMARY;
+extern "system" {
+ pub fn HeapCreate(
+ flOptions: DWORD,
+ dwInitialSize: SIZE_T,
+ dwMaximumSize: SIZE_T,
+ ) -> HANDLE;
+ pub fn HeapDestroy(
+ hHeap: HANDLE,
+ ) -> BOOL;
+ pub fn HeapAlloc(
+ hHeap: HANDLE,
+ dwFlags: DWORD,
+ dwBytes: SIZE_T,
+ ) -> LPVOID;
+ pub fn HeapReAlloc(
+ hHeap: HANDLE,
+ dwFlags: DWORD,
+ lpMem: LPVOID,
+ dwBytes: SIZE_T,
+ ) -> LPVOID;
+ pub fn HeapFree(
+ hHeap: HANDLE,
+ dwFlags: DWORD,
+ lpMem: LPVOID,
+ ) -> BOOL;
+ pub fn HeapSize(
+ hHeap: HANDLE,
+ dwFlags: DWORD,
+ lpMem: LPCVOID,
+ ) -> SIZE_T;
+ pub fn GetProcessHeap() -> HANDLE;
+ pub fn HeapCompact(
+ hHeap: HANDLE,
+ dwFlags: DWORD,
+ ) -> SIZE_T;
+ pub fn HeapSetInformation(
+ HeapHandle: HANDLE,
+ HeapInformationClass: HEAP_INFORMATION_CLASS,
+ HeapInformation: PVOID,
+ HeapInformationLength: SIZE_T,
+ ) -> BOOL;
+ pub fn HeapValidate(
+ hHeap: HANDLE,
+ dwFlags: DWORD,
+ lpMem: LPCVOID,
+ ) -> BOOL;
+ pub fn HeapSummary(
+ hHeap: HANDLE,
+ dwFlags: DWORD,
+ lpSummary: LPHEAP_SUMMARY,
+ ) -> BOOL;
+ pub fn GetProcessHeaps(
+ NumberOfHeaps: DWORD,
+ ProcessHeaps: PHANDLE,
+ ) -> DWORD;
+ pub fn HeapLock(
+ hHeap: HANDLE,
+ ) -> BOOL;
+ pub fn HeapUnlock(
+ hHeap: HANDLE,
+ ) -> BOOL;
+ pub fn HeapWalk(
+ hHeap: HANDLE,
+ lpEntry: LPPROCESS_HEAP_ENTRY,
+ ) -> BOOL;
+ pub fn HeapQueryInformation(
+ HeapHandle: HANDLE,
+ HeapInformationClass: HEAP_INFORMATION_CLASS,
+ HeapInformation: PVOID,
+ HeapInformationLength: SIZE_T,
+ ReturnLength: PSIZE_T,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/highlevelmonitorconfigurationapi.rs b/vendor/winapi/src/um/highlevelmonitorconfigurationapi.rs
new file mode 100644
index 000000000..f187aeb26
--- /dev/null
+++ b/vendor/winapi/src/um/highlevelmonitorconfigurationapi.rs
@@ -0,0 +1,171 @@
+// 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::minwindef::{DWORD, LPDWORD};
+use um::physicalmonitorenumerationapi::_BOOL;
+use um::winnt::HANDLE;
+pub const MC_CAPS_NONE: DWORD = 0x00000000;
+pub const MC_CAPS_MONITOR_TECHNOLOGY_TYPE: DWORD = 0x00000001;
+pub const MC_CAPS_BRIGHTNESS: DWORD = 0x00000002;
+pub const MC_CAPS_CONTRAST: DWORD = 0x00000004;
+pub const MC_CAPS_COLOR_TEMPERATURE: DWORD = 0x00000008;
+pub const MC_CAPS_RED_GREEN_BLUE_GAIN: DWORD = 0x00000010;
+pub const MC_CAPS_RED_GREEN_BLUE_DRIVE: DWORD = 0x00000020;
+pub const MC_CAPS_DEGAUSS: DWORD = 0x00000040;
+pub const MC_CAPS_DISPLAY_AREA_POSITION: DWORD = 0x00000080;
+pub const MC_CAPS_DISPLAY_AREA_SIZE: DWORD = 0x00000100;
+pub const MC_CAPS_RESTORE_FACTORY_DEFAULTS: DWORD = 0x00000400;
+pub const MC_CAPS_RESTORE_FACTORY_COLOR_DEFAULTS: DWORD = 0x00000800;
+pub const MC_RESTORE_FACTORY_DEFAULTS_ENABLES_MONITOR_SETTINGS: DWORD = 0x00001000;
+pub const MC_SUPPORTED_COLOR_TEMPERATURE_NONE: DWORD = 0x00000000;
+pub const MC_SUPPORTED_COLOR_TEMPERATURE_4000K: DWORD = 0x00000001;
+pub const MC_SUPPORTED_COLOR_TEMPERATURE_5000K: DWORD = 0x00000002;
+pub const MC_SUPPORTED_COLOR_TEMPERATURE_6500K: DWORD = 0x00000004;
+pub const MC_SUPPORTED_COLOR_TEMPERATURE_7500K: DWORD = 0x00000008;
+pub const MC_SUPPORTED_COLOR_TEMPERATURE_8200K: DWORD = 0x00000010;
+pub const MC_SUPPORTED_COLOR_TEMPERATURE_9300K: DWORD = 0x00000020;
+pub const MC_SUPPORTED_COLOR_TEMPERATURE_10000K: DWORD = 0x00000040;
+pub const MC_SUPPORTED_COLOR_TEMPERATURE_11500K: DWORD = 0x00000080;
+ENUM!{enum MC_DISPLAY_TECHNOLOGY_TYPE {
+ MC_SHADOW_MASK_CATHODE_RAY_TUBE,
+ MC_APERTURE_GRILL_CATHODE_RAY_TUBE,
+ MC_THIN_FILM_TRANSISTOR,
+ MC_LIQUID_CRYSTAL_ON_SILICON,
+ MC_PLASMA,
+ MC_ORGANIC_LIGHT_EMITTING_DIODE,
+ MC_ELECTROLUMINESCENT,
+ MC_MICROELECTROMECHANICAL,
+ MC_FIELD_EMISSION_DEVICE,
+}}
+pub type LPMC_DISPLAY_TECHNOLOGY_TYPE = *mut MC_DISPLAY_TECHNOLOGY_TYPE;
+ENUM!{enum MC_DRIVE_TYPE {
+ MC_RED_DRIVE,
+ MC_GREEN_DRIVE,
+ MC_BLUE_DRIVE,
+}}
+ENUM!{enum MC_GAIN_TYPE {
+ MC_RED_GAIN,
+ MC_GREEN_GAIN,
+ MC_BLUE_GAIN,
+}}
+ENUM!{enum MC_POSITION_TYPE {
+ MC_HORIZONTAL_POSITION,
+ MC_VERTICAL_POSITION,
+}}
+ENUM!{enum MC_SIZE_TYPE {
+ MC_WIDTH,
+ MC_HEIGHT,
+}}
+ENUM!{enum MC_COLOR_TEMPERATURE {
+ MC_COLOR_TEMPERATURE_UNKNOWN,
+ MC_COLOR_TEMPERATURE_4000K,
+ MC_COLOR_TEMPERATURE_5000K,
+ MC_COLOR_TEMPERATURE_6500K,
+ MC_COLOR_TEMPERATURE_7500K,
+ MC_COLOR_TEMPERATURE_8200K,
+ MC_COLOR_TEMPERATURE_9300K,
+ MC_COLOR_TEMPERATURE_10000K,
+ MC_COLOR_TEMPERATURE_11500K,
+}}
+pub type LPMC_COLOR_TEMPERATURE = *mut MC_COLOR_TEMPERATURE;
+extern "system" {
+ pub fn GetMonitorCapabilities(
+ hMonitor: HANDLE,
+ pdwMonitorCapabilities: LPDWORD,
+ pdwSupportedColorTemperature: LPDWORD,
+ ) -> _BOOL;
+ pub fn SaveCurrentMonitorSettings(
+ hMonitor: HANDLE,
+ ) -> _BOOL;
+ pub fn GetMonitorTechnologyType(
+ hMonitor: HANDLE,
+ pdtyDisplayTechnologyType: LPMC_DISPLAY_TECHNOLOGY_TYPE,
+ ) -> _BOOL;
+ pub fn GetMonitorBrightness(
+ hMonitor: HANDLE,
+ pdwMinimumBrightness: LPDWORD,
+ pdwCurrentBrightness: LPDWORD,
+ pdwMaximumBrightness: LPDWORD,
+ ) -> _BOOL;
+ pub fn GetMonitorContrast(
+ hMonitor: HANDLE,
+ pdwMinimumContrast: LPDWORD,
+ pdwCurrentContrast: LPDWORD,
+ pdwMaximumContrast: LPDWORD,
+ ) -> _BOOL;
+ pub fn GetMonitorColorTemperature(
+ hMonitor: HANDLE,
+ pctCurrentColorTemperature: LPMC_COLOR_TEMPERATURE,
+ ) -> _BOOL;
+ pub fn GetMonitorRedGreenOrBlueDrive(
+ hMonitor: HANDLE,
+ dtDriveType: MC_DRIVE_TYPE,
+ pdwMinimumDrive: LPDWORD,
+ pdwCurrentDrive: LPDWORD,
+ pdwMaximumDrive: LPDWORD,
+ ) -> _BOOL;
+ pub fn GetMonitorRedGreenOrBlueGain(
+ hMonitor: HANDLE,
+ gtGainType: MC_GAIN_TYPE,
+ pdwMinimumGain: LPDWORD,
+ pdwCurrentGain: LPDWORD,
+ pdwMaximumGain: LPDWORD,
+ ) -> _BOOL;
+ pub fn SetMonitorBrightness(
+ hMonitor: HANDLE,
+ dwNewBrightness: DWORD,
+ ) -> _BOOL;
+ pub fn SetMonitorContrast(
+ hMonitor: HANDLE,
+ dwNewContrast: DWORD,
+ ) -> _BOOL;
+ pub fn SetMonitorColorTemperature(
+ hMonitor: HANDLE,
+ ctCurrentColorTemperature: MC_COLOR_TEMPERATURE,
+ ) -> _BOOL;
+ pub fn SetMonitorRedGreenOrBlueDrive(
+ hMonitor: HANDLE,
+ dtDriveType: MC_DRIVE_TYPE,
+ dwNewDrive: DWORD,
+ ) -> _BOOL;
+ pub fn SetMonitorRedGreenOrBlueGain(
+ hMonitor: HANDLE,
+ gtGainType: MC_GAIN_TYPE,
+ dwNewGain: DWORD,
+ ) -> _BOOL;
+ pub fn DegaussMonitor(
+ hMonitor: HANDLE,
+ ) -> _BOOL;
+ pub fn GetMonitorDisplayAreaSize(
+ hMonitor: HANDLE,
+ stSizeType: MC_SIZE_TYPE,
+ pdwMinimumWidthOrHeight: LPDWORD,
+ pdwCurrentWidthOrHeight: LPDWORD,
+ pdwMaximumWidthOrHeight: LPDWORD,
+ ) -> _BOOL;
+ pub fn GetMonitorDisplayAreaPosition(
+ hMonitor: HANDLE,
+ ptPositionType: MC_POSITION_TYPE,
+ pdwMinimumPosition: LPDWORD,
+ pdwCurrentPosition: LPDWORD,
+ pdwMaximumPosition: LPDWORD,
+ ) -> _BOOL;
+ pub fn SetMonitorDisplayAreaSize(
+ hMonitor: HANDLE,
+ stSizeType: MC_SIZE_TYPE,
+ dwNewDisplayAreaWidthOrHeight: DWORD,
+ ) -> _BOOL;
+ pub fn SetMonitorDisplayAreaPosition(
+ hMonitor: HANDLE,
+ ptPositionType: MC_POSITION_TYPE,
+ dwNewPosition: DWORD,
+ ) -> _BOOL;
+ pub fn RestoreMonitorFactoryColorDefaults(
+ hMonitor: HANDLE,
+ ) -> _BOOL;
+ pub fn RestoreMonitorFactoryDefaults(
+ hMonitor: HANDLE,
+ ) -> _BOOL;
+}
diff --git a/vendor/winapi/src/um/http.rs b/vendor/winapi/src/um/http.rs
new file mode 100644
index 000000000..71d4109d0
--- /dev/null
+++ b/vendor/winapi/src/um/http.rs
@@ -0,0 +1,1096 @@
+// 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.
+//! HTTP API specification
+use shared::guiddef::GUID;
+use shared::minwindef::{DWORD, PUCHAR, PULONG, UCHAR, ULONG, USHORT};
+use shared::sspi::SECURITY_STATUS;
+use shared::ws2def::{PSOCKADDR, SOCKADDR_STORAGE};
+use um::minwinbase::{LPOVERLAPPED, PSECURITY_ATTRIBUTES};
+use um::winnt::{
+ ANYSIZE_ARRAY, BOOLEAN, HANDLE, PCHAR, PCSTR, PCWSTR, PHANDLE, PSECURITY_DESCRIPTOR, PVOID,
+ PWCHAR, PWSTR, ULARGE_INTEGER, ULONGLONG,
+};
+pub const HTTP_INITIALIZE_SERVER: ULONG = 0x00000001;
+pub const HTTP_INITIALIZE_CONFIG: ULONG = 0x00000002;
+pub const HTTP_DEMAND_CBT: ULONG = 0x00000004;
+ENUM!{enum HTTP_SERVER_PROPERTY {
+ HttpServerAuthenticationProperty,
+ HttpServerLoggingProperty,
+ HttpServerQosProperty,
+ HttpServerTimeoutsProperty,
+ HttpServerQueueLengthProperty,
+ HttpServerStateProperty,
+ HttpServer503VerbosityProperty,
+ HttpServerBindingProperty,
+ HttpServerExtendedAuthenticationProperty,
+ HttpServerListenEndpointProperty,
+ HttpServerChannelBindProperty,
+ HttpServerProtectionLevelProperty,
+}}
+pub type PHTTP_SERVER_PROPERTY = *mut HTTP_SERVER_PROPERTY;
+STRUCT!{struct HTTP_PROPERTY_FLAGS {
+ BitFields: ULONG,
+}}
+BITFIELD!{HTTP_PROPERTY_FLAGS BitFields: ULONG [
+ Present set_Present[0..1],
+]}
+pub type PHTTP_PROPERTY_FLAGS = *mut HTTP_PROPERTY_FLAGS;
+ENUM!{enum HTTP_ENABLED_STATE {
+ HttpEnabledStateActive,
+ HttpEnabledStateInactive,
+}}
+pub type PHTTP_ENABLED_STATE = *mut HTTP_ENABLED_STATE;
+STRUCT!{struct HTTP_STATE_INFO {
+ Flags: HTTP_PROPERTY_FLAGS,
+ State: HTTP_ENABLED_STATE,
+}}
+pub type PHTTP_STATE_INFO = *mut HTTP_STATE_INFO;
+ENUM!{enum HTTP_503_RESPONSE_VERBOSITY {
+ Http503ResponseVerbosityBasic,
+ Http503ResponseVerbosityLimited,
+ Http503ResponseVerbosityFull,
+}}
+pub type PHTTP_503_RESPONSE_VERBOSITY = *mut HTTP_503_RESPONSE_VERBOSITY;
+ENUM!{enum HTTP_QOS_SETTING_TYPE {
+ HttpQosSettingTypeBandwidth,
+ HttpQosSettingTypeConnectionLimit,
+ HttpQosSettingTypeFlowRate,
+}}
+pub type PHTTP_QOS_SETTING_TYPE = *mut HTTP_QOS_SETTING_TYPE;
+STRUCT!{struct HTTP_QOS_SETTING_INFO {
+ QosType: HTTP_QOS_SETTING_TYPE,
+ QosSetting: PVOID,
+}}
+pub type PHTTP_QOS_SETTING_INFO = *mut HTTP_QOS_SETTING_INFO;
+STRUCT!{struct HTTP_CONNECTION_LIMIT_INFO {
+ Flags: HTTP_PROPERTY_FLAGS,
+ MaxConnections: ULONG,
+}}
+pub type PHTTP_CONNECTION_LIMIT_INFO = *mut HTTP_CONNECTION_LIMIT_INFO;
+STRUCT!{struct HTTP_BANDWIDTH_LIMIT_INFO {
+ Flags: HTTP_PROPERTY_FLAGS,
+ MaxBandwidth: ULONG,
+}}
+pub type PHTTP_BANDWIDTH_LIMIT_INFO = *mut HTTP_BANDWIDTH_LIMIT_INFO;
+STRUCT!{struct HTTP_FLOWRATE_INFO {
+ Flags: HTTP_PROPERTY_FLAGS,
+ MaxBandwidth: ULONG,
+ MaxPeakBandwidth: ULONG,
+ BurstSize: ULONG,
+}}
+pub type PHTTP_FLOWRATE_INFO = *mut HTTP_FLOWRATE_INFO;
+pub const HTTP_MIN_ALLOWED_BANDWIDTH_THROTTLING_RATE: ULONG = 1024;
+pub const HTTP_LIMIT_INFINITE: ULONG = !0;
+ENUM!{enum HTTP_SERVICE_CONFIG_TIMEOUT_KEY {
+ IdleConnectionTimeout = 0,
+ HeaderWaitTimeout,
+}}
+pub type PHTTP_SERVICE_CONFIG_TIMEOUT_KEY = *mut HTTP_SERVICE_CONFIG_TIMEOUT_KEY;
+pub type HTTP_SERVICE_CONFIG_TIMEOUT_PARAM = USHORT;
+pub type PHTTP_SERVICE_CONFIG_TIMEOUT_PARAM = *mut USHORT;
+STRUCT!{struct HTTP_SERVICE_CONFIG_TIMEOUT_SET {
+ KeyDesc: HTTP_SERVICE_CONFIG_TIMEOUT_KEY,
+ ParamDesc: HTTP_SERVICE_CONFIG_TIMEOUT_PARAM,
+}}
+pub type PHTTP_SERVICE_CONFIG_TIMEOUT_SET = *mut HTTP_SERVICE_CONFIG_TIMEOUT_SET;
+STRUCT!{struct HTTP_TIMEOUT_LIMIT_INFO {
+ Flags: HTTP_PROPERTY_FLAGS,
+ EntityBody: USHORT,
+ DrainEntityBody: USHORT,
+ RequestQueue: USHORT,
+ IdleConnection: USHORT,
+ HeaderWait: USHORT,
+ MinSendRate: ULONG,
+}}
+pub type PHTTP_TIMEOUT_LIMIT_INFO = *mut HTTP_TIMEOUT_LIMIT_INFO;
+STRUCT!{struct HTTP_LISTEN_ENDPOINT_INFO {
+ Flags: HTTP_PROPERTY_FLAGS,
+ EnableSharing: BOOLEAN,
+}}
+pub type PHTTP_LISTEN_ENDPOINT_INFO = *mut HTTP_LISTEN_ENDPOINT_INFO;
+STRUCT!{struct HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS {
+ DomainNameLength: USHORT,
+ DomainName: PWSTR,
+ RealmLength: USHORT,
+ Realm: PWSTR,
+}}
+pub type PHTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS = *mut HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS;
+STRUCT!{struct HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS {
+ RealmLength: USHORT,
+ Realm: PWSTR,
+}}
+pub type PHTTP_SERVER_AUTHENTICATION_BASIC_PARAMS = *mut HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS;
+pub const HTTP_AUTH_ENABLE_BASIC: ULONG = 0x00000001;
+pub const HTTP_AUTH_ENABLE_DIGEST: ULONG = 0x00000002;
+pub const HTTP_AUTH_ENABLE_NTLM: ULONG = 0x00000004;
+pub const HTTP_AUTH_ENABLE_NEGOTIATE: ULONG = 0x00000008;
+pub const HTTP_AUTH_ENABLE_KERBEROS: ULONG = 0x00000010;
+pub const HTTP_AUTH_ENABLE_ALL: ULONG = HTTP_AUTH_ENABLE_BASIC | HTTP_AUTH_ENABLE_DIGEST |
+ HTTP_AUTH_ENABLE_NTLM | HTTP_AUTH_ENABLE_NEGOTIATE | HTTP_AUTH_ENABLE_KERBEROS;
+pub const HTTP_AUTH_EX_FLAG_ENABLE_KERBEROS_CREDENTIAL_CACHING: UCHAR = 0x01;
+pub const HTTP_AUTH_EX_FLAG_CAPTURE_CREDENTIAL: UCHAR = 0x02;
+STRUCT!{struct HTTP_SERVER_AUTHENTICATION_INFO {
+ Flags: HTTP_PROPERTY_FLAGS,
+ AuthSchemes: ULONG,
+ ReceiveMutualAuth: BOOLEAN,
+ ReceiveContextHandle: BOOLEAN,
+ DisableNTLMCredentialCaching: BOOLEAN,
+ ExFlags: UCHAR,
+ DigestParams: HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS,
+ BasicParams: HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS,
+}}
+pub type PHTTP_SERVER_AUTHENTICATION_INFO = *mut HTTP_SERVER_AUTHENTICATION_INFO;
+ENUM!{enum HTTP_SERVICE_BINDING_TYPE {
+ HttpServiceBindingTypeNone = 0,
+ HttpServiceBindingTypeW,
+ HttpServiceBindingTypeA,
+}}
+STRUCT!{struct HTTP_SERVICE_BINDING_BASE {
+ Type: HTTP_SERVICE_BINDING_TYPE,
+}}
+pub type PHTTP_SERVICE_BINDING_BASE = *mut HTTP_SERVICE_BINDING_BASE;
+STRUCT!{struct HTTP_SERVICE_BINDING_A {
+ Base: HTTP_SERVICE_BINDING_BASE,
+ Buffer: PCHAR,
+ BufferSize: ULONG,
+}}
+pub type PHTTP_SERVICE_BINDING_A = *mut HTTP_SERVICE_BINDING_A;
+STRUCT!{struct HTTP_SERVICE_BINDING_W {
+ Base: HTTP_SERVICE_BINDING_BASE,
+ Buffer: PWCHAR,
+ BufferSize: ULONG,
+}}
+pub type PHTTP_SERVICE_BINDING_W = *mut HTTP_SERVICE_BINDING_W;
+ENUM!{enum HTTP_AUTHENTICATION_HARDENING_LEVELS {
+ HttpAuthenticationHardeningLegacy = 0,
+ HttpAuthenticationHardeningMedium,
+ HttpAuthenticationHardeningStrict,
+}}
+pub const HTTP_CHANNEL_BIND_PROXY: ULONG = 0x1;
+pub const HTTP_CHANNEL_BIND_PROXY_COHOSTING: ULONG = 0x20;
+pub const HTTP_CHANNEL_BIND_NO_SERVICE_NAME_CHECK: ULONG = 0x2;
+pub const HTTP_CHANNEL_BIND_DOTLESS_SERVICE: ULONG = 0x4;
+pub const HTTP_CHANNEL_BIND_SECURE_CHANNEL_TOKEN: ULONG = 0x8;
+pub const HTTP_CHANNEL_BIND_CLIENT_SERVICE: ULONG = 0x10;
+STRUCT!{struct HTTP_CHANNEL_BIND_INFO {
+ Hardening: HTTP_AUTHENTICATION_HARDENING_LEVELS,
+ Flags: ULONG,
+ ServiceNames: *mut PHTTP_SERVICE_BINDING_BASE,
+ NumberOfServiceNames: ULONG,
+}}
+pub type PHTTP_CHANNEL_BIND_INFO = *mut HTTP_CHANNEL_BIND_INFO;
+STRUCT!{struct HTTP_REQUEST_CHANNEL_BIND_STATUS {
+ ServiceName: PHTTP_SERVICE_BINDING_BASE,
+ ChannelToken: PUCHAR,
+ ChannelTokenSize: ULONG,
+ Flags: ULONG,
+}}
+pub type PHTTP_REQUEST_CHANNEL_BIND_STATUS = *mut HTTP_REQUEST_CHANNEL_BIND_STATUS;
+pub const HTTP_LOG_FIELD_DATE: ULONG = 0x00000001;
+pub const HTTP_LOG_FIELD_TIME: ULONG = 0x00000002;
+pub const HTTP_LOG_FIELD_CLIENT_IP: ULONG = 0x00000004;
+pub const HTTP_LOG_FIELD_USER_NAME: ULONG = 0x00000008;
+pub const HTTP_LOG_FIELD_SITE_NAME: ULONG = 0x00000010;
+pub const HTTP_LOG_FIELD_COMPUTER_NAME: ULONG = 0x00000020;
+pub const HTTP_LOG_FIELD_SERVER_IP: ULONG = 0x00000040;
+pub const HTTP_LOG_FIELD_METHOD: ULONG = 0x00000080;
+pub const HTTP_LOG_FIELD_URI_STEM: ULONG = 0x00000100;
+pub const HTTP_LOG_FIELD_URI_QUERY: ULONG = 0x00000200;
+pub const HTTP_LOG_FIELD_STATUS: ULONG = 0x00000400;
+pub const HTTP_LOG_FIELD_WIN32_STATUS: ULONG = 0x00000800;
+pub const HTTP_LOG_FIELD_BYTES_SENT: ULONG = 0x00001000;
+pub const HTTP_LOG_FIELD_BYTES_RECV: ULONG = 0x00002000;
+pub const HTTP_LOG_FIELD_TIME_TAKEN: ULONG = 0x00004000;
+pub const HTTP_LOG_FIELD_SERVER_PORT: ULONG = 0x00008000;
+pub const HTTP_LOG_FIELD_USER_AGENT: ULONG = 0x00010000;
+pub const HTTP_LOG_FIELD_COOKIE: ULONG = 0x00020000;
+pub const HTTP_LOG_FIELD_REFERER: ULONG = 0x00040000;
+pub const HTTP_LOG_FIELD_VERSION: ULONG = 0x00080000;
+pub const HTTP_LOG_FIELD_HOST: ULONG = 0x00100000;
+pub const HTTP_LOG_FIELD_SUB_STATUS: ULONG = 0x00200000;
+pub const HTTP_LOG_FIELD_CLIENT_PORT: ULONG = 0x00400000;
+pub const HTTP_LOG_FIELD_URI: ULONG = 0x00800000;
+pub const HTTP_LOG_FIELD_SITE_ID: ULONG = 0x01000000;
+pub const HTTP_LOG_FIELD_REASON: ULONG = 0x02000000;
+pub const HTTP_LOG_FIELD_QUEUE_NAME: ULONG = 0x04000000;
+ENUM!{enum HTTP_LOGGING_TYPE {
+ HttpLoggingTypeW3C,
+ HttpLoggingTypeIIS,
+ HttpLoggingTypeNCSA,
+ HttpLoggingTypeRaw,
+}}
+ENUM!{enum HTTP_LOGGING_ROLLOVER_TYPE {
+ HttpLoggingRolloverSize,
+ HttpLoggingRolloverDaily,
+ HttpLoggingRolloverWeekly,
+ HttpLoggingRolloverMonthly,
+ HttpLoggingRolloverHourly,
+}}
+pub const HTTP_MIN_ALLOWED_LOG_FILE_ROLLOVER_SIZE: ULONG = 1 * 1024 * 1024;
+pub const HTTP_LOGGING_FLAG_LOCAL_TIME_ROLLOVER: ULONG = 0x00000001;
+pub const HTTP_LOGGING_FLAG_USE_UTF8_CONVERSION: ULONG = 0x00000002;
+pub const HTTP_LOGGING_FLAG_LOG_ERRORS_ONLY: ULONG = 0x00000004;
+pub const HTTP_LOGGING_FLAG_LOG_SUCCESS_ONLY: ULONG = 0x00000008;
+STRUCT!{struct HTTP_LOGGING_INFO {
+ Flags: HTTP_PROPERTY_FLAGS,
+ LoggingFlags: ULONG,
+ SoftwareName: PCWSTR,
+ SoftwareNameLength: USHORT,
+ DirectoryNameLength: USHORT,
+ DirectoryName: PCWSTR,
+ Format: HTTP_LOGGING_TYPE,
+ Fields: ULONG,
+ pExtFields: PVOID,
+ NumOfExtFields: USHORT,
+ MaxRecordSize: USHORT,
+ RolloverType: HTTP_LOGGING_ROLLOVER_TYPE,
+ RolloverSize: ULONG,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+}}
+pub type PHTTP_LOGGING_INFO = *mut HTTP_LOGGING_INFO;
+STRUCT!{struct HTTP_BINDING_INFO {
+ Flags: HTTP_PROPERTY_FLAGS,
+ RequestQueueHandle: HANDLE,
+}}
+pub type PHTTP_BINDING_INFO = *mut HTTP_BINDING_INFO;
+ENUM!{enum HTTP_PROTECTION_LEVEL_TYPE {
+ HttpProtectionLevelUnrestricted,
+ HttpProtectionLevelEdgeRestricted,
+ HttpProtectionLevelRestricted,
+}}
+pub type PHTTP_PROTECTION_LEVEL_TYPE = *mut HTTP_PROTECTION_LEVEL_TYPE;
+STRUCT!{struct HTTP_PROTECTION_LEVEL_INFO {
+ Flags: HTTP_PROPERTY_FLAGS,
+ Level: HTTP_PROTECTION_LEVEL_TYPE,
+}}
+pub type PHTTP_PROTECTION_LEVEL_INFO = *mut HTTP_PROTECTION_LEVEL_INFO;
+pub const HTTP_CREATE_REQUEST_QUEUE_FLAG_OPEN_EXISTING: ULONG = 0x00000001;
+pub const HTTP_CREATE_REQUEST_QUEUE_FLAG_CONTROLLER: ULONG = 0x00000002;
+pub const HTTP_RECEIVE_REQUEST_FLAG_COPY_BODY: ULONG = 0x00000001;
+pub const HTTP_RECEIVE_REQUEST_FLAG_FLUSH_BODY: ULONG = 0x00000002;
+pub const HTTP_RECEIVE_REQUEST_ENTITY_BODY_FLAG_FILL_BUFFER: ULONG = 0x00000001;
+pub const HTTP_SEND_RESPONSE_FLAG_DISCONNECT: ULONG = 0x00000001;
+pub const HTTP_SEND_RESPONSE_FLAG_MORE_DATA: ULONG = 0x00000002;
+pub const HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA: ULONG = 0x00000004;
+pub const HTTP_SEND_RESPONSE_FLAG_ENABLE_NAGLING: ULONG = 0x00000008;
+pub const HTTP_SEND_RESPONSE_FLAG_PROCESS_RANGES: ULONG = 0x00000020;
+pub const HTTP_SEND_RESPONSE_FLAG_OPAQUE: ULONG = 0x00000040;
+pub const HTTP_FLUSH_RESPONSE_FLAG_RECURSIVE: ULONG = 0x00000001;
+pub type HTTP_OPAQUE_ID = ULONGLONG;
+pub type PHTTP_OPAQUE_ID = *mut ULONGLONG;
+pub type HTTP_REQUEST_ID = HTTP_OPAQUE_ID;
+pub type PHTTP_REQUEST_ID = *mut HTTP_OPAQUE_ID;
+pub type HTTP_CONNECTION_ID = HTTP_OPAQUE_ID;
+pub type PHTTP_CONNECTION_ID = *mut HTTP_OPAQUE_ID;
+pub type HTTP_RAW_CONNECTION_ID = HTTP_OPAQUE_ID;
+pub type PHTTP_RAW_CONNECTION_ID = *mut HTTP_OPAQUE_ID;
+pub type HTTP_URL_GROUP_ID = HTTP_OPAQUE_ID;
+pub type PHTTP_URL_GROUP_ID = *mut HTTP_OPAQUE_ID;
+pub type HTTP_SERVER_SESSION_ID = HTTP_OPAQUE_ID;
+pub type PHTTP_SERVER_SESSION_ID = *mut HTTP_OPAQUE_ID;
+pub const HTTP_BYTE_RANGE_TO_EOF: ULONGLONG = !0;
+STRUCT!{struct HTTP_BYTE_RANGE {
+ StartingOffset: ULARGE_INTEGER,
+ Length: ULARGE_INTEGER,
+}}
+pub type PHTTP_BYTE_RANGE = *mut HTTP_BYTE_RANGE;
+STRUCT!{struct HTTP_VERSION {
+ MajorVersion: USHORT,
+ MinorVersion: USHORT,
+}}
+pub type PHTTP_VERSION = *mut HTTP_VERSION;
+pub const HTTP_VERSION_UNKNOWN: HTTP_VERSION = HTTP_VERSION { MajorVersion: 0, MinorVersion: 0 };
+pub const HTTP_VERSION_0_9: HTTP_VERSION = HTTP_VERSION { MajorVersion: 0, MinorVersion: 9 };
+pub const HTTP_VERSION_1_0: HTTP_VERSION = HTTP_VERSION { MajorVersion: 1, MinorVersion: 0 };
+pub const HTTP_VERSION_1_1: HTTP_VERSION = HTTP_VERSION { MajorVersion: 1, MinorVersion: 1 };
+#[inline]
+pub fn HTTP_SET_VERSION(mut version: HTTP_VERSION, major: USHORT, minor: USHORT) {
+ version.MajorVersion = major;
+ version.MinorVersion = minor;
+}
+#[inline]
+pub fn HTTP_EQUAL_VERSION(version: HTTP_VERSION, major: USHORT, minor: USHORT) -> bool {
+ version.MajorVersion == major && version.MinorVersion == minor
+}
+#[inline]
+pub fn HTTP_GREATER_VERSION(version: HTTP_VERSION, major: USHORT, minor: USHORT) -> bool {
+ version.MajorVersion > major || (version.MajorVersion == major && version.MinorVersion > minor)
+}
+#[inline]
+pub fn HTTP_LESS_VERSION(version: HTTP_VERSION, major: USHORT, minor: USHORT) -> bool {
+ version.MajorVersion < major || (version.MajorVersion == major && version.MinorVersion < minor)
+}
+#[inline]
+pub fn HTTP_NOT_EQUAL_VERSION(version: HTTP_VERSION, major: USHORT, minor: USHORT) -> bool {
+ !HTTP_EQUAL_VERSION(version, major, minor)
+}
+#[inline]
+pub fn HTTP_GREATER_EQUAL_VERSION(version: HTTP_VERSION, major: USHORT, minor: USHORT) -> bool {
+ !HTTP_LESS_VERSION(version, major, minor)
+}
+#[inline]
+pub fn HTTP_LESS_EQUAL_VERSION(version: HTTP_VERSION, major: USHORT, minor: USHORT) -> bool {
+ !HTTP_GREATER_VERSION(version, major, minor)
+}
+ENUM!{enum HTTP_VERB {
+ HttpVerbUnparsed,
+ HttpVerbUnknown,
+ HttpVerbInvalid,
+ HttpVerbOPTIONS,
+ HttpVerbGET,
+ HttpVerbHEAD,
+ HttpVerbPOST,
+ HttpVerbPUT,
+ HttpVerbDELETE,
+ HttpVerbTRACE,
+ HttpVerbCONNECT,
+ HttpVerbTRACK,
+ HttpVerbMOVE,
+ HttpVerbCOPY,
+ HttpVerbPROPFIND,
+ HttpVerbPROPPATCH,
+ HttpVerbMKCOL,
+ HttpVerbLOCK,
+ HttpVerbUNLOCK,
+ HttpVerbSEARCH,
+ HttpVerbMaximum,
+}}
+pub type PHTTP_VERB = *mut HTTP_VERB;
+ENUM!{enum HTTP_HEADER_ID {
+ HttpHeaderCacheControl = 0,
+ HttpHeaderConnection = 1,
+ HttpHeaderDate = 2,
+ HttpHeaderKeepAlive = 3,
+ HttpHeaderPragma = 4,
+ HttpHeaderTrailer = 5,
+ HttpHeaderTransferEncoding = 6,
+ HttpHeaderUpgrade = 7,
+ HttpHeaderVia = 8,
+ HttpHeaderWarning = 9,
+ HttpHeaderAllow = 10,
+ HttpHeaderContentLength = 11,
+ HttpHeaderContentType = 12,
+ HttpHeaderContentEncoding = 13,
+ HttpHeaderContentLanguage = 14,
+ HttpHeaderContentLocation = 15,
+ HttpHeaderContentMd5 = 16,
+ HttpHeaderContentRange = 17,
+ HttpHeaderExpires = 18,
+ HttpHeaderLastModified = 19,
+ HttpHeaderAccept = 20,
+ HttpHeaderAcceptCharset = 21,
+ HttpHeaderAcceptEncoding = 22,
+ HttpHeaderAcceptLanguage = 23,
+ HttpHeaderAuthorization = 24,
+ HttpHeaderCookie = 25,
+ HttpHeaderExpect = 26,
+ HttpHeaderFrom = 27,
+ HttpHeaderHost = 28,
+ HttpHeaderIfMatch = 29,
+ HttpHeaderIfModifiedSince = 30,
+ HttpHeaderIfNoneMatch = 31,
+ HttpHeaderIfRange = 32,
+ HttpHeaderIfUnmodifiedSince = 33,
+ HttpHeaderMaxForwards = 34,
+ HttpHeaderProxyAuthorization = 35,
+ HttpHeaderReferer = 36,
+ HttpHeaderRange = 37,
+ HttpHeaderTe = 38,
+ HttpHeaderTranslate = 39,
+ HttpHeaderUserAgent = 40,
+ HttpHeaderRequestMaximum = 41,
+ HttpHeaderAcceptRanges = 20,
+ HttpHeaderAge = 21,
+ HttpHeaderEtag = 22,
+ HttpHeaderLocation = 23,
+ HttpHeaderProxyAuthenticate = 24,
+ HttpHeaderRetryAfter = 25,
+ HttpHeaderServer = 26,
+ HttpHeaderSetCookie = 27,
+ HttpHeaderVary = 28,
+ HttpHeaderWwwAuthenticate = 29,
+ HttpHeaderResponseMaximum = 30,
+ HttpHeaderMaximum = 41,
+}}
+pub type PHTTP_HEADER_ID = *mut HTTP_HEADER_ID;
+STRUCT!{struct HTTP_KNOWN_HEADER {
+ RawValueLength: USHORT,
+ pRawValue: PCSTR,
+}}
+pub type PHTTP_KNOWN_HEADER = *mut HTTP_KNOWN_HEADER;
+STRUCT!{struct HTTP_UNKNOWN_HEADER {
+ NameLength: USHORT,
+ RawValueLength: USHORT,
+ pName: PCSTR,
+ pRawValue: PCSTR,
+}}
+pub type PHTTP_UNKNOWN_HEADER = *mut HTTP_UNKNOWN_HEADER;
+ENUM!{enum HTTP_LOG_DATA_TYPE {
+ HttpLogDataTypeFields = 0,
+}}
+pub type PHTTP_LOG_DATA_TYPE = *mut HTTP_LOG_DATA_TYPE;
+STRUCT!{struct HTTP_LOG_DATA {
+ Type: HTTP_LOG_DATA_TYPE,
+}}
+pub type PHTTP_LOG_DATA = *mut HTTP_LOG_DATA;
+STRUCT!{struct HTTP_LOG_FIELDS_DATA {
+ Base: HTTP_LOG_DATA,
+ UserNameLength: USHORT,
+ UriStemLength: USHORT,
+ ClientIpLength: USHORT,
+ ServerNameLength: USHORT,
+ ServiceNameLength: USHORT,
+ ServerIpLength: USHORT,
+ MethodLength: USHORT,
+ UriQueryLength: USHORT,
+ HostLength: USHORT,
+ UserAgentLength: USHORT,
+ CookieLength: USHORT,
+ ReferrerLength: USHORT,
+ UserName: PWCHAR,
+ UriStem: PWCHAR,
+ ClientIp: PCHAR,
+ ServerName: PCHAR,
+ ServiceName: PCHAR,
+ ServerIp: PCHAR,
+ Method: PCHAR,
+ UriQuery: PCHAR,
+ Host: PCHAR,
+ UserAgent: PCHAR,
+ Cookie: PCHAR,
+ Referrer: PCHAR,
+ ServerPort: USHORT,
+ ProtocolStatus: USHORT,
+ Win32Status: ULONG,
+ MethodNum: HTTP_VERB,
+ SubStatus: USHORT,
+}}
+pub type PHTTP_LOG_FIELDS_DATA = *mut HTTP_LOG_FIELDS_DATA;
+ENUM!{enum HTTP_DATA_CHUNK_TYPE {
+ HttpDataChunkFromMemory,
+ HttpDataChunkFromFileHandle,
+ HttpDataChunkFromFragmentCache,
+ HttpDataChunkFromFragmentCacheEx,
+ HttpDataChunkMaximum,
+}}
+pub type PHTTP_DATA_CHUNK_TYPE = *mut HTTP_DATA_CHUNK_TYPE;
+STRUCT!{struct HTTP_DATA_CHUNK_FromMemory {
+ pBuffer: PVOID,
+ BufferLength: ULONG,
+}}
+STRUCT!{struct HTTP_DATA_CHUNK_FromFileHandle {
+ ByteRange: HTTP_BYTE_RANGE,
+ FileHandle: HANDLE,
+}}
+STRUCT!{struct HTTP_DATA_CHUNK_FromFragmentCache {
+ FragmentNameLength: USHORT,
+ pFragmentName: PCWSTR,
+}}
+STRUCT!{struct HTTP_DATA_CHUNK_FromFragmentCacheEx {
+ ByteRange: HTTP_BYTE_RANGE,
+ pFragmentName: PCWSTR,
+}}
+UNION!{union HTTP_DATA_CHUNK_u {
+ [u64; 3],
+ FromMemory FromMemory_mut: HTTP_DATA_CHUNK_FromMemory,
+ FromFileHandle FromFileHandle_mut: HTTP_DATA_CHUNK_FromFileHandle,
+ FromFragmentCache FromFragmentCache_mut: HTTP_DATA_CHUNK_FromFragmentCache,
+ FromFragmentCacheEx FromFragmentCacheEx_mut: HTTP_DATA_CHUNK_FromFragmentCacheEx,
+}}
+STRUCT!{struct HTTP_DATA_CHUNK {
+ DataChunkType: HTTP_DATA_CHUNK_TYPE,
+ u: HTTP_DATA_CHUNK_u,
+}}
+pub type PHTTP_DATA_CHUNK = *mut HTTP_DATA_CHUNK;
+STRUCT!{struct HTTP_REQUEST_HEADERS {
+ UnknownHeaderCount: USHORT,
+ pUnknownHeaders: PHTTP_UNKNOWN_HEADER,
+ TrailerCount: USHORT,
+ pTrailers: PHTTP_UNKNOWN_HEADER,
+ KnownHeaders: [HTTP_KNOWN_HEADER; 41], // FIXME HttpHeaderRequestMaximum
+}}
+pub type PHTTP_REQUEST_HEADERS = *mut HTTP_REQUEST_HEADERS;
+STRUCT!{struct HTTP_RESPONSE_HEADERS {
+ UnknownHeaderCount: USHORT,
+ pUnknownHeaders: PHTTP_UNKNOWN_HEADER,
+ TrailerCount: USHORT,
+ pTrailers: PHTTP_UNKNOWN_HEADER,
+ KnownHeaders: [HTTP_KNOWN_HEADER; 30], // FIXME HttpHeaderResponseMaximum
+}}
+pub type PHTTP_RESPONSE_HEADERS = *mut HTTP_RESPONSE_HEADERS;
+STRUCT!{struct HTTP_TRANSPORT_ADDRESS {
+ pRemoteAddress: PSOCKADDR,
+ pLocalAddress: PSOCKADDR,
+}}
+pub type PHTTP_TRANSPORT_ADDRESS = *mut HTTP_TRANSPORT_ADDRESS;
+STRUCT!{struct HTTP_COOKED_URL {
+ FullUrlLength: USHORT,
+ HostLength: USHORT,
+ AbsPathLength: USHORT,
+ QueryStringLength: USHORT,
+ pFullUrl: PCWSTR,
+ pHost: PCWSTR,
+ pAbsPath: PCWSTR,
+ pQueryString: PCWSTR,
+}}
+pub type PHTTP_COOKED_URL = *mut HTTP_COOKED_URL;
+pub type HTTP_URL_CONTEXT = ULONGLONG;
+pub const HTTP_URL_FLAG_REMOVE_ALL: ULONG = 0x00000001;
+ENUM!{enum HTTP_AUTH_STATUS {
+ HttpAuthStatusSuccess,
+ HttpAuthStatusNotAuthenticated,
+ HttpAuthStatusFailure,
+}}
+pub type PHTTP_AUTH_STATUS = *mut HTTP_AUTH_STATUS;
+ENUM!{enum HTTP_REQUEST_AUTH_TYPE {
+ HttpRequestAuthTypeNone = 0,
+ HttpRequestAuthTypeBasic,
+ HttpRequestAuthTypeDigest,
+ HttpRequestAuthTypeNTLM,
+ HttpRequestAuthTypeNegotiate,
+ HttpRequestAuthTypeKerberos,
+}}
+pub type PHTTP_REQUEST_AUTH_TYPE = *mut HTTP_REQUEST_AUTH_TYPE;
+STRUCT!{struct HTTP_SSL_CLIENT_CERT_INFO {
+ CertFlags: ULONG,
+ CertEncodedSize: ULONG,
+ pCertEncoded: PUCHAR,
+ Token: HANDLE,
+ CertDeniedByMapper: BOOLEAN,
+}}
+pub type PHTTP_SSL_CLIENT_CERT_INFO = *mut HTTP_SSL_CLIENT_CERT_INFO;
+pub const HTTP_RECEIVE_SECURE_CHANNEL_TOKEN: ULONG = 0x1;
+STRUCT!{struct HTTP_SSL_INFO {
+ ServerCertKeySize: USHORT,
+ ConnectionKeySize: USHORT,
+ ServerCertIssuerSize: ULONG,
+ ServerCertSubjectSize: ULONG,
+ pServerCertIssuer: PCSTR,
+ pServerCertSubject: PCSTR,
+ pClientCertInfo: PHTTP_SSL_CLIENT_CERT_INFO,
+ SslClientCertNegotiated: ULONG,
+}}
+pub type PHTTP_SSL_INFO = *mut HTTP_SSL_INFO;
+ENUM!{enum HTTP_REQUEST_INFO_TYPE {
+ HttpRequestInfoTypeAuth,
+ HttpRequestInfoTypeChannelBind,
+}}
+STRUCT!{struct HTTP_REQUEST_INFO {
+ InfoType: HTTP_REQUEST_INFO_TYPE,
+ InfoLength: ULONG,
+ pInfo: PVOID,
+}}
+pub type PHTTP_REQUEST_INFO = *mut HTTP_REQUEST_INFO;
+pub const HTTP_REQUEST_AUTH_FLAG_TOKEN_FOR_CACHED_CRED: ULONG = 0x00000001;
+STRUCT!{struct HTTP_REQUEST_AUTH_INFO {
+ AuthStatus: HTTP_AUTH_STATUS,
+ SecStatus: SECURITY_STATUS,
+ Flags: ULONG,
+ AuthType: HTTP_REQUEST_AUTH_TYPE,
+ AccessToken: HANDLE,
+ ContextAttributes: ULONG,
+ PackedContextLength: ULONG,
+ PackedContextType: ULONG,
+ PackedContext: PVOID,
+ MutualAuthDataLength: ULONG,
+ pMutualAuthData: PCHAR,
+ PackageNameLength: USHORT,
+ pPackageName: PWSTR,
+}}
+pub type PHTTP_REQUEST_AUTH_INFO = *mut HTTP_REQUEST_AUTH_INFO;
+STRUCT!{struct HTTP_REQUEST_V1 {
+ Flags: ULONG,
+ ConnectionId: HTTP_CONNECTION_ID,
+ RequestId: HTTP_REQUEST_ID,
+ UrlContext: HTTP_URL_CONTEXT,
+ Version: HTTP_VERSION,
+ Verb: HTTP_VERB,
+ UnknownVerbLength: USHORT,
+ RawUrlLength: USHORT,
+ pUnknownVerb: PCSTR,
+ pRawUrl: PCSTR,
+ CookedUrl: HTTP_COOKED_URL,
+ Address: HTTP_TRANSPORT_ADDRESS,
+ Headers: HTTP_REQUEST_HEADERS,
+ BytesReceived: ULONGLONG,
+ EntityChunkCount: USHORT,
+ pEntityChunks: PHTTP_DATA_CHUNK,
+ RawConnectionId: HTTP_RAW_CONNECTION_ID,
+ pSslInfo: PHTTP_SSL_INFO,
+}}
+pub type PHTTP_REQUEST_V1 = *mut HTTP_REQUEST_V1;
+STRUCT!{struct HTTP_REQUEST_V2 {
+ Base: HTTP_REQUEST_V1,
+ RequestInfoCount: USHORT,
+ pRequestInfo: PHTTP_REQUEST_INFO,
+}}
+pub type PHTTP_REQUEST_V2 = *mut HTTP_REQUEST_V2;
+pub type HTTP_REQUEST = HTTP_REQUEST_V2;
+pub type PHTTP_REQUEST = *mut HTTP_REQUEST;
+pub const HTTP_REQUEST_FLAG_MORE_ENTITY_BODY_EXISTS: ULONG = 0x00000001;
+pub const HTTP_REQUEST_FLAG_IP_ROUTED: ULONG = 0x00000002;
+STRUCT!{struct HTTP_RESPONSE_V1 {
+ Flags: ULONG,
+ Version: HTTP_VERSION,
+ StatusCode: USHORT,
+ ReasonLength: USHORT,
+ pReason: PCSTR,
+ Headers: HTTP_RESPONSE_HEADERS,
+ EntityChunkCount: USHORT,
+ pEntityChunks: PHTTP_DATA_CHUNK,
+}}
+pub type PHTTP_RESPONSE_V1 = *mut HTTP_RESPONSE_V1;
+pub const HTTP_RESPONSE_FLAG_MULTIPLE_ENCODINGS_AVAILABLE: ULONG = 0x00000001;
+ENUM!{enum HTTP_RESPONSE_INFO_TYPE {
+ HttpResponseInfoTypeMultipleKnownHeaders,
+ HttpResponseInfoTypeAuthenticationProperty,
+ HttpResponseInfoTypeQoSProperty,
+ HttpResponseInfoTypeChannelBind,
+}}
+pub type PHTTP_RESPONSE_INFO_TYPE = *mut HTTP_RESPONSE_INFO_TYPE;
+STRUCT!{struct HTTP_RESPONSE_INFO {
+ Type: HTTP_RESPONSE_INFO_TYPE,
+ Length: ULONG,
+ pInfo: PVOID,
+}}
+pub type PHTTP_RESPONSE_INFO = *mut HTTP_RESPONSE_INFO;
+pub const HTTP_RESPONSE_INFO_FLAGS_PRESERVE_ORDER: ULONG = 0x00000001;
+STRUCT!{struct HTTP_MULTIPLE_KNOWN_HEADERS {
+ HeaderId: HTTP_HEADER_ID,
+ Flags: ULONG,
+ KnownHeaderCount: USHORT,
+ KnownHeaders: PHTTP_KNOWN_HEADER,
+}}
+pub type PHTTP_MULTIPLE_KNOWN_HEADERS = *mut HTTP_MULTIPLE_KNOWN_HEADERS;
+STRUCT!{struct HTTP_RESPONSE_V2 {
+ Base: HTTP_RESPONSE_V1,
+ ResponseInfoCount: USHORT,
+ pResponseInfo: PHTTP_RESPONSE_INFO,
+}}
+pub type PHTTP_RESPONSE_V2 = *mut HTTP_RESPONSE_V2;
+pub type HTTP_RESPONSE = HTTP_RESPONSE_V2;
+pub type PHTTP_RESPONSE = *mut HTTP_RESPONSE;
+STRUCT!{struct HTTPAPI_VERSION {
+ HttpApiMajorVersion: USHORT,
+ HttpApiMinorVersion: USHORT,
+}}
+pub type PHTTPAPI_VERSION = *mut HTTPAPI_VERSION;
+pub const HTTPAPI_VERSION_2: HTTPAPI_VERSION = HTTPAPI_VERSION {
+ HttpApiMajorVersion: 2,
+ HttpApiMinorVersion: 0,
+};
+pub const HTTPAPI_VERSION_1: HTTPAPI_VERSION = HTTPAPI_VERSION {
+ HttpApiMajorVersion: 1,
+ HttpApiMinorVersion: 0,
+};
+#[inline]
+pub fn HTTPAPI_EQUAL_VERSION(version: HTTPAPI_VERSION, major: USHORT, minor: USHORT) -> bool {
+ version.HttpApiMajorVersion == major && version.HttpApiMinorVersion == minor
+}
+#[inline]
+pub fn HTTPAPI_GREATER_VERSION(version: HTTPAPI_VERSION, major: USHORT, minor: USHORT) -> bool {
+ version.HttpApiMajorVersion > major ||
+ (version.HttpApiMajorVersion == major && version.HttpApiMinorVersion > minor)
+}
+#[inline]
+pub fn HTTPAPI_LESS_VERSION(version: HTTPAPI_VERSION, major: USHORT, minor: USHORT) -> bool {
+ version.HttpApiMajorVersion < major ||
+ (version.HttpApiMajorVersion == major && version.HttpApiMinorVersion < minor)
+}
+#[inline]
+pub fn HTTPAPI_VERSION_GREATER_OR_EQUAL(
+ version: HTTPAPI_VERSION,
+ major: USHORT,
+ minor: USHORT,
+) -> bool {
+ !HTTPAPI_LESS_VERSION(version, major, minor)
+}
+ENUM!{enum HTTP_CACHE_POLICY_TYPE {
+ HttpCachePolicyNocache,
+ HttpCachePolicyUserInvalidates,
+ HttpCachePolicyTimeToLive,
+ HttpCachePolicyMaximum,
+}}
+pub type PHTTP_CACHE_POLICY_TYPE = *mut HTTP_CACHE_POLICY_TYPE;
+STRUCT!{struct HTTP_CACHE_POLICY {
+ Policy: HTTP_CACHE_POLICY_TYPE,
+ SecondsToLive: ULONG,
+}}
+pub type PHTTP_CACHE_POLICY = *mut HTTP_CACHE_POLICY;
+ENUM!{enum HTTP_SERVICE_CONFIG_ID {
+ HttpServiceConfigIPListenList,
+ HttpServiceConfigSSLCertInfo,
+ HttpServiceConfigUrlAclInfo,
+ HttpServiceConfigTimeout,
+ HttpServiceConfigCache,
+ HttpServiceConfigSslSniCertInfo,
+ HttpServiceConfigSslCcsCertInfo,
+ HttpServiceConfigMax,
+}}
+pub type PHTTP_SERVICE_CONFIG_ID = *mut HTTP_SERVICE_CONFIG_ID;
+ENUM!{enum HTTP_SERVICE_CONFIG_QUERY_TYPE {
+ HttpServiceConfigQueryExact,
+ HttpServiceConfigQueryNext,
+ HttpServiceConfigQueryMax,
+}}
+pub type PHTTP_SERVICE_CONFIG_QUERY_TYPE = *mut HTTP_SERVICE_CONFIG_QUERY_TYPE;
+STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_KEY {
+ pIpPort: PSOCKADDR,
+}}
+pub type PHTTP_SERVICE_CONFIG_SSL_KEY = *mut HTTP_SERVICE_CONFIG_SSL_KEY;
+STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_SNI_KEY {
+ IpPort: SOCKADDR_STORAGE,
+ Host: PWSTR,
+}}
+pub type PHTTP_SERVICE_CONFIG_SSL_SNI_KEY = *mut HTTP_SERVICE_CONFIG_SSL_SNI_KEY;
+STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_CCS_KEY {
+ LocalAddress: SOCKADDR_STORAGE,
+}}
+pub type PHTTP_SERVICE_CONFIG_SSL_CCS_KEY = *mut HTTP_SERVICE_CONFIG_SSL_CCS_KEY;
+STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_PARAM {
+ SslHashLength: ULONG,
+ pSslHash: PVOID,
+ AppId: GUID,
+ pSslCertStoreName: PWSTR,
+ DefaultCertCheckMode: DWORD,
+ DefaultRevocationFreshnessTime: DWORD,
+ DefaultRevocationUrlRetrievalTimeout: DWORD,
+ pDefaultSslCtlIdentifier: PWSTR,
+ pDefaultSslCtlStoreName: PWSTR,
+ DefaultFlags: DWORD,
+}}
+pub type PHTTP_SERVICE_CONFIG_SSL_PARAM = *mut HTTP_SERVICE_CONFIG_SSL_PARAM;
+pub const HTTP_SERVICE_CONFIG_SSL_FLAG_USE_DS_MAPPER: DWORD = 0x00000001;
+pub const HTTP_SERVICE_CONFIG_SSL_FLAG_NEGOTIATE_CLIENT_CERT: DWORD = 0x00000002;
+pub const HTTP_SERVICE_CONFIG_SSL_FLAG_NO_RAW_FILTER: DWORD = 0x00000004;
+STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_SET {
+ KeyDesc: HTTP_SERVICE_CONFIG_SSL_KEY,
+ ParamDesc: HTTP_SERVICE_CONFIG_SSL_PARAM,
+}}
+pub type PHTTP_SERVICE_CONFIG_SSL_SET = *mut HTTP_SERVICE_CONFIG_SSL_SET;
+STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_SNI_SET {
+ KeyDesc: HTTP_SERVICE_CONFIG_SSL_SNI_KEY,
+ ParamDesc: HTTP_SERVICE_CONFIG_SSL_PARAM,
+}}
+pub type PHTTP_SERVICE_CONFIG_SSL_SNI_SET = *mut HTTP_SERVICE_CONFIG_SSL_SNI_SET;
+STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_CCS_SET {
+ KeyDesc: HTTP_SERVICE_CONFIG_SSL_CCS_KEY,
+ ParamDesc: HTTP_SERVICE_CONFIG_SSL_PARAM,
+}}
+pub type PHTTP_SERVICE_CONFIG_SSL_CCS_SET = *mut HTTP_SERVICE_CONFIG_SSL_CCS_SET;
+STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_QUERY {
+ QueryDesc: HTTP_SERVICE_CONFIG_QUERY_TYPE,
+ KeyDesc: HTTP_SERVICE_CONFIG_SSL_KEY,
+ dwToken: DWORD,
+}}
+pub type PHTTP_SERVICE_CONFIG_SSL_QUERY = *mut HTTP_SERVICE_CONFIG_SSL_QUERY;
+STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_SNI_QUERY {
+ QueryDesc: HTTP_SERVICE_CONFIG_QUERY_TYPE,
+ KeyDesc: HTTP_SERVICE_CONFIG_SSL_SNI_KEY,
+ dwToken: DWORD,
+}}
+pub type PHTTP_SERVICE_CONFIG_SSL_SNI_QUERY = *mut HTTP_SERVICE_CONFIG_SSL_SNI_QUERY;
+STRUCT!{struct HTTP_SERVICE_CONFIG_SSL_CCS_QUERY {
+ QueryDesc: HTTP_SERVICE_CONFIG_QUERY_TYPE,
+ KeyDesc: HTTP_SERVICE_CONFIG_SSL_CCS_KEY,
+ dwToken: DWORD,
+}}
+pub type PHTTP_SERVICE_CONFIG_SSL_CCS_QUERY = *mut HTTP_SERVICE_CONFIG_SSL_CCS_QUERY;
+STRUCT!{struct HTTP_SERVICE_CONFIG_IP_LISTEN_PARAM {
+ AddrLength: USHORT,
+ pAddress: PSOCKADDR,
+}}
+pub type PHTTP_SERVICE_CONFIG_IP_LISTEN_PARAM = *mut HTTP_SERVICE_CONFIG_IP_LISTEN_PARAM;
+STRUCT!{struct HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY {
+ AddrCount: ULONG,
+ AddrList: [SOCKADDR_STORAGE; ANYSIZE_ARRAY],
+}}
+pub type PHTTP_SERVICE_CONFIG_IP_LISTEN_QUERY = *mut HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY;
+STRUCT!{struct HTTP_SERVICE_CONFIG_URLACL_KEY {
+ pUrlPrefix: PWSTR,
+}}
+pub type PHTTP_SERVICE_CONFIG_URLACL_KEY = *mut HTTP_SERVICE_CONFIG_URLACL_KEY;
+STRUCT!{struct HTTP_SERVICE_CONFIG_URLACL_PARAM {
+ pStringSecurityDescriptor: PWSTR,
+}}
+pub type PHTTP_SERVICE_CONFIG_URLACL_PARAM = *mut HTTP_SERVICE_CONFIG_URLACL_PARAM;
+STRUCT!{struct HTTP_SERVICE_CONFIG_URLACL_SET {
+ KeyDesc: HTTP_SERVICE_CONFIG_URLACL_KEY,
+ ParamDesc: HTTP_SERVICE_CONFIG_URLACL_PARAM,
+}}
+pub type PHTTP_SERVICE_CONFIG_URLACL_SET = *mut HTTP_SERVICE_CONFIG_URLACL_SET;
+STRUCT!{struct HTTP_SERVICE_CONFIG_URLACL_QUERY {
+ QueryDesc: HTTP_SERVICE_CONFIG_QUERY_TYPE,
+ KeyDesc: HTTP_SERVICE_CONFIG_URLACL_KEY,
+ dwToken: DWORD,
+}}
+pub type PHTTP_SERVICE_CONFIG_URLACL_QUERY = *mut HTTP_SERVICE_CONFIG_URLACL_QUERY;
+ENUM!{enum HTTP_SERVICE_CONFIG_CACHE_KEY {
+ MaxCacheResponseSize = 0,
+ CacheRangeChunkSize,
+}}
+pub type PHTTP_SERVICE_CONFIG_CACHE_KEY = *mut HTTP_SERVICE_CONFIG_CACHE_KEY;
+pub type HTTP_SERVICE_CONFIG_CACHE_PARAM = ULONG;
+pub type PHTTP_SERVICE_CONFIG_CACHE_PARAM = *mut ULONG;
+STRUCT!{struct HTTP_SERVICE_CONFIG_CACHE_SET {
+ KeyDesc: HTTP_SERVICE_CONFIG_CACHE_KEY,
+ ParamDesc: HTTP_SERVICE_CONFIG_CACHE_PARAM,
+}}
+pub type PHTTP_SERVICE_CONFIG_CACHE_SET = *mut HTTP_SERVICE_CONFIG_CACHE_SET;
+pub const HTTP_NULL_ID: ULONGLONG = 0;
+#[inline]
+pub unsafe fn HTTP_IS_NULL_ID(pid: PHTTP_OPAQUE_ID) -> bool {
+ HTTP_NULL_ID == *pid
+}
+#[inline]
+pub unsafe fn HTTP_SET_NULL_ID(pid: PHTTP_OPAQUE_ID) {
+ *pid = HTTP_NULL_ID
+}
+extern "system" {
+ pub fn HttpInitialize(
+ Version: HTTPAPI_VERSION,
+ Flags: ULONG,
+ pReserved: PVOID,
+ ) -> ULONG;
+ pub fn HttpTerminate(
+ Flags: ULONG,
+ pReserved: PVOID,
+ ) -> ULONG;
+ pub fn HttpCreateHttpHandle(
+ pReqQueueHandle: PHANDLE,
+ Reserved: ULONG,
+ ) -> ULONG;
+ pub fn HttpCreateRequestQueue(
+ Version: HTTPAPI_VERSION,
+ pName: PCWSTR,
+ pSecurityAttributes: PSECURITY_ATTRIBUTES,
+ Flags: ULONG,
+ pReqQueueHandle: PHANDLE,
+ ) -> ULONG;
+ pub fn HttpCloseRequestQueue(
+ ReqQueueHandle: HANDLE,
+ ) -> ULONG;
+ pub fn HttpSetRequestQueueProperty(
+ Handle: HANDLE,
+ Property: HTTP_SERVER_PROPERTY,
+ pPropertyInformation: PVOID,
+ PropertyInformationLength: ULONG,
+ Reserved: ULONG,
+ pReserved: PVOID,
+ ) -> ULONG;
+ pub fn HttpQueryRequestQueueProperty(
+ Handle: HANDLE,
+ Property: HTTP_SERVER_PROPERTY,
+ pPropertyInformation: PVOID,
+ PropertyInformationLength: ULONG,
+ Reserved: ULONG,
+ pReturnLength: PULONG,
+ pReserved: PVOID,
+ ) -> ULONG;
+ pub fn HttpShutdownRequestQueue(
+ ReqQueueHandle: HANDLE,
+ ) -> ULONG;
+ pub fn HttpReceiveClientCertificate(
+ ReqQueueHandle: HANDLE,
+ ConnectionId: HTTP_CONNECTION_ID,
+ Flags: ULONG,
+ pSslClientCertInfo: PHTTP_SSL_CLIENT_CERT_INFO,
+ SslClientCertInfoSize: ULONG,
+ pBytesReceived: PULONG,
+ pOverlapped: LPOVERLAPPED,
+ ) -> ULONG;
+ pub fn HttpCreateServerSession(
+ Version: HTTPAPI_VERSION,
+ pServerSessionId: PHTTP_SERVER_SESSION_ID,
+ Reserved: ULONG,
+ ) -> ULONG;
+ pub fn HttpCloseServerSession(
+ ServerSessionId: HTTP_SERVER_SESSION_ID,
+ ) -> ULONG;
+ pub fn HttpQueryServerSessionProperty(
+ ServerSessionId: HTTP_SERVER_SESSION_ID,
+ Property: HTTP_SERVER_PROPERTY,
+ pPropertyInformation: PVOID,
+ PropertyInformationLength: ULONG,
+ pReturnLength: PULONG,
+ ) -> ULONG;
+ pub fn HttpSetServerSessionProperty(
+ ServerSessionId: HTTP_SERVER_SESSION_ID,
+ Property: HTTP_SERVER_PROPERTY,
+ pPropertyInformation: PVOID,
+ PropertyInformationLength: ULONG,
+ ) -> ULONG;
+ pub fn HttpAddUrl(
+ ReqQueueHandle: HANDLE,
+ pFullyQualifiedUrl: PCWSTR,
+ pReserved: PVOID,
+ ) -> ULONG;
+ pub fn HttpRemoveUrl(
+ ReqQueueHandle: HANDLE,
+ pFullyQualifiedUrl: PCWSTR,
+ ) -> ULONG;
+ pub fn HttpCreateUrlGroup(
+ ServerSessionId: HTTP_SERVER_SESSION_ID,
+ pUrlGroupId: PHTTP_URL_GROUP_ID,
+ Reserved: ULONG,
+ ) -> ULONG;
+ pub fn HttpCloseUrlGroup(
+ UrlGroupId: HTTP_URL_GROUP_ID,
+ ) -> ULONG;
+ pub fn HttpAddUrlToUrlGroup(
+ UrlGroupId: HTTP_URL_GROUP_ID,
+ pFullyQualifiedUrl: PCWSTR,
+ UrlContext: HTTP_URL_CONTEXT,
+ Reserved: ULONG,
+ ) -> ULONG;
+ pub fn HttpRemoveUrlFromUrlGroup(
+ UrlGroupId: HTTP_URL_GROUP_ID,
+ pFullyQualifiedUrl: PCWSTR,
+ Flags: ULONG,
+ ) -> ULONG;
+ pub fn HttpSetUrlGroupProperty(
+ UrlGroupId: HTTP_URL_GROUP_ID,
+ Property: HTTP_SERVER_PROPERTY,
+ pPropertyInformation: PVOID,
+ PropertyInformationLength: ULONG,
+ ) -> ULONG;
+ pub fn HttpQueryUrlGroupProperty(
+ UrlGroupId: HTTP_URL_GROUP_ID,
+ Property: HTTP_SERVER_PROPERTY,
+ pPropertyInformation: PVOID,
+ PropertyInformationLength: ULONG,
+ pReturnLength: PULONG,
+ ) -> ULONG;
+ pub fn HttpPrepareUrl(
+ Reserved: PVOID,
+ Flags: ULONG,
+ Url: PCWSTR,
+ PreparedUrl: *mut PWSTR,
+ ) -> ULONG;
+ pub fn HttpReceiveHttpRequest(
+ ReqQueueHandle: HANDLE,
+ RequestId: HTTP_REQUEST_ID,
+ Flags: ULONG,
+ pRequestBuffer: PHTTP_REQUEST,
+ RequestBufferLength: ULONG,
+ pBytesReturned: PULONG,
+ pOverlapped: LPOVERLAPPED,
+ ) -> ULONG;
+ pub fn HttpReceiveRequestEntityBody(
+ ReqQueueHandle: HANDLE,
+ RequestId: HTTP_REQUEST_ID,
+ Flags: ULONG,
+ pBuffer: PVOID,
+ EntityBufferLength: ULONG,
+ pBytesReturned: PULONG,
+ pOverlapped: LPOVERLAPPED,
+ ) -> ULONG;
+ pub fn HttpSendHttpResponse(
+ ReqQueueHandle: HANDLE,
+ RequestId: HTTP_REQUEST_ID,
+ Flags: ULONG,
+ pHttpResponse: PHTTP_RESPONSE,
+ pCachePolicy: PHTTP_CACHE_POLICY,
+ pBytesSent: PULONG,
+ pReserved1: PVOID,
+ Reserved2: ULONG,
+ pOverlapped: LPOVERLAPPED,
+ pLogData: PHTTP_LOG_DATA,
+ ) -> ULONG;
+ pub fn HttpSendResponseEntityBody(
+ ReqQueueHandle: HANDLE,
+ RequestId: HTTP_REQUEST_ID,
+ Flags: ULONG,
+ EntityChunkCount: USHORT,
+ pEntityChunks: PHTTP_DATA_CHUNK,
+ pBytesSent: PULONG,
+ pReserved1: PVOID,
+ Reserved2: ULONG,
+ pOverlapped: LPOVERLAPPED,
+ pLogData: PHTTP_LOG_DATA,
+ ) -> ULONG;
+ pub fn HttpWaitForDisconnect(
+ ReqQueueHandle: HANDLE,
+ ConnectionId: HTTP_CONNECTION_ID,
+ pOverlapped: LPOVERLAPPED,
+ ) -> ULONG;
+ pub fn HttpWaitForDisconnectEx(
+ ReqQueueHandle: HANDLE,
+ ConnectionId: HTTP_CONNECTION_ID,
+ Reserved: ULONG,
+ pOverlapped: LPOVERLAPPED,
+ ) -> ULONG;
+ pub fn HttpCancelHttpRequest(
+ ReqQueueHandle: HANDLE,
+ RequestId: HTTP_REQUEST_ID,
+ pOverlapped: LPOVERLAPPED,
+ ) -> ULONG;
+ pub fn HttpWaitForDemandStart(
+ ReqQueueHandle: HANDLE,
+ pOverlapped: LPOVERLAPPED,
+ ) -> ULONG;
+ pub fn HttpFlushResponseCache(
+ ReqQueueHandle: HANDLE,
+ pUrlPrefix: PCWSTR,
+ Flags: ULONG,
+ pOverlapped: LPOVERLAPPED,
+ ) -> ULONG;
+ pub fn HttpAddFragmentToCache(
+ ReqQueueHandle: HANDLE,
+ pUrlPrefix: PCWSTR,
+ pDataChunk: PHTTP_DATA_CHUNK,
+ pCachePolicy: PHTTP_CACHE_POLICY,
+ pOverlapped: LPOVERLAPPED,
+ ) -> ULONG;
+ pub fn HttpReadFragmentFromCache(
+ ReqQueueHandle: HANDLE,
+ pUrlPrefix: PCWSTR,
+ pByteRange: PHTTP_BYTE_RANGE,
+ pBuffer: PVOID,
+ BufferLength: ULONG,
+ pBytesRead: PULONG,
+ pOverlapped: LPOVERLAPPED,
+ ) -> ULONG;
+ pub fn HttpSetServiceConfiguration(
+ ServiceHandle: HANDLE,
+ ConfigId: HTTP_SERVICE_CONFIG_ID,
+ pConfigInformation: PVOID,
+ ConfigInformationLength: ULONG,
+ pOverlapped: LPOVERLAPPED,
+ ) -> ULONG;
+ pub fn HttpDeleteServiceConfiguration(
+ ServiceHandle: HANDLE,
+ ConfigId: HTTP_SERVICE_CONFIG_ID,
+ pConfigInformation: PVOID,
+ ConfigInformationLength: ULONG,
+ pOverlapped: LPOVERLAPPED,
+ ) -> ULONG;
+ pub fn HttpQueryServiceConfiguration(
+ ServiceHandle: HANDLE,
+ ConfigId: HTTP_SERVICE_CONFIG_ID,
+ pInput: PVOID,
+ InputLength: ULONG,
+ pOutput: PVOID,
+ OutputLength: ULONG,
+ pReturnLength: PULONG,
+ pOverlapped: LPOVERLAPPED,
+ ) -> ULONG;
+ pub fn HttpDeclarePush(
+ RequestQueueHandle: HANDLE,
+ RequestId: HTTP_REQUEST_ID,
+ Verb: HTTP_VERB,
+ Path: PCWSTR,
+ Query: PCSTR,
+ Headers: PHTTP_REQUEST_HEADERS,
+ ) -> ULONG;
+ pub fn HttpUpdateServiceConfiguration(
+ Handle: HANDLE,
+ ConfigId: HTTP_SERVICE_CONFIG_ID,
+ ConfigInfo: PVOID,
+ ConfigInfoLength: ULONG,
+ Overlapped: LPOVERLAPPED,
+ ) -> ULONG;
+}
diff --git a/vendor/winapi/src/um/imm.rs b/vendor/winapi/src/um/imm.rs
new file mode 100644
index 000000000..ddf4c3f2c
--- /dev/null
+++ b/vendor/winapi/src/um/imm.rs
@@ -0,0 +1,42 @@
+// 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 ctypes::c_uint;
+use shared::minwindef::{BOOL, DWORD, UINT};
+use shared::windef::{HWND, POINT, RECT};
+pub type LPUINT = *mut c_uint;
+STRUCT!{struct COMPOSITIONFORM {
+ dwStyle: DWORD,
+ ptCurrentPos: POINT,
+ rcArea: RECT,
+}}
+DECLARE_HANDLE!{HIMC, HIMC__}
+pub type LPCOMPOSITIONFORM = *mut COMPOSITIONFORM;
+extern "system" {
+ pub fn ImmGetContext(
+ hwnd: HWND,
+ ) -> HIMC;
+ pub fn ImmGetOpenStatus(
+ himc: HIMC,
+ ) -> BOOL;
+ pub fn ImmSetOpenStatus(
+ himc: HIMC,
+ fopen: BOOL,
+ ) -> BOOL;
+ pub fn ImmSetCompositionWindow(
+ himc: HIMC,
+ lpCompForm: LPCOMPOSITIONFORM,
+ ) -> BOOL;
+ pub fn ImmReleaseContext(
+ hwnd: HWND,
+ himc: HIMC,
+ ) -> BOOL;
+}
+pub const CFS_DEFAULT: UINT = 0x0000;
+pub const CFS_RECT: UINT = 0x0001;
+pub const CFS_POINT: UINT = 0x0002;
+pub const CFS_FORCE_POSITION: UINT = 0x0020;
+pub const CFS_CANDIDATEPOS: UINT = 0x0040;
+pub const CFS_EXCLUDE: UINT = 0x0080;
diff --git a/vendor/winapi/src/um/interlockedapi.rs b/vendor/winapi/src/um/interlockedapi.rs
new file mode 100644
index 000000000..17f656db9
--- /dev/null
+++ b/vendor/winapi/src/um/interlockedapi.rs
@@ -0,0 +1,31 @@
+// 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::minwindef::{ULONG, USHORT};
+use um::winnt::{PSLIST_ENTRY, PSLIST_HEADER};
+extern "system" {
+ pub fn InitializeSListHead(
+ ListHead: PSLIST_HEADER,
+ );
+ pub fn InterlockedPopEntrySList(
+ ListHead: PSLIST_HEADER,
+ ) -> PSLIST_ENTRY;
+ pub fn InterlockedPushEntrySList(
+ ListHead: PSLIST_HEADER,
+ ListEntry: PSLIST_ENTRY,
+ ) -> PSLIST_ENTRY;
+ pub fn InterlockedPushListSListEx(
+ ListHead: PSLIST_HEADER,
+ List: PSLIST_ENTRY,
+ ListEnd: PSLIST_ENTRY,
+ Count: ULONG,
+ ) -> PSLIST_ENTRY;
+ pub fn InterlockedFlushSList(
+ ListHead: PSLIST_HEADER,
+ ) -> PSLIST_ENTRY;
+ pub fn QueryDepthSList(
+ ListHead: PSLIST_HEADER,
+ ) -> USHORT;
+}
diff --git a/vendor/winapi/src/um/ioapiset.rs b/vendor/winapi/src/um/ioapiset.rs
new file mode 100644
index 000000000..b9b710964
--- /dev/null
+++ b/vendor/winapi/src/um/ioapiset.rs
@@ -0,0 +1,71 @@
+// 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::{PULONG_PTR, ULONG_PTR};
+use shared::minwindef::{BOOL, DWORD, LPDWORD, LPVOID, PULONG, ULONG};
+use um::minwinbase::{LPOVERLAPPED, LPOVERLAPPED_ENTRY};
+use um::winnt::HANDLE;
+extern "system" {
+ pub fn CreateIoCompletionPort(
+ FileHandle: HANDLE,
+ ExistingCompletionPort: HANDLE,
+ CompletionKey: ULONG_PTR,
+ NumberOfConcurrentThreads: DWORD,
+ ) -> HANDLE;
+ pub fn GetQueuedCompletionStatus(
+ CompletionPort: HANDLE,
+ lpNumberOfBytesTransferred: LPDWORD,
+ lpCompletionKey: PULONG_PTR,
+ lpOverlapped: *mut LPOVERLAPPED,
+ dwMilliseconds: DWORD,
+ ) -> BOOL;
+ pub fn GetQueuedCompletionStatusEx(
+ CompletionPort: HANDLE,
+ lpCompletionPortEntries: LPOVERLAPPED_ENTRY,
+ ulCount: ULONG,
+ ulNumEntriesRemoved: PULONG,
+ dwMilliseconds: DWORD,
+ fAlertable: BOOL,
+ ) -> BOOL;
+ pub fn PostQueuedCompletionStatus(
+ CompletionPort: HANDLE,
+ dwNumberOfBytesTransferred: DWORD,
+ dwCompletionKey: ULONG_PTR,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn DeviceIoControl(
+ hDevice: HANDLE,
+ dwIoControlCode: DWORD,
+ lpInBuffer: LPVOID,
+ nInBufferSize: DWORD,
+ lpOutBuffer: LPVOID,
+ nOutBufferSize: DWORD,
+ lpBytesReturned: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn GetOverlappedResult(
+ hFile: HANDLE,
+ lpOverlapped: LPOVERLAPPED,
+ lpNumberOfBytesTransferred: LPDWORD,
+ bWait: BOOL,
+ ) -> BOOL;
+ pub fn CancelIoEx(
+ hFile: HANDLE,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn CancelIo(
+ hFile: HANDLE,
+ ) -> BOOL;
+ pub fn GetOverlappedResultEx(
+ hFile: HANDLE,
+ lpOverlapped: LPOVERLAPPED,
+ lpNumberOfBytesTransferred: LPDWORD,
+ dwMilliseconds: DWORD,
+ bAlertable: BOOL,
+ ) -> BOOL;
+ pub fn CancelSynchronousIo(
+ hThread: HANDLE,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/ipexport.rs b/vendor/winapi/src/um/ipexport.rs
new file mode 100644
index 000000000..32511622c
--- /dev/null
+++ b/vendor/winapi/src/um/ipexport.rs
@@ -0,0 +1,174 @@
+// 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.
+// #include <winapifamily.h>
+// #include <in6addr.h>
+// #include <inaddr.h>
+use shared::basetsd::ULONG64;
+use shared::in6addr::in6_addr;
+use shared::ntdef::{INT, PUCHAR, PVOID, UCHAR, ULONG, USHORT, WCHAR};
+pub const MAX_ADAPTER_NAME: usize = 128;
+pub const MAX_OPT_SIZE: usize = 40;
+pub type IPAddr = ULONG;
+pub type IPMask = ULONG;
+pub type IP_STATUS = ULONG;
+pub type IPv6Addr = in6_addr;
+STRUCT!{struct IP_OPTION_INFORMATION {
+ Ttl: UCHAR,
+ Tos: UCHAR,
+ Flags: UCHAR,
+ OptionsSize: UCHAR,
+ OptionsData: PUCHAR,
+}}
+pub type PIP_OPTION_INFORMATION = *mut IP_OPTION_INFORMATION;
+#[cfg(target_arch = "x86_64")]
+STRUCT!{struct IP_OPTION_INFORMATION32 {
+ Ttl: UCHAR,
+ Tos: UCHAR,
+ Flags: UCHAR,
+ OptionsSize: UCHAR,
+ OptionsData: u32, // UCHAR * POINTER_32
+}}
+#[cfg(target_arch = "x86_64")]
+pub type PIP_OPTION_INFORMATION32 = *mut IP_OPTION_INFORMATION32;
+STRUCT!{struct ICMP_ECHO_REPLY {
+ Address: IPAddr,
+ Status: ULONG,
+ RoundTripTime: ULONG,
+ DataSize: USHORT,
+ Reserved: USHORT,
+ Data: PVOID,
+ Options: IP_OPTION_INFORMATION,
+}}
+pub type PICMP_ECHO_REPLY = *mut ICMP_ECHO_REPLY;
+#[cfg(target_arch = "x86_64")]
+STRUCT!{struct ICMP_ECHO_REPLY32 {
+ Address: IPAddr,
+ Status: ULONG,
+ RoundTripTime: ULONG,
+ DataSize: USHORT,
+ Reserved: USHORT,
+ Data: u32, // VOID * POINTER_32
+ Options: IP_OPTION_INFORMATION32,
+}}
+#[cfg(target_arch = "x86_64")]
+pub type PICMP_ECHO_REPLY32 = *mut ICMP_ECHO_REPLY32;
+STRUCT!{#[repr(packed)] struct IPV6_ADDRESS_EX {
+ sin6_port: USHORT,
+ sin6_flowinfo: ULONG,
+ sin6_addr: [USHORT; 8],
+ sin6_scope_id: ULONG,
+}}
+pub type PIPV6_ADDRESS_EX = *mut IPV6_ADDRESS_EX;
+// #include <packoff.h>
+STRUCT!{struct ICMPV6_ECHO_REPLY_LH {
+ Address: IPV6_ADDRESS_EX,
+ Status: ULONG,
+ RoundTripTime: INT,
+}}
+pub type PICMPV6_ECHO_REPLY_LH = *mut ICMPV6_ECHO_REPLY_LH;
+pub type ICMPV6_ECHO_REPLY = ICMPV6_ECHO_REPLY_LH;
+pub type PICMPV6_ECHO_REPLY = *mut ICMPV6_ECHO_REPLY;
+// #endif
+STRUCT!{struct ARP_SEND_REPLY {
+ DestAddress: IPAddr,
+ SrcAddress: IPAddr,
+}}
+pub type PARP_SEND_REPLY = *mut ARP_SEND_REPLY;
+STRUCT!{struct TCP_RESERVE_PORT_RANGE {
+ UpperRange: USHORT,
+ LowerRange: USHORT,
+}}
+pub type PTCP_RESERVE_PORT_RANGE = *mut TCP_RESERVE_PORT_RANGE;
+STRUCT!{struct IP_ADAPTER_INDEX_MAP {
+ Index: ULONG,
+ Name: [WCHAR; MAX_ADAPTER_NAME],
+}}
+pub type PIP_ADAPTER_INDEX_MAP = *mut IP_ADAPTER_INDEX_MAP;
+STRUCT!{struct IP_INTERFACE_INFO {
+ NumAdapters: ULONG,
+ Adapter: [IP_ADAPTER_INDEX_MAP; 1],
+}}
+pub type PIP_INTERFACE_INFO = *mut IP_INTERFACE_INFO;
+STRUCT!{struct IP_UNIDIRECTIONAL_ADAPTER_ADDRESS {
+ NumAdapters: ULONG,
+ Address: [IPAddr; 1],
+}}
+pub type PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS = *mut IP_UNIDIRECTIONAL_ADAPTER_ADDRESS;
+STRUCT!{struct IP_ADAPTER_ORDER_MAP {
+ NumAdapters: ULONG,
+ AdapterOrder: [ULONG; 1],
+}}
+pub type PIP_ADAPTER_ORDER_MAP = *mut IP_ADAPTER_ORDER_MAP;
+STRUCT!{struct IP_MCAST_COUNTER_INFO {
+ InMcastOctets: ULONG64,
+ OutMcastOctets: ULONG64,
+ InMcastPkts: ULONG64,
+ OutMcastPkts: ULONG64,
+}}
+pub type PIP_MCAST_COUNTER_INFO = *mut IP_MCAST_COUNTER_INFO;
+// IP_STATUS codes returned from IP APIs
+pub const IP_STATUS_BASE: IP_STATUS = 11000;
+pub const IP_SUCCESS: IP_STATUS = 0;
+pub const IP_BUF_TOO_SMALL: IP_STATUS = IP_STATUS_BASE + 1;
+pub const IP_DEST_NET_UNREACHABLE: IP_STATUS = IP_STATUS_BASE + 2;
+pub const IP_DEST_HOST_UNREACHABLE: IP_STATUS = IP_STATUS_BASE + 3;
+pub const IP_DEST_PROT_UNREACHABLE: IP_STATUS = IP_STATUS_BASE + 4;
+pub const IP_DEST_PORT_UNREACHABLE: IP_STATUS = IP_STATUS_BASE + 5;
+pub const IP_NO_RESOURCES: IP_STATUS = IP_STATUS_BASE + 6;
+pub const IP_BAD_OPTION: IP_STATUS = IP_STATUS_BASE + 7;
+pub const IP_HW_ERROR: IP_STATUS = IP_STATUS_BASE + 8;
+pub const IP_PACKET_TOO_BIG: IP_STATUS = IP_STATUS_BASE + 9;
+pub const IP_REQ_TIMED_OUT: IP_STATUS = IP_STATUS_BASE + 10;
+pub const IP_BAD_REQ: IP_STATUS = IP_STATUS_BASE + 11;
+pub const IP_BAD_ROUTE: IP_STATUS = IP_STATUS_BASE + 12;
+pub const IP_TTL_EXPIRED_TRANSIT: IP_STATUS = IP_STATUS_BASE + 13;
+pub const IP_TTL_EXPIRED_REASSEM: IP_STATUS = IP_STATUS_BASE + 14;
+pub const IP_PARAM_PROBLEM: IP_STATUS = IP_STATUS_BASE + 15;
+pub const IP_SOURCE_QUENCH: IP_STATUS = IP_STATUS_BASE + 16;
+pub const IP_OPTION_TOO_BIG: IP_STATUS = IP_STATUS_BASE + 17;
+pub const IP_BAD_DESTINATION: IP_STATUS = IP_STATUS_BASE + 18;
+pub const IP_DEST_NO_ROUTE: IP_STATUS = IP_STATUS_BASE + 2;
+pub const IP_DEST_ADDR_UNREACHABLE: IP_STATUS = IP_STATUS_BASE + 3;
+pub const IP_DEST_PROHIBITED: IP_STATUS = IP_STATUS_BASE + 4;
+pub const IP_HOP_LIMIT_EXCEEDED: IP_STATUS = IP_STATUS_BASE + 13;
+pub const IP_REASSEMBLY_TIME_EXCEEDED: IP_STATUS = IP_STATUS_BASE + 14;
+pub const IP_PARAMETER_PROBLEM: IP_STATUS = IP_STATUS_BASE + 15;
+pub const IP_DEST_UNREACHABLE: IP_STATUS = IP_STATUS_BASE + 40;
+pub const IP_TIME_EXCEEDED: IP_STATUS = IP_STATUS_BASE + 41;
+pub const IP_BAD_HEADER: IP_STATUS = IP_STATUS_BASE + 42;
+pub const IP_UNRECOGNIZED_NEXT_HEADER: IP_STATUS = IP_STATUS_BASE + 43;
+pub const IP_ICMP_ERROR: IP_STATUS = IP_STATUS_BASE + 44;
+pub const IP_DEST_SCOPE_MISMATCH: IP_STATUS = IP_STATUS_BASE + 45;
+pub const IP_ADDR_DELETED: IP_STATUS = IP_STATUS_BASE + 19;
+pub const IP_SPEC_MTU_CHANGE: IP_STATUS = IP_STATUS_BASE + 20;
+pub const IP_MTU_CHANGE: IP_STATUS = IP_STATUS_BASE + 21;
+pub const IP_UNLOAD: IP_STATUS = IP_STATUS_BASE + 22;
+pub const IP_ADDR_ADDED: IP_STATUS = IP_STATUS_BASE + 23;
+pub const IP_MEDIA_CONNECT: IP_STATUS = IP_STATUS_BASE + 24;
+pub const IP_MEDIA_DISCONNECT: IP_STATUS = IP_STATUS_BASE + 25;
+pub const IP_BIND_ADAPTER: IP_STATUS = IP_STATUS_BASE + 26;
+pub const IP_UNBIND_ADAPTER: IP_STATUS = IP_STATUS_BASE + 27;
+pub const IP_DEVICE_DOES_NOT_EXIST: IP_STATUS = IP_STATUS_BASE + 28;
+pub const IP_DUPLICATE_ADDRESS: IP_STATUS = IP_STATUS_BASE + 29;
+pub const IP_INTERFACE_METRIC_CHANGE: IP_STATUS = IP_STATUS_BASE + 30;
+pub const IP_RECONFIG_SECFLTR: IP_STATUS = IP_STATUS_BASE + 31;
+pub const IP_NEGOTIATING_IPSEC: IP_STATUS = IP_STATUS_BASE + 32;
+pub const IP_INTERFACE_WOL_CAPABILITY_CHANGE: IP_STATUS = IP_STATUS_BASE + 33;
+pub const IP_DUPLICATE_IPADD: IP_STATUS = IP_STATUS_BASE + 34;
+pub const IP_GENERAL_FAILURE: IP_STATUS = IP_STATUS_BASE + 50;
+pub const MAX_IP_STATUS: IP_STATUS = IP_GENERAL_FAILURE;
+pub const IP_PENDING: IP_STATUS = IP_STATUS_BASE + 255;
+pub const IP_FLAG_REVERSE: UCHAR = 0x1;
+pub const IP_FLAG_DF: UCHAR = 0x2;
+pub const IP_OPT_EOL: u8 = 0;
+pub const IP_OPT_NOP: u8 = 1;
+pub const IP_OPT_SECURITY: u8 = 0x82;
+pub const IP_OPT_LSRR: u8 = 0x83;
+pub const IP_OPT_SSRR: u8 = 0x89;
+pub const IP_OPT_RR: u8 = 0x7;
+pub const IP_OPT_TS: u8 = 0x44;
+pub const IP_OPT_SID: u8 = 0x88;
+pub const IP_OPT_ROUTER_ALERT: u8 = 0x94;
diff --git a/vendor/winapi/src/um/iphlpapi.rs b/vendor/winapi/src/um/iphlpapi.rs
new file mode 100644
index 000000000..926545b0d
--- /dev/null
+++ b/vendor/winapi/src/um/iphlpapi.rs
@@ -0,0 +1,521 @@
+// 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.
+// #include <iprtrmib.h>
+// #include <ipexport.h>
+// #include <iptypes.h>
+// #include <tcpestats.h>
+use shared::basetsd::{PULONG64, ULONG64};
+use shared::ifdef::NET_LUID;
+use shared::ifmib::{PMIB_IFROW, PMIB_IFTABLE};
+use shared::ipmib::{
+ PMIB_ICMP, PMIB_ICMP_EX, PMIB_IPADDRTABLE, PMIB_IPFORWARDROW, PMIB_IPFORWARDTABLE,
+ PMIB_IPNETROW, PMIB_IPNETTABLE, PMIB_IPSTATS
+};
+use shared::iprtrmib::{TCPIP_OWNER_MODULE_INFO_CLASS, TCP_TABLE_CLASS, UDP_TABLE_CLASS};
+use shared::minwindef::{BOOL, BYTE, DWORD, LPDWORD, PDWORD, PUCHAR, PULONG, UINT};
+use shared::ntdef::{
+ BOOLEAN, HANDLE, LPWSTR, PHANDLE, PVOID, PWSTR, ULONG, ULONGLONG, USHORT, WCHAR,
+};
+use shared::tcpestats::TCP_ESTATS_TYPE;
+use shared::tcpmib::{
+ PMIB_TCP6ROW, PMIB_TCP6ROW_OWNER_MODULE, PMIB_TCP6TABLE, PMIB_TCP6TABLE2, PMIB_TCPROW,
+ PMIB_TCPROW_OWNER_MODULE, PMIB_TCPSTATS, PMIB_TCPSTATS2, PMIB_TCPTABLE, PMIB_TCPTABLE2
+};
+use shared::udpmib::{
+ PMIB_UDP6ROW_OWNER_MODULE, PMIB_UDP6TABLE, PMIB_UDPROW_OWNER_MODULE, PMIB_UDPSTATS,
+ PMIB_UDPSTATS2, PMIB_UDPTABLE
+};
+use shared::ws2def::{PSOCKADDR, SOCKADDR, SOCKADDR_IN};
+use shared::ws2ipdef::SOCKADDR_IN6;
+use um::ipexport::{
+ IPAddr, IPMask, IP_STATUS, PIP_ADAPTER_INDEX_MAP, PIP_ADAPTER_ORDER_MAP, PIP_INTERFACE_INFO,
+ PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS,
+};
+use um::iptypes::{
+ PFIXED_INFO, PIP_ADAPTER_ADDRESSES, PIP_ADAPTER_INFO, PIP_INTERFACE_NAME_INFO,
+ PIP_PER_ADAPTER_INFO,
+};
+use um::minwinbase::{LPOVERLAPPED,OVERLAPPED};
+extern "system" {
+ pub fn GetNumberOfInterfaces(
+ pdwNumIf: PDWORD
+ ) -> DWORD;
+ pub fn GetIfEntry(
+ pIfRow: PMIB_IFROW,
+ ) -> DWORD;
+ pub fn GetIfTable(
+ pIfTable: PMIB_IFTABLE,
+ pdwSize: PULONG,
+ bOrder: BOOL,
+ ) -> DWORD;
+ pub fn GetIpAddrTable(
+ pIpAddrTable: PMIB_IPADDRTABLE,
+ pdwSize: PULONG,
+ bOrder: BOOL,
+ ) -> DWORD;
+ pub fn GetIpNetTable(
+ IpNetTable: PMIB_IPNETTABLE,
+ SizePointer: PULONG,
+ Order: BOOL,
+ ) -> ULONG;
+ pub fn GetIpForwardTable(
+ pIpForwardTable: PMIB_IPFORWARDTABLE,
+ pdwSize: PULONG,
+ bOrder: BOOL,
+ ) -> DWORD;
+ pub fn GetTcpTable(
+ TcpTable: PMIB_TCPTABLE,
+ SizePointer: PULONG,
+ Order: BOOL,
+ ) -> ULONG;
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/aa365928(v=vs.85).aspx
+ pub fn GetExtendedTcpTable(
+ pTcpTable: PVOID,
+ pdwSize: PDWORD,
+ bOrder: BOOL,
+ ulAf: ULONG,
+ TableClass: TCP_TABLE_CLASS,
+ Reserved: ULONG,
+ ) -> DWORD;
+ pub fn GetOwnerModuleFromTcpEntry(
+ pTcpEntry: PMIB_TCPROW_OWNER_MODULE,
+ Class: TCPIP_OWNER_MODULE_INFO_CLASS,
+ pBuffer: PVOID,
+ pdwSize: PDWORD,
+ ) -> DWORD;
+ pub fn GetUdpTable(
+ UdpTable: PMIB_UDPTABLE,
+ SizePointer: PULONG,
+ Order: BOOL,
+ ) -> ULONG;
+ pub fn GetExtendedUdpTable(
+ pUdpTable: PVOID,
+ pdwSize: PDWORD,
+ bOrder: BOOL,
+ ulAf: ULONG,
+ TableClass: UDP_TABLE_CLASS,
+ Reserved: ULONG,
+ ) -> DWORD;
+ pub fn GetOwnerModuleFromUdpEntry(
+ pUdpEntry: PMIB_UDPROW_OWNER_MODULE,
+ Class: TCPIP_OWNER_MODULE_INFO_CLASS,
+ pBuffer: PVOID,
+ pdwSize: PDWORD,
+ ) -> DWORD;
+ pub fn GetTcpTable2(
+ TcpTable: PMIB_TCPTABLE2,
+ SizePointer: PULONG,
+ Order: BOOL,
+ ) -> ULONG;
+ // Deprecated APIs, Added for documentation.
+ // pub fn AllocateAndGetTcpExTableFromStack() -> DWORD;
+ // pub fn AllocateAndGetUdpExTableFromStack() -> DWORD;
+ pub fn GetTcp6Table(
+ TcpTable: PMIB_TCP6TABLE,
+ SizePointer: PULONG,
+ Order: BOOL,
+ ) -> ULONG;
+ pub fn GetTcp6Table2(
+ TcpTable: PMIB_TCP6TABLE2,
+ SizePointer: PULONG,
+ Order: BOOL,
+ ) -> ULONG;
+ pub fn GetPerTcpConnectionEStats(
+ Row: PMIB_TCPROW,
+ EstatsType: TCP_ESTATS_TYPE,
+ Rw: PUCHAR,
+ RwVersion: ULONG,
+ RwSize: ULONG,
+ Ros: PUCHAR,
+ RosVersion: ULONG,
+ RosSize: ULONG,
+ Rod: PUCHAR,
+ RodVersion: ULONG,
+ RodSize: ULONG,
+ ) -> ULONG;
+ pub fn SetPerTcpConnectionEStats(
+ Row: PMIB_TCPROW,
+ EstatsType: TCP_ESTATS_TYPE,
+ Rw: PUCHAR,
+ RwVersion: ULONG,
+ RwSize: ULONG,
+ Offset: ULONG,
+ ) -> ULONG;
+ pub fn GetPerTcp6ConnectionEStats(
+ Row: PMIB_TCP6ROW,
+ EstatsType: TCP_ESTATS_TYPE,
+ Rw: PUCHAR,
+ RwVersion: ULONG,
+ RwSize: ULONG,
+ Ros: PUCHAR,
+ RosVersion: ULONG,
+ RosSize: ULONG,
+ Rod: PUCHAR,
+ RodVersion: ULONG,
+ RodSize: ULONG,
+ ) -> ULONG;
+ pub fn SetPerTcp6ConnectionEStats(
+ Row: PMIB_TCP6ROW,
+ EstatsType: TCP_ESTATS_TYPE,
+ Rw: PUCHAR,
+ RwVersion: ULONG,
+ RwSize: ULONG,
+ Offset: ULONG,
+ ) -> ULONG;
+ pub fn GetOwnerModuleFromTcp6Entry(
+ pTcpEntry: PMIB_TCP6ROW_OWNER_MODULE,
+ Class: TCPIP_OWNER_MODULE_INFO_CLASS,
+ pBuffer: PVOID,
+ pdwSize: PDWORD,
+ ) -> DWORD;
+ pub fn GetUdp6Table(
+ Udp6Table: PMIB_UDP6TABLE,
+ SizePointer: PULONG,
+ Order: BOOL,
+ ) -> ULONG;
+ pub fn GetOwnerModuleFromUdp6Entry(
+ pUdpEntry: PMIB_UDP6ROW_OWNER_MODULE,
+ Class: TCPIP_OWNER_MODULE_INFO_CLASS,
+ pBuffer: PVOID,
+ pdwSize: PDWORD,
+ ) -> DWORD;
+ pub fn GetOwnerModuleFromPidAndInfo(
+ ulPid: ULONG,
+ pInfo: *mut ULONGLONG,
+ Class: TCPIP_OWNER_MODULE_INFO_CLASS,
+ pBuffer: PVOID,
+ pdwSize: PDWORD,
+ ) -> DWORD;
+ pub fn GetIpStatistics(
+ Statistics: PMIB_IPSTATS,
+ ) -> ULONG;
+ pub fn GetIcmpStatistics(
+ Statistics: PMIB_ICMP,
+ ) -> ULONG;
+ pub fn GetTcpStatistics(
+ Statistics: PMIB_TCPSTATS,
+ ) -> ULONG;
+ pub fn GetUdpStatistics(
+ Stats: PMIB_UDPSTATS,
+ ) -> ULONG;
+ pub fn SetIpStatisticsEx(
+ Statistics: PMIB_IPSTATS,
+ Family: ULONG,
+ ) -> ULONG;
+ pub fn GetIpStatisticsEx(
+ Statistics: PMIB_IPSTATS,
+ Family: ULONG,
+ ) -> ULONG;
+ pub fn GetIcmpStatisticsEx(
+ Statistics: PMIB_ICMP_EX,
+ Family: ULONG,
+ ) -> ULONG;
+ pub fn GetTcpStatisticsEx(
+ Statistics: PMIB_TCPSTATS,
+ Family: ULONG,
+ ) -> ULONG;
+ pub fn GetUdpStatisticsEx(
+ Statistics: PMIB_UDPSTATS,
+ Family: ULONG,
+ ) -> ULONG;
+ pub fn GetTcpStatisticsEx2(
+ Statistics: PMIB_TCPSTATS2,
+ Family: ULONG,
+ ) -> ULONG;
+ pub fn GetUdpStatisticsEx2(
+ Statistics: PMIB_UDPSTATS2,
+ Family: ULONG,
+ ) -> ULONG;
+ pub fn SetIfEntry(
+ pIfRow: PMIB_IFROW,
+ ) -> DWORD;
+ pub fn CreateIpForwardEntry(
+ pRoute: PMIB_IPFORWARDROW,
+ ) -> DWORD;
+ pub fn SetIpForwardEntry(
+ pRoute: PMIB_IPFORWARDROW,
+ ) -> DWORD;
+ pub fn DeleteIpForwardEntry(
+ pRoute: PMIB_IPFORWARDROW,
+ ) -> DWORD;
+ pub fn SetIpStatistics(
+ pIpStats: PMIB_IPSTATS,
+ ) -> DWORD;
+ pub fn SetIpTTL(
+ nTTL: UINT,
+ ) -> DWORD;
+ pub fn CreateIpNetEntry(
+ pArpEntry: PMIB_IPNETROW,
+ ) -> DWORD;
+ pub fn SetIpNetEntry(
+ pArpEntry: PMIB_IPNETROW,
+ ) -> DWORD;
+ pub fn DeleteIpNetEntry(
+ pArpEntry: PMIB_IPNETROW,
+ ) -> DWORD;
+ pub fn FlushIpNetTable(
+ dwIfIndex: DWORD,
+ ) -> DWORD;
+ pub fn CreateProxyArpEntry(
+ dwAddress: DWORD,
+ dwMask: DWORD,
+ dwIfIndex: DWORD,
+ ) -> DWORD;
+ pub fn DeleteProxyArpEntry(
+ dwAddress: DWORD,
+ dwMask: DWORD,
+ dwIfIndex: DWORD,
+ ) -> DWORD;
+ pub fn SetTcpEntry(
+ pTcpRow: PMIB_TCPROW,
+ ) -> DWORD;
+ pub fn GetInterfaceInfo(
+ pIfTable: PIP_INTERFACE_INFO,
+ dwOutBufLen: PULONG,
+ ) -> DWORD;
+ pub fn GetUniDirectionalAdapterInfo(
+ pIPIfInfo: PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS,
+ dwOutBufLen: PULONG,
+ ) -> DWORD;
+ pub fn NhpAllocateAndGetInterfaceInfoFromStack(
+ ppTable: *mut PIP_INTERFACE_NAME_INFO,
+ pdwCount: PDWORD,
+ bOrder: BOOL,
+ hHeap: HANDLE,
+ dwFlags: DWORD,
+ ) -> DWORD;
+ pub fn GetBestInterface(
+ dwDestAddr: IPAddr,
+ pdwBestIfIndex: PDWORD,
+ ) -> DWORD;
+ pub fn GetBestInterfaceEx(
+ pDestAddr: PSOCKADDR,
+ pdwBestIfIndex: PDWORD,
+ ) -> DWORD;
+ pub fn GetBestRoute(
+ dwDestAddr: DWORD,
+ dwSourceAddr: DWORD,
+ pBestRoute: PMIB_IPFORWARDROW,
+ ) -> DWORD;
+ pub fn NotifyAddrChange(
+ Handle: PHANDLE,
+ overlapped: LPOVERLAPPED,
+ ) -> DWORD;
+ pub fn NotifyRouteChange(
+ Handle: PHANDLE,
+ overlapped: LPOVERLAPPED,
+ ) -> DWORD;
+ pub fn CancelIPChangeNotify(
+ notifyOverlapped: LPOVERLAPPED
+ ) -> BOOL;
+ pub fn GetAdapterIndex(
+ AdapterName: LPWSTR,
+ IfIndex: PULONG,
+ ) -> DWORD;
+ pub fn AddIPAddress(
+ Address: IPAddr,
+ IpMask: IPMask,
+ IfIndex: DWORD,
+ NTEContext: PULONG,
+ NTEInstance: PULONG,
+ ) -> DWORD;
+ pub fn DeleteIPAddress(
+ NTEContext: ULONG,
+ ) -> DWORD;
+ pub fn GetNetworkParams(
+ pFixedInfo: PFIXED_INFO,
+ pOutBufLen: PULONG,
+ ) -> DWORD;
+ pub fn GetAdaptersInfo(
+ AdapterInfo: PIP_ADAPTER_INFO,
+ SizePointer: PULONG,
+ ) -> ULONG;
+ pub fn GetAdapterOrderMap() -> PIP_ADAPTER_ORDER_MAP;
+ pub fn GetAdaptersAddresses(
+ Family: ULONG,
+ Flags: ULONG,
+ Reserved: PVOID,
+ AdapterAddresses: PIP_ADAPTER_ADDRESSES,
+ SizePointer: PULONG,
+ ) -> ULONG;
+ pub fn GetPerAdapterInfo(
+ IfIndex: ULONG,
+ pPerAdapterInfo: PIP_PER_ADAPTER_INFO,
+ pOutBufLen: PULONG,
+ ) -> DWORD;
+}
+STRUCT!{struct INTERFACE_TIMESTAMP_CAPABILITY_FLAGS {
+ PtpV2OverUdpIPv4EventMsgReceiveHw: BOOLEAN,
+ PtpV2OverUdpIPv4AllMsgReceiveHw: BOOLEAN,
+ PtpV2OverUdpIPv4EventMsgTransmitHw: BOOLEAN,
+ PtpV2OverUdpIPv4AllMsgTransmitHw: BOOLEAN,
+ PtpV2OverUdpIPv6EventMsgReceiveHw: BOOLEAN,
+ PtpV2OverUdpIPv6AllMsgReceiveHw: BOOLEAN,
+ PtpV2OverUdpIPv6EventMsgTransmitHw: BOOLEAN,
+ PtpV2OverUdpIPv6AllMsgTransmitHw: BOOLEAN,
+ AllReceiveHw: BOOLEAN,
+ AllTransmitHw: BOOLEAN,
+ TaggedTransmitHw: BOOLEAN,
+ AllReceiveSw: BOOLEAN,
+ AllTransmitSw: BOOLEAN,
+ TaggedTransmitSw: BOOLEAN,
+}}
+pub type PINTERFACE_TIMESTAMP_CAPABILITY_FLAGS = *mut INTERFACE_TIMESTAMP_CAPABILITY_FLAGS;
+STRUCT!{struct INTERFACE_TIMESTAMP_CAPABILITIES {
+ Version: ULONG,
+ HardwareClockFrequencyHz: ULONG64,
+ CrossTimestamp: BOOLEAN,
+ Reserved1: ULONG64,
+ Reserved2: ULONG64,
+ TimestampFlags: INTERFACE_TIMESTAMP_CAPABILITY_FLAGS,
+}}
+pub type PINTERFACE_TIMESTAMP_CAPABILITIES = *mut INTERFACE_TIMESTAMP_CAPABILITIES;
+STRUCT!{struct INTERFACE_HARDWARE_CROSSTIMESTAMP {
+ Version: ULONG,
+ Flags: ULONG,
+ SystemTimestamp1: ULONG64,
+ HardwareClockTimestamp: ULONG64,
+ SystemTimestamp2: ULONG64,
+}}
+pub type PINTERFACE_HARDWARE_CROSSTIMESTAMP = *mut INTERFACE_HARDWARE_CROSSTIMESTAMP;
+DECLARE_HANDLE!{HIFTIMESTAMPCHANGE, HIFTIMESTAMPCHANGE__}
+extern "system" {
+ pub fn GetInterfaceCurrentTimestampCapabilities(
+ InterfaceLuid: *const NET_LUID,
+ TimestampCapabilite: PINTERFACE_TIMESTAMP_CAPABILITIES,
+ ) -> DWORD;
+ pub fn GetInterfaceHardwareTimestampCapabilities(
+ InterfaceLuid: *const NET_LUID,
+ TimestampCapabilite: PINTERFACE_TIMESTAMP_CAPABILITIES,
+ ) -> DWORD;
+ pub fn CaptureInterfaceHardwareCrossTimestamp(
+ InterfaceLuid: *const NET_LUID,
+ CrossTimestamp: PINTERFACE_HARDWARE_CROSSTIMESTAMP,
+ ) -> DWORD;
+}
+FN!{stdcall INTERFACE_TIMESTAMP_CONFIG_CHANGE_CALLBACK(
+ CallerContext: PVOID,
+) -> ()}
+pub type PINTERFACE_TIMESTAMP_CONFIG_CHANGE_CALLBACK = *mut
+ INTERFACE_TIMESTAMP_CONFIG_CHANGE_CALLBACK;
+extern "system" {
+ pub fn NotifyIfTimestampConfigChange(
+ CallerContext: PVOID,
+ Callback: PINTERFACE_TIMESTAMP_CONFIG_CHANGE_CALLBACK,
+ NotificationHandle: *mut HIFTIMESTAMPCHANGE,
+ ) -> DWORD;
+ pub fn CancelIfTimestampConfigChange(
+ NotificationHandle: HIFTIMESTAMPCHANGE,
+ );
+ pub fn IpReleaseAddress(
+ AdapterInfo: PIP_ADAPTER_INDEX_MAP,
+ ) -> DWORD;
+ pub fn IpRenewAddress(
+ AdapterInfo: PIP_ADAPTER_INDEX_MAP,
+ ) -> DWORD;
+ pub fn SendARP(
+ DestIP: IPAddr,
+ SrcIP: IPAddr,
+ pMacAddr: PVOID,
+ PhyAddrLen: PULONG,
+ ) -> DWORD;
+ pub fn GetRTTAndHopCount(
+ DestIpAddress: IPAddr,
+ HopCount: PULONG,
+ MaxHops: ULONG,
+ RTT: PULONG,
+ ) -> BOOL;
+ pub fn GetFriendlyIfIndex(
+ IfIndex: DWORD,
+ ) -> DWORD;
+ pub fn EnableRouter(
+ pHandle: *mut HANDLE,
+ pOverlapped: *mut OVERLAPPED,
+ ) -> DWORD;
+ pub fn UnenableRouter(
+ pOverlapped: *mut OVERLAPPED,
+ lpdwEnableCount: LPDWORD,
+ ) -> DWORD;
+ pub fn DisableMediaSense(
+ pHandle: *mut HANDLE,
+ pOverLapped: *mut OVERLAPPED,
+ ) -> DWORD;
+ pub fn RestoreMediaSense(
+ pOverlapped: *mut OVERLAPPED,
+ lpdwEnableCount: LPDWORD,
+ ) -> DWORD;
+ pub fn GetIpErrorString(
+ ErrorCode: IP_STATUS,
+ Buffer: PWSTR,
+ Size: PDWORD,
+ ) -> DWORD;
+ pub fn ResolveNeighbor(
+ NetworkAddress: *mut SOCKADDR,
+ PhysicalAddress: PVOID,
+ PhysicalAddressLength: PULONG,
+ ) -> ULONG;
+ pub fn CreatePersistentTcpPortReservation(
+ StartPort: USHORT,
+ NumberOfPorts: USHORT,
+ Token: PULONG64,
+ ) -> ULONG;
+ pub fn CreatePersistentUdpPortReservation(
+ StartPort: USHORT,
+ NumberOfPorts: USHORT,
+ Token: PULONG64,
+ ) -> ULONG;
+ pub fn DeletePersistentTcpPortReservation(
+ StartPort: USHORT,
+ NumberOfPorts: USHORT,
+ ) -> ULONG;
+ pub fn DeletePersistentUdpPortReservation(
+ StartPort: USHORT,
+ NumberOfPorts: USHORT,
+ ) -> ULONG;
+ pub fn LookupPersistentTcpPortReservation(
+ StartPort: USHORT,
+ NumberOfPorts: USHORT,
+ Token: PULONG64,
+ ) -> ULONG;
+ pub fn LookupPersistentUdpPortReservation(
+ StartPort: USHORT,
+ NumberOfPorts: USHORT,
+ Token: PULONG64,
+ ) -> ULONG;
+}
+ENUM!{enum NET_ADDRESS_FORMAT {
+ NET_ADDRESS_FORMAT_UNSPECIFIED = 0,
+ NET_ADDRESS_DNS_NAME = 1,
+ NET_ADDRESS_IPV4 = 2,
+ NET_ADDRESS_IPV6 = 3,
+}}
+pub const DNS_MAX_NAME_BUFFER_LENGTH: usize = 256;
+STRUCT!{struct NET_ADDRESS_INFO_u_s {
+ Address: [WCHAR; DNS_MAX_NAME_BUFFER_LENGTH],
+ Port: [WCHAR; 6],
+}}
+UNION!{union NET_ADDRESS_INFO_u {
+ [u32; 131],
+ NamedAddress NamedAddress_mut: NET_ADDRESS_INFO_u_s,
+ Ipv4Address Ipv4Address_mut: SOCKADDR_IN,
+ Ipv6Address Ipv6Address_mut: SOCKADDR_IN6,
+ IpAddress IpAddress_mut: SOCKADDR,
+}}
+STRUCT!{struct NET_ADDRESS_INFO {
+ Format: NET_ADDRESS_FORMAT,
+ u: NET_ADDRESS_INFO_u,
+}}
+pub type PNET_ADDRESS_INFO = *mut NET_ADDRESS_INFO;
+extern "system" {
+ // #if defined (_WS2DEF_) && defined (_WS2IPDEF_) && defined(_WINDNS_INCLUDED_)
+ pub fn ParseNetworkString(
+ NetworkString: *const *mut WCHAR,
+ Types: DWORD,
+ AddressInfo: PNET_ADDRESS_INFO,
+ PortNumber: *mut USHORT,
+ PrefixLength: *mut BYTE,
+ ) -> DWORD;
+}
diff --git a/vendor/winapi/src/um/iptypes.rs b/vendor/winapi/src/um/iptypes.rs
new file mode 100644
index 000000000..c730a36be
--- /dev/null
+++ b/vendor/winapi/src/um/iptypes.rs
@@ -0,0 +1,372 @@
+// 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::{UINT8, ULONG64};
+use shared::guiddef::GUID;
+use shared::ifdef::{
+ IF_INDEX, IF_LUID, IF_OPER_STATUS, NET_IF_COMPARTMENT_ID, NET_IF_CONNECTION_TYPE,
+ NET_IF_NETWORK_GUID, TUNNEL_TYPE
+};
+use shared::ipifcons::IFTYPE;
+use shared::minwindef::{BOOL, BYTE, DWORD, UCHAR, UINT};
+use shared::nldef::{NL_DAD_STATE, NL_PREFIX_ORIGIN, NL_SUFFIX_ORIGIN};
+use shared::ntdef::{CHAR, PCHAR, PWCHAR, ULONG, ULONGLONG, WCHAR};
+use shared::ws2def::SOCKET_ADDRESS;
+use ucrt::corecrt::time_t;
+pub const MAX_ADAPTER_DESCRIPTION_LENGTH: usize = 128;
+pub const MAX_ADAPTER_NAME_LENGTH: usize = 256;
+pub const MAX_ADAPTER_ADDRESS_LENGTH: usize = 8;
+pub const DEFAULT_MINIMUM_ENTITIES: usize = 32;
+pub const MAX_HOSTNAME_LEN: usize = 128;
+pub const MAX_DOMAIN_NAME_LEN: usize = 128;
+pub const MAX_SCOPE_ID_LEN: usize = 256;
+pub const MAX_DHCPV6_DUID_LENGTH: usize = 130;
+pub const MAX_DNS_SUFFIX_STRING_LENGTH: usize = 256;
+pub const BROADCAST_NODETYPE: usize = 1;
+pub const PEER_TO_PEER_NODETYPE: usize = 2;
+pub const MIXED_NODETYPE: usize = 4;
+pub const HYBRID_NODETYPE: usize = 8;
+STRUCT!{struct IP_ADDRESS_STRING {
+ String: [CHAR; 4*4],
+}}
+pub type PIP_ADDRESS_STRING = *mut IP_ADDRESS_STRING;
+pub type IP_MASK_STRING = IP_ADDRESS_STRING;
+pub type PIP_MASK_STRING = *mut IP_MASK_STRING;
+STRUCT!{struct IP_ADDR_STRING {
+ Next: *mut IP_ADDR_STRING,
+ IpAddress: IP_ADDRESS_STRING,
+ IpMask: IP_MASK_STRING,
+ Context: DWORD,
+}}
+pub type PIP_ADDR_STRING = *mut IP_ADDR_STRING;
+STRUCT!{struct IP_ADAPTER_INFO {
+ Next: *mut IP_ADAPTER_INFO,
+ ComboIndex: DWORD,
+ AdapterName: [CHAR; MAX_ADAPTER_NAME_LENGTH + 4],
+ Description: [CHAR; MAX_ADAPTER_DESCRIPTION_LENGTH + 4],
+ AddressLength: UINT,
+ Address: [BYTE; MAX_ADAPTER_ADDRESS_LENGTH],
+ Index: DWORD,
+ Type: UINT,
+ DhcpEnabled: UINT,
+ CurrentIpAddress: PIP_ADDR_STRING,
+ IpAddressList: IP_ADDR_STRING,
+ GatewayList: IP_ADDR_STRING,
+ DhcpServer: IP_ADDR_STRING,
+ HaveWins: BOOL,
+ PrimaryWinsServer: IP_ADDR_STRING,
+ SecondaryWinsServer: IP_ADDR_STRING,
+ LeaseObtained: time_t,
+ LeaseExpires: time_t,
+}}
+pub type PIP_ADAPTER_INFO = *mut IP_ADAPTER_INFO;
+pub type IP_PREFIX_ORIGIN = NL_PREFIX_ORIGIN;
+pub type IP_SUFFIX_ORIGIN = NL_SUFFIX_ORIGIN;
+pub type IP_DAD_STATE = NL_DAD_STATE;
+STRUCT!{struct IP_ADAPTER_UNICAST_ADDRESS_LH_u_s {
+ Length: ULONG,
+ Flags: DWORD,
+}}
+UNION!{union IP_ADAPTER_UNICAST_ADDRESS_LH_u {
+ [u64; 1],
+ Alignment Alignment_mut: ULONGLONG,
+ s s_mut: IP_ADAPTER_UNICAST_ADDRESS_LH_u_s,
+}}
+STRUCT!{struct IP_ADAPTER_UNICAST_ADDRESS_LH {
+ u: IP_ADAPTER_UNICAST_ADDRESS_LH_u,
+ Next: *mut IP_ADAPTER_UNICAST_ADDRESS_LH,
+ Address: SOCKET_ADDRESS,
+ PrefixOrigin: IP_PREFIX_ORIGIN,
+ SuffixOrigin: IP_SUFFIX_ORIGIN,
+ DadState: IP_DAD_STATE,
+ ValidLifetime: ULONG,
+ PreferredLifetime: ULONG,
+ LeaseLifetime: ULONG,
+ OnLinkPrefixLength: UINT8,
+}}
+pub type PIP_ADAPTER_UNICAST_ADDRESS_LH = *mut IP_ADAPTER_UNICAST_ADDRESS_LH;
+STRUCT!{struct IP_ADAPTER_UNICAST_ADDRESS_XP_u_s {
+ Length: ULONG,
+ Flags: DWORD,
+}}
+UNION!{union IP_ADAPTER_UNICAST_ADDRESS_XP_u {
+ [u64; 1],
+ Alignment Alignment_mut: ULONGLONG,
+ s s_mut: IP_ADAPTER_UNICAST_ADDRESS_XP_u_s,
+}}
+STRUCT!{struct IP_ADAPTER_UNICAST_ADDRESS_XP {
+ u: IP_ADAPTER_UNICAST_ADDRESS_XP_u,
+ Next: *mut IP_ADAPTER_UNICAST_ADDRESS_XP,
+ Address: SOCKET_ADDRESS,
+ PrefixOrigin: IP_PREFIX_ORIGIN,
+ SuffixOrigin: IP_SUFFIX_ORIGIN,
+ DadState: IP_DAD_STATE,
+ ValidLifetime: ULONG,
+ PreferredLifetime: ULONG,
+ LeaseLifetime: ULONG,
+}}
+pub type PIP_ADAPTER_UNICAST_ADDRESS_XP = *mut IP_ADAPTER_UNICAST_ADDRESS_XP;
+pub type IP_ADAPTER_UNICAST_ADDRESS = IP_ADAPTER_UNICAST_ADDRESS_LH;
+// pub type IP_ADAPTER_UNICAST_ADDRESS = IP_ADAPTER_UNICAST_ADDRESS_XP;
+pub type PIP_ADAPTER_UNICAST_ADDRESS = *mut IP_ADAPTER_UNICAST_ADDRESS;
+pub const IP_ADAPTER_ADDRESS_DNS_ELIGIBLE: usize = 0x01;
+pub const IP_ADAPTER_ADDRESS_TRANSIENT: usize = 0x02;
+STRUCT!{struct IP_ADAPTER_ANYCAST_ADDRESS_XP_u_s {
+ Length: ULONG,
+ Flags: DWORD,
+}}
+UNION!{union IP_ADAPTER_ANYCAST_ADDRESS_XP_u {
+ [u64; 1],
+ Alignment Alignment_mut: ULONGLONG,
+ s s_mut: IP_ADAPTER_ANYCAST_ADDRESS_XP_u_s,
+}}
+STRUCT!{struct IP_ADAPTER_ANYCAST_ADDRESS_XP {
+ u: IP_ADAPTER_ANYCAST_ADDRESS_XP_u,
+ Next: *mut IP_ADAPTER_ANYCAST_ADDRESS_XP,
+ Address: SOCKET_ADDRESS,
+}}
+pub type PIP_ADAPTER_ANYCAST_ADDRESS_XP = *mut IP_ADAPTER_ANYCAST_ADDRESS_XP;
+pub type IP_ADAPTER_ANYCAST_ADDRESS = IP_ADAPTER_ANYCAST_ADDRESS_XP;
+pub type PIP_ADAPTER_ANYCAST_ADDRESS = *mut IP_ADAPTER_ANYCAST_ADDRESS;
+STRUCT!{struct IP_ADAPTER_MULTICAST_ADDRESS_XP_u_s {
+ Length: ULONG,
+ Flags: DWORD,
+}}
+UNION!{union IP_ADAPTER_MULTICAST_ADDRESS_XP_u {
+ [u64; 1],
+ Alignment Alignment_mut: ULONGLONG,
+ s s_mut: IP_ADAPTER_MULTICAST_ADDRESS_XP_u_s,
+}}
+STRUCT!{struct IP_ADAPTER_MULTICAST_ADDRESS_XP {
+ u: IP_ADAPTER_MULTICAST_ADDRESS_XP_u,
+ Next: *mut IP_ADAPTER_MULTICAST_ADDRESS_XP,
+ Address: SOCKET_ADDRESS,
+}}
+pub type PIP_ADAPTER_MULTICAST_ADDRESS_XP = *mut IP_ADAPTER_MULTICAST_ADDRESS_XP;
+pub type IP_ADAPTER_MULTICAST_ADDRESS = IP_ADAPTER_MULTICAST_ADDRESS_XP;
+pub type PIP_ADAPTER_MULTICAST_ADDRESS = *mut IP_ADAPTER_MULTICAST_ADDRESS_XP;
+STRUCT!{struct IP_ADAPTER_DNS_SERVER_ADDRESS_XP_u_s {
+ Length: ULONG,
+ Reserved: DWORD,
+}}
+UNION!{union IP_ADAPTER_DNS_SERVER_ADDRESS_XP_u {
+ [u64; 1],
+ Alignment Alignment_mut: ULONGLONG,
+ s s_mut: IP_ADAPTER_DNS_SERVER_ADDRESS_XP_u_s,
+}}
+STRUCT!{struct IP_ADAPTER_DNS_SERVER_ADDRESS_XP {
+ u: IP_ADAPTER_DNS_SERVER_ADDRESS_XP_u,
+ Next: *mut IP_ADAPTER_DNS_SERVER_ADDRESS_XP,
+ Address: SOCKET_ADDRESS,
+}}
+pub type PIP_ADAPTER_DNS_SERVER_ADDRESS_XP = *mut IP_ADAPTER_DNS_SERVER_ADDRESS_XP;
+pub type IP_ADAPTER_DNS_SERVER_ADDRESS = IP_ADAPTER_DNS_SERVER_ADDRESS_XP;
+pub type PIP_ADAPTER_DNS_SERVER_ADDRESS = *mut IP_ADAPTER_DNS_SERVER_ADDRESS_XP;
+STRUCT!{struct IP_ADAPTER_WINS_SERVER_ADDRESS_LH_u_s {
+ Length: ULONG,
+ Reserved: DWORD,
+}}
+UNION!{union IP_ADAPTER_WINS_SERVER_ADDRESS_LH_u {
+ [u64; 1],
+ Alignment Alignment_mut: ULONGLONG,
+ s s_mut: IP_ADAPTER_WINS_SERVER_ADDRESS_LH_u_s,
+}}
+STRUCT!{struct IP_ADAPTER_WINS_SERVER_ADDRESS_LH {
+ u: IP_ADAPTER_WINS_SERVER_ADDRESS_LH_u,
+ Next: *mut IP_ADAPTER_WINS_SERVER_ADDRESS_LH,
+ Address: SOCKET_ADDRESS,
+}}
+pub type PIP_ADAPTER_WINS_SERVER_ADDRESS_LH = *mut IP_ADAPTER_WINS_SERVER_ADDRESS_LH;
+pub type IP_ADAPTER_WINS_SERVER_ADDRESS = IP_ADAPTER_WINS_SERVER_ADDRESS_LH;
+pub type PIP_ADAPTER_WINS_SERVER_ADDRESS = *mut IP_ADAPTER_WINS_SERVER_ADDRESS_LH;
+STRUCT!{struct IP_ADAPTER_GATEWAY_ADDRESS_LH_u_s {
+ Length: ULONG,
+ Reserved: DWORD,
+}}
+UNION!{union IP_ADAPTER_GATEWAY_ADDRESS_LH_u {
+ [u64; 1],
+ Alignment Alignment_mut: ULONGLONG,
+ s s_mut: IP_ADAPTER_GATEWAY_ADDRESS_LH_u_s,
+}}
+STRUCT!{struct IP_ADAPTER_GATEWAY_ADDRESS_LH {
+ u: IP_ADAPTER_GATEWAY_ADDRESS_LH_u,
+ Next: *mut IP_ADAPTER_GATEWAY_ADDRESS_LH,
+ Address: SOCKET_ADDRESS,
+}}
+pub type PIP_ADAPTER_GATEWAY_ADDRESS_LH = *mut IP_ADAPTER_GATEWAY_ADDRESS_LH;
+pub type IP_ADAPTER_GATEWAY_ADDRESS = IP_ADAPTER_GATEWAY_ADDRESS_LH;
+pub type PIP_ADAPTER_GATEWAY_ADDRESS = *mut IP_ADAPTER_GATEWAY_ADDRESS_LH;
+STRUCT!{struct IP_ADAPTER_PREFIX_XP_u_s {
+ Length: ULONG,
+ Flags: DWORD,
+}}
+UNION!{union IP_ADAPTER_PREFIX_XP_u {
+ [u64; 1],
+ Alignment Alignment_mut: ULONGLONG,
+ s s_mut: IP_ADAPTER_PREFIX_XP_u_s,
+}}
+STRUCT!{struct IP_ADAPTER_PREFIX_XP {
+ u: IP_ADAPTER_PREFIX_XP_u,
+ Next: *mut IP_ADAPTER_PREFIX_XP,
+ Address: SOCKET_ADDRESS,
+ PrefixLength: ULONG,
+}}
+pub type PIP_ADAPTER_PREFIX_XP = *mut IP_ADAPTER_PREFIX_XP;
+pub type IP_ADAPTER_PREFIX = IP_ADAPTER_PREFIX_XP;
+pub type PIP_ADAPTER_PREFIX = *mut IP_ADAPTER_PREFIX_XP;
+STRUCT!{struct IP_ADAPTER_DNS_SUFFIX {
+ Next: *mut IP_ADAPTER_DNS_SUFFIX,
+ String: [WCHAR; MAX_DNS_SUFFIX_STRING_LENGTH],
+}}
+pub type PIP_ADAPTER_DNS_SUFFIX = *mut IP_ADAPTER_DNS_SUFFIX;
+pub const IP_ADAPTER_DDNS_ENABLED: DWORD = 0x00000001;
+pub const IP_ADAPTER_REGISTER_ADAPTER_SUFFIX: DWORD = 0x00000002;
+pub const IP_ADAPTER_DHCP_ENABLED: DWORD = 0x00000004;
+pub const IP_ADAPTER_RECEIVE_ONLY: DWORD = 0x00000008;
+pub const IP_ADAPTER_NO_MULTICAST: DWORD = 0x00000010;
+pub const IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG: DWORD = 0x00000020;
+pub const IP_ADAPTER_NETBIOS_OVER_TCPIP_ENABLED: DWORD = 0x00000040;
+pub const IP_ADAPTER_IPV4_ENABLED: DWORD = 0x00000080;
+pub const IP_ADAPTER_IPV6_ENABLED: DWORD = 0x00000100;
+pub const IP_ADAPTER_IPV6_MANAGE_ADDRESS_CONFIG: DWORD = 0x00000200;
+STRUCT!{struct IP_ADAPTER_ADDRESSES_LH_u_s {
+ Length: ULONG,
+ IfIndex: IF_INDEX,
+}}
+UNION!{union IP_ADAPTER_ADDRESSES_LH_u {
+ [u64; 1],
+ Alignment Alignment_mut: ULONGLONG,
+ s s_mut: IP_ADAPTER_ADDRESSES_LH_u_s,
+}}
+STRUCT!{struct IP_ADAPTER_ADDRESSES_LH {
+ u: IP_ADAPTER_ADDRESSES_LH_u,
+ Next: *mut IP_ADAPTER_ADDRESSES_LH,
+ AdapterName: PCHAR,
+ FirstUnicastAddress: PIP_ADAPTER_UNICAST_ADDRESS_LH,
+ FirstAnycastAddress: PIP_ADAPTER_ANYCAST_ADDRESS_XP,
+ FirstMulticastAddress: PIP_ADAPTER_MULTICAST_ADDRESS_XP,
+ FirstDnsServerAddress: PIP_ADAPTER_DNS_SERVER_ADDRESS_XP,
+ DnsSuffix: PWCHAR,
+ Description: PWCHAR,
+ FriendlyName: PWCHAR,
+ PhysicalAddress: [BYTE; MAX_ADAPTER_ADDRESS_LENGTH],
+ PhysicalAddressLength: ULONG,
+ Flags: ULONG,
+ Mtu: ULONG,
+ IfType: IFTYPE,
+ OperStatus: IF_OPER_STATUS,
+ Ipv6IfIndex: IF_INDEX,
+ ZoneIndices: [ULONG; 16],
+ FirstPrefix: PIP_ADAPTER_PREFIX_XP,
+ TransmitLinkSpeed: ULONG64,
+ ReceiveLinkSpeed: ULONG64,
+ FirstWinsServerAddress: PIP_ADAPTER_WINS_SERVER_ADDRESS_LH,
+ FirstGatewayAddress: PIP_ADAPTER_GATEWAY_ADDRESS_LH,
+ Ipv4Metric: ULONG,
+ Ipv6Metric: ULONG,
+ Luid: IF_LUID,
+ Dhcpv4Server: SOCKET_ADDRESS,
+ CompartmentId: NET_IF_COMPARTMENT_ID,
+ NetworkGuid: NET_IF_NETWORK_GUID,
+ ConnectionType: NET_IF_CONNECTION_TYPE,
+ TunnelType: TUNNEL_TYPE,
+ Dhcpv6Server: SOCKET_ADDRESS,
+ Dhcpv6ClientDuid: [BYTE; MAX_DHCPV6_DUID_LENGTH],
+ Dhcpv6ClientDuidLength: ULONG,
+ Dhcpv6Iaid: ULONG,
+ FirstDnsSuffix: PIP_ADAPTER_DNS_SUFFIX,
+}}
+BITFIELD!{IP_ADAPTER_ADDRESSES_LH Flags: ULONG [
+ DdnsEnabled set_DdnsEnabled[0..1],
+ RegisterAdapterSuffix set_RegisterAdapterSuffix[1..2],
+ Dhcpv4Enabled set_Dhcpv4Enabled[2..3],
+ ReceiveOnly set_ReceiveOnly[3..4],
+ NoMulticast set_NoMulticast[4..5],
+ Ipv6OtherStatefulConfig set_Ipv6OtherStatefulConfig[5..6],
+ NetbiosOverTcpipEnabled set_NetbiosOverTcpipEnabled[6..7],
+ Ipv4Enabled set_Ipv4Enabled[7..8],
+ Ipv6Enabled set_Ipv6Enabled[8..9],
+ Ipv6ManagedAddressConfigurationSupported set_Ipv6ManagedAddressConfigurationSupported[9..10],
+]}
+pub type PIP_ADAPTER_ADDRESSES_LH = *mut IP_ADAPTER_ADDRESSES_LH;
+STRUCT!{struct IP_ADAPTER_ADDRESSES_XP_u_s {
+ Length: ULONG,
+ IfIndex: DWORD,
+}}
+UNION!{union IP_ADAPTER_ADDRESSES_XP_u {
+ [u64; 1],
+ Alignment Alignment_mut: ULONGLONG,
+ s s_mut: IP_ADAPTER_ADDRESSES_XP_u_s,
+}}
+STRUCT!{struct IP_ADAPTER_ADDRESSES_XP {
+ u: IP_ADAPTER_ADDRESSES_XP_u,
+ Next: *mut IP_ADAPTER_ADDRESSES_XP,
+ AdapterName: PCHAR,
+ FirstUnicastAddress: PIP_ADAPTER_UNICAST_ADDRESS_XP,
+ FirstAnycastAddress: PIP_ADAPTER_ANYCAST_ADDRESS_XP,
+ FirstMulticastAddress: PIP_ADAPTER_MULTICAST_ADDRESS_XP,
+ FirstDnsServerAddress: PIP_ADAPTER_DNS_SERVER_ADDRESS_XP,
+ DnsSuffix: PWCHAR,
+ Description: PWCHAR,
+ FriendlyName: PWCHAR,
+ PhysicalAddress: [BYTE; MAX_ADAPTER_ADDRESS_LENGTH],
+ PhysicalAddressLength: DWORD,
+ Flags: DWORD,
+ Mtu: DWORD,
+ IfType: DWORD,
+ OperStatus: IF_OPER_STATUS,
+ Ipv6IfIndex: DWORD,
+ ZoneIndices: [DWORD; 16],
+ FirstPrefix: PIP_ADAPTER_PREFIX_XP,
+}}
+pub type PIP_ADAPTER_ADDRESSES_XP = *mut IP_ADAPTER_ADDRESSES_XP;
+pub type IP_ADAPTER_ADDRESSES = IP_ADAPTER_ADDRESSES_LH;
+// pub type IP_ADAPTER_ADDRESSES = IP_ADAPTER_ADDRESSES_XP;
+pub type PIP_ADAPTER_ADDRESSES = *mut IP_ADAPTER_ADDRESSES;
+pub const GAA_FLAG_SKIP_UNICAST: ULONG = 0x0001;
+pub const GAA_FLAG_SKIP_ANYCAST: ULONG = 0x0002;
+pub const GAA_FLAG_SKIP_MULTICAST: ULONG = 0x0004;
+pub const GAA_FLAG_SKIP_DNS_SERVER: ULONG = 0x0008;
+pub const GAA_FLAG_INCLUDE_PREFIX: ULONG = 0x0010;
+pub const GAA_FLAG_SKIP_FRIENDLY_NAME: ULONG = 0x0020;
+pub const GAA_FLAG_INCLUDE_WINS_INFO: ULONG = 0x0040;
+pub const GAA_FLAG_INCLUDE_GATEWAYS: ULONG = 0x0080;
+pub const GAA_FLAG_INCLUDE_ALL_INTERFACES: ULONG = 0x0100;
+pub const GAA_FLAG_INCLUDE_ALL_COMPARTMENTS: ULONG = 0x0200;
+pub const GAA_FLAG_INCLUDE_TUNNEL_BINDINGORDER: ULONG = 0x0400;
+STRUCT!{struct IP_PER_ADAPTER_INFO_W2KSP1 {
+ AutoconfigEnabled: UINT,
+ AutoconfigActive: UINT,
+ CurrentDnsServer: PIP_ADDR_STRING,
+ DnsServerList: IP_ADDR_STRING,
+}}
+pub type PIP_PER_ADAPTER_INFO_W2KSP1 = *mut IP_PER_ADAPTER_INFO_W2KSP1;
+pub type IP_PER_ADAPTER_INFO = IP_PER_ADAPTER_INFO_W2KSP1;
+pub type PIP_PER_ADAPTER_INFO = *mut IP_PER_ADAPTER_INFO;
+STRUCT!{struct FIXED_INFO_W2KSP1 {
+ HostName: [CHAR; MAX_HOSTNAME_LEN + 4],
+ DomainName: [CHAR; MAX_DOMAIN_NAME_LEN + 4],
+ CurrentDnsServer: PIP_ADDR_STRING,
+ DnsServerList: IP_ADDR_STRING,
+ NodeType: UINT,
+ ScopeId: [CHAR; MAX_SCOPE_ID_LEN + 4],
+ EnableRouting: UINT,
+ EnableProxy: UINT,
+ EnableDns: UINT,
+}}
+pub type PFIXED_INFO_W2KSP1 = *mut FIXED_INFO_W2KSP1;
+pub type FIXED_INFO = FIXED_INFO_W2KSP1;
+pub type PFIXED_INFO = *mut FIXED_INFO;
+STRUCT!{struct IP_INTERFACE_NAME_INFO_W2KSP1 {
+ Index: ULONG,
+ MediaType: ULONG,
+ ConnectionType: UCHAR,
+ AccessType: UCHAR,
+ DeviceGuid: GUID,
+ InterfaceGuid: GUID,
+}}
+pub type PIP_INTERFACE_NAME_INFO_W2KSP1 = *mut IP_INTERFACE_NAME_INFO_W2KSP1;
+pub type IP_INTERFACE_NAME_INFO = IP_INTERFACE_NAME_INFO_W2KSP1;
+pub type PIP_INTERFACE_NAME_INFO = *mut IP_INTERFACE_NAME_INFO;
diff --git a/vendor/winapi/src/um/jobapi.rs b/vendor/winapi/src/um/jobapi.rs
new file mode 100644
index 000000000..cbe45c1dc
--- /dev/null
+++ b/vendor/winapi/src/um/jobapi.rs
@@ -0,0 +1,14 @@
+// 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::minwindef::{BOOL, PBOOL};
+use um::winnt::HANDLE;
+extern "system" {
+ pub fn IsProcessInJob(
+ ProcessHandle: HANDLE,
+ JobHandle: HANDLE,
+ Result: PBOOL,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/jobapi2.rs b/vendor/winapi/src/um/jobapi2.rs
new file mode 100644
index 000000000..98eb1e9d1
--- /dev/null
+++ b/vendor/winapi/src/um/jobapi2.rs
@@ -0,0 +1,63 @@
+// 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::LONG64;
+use shared::minwindef::{BOOL, DWORD, LPDWORD, LPVOID, UINT, ULONG};
+use shared::ntdef::{HANDLE, LPCWSTR, PCWSTR, VOID};
+use um::minwinbase::LPSECURITY_ATTRIBUTES;
+use um::winnt::JOBOBJECTINFOCLASS;
+STRUCT!{struct JOBOBJECT_IO_RATE_CONTROL_INFORMATION {
+ MaxIops: LONG64,
+ MaxBandwidth: LONG64,
+ ReservationIops: LONG64,
+ VolumeName: PCWSTR,
+ BaseIoSize: ULONG,
+ ControlFlags: ULONG,
+}}
+extern "system" {
+ pub fn CreateJobObjectW(
+ lpJobAttributes: LPSECURITY_ATTRIBUTES,
+ lpName: LPCWSTR,
+ ) -> HANDLE;
+ pub fn FreeMemoryJobObject(
+ Buffer: *mut VOID,
+ ) -> ();
+ pub fn OpenJobObjectW(
+ dwDesiredAccess: DWORD,
+ bInheritHandle: BOOL,
+ lpName: LPCWSTR,
+ ) -> HANDLE;
+ pub fn AssignProcessToJobObject(
+ hJob: HANDLE,
+ hProcess: HANDLE,
+ ) -> BOOL;
+ pub fn TerminateJobObject(
+ hJob: HANDLE,
+ uExitCode: UINT,
+ ) -> BOOL;
+ pub fn SetInformationJobObject(
+ hJob: HANDLE,
+ JobObjectInformationClass: JOBOBJECTINFOCLASS,
+ lpJobObjectInformation: LPVOID,
+ cbJovObjectInformationLength: DWORD,
+ ) -> BOOL;
+ pub fn SetIoRateControlInformationJobObject(
+ hJob: HANDLE,
+ IoRateControlInfo: *mut JOBOBJECT_IO_RATE_CONTROL_INFORMATION,
+ ) -> DWORD;
+ pub fn QueryInformationJobObject(
+ hJob: HANDLE,
+ JobObjectInformationClass: JOBOBJECTINFOCLASS,
+ lpJobObjectInformation: LPVOID,
+ cbJovObjectInformationLength: DWORD,
+ lpReturnLength: LPDWORD,
+ ) -> BOOL;
+ pub fn QueryIoRateControlInformationJobObject(
+ hJob: HANDLE,
+ VolumeName: PCWSTR,
+ InfoBlocks: *mut *mut JOBOBJECT_IO_RATE_CONTROL_INFORMATION,
+ InfoBlockCount: *mut ULONG,
+ ) -> DWORD;
+}
diff --git a/vendor/winapi/src/um/knownfolders.rs b/vendor/winapi/src/um/knownfolders.rs
new file mode 100644
index 000000000..a761ce297
--- /dev/null
+++ b/vendor/winapi/src/um/knownfolders.rs
@@ -0,0 +1,287 @@
+// 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.
+DEFINE_GUID!{FOLDERID_NetworkFolder,
+ 0xD20BEEC4, 0x5CA8, 0x4905, 0xAE, 0x3B, 0xBF, 0x25, 0x1E, 0xA0, 0x9B, 0x53}
+DEFINE_GUID!{FOLDERID_ComputerFolder,
+ 0x0AC0837C, 0xBBF8, 0x452A, 0x85, 0x0D, 0x79, 0xD0, 0x8E, 0x66, 0x7C, 0xA7}
+DEFINE_GUID!{FOLDERID_InternetFolder,
+ 0x4D9F7874, 0x4E0C, 0x4904, 0x96, 0x7B, 0x40, 0xB0, 0xD2, 0x0C, 0x3E, 0x4B}
+DEFINE_GUID!{FOLDERID_ControlPanelFolder,
+ 0x82A74AEB, 0xAEB4, 0x465C, 0xA0, 0x14, 0xD0, 0x97, 0xEE, 0x34, 0x6D, 0x63}
+DEFINE_GUID!{FOLDERID_PrintersFolder,
+ 0x76FC4E2D, 0xD6AD, 0x4519, 0xA6, 0x63, 0x37, 0xBD, 0x56, 0x06, 0x81, 0x85}
+DEFINE_GUID!{FOLDERID_SyncManagerFolder,
+ 0x43668BF8, 0xC14E, 0x49B2, 0x97, 0xC9, 0x74, 0x77, 0x84, 0xD7, 0x84, 0xB7}
+DEFINE_GUID!{FOLDERID_SyncSetupFolder,
+ 0x0f214138, 0xb1d3, 0x4a90, 0xbb, 0xa9, 0x27, 0xcb, 0xc0, 0xc5, 0x38, 0x9a}
+DEFINE_GUID!{FOLDERID_ConflictFolder,
+ 0x4bfefb45, 0x347d, 0x4006, 0xa5, 0xbe, 0xac, 0x0c, 0xb0, 0x56, 0x71, 0x92}
+DEFINE_GUID!{FOLDERID_SyncResultsFolder,
+ 0x289a9a43, 0xbe44, 0x4057, 0xa4, 0x1b, 0x58, 0x7a, 0x76, 0xd7, 0xe7, 0xf9}
+DEFINE_GUID!{FOLDERID_RecycleBinFolder,
+ 0xB7534046, 0x3ECB, 0x4C18, 0xBE, 0x4E, 0x64, 0xCD, 0x4C, 0xB7, 0xD6, 0xAC}
+DEFINE_GUID!{FOLDERID_ConnectionsFolder,
+ 0x6F0CD92B, 0x2E97, 0x45D1, 0x88, 0xFF, 0xB0, 0xD1, 0x86, 0xB8, 0xDE, 0xDD}
+DEFINE_GUID!{FOLDERID_Fonts,
+ 0xFD228CB7, 0xAE11, 0x4AE3, 0x86, 0x4C, 0x16, 0xF3, 0x91, 0x0A, 0xB8, 0xFE}
+DEFINE_GUID!{FOLDERID_Desktop,
+ 0xB4BFCC3A, 0xDB2C, 0x424C, 0xB0, 0x29, 0x7F, 0xE9, 0x9A, 0x87, 0xC6, 0x41}
+DEFINE_GUID!{FOLDERID_Startup,
+ 0xB97D20BB, 0xF46A, 0x4C97, 0xBA, 0x10, 0x5E, 0x36, 0x08, 0x43, 0x08, 0x54}
+DEFINE_GUID!{FOLDERID_Programs,
+ 0xA77F5D77, 0x2E2B, 0x44C3, 0xA6, 0xA2, 0xAB, 0xA6, 0x01, 0x05, 0x4A, 0x51}
+DEFINE_GUID!{FOLDERID_StartMenu,
+ 0x625B53C3, 0xAB48, 0x4EC1, 0xBA, 0x1F, 0xA1, 0xEF, 0x41, 0x46, 0xFC, 0x19}
+DEFINE_GUID!{FOLDERID_Recent,
+ 0xAE50C081, 0xEBD2, 0x438A, 0x86, 0x55, 0x8A, 0x09, 0x2E, 0x34, 0x98, 0x7A}
+DEFINE_GUID!{FOLDERID_SendTo,
+ 0x8983036C, 0x27C0, 0x404B, 0x8F, 0x08, 0x10, 0x2D, 0x10, 0xDC, 0xFD, 0x74}
+DEFINE_GUID!{FOLDERID_Documents,
+ 0xFDD39AD0, 0x238F, 0x46AF, 0xAD, 0xB4, 0x6C, 0x85, 0x48, 0x03, 0x69, 0xC7}
+DEFINE_GUID!{FOLDERID_Favorites,
+ 0x1777F761, 0x68AD, 0x4D8A, 0x87, 0xBD, 0x30, 0xB7, 0x59, 0xFA, 0x33, 0xDD}
+DEFINE_GUID!{FOLDERID_NetHood,
+ 0xC5ABBF53, 0xE17F, 0x4121, 0x89, 0x00, 0x86, 0x62, 0x6F, 0xC2, 0xC9, 0x73}
+DEFINE_GUID!{FOLDERID_PrintHood,
+ 0x9274BD8D, 0xCFD1, 0x41C3, 0xB3, 0x5E, 0xB1, 0x3F, 0x55, 0xA7, 0x58, 0xF4}
+DEFINE_GUID!{FOLDERID_Templates,
+ 0xA63293E8, 0x664E, 0x48DB, 0xA0, 0x79, 0xDF, 0x75, 0x9E, 0x05, 0x09, 0xF7}
+DEFINE_GUID!{FOLDERID_CommonStartup,
+ 0x82A5EA35, 0xD9CD, 0x47C5, 0x96, 0x29, 0xE1, 0x5D, 0x2F, 0x71, 0x4E, 0x6E}
+DEFINE_GUID!{FOLDERID_CommonPrograms,
+ 0x0139D44E, 0x6AFE, 0x49F2, 0x86, 0x90, 0x3D, 0xAF, 0xCA, 0xE6, 0xFF, 0xB8}
+DEFINE_GUID!{FOLDERID_CommonStartMenu,
+ 0xA4115719, 0xD62E, 0x491D, 0xAA, 0x7C, 0xE7, 0x4B, 0x8B, 0xE3, 0xB0, 0x67}
+DEFINE_GUID!{FOLDERID_PublicDesktop,
+ 0xC4AA340D, 0xF20F, 0x4863, 0xAF, 0xEF, 0xF8, 0x7E, 0xF2, 0xE6, 0xBA, 0x25}
+DEFINE_GUID!{FOLDERID_ProgramData,
+ 0x62AB5D82, 0xFDC1, 0x4DC3, 0xA9, 0xDD, 0x07, 0x0D, 0x1D, 0x49, 0x5D, 0x97}
+DEFINE_GUID!{FOLDERID_CommonTemplates,
+ 0xB94237E7, 0x57AC, 0x4347, 0x91, 0x51, 0xB0, 0x8C, 0x6C, 0x32, 0xD1, 0xF7}
+DEFINE_GUID!{FOLDERID_PublicDocuments,
+ 0xED4824AF, 0xDCE4, 0x45A8, 0x81, 0xE2, 0xFC, 0x79, 0x65, 0x08, 0x36, 0x34}
+DEFINE_GUID!{FOLDERID_RoamingAppData,
+ 0x3EB685DB, 0x65F9, 0x4CF6, 0xA0, 0x3A, 0xE3, 0xEF, 0x65, 0x72, 0x9F, 0x3D}
+DEFINE_GUID!{FOLDERID_LocalAppData,
+ 0xF1B32785, 0x6FBA, 0x4FCF, 0x9D, 0x55, 0x7B, 0x8E, 0x7F, 0x15, 0x70, 0x91}
+DEFINE_GUID!{FOLDERID_LocalAppDataLow,
+ 0xA520A1A4, 0x1780, 0x4FF6, 0xBD, 0x18, 0x16, 0x73, 0x43, 0xC5, 0xAF, 0x16}
+DEFINE_GUID!{FOLDERID_InternetCache,
+ 0x352481E8, 0x33BE, 0x4251, 0xBA, 0x85, 0x60, 0x07, 0xCA, 0xED, 0xCF, 0x9D}
+DEFINE_GUID!{FOLDERID_Cookies,
+ 0x2B0F765D, 0xC0E9, 0x4171, 0x90, 0x8E, 0x08, 0xA6, 0x11, 0xB8, 0x4F, 0xF6}
+DEFINE_GUID!{FOLDERID_History,
+ 0xD9DC8A3B, 0xB784, 0x432E, 0xA7, 0x81, 0x5A, 0x11, 0x30, 0xA7, 0x59, 0x63}
+DEFINE_GUID!{FOLDERID_System,
+ 0x1AC14E77, 0x02E7, 0x4E5D, 0xB7, 0x44, 0x2E, 0xB1, 0xAE, 0x51, 0x98, 0xB7}
+DEFINE_GUID!{FOLDERID_SystemX86,
+ 0xD65231B0, 0xB2F1, 0x4857, 0xA4, 0xCE, 0xA8, 0xE7, 0xC6, 0xEA, 0x7D, 0x27}
+DEFINE_GUID!{FOLDERID_Windows,
+ 0xF38BF404, 0x1D43, 0x42F2, 0x93, 0x05, 0x67, 0xDE, 0x0B, 0x28, 0xFC, 0x23}
+DEFINE_GUID!{FOLDERID_Profile,
+ 0x5E6C858F, 0x0E22, 0x4760, 0x9A, 0xFE, 0xEA, 0x33, 0x17, 0xB6, 0x71, 0x73}
+DEFINE_GUID!{FOLDERID_Pictures,
+ 0x33E28130, 0x4E1E, 0x4676, 0x83, 0x5A, 0x98, 0x39, 0x5C, 0x3B, 0xC3, 0xBB}
+DEFINE_GUID!{FOLDERID_ProgramFilesX86,
+ 0x7C5A40EF, 0xA0FB, 0x4BFC, 0x87, 0x4A, 0xC0, 0xF2, 0xE0, 0xB9, 0xFA, 0x8E}
+DEFINE_GUID!{FOLDERID_ProgramFilesCommonX86,
+ 0xDE974D24, 0xD9C6, 0x4D3E, 0xBF, 0x91, 0xF4, 0x45, 0x51, 0x20, 0xB9, 0x17}
+DEFINE_GUID!{FOLDERID_ProgramFilesX64,
+ 0x6d809377, 0x6af0, 0x444b, 0x89, 0x57, 0xa3, 0x77, 0x3f, 0x02, 0x20, 0x0e}
+DEFINE_GUID!{FOLDERID_ProgramFilesCommonX64,
+ 0x6365d5a7, 0x0f0d, 0x45e5, 0x87, 0xf6, 0x0d, 0xa5, 0x6b, 0x6a, 0x4f, 0x7d}
+DEFINE_GUID!{FOLDERID_ProgramFiles,
+ 0x905e63b6, 0xc1bf, 0x494e, 0xb2, 0x9c, 0x65, 0xb7, 0x32, 0xd3, 0xd2, 0x1a}
+DEFINE_GUID!{FOLDERID_ProgramFilesCommon,
+ 0xF7F1ED05, 0x9F6D, 0x47A2, 0xAA, 0xAE, 0x29, 0xD3, 0x17, 0xC6, 0xF0, 0x66}
+DEFINE_GUID!{FOLDERID_UserProgramFiles,
+ 0x5cd7aee2, 0x2219, 0x4a67, 0xb8, 0x5d, 0x6c, 0x9c, 0xe1, 0x56, 0x60, 0xcb}
+DEFINE_GUID!{FOLDERID_UserProgramFilesCommon,
+ 0xbcbd3057, 0xca5c, 0x4622, 0xb4, 0x2d, 0xbc, 0x56, 0xdb, 0x0a, 0xe5, 0x16}
+DEFINE_GUID!{FOLDERID_AdminTools,
+ 0x724EF170, 0xA42D, 0x4FEF, 0x9F, 0x26, 0xB6, 0x0E, 0x84, 0x6F, 0xBA, 0x4F}
+DEFINE_GUID!{FOLDERID_CommonAdminTools,
+ 0xD0384E7D, 0xBAC3, 0x4797, 0x8F, 0x14, 0xCB, 0xA2, 0x29, 0xB3, 0x92, 0xB5}
+DEFINE_GUID!{FOLDERID_Music,
+ 0x4BD8D571, 0x6D19, 0x48D3, 0xBE, 0x97, 0x42, 0x22, 0x20, 0x08, 0x0E, 0x43}
+DEFINE_GUID!{FOLDERID_Videos,
+ 0x18989B1D, 0x99B5, 0x455B, 0x84, 0x1C, 0xAB, 0x7C, 0x74, 0xE4, 0xDD, 0xFC}
+DEFINE_GUID!{FOLDERID_Ringtones,
+ 0xC870044B, 0xF49E, 0x4126, 0xA9, 0xC3, 0xB5, 0x2A, 0x1F, 0xF4, 0x11, 0xE8}
+DEFINE_GUID!{FOLDERID_PublicPictures,
+ 0xB6EBFB86, 0x6907, 0x413C, 0x9A, 0xF7, 0x4F, 0xC2, 0xAB, 0xF0, 0x7C, 0xC5}
+DEFINE_GUID!{FOLDERID_PublicMusic,
+ 0x3214FAB5, 0x9757, 0x4298, 0xBB, 0x61, 0x92, 0xA9, 0xDE, 0xAA, 0x44, 0xFF}
+DEFINE_GUID!{FOLDERID_PublicVideos,
+ 0x2400183A, 0x6185, 0x49FB, 0xA2, 0xD8, 0x4A, 0x39, 0x2A, 0x60, 0x2B, 0xA3}
+DEFINE_GUID!{FOLDERID_PublicRingtones,
+ 0xE555AB60, 0x153B, 0x4D17, 0x9F, 0x04, 0xA5, 0xFE, 0x99, 0xFC, 0x15, 0xEC}
+DEFINE_GUID!{FOLDERID_ResourceDir,
+ 0x8AD10C31, 0x2ADB, 0x4296, 0xA8, 0xF7, 0xE4, 0x70, 0x12, 0x32, 0xC9, 0x72}
+DEFINE_GUID!{FOLDERID_LocalizedResourcesDir,
+ 0x2A00375E, 0x224C, 0x49DE, 0xB8, 0xD1, 0x44, 0x0D, 0xF7, 0xEF, 0x3D, 0xDC}
+DEFINE_GUID!{FOLDERID_CommonOEMLinks,
+ 0xC1BAE2D0, 0x10DF, 0x4334, 0xBE, 0xDD, 0x7A, 0xA2, 0x0B, 0x22, 0x7A, 0x9D}
+DEFINE_GUID!{FOLDERID_CDBurning,
+ 0x9E52AB10, 0xF80D, 0x49DF, 0xAC, 0xB8, 0x43, 0x30, 0xF5, 0x68, 0x78, 0x55}
+DEFINE_GUID!{FOLDERID_UserProfiles,
+ 0x0762D272, 0xC50A, 0x4BB0, 0xA3, 0x82, 0x69, 0x7D, 0xCD, 0x72, 0x9B, 0x80}
+DEFINE_GUID!{FOLDERID_Playlists,
+ 0xDE92C1C7, 0x837F, 0x4F69, 0xA3, 0xBB, 0x86, 0xE6, 0x31, 0x20, 0x4A, 0x23}
+DEFINE_GUID!{FOLDERID_SamplePlaylists,
+ 0x15CA69B3, 0x30EE, 0x49C1, 0xAC, 0xE1, 0x6B, 0x5E, 0xC3, 0x72, 0xAF, 0xB5}
+DEFINE_GUID!{FOLDERID_SampleMusic,
+ 0xB250C668, 0xF57D, 0x4EE1, 0xA6, 0x3C, 0x29, 0x0E, 0xE7, 0xD1, 0xAA, 0x1F}
+DEFINE_GUID!{FOLDERID_SamplePictures,
+ 0xC4900540, 0x2379, 0x4C75, 0x84, 0x4B, 0x64, 0xE6, 0xFA, 0xF8, 0x71, 0x6B}
+DEFINE_GUID!{FOLDERID_SampleVideos,
+ 0x859EAD94, 0x2E85, 0x48AD, 0xA7, 0x1A, 0x09, 0x69, 0xCB, 0x56, 0xA6, 0xCD}
+DEFINE_GUID!{FOLDERID_PhotoAlbums,
+ 0x69D2CF90, 0xFC33, 0x4FB7, 0x9A, 0x0C, 0xEB, 0xB0, 0xF0, 0xFC, 0xB4, 0x3C}
+DEFINE_GUID!{FOLDERID_Public,
+ 0xDFDF76A2, 0xC82A, 0x4D63, 0x90, 0x6A, 0x56, 0x44, 0xAC, 0x45, 0x73, 0x85}
+DEFINE_GUID!{FOLDERID_ChangeRemovePrograms,
+ 0xdf7266ac, 0x9274, 0x4867, 0x8d, 0x55, 0x3b, 0xd6, 0x61, 0xde, 0x87, 0x2d}
+DEFINE_GUID!{FOLDERID_AppUpdates,
+ 0xa305ce99, 0xf527, 0x492b, 0x8b, 0x1a, 0x7e, 0x76, 0xfa, 0x98, 0xd6, 0xe4}
+DEFINE_GUID!{FOLDERID_AddNewPrograms,
+ 0xde61d971, 0x5ebc, 0x4f02, 0xa3, 0xa9, 0x6c, 0x82, 0x89, 0x5e, 0x5c, 0x04}
+DEFINE_GUID!{FOLDERID_Downloads,
+ 0x374de290, 0x123f, 0x4565, 0x91, 0x64, 0x39, 0xc4, 0x92, 0x5e, 0x46, 0x7b}
+DEFINE_GUID!{FOLDERID_PublicDownloads,
+ 0x3d644c9b, 0x1fb8, 0x4f30, 0x9b, 0x45, 0xf6, 0x70, 0x23, 0x5f, 0x79, 0xc0}
+DEFINE_GUID!{FOLDERID_SavedSearches,
+ 0x7d1d3a04, 0xdebb, 0x4115, 0x95, 0xcf, 0x2f, 0x29, 0xda, 0x29, 0x20, 0xda}
+DEFINE_GUID!{FOLDERID_QuickLaunch,
+ 0x52a4f021, 0x7b75, 0x48a9, 0x9f, 0x6b, 0x4b, 0x87, 0xa2, 0x10, 0xbc, 0x8f}
+DEFINE_GUID!{FOLDERID_Contacts,
+ 0x56784854, 0xc6cb, 0x462b, 0x81, 0x69, 0x88, 0xe3, 0x50, 0xac, 0xb8, 0x82}
+DEFINE_GUID!{FOLDERID_SidebarParts,
+ 0xa75d362e, 0x50fc, 0x4fb7, 0xac, 0x2c, 0xa8, 0xbe, 0xaa, 0x31, 0x44, 0x93}
+DEFINE_GUID!{FOLDERID_SidebarDefaultParts,
+ 0x7b396e54, 0x9ec5, 0x4300, 0xbe, 0x0a, 0x24, 0x82, 0xeb, 0xae, 0x1a, 0x26}
+DEFINE_GUID!{FOLDERID_PublicGameTasks,
+ 0xdebf2536, 0xe1a8, 0x4c59, 0xb6, 0xa2, 0x41, 0x45, 0x86, 0x47, 0x6a, 0xea}
+DEFINE_GUID!{FOLDERID_GameTasks,
+ 0x054fae61, 0x4dd8, 0x4787, 0x80, 0xb6, 0x09, 0x02, 0x20, 0xc4, 0xb7, 0x0}
+DEFINE_GUID!{FOLDERID_SavedGames,
+ 0x4c5c32ff, 0xbb9d, 0x43b0, 0xb5, 0xb4, 0x2d, 0x72, 0xe5, 0x4e, 0xaa, 0xa4}
+DEFINE_GUID!{FOLDERID_Games,
+ 0xcac52c1a, 0xb53d, 0x4edc, 0x92, 0xd7, 0x6b, 0x2e, 0x8a, 0xc1, 0x94, 0x34}
+DEFINE_GUID!{FOLDERID_SEARCH_MAPI,
+ 0x98ec0e18, 0x2098, 0x4d44, 0x86, 0x44, 0x66, 0x97, 0x93, 0x15, 0xa2, 0x81}
+DEFINE_GUID!{FOLDERID_SEARCH_CSC,
+ 0xee32e446, 0x31ca, 0x4aba, 0x81, 0x4f, 0xa5, 0xeb, 0xd2, 0xfd, 0x6d, 0x5e}
+DEFINE_GUID!{FOLDERID_Links,
+ 0xbfb9d5e0, 0xc6a9, 0x404c, 0xb2, 0xb2, 0xae, 0x6d, 0xb6, 0xaf, 0x49, 0x68}
+DEFINE_GUID!{FOLDERID_UsersFiles,
+ 0xf3ce0f7c, 0x4901, 0x4acc, 0x86, 0x48, 0xd5, 0xd4, 0x4b, 0x04, 0xef, 0x8f}
+DEFINE_GUID!{FOLDERID_UsersLibraries,
+ 0xa302545d, 0xdeff, 0x464b, 0xab, 0xe8, 0x61, 0xc8, 0x64, 0x8d, 0x93, 0x9b}
+DEFINE_GUID!{FOLDERID_SearchHome,
+ 0x190337d1, 0xb8ca, 0x4121, 0xa6, 0x39, 0x6d, 0x47, 0x2d, 0x16, 0x97, 0x2a}
+DEFINE_GUID!{FOLDERID_OriginalImages,
+ 0x2C36C0AA, 0x5812, 0x4b87, 0xbf, 0xd0, 0x4c, 0xd0, 0xdf, 0xb1, 0x9b, 0x39}
+DEFINE_GUID!{FOLDERID_DocumentsLibrary,
+ 0x7b0db17d, 0x9cd2, 0x4a93, 0x97, 0x33, 0x46, 0xcc, 0x89, 0x02, 0x2e, 0x7c}
+DEFINE_GUID!{FOLDERID_MusicLibrary,
+ 0x2112ab0a, 0xc86a, 0x4ffe, 0xa3, 0x68, 0x0d, 0xe9, 0x6e, 0x47, 0x01, 0x2e}
+DEFINE_GUID!{FOLDERID_PicturesLibrary,
+ 0xa990ae9f, 0xa03b, 0x4e80, 0x94, 0xbc, 0x99, 0x12, 0xd7, 0x50, 0x41, 0x4}
+DEFINE_GUID!{FOLDERID_VideosLibrary,
+ 0x491e922f, 0x5643, 0x4af4, 0xa7, 0xeb, 0x4e, 0x7a, 0x13, 0x8d, 0x81, 0x74}
+DEFINE_GUID!{FOLDERID_RecordedTVLibrary,
+ 0x1a6fdba2, 0xf42d, 0x4358, 0xa7, 0x98, 0xb7, 0x4d, 0x74, 0x59, 0x26, 0xc5}
+DEFINE_GUID!{FOLDERID_HomeGroup,
+ 0x52528a6b, 0xb9e3, 0x4add, 0xb6, 0x0d, 0x58, 0x8c, 0x2d, 0xba, 0x84, 0x2d}
+DEFINE_GUID!{FOLDERID_HomeGroupCurrentUser,
+ 0x9b74b6a3, 0x0dfd, 0x4f11, 0x9e, 0x78, 0x5f, 0x78, 0x00, 0xf2, 0xe7, 0x72}
+DEFINE_GUID!{FOLDERID_DeviceMetadataStore,
+ 0x5ce4a5e9, 0xe4eb, 0x479d, 0xb8, 0x9f, 0x13, 0x0c, 0x02, 0x88, 0x61, 0x55}
+DEFINE_GUID!{FOLDERID_Libraries,
+ 0x1b3ea5dc, 0xb587, 0x4786, 0xb4, 0xef, 0xbd, 0x1d, 0xc3, 0x32, 0xae, 0xae}
+DEFINE_GUID!{FOLDERID_PublicLibraries,
+ 0x48daf80b, 0xe6cf, 0x4f4e, 0xb8, 0x00, 0x0e, 0x69, 0xd8, 0x4e, 0xe3, 0x84}
+DEFINE_GUID!{FOLDERID_UserPinned,
+ 0x9e3995ab, 0x1f9c, 0x4f13, 0xb8, 0x27, 0x48, 0xb2, 0x4b, 0x6c, 0x71, 0x74}
+DEFINE_GUID!{FOLDERID_ImplicitAppShortcuts,
+ 0xbcb5256f, 0x79f6, 0x4cee, 0xb7, 0x25, 0xdc, 0x34, 0xe4, 0x02, 0xfd, 0x46}
+DEFINE_GUID!{FOLDERID_AccountPictures,
+ 0x008ca0b1, 0x55b4, 0x4c56, 0xb8, 0xa8, 0x4d, 0xe4, 0xb2, 0x99, 0xd3, 0xbe}
+DEFINE_GUID!{FOLDERID_PublicUserTiles,
+ 0x0482af6c, 0x08f1, 0x4c34, 0x8c, 0x90, 0xe1, 0x7e, 0xc9, 0x8b, 0x1e, 0x17}
+DEFINE_GUID!{FOLDERID_AppsFolder,
+ 0x1e87508d, 0x89c2, 0x42f0, 0x8a, 0x7e, 0x64, 0x5a, 0x0f, 0x50, 0xca, 0x58}
+DEFINE_GUID!{FOLDERID_StartMenuAllPrograms,
+ 0xf26305ef, 0x6948, 0x40b9, 0xb2, 0x55, 0x81, 0x45, 0x3d, 0x09, 0xc7, 0x85}
+DEFINE_GUID!{FOLDERID_CommonStartMenuPlaces,
+ 0xa440879f, 0x87a0, 0x4f7d, 0xb7, 0x00, 0x02, 0x07, 0xb9, 0x66, 0x19, 0x4a}
+DEFINE_GUID!{FOLDERID_ApplicationShortcuts,
+ 0xa3918781, 0xe5f2, 0x4890, 0xb3, 0xd9, 0xa7, 0xe5, 0x43, 0x32, 0x32, 0x8c}
+DEFINE_GUID!{FOLDERID_RoamingTiles,
+ 0x00bcfc5a, 0xed94, 0x4e48, 0x96, 0xa1, 0x3f, 0x62, 0x17, 0xf2, 0x19, 0x90}
+DEFINE_GUID!{FOLDERID_RoamedTileImages,
+ 0xaaa8d5a5, 0xf1d6, 0x4259, 0xba, 0xa8, 0x78, 0xe7, 0xef, 0x60, 0x83, 0x5e}
+DEFINE_GUID!{FOLDERID_Screenshots,
+ 0xb7bede81, 0xdf94, 0x4682, 0xa7, 0xd8, 0x57, 0xa5, 0x26, 0x20, 0xb8, 0x6f}
+DEFINE_GUID!{FOLDERID_CameraRoll,
+ 0xab5fb87b, 0x7ce2, 0x4f83, 0x91, 0x5d, 0x55, 0x08, 0x46, 0xc9, 0x53, 0x7b}
+DEFINE_GUID!{FOLDERID_SkyDrive,
+ 0xa52bba46, 0xe9e1, 0x435f, 0xb3, 0xd9, 0x28, 0xda, 0xa6, 0x48, 0xc0, 0xf6}
+DEFINE_GUID!{FOLDERID_OneDrive,
+ 0xa52bba46, 0xe9e1, 0x435f, 0xb3, 0xd9, 0x28, 0xda, 0xa6, 0x48, 0xc0, 0xf6}
+DEFINE_GUID!{FOLDERID_SkyDriveDocuments,
+ 0x24d89e24, 0x2f19, 0x4534, 0x9d, 0xde, 0x6a, 0x66, 0x71, 0xfb, 0xb8, 0xfe}
+DEFINE_GUID!{FOLDERID_SkyDrivePictures,
+ 0x339719b5, 0x8c47, 0x4894, 0x94, 0xc2, 0xd8, 0xf7, 0x7a, 0xdd, 0x44, 0xa6}
+DEFINE_GUID!{FOLDERID_SkyDriveMusic,
+ 0xc3f2459e, 0x80d6, 0x45dc, 0xbf, 0xef, 0x1f, 0x76, 0x9f, 0x2b, 0xe7, 0x30}
+DEFINE_GUID!{FOLDERID_SkyDriveCameraRoll,
+ 0x767e6811, 0x49cb, 0x4273, 0x87, 0xc2, 0x20, 0xf3, 0x55, 0xe1, 0x08, 0x5b}
+DEFINE_GUID!{FOLDERID_SearchHistory,
+ 0x0d4c3db6, 0x03a3, 0x462f, 0xa0, 0xe6, 0x08, 0x92, 0x4c, 0x41, 0xb5, 0xd4}
+DEFINE_GUID!{FOLDERID_SearchTemplates,
+ 0x7e636bfe, 0xdfa9, 0x4d5e, 0xb4, 0x56, 0xd7, 0xb3, 0x98, 0x51, 0xd8, 0xa9}
+DEFINE_GUID!{FOLDERID_CameraRollLibrary,
+ 0x2b20df75, 0x1eda, 0x4039, 0x80, 0x97, 0x38, 0x79, 0x82, 0x27, 0xd5, 0xb7}
+DEFINE_GUID!{FOLDERID_SavedPictures,
+ 0x3b193882, 0xd3ad, 0x4eab, 0x96, 0x5a, 0x69, 0x82, 0x9d, 0x1f, 0xb5, 0x9f}
+DEFINE_GUID!{FOLDERID_SavedPicturesLibrary,
+ 0xe25b5812, 0xbe88, 0x4bd9, 0x94, 0xb0, 0x29, 0x23, 0x34, 0x77, 0xb6, 0xc3}
+DEFINE_GUID!{FOLDERID_RetailDemo,
+ 0x12d4c69e, 0x24ad, 0x4923, 0xbe, 0x19, 0x31, 0x32, 0x1c, 0x43, 0xa7, 0x67}
+DEFINE_GUID!{FOLDERID_Device,
+ 0x1C2AC1DC, 0x4358, 0x4B6C, 0x97, 0x33, 0xAF, 0x21, 0x15, 0x65, 0x76, 0xF0}
+DEFINE_GUID!{FOLDERID_DevelopmentFiles,
+ 0xdbe8e08e, 0x3053, 0x4bbc, 0xb1, 0x83, 0x2a, 0x7b, 0x2b, 0x19, 0x1e, 0x59}
+DEFINE_GUID!{FOLDERID_Objects3D,
+ 0x31c0dd25, 0x9439, 0x4f12, 0xbf, 0x41, 0x7f, 0xf4, 0xed, 0xa3, 0x87, 0x22}
+DEFINE_GUID!{FOLDERID_AppCaptures,
+ 0xedc0fe71, 0x98d8, 0x4f4a, 0xb9, 0x20, 0xc8, 0xdc, 0x13, 0x3c, 0xb1, 0x65}
+DEFINE_GUID!{FOLDERID_LocalDocuments,
+ 0xf42ee2d3, 0x909f, 0x4907, 0x88, 0x71, 0x4c, 0x22, 0xfc, 0x0b, 0xf7, 0x56}
+DEFINE_GUID!{FOLDERID_LocalPictures,
+ 0x0ddd015d, 0xb06c, 0x45d5, 0x8c, 0x4c, 0xf5, 0x97, 0x13, 0x85, 0x46, 0x39}
+DEFINE_GUID!{FOLDERID_LocalVideos,
+ 0x35286a68, 0x3c57, 0x41a1, 0xbb, 0xb1, 0x0e, 0xae, 0x73, 0xd7, 0x6c, 0x95}
+DEFINE_GUID!{FOLDERID_LocalMusic,
+ 0xa0c69a99, 0x21c8, 0x4671, 0x87, 0x03, 0x79, 0x34, 0x16, 0x2f, 0xcf, 0x1d}
+DEFINE_GUID!{FOLDERID_LocalDownloads,
+ 0x7d83ee9b, 0x2244, 0x4e70, 0xb1, 0xf5, 0x53, 0x93, 0x04, 0x2a, 0xf1, 0xe4}
+DEFINE_GUID!{FOLDERID_RecordedCalls,
+ 0x2f8b40c2, 0x83ed, 0x48ee, 0xb3, 0x83, 0xa1, 0xf1, 0x57, 0xec, 0x6f, 0x9a}
+DEFINE_GUID!{FOLDERID_AllAppMods,
+ 0x7ad67899, 0x66af, 0x43ba, 0x91, 0x56, 0x6a, 0xad, 0x42, 0xe6, 0xc5, 0x96}
+DEFINE_GUID!{FOLDERID_CurrentAppMods,
+ 0x3db40b20, 0x2a30, 0x4dbe, 0x91, 0x7e, 0x77, 0x1d, 0xd2, 0x1d, 0xd0, 0x99}
+DEFINE_GUID!{FOLDERID_AppDataDesktop,
+ 0xb2c5e279, 0x7add, 0x439f, 0xb2, 0x8c, 0xc4, 0x1f, 0xe1, 0xbb, 0xf6, 0x72}
+DEFINE_GUID!{FOLDERID_AppDataDocuments,
+ 0x7be16610, 0x1f7f, 0x44ac, 0xbf, 0xf0, 0x83, 0xe1, 0x5f, 0x2f, 0xfc, 0xa1}
+DEFINE_GUID!{FOLDERID_AppDataFavorites,
+ 0x7cfbefbc, 0xde1f, 0x45aa, 0xb8, 0x43, 0xa5, 0x42, 0xac, 0x53, 0x6c, 0xc9}
+DEFINE_GUID!{FOLDERID_AppDataProgramData,
+ 0x559d40a3, 0xa036, 0x40fa, 0xaf, 0x61, 0x84, 0xcb, 0x43, 0x0a, 0x4d, 0x34}
diff --git a/vendor/winapi/src/um/ktmw32.rs b/vendor/winapi/src/um/ktmw32.rs
new file mode 100644
index 000000000..c1b882247
--- /dev/null
+++ b/vendor/winapi/src/um/ktmw32.rs
@@ -0,0 +1,63 @@
+// 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
+//! FFI bindings to ktmw32.
+use shared::guiddef::LPGUID;
+use shared::minwindef::{BOOL, DWORD};
+use um::minwinbase::LPSECURITY_ATTRIBUTES;
+use um::winnt::{HANDLE, LPWSTR};
+extern "system" {
+ pub fn CreateTransaction(
+ lpTransactionAttributes: LPSECURITY_ATTRIBUTES,
+ UOW: LPGUID,
+ CreateOptions: DWORD,
+ IsolationLevel: DWORD,
+ IsolationFlags: DWORD,
+ Timeout: DWORD,
+ Description: LPWSTR,
+ ) -> HANDLE;
+ // pub fn OpenTransaction();
+ pub fn CommitTransaction(
+ TransactionHandle: HANDLE,
+ ) -> BOOL;
+ // pub fn CommitTransactionAsync();
+ pub fn RollbackTransaction(
+ TransactionHandle: HANDLE,
+ ) -> BOOL;
+ // pub fn RollbackTransactionAsync();
+ // pub fn GetTransactionId();
+ // pub fn GetTransactionInformation();
+ // pub fn SetTransactionInformation();
+ // pub fn CreateTransactionManager();
+ // pub fn OpenTransactionManager();
+ // pub fn OpenTransactionManagerById();
+ // pub fn RenameTransactionManager();
+ // pub fn RollforwardTransactionManager();
+ // pub fn RecoverTransactionManager();
+ // pub fn GetCurrentClockTransactionManager();
+ // pub fn GetTransactionManagerId();
+ // pub fn CreateResourceManager();
+ // pub fn OpenResourceManager();
+ // pub fn RecoverResourceManager();
+ // pub fn GetNotificationResourceManager();
+ // pub fn GetNotificationResourceManagerAsync();
+ // pub fn SetResourceManagerCompletionPort();
+ // pub fn CreateEnlistment();
+ // pub fn OpenEnlistment();
+ // pub fn RecoverEnlistment();
+ // pub fn GetEnlistmentRecoveryInformation();
+ // pub fn GetEnlistmentId();
+ // pub fn SetEnlistmentRecoveryInformation();
+ // pub fn PrepareEnlistment();
+ // pub fn PrePrepareEnlistment();
+ // pub fn CommitEnlistment();
+ // pub fn RollbackEnlistment();
+ // pub fn PrePrepareComplete();
+ // pub fn PrepareComplete();
+ // pub fn ReadOnlyEnlistment();
+ // pub fn CommitComplete();
+ // pub fn RollbackComplete();
+ // pub fn SinglePhaseReject();
+}
diff --git a/vendor/winapi/src/um/l2cmn.rs b/vendor/winapi/src/um/l2cmn.rs
new file mode 100644
index 000000000..152aed13a
--- /dev/null
+++ b/vendor/winapi/src/um/l2cmn.rs
@@ -0,0 +1,55 @@
+// 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.
+//! Definitions and data structures for common layer 2.
+use shared::guiddef::GUID;
+use shared::minwindef::DWORD;
+use um::winnt::PVOID;
+pub const L2_PROFILE_MAX_NAME_LENGTH: usize = 256;
+pub const L2_NOTIFICATION_SOURCE_NONE: DWORD = 0;
+pub const L2_NOTIFICATION_SOURCE_DOT3_AUTO_CONFIG: DWORD = 0x00000001;
+pub const L2_NOTIFICATION_SOURCE_SECURITY: DWORD = 0x00000002;
+pub const L2_NOTIFICATION_SOURCE_ONEX: DWORD = 0x00000004;
+pub const L2_NOTIFICATION_SOURCE_WLAN_ACM: DWORD = 0x00000008;
+pub const L2_NOTIFICATION_SOURCE_WLAN_MSM: DWORD = 0x00000010;
+pub const L2_NOTIFICATION_SOURCE_WLAN_SECURITY: DWORD = 0x00000020;
+pub const L2_NOTIFICATION_SOURCE_WLAN_IHV: DWORD = 0x00000040;
+pub const L2_NOTIFICATION_SOURCE_WLAN_HNWK: DWORD = 0x00000080;
+pub const L2_NOTIFICATION_SOURCE_WCM: DWORD = 0x00000100;
+pub const L2_NOTIFICATION_SOURCE_WCM_CSP: DWORD = 0x00000200;
+pub const L2_NOTIFICATION_SOURCE_WFD: DWORD = 0x00000400;
+pub const L2_NOTIFICATION_SOURCE_ALL: DWORD = 0x0000ffff;
+pub const L2_NOTIFICATION_CODE_PUBLIC_BEGIN: DWORD = 0x00000000;
+pub const L2_NOTIFICATION_CODE_GROUP_SIZE: DWORD = 0x00001000;
+pub const L2_NOTIFICATION_CODE_V2_BEGIN: DWORD = L2_NOTIFICATION_CODE_PUBLIC_BEGIN
+ + L2_NOTIFICATION_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_GROUP_SIZE: u32 = 0x10000;
+pub const L2_REASON_CODE_GEN_BASE: u32 = 0x10000;
+pub const L2_REASON_CODE_DOT11_AC_BASE: u32 = L2_REASON_CODE_GEN_BASE + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_DOT11_MSM_BASE: u32 = L2_REASON_CODE_DOT11_AC_BASE
+ + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_DOT11_SECURITY_BASE: u32 = L2_REASON_CODE_DOT11_MSM_BASE
+ + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_ONEX_BASE: u32 = L2_REASON_CODE_DOT11_SECURITY_BASE
+ + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_DOT3_AC_BASE: u32 = L2_REASON_CODE_ONEX_BASE
+ + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_DOT3_MSM_BASE: u32 = L2_REASON_CODE_DOT3_AC_BASE
+ + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_PROFILE_BASE: u32 = L2_REASON_CODE_DOT3_MSM_BASE
+ + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_IHV_BASE: u32 = L2_REASON_CODE_PROFILE_BASE + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_WIMAX_BASE: u32 = L2_REASON_CODE_IHV_BASE + L2_REASON_CODE_GROUP_SIZE;
+pub const L2_REASON_CODE_SUCCESS: u32 = 0;
+pub const L2_REASON_CODE_UNKNOWN: u32 = L2_REASON_CODE_GEN_BASE + 1;
+pub const L2_REASON_CODE_PROFILE_MISSING: u32 = 0x00000001;
+STRUCT!{struct L2_NOTIFICATION_DATA {
+ NotificationSource: DWORD,
+ NotificationCode: DWORD,
+ InterfaceGuid: GUID,
+ dwDataSize: DWORD,
+ pData: PVOID,
+}}
+pub type PL2_NOTIFICATION_DATA = *mut L2_NOTIFICATION_DATA;
diff --git a/vendor/winapi/src/um/libloaderapi.rs b/vendor/winapi/src/um/libloaderapi.rs
new file mode 100644
index 000000000..05e3017d2
--- /dev/null
+++ b/vendor/winapi/src/um/libloaderapi.rs
@@ -0,0 +1,236 @@
+// 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.
+//! ApiSet Contract for api-ms-win-core-libraryloader-l1
+use ctypes::c_int;
+use shared::basetsd::LONG_PTR;
+use shared::minwindef::{
+ BOOL, DWORD, FARPROC, HGLOBAL, HINSTANCE, HMODULE, HRSRC, LPVOID, UINT, WORD
+};
+use um::winnt::{HANDLE, LANGID, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PCWSTR, PVOID};
+pub const GET_MODULE_HANDLE_EX_FLAG_PIN: DWORD = 0x00000001;
+pub const GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT: DWORD = 0x00000002;
+pub const GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS: DWORD = 0x00000004;
+pub const DONT_RESOLVE_DLL_REFERENCES: DWORD = 0x00000001;
+pub const LOAD_LIBRARY_AS_DATAFILE: DWORD = 0x00000002;
+pub const LOAD_WITH_ALTERED_SEARCH_PATH: DWORD = 0x00000008;
+pub const LOAD_IGNORE_CODE_AUTHZ_LEVEL: DWORD = 0x00000010;
+pub const LOAD_LIBRARY_AS_IMAGE_RESOURCE: DWORD = 0x00000020;
+pub const LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE: DWORD = 0x00000040;
+pub const LOAD_LIBRARY_REQUIRE_SIGNED_TARGET: DWORD = 0x00000080;
+pub const LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR: DWORD = 0x00000100;
+pub const LOAD_LIBRARY_SEARCH_APPLICATION_DIR: DWORD = 0x00000200;
+pub const LOAD_LIBRARY_SEARCH_USER_DIRS: DWORD = 0x00000400;
+pub const LOAD_LIBRARY_SEARCH_SYSTEM32: DWORD = 0x00000800;
+pub const LOAD_LIBRARY_SEARCH_DEFAULT_DIRS: DWORD = 0x00001000;
+pub const LOAD_LIBRARY_SAFE_CURRENT_DIRS: DWORD = 0x00002000;
+pub const LOAD_LIBRARY_SEARCH_SYSTEM32_NO_FORWARDER: DWORD = 0x00004000;
+pub const LOAD_LIBRARY_OS_INTEGRITY_CONTINUITY: DWORD = 0x00008000;
+FN!{stdcall ENUMRESLANGPROCA(
+ hModule: HMODULE,
+ lpType: LPCSTR,
+ lpName: LPCSTR,
+ wLanguage: WORD,
+ lParam: LONG_PTR,
+) -> BOOL}
+FN!{stdcall ENUMRESLANGPROCW(
+ hModule: HMODULE,
+ lpType: LPCWSTR,
+ lpName: LPCWSTR,
+ wLanguage: WORD,
+ lParam: LONG_PTR,
+) -> BOOL}
+FN!{stdcall ENUMRESNAMEPROCA(
+ hModule: HMODULE,
+ lpType: LPCSTR,
+ lpName: LPSTR,
+ lParam: LONG_PTR,
+) -> BOOL}
+FN!{stdcall ENUMRESNAMEPROCW(
+ hModule: HMODULE,
+ lpType: LPCWSTR,
+ lpName: LPWSTR,
+ lParam: LONG_PTR,
+) -> BOOL}
+FN!{stdcall ENUMRESTYPEPROCA(
+ hModule: HMODULE,
+ lpType: LPSTR,
+ lParam: LONG_PTR,
+) -> BOOL}
+FN!{stdcall ENUMRESTYPEPROCW(
+ hModule: HMODULE,
+ lpType: LPWSTR,
+ lParam: LONG_PTR,
+) -> BOOL}
+extern "system" {
+ pub fn DisableThreadLibraryCalls(
+ hLibModule: HMODULE,
+ ) -> BOOL;
+ pub fn FindResourceExW(
+ hModule: HMODULE,
+ lpName: LPCWSTR,
+ lpType: LPCWSTR,
+ wLanguage: WORD,
+ ) -> HRSRC;
+ pub fn FindStringOrdinal(
+ dwFindStringOrdinalFlags: DWORD,
+ lpStringSource: LPCWSTR,
+ cchSource: c_int,
+ lpStringValue: LPCWSTR,
+ cchValue: c_int,
+ bIgnoreCase: BOOL,
+ ) -> c_int;
+ pub fn FreeLibrary(
+ hLibModule: HMODULE,
+ ) -> BOOL;
+ pub fn FreeLibraryAndExitThread(
+ hLibModule: HMODULE,
+ dwExitCode: DWORD,
+ );
+ pub fn FreeResource(
+ hResData: HGLOBAL,
+ ) -> BOOL;
+ pub fn GetModuleFileNameA(
+ hModule: HMODULE,
+ lpFilename: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetModuleFileNameW(
+ hModule: HMODULE,
+ lpFilename: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetModuleHandleA(
+ lpModuleName: LPCSTR,
+ ) -> HMODULE;
+ pub fn GetModuleHandleW(
+ lpModuleName: LPCWSTR,
+ ) -> HMODULE;
+ pub fn GetModuleHandleExA(
+ dwFlags: DWORD,
+ lpModuleName: LPCSTR,
+ phModule: *mut HMODULE,
+ ) -> BOOL;
+ pub fn GetModuleHandleExW(
+ dwFlags: DWORD,
+ lpModuleName: LPCWSTR,
+ phModule: *mut HMODULE,
+ ) -> BOOL;
+ pub fn GetProcAddress(
+ hModule: HMODULE,
+ lpProcName: LPCSTR,
+ ) -> FARPROC;
+ pub fn LoadLibraryExA(
+ lpLibFileName: LPCSTR,
+ hFile: HANDLE,
+ dwFlags: DWORD,
+ ) -> HMODULE;
+ pub fn LoadLibraryExW(
+ lpLibFileName: LPCWSTR,
+ hFile: HANDLE,
+ dwFlags: DWORD,
+ ) -> HMODULE;
+ pub fn LoadResource(
+ hModule: HMODULE,
+ hResInfo: HRSRC,
+ ) -> HGLOBAL;
+ pub fn LoadStringA(
+ hInstance: HINSTANCE,
+ uID: UINT,
+ lpBuffer: LPSTR,
+ cchBufferMax: c_int,
+ ) -> c_int;
+ pub fn LoadStringW(
+ hInstance: HINSTANCE,
+ uID: UINT,
+ lpBuffer: LPWSTR,
+ cchBufferMax: c_int,
+ ) -> c_int;
+ pub fn LockResource(
+ hResData: HGLOBAL,
+ ) -> LPVOID;
+ pub fn SizeofResource(
+ hModule: HMODULE,
+ hResInfo: HRSRC,
+ ) -> DWORD;
+}
+pub type DLL_DIRECTORY_COOKIE = PVOID;
+pub type PDLL_DIRECTORY_COOKIE = *mut PVOID;
+extern "system" {
+ pub fn AddDllDirectory(
+ NewDirectory: PCWSTR,
+ ) -> DLL_DIRECTORY_COOKIE;
+ pub fn RemoveDllDirectory(
+ Cookie: DLL_DIRECTORY_COOKIE,
+ ) -> BOOL;
+ pub fn SetDefaultDllDirectories(
+ DirectoryFlags: DWORD,
+ ) -> BOOL;
+ pub fn EnumResourceLanguagesExA(
+ hModule: HMODULE,
+ lpType: LPCSTR,
+ lpName: LPCSTR,
+ lpEnumFunc: ENUMRESLANGPROCA,
+ lParam: LONG_PTR,
+ dwFlags: DWORD,
+ LangId: LANGID,
+ ) -> BOOL;
+ pub fn EnumResourceLanguagesExW(
+ hModule: HMODULE,
+ lpType: LPCWSTR,
+ lpName: LPCWSTR,
+ lpEnumFunc: ENUMRESLANGPROCW,
+ lParam: LONG_PTR,
+ dwFlags: DWORD,
+ LangId: LANGID,
+ ) -> BOOL;
+ pub fn EnumResourceNamesExA(
+ hModule: HMODULE,
+ lpType: LPCSTR,
+ lpEnumFunc: ENUMRESNAMEPROCA,
+ lParam: LONG_PTR,
+ dwFlags: DWORD,
+ LangId: LANGID,
+ ) -> BOOL;
+ pub fn EnumResourceNamesExW(
+ hModule: HMODULE,
+ lpType: LPCWSTR,
+ lpEnumFunc: ENUMRESNAMEPROCW,
+ lParam: LONG_PTR,
+ dwFlags: DWORD,
+ LangId: LANGID,
+ ) -> BOOL;
+ pub fn EnumResourceTypesExA(
+ hModule: HMODULE,
+ lpEnumFunc: ENUMRESTYPEPROCA,
+ lParam: LONG_PTR,
+ dwFlags: DWORD,
+ LangId: LANGID,
+ ) -> BOOL;
+ pub fn EnumResourceTypesExW(
+ hModule: HMODULE,
+ lpEnumFunc: ENUMRESTYPEPROCW,
+ lParam: LONG_PTR,
+ dwFlags: DWORD,
+ LangId: LANGID,
+ ) -> BOOL;
+ pub fn FindResourceW(
+ hModule: HMODULE,
+ lpName: LPCWSTR,
+ lpType: LPCWSTR,
+ ) -> HRSRC;
+ pub fn LoadLibraryA(
+ lpFileName: LPCSTR,
+ ) -> HMODULE;
+ pub fn LoadLibraryW(
+ lpFileName: LPCWSTR,
+ ) -> HMODULE;
+ pub fn EnumResourceNamesW(
+ hModule: HMODULE,
+ lpType: LPCWSTR,
+ lpEnumFunc: ENUMRESNAMEPROCW,
+ lParam: LONG_PTR,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/lmaccess.rs b/vendor/winapi/src/um/lmaccess.rs
new file mode 100644
index 000000000..76cbab927
--- /dev/null
+++ b/vendor/winapi/src/um/lmaccess.rs
@@ -0,0 +1,1215 @@
+// 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
+// This file contains structures, function prototypes, and definitions
+// for the NetUser, NetUserModals, NetGroup, NetAccess, and NetLogon API.
+use shared::basetsd::PDWORD_PTR;
+use shared::lmcons::{ENCRYPTED_PWLEN, NET_API_STATUS, PARMNUM_BASE_INFOLEVEL, PWLEN};
+use shared::minwindef::{BOOL, BYTE, DWORD, FILETIME, LPBYTE, LPDWORD, LPVOID, PBYTE, ULONG};
+use um::winnt::{BOOLEAN, LONG, LPCWSTR, LPWSTR, PSID, PVOID, PZPWSTR, SID_NAME_USE};
+extern "system" {
+ pub fn NetUserAdd(
+ servername: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetUserEnum(
+ servername: LPCWSTR,
+ level: DWORD,
+ filter: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resumehandle: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetUserGetInfo(
+ servername: LPCWSTR,
+ username: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetUserSetInfo(
+ servername: LPCWSTR,
+ username: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetUserDel(
+ servername: LPCWSTR,
+ username: LPCWSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetUserGetGroups(
+ servername: LPCWSTR,
+ username: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetUserSetGroups(
+ servername: LPCWSTR,
+ username: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ num_entries: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetUserGetLocalGroups(
+ servername: LPCWSTR,
+ username: LPCWSTR,
+ level: DWORD,
+ flags: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetUserModalsGet(
+ servername: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetUserModalsSet(
+ servername: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetUserChangePassword(
+ domainname: LPCWSTR,
+ username: LPCWSTR,
+ oldpassword: LPCWSTR,
+ newpassword: LPCWSTR,
+ ) -> NET_API_STATUS;
+}
+STRUCT!{struct USER_INFO_0 {
+ usri0_name: LPWSTR,
+}}
+pub type PUSER_INFO_0 = *mut USER_INFO_0;
+pub type LPUSER_INFO_0 = *mut USER_INFO_0;
+STRUCT!{struct USER_INFO_1 {
+ usri1_name: LPWSTR,
+ usri1_password: LPWSTR,
+ usri1_password_age: DWORD,
+ usri1_priv: DWORD,
+ usri1_home_dir: LPWSTR,
+ usri1_comment: LPWSTR,
+ usri1_flags: DWORD,
+ usri1_script_path: LPWSTR,
+}}
+pub type PUSER_INFO_1 = *mut USER_INFO_1;
+pub type LPUSER_INFO_1 = *mut USER_INFO_1;
+STRUCT!{struct USER_INFO_2 {
+ usri2_name: LPWSTR,
+ usri2_password: LPWSTR,
+ usri2_password_age: DWORD,
+ usri2_priv: DWORD,
+ usri2_home_dir: LPWSTR,
+ usri2_comment: LPWSTR,
+ usri2_flags: DWORD,
+ usri2_script_path: LPWSTR,
+ usri2_auth_flags: DWORD,
+ usri2_full_name: LPWSTR,
+ usri2_usr_comment: LPWSTR,
+ usri2_parms: LPWSTR,
+ usri2_workstations: LPWSTR,
+ usri2_last_logon: DWORD,
+ usri2_last_logoff: DWORD,
+ usri2_acct_expires: DWORD,
+ usri2_max_storage: DWORD,
+ usri2_units_per_week: DWORD,
+ usri2_logon_hours: PBYTE,
+ usri2_bad_pw_count: DWORD,
+ usri2_num_logons: DWORD,
+ usri2_logon_server: LPWSTR,
+ usri2_country_code: DWORD,
+ usri2_code_page: DWORD,
+}}
+pub type PUSER_INFO_2 = *mut USER_INFO_2;
+pub type LPUSER_INFO_2 = *mut USER_INFO_2;
+STRUCT!{struct USER_INFO_3 {
+ usri3_name: LPWSTR,
+ usri3_password: LPWSTR,
+ usri3_password_age: DWORD,
+ usri3_priv: DWORD,
+ usri3_home_dir: LPWSTR,
+ usri3_comment: LPWSTR,
+ usri3_flags: DWORD,
+ usri3_script_path: LPWSTR,
+ usri3_auth_flags: DWORD,
+ usri3_full_name: LPWSTR,
+ usri3_usr_comment: LPWSTR,
+ usri3_parms: LPWSTR,
+ usri3_workstations: LPWSTR,
+ usri3_last_logon: DWORD,
+ usri3_last_logoff: DWORD,
+ usri3_acct_expires: DWORD,
+ usri3_max_storage: DWORD,
+ usri3_units_per_week: DWORD,
+ usri3_logon_hours: PBYTE,
+ usri3_bad_pw_count: DWORD,
+ usri3_num_logons: DWORD,
+ usri3_logon_server: LPWSTR,
+ usri3_country_code: DWORD,
+ usri3_code_page: DWORD,
+ usri3_user_id: DWORD,
+ usri3_primary_group_id: DWORD,
+ usri3_profile: LPWSTR,
+ usri3_home_dir_drive: LPWSTR,
+ usri3_password_expired: DWORD,
+}}
+pub type PUSER_INFO_3 = *mut USER_INFO_3;
+pub type LPUSER_INFO_3 = *mut USER_INFO_3;
+STRUCT!{struct USER_INFO_4 {
+ usri4_name: LPWSTR,
+ usri4_password: LPWSTR,
+ usri4_password_age: DWORD,
+ usri4_priv: DWORD,
+ usri4_home_dir: LPWSTR,
+ usri4_comment: LPWSTR,
+ usri4_flags: DWORD,
+ usri4_script_path: LPWSTR,
+ usri4_auth_flags: DWORD,
+ usri4_full_name: LPWSTR,
+ usri4_usr_comment: LPWSTR,
+ usri4_parms: LPWSTR,
+ usri4_workstations: LPWSTR,
+ usri4_last_logon: DWORD,
+ usri4_last_logoff: DWORD,
+ usri4_acct_expires: DWORD,
+ usri4_max_storage: DWORD,
+ usri4_units_per_week: DWORD,
+ usri4_logon_hours: PBYTE,
+ usri4_bad_pw_count: DWORD,
+ usri4_num_logons: DWORD,
+ usri4_logon_server: LPWSTR,
+ usri4_country_code: DWORD,
+ usri4_code_page: DWORD,
+ usri4_user_sid: PSID,
+ usri4_primary_group_id: DWORD,
+ usri4_profile: LPWSTR,
+ usri4_home_dir_drive: LPWSTR,
+ usri4_password_expired: DWORD,
+}}
+pub type PUSER_INFO_4 = *mut USER_INFO_4;
+pub type LPUSER_INFO_4 = *mut USER_INFO_4;
+STRUCT!{struct USER_INFO_10 {
+ usri10_name: LPWSTR,
+ usri10_comment: LPWSTR,
+ usri10_usr_comment: LPWSTR,
+ usri10_full_name: LPWSTR,
+}}
+pub type PUSER_INFO_10 = *mut USER_INFO_10;
+pub type LPUSER_INFO_10 = *mut USER_INFO_10;
+STRUCT!{struct USER_INFO_11 {
+ usri11_name: LPWSTR,
+ usri11_comment: LPWSTR,
+ usri11_usr_comment: LPWSTR,
+ usri11_full_name: LPWSTR,
+ usri11_priv: DWORD,
+ usri11_auth_flags: DWORD,
+ usri11_password_age: DWORD,
+ usri11_home_dir: LPWSTR,
+ usri11_parms: LPWSTR,
+ usri11_last_logon: DWORD,
+ usri11_last_logoff: DWORD,
+ usri11_bad_pw_count: DWORD,
+ usri11_num_logons: DWORD,
+ usri11_logon_server: LPWSTR,
+ usri11_country_code: DWORD,
+ usri11_workstations: LPWSTR,
+ usri11_max_storage: DWORD,
+ usri11_units_per_week: DWORD,
+ usri11_logon_hours: PBYTE,
+ usri11_code_page: DWORD,
+}}
+pub type PUSER_INFO_11 = *mut USER_INFO_11;
+pub type LPUSER_INFO_11 = *mut USER_INFO_11;
+STRUCT!{struct USER_INFO_20 {
+ usri20_name: LPWSTR,
+ usri20_full_name: LPWSTR,
+ usri20_comment: LPWSTR,
+ usri20_flags: DWORD,
+ usri20_user_id: DWORD,
+}}
+pub type PUSER_INFO_20 = *mut USER_INFO_20;
+pub type LPUSER_INFO_20 = *mut USER_INFO_20;
+STRUCT!{struct USER_INFO_21 {
+ usri21_password: [BYTE; ENCRYPTED_PWLEN],
+}}
+pub type PUSER_INFO_21 = *mut USER_INFO_21;
+pub type LPUSER_INFO_21 = *mut USER_INFO_21;
+STRUCT!{struct USER_INFO_22 {
+ usri22_name: LPWSTR,
+ usri22_password: [BYTE; ENCRYPTED_PWLEN],
+ usri22_password_age: DWORD,
+ usri22_priv: DWORD,
+ usri22_home_dir: LPWSTR,
+ usri22_comment: LPWSTR,
+ usri22_flags: DWORD,
+ usri22_script_path: LPWSTR,
+ usri22_auth_flags: DWORD,
+ usri22_full_name: LPWSTR,
+ usri22_usr_comment: LPWSTR,
+ usri22_parms: LPWSTR,
+ usri22_workstations: LPWSTR,
+ usri22_last_logon: DWORD,
+ usri22_last_logoff: DWORD,
+ usri22_acct_expires: DWORD,
+ usri22_max_storage: DWORD,
+ usri22_units_per_week: DWORD,
+ usri22_logon_hours: PBYTE,
+ usri22_bad_pw_count: DWORD,
+ usri22_num_logons: DWORD,
+ usri22_logon_server: LPWSTR,
+ usri22_country_code: DWORD,
+ usri22_code_page: DWORD,
+}}
+pub type PUSER_INFO_22 = *mut USER_INFO_22;
+pub type LPUSER_INFO_22 = *mut USER_INFO_22;
+STRUCT!{struct USER_INFO_23 {
+ usri23_name: LPWSTR,
+ usri23_full_name: LPWSTR,
+ usri23_comment: LPWSTR,
+ usri23_flags: DWORD,
+ usri23_user_sid: PSID,
+}}
+pub type PUSER_INFO_23 = *mut USER_INFO_23;
+pub type LPUSER_INFO_23 = *mut USER_INFO_23;
+STRUCT!{struct USER_INFO_24 {
+ usri24_internet_identity: BOOL,
+ usri24_flags: DWORD,
+ usri24_internet_provider_name: LPWSTR,
+ usri24_internet_principal_name: LPWSTR,
+ usri24_user_sid: PSID,
+}}
+pub type PUSER_INFO_24 = *mut USER_INFO_24;
+pub type LPUSER_INFO_24 = *mut USER_INFO_24;
+STRUCT!{struct USER_INFO_1003 {
+ usri1003_password: LPWSTR,
+}}
+pub type PUSER_INFO_1003 = *mut USER_INFO_1003;
+pub type LPUSER_INFO_1003 = *mut USER_INFO_1003;
+STRUCT!{struct USER_INFO_1005 {
+ usri1005_priv: DWORD,
+}}
+pub type PUSER_INFO_1005 = *mut USER_INFO_1005;
+pub type LPUSER_INFO_1005 = *mut USER_INFO_1005;
+STRUCT!{struct USER_INFO_1006 {
+ usri1006_home_dir: LPWSTR,
+}}
+pub type PUSER_INFO_1006 = *mut USER_INFO_1006;
+pub type LPUSER_INFO_1006 = *mut USER_INFO_1006;
+STRUCT!{struct USER_INFO_1007 {
+ usri1007_comment: LPWSTR,
+}}
+pub type PUSER_INFO_1007 = *mut USER_INFO_1007;
+pub type LPUSER_INFO_1007 = *mut USER_INFO_1007;
+STRUCT!{struct USER_INFO_1008 {
+ usri1008_flags: DWORD,
+}}
+pub type PUSER_INFO_1008 = *mut USER_INFO_1008;
+pub type LPUSER_INFO_1008 = *mut USER_INFO_1008;
+STRUCT!{struct USER_INFO_1009 {
+ usri1009_script_path: LPWSTR,
+}}
+pub type PUSER_INFO_1009 = *mut USER_INFO_1009;
+pub type LPUSER_INFO_1009 = *mut USER_INFO_1009;
+STRUCT!{struct USER_INFO_1010 {
+ usri1010_auth_flags: DWORD,
+}}
+pub type PUSER_INFO_1010 = *mut USER_INFO_1010;
+pub type LPUSER_INFO_1010 = *mut USER_INFO_1010;
+STRUCT!{struct USER_INFO_1011 {
+ usri1011_full_name: LPWSTR,
+}}
+pub type PUSER_INFO_1011 = *mut USER_INFO_1011;
+pub type LPUSER_INFO_1011 = *mut USER_INFO_1011;
+STRUCT!{struct USER_INFO_1012 {
+ usri1012_usr_comment: LPWSTR,
+}}
+pub type PUSER_INFO_1012 = *mut USER_INFO_1012;
+pub type LPUSER_INFO_1012 = *mut USER_INFO_1012;
+STRUCT!{struct USER_INFO_1013 {
+ usri1013_parms: LPWSTR,
+}}
+pub type PUSER_INFO_1013 = *mut USER_INFO_1013;
+pub type LPUSER_INFO_1013 = *mut USER_INFO_1013;
+STRUCT!{struct USER_INFO_1014 {
+ usri1014_workstations: LPWSTR,
+}}
+pub type PUSER_INFO_1014 = *mut USER_INFO_1014;
+pub type LPUSER_INFO_1014 = *mut USER_INFO_1014;
+STRUCT!{struct USER_INFO_1017 {
+ usri1017_acct_expires: DWORD,
+}}
+pub type PUSER_INFO_1017 = *mut USER_INFO_1017;
+pub type LPUSER_INFO_1017 = *mut USER_INFO_1017;
+STRUCT!{struct USER_INFO_1018 {
+ usri1018_max_storage: DWORD,
+}}
+pub type PUSER_INFO_1018 = *mut USER_INFO_1018;
+pub type LPUSER_INFO_1018 = *mut USER_INFO_1018;
+STRUCT!{struct USER_INFO_1020 {
+ usri1020_units_per_week: DWORD,
+ usri1020_logon_hours: LPBYTE,
+}}
+pub type PUSER_INFO_1020 = *mut USER_INFO_1020;
+pub type LPUSER_INFO_1020 = *mut USER_INFO_1020;
+STRUCT!{struct USER_INFO_1023 {
+ usri1023_logon_server: LPWSTR,
+}}
+pub type PUSER_INFO_1023 = *mut USER_INFO_1023;
+pub type LPUSER_INFO_1023 = *mut USER_INFO_1023;
+STRUCT!{struct USER_INFO_1024 {
+ usri1024_country_code: DWORD,
+}}
+pub type PUSER_INFO_1024 = *mut USER_INFO_1024;
+pub type LPUSER_INFO_1024 = *mut USER_INFO_1024;
+STRUCT!{struct USER_INFO_1025 {
+ usri1025_code_page: DWORD,
+}}
+pub type PUSER_INFO_1025 = *mut USER_INFO_1025;
+pub type LPUSER_INFO_1025 = *mut USER_INFO_1025;
+STRUCT!{struct USER_INFO_1051 {
+ usri1051_primary_group_id: DWORD,
+}}
+pub type PUSER_INFO_1051 = *mut USER_INFO_1051;
+pub type LPUSER_INFO_1051 = *mut USER_INFO_1051;
+STRUCT!{struct USER_INFO_1052 {
+ usri1052_profile: LPWSTR,
+}}
+pub type PUSER_INFO_1052 = *mut USER_INFO_1052;
+pub type LPUSER_INFO_1052 = *mut USER_INFO_1052;
+STRUCT!{struct USER_INFO_1053 {
+ usri1053_home_dir_drive: LPWSTR,
+}}
+pub type PUSER_INFO_1053 = *mut USER_INFO_1053;
+pub type LPUSER_INFO_1053 = *mut USER_INFO_1053;
+STRUCT!{struct USER_MODALS_INFO_0 {
+ usrmod0_min_passwd_len: DWORD,
+ usrmod0_max_passwd_age: DWORD,
+ usrmod0_min_passwd_age: DWORD,
+ usrmod0_force_logoff: DWORD,
+ usrmod0_password_hist_len: DWORD,
+}}
+pub type PUSER_MODALS_INFO_0 = *mut USER_MODALS_INFO_0;
+pub type LPUSER_MODALS_INFO_0 = *mut USER_MODALS_INFO_0;
+STRUCT!{struct USER_MODALS_INFO_1 {
+ usrmod1_role: DWORD,
+ usrmod1_primary: LPWSTR,
+}}
+pub type PUSER_MODALS_INFO_1 = *mut USER_MODALS_INFO_1;
+pub type LPUSER_MODALS_INFO_1 = *mut USER_MODALS_INFO_1;
+STRUCT!{struct USER_MODALS_INFO_2 {
+ usrmod2_domain_name: LPWSTR,
+ usrmod2_domain_id: PSID,
+}}
+pub type PUSER_MODALS_INFO_2 = *mut USER_MODALS_INFO_2;
+pub type LPUSER_MODALS_INFO_2 = *mut USER_MODALS_INFO_2;
+STRUCT!{struct USER_MODALS_INFO_3 {
+ usrmod3_lockout_duration: DWORD,
+ usrmod3_lockout_observation_window: DWORD,
+ usrmod3_lockout_threshold: DWORD,
+}}
+pub type PUSER_MODALS_INFO_3 = *mut USER_MODALS_INFO_3;
+pub type LPUSER_MODALS_INFO_3 = *mut USER_MODALS_INFO_3;
+STRUCT!{struct USER_MODALS_INFO_1001 {
+ usrmod1001_min_passwd_len: DWORD,
+}}
+pub type PUSER_MODALS_INFO_1001 = *mut USER_MODALS_INFO_1001;
+pub type LPUSER_MODALS_INFO_1001 = *mut USER_MODALS_INFO_1001;
+STRUCT!{struct USER_MODALS_INFO_1002 {
+ usrmod1002_max_passwd_age: DWORD,
+}}
+pub type PUSER_MODALS_INFO_1002 = *mut USER_MODALS_INFO_1002;
+pub type LPUSER_MODALS_INFO_1002 = *mut USER_MODALS_INFO_1002;
+STRUCT!{struct USER_MODALS_INFO_1003 {
+ usrmod1003_min_passwd_age: DWORD,
+}}
+pub type PUSER_MODALS_INFO_1003 = *mut USER_MODALS_INFO_1003;
+pub type LPUSER_MODALS_INFO_1003 = *mut USER_MODALS_INFO_1003;
+STRUCT!{struct USER_MODALS_INFO_1004 {
+ usrmod1004_force_logoff: DWORD,
+}}
+pub type PUSER_MODALS_INFO_1004 = *mut USER_MODALS_INFO_1004;
+pub type LPUSER_MODALS_INFO_1004 = *mut USER_MODALS_INFO_1004;
+STRUCT!{struct USER_MODALS_INFO_1005 {
+ usrmod1005_password_hist_len: DWORD,
+}}
+pub type PUSER_MODALS_INFO_1005 = *mut USER_MODALS_INFO_1005;
+pub type LPUSER_MODALS_INFO_1005 = *mut USER_MODALS_INFO_1005;
+STRUCT!{struct USER_MODALS_INFO_1006 {
+ usrmod1006_role: DWORD,
+}}
+pub type PUSER_MODALS_INFO_1006 = *mut USER_MODALS_INFO_1006;
+pub type LPUSER_MODALS_INFO_1006 = *mut USER_MODALS_INFO_1006;
+STRUCT!{struct USER_MODALS_INFO_1007 {
+ usrmod1007_primary: LPWSTR,
+}}
+pub type PUSER_MODALS_INFO_1007 = *mut USER_MODALS_INFO_1007;
+pub type LPUSER_MODALS_INFO_1007 = *mut USER_MODALS_INFO_1007;
+pub const UF_SCRIPT: DWORD = 0x0001;
+pub const UF_ACCOUNTDISABLE: DWORD = 0x0002;
+pub const UF_HOMEDIR_REQUIRED: DWORD = 0x0008;
+pub const UF_LOCKOUT: DWORD = 0x0010;
+pub const UF_PASSWD_NOTREQD: DWORD = 0x0020;
+pub const UF_PASSWD_CANT_CHANGE: DWORD = 0x0040;
+pub const UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED: DWORD = 0x0080;
+pub const UF_TEMP_DUPLICATE_ACCOUNT: DWORD = 0x0100;
+pub const UF_NORMAL_ACCOUNT: DWORD = 0x0200;
+pub const UF_INTERDOMAIN_TRUST_ACCOUNT: DWORD = 0x0800;
+pub const UF_WORKSTATION_TRUST_ACCOUNT: DWORD = 0x1000;
+pub const UF_SERVER_TRUST_ACCOUNT: DWORD = 0x2000;
+pub const UF_MACHINE_ACCOUNT_MASK: DWORD = UF_INTERDOMAIN_TRUST_ACCOUNT
+ | UF_WORKSTATION_TRUST_ACCOUNT | UF_SERVER_TRUST_ACCOUNT;
+pub const UF_ACCOUNT_TYPE_MASK: DWORD = UF_TEMP_DUPLICATE_ACCOUNT | UF_NORMAL_ACCOUNT
+ | UF_INTERDOMAIN_TRUST_ACCOUNT | UF_WORKSTATION_TRUST_ACCOUNT | UF_SERVER_TRUST_ACCOUNT;
+pub const UF_DONT_EXPIRE_PASSWD: DWORD = 0x10000;
+pub const UF_MNS_LOGON_ACCOUNT: DWORD = 0x20000;
+pub const UF_SMARTCARD_REQUIRED: DWORD = 0x40000;
+pub const UF_TRUSTED_FOR_DELEGATION: DWORD = 0x80000;
+pub const UF_NOT_DELEGATED: DWORD = 0x100000;
+pub const UF_USE_DES_KEY_ONLY: DWORD = 0x200000;
+pub const UF_DONT_REQUIRE_PREAUTH: DWORD = 0x400000;
+pub const UF_PASSWORD_EXPIRED: DWORD = 0x800000;
+pub const UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION: DWORD = 0x1000000;
+pub const UF_NO_AUTH_DATA_REQUIRED: DWORD = 0x2000000;
+pub const UF_PARTIAL_SECRETS_ACCOUNT: DWORD = 0x4000000;
+pub const UF_USE_AES_KEYS: DWORD = 0x8000000;
+pub const UF_SETTABLE_BITS: DWORD = UF_SCRIPT | UF_ACCOUNTDISABLE | UF_LOCKOUT
+ | UF_HOMEDIR_REQUIRED | UF_PASSWD_NOTREQD | UF_PASSWD_CANT_CHANGE | UF_ACCOUNT_TYPE_MASK
+ | UF_DONT_EXPIRE_PASSWD | UF_MNS_LOGON_ACCOUNT | UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED
+ | UF_SMARTCARD_REQUIRED | UF_TRUSTED_FOR_DELEGATION | UF_NOT_DELEGATED | UF_USE_DES_KEY_ONLY
+ | UF_DONT_REQUIRE_PREAUTH | UF_PASSWORD_EXPIRED | UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION
+ | UF_NO_AUTH_DATA_REQUIRED | UF_USE_AES_KEYS | UF_PARTIAL_SECRETS_ACCOUNT;
+pub const FILTER_TEMP_DUPLICATE_ACCOUNT: DWORD = 0x0001;
+pub const FILTER_NORMAL_ACCOUNT: DWORD = 0x0002;
+pub const FILTER_INTERDOMAIN_TRUST_ACCOUNT: DWORD = 0x0008;
+pub const FILTER_WORKSTATION_TRUST_ACCOUNT: DWORD = 0x0010;
+pub const FILTER_SERVER_TRUST_ACCOUNT: DWORD = 0x0020;
+pub const LG_INCLUDE_INDIRECT: DWORD = 0x0001;
+pub const AF_OP_PRINT: DWORD = 0x1;
+pub const AF_OP_COMM: DWORD = 0x2;
+pub const AF_OP_SERVER: DWORD = 0x4;
+pub const AF_OP_ACCOUNTS: DWORD = 0x8;
+pub const AF_SETTABLE_BITS: DWORD = AF_OP_PRINT | AF_OP_COMM | AF_OP_SERVER | AF_OP_ACCOUNTS;
+pub const UAS_ROLE_STANDALONE: DWORD = 0;
+pub const UAS_ROLE_MEMBER: DWORD = 1;
+pub const UAS_ROLE_BACKUP: DWORD = 2;
+pub const UAS_ROLE_PRIMARY: DWORD = 3;
+pub const USER_NAME_PARMNUM: DWORD = 1;
+pub const USER_PASSWORD_PARMNUM: DWORD = 3;
+pub const USER_PASSWORD_AGE_PARMNUM: DWORD = 4;
+pub const USER_PRIV_PARMNUM: DWORD = 5;
+pub const USER_HOME_DIR_PARMNUM: DWORD = 6;
+pub const USER_COMMENT_PARMNUM: DWORD = 7;
+pub const USER_FLAGS_PARMNUM: DWORD = 8;
+pub const USER_SCRIPT_PATH_PARMNUM: DWORD = 9;
+pub const USER_AUTH_FLAGS_PARMNUM: DWORD = 10;
+pub const USER_FULL_NAME_PARMNUM: DWORD = 11;
+pub const USER_USR_COMMENT_PARMNUM: DWORD = 12;
+pub const USER_PARMS_PARMNUM: DWORD = 13;
+pub const USER_WORKSTATIONS_PARMNUM: DWORD = 14;
+pub const USER_LAST_LOGON_PARMNUM: DWORD = 15;
+pub const USER_LAST_LOGOFF_PARMNUM: DWORD = 16;
+pub const USER_ACCT_EXPIRES_PARMNUM: DWORD = 17;
+pub const USER_MAX_STORAGE_PARMNUM: DWORD = 18;
+pub const USER_UNITS_PER_WEEK_PARMNUM: DWORD = 19;
+pub const USER_LOGON_HOURS_PARMNUM: DWORD = 20;
+pub const USER_PAD_PW_COUNT_PARMNUM: DWORD = 21;
+pub const USER_NUM_LOGONS_PARMNUM: DWORD = 22;
+pub const USER_LOGON_SERVER_PARMNUM: DWORD = 23;
+pub const USER_COUNTRY_CODE_PARMNUM: DWORD = 24;
+pub const USER_CODE_PAGE_PARMNUM: DWORD = 25;
+pub const USER_PRIMARY_GROUP_PARMNUM: DWORD = 51;
+pub const USER_PROFILE: DWORD = 52;
+pub const USER_PROFILE_PARMNUM: DWORD = 52;
+pub const USER_HOME_DIR_DRIVE_PARMNUM: DWORD = 53;
+pub const USER_NAME_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_NAME_PARMNUM;
+pub const USER_PASSWORD_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_PASSWORD_PARMNUM;
+pub const USER_PASSWORD_AGE_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + USER_PASSWORD_AGE_PARMNUM;
+pub const USER_PRIV_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_PRIV_PARMNUM;
+pub const USER_HOME_DIR_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_HOME_DIR_PARMNUM;
+pub const USER_COMMENT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_COMMENT_PARMNUM;
+pub const USER_FLAGS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_FLAGS_PARMNUM;
+pub const USER_SCRIPT_PATH_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + USER_SCRIPT_PATH_PARMNUM;
+pub const USER_AUTH_FLAGS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_AUTH_FLAGS_PARMNUM;
+pub const USER_FULL_NAME_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_FULL_NAME_PARMNUM;
+pub const USER_USR_COMMENT_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + USER_USR_COMMENT_PARMNUM;
+pub const USER_PARMS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_PARMS_PARMNUM;
+pub const USER_WORKSTATIONS_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + USER_WORKSTATIONS_PARMNUM;
+pub const USER_LAST_LOGON_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_LAST_LOGON_PARMNUM;
+pub const USER_LAST_LOGOFF_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + USER_LAST_LOGOFF_PARMNUM;
+pub const USER_ACCT_EXPIRES_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + USER_ACCT_EXPIRES_PARMNUM;
+pub const USER_MAX_STORAGE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_MAX_STORAGE_PARMNUM;
+pub const USER_UNITS_PER_WEEK_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + USER_UNITS_PER_WEEK_PARMNUM;
+pub const USER_LOGON_HOURS_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + USER_LOGON_HOURS_PARMNUM;
+pub const USER_PAD_PW_COUNT_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + USER_PAD_PW_COUNT_PARMNUM;
+pub const USER_NUM_LOGONS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_NUM_LOGONS_PARMNUM;
+pub const USER_LOGON_SERVER_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + USER_LOGON_SERVER_PARMNUM;
+pub const USER_COUNTRY_CODE_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + USER_COUNTRY_CODE_PARMNUM;
+pub const USER_CODE_PAGE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_CODE_PAGE_PARMNUM;
+pub const USER_PRIMARY_GROUP_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + USER_PRIMARY_GROUP_PARMNUM;
+pub const USER_HOME_DIR_DRIVE_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + USER_HOME_DIR_DRIVE_PARMNUM;
+pub const NULL_USERSETINFO_PASSWD: &'static str = " ";
+pub const TIMEQ_FOREVER: DWORD = -1i32 as u32;
+pub const USER_MAXSTORAGE_UNLIMITED: DWORD = -1i32 as u32;
+pub const USER_NO_LOGOFF: DWORD = -1i32 as u32;
+pub const UNITS_PER_DAY: DWORD = 24;
+pub const UNITS_PER_WEEK: DWORD = UNITS_PER_DAY * 7;
+pub const USER_PRIV_MASK: DWORD = 0x3;
+pub const USER_PRIV_GUEST: DWORD = 0;
+pub const USER_PRIV_USER: DWORD = 1;
+pub const USER_PRIV_ADMIN: DWORD = 2;
+pub const MAX_PASSWD_LEN: DWORD = PWLEN;
+pub const DEF_MIN_PWLEN: DWORD = 6;
+pub const DEF_PWUNIQUENESS: DWORD = 5;
+pub const DEF_MAX_PWHIST: DWORD = 8;
+pub const DEF_MAX_PWAGE: DWORD = TIMEQ_FOREVER;
+pub const DEF_MIN_PWAGE: DWORD = 0;
+pub const DEF_FORCE_LOGOFF: DWORD = 0xffffffff;
+pub const DEF_MAX_BADPW: DWORD = 0;
+pub const ONE_DAY: DWORD = 1 * 24 * 3600;
+pub const VALIDATED_LOGON: DWORD = 0;
+pub const PASSWORD_EXPIRED: DWORD = 2;
+pub const NON_VALIDATED_LOGON: DWORD = 3;
+pub const VALID_LOGOFF: DWORD = 1;
+pub const MODALS_MIN_PASSWD_LEN_PARMNUM: DWORD = 1;
+pub const MODALS_MAX_PASSWD_AGE_PARMNUM: DWORD = 2;
+pub const MODALS_MIN_PASSWD_AGE_PARMNUM: DWORD = 3;
+pub const MODALS_FORCE_LOGOFF_PARMNUM: DWORD = 4;
+pub const MODALS_PASSWD_HIST_LEN_PARMNUM: DWORD = 5;
+pub const MODALS_ROLE_PARMNUM: DWORD = 6;
+pub const MODALS_PRIMARY_PARMNUM: DWORD = 7;
+pub const MODALS_DOMAIN_NAME_PARMNUM: DWORD = 8;
+pub const MODALS_DOMAIN_ID_PARMNUM: DWORD = 9;
+pub const MODALS_LOCKOUT_DURATION_PARMNUM: DWORD = 10;
+pub const MODALS_LOCKOUT_OBSERVATION_WINDOW_PARMNUM: DWORD = 11;
+pub const MODALS_LOCKOUT_THRESHOLD_PARMNUM: DWORD = 12;
+pub const MODALS_MIN_PASSWD_LEN_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + MODALS_MIN_PASSWD_LEN_PARMNUM;
+pub const MODALS_MAX_PASSWD_AGE_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + MODALS_MAX_PASSWD_AGE_PARMNUM;
+pub const MODALS_MIN_PASSWD_AGE_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + MODALS_MIN_PASSWD_AGE_PARMNUM;
+pub const MODALS_FORCE_LOGOFF_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + MODALS_FORCE_LOGOFF_PARMNUM;
+pub const MODALS_PASSWD_HIST_LEN_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + MODALS_PASSWD_HIST_LEN_PARMNUM;
+pub const MODALS_ROLE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + MODALS_ROLE_PARMNUM;
+pub const MODALS_PRIMARY_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + MODALS_PRIMARY_PARMNUM;
+pub const MODALS_DOMAIN_NAME_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + MODALS_DOMAIN_NAME_PARMNUM;
+pub const MODALS_DOMAIN_ID_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + MODALS_DOMAIN_ID_PARMNUM;
+extern "system" {
+ pub fn NetGroupAdd(
+ servername: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetGroupAddUser(
+ servername: LPCWSTR,
+ GroupName: LPCWSTR,
+ username: LPCWSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetGroupEnum(
+ servername: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resume_handle: PDWORD_PTR,
+ ) -> NET_API_STATUS;
+ pub fn NetGroupGetInfo(
+ servername: LPCWSTR,
+ groupname: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetGroupSetInfo(
+ servername: LPCWSTR,
+ groupname: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetGroupDel(
+ servername: LPCWSTR,
+ groupname: LPCWSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetGroupDelUser(
+ servername: LPCWSTR,
+ GroupName: LPCWSTR,
+ Username: LPCWSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetGroupGetUsers(
+ servername: LPCWSTR,
+ groupname: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ ResumeHandle: PDWORD_PTR,
+ ) -> NET_API_STATUS;
+ pub fn NetGroupSetUsers(
+ servername: LPCWSTR,
+ groupname: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ totalentries: DWORD,
+ ) -> NET_API_STATUS;
+}
+STRUCT!{struct GROUP_INFO_0 {
+ grpi0_name: LPWSTR,
+}}
+pub type PGROUP_INFO_0 = *mut GROUP_INFO_0;
+pub type LPGROUP_INFO_0 = *mut GROUP_INFO_0;
+STRUCT!{struct GROUP_INFO_1 {
+ grpi1_name: LPWSTR,
+ grpi1_comment: LPWSTR,
+}}
+pub type PGROUP_INFO_1 = *mut GROUP_INFO_1;
+pub type LPGROUP_INFO_1 = *mut GROUP_INFO_1;
+STRUCT!{struct GROUP_INFO_2 {
+ grpi2_name: LPWSTR,
+ grpi2_comment: LPWSTR,
+ grpi2_group_id: DWORD,
+ grpi2_attributes: DWORD,
+}}
+pub type PGROUP_INFO_2 = *mut GROUP_INFO_2;
+STRUCT!{struct GROUP_INFO_3 {
+ grpi3_name: LPWSTR,
+ grpi3_comment: LPWSTR,
+ grpi3_group_sid: PSID,
+ grpi3_attributes: DWORD,
+}}
+pub type PGROUP_INFO_3 = *mut GROUP_INFO_3;
+STRUCT!{struct GROUP_INFO_1002 {
+ grpi1002_comment: LPWSTR,
+}}
+pub type PGROUP_INFO_1002 = *mut GROUP_INFO_1002;
+pub type LPGROUP_INFO_1002 = *mut GROUP_INFO_1002;
+STRUCT!{struct GROUP_INFO_1005 {
+ grpi1005_attributes: DWORD,
+}}
+pub type PGROUP_INFO_1005 = *mut GROUP_INFO_1005;
+pub type LPGROUP_INFO_1005 = *mut GROUP_INFO_1005;
+STRUCT!{struct GROUP_USERS_INFO_0 {
+ grui0_name: LPWSTR,
+}}
+pub type PGROUP_USERS_INFO_0 = *mut GROUP_USERS_INFO_0;
+pub type LPGROUP_USERS_INFO_0 = *mut GROUP_USERS_INFO_0;
+STRUCT!{struct GROUP_USERS_INFO_1 {
+ grui1_name: LPWSTR,
+ grui1_attributes: DWORD,
+}}
+pub type PGROUP_USERS_INFO_1 = *mut GROUP_USERS_INFO_1;
+pub type LPGROUP_USERS_INFO_1 = *mut GROUP_USERS_INFO_1;
+pub const GROUPIDMASK: DWORD = 0x8000;
+pub const GROUP_SPECIALGRP_USERS: &'static str = "USERS";
+pub const GROUP_SPECIALGRP_ADMINS: &'static str = "ADMINS";
+pub const GROUP_SPECIALGRP_GUESTS: &'static str = "GUESTS";
+pub const GROUP_SPECIALGRP_LOCAL: &'static str = "LOCAL";
+pub const GROUP_ALL_PARMNUM: DWORD = 0;
+pub const GROUP_NAME_PARMNUM: DWORD = 1;
+pub const GROUP_COMMENT_PARMNUM: DWORD = 2;
+pub const GROUP_ATTRIBUTES_PARMNUM: DWORD = 3;
+pub const GROUP_ALL_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + GROUP_ALL_PARMNUM;
+pub const GROUP_NAME_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + GROUP_NAME_PARMNUM;
+pub const GROUP_COMMENT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + GROUP_COMMENT_PARMNUM;
+pub const GROUP_ATTRIBUTES_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + GROUP_ATTRIBUTES_PARMNUM;
+extern "system" {
+ pub fn NetLocalGroupAdd(
+ servername: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetLocalGroupAddMember(
+ servername: LPCWSTR,
+ groupname: LPCWSTR,
+ membersid: PSID,
+ ) -> NET_API_STATUS;
+ pub fn NetLocalGroupEnum(
+ servername: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resumehandle: PDWORD_PTR,
+ ) -> NET_API_STATUS;
+ pub fn NetLocalGroupGetInfo(
+ servername: LPCWSTR,
+ groupname: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetLocalGroupSetInfo(
+ servername: LPCWSTR,
+ groupname: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetLocalGroupDel(
+ servername: LPCWSTR,
+ groupname: LPCWSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetLocalGroupDelMember(
+ servername: LPCWSTR,
+ groupname: LPCWSTR,
+ membersid: PSID,
+ ) -> NET_API_STATUS;
+ pub fn NetLocalGroupGetMembers(
+ servername: LPCWSTR,
+ localgroupname: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resumehandle: PDWORD_PTR,
+ ) -> NET_API_STATUS;
+ pub fn NetLocalGroupSetMembers(
+ servername: LPCWSTR,
+ groupname: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ totalentries: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetLocalGroupAddMembers(
+ servername: LPCWSTR,
+ groupname: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ totalentries: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetLocalGroupDelMembers(
+ servername: LPCWSTR,
+ groupname: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ totalentries: DWORD,
+ ) -> NET_API_STATUS;
+}
+STRUCT!{struct LOCALGROUP_INFO_0 {
+ lgrpi0_name: LPWSTR,
+}}
+pub type PLOCALGROUP_INFO_0 = *mut LOCALGROUP_INFO_0;
+pub type LPLOCALGROUP_INFO_0 = *mut LOCALGROUP_INFO_0;
+STRUCT!{struct LOCALGROUP_INFO_1 {
+ lgrpi1_name: LPWSTR,
+ lgrpi1_comment: LPWSTR,
+}}
+pub type PLOCALGROUP_INFO_1 = *mut LOCALGROUP_INFO_1;
+pub type LPLOCALGROUP_INFO_1 = *mut LOCALGROUP_INFO_1;
+STRUCT!{struct LOCALGROUP_INFO_1002 {
+ lgrpi1002_comment: LPWSTR,
+}}
+pub type PLOCALGROUP_INFO_1002 = *mut LOCALGROUP_INFO_1002;
+pub type LPLOCALGROUP_INFO_1002 = *mut LOCALGROUP_INFO_1002;
+STRUCT!{struct LOCALGROUP_MEMBERS_INFO_0 {
+ lgrmi0_sid: PSID,
+}}
+pub type PLOCALGROUP_MEMBERS_INFO_0 = *mut LOCALGROUP_MEMBERS_INFO_0;
+pub type LPLOCALGROUP_MEMBERS_INFO_0 = *mut LOCALGROUP_MEMBERS_INFO_0;
+STRUCT!{struct LOCALGROUP_MEMBERS_INFO_1 {
+ lgrmi1_sid: PSID,
+ lgrmi1_sidusage: SID_NAME_USE,
+ lgrmi1_name: LPWSTR,
+}}
+pub type PLOCALGROUP_MEMBERS_INFO_1 = *mut LOCALGROUP_MEMBERS_INFO_1;
+pub type LPLOCALGROUP_MEMBERS_INFO_1 = *mut LOCALGROUP_MEMBERS_INFO_1;
+STRUCT!{struct LOCALGROUP_MEMBERS_INFO_2 {
+ lgrmi2_sid: PSID,
+ lgrmi2_sidusage: SID_NAME_USE,
+ lgrmi2_domainandname: LPWSTR,
+}}
+pub type PLOCALGROUP_MEMBERS_INFO_2 = *mut LOCALGROUP_MEMBERS_INFO_2;
+pub type LPLOCALGROUP_MEMBERS_INFO_2 = *mut LOCALGROUP_MEMBERS_INFO_2;
+STRUCT!{struct LOCALGROUP_MEMBERS_INFO_3 {
+ lgrmi3_domainandname: LPWSTR,
+}}
+pub type PLOCALGROUP_MEMBERS_INFO_3 = *mut LOCALGROUP_MEMBERS_INFO_3;
+pub type LPLOCALGROUP_MEMBERS_INFO_3 = *mut LOCALGROUP_MEMBERS_INFO_3;
+STRUCT!{struct LOCALGROUP_USERS_INFO_0 {
+ lgrui0_name: LPWSTR,
+}}
+pub type PLOCALGROUP_USERS_INFO_0 = *mut LOCALGROUP_USERS_INFO_0;
+pub type LPLOCALGROUP_USERS_INFO_0 = *mut LOCALGROUP_USERS_INFO_0;
+pub const LOCALGROUP_NAME_PARMNUM: DWORD = 1;
+pub const LOCALGROUP_COMMENT_PARMNUM: DWORD = 2;
+extern "system" {
+ pub fn NetQueryDisplayInformation(
+ ServerName: LPCWSTR,
+ Level: DWORD,
+ Index: DWORD,
+ EntriesRequested: DWORD,
+ PreferredMaximumLength: DWORD,
+ ReturnedEntryCount: LPDWORD,
+ SortedBuffer: *mut PVOID,
+ ) -> NET_API_STATUS;
+ pub fn NetGetDisplayInformationIndex(
+ ServerName: LPCWSTR,
+ Level: DWORD,
+ Prefix: LPCWSTR,
+ Index: LPDWORD,
+ ) -> NET_API_STATUS;
+}
+STRUCT!{struct NET_DISPLAY_USER {
+ usri1_name: LPWSTR,
+ usri1_comment: LPWSTR,
+ usri1_flags: DWORD,
+ usri1_full_name: LPWSTR,
+ usri1_user_id: DWORD,
+ usri1_next_index: DWORD,
+}}
+pub type PNET_DISPLAY_USER = *mut NET_DISPLAY_USER;
+STRUCT!{struct NET_DISPLAY_MACHINE {
+ usri2_name: LPWSTR,
+ usri2_comment: LPWSTR,
+ usri2_flags: DWORD,
+ usri2_user_id: DWORD,
+ usri2_next_index: DWORD,
+}}
+pub type PNET_DISPLAY_MACHINE = *mut NET_DISPLAY_MACHINE;
+STRUCT!{struct NET_DISPLAY_GROUP {
+ usri3_name: LPWSTR,
+ usri3_comment: LPWSTR,
+ grpi3_group_id: DWORD,
+ grpi3_attributes: DWORD,
+ grpi3_next_index: DWORD,
+}}
+pub type PNET_DISPLAY_GROUP = *mut NET_DISPLAY_GROUP;
+extern "system" {
+ pub fn NetAccessAdd(
+ servername: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetAccessEnum(
+ servername: LPCWSTR,
+ BasePath: LPCWSTR,
+ Recursive: DWORD,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resume_handle: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetAccessGetInfo(
+ servername: LPCWSTR,
+ resource: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetAccessSetInfo(
+ servername: LPCWSTR,
+ resource: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetAccessDel(
+ servername: LPCWSTR,
+ resource: LPCWSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetAccessGetUserPerms(
+ servername: LPCWSTR,
+ UGname: LPCWSTR,
+ resource: LPCWSTR,
+ Perms: LPDWORD,
+ ) -> NET_API_STATUS;
+}
+STRUCT!{struct ACCESS_INFO_0 {
+ acc0_resource_name: LPWSTR,
+}}
+pub type PACCESS_INFO_0 = *mut ACCESS_INFO_0;
+pub type LPACCESS_INFO_0 = *mut ACCESS_INFO_0;
+STRUCT!{struct ACCESS_INFO_1 {
+ acc1_resource_name: LPWSTR,
+ acc1_attr: DWORD,
+ acc1_count: DWORD,
+}}
+pub type PACCESS_INFO_1 = *mut ACCESS_INFO_1;
+pub type LPACCESS_INFO_1 = *mut ACCESS_INFO_1;
+STRUCT!{struct ACCESS_INFO_1002 {
+ acc1002_attr: DWORD,
+}}
+pub type PACCESS_INFO_1002 = *mut ACCESS_INFO_1002;
+pub type LPACCESS_INFO_1002 = *mut ACCESS_INFO_1002;
+STRUCT!{struct ACCESS_LIST {
+ acl_ugname: LPWSTR,
+ acl_access: DWORD,
+}}
+pub type PACCESS_LIST = *mut ACCESS_LIST;
+pub type LPACCESS_LIST = *mut ACCESS_LIST;
+pub const MAXPERMENTRIES: DWORD = 64;
+pub const ACCESS_NONE: DWORD = 0;
+pub const ACCESS_ALL: DWORD = ACCESS_READ | ACCESS_WRITE | ACCESS_CREATE | ACCESS_EXEC
+ | ACCESS_DELETE | ACCESS_ATRIB | ACCESS_PERM;
+pub const ACCESS_READ: DWORD = 0x01;
+pub const ACCESS_WRITE: DWORD = 0x02;
+pub const ACCESS_CREATE: DWORD = 0x04;
+pub const ACCESS_EXEC: DWORD = 0x08;
+pub const ACCESS_DELETE: DWORD = 0x10;
+pub const ACCESS_ATRIB: DWORD = 0x20;
+pub const ACCESS_PERM: DWORD = 0x40;
+pub const ACCESS_GROUP: DWORD = 0x8000;
+pub const ACCESS_AUDIT: DWORD = 0x1;
+pub const ACCESS_SUCCESS_OPEN: DWORD = 0x10;
+pub const ACCESS_SUCCESS_WRITE: DWORD = 0x20;
+pub const ACCESS_SUCCESS_DELETE: DWORD = 0x40;
+pub const ACCESS_SUCCESS_ACL: DWORD = 0x80;
+pub const ACCESS_SUCCESS_MASK: DWORD = 0xF0;
+pub const ACCESS_FAIL_OPEN: DWORD = 0x100;
+pub const ACCESS_FAIL_WRITE: DWORD = 0x200;
+pub const ACCESS_FAIL_DELETE: DWORD = 0x400;
+pub const ACCESS_FAIL_ACL: DWORD = 0x800;
+pub const ACCESS_FAIL_MASK: DWORD = 0xF00;
+pub const ACCESS_FAIL_SHIFT: DWORD = 4;
+pub const ACCESS_RESOURCE_NAME_PARMNUM: DWORD = 1;
+pub const ACCESS_ATTR_PARMNUM: DWORD = 2;
+pub const ACCESS_COUNT_PARMNUM: DWORD = 3;
+pub const ACCESS_ACCESS_LIST_PARMNUM: DWORD = 4;
+pub const ACCESS_RESOURCE_NAME_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + ACCESS_RESOURCE_NAME_PARMNUM;
+pub const ACCESS_ATTR_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + ACCESS_ATTR_PARMNUM;
+pub const ACCESS_COUNT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + ACCESS_COUNT_PARMNUM;
+pub const ACCESS_ACCESS_LIST_INFOLEVEL: DWORD =
+ PARMNUM_BASE_INFOLEVEL + ACCESS_ACCESS_LIST_PARMNUM;
+pub const ACCESS_LETTERS: &'static str = "RWCXDAP ";
+ENUM!{enum NET_VALIDATE_PASSWORD_TYPE {
+ NetValidateAuthentication = 1,
+ NetValidatePasswordChange,
+ NetValidatePasswordReset,
+}}
+pub type PNET_VALIDATE_PASSWORD_TYPE = *mut NET_VALIDATE_PASSWORD_TYPE;
+STRUCT!{struct NET_VALIDATE_PASSWORD_HASH {
+ Length: ULONG,
+ Hash: LPBYTE,
+}}
+pub type PNET_VALIDATE_PASSWORD_HASH = *mut NET_VALIDATE_PASSWORD_HASH;
+pub const NET_VALIDATE_PASSWORD_LAST_SET: ULONG = 0x00000001;
+pub const NET_VALIDATE_BAD_PASSWORD_TIME: ULONG = 0x00000002;
+pub const NET_VALIDATE_LOCKOUT_TIME: ULONG = 0x00000004;
+pub const NET_VALIDATE_BAD_PASSWORD_COUNT: ULONG = 0x00000008;
+pub const NET_VALIDATE_PASSWORD_HISTORY_LENGTH: ULONG = 0x00000010;
+pub const NET_VALIDATE_PASSWORD_HISTORY: ULONG = 0x00000020;
+STRUCT!{struct NET_VALIDATE_PERSISTED_FIELDS {
+ PresentFields: ULONG,
+ PasswordLastSet: FILETIME,
+ BadPasswordTime: FILETIME,
+ LockoutTime: FILETIME,
+ BadPasswordCount: ULONG,
+ PasswordHistoryLength: ULONG,
+ PasswordHistory: PNET_VALIDATE_PASSWORD_HASH,
+}}
+pub type PNET_VALIDATE_PERSISTED_FIELDS = *mut NET_VALIDATE_PERSISTED_FIELDS;
+STRUCT!{struct NET_VALIDATE_OUTPUT_ARG {
+ ChangedPersistedFields: NET_VALIDATE_PERSISTED_FIELDS,
+ ValidationStatus: NET_API_STATUS,
+}}
+pub type PNET_VALIDATE_OUTPUT_ARG = *mut NET_VALIDATE_OUTPUT_ARG;
+STRUCT!{struct NET_VALIDATE_AUTHENTICATION_INPUT_ARG {
+ InputPersistedFields: NET_VALIDATE_PERSISTED_FIELDS,
+ PasswordMatched: BOOLEAN,
+}}
+pub type PNET_VALIDATE_AUTHENTICATION_INPUT_ARG = *mut NET_VALIDATE_AUTHENTICATION_INPUT_ARG;
+STRUCT!{struct NET_VALIDATE_PASSWORD_CHANGE_INPUT_ARG {
+ InputPersistedFields: NET_VALIDATE_PERSISTED_FIELDS,
+ ClearPassword: LPWSTR,
+ UserAccountName: LPWSTR,
+ HashedPassword: NET_VALIDATE_PASSWORD_HASH,
+ PasswordMatch: BOOLEAN,
+}}
+pub type PNET_VALIDATE_PASSWORD_CHANGE_INPUT_ARG = *mut NET_VALIDATE_PASSWORD_CHANGE_INPUT_ARG;
+STRUCT!{struct NET_VALIDATE_PASSWORD_RESET_INPUT_ARG {
+ InputPersistedFields: NET_VALIDATE_PERSISTED_FIELDS,
+ ClearPassword: LPWSTR,
+ UserAccountName: LPWSTR,
+ HashedPassword: NET_VALIDATE_PASSWORD_HASH,
+ PasswordMustChangeAtNextLogon: BOOLEAN,
+ ClearLockout: BOOLEAN,
+}}
+pub type PNET_VALIDATE_PASSWORD_RESET_INPUT_ARG = *mut NET_VALIDATE_PASSWORD_RESET_INPUT_ARG;
+extern "system" {
+ pub fn NetValidatePasswordPolicy(
+ ServerName: LPCWSTR,
+ Qualifier: LPVOID,
+ ValidationType: NET_VALIDATE_PASSWORD_TYPE,
+ InputArg: LPVOID,
+ OutputArg: *mut LPVOID,
+ ) -> NET_API_STATUS;
+ pub fn NetValidatePasswordPolicyFree(
+ OutputArg: *mut LPVOID,
+ ) -> NET_API_STATUS;
+ pub fn NetGetDCName(
+ servername: LPCWSTR,
+ domainname: LPCWSTR,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetGetAnyDCName(
+ servername: LPCWSTR,
+ domainname: LPCWSTR,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn I_NetLogonControl(
+ ServerName: LPCWSTR,
+ FunctionCode: DWORD,
+ QueryLevel: DWORD,
+ Buffer: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn I_NetLogonControl2(
+ ServerName: LPCWSTR,
+ FunctionCode: DWORD,
+ QueryLevel: DWORD,
+ Data: LPBYTE,
+ Buffer: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+}
+pub type NTSTATUS = LONG;
+pub type PNTSTATUS = *mut LONG;
+extern "system" {
+ pub fn NetEnumerateTrustedDomains(
+ ServerName: LPWSTR,
+ DomainNames: *mut LPWSTR,
+ ) -> NTSTATUS;
+}
+pub const NETLOGON_CONTROL_QUERY: DWORD = 1;
+pub const NETLOGON_CONTROL_REPLICATE: DWORD = 2;
+pub const NETLOGON_CONTROL_SYNCHRONIZE: DWORD = 3;
+pub const NETLOGON_CONTROL_PDC_REPLICATE: DWORD = 4;
+pub const NETLOGON_CONTROL_REDISCOVER: DWORD = 5;
+pub const NETLOGON_CONTROL_TC_QUERY: DWORD = 6;
+pub const NETLOGON_CONTROL_TRANSPORT_NOTIFY: DWORD = 7;
+pub const NETLOGON_CONTROL_FIND_USER: DWORD = 8;
+pub const NETLOGON_CONTROL_CHANGE_PASSWORD: DWORD = 9;
+pub const NETLOGON_CONTROL_TC_VERIFY: DWORD = 10;
+pub const NETLOGON_CONTROL_FORCE_DNS_REG: DWORD = 11;
+pub const NETLOGON_CONTROL_QUERY_DNS_REG: DWORD = 12;
+pub const NETLOGON_CONTROL_QUERY_ENC_TYPES: DWORD = 13;
+pub const NETLOGON_CONTROL_UNLOAD_NETLOGON_DLL: DWORD = 0xFFFB;
+pub const NETLOGON_CONTROL_BACKUP_CHANGE_LOG: DWORD = 0xFFFC;
+pub const NETLOGON_CONTROL_TRUNCATE_LOG: DWORD = 0xFFFD;
+pub const NETLOGON_CONTROL_SET_DBFLAG: DWORD = 0xFFFE;
+pub const NETLOGON_CONTROL_BREAKPOINT: DWORD = 0xFFFF;
+STRUCT!{struct NETLOGON_INFO_1 {
+ netlog1_flags: DWORD,
+ netlog1_pdc_connection_status: NET_API_STATUS,
+}}
+pub type PNETLOGON_INFO_1 = *mut NETLOGON_INFO_1;
+STRUCT!{struct NETLOGON_INFO_2 {
+ netlog2_flags: DWORD,
+ netlog2_pdc_connection_status: NET_API_STATUS,
+ netlog2_trusted_dc_name: LPWSTR,
+ netlog2_tc_connection_status: NET_API_STATUS,
+}}
+pub type PNETLOGON_INFO_2 = *mut NETLOGON_INFO_2;
+STRUCT!{struct NETLOGON_INFO_3 {
+ netlog3_flags: DWORD,
+ netlog3_logon_attempts: DWORD,
+ netlog3_reserved1: DWORD,
+ netlog3_reserved2: DWORD,
+ netlog3_reserved3: DWORD,
+ netlog3_reserved4: DWORD,
+ netlog3_reserved5: DWORD,
+}}
+pub type PNETLOGON_INFO_3 = *mut NETLOGON_INFO_3;
+STRUCT!{struct NETLOGON_INFO_4 {
+ netlog4_trusted_dc_name: LPWSTR,
+ netlog4_trusted_domain_name: LPWSTR,
+}}
+pub type PNETLOGON_INFO_4 = *mut NETLOGON_INFO_4;
+pub const NETLOGON_REPLICATION_NEEDED: DWORD = 0x01;
+pub const NETLOGON_REPLICATION_IN_PROGRESS: DWORD = 0x02;
+pub const NETLOGON_FULL_SYNC_REPLICATION: DWORD = 0x04;
+pub const NETLOGON_REDO_NEEDED: DWORD = 0x08;
+pub const NETLOGON_HAS_IP: DWORD = 0x10;
+pub const NETLOGON_HAS_TIMESERV: DWORD = 0x20;
+pub const NETLOGON_DNS_UPDATE_FAILURE: DWORD = 0x40;
+pub const NETLOGON_VERIFY_STATUS_RETURNED: DWORD = 0x80;
+pub const SERVICE_ACCOUNT_PASSWORD: &'static str = "_SA_{262E99C9-6160-4871-ACEC-4E61736B6F21}";
+pub const SERVICE_ACCOUNT_SECRET_PREFIX: &'static str
+ = "_SC_{262E99C9-6160-4871-ACEC-4E61736B6F21}_";
+DEFINE_GUID!{ServiceAccountPasswordGUID,
+ 0x262E99C9, 0x6160, 0x4871, 0xAC, 0xEC, 0x4E, 0x61, 0x73, 0x6B, 0x6F, 0x21}
+extern "system" {
+ pub fn NetAddServiceAccount(
+ ServerName: LPWSTR,
+ AccountName: LPWSTR,
+ Password: LPWSTR,
+ Flags: DWORD,
+ ) -> NTSTATUS;
+}
+pub const SERVICE_ACCOUNT_FLAG_LINK_TO_HOST_ONLY: DWORD = 0x00000001;
+pub const SERVICE_ACCOUNT_FLAG_ADD_AGAINST_RODC: DWORD = 0x00000002;
+pub const SERVICE_ACCOUNT_FLAG_UNLINK_FROM_HOST_ONLY: DWORD = 0x00000001;
+pub const SERVICE_ACCOUNT_FLAG_REMOVE_OFFLINE: DWORD = 0x00000002;
+extern "system" {
+ pub fn NetRemoveServiceAccount(
+ ServerName: LPWSTR,
+ AccountName: LPWSTR,
+ Flags: DWORD,
+ ) -> NTSTATUS;
+ pub fn NetEnumerateServiceAccounts(
+ ServerName: LPWSTR,
+ Flags: DWORD,
+ AccountsCount: *mut DWORD,
+ Accounts: *mut PZPWSTR,
+ ) -> NTSTATUS;
+ pub fn NetIsServiceAccount(
+ ServerName: LPWSTR,
+ AccountName: LPWSTR,
+ IsService: *mut BOOL,
+ ) -> NTSTATUS;
+ pub fn NetQueryServiceAccount(
+ ServerName: LPWSTR,
+ AccountName: LPWSTR,
+ InfoLevel: DWORD,
+ Buffer: *mut PBYTE,
+ ) -> NTSTATUS;
+}
+ENUM!{enum MSA_INFO_LEVEL {
+ MsaInfoLevel0 = 0,
+ MsaInfoLevelMax,
+}}
+pub type PMSA_INFO_LEVEL = *mut MSA_INFO_LEVEL;
+ENUM!{enum MSA_INFO_STATE {
+ MsaInfoNotExist = 1,
+ MsaInfoNotService,
+ MsaInfoCannotInstall,
+ MsaInfoCanInstall,
+ MsaInfoInstalled,
+}}
+pub type PMSA_INFO_STATE = *mut MSA_INFO_STATE;
+STRUCT!{struct MSA_INFO_0 {
+ State: MSA_INFO_STATE,
+}}
+pub type PMSA_INFO_0 = *mut MSA_INFO_0;
+pub type LPMSA_INFO_0 = *mut MSA_INFO_0;
diff --git a/vendor/winapi/src/um/lmalert.rs b/vendor/winapi/src/um/lmalert.rs
new file mode 100644
index 000000000..e406d807c
--- /dev/null
+++ b/vendor/winapi/src/um/lmalert.rs
@@ -0,0 +1,75 @@
+// 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.
+//! This file contains structures for communication with the Alerter service
+use shared::lmcons::{EVLEN, NET_API_STATUS, SNLEN};
+use shared::minwindef::{DWORD, LPVOID};
+use um::winnt::{LPCWSTR, WCHAR};
+extern "system" {
+ pub fn NetAlertRaise(
+ AlertType: LPCWSTR,
+ Buffer: LPVOID,
+ BufferSize: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetAlertRaiseEx(
+ AlertType: LPCWSTR,
+ VariableInfo: LPVOID,
+ VariableInfoSize: DWORD,
+ ServiceName: LPCWSTR,
+ ) -> NET_API_STATUS;
+}
+STRUCT!{struct STD_ALERT {
+ alrt_timestamp: DWORD,
+ alrt_eventname: [WCHAR; EVLEN + 1],
+ alrt_servicename: [WCHAR; SNLEN + 1],
+}}
+pub type PSTD_ALERT = *mut STD_ALERT;
+pub type LPSTD_ALERT = *mut STD_ALERT;
+STRUCT!{struct ADMIN_OTHER_INFO {
+ alrtad_errcode: DWORD,
+ alrtad_numstrings: DWORD,
+}}
+pub type PADMIN_OTHER_INFO = *mut ADMIN_OTHER_INFO;
+pub type LPADMIN_OTHER_INFO = *mut ADMIN_OTHER_INFO;
+STRUCT!{struct ERRLOG_OTHER_INFO {
+ alrter_errcode: DWORD,
+ alrter_offset: DWORD,
+}}
+pub type PERRLOG_OTHER_INFO = *mut ERRLOG_OTHER_INFO;
+pub type LPERRLOG_OTHER_INFO = *mut ERRLOG_OTHER_INFO;
+STRUCT!{struct PRINT_OTHER_INFO {
+ alrtpr_jobid: DWORD,
+ alrtpr_status: DWORD,
+ alrtpr_submitted: DWORD,
+ alrtpr_size: DWORD,
+}}
+pub type PPRINT_OTHER_INFO = *mut PRINT_OTHER_INFO;
+pub type LPPRINT_OTHER_INFO = *mut PRINT_OTHER_INFO;
+STRUCT!{struct USER_OTHER_INFO {
+ alrtus_errcode: DWORD,
+ alrtus_numstrings: DWORD,
+}}
+pub type PUSER_OTHER_INFO = *mut USER_OTHER_INFO;
+pub type LPUSER_OTHER_INFO = *mut USER_OTHER_INFO;
+pub const ALERTER_MAILSLOT: &'static str = "\\\\.\\MAILSLOT\\Alerter";
+pub const ALERT_PRINT_EVENT: &'static str = "PRINTING";
+pub const ALERT_MESSAGE_EVENT: &'static str = "MESSAGE";
+pub const ALERT_ERRORLOG_EVENT: &'static str = "ERRORLOG";
+pub const ALERT_ADMIN_EVENT: &'static str = "ADMIN";
+pub const ALERT_USER_EVENT: &'static str = "USER";
+pub const PRJOB_QSTATUS: DWORD = 0x3;
+pub const PRJOB_DEVSTATUS: DWORD = 0x1fc;
+pub const PRJOB_COMPLETE: DWORD = 0x4;
+pub const PRJOB_INTERV: DWORD = 0x8;
+pub const PRJOB_ERROR: DWORD = 0x10;
+pub const PRJOB_DESTOFFLINE: DWORD = 0x20;
+pub const PRJOB_DESTPAUSED: DWORD = 0x40;
+pub const PRJOB_NOTIFY: DWORD = 0x80;
+pub const PRJOB_DESTNOPAPER: DWORD = 0x100;
+pub const PRJOB_DELETED: DWORD = 0x8000;
+pub const PRJOB_QS_QUEUED: DWORD = 0;
+pub const PRJOB_QS_PAUSED: DWORD = 1;
+pub const PRJOB_QS_SPOOLING: DWORD = 2;
+pub const PRJOB_QS_PRINTING: DWORD = 3;
diff --git a/vendor/winapi/src/um/lmapibuf.rs b/vendor/winapi/src/um/lmapibuf.rs
new file mode 100644
index 000000000..620a1319b
--- /dev/null
+++ b/vendor/winapi/src/um/lmapibuf.rs
@@ -0,0 +1,30 @@
+// 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.
+//! This file contains information about NetApiBuffer APIs
+use shared::lmcons::NET_API_STATUS;
+use shared::minwindef::{DWORD, LPDWORD, LPVOID};
+extern "system" {
+ pub fn NetApiBufferAllocate(
+ ByteCount: DWORD,
+ Buffer: *mut LPVOID,
+ ) -> NET_API_STATUS;
+ pub fn NetApiBufferFree(
+ Buffer: LPVOID,
+ ) -> NET_API_STATUS;
+ pub fn NetApiBufferReallocate(
+ OldBuffer: LPVOID,
+ NewByteCount: DWORD,
+ NewBuffer: *mut LPVOID,
+ ) -> NET_API_STATUS;
+ pub fn NetApiBufferSize(
+ Buffer: LPVOID,
+ ByteCount: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetapipBufferAllocate(
+ ByteCount: DWORD,
+ Buffer: *mut LPVOID,
+ ) -> NET_API_STATUS;
+}
diff --git a/vendor/winapi/src/um/lmat.rs b/vendor/winapi/src/um/lmat.rs
new file mode 100644
index 000000000..46742eb1b
--- /dev/null
+++ b/vendor/winapi/src/um/lmat.rs
@@ -0,0 +1,62 @@
+// 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::DWORD_PTR;
+use shared::lmcons::NET_API_STATUS;
+use shared::minwindef::{DWORD, LPBYTE, LPDWORD, UCHAR};
+use um::winnt::{LPCWSTR, LPWSTR};
+pub const JOB_RUN_PERIODICALLY: UCHAR = 0x01;
+pub const JOB_EXEC_ERROR: UCHAR = 0x02;
+pub const JOB_RUNS_TODAY: UCHAR = 0x04;
+pub const JOB_ADD_CURRENT_DATE: UCHAR = 0x08;
+pub const JOB_NONINTERACTIVE: UCHAR = 0x10;
+pub const JOB_INPUT_FLAGS: UCHAR = JOB_RUN_PERIODICALLY | JOB_ADD_CURRENT_DATE
+ | JOB_NONINTERACTIVE;
+pub const JOB_OUTPUT_FLAGS: UCHAR = JOB_RUN_PERIODICALLY | JOB_EXEC_ERROR | JOB_RUNS_TODAY
+ | JOB_NONINTERACTIVE;
+STRUCT!{struct AT_INFO {
+ JobTime: DWORD_PTR,
+ DaysOfMonth: DWORD,
+ DaysOfWeek: UCHAR,
+ Flags: UCHAR,
+ Command: LPWSTR,
+}}
+pub type PAT_INFO = *mut AT_INFO;
+pub type LPAT_INFO = *mut AT_INFO;
+STRUCT!{struct AT_ENUM {
+ JobId: DWORD,
+ JobTime: DWORD_PTR,
+ DaysOfMonth: DWORD,
+ DaysOfWeek: UCHAR,
+ Flags: UCHAR,
+ Command: LPWSTR,
+}}
+pub type PAT_ENUM = *mut AT_ENUM;
+pub type LPAT_ENUM = *mut AT_ENUM;
+extern "system" {
+ pub fn NetScheduleJobAdd(
+ Servername: LPCWSTR,
+ Buffer: LPBYTE,
+ JobId: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetScheduleJobDel(
+ Servername: LPCWSTR,
+ MinJobId: DWORD,
+ MaxJobId: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetScheduleJobEnum(
+ Servername: LPCWSTR,
+ PointerToBuffer: *mut LPBYTE,
+ PointerToBuffer: DWORD,
+ EntriesRead: LPDWORD,
+ TotalEntries: LPDWORD,
+ ResumeHandle: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetScheduleJobGetInfo(
+ Servername: LPCWSTR,
+ JobId: DWORD,
+ PointerToBuffer: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+}
diff --git a/vendor/winapi/src/um/lmdfs.rs b/vendor/winapi/src/um/lmdfs.rs
new file mode 100644
index 000000000..a0be98b26
--- /dev/null
+++ b/vendor/winapi/src/um/lmdfs.rs
@@ -0,0 +1,483 @@
+// 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.
+// This file contains structures, function prototypes, and definitions for the NetDfs API
+use shared::guiddef::GUID;
+use shared::lmcons::NET_API_STATUS;
+use shared::minwindef::{DWORD, LPBYTE, LPDWORD, ULONG, USHORT};
+use um::winnt::{LPWSTR, PSECURITY_DESCRIPTOR, PWSTR, SECURITY_INFORMATION, ULONGLONG, WCHAR};
+pub const DFS_VOLUME_STATES: DWORD = 0xF;
+pub const DFS_VOLUME_STATE_OK: DWORD = 1;
+pub const DFS_VOLUME_STATE_INCONSISTENT: DWORD = 2;
+pub const DFS_VOLUME_STATE_OFFLINE: DWORD = 3;
+pub const DFS_VOLUME_STATE_ONLINE: DWORD = 4;
+pub const DFS_VOLUME_STATE_RESYNCHRONIZE: DWORD = 0x10;
+pub const DFS_VOLUME_STATE_STANDBY: DWORD = 0x20;
+pub const DFS_VOLUME_STATE_FORCE_SYNC: DWORD = 0x40;
+pub const DFS_VOLUME_FLAVORS: DWORD = 0x0300;
+pub const DFS_VOLUME_FLAVOR_UNUSED1: DWORD = 0x0000;
+pub const DFS_VOLUME_FLAVOR_STANDALONE: DWORD = 0x0100;
+pub const DFS_VOLUME_FLAVOR_AD_BLOB: DWORD = 0x0200;
+pub const DFS_STORAGE_FLAVOR_UNUSED2: DWORD = 0x0300;
+pub const DFS_STORAGE_STATES: ULONG = 0xF;
+pub const DFS_STORAGE_STATE_OFFLINE: ULONG = 1;
+pub const DFS_STORAGE_STATE_ONLINE: ULONG = 2;
+pub const DFS_STORAGE_STATE_ACTIVE: ULONG = 4;
+ENUM!{enum DFS_TARGET_PRIORITY_CLASS {
+ DfsInvalidPriorityClass = -1i32 as u32,
+ DfsSiteCostNormalPriorityClass = 0,
+ DfsGlobalHighPriorityClass,
+ DfsSiteCostHighPriorityClass,
+ DfsSiteCostLowPriorityClass,
+ DfsGlobalLowPriorityClass,
+}}
+STRUCT!{struct DFS_TARGET_PRIORITY {
+ TargetPriorityClass: DFS_TARGET_PRIORITY_CLASS,
+ TargetPriorityRank: USHORT,
+ Reserved: USHORT,
+}}
+pub type PDFS_TARGET_PRIORITY = *mut DFS_TARGET_PRIORITY;
+STRUCT!{struct DFS_INFO_1 {
+ EntryPath: LPWSTR,
+}}
+pub type PDFS_INFO_1 = *mut DFS_INFO_1;
+pub type LPDFS_INFO_1 = *mut DFS_INFO_1;
+#[cfg(target_pointer_width = "64")]
+IFDEF!{
+STRUCT!{struct DFS_INFO_1_32 {
+ EntryPath: ULONG,
+}}
+pub type PDFS_INFO_1_32 = *mut DFS_INFO_1_32;
+pub type LPDFS_INFO_1_32 = *mut DFS_INFO_1_32;
+}
+STRUCT!{struct DFS_INFO_2 {
+ EntryPath: LPWSTR,
+ Comment: LPWSTR,
+ State: DWORD,
+ NumberOfStorages: DWORD,
+}}
+pub type PDFS_INFO_2 = *mut DFS_INFO_2;
+pub type LPDFS_INFO_2 = *mut DFS_INFO_2;
+#[cfg(target_pointer_width = "64")]
+IFDEF!{
+STRUCT!{struct DFS_INFO_2_32 {
+ EntryPath: ULONG,
+ Comment: ULONG,
+ State: DWORD,
+ NumberOfStorages: DWORD,
+}}
+pub type PDFS_INFO_2_32 = *mut DFS_INFO_2_32;
+pub type LPDFS_INFO_2_32 = *mut DFS_INFO_2_32;
+}
+STRUCT!{struct DFS_STORAGE_INFO {
+ State: ULONG,
+ ServerName: LPWSTR,
+ ShareName: LPWSTR,
+}}
+pub type PDFS_STORAGE_INFO = *mut DFS_STORAGE_INFO;
+pub type LPDFS_STORAGE_INFO = *mut DFS_STORAGE_INFO;
+#[cfg(target_pointer_width = "64")]
+IFDEF!{
+STRUCT!{struct DFS_STORAGE_INFO_0_32 {
+ State: ULONG,
+ ServerName: ULONG,
+ ShareName: ULONG,
+}}
+pub type PDFS_STORAGE_INFO_0_32 = *mut DFS_STORAGE_INFO_0_32;
+pub type LPDFS_STORAGE_INFO_0_32 = *mut DFS_STORAGE_INFO_0_32;
+}
+STRUCT!{struct DFS_STORAGE_INFO_1 {
+ State: ULONG,
+ ServerName: LPWSTR,
+ ShareName: LPWSTR,
+ TargetPriority: DFS_TARGET_PRIORITY,
+}}
+pub type PDFS_STORAGE_INFO_1 = *mut DFS_STORAGE_INFO_1;
+pub type LPDFS_STORAGE_INFO_1 = *mut DFS_STORAGE_INFO_1;
+STRUCT!{struct DFS_INFO_3 {
+ EntryPath: LPWSTR,
+ Comment: LPWSTR,
+ State: DWORD,
+ NumberOfStorages: DWORD,
+ Storage: LPDFS_STORAGE_INFO,
+}}
+pub type PDFS_INFO_3 = *mut DFS_INFO_3;
+pub type LPDFS_INFO_3 = *mut DFS_INFO_3;
+#[cfg(target_pointer_width = "64")]
+IFDEF!{
+STRUCT!{struct DFS_INFO_3_32 {
+ EntryPath: ULONG,
+ Comment: ULONG,
+ State: DWORD,
+ NumberOfStorages: DWORD,
+ Storage: ULONG,
+}}
+pub type PDFS_INFO_3_32 = *mut DFS_INFO_3_32;
+pub type LPDFS_INFO_3_32 = *mut DFS_INFO_3_32;
+}
+STRUCT!{struct DFS_INFO_4 {
+ EntryPath: LPWSTR,
+ Comment: LPWSTR,
+ State: DWORD,
+ Timeout: ULONG,
+ Guid: GUID,
+ NumberOfStorages: DWORD,
+ Storage: LPDFS_STORAGE_INFO,
+}}
+pub type PDFS_INFO_4 = *mut DFS_INFO_4;
+pub type LPDFS_INFO_4 = *mut DFS_INFO_4;
+#[cfg(target_pointer_width = "64")]
+IFDEF!{
+STRUCT!{struct DFS_INFO_4_32 {
+ EntryPath: ULONG,
+ Comment: ULONG,
+ State: DWORD,
+ Timeout: ULONG,
+ Guid: GUID,
+ NumberOfStorages: DWORD,
+ Storage: ULONG,
+}}
+pub type PDFS_INFO_4_32 = *mut DFS_INFO_4_32;
+pub type LPDFS_INFO_4_32 = *mut DFS_INFO_4_32;
+}
+STRUCT!{struct DFS_INFO_5 {
+ EntryPath: LPWSTR,
+ Comment: LPWSTR,
+ State: DWORD,
+ Timeout: ULONG,
+ Guid: GUID,
+ PropertyFlags: ULONG,
+ MetadataSize: ULONG,
+ NumberOfStorages: DWORD,
+}}
+pub type PDFS_INFO_5 = *mut DFS_INFO_5;
+pub type LPDFS_INFO_5 = *mut DFS_INFO_5;
+STRUCT!{struct DFS_INFO_6 {
+ EntryPath: LPWSTR,
+ Comment: LPWSTR,
+ State: DWORD,
+ Timeout: ULONG,
+ Guid: GUID,
+ PropertyFlags: ULONG,
+ MetadataSize: ULONG,
+ NumberOfStorages: DWORD,
+ Storage: LPDFS_STORAGE_INFO,
+}}
+pub type PDFS_INFO_6 = *mut DFS_INFO_6;
+pub type LPDFS_INFO_6 = *mut DFS_INFO_6;
+STRUCT!{struct DFS_INFO_7 {
+ GenerationGuid: GUID,
+}}
+pub type PDFS_INFO_7 = *mut DFS_INFO_7;
+pub type LPDFS_INFO_7 = *mut DFS_INFO_7;
+STRUCT!{struct DFS_INFO_8 {
+ EntryPath: LPWSTR,
+ Comment: LPWSTR,
+ State: DWORD,
+ Timeout: ULONG,
+ Guid: GUID,
+ PropertyFlags: ULONG,
+ MetadataSize: ULONG,
+ SdLengthReserved: ULONG,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ NumberOfStorages: DWORD,
+}}
+pub type PDFS_INFO_8 = *mut DFS_INFO_8;
+pub type LPDFS_INFO_8 = *mut DFS_INFO_8;
+STRUCT!{struct DFS_INFO_9 {
+ EntryPath: LPWSTR,
+ Comment: LPWSTR,
+ State: DWORD,
+ Timeout: ULONG,
+ Guid: GUID,
+ PropertyFlags: ULONG,
+ MetadataSize: ULONG,
+ SdLengthReserved: ULONG,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ NumberOfStorages: DWORD,
+ Storage: LPDFS_STORAGE_INFO,
+}}
+pub type PDFS_INFO_9 = *mut DFS_INFO_9;
+pub type LPDFS_INFO_9 = *mut DFS_INFO_9;
+pub const DFS_VALID_PROPERTY_FLAGS: ULONG = DFS_PROPERTY_FLAG_INSITE_REFERRALS
+ | DFS_PROPERTY_FLAG_ROOT_SCALABILITY | DFS_PROPERTY_FLAG_SITE_COSTING
+ | DFS_PROPERTY_FLAG_TARGET_FAILBACK | DFS_PROPERTY_FLAG_CLUSTER_ENABLED
+ | DFS_PROPERTY_FLAG_ABDE;
+pub const DFS_PROPERTY_FLAG_INSITE_REFERRALS: ULONG = 0x00000001;
+pub const DFS_PROPERTY_FLAG_ROOT_SCALABILITY: ULONG = 0x00000002;
+pub const DFS_PROPERTY_FLAG_SITE_COSTING: ULONG = 0x00000004;
+pub const DFS_PROPERTY_FLAG_TARGET_FAILBACK: ULONG = 0x00000008;
+pub const DFS_PROPERTY_FLAG_CLUSTER_ENABLED: ULONG = 0x00000010;
+pub const DFS_PROPERTY_FLAG_ABDE: ULONG = 0x00000020;
+STRUCT!{struct DFS_INFO_50 {
+ NamespaceMajorVersion: ULONG,
+ NamespaceMinorVersion: ULONG,
+ NamespaceCapabilities: ULONGLONG,
+}}
+pub type PDFS_INFO_50 = *mut DFS_INFO_50;
+pub type LPDFS_INFO_50 = *mut DFS_INFO_50;
+STRUCT!{struct DFS_INFO_100 {
+ Comment: LPWSTR,
+}}
+pub type PDFS_INFO_100 = *mut DFS_INFO_100;
+pub type LPDFS_INFO_100 = *mut DFS_INFO_100;
+STRUCT!{struct DFS_INFO_101 {
+ State: DWORD,
+}}
+pub type PDFS_INFO_101 = *mut DFS_INFO_101;
+pub type LPDFS_INFO_101 = *mut DFS_INFO_101;
+STRUCT!{struct DFS_INFO_102 {
+ Timeout: ULONG,
+}}
+pub type PDFS_INFO_102 = *mut DFS_INFO_102;
+pub type LPDFS_INFO_102 = *mut DFS_INFO_102;
+STRUCT!{struct DFS_INFO_103 {
+ PropertyFlagMask: ULONG,
+ PropertyFlags: ULONG,
+}}
+pub type PDFS_INFO_103 = *mut DFS_INFO_103;
+pub type LPDFS_INFO_103 = *mut DFS_INFO_103;
+STRUCT!{struct DFS_INFO_104 {
+ TargetPriority: DFS_TARGET_PRIORITY,
+}}
+pub type PDFS_INFO_104 = *mut DFS_INFO_104;
+pub type LPDFS_INFO_104 = *mut DFS_INFO_104;
+STRUCT!{struct DFS_INFO_105 {
+ Comment: LPWSTR,
+ State: DWORD,
+ Timeout: ULONG,
+ PropertyFlagMask: ULONG,
+ PropertyFlags: ULONG,
+}}
+pub type PDFS_INFO_105 = *mut DFS_INFO_105;
+pub type LPDFS_INFO_105 = *mut DFS_INFO_105;
+STRUCT!{struct DFS_INFO_106 {
+ State: DWORD,
+ TargetPriority: DFS_TARGET_PRIORITY,
+}}
+pub type PDFS_INFO_106 = *mut DFS_INFO_106;
+pub type LPDFS_INFO_106 = *mut DFS_INFO_106;
+STRUCT!{struct DFS_INFO_107 {
+ Comment: LPWSTR,
+ State: DWORD,
+ Timeout: ULONG,
+ PropertyFlagMask: ULONG,
+ PropertyFlags: ULONG,
+ SdLengthReserved: ULONG,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+}}
+pub type PDFS_INFO_107 = *mut DFS_INFO_107;
+pub type LPDFS_INFO_107 = *mut DFS_INFO_107;
+STRUCT!{struct DFS_INFO_150 {
+ SdLengthReserved: ULONG,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+}}
+pub type PDFS_INFO_150 = *mut DFS_INFO_150;
+pub type LPDFS_INFO_150 = *mut DFS_INFO_150;
+STRUCT!{struct DFS_INFO_200 {
+ FtDfsName: LPWSTR,
+}}
+pub type PDFS_INFO_200 = *mut DFS_INFO_200;
+pub type LPDFS_INFO_200 = *mut DFS_INFO_200;
+STRUCT!{struct DFS_INFO_300 {
+ Flags: DWORD,
+ DfsName: LPWSTR,
+}}
+pub type PDFS_INFO_300 = *mut DFS_INFO_300;
+pub type LPDFS_INFO_300 = *mut DFS_INFO_300;
+extern "system" {
+ pub fn NetDfsAdd(
+ DfsEntryPath: LPWSTR,
+ ServerName: LPWSTR,
+ ShareName: LPWSTR,
+ Comment: LPWSTR,
+ Flags: DWORD,
+ ) -> NET_API_STATUS;
+}
+pub const DFS_ADD_VOLUME: DWORD = 1;
+pub const DFS_RESTORE_VOLUME: DWORD = 2;
+extern "system" {
+ pub fn NetDfsAddStdRoot(
+ ServerName: LPWSTR,
+ RootShare: LPWSTR,
+ Comment: LPWSTR,
+ Flags: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetDfsRemoveStdRoot(
+ ServerName: LPWSTR,
+ RootShare: LPWSTR,
+ Flags: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetDfsAddFtRoot(
+ ServerName: LPWSTR,
+ RootShare: LPWSTR,
+ FtDfsName: LPWSTR,
+ Comment: LPWSTR,
+ Flags: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetDfsRemoveFtRoot(
+ ServerName: LPWSTR,
+ RootShare: LPWSTR,
+ FtDfsName: LPWSTR,
+ Flags: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetDfsRemoveFtRootForced(
+ DomainName: LPWSTR,
+ ServerName: LPWSTR,
+ RootShare: LPWSTR,
+ FtDfsName: LPWSTR,
+ Flags: DWORD,
+ ) -> NET_API_STATUS;
+}
+pub const NET_DFS_SETDC_FLAGS: DWORD = 0x00000000;
+pub const NET_DFS_SETDC_TIMEOUT: DWORD = 0x00000001;
+pub const NET_DFS_SETDC_INITPKT: DWORD = 0x00000002;
+STRUCT!{struct DFS_SITENAME_INFO {
+ SiteFlags: ULONG,
+ SiteName: LPWSTR,
+}}
+pub type PDFS_SITENAME_INFO = *mut DFS_SITENAME_INFO;
+pub type LPDFS_SITENAME_INFO = *mut DFS_SITENAME_INFO;
+pub const DFS_SITE_PRIMARY: ULONG = 0x1;
+STRUCT!{struct DFS_SITELIST_INFO {
+ cSites: ULONG,
+ Site: [DFS_SITENAME_INFO; 1],
+}}
+pub type PDFS_SITELIST_INFO = *mut DFS_SITELIST_INFO;
+pub type LPDFS_SITELIST_INFO = *mut DFS_SITELIST_INFO;
+extern "system" {
+ pub fn NetDfsRemove(
+ DfsEntryPath: LPWSTR,
+ ServerName: LPWSTR,
+ ShareName: LPWSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetDfsEnum(
+ DfsName: LPWSTR,
+ Level: DWORD,
+ PrefMaxLen: DWORD,
+ Buffer: *mut LPBYTE,
+ EntriesRead: LPDWORD,
+ ResumeHandle: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetDfsGetInfo(
+ DfsEntryPath: LPWSTR,
+ ServerName: LPWSTR,
+ ShareName: LPWSTR,
+ Level: DWORD,
+ Buffer: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetDfsSetInfo(
+ DfsEntryPath: LPWSTR,
+ ServerName: LPWSTR,
+ ShareName: LPWSTR,
+ Level: DWORD,
+ Buffer: LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetDfsGetClientInfo(
+ DfsEntryPath: LPWSTR,
+ ServerName: LPWSTR,
+ ShareName: LPWSTR,
+ Level: DWORD,
+ Buffer: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetDfsSetClientInfo(
+ DfsEntryPath: LPWSTR,
+ ServerName: LPWSTR,
+ ShareName: LPWSTR,
+ Level: DWORD,
+ Buffer: LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetDfsMove(
+ OldDfsEntryPath: LPWSTR,
+ NewDfsEntryPath: LPWSTR,
+ Flags: ULONG,
+ ) -> NET_API_STATUS;
+}
+pub const DFS_MOVE_FLAG_REPLACE_IF_EXISTS: ULONG = 0x00000001;
+extern "system" {
+ pub fn NetDfsRename(
+ Path: LPWSTR,
+ NewPath: LPWSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetDfsAddRootTarget(
+ pDfsPath: LPWSTR,
+ pTargetPath: LPWSTR,
+ MajorVersion: ULONG,
+ pComment: LPWSTR,
+ Flags: ULONG,
+ ) -> NET_API_STATUS;
+}
+pub const DFS_FORCE_REMOVE: ULONG = 0x80000000;
+extern "system" {
+ pub fn NetDfsRemoveRootTarget(
+ pDfsPath: LPWSTR,
+ pTargetPath: LPWSTR,
+ Flags: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetDfsGetSecurity(
+ DfsEntryPath: LPWSTR,
+ SecurityInformation: SECURITY_INFORMATION,
+ ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
+ lpcbSecurityDescriptor: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetDfsSetSecurity(
+ DfsEntryPath: LPWSTR,
+ SecurityInformation: SECURITY_INFORMATION,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ ) -> NET_API_STATUS;
+ pub fn NetDfsGetStdContainerSecurity(
+ MachineName: LPWSTR,
+ SecurityInformation: SECURITY_INFORMATION,
+ ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
+ lpcbSecurityDescriptor: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetDfsSetStdContainerSecurity(
+ MachineName: LPWSTR,
+ SecurityInformation: SECURITY_INFORMATION,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ ) -> NET_API_STATUS;
+ pub fn NetDfsGetFtContainerSecurity(
+ DomainName: LPWSTR,
+ SecurityInformation: SECURITY_INFORMATION,
+ ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
+ lpcbSecurityDescriptor: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetDfsSetFtContainerSecurity(
+ DomainName: LPWSTR,
+ SecurityInformation: SECURITY_INFORMATION,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ ) -> NET_API_STATUS;
+}
+ENUM!{enum DFS_NAMESPACE_VERSION_ORIGIN {
+ DFS_NAMESPACE_VERSION_ORIGIN_COMBINED = 0,
+ DFS_NAMESPACE_VERSION_ORIGIN_SERVER,
+ DFS_NAMESPACE_VERSION_ORIGIN_DOMAIN,
+}}
+pub type PDFS_NAMESPACE_VERSION_ORIGIN = *mut DFS_NAMESPACE_VERSION_ORIGIN;
+pub const DFS_NAMESPACE_CAPABILITY_ABDE: ULONGLONG = 0x0000000000000001;
+STRUCT!{struct DFS_SUPPORTED_NAMESPACE_VERSION_INFO {
+ DomainDfsMajorVersion: ULONG,
+ DomainDfsMinorVersion: ULONG,
+ DomainDfsCapabilities: ULONGLONG,
+ StandaloneDfsMajorVersion: ULONG,
+ StandaloneDfsMinorVersion: ULONG,
+ StandaloneDfsCapabilities: ULONGLONG,
+}}
+pub type PDFS_SUPPORTED_NAMESPACE_VERSION_INFO = *mut DFS_SUPPORTED_NAMESPACE_VERSION_INFO;
+extern "system" {
+ pub fn NetDfsGetSupportedNamespaceVersion(
+ Origin: DFS_NAMESPACE_VERSION_ORIGIN,
+ pName: PWSTR,
+ ppVersionInfo: *mut PDFS_SUPPORTED_NAMESPACE_VERSION_INFO,
+ ) -> NET_API_STATUS;
+}
+STRUCT!{struct DFS_GET_PKT_ENTRY_STATE_ARG {
+ DfsEntryPathLen: USHORT,
+ ServerNameLen: USHORT,
+ ShareNameLen: USHORT,
+ Level: ULONG,
+ Buffer: [WCHAR; 1],
+}}
+pub type PDFS_GET_PKT_ENTRY_STATE_ARG = *mut DFS_GET_PKT_ENTRY_STATE_ARG;
diff --git a/vendor/winapi/src/um/lmerrlog.rs b/vendor/winapi/src/um/lmerrlog.rs
new file mode 100644
index 000000000..8a07f731c
--- /dev/null
+++ b/vendor/winapi/src/um/lmerrlog.rs
@@ -0,0 +1,268 @@
+// 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::minwindef::{DWORD, LPBYTE};
+use um::winnt::LPWSTR;
+STRUCT!{struct ERROR_LOG {
+ el_len: DWORD,
+ el_reserved: DWORD,
+ el_time: DWORD,
+ el_error: DWORD,
+ el_name: LPWSTR,
+ el_text: LPWSTR,
+ el_data: LPBYTE,
+ el_data_size: DWORD,
+ el_nstrings: DWORD,
+}}
+pub type PERROR_LOG = *mut ERROR_LOG;
+pub type LPERROR_LOG = *mut ERROR_LOG;
+STRUCT!{struct HLOG {
+ time: DWORD,
+ last_flags: DWORD,
+ offset: DWORD,
+ rec_offset: DWORD,
+}}
+pub type PHLOG = *mut HLOG;
+pub type LPHLOG = *mut HLOG;
+pub const LOGFLAGS_FORWARD: DWORD = 0;
+pub const LOGFLAGS_BACKWARD: DWORD = 0x1;
+pub const LOGFLAGS_SEEK: DWORD = 0x2;
+pub const ERRLOG_BASE: DWORD = 3100;
+pub const NELOG_Internal_Error: DWORD = ERRLOG_BASE + 0;
+pub const NELOG_Resource_Shortage: DWORD = ERRLOG_BASE + 1;
+pub const NELOG_Unable_To_Lock_Segment: DWORD = ERRLOG_BASE + 2;
+pub const NELOG_Unable_To_Unlock_Segment: DWORD = ERRLOG_BASE + 3;
+pub const NELOG_Uninstall_Service: DWORD = ERRLOG_BASE + 4;
+pub const NELOG_Init_Exec_Fail: DWORD = ERRLOG_BASE + 5;
+pub const NELOG_Ncb_Error: DWORD = ERRLOG_BASE + 6;
+pub const NELOG_Net_Not_Started: DWORD = ERRLOG_BASE + 7;
+pub const NELOG_Ioctl_Error: DWORD = ERRLOG_BASE + 8;
+pub const NELOG_System_Semaphore: DWORD = ERRLOG_BASE + 9;
+pub const NELOG_Init_OpenCreate_Err: DWORD = ERRLOG_BASE + 10;
+pub const NELOG_NetBios: DWORD = ERRLOG_BASE + 11;
+pub const NELOG_SMB_Illegal: DWORD = ERRLOG_BASE + 12;
+pub const NELOG_Service_Fail: DWORD = ERRLOG_BASE + 13;
+pub const NELOG_Entries_Lost: DWORD = ERRLOG_BASE + 14;
+pub const NELOG_Init_Seg_Overflow: DWORD = ERRLOG_BASE + 20;
+pub const NELOG_Srv_No_Mem_Grow: DWORD = ERRLOG_BASE + 21;
+pub const NELOG_Access_File_Bad: DWORD = ERRLOG_BASE + 22;
+pub const NELOG_Srvnet_Not_Started: DWORD = ERRLOG_BASE + 23;
+pub const NELOG_Init_Chardev_Err: DWORD = ERRLOG_BASE + 24;
+pub const NELOG_Remote_API: DWORD = ERRLOG_BASE + 25;
+pub const NELOG_Ncb_TooManyErr: DWORD = ERRLOG_BASE + 26;
+pub const NELOG_Mailslot_err: DWORD = ERRLOG_BASE + 27;
+pub const NELOG_ReleaseMem_Alert: DWORD = ERRLOG_BASE + 28;
+pub const NELOG_AT_cannot_write: DWORD = ERRLOG_BASE + 29;
+pub const NELOG_Cant_Make_Msg_File: DWORD = ERRLOG_BASE + 30;
+pub const NELOG_Exec_Netservr_NoMem: DWORD = ERRLOG_BASE + 31;
+pub const NELOG_Server_Lock_Failure: DWORD = ERRLOG_BASE + 32;
+pub const NELOG_Msg_Shutdown: DWORD = ERRLOG_BASE + 40;
+pub const NELOG_Msg_Sem_Shutdown: DWORD = ERRLOG_BASE + 41;
+pub const NELOG_Msg_Log_Err: DWORD = ERRLOG_BASE + 50;
+pub const NELOG_VIO_POPUP_ERR: DWORD = ERRLOG_BASE + 51;
+pub const NELOG_Msg_Unexpected_SMB_Type: DWORD = ERRLOG_BASE + 52;
+pub const NELOG_Wksta_Infoseg: DWORD = ERRLOG_BASE + 60;
+pub const NELOG_Wksta_Compname: DWORD = ERRLOG_BASE + 61;
+pub const NELOG_Wksta_BiosThreadFailure: DWORD = ERRLOG_BASE + 62;
+pub const NELOG_Wksta_IniSeg: DWORD = ERRLOG_BASE + 63;
+pub const NELOG_Wksta_HostTab_Full: DWORD = ERRLOG_BASE + 64;
+pub const NELOG_Wksta_Bad_Mailslot_SMB: DWORD = ERRLOG_BASE + 65;
+pub const NELOG_Wksta_UASInit: DWORD = ERRLOG_BASE + 66;
+pub const NELOG_Wksta_SSIRelogon: DWORD = ERRLOG_BASE + 67;
+pub const NELOG_Build_Name: DWORD = ERRLOG_BASE + 70;
+pub const NELOG_Name_Expansion: DWORD = ERRLOG_BASE + 71;
+pub const NELOG_Message_Send: DWORD = ERRLOG_BASE + 72;
+pub const NELOG_Mail_Slt_Err: DWORD = ERRLOG_BASE + 73;
+pub const NELOG_AT_cannot_read: DWORD = ERRLOG_BASE + 74;
+pub const NELOG_AT_sched_err: DWORD = ERRLOG_BASE + 75;
+pub const NELOG_AT_schedule_file_created: DWORD = ERRLOG_BASE + 76;
+pub const NELOG_Srvnet_NB_Open: DWORD = ERRLOG_BASE + 77;
+pub const NELOG_AT_Exec_Err: DWORD = ERRLOG_BASE + 78;
+pub const NELOG_Lazy_Write_Err: DWORD = ERRLOG_BASE + 80;
+pub const NELOG_HotFix: DWORD = ERRLOG_BASE + 81;
+pub const NELOG_HardErr_From_Server: DWORD = ERRLOG_BASE + 82;
+pub const NELOG_LocalSecFail1: DWORD = ERRLOG_BASE + 83;
+pub const NELOG_LocalSecFail2: DWORD = ERRLOG_BASE + 84;
+pub const NELOG_LocalSecFail3: DWORD = ERRLOG_BASE + 85;
+pub const NELOG_LocalSecGeneralFail: DWORD = ERRLOG_BASE + 86;
+pub const NELOG_NetWkSta_Internal_Error: DWORD = ERRLOG_BASE + 90;
+pub const NELOG_NetWkSta_No_Resource: DWORD = ERRLOG_BASE + 91;
+pub const NELOG_NetWkSta_SMB_Err: DWORD = ERRLOG_BASE + 92;
+pub const NELOG_NetWkSta_VC_Err: DWORD = ERRLOG_BASE + 93;
+pub const NELOG_NetWkSta_Stuck_VC_Err: DWORD = ERRLOG_BASE + 94;
+pub const NELOG_NetWkSta_NCB_Err: DWORD = ERRLOG_BASE + 95;
+pub const NELOG_NetWkSta_Write_Behind_Err: DWORD = ERRLOG_BASE + 96;
+pub const NELOG_NetWkSta_Reset_Err: DWORD = ERRLOG_BASE + 97;
+pub const NELOG_NetWkSta_Too_Many: DWORD = ERRLOG_BASE + 98;
+pub const NELOG_Srv_Thread_Failure: DWORD = ERRLOG_BASE + 104;
+pub const NELOG_Srv_Close_Failure: DWORD = ERRLOG_BASE + 105;
+pub const NELOG_ReplUserCurDir: DWORD = ERRLOG_BASE + 106;
+pub const NELOG_ReplCannotMasterDir: DWORD = ERRLOG_BASE + 107;
+pub const NELOG_ReplUpdateError: DWORD = ERRLOG_BASE + 108;
+pub const NELOG_ReplLostMaster: DWORD = ERRLOG_BASE + 109;
+pub const NELOG_NetlogonAuthDCFail: DWORD = ERRLOG_BASE + 110;
+pub const NELOG_ReplLogonFailed: DWORD = ERRLOG_BASE + 111;
+pub const NELOG_ReplNetErr: DWORD = ERRLOG_BASE + 112;
+pub const NELOG_ReplMaxFiles: DWORD = ERRLOG_BASE + 113;
+pub const NELOG_ReplMaxTreeDepth: DWORD = ERRLOG_BASE + 114;
+pub const NELOG_ReplBadMsg: DWORD = ERRLOG_BASE + 115;
+pub const NELOG_ReplSysErr: DWORD = ERRLOG_BASE + 116;
+pub const NELOG_ReplUserLoged: DWORD = ERRLOG_BASE + 117;
+pub const NELOG_ReplBadImport: DWORD = ERRLOG_BASE + 118;
+pub const NELOG_ReplBadExport: DWORD = ERRLOG_BASE + 119;
+pub const NELOG_ReplSignalFileErr: DWORD = ERRLOG_BASE + 120;
+pub const NELOG_DiskFT: DWORD = ERRLOG_BASE + 121;
+pub const NELOG_ReplAccessDenied: DWORD = ERRLOG_BASE + 122;
+pub const NELOG_NetlogonFailedPrimary: DWORD = ERRLOG_BASE + 123;
+pub const NELOG_NetlogonPasswdSetFailed: DWORD = ERRLOG_BASE + 124;
+pub const NELOG_NetlogonTrackingError: DWORD = ERRLOG_BASE + 125;
+pub const NELOG_NetlogonSyncError: DWORD = ERRLOG_BASE + 126;
+pub const NELOG_NetlogonRequireSignOrSealError: DWORD = ERRLOG_BASE + 127;
+pub const NELOG_UPS_PowerOut: DWORD = ERRLOG_BASE + 130;
+pub const NELOG_UPS_Shutdown: DWORD = ERRLOG_BASE + 131;
+pub const NELOG_UPS_CmdFileError: DWORD = ERRLOG_BASE + 132;
+pub const NELOG_UPS_CannotOpenDriver: DWORD = ERRLOG_BASE + 133;
+pub const NELOG_UPS_PowerBack: DWORD = ERRLOG_BASE + 134;
+pub const NELOG_UPS_CmdFileConfig: DWORD = ERRLOG_BASE + 135;
+pub const NELOG_UPS_CmdFileExec: DWORD = ERRLOG_BASE + 136;
+pub const NELOG_Missing_Parameter: DWORD = ERRLOG_BASE + 150;
+pub const NELOG_Invalid_Config_Line: DWORD = ERRLOG_BASE + 151;
+pub const NELOG_Invalid_Config_File: DWORD = ERRLOG_BASE + 152;
+pub const NELOG_File_Changed: DWORD = ERRLOG_BASE + 153;
+pub const NELOG_Files_Dont_Fit: DWORD = ERRLOG_BASE + 154;
+pub const NELOG_Wrong_DLL_Version: DWORD = ERRLOG_BASE + 155;
+pub const NELOG_Error_in_DLL: DWORD = ERRLOG_BASE + 156;
+pub const NELOG_System_Error: DWORD = ERRLOG_BASE + 157;
+pub const NELOG_FT_ErrLog_Too_Large: DWORD = ERRLOG_BASE + 158;
+pub const NELOG_FT_Update_In_Progress: DWORD = ERRLOG_BASE + 159;
+pub const NELOG_Joined_Domain: DWORD = ERRLOG_BASE + 160;
+pub const NELOG_Joined_Workgroup: DWORD = ERRLOG_BASE + 161;
+pub const NELOG_OEM_Code: DWORD = ERRLOG_BASE + 199;
+pub const ERRLOG2_BASE: DWORD = 5700;
+pub const NELOG_NetlogonSSIInitError: DWORD = ERRLOG2_BASE + 0;
+pub const NELOG_NetlogonFailedToUpdateTrustList: DWORD = ERRLOG2_BASE + 1;
+pub const NELOG_NetlogonFailedToAddRpcInterface: DWORD = ERRLOG2_BASE + 2;
+pub const NELOG_NetlogonFailedToReadMailslot: DWORD = ERRLOG2_BASE + 3;
+pub const NELOG_NetlogonFailedToRegisterSC: DWORD = ERRLOG2_BASE + 4;
+pub const NELOG_NetlogonChangeLogCorrupt: DWORD = ERRLOG2_BASE + 5;
+pub const NELOG_NetlogonFailedToCreateShare: DWORD = ERRLOG2_BASE + 6;
+pub const NELOG_NetlogonDownLevelLogonFailed: DWORD = ERRLOG2_BASE + 7;
+pub const NELOG_NetlogonDownLevelLogoffFailed: DWORD = ERRLOG2_BASE + 8;
+pub const NELOG_NetlogonNTLogonFailed: DWORD = ERRLOG2_BASE + 9;
+pub const NELOG_NetlogonNTLogoffFailed: DWORD = ERRLOG2_BASE + 10;
+pub const NELOG_NetlogonPartialSyncCallSuccess: DWORD = ERRLOG2_BASE + 11;
+pub const NELOG_NetlogonPartialSyncCallFailed: DWORD = ERRLOG2_BASE + 12;
+pub const NELOG_NetlogonFullSyncCallSuccess: DWORD = ERRLOG2_BASE + 13;
+pub const NELOG_NetlogonFullSyncCallFailed: DWORD = ERRLOG2_BASE + 14;
+pub const NELOG_NetlogonPartialSyncSuccess: DWORD = ERRLOG2_BASE + 15;
+pub const NELOG_NetlogonPartialSyncFailed: DWORD = ERRLOG2_BASE + 16;
+pub const NELOG_NetlogonFullSyncSuccess: DWORD = ERRLOG2_BASE + 17;
+pub const NELOG_NetlogonFullSyncFailed: DWORD = ERRLOG2_BASE + 18;
+pub const NELOG_NetlogonAuthNoDomainController: DWORD = ERRLOG2_BASE + 19;
+pub const NELOG_NetlogonAuthNoTrustLsaSecret: DWORD = ERRLOG2_BASE + 20;
+pub const NELOG_NetlogonAuthNoTrustSamAccount: DWORD = ERRLOG2_BASE + 21;
+pub const NELOG_NetlogonServerAuthFailed: DWORD = ERRLOG2_BASE + 22;
+pub const NELOG_NetlogonServerAuthNoTrustSamAccount: DWORD = ERRLOG2_BASE + 23;
+pub const NELOG_FailedToRegisterSC: DWORD = ERRLOG2_BASE + 24;
+pub const NELOG_FailedToSetServiceStatus: DWORD = ERRLOG2_BASE + 25;
+pub const NELOG_FailedToGetComputerName: DWORD = ERRLOG2_BASE + 26;
+pub const NELOG_DriverNotLoaded: DWORD = ERRLOG2_BASE + 27;
+pub const NELOG_NoTranportLoaded: DWORD = ERRLOG2_BASE + 28;
+pub const NELOG_NetlogonFailedDomainDelta: DWORD = ERRLOG2_BASE + 29;
+pub const NELOG_NetlogonFailedGlobalGroupDelta: DWORD = ERRLOG2_BASE + 30;
+pub const NELOG_NetlogonFailedLocalGroupDelta: DWORD = ERRLOG2_BASE + 31;
+pub const NELOG_NetlogonFailedUserDelta: DWORD = ERRLOG2_BASE + 32;
+pub const NELOG_NetlogonFailedPolicyDelta: DWORD = ERRLOG2_BASE + 33;
+pub const NELOG_NetlogonFailedTrustedDomainDelta: DWORD = ERRLOG2_BASE + 34;
+pub const NELOG_NetlogonFailedAccountDelta: DWORD = ERRLOG2_BASE + 35;
+pub const NELOG_NetlogonFailedSecretDelta: DWORD = ERRLOG2_BASE + 36;
+pub const NELOG_NetlogonSystemError: DWORD = ERRLOG2_BASE + 37;
+pub const NELOG_NetlogonDuplicateMachineAccounts: DWORD = ERRLOG2_BASE + 38;
+pub const NELOG_NetlogonTooManyGlobalGroups: DWORD = ERRLOG2_BASE + 39;
+pub const NELOG_NetlogonBrowserDriver: DWORD = ERRLOG2_BASE + 40;
+pub const NELOG_NetlogonAddNameFailure: DWORD = ERRLOG2_BASE + 41;
+pub const NELOG_RplMessages: DWORD = ERRLOG2_BASE + 42;
+pub const NELOG_RplXnsBoot: DWORD = ERRLOG2_BASE + 43;
+pub const NELOG_RplSystem: DWORD = ERRLOG2_BASE + 44;
+pub const NELOG_RplWkstaTimeout: DWORD = ERRLOG2_BASE + 45;
+pub const NELOG_RplWkstaFileOpen: DWORD = ERRLOG2_BASE + 46;
+pub const NELOG_RplWkstaFileRead: DWORD = ERRLOG2_BASE + 47;
+pub const NELOG_RplWkstaMemory: DWORD = ERRLOG2_BASE + 48;
+pub const NELOG_RplWkstaFileChecksum: DWORD = ERRLOG2_BASE + 49;
+pub const NELOG_RplWkstaFileLineCount: DWORD = ERRLOG2_BASE + 50;
+pub const NELOG_RplWkstaBbcFile: DWORD = ERRLOG2_BASE + 51;
+pub const NELOG_RplWkstaFileSize: DWORD = ERRLOG2_BASE + 52;
+pub const NELOG_RplWkstaInternal: DWORD = ERRLOG2_BASE + 53;
+pub const NELOG_RplWkstaWrongVersion: DWORD = ERRLOG2_BASE + 54;
+pub const NELOG_RplWkstaNetwork: DWORD = ERRLOG2_BASE + 55;
+pub const NELOG_RplAdapterResource: DWORD = ERRLOG2_BASE + 56;
+pub const NELOG_RplFileCopy: DWORD = ERRLOG2_BASE + 57;
+pub const NELOG_RplFileDelete: DWORD = ERRLOG2_BASE + 58;
+pub const NELOG_RplFilePerms: DWORD = ERRLOG2_BASE + 59;
+pub const NELOG_RplCheckConfigs: DWORD = ERRLOG2_BASE + 60;
+pub const NELOG_RplCreateProfiles: DWORD = ERRLOG2_BASE + 61;
+pub const NELOG_RplRegistry: DWORD = ERRLOG2_BASE + 62;
+pub const NELOG_RplReplaceRPLDISK: DWORD = ERRLOG2_BASE + 63;
+pub const NELOG_RplCheckSecurity: DWORD = ERRLOG2_BASE + 64;
+pub const NELOG_RplBackupDatabase: DWORD = ERRLOG2_BASE + 65;
+pub const NELOG_RplInitDatabase: DWORD = ERRLOG2_BASE + 66;
+pub const NELOG_RplRestoreDatabaseFailure: DWORD = ERRLOG2_BASE + 67;
+pub const NELOG_RplRestoreDatabaseSuccess: DWORD = ERRLOG2_BASE + 68;
+pub const NELOG_RplInitRestoredDatabase: DWORD = ERRLOG2_BASE + 69;
+pub const NELOG_NetlogonSessionTypeWrong: DWORD = ERRLOG2_BASE + 70;
+pub const NELOG_RplUpgradeDBTo40: DWORD = ERRLOG2_BASE + 71;
+pub const NELOG_NetlogonLanmanBdcsNotAllowed: DWORD = ERRLOG2_BASE + 72;
+pub const NELOG_NetlogonNoDynamicDns: DWORD = ERRLOG2_BASE + 73;
+pub const NELOG_NetlogonDynamicDnsRegisterFailure: DWORD = ERRLOG2_BASE + 74;
+pub const NELOG_NetlogonDynamicDnsDeregisterFailure: DWORD = ERRLOG2_BASE + 75;
+pub const NELOG_NetlogonFailedFileCreate: DWORD = ERRLOG2_BASE + 76;
+pub const NELOG_NetlogonGetSubnetToSite: DWORD = ERRLOG2_BASE + 77;
+pub const NELOG_NetlogonNoSiteForClient: DWORD = ERRLOG2_BASE + 78;
+pub const NELOG_NetlogonBadSiteName: DWORD = ERRLOG2_BASE + 79;
+pub const NELOG_NetlogonBadSubnetName: DWORD = ERRLOG2_BASE + 80;
+pub const NELOG_NetlogonDynamicDnsServerFailure: DWORD = ERRLOG2_BASE + 81;
+pub const NELOG_NetlogonDynamicDnsFailure: DWORD = ERRLOG2_BASE + 82;
+pub const NELOG_NetlogonRpcCallCancelled: DWORD = ERRLOG2_BASE + 83;
+pub const NELOG_NetlogonDcSiteCovered: DWORD = ERRLOG2_BASE + 84;
+pub const NELOG_NetlogonDcSiteNotCovered: DWORD = ERRLOG2_BASE + 85;
+pub const NELOG_NetlogonGcSiteCovered: DWORD = ERRLOG2_BASE + 86;
+pub const NELOG_NetlogonGcSiteNotCovered: DWORD = ERRLOG2_BASE + 87;
+pub const NELOG_NetlogonFailedSpnUpdate: DWORD = ERRLOG2_BASE + 88;
+pub const NELOG_NetlogonFailedDnsHostNameUpdate: DWORD = ERRLOG2_BASE + 89;
+pub const NELOG_NetlogonAuthNoUplevelDomainController: DWORD = ERRLOG2_BASE + 90;
+pub const NELOG_NetlogonAuthDomainDowngraded: DWORD = ERRLOG2_BASE + 91;
+pub const NELOG_NetlogonNdncSiteCovered: DWORD = ERRLOG2_BASE + 92;
+pub const NELOG_NetlogonNdncSiteNotCovered: DWORD = ERRLOG2_BASE + 93;
+pub const NELOG_NetlogonDcOldSiteCovered: DWORD = ERRLOG2_BASE + 94;
+pub const NELOG_NetlogonDcSiteNotCoveredAuto: DWORD = ERRLOG2_BASE + 95;
+pub const NELOG_NetlogonGcOldSiteCovered: DWORD = ERRLOG2_BASE + 96;
+pub const NELOG_NetlogonGcSiteNotCoveredAuto: DWORD = ERRLOG2_BASE + 97;
+pub const NELOG_NetlogonNdncOldSiteCovered: DWORD = ERRLOG2_BASE + 98;
+pub const NELOG_NetlogonNdncSiteNotCoveredAuto: DWORD = ERRLOG2_BASE + 99;
+pub const NELOG_NetlogonSpnMultipleSamAccountNames: DWORD = ERRLOG2_BASE + 100;
+pub const NELOG_NetlogonSpnCrackNamesFailure: DWORD = ERRLOG2_BASE + 101;
+pub const NELOG_NetlogonNoAddressToSiteMapping: DWORD = ERRLOG2_BASE + 102;
+pub const NELOG_NetlogonInvalidGenericParameterValue: DWORD = ERRLOG2_BASE + 103;
+pub const NELOG_NetlogonInvalidDwordParameterValue: DWORD = ERRLOG2_BASE + 104;
+pub const NELOG_NetlogonServerAuthFailedNoAccount: DWORD = ERRLOG2_BASE + 105;
+pub const NELOG_NetlogonNoDynamicDnsManual: DWORD = ERRLOG2_BASE + 106;
+pub const NELOG_NetlogonNoSiteForClients: DWORD = ERRLOG2_BASE + 107;
+pub const NELOG_NetlogonDnsDeregAborted: DWORD = ERRLOG2_BASE + 108;
+pub const NELOG_NetlogonRpcPortRequestFailure: DWORD = ERRLOG2_BASE + 109;
+pub const NELOG_NetlogonPartialSiteMappingForClients: DWORD = ERRLOG2_BASE + 110;
+pub const NELOG_NetlogonRemoteDynamicDnsRegisterFailure: DWORD = ERRLOG2_BASE + 111;
+pub const NELOG_NetlogonRemoteDynamicDnsDeregisterFailure: DWORD = ERRLOG2_BASE + 112;
+pub const NELOG_NetlogonRejectedRemoteDynamicDnsRegister: DWORD = ERRLOG2_BASE + 113;
+pub const NELOG_NetlogonRejectedRemoteDynamicDnsDeregister: DWORD = ERRLOG2_BASE + 114;
+pub const NELOG_NetlogonRemoteDynamicDnsUpdateRequestFailure: DWORD = ERRLOG2_BASE + 115;
+pub const NELOG_NetlogonUserValidationReqInitialTimeOut: DWORD = ERRLOG2_BASE + 116;
+pub const NELOG_NetlogonUserValidationReqRecurringTimeOut: DWORD = ERRLOG2_BASE + 117;
+pub const NELOG_NetlogonUserValidationReqWaitInitialWarning: DWORD = ERRLOG2_BASE + 118;
+pub const NELOG_NetlogonUserValidationReqWaitRecurringWarning: DWORD = ERRLOG2_BASE + 119;
+pub const NELOG_NetlogonFailedToAddAuthzRpcInterface: DWORD = ERRLOG2_BASE + 120;
+pub const NELOG_NetLogonFailedToInitializeAuthzRm: DWORD = ERRLOG2_BASE + 121;
+pub const NELOG_NetLogonFailedToInitializeRPCSD: DWORD = ERRLOG2_BASE + 122;
+pub const NELOG_NetlogonMachinePasswdSetSucceeded: DWORD = ERRLOG2_BASE + 123;
+pub const NELOG_NetlogonMsaPasswdSetSucceeded: DWORD = ERRLOG2_BASE + 124;
diff --git a/vendor/winapi/src/um/lmjoin.rs b/vendor/winapi/src/um/lmjoin.rs
new file mode 100644
index 000000000..72c72c0ee
--- /dev/null
+++ b/vendor/winapi/src/um/lmjoin.rs
@@ -0,0 +1,232 @@
+// 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.
+// Definitions and prototypes for the Net setup apis
+use shared::lmcons::NET_API_STATUS;
+use shared::minwindef::{BYTE, DWORD, PBYTE, PDWORD, ULONG};
+use um::wincrypt::PCCERT_CONTEXT;
+use um::winnt::{HRESULT, LPCWSTR, LPWSTR, PVOID};
+ENUM!{enum NETSETUP_NAME_TYPE {
+ NetSetupUnknown = 0,
+ NetSetupMachine,
+ NetSetupWorkgroup,
+ NetSetupDomain,
+ NetSetupNonExistentDomain,
+ NetSetupDnsMachine,
+}}
+pub type PNETSETUP_NAME_TYPE = *mut NETSETUP_NAME_TYPE;
+ENUM!{enum DSREG_JOIN_TYPE {
+ DSREG_UNKNOWN_JOIN = 0,
+ DSREG_DEVICE_JOIN = 1,
+ DSREG_WORKPLACE_JOIN = 2,
+}}
+pub type PDSREG_JOIN_TYPE = *mut DSREG_JOIN_TYPE;
+STRUCT!{struct DSREG_USER_INFO {
+ pszUserEmail: LPWSTR,
+ pszUserKeyId: LPWSTR,
+ pszUserKeyName: LPWSTR,
+}}
+pub type PDSREG_USER_INFO = *mut DSREG_USER_INFO;
+STRUCT!{struct DSREG_JOIN_INFO {
+ joinType: DSREG_JOIN_TYPE,
+ pJoinCertificate: PCCERT_CONTEXT,
+ pszDeviceId: LPWSTR,
+ pszIdpDomain: LPWSTR,
+ pszTenantId: LPWSTR,
+ pszJoinUserEmail: LPWSTR,
+ pszTenantDisplayName: LPWSTR,
+ pszMdmEnrollmentUrl: LPWSTR,
+ pszMdmTermsOfUseUrl: LPWSTR,
+ pszMdmComplianceUrl: LPWSTR,
+ pszUserSettingSyncUrl: LPWSTR,
+ pUserInfo: *mut DSREG_USER_INFO,
+}}
+pub type PDSREG_JOIN_INFO = *mut DSREG_JOIN_INFO;
+pub const NETSETUP_JOIN_DOMAIN: DWORD = 0x00000001;
+pub const NETSETUP_ACCT_CREATE: DWORD = 0x00000002;
+pub const NETSETUP_ACCT_DELETE: DWORD = 0x00000004;
+pub const NETSETUP_WIN9X_UPGRADE: DWORD = 0x00000010;
+pub const NETSETUP_DOMAIN_JOIN_IF_JOINED: DWORD = 0x00000020;
+pub const NETSETUP_JOIN_UNSECURE: DWORD = 0x00000040;
+pub const NETSETUP_MACHINE_PWD_PASSED: DWORD = 0x00000080;
+pub const NETSETUP_DEFER_SPN_SET: DWORD = 0x00000100;
+pub const NETSETUP_JOIN_DC_ACCOUNT: DWORD = 0x00000200;
+pub const NETSETUP_JOIN_WITH_NEW_NAME: DWORD = 0x00000400;
+pub const NETSETUP_JOIN_READONLY: DWORD = 0x00000800;
+pub const NETSETUP_DNS_NAME_CHANGES_ONLY: DWORD = 0x00001000;
+pub const NETSETUP_INSTALL_INVOCATION: DWORD = 0x00040000;
+pub const NETSETUP_AMBIGUOUS_DC: DWORD = 0x00001000;
+pub const NETSETUP_NO_NETLOGON_CACHE: DWORD = 0x00002000;
+pub const NETSETUP_DONT_CONTROL_SERVICES: DWORD = 0x00004000;
+pub const NETSETUP_SET_MACHINE_NAME: DWORD = 0x00008000;
+pub const NETSETUP_FORCE_SPN_SET: DWORD = 0x00010000;
+pub const NETSETUP_NO_ACCT_REUSE: DWORD = 0x00020000;
+pub const NETSETUP_ALT_SAMACCOUNTNAME: DWORD = 0x00020000;
+pub const NETSETUP_IGNORE_UNSUPPORTED_FLAGS: DWORD = 0x10000000;
+pub const NETSETUP_VALID_UNJOIN_FLAGS: DWORD = NETSETUP_ACCT_DELETE
+ | NETSETUP_IGNORE_UNSUPPORTED_FLAGS | NETSETUP_JOIN_DC_ACCOUNT;
+pub const NETSETUP_PROCESS_OFFLINE_FLAGS: DWORD = NETSETUP_JOIN_DOMAIN
+ | NETSETUP_DOMAIN_JOIN_IF_JOINED | NETSETUP_JOIN_WITH_NEW_NAME | NETSETUP_DONT_CONTROL_SERVICES
+ | NETSETUP_MACHINE_PWD_PASSED;
+extern "system" {
+ pub fn NetJoinDomain(
+ lpServer: LPCWSTR,
+ lpDomain: LPCWSTR,
+ lpMachineAccountOU: LPCWSTR,
+ lpAccount: LPCWSTR,
+ lpPassword: LPCWSTR,
+ fJoinOptions: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetUnjoinDomain(
+ lpServer: LPCWSTR,
+ lpAccount: LPCWSTR,
+ lpPassword: LPCWSTR,
+ fUnjoinOptions: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetRenameMachineInDomain(
+ lpServer: LPCWSTR,
+ lpNewMachineName: LPCWSTR,
+ lpAccount: LPCWSTR,
+ lpPassword: LPCWSTR,
+ fRenameOptions: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetValidateName(
+ lpServer: LPCWSTR,
+ lpName: LPCWSTR,
+ lpAccount: LPCWSTR,
+ lpPassword: LPCWSTR,
+ NameType: NETSETUP_NAME_TYPE,
+ ) -> NET_API_STATUS;
+ pub fn NetGetJoinableOUs(
+ lpServer: LPCWSTR,
+ lpDomain: LPCWSTR,
+ lpAccount: LPCWSTR,
+ lpPassword: LPCWSTR,
+ OUCount: *mut DWORD,
+ OUs: *mut *mut LPWSTR,
+ ) -> NET_API_STATUS;
+}
+pub const NET_IGNORE_UNSUPPORTED_FLAGS: DWORD = 0x01;
+extern "system" {
+ pub fn NetAddAlternateComputerName(
+ Server: LPCWSTR,
+ AlternateName: LPCWSTR,
+ DomainAccount: LPCWSTR,
+ DomainAccountPassword: LPCWSTR,
+ Reserved: ULONG,
+ ) -> NET_API_STATUS;
+ pub fn NetRemoveAlternateComputerName(
+ Server: LPCWSTR,
+ AlternateName: LPCWSTR,
+ DomainAccount: LPCWSTR,
+ DomainAccountPassword: LPCWSTR,
+ Reserved: ULONG,
+ ) -> NET_API_STATUS;
+ pub fn NetSetPrimaryComputerName(
+ Server: LPCWSTR,
+ PrimaryName: LPCWSTR,
+ DomainAccount: LPCWSTR,
+ DomainAccountPassword: LPCWSTR,
+ Reserved: ULONG,
+ ) -> NET_API_STATUS;
+}
+ENUM!{enum NET_COMPUTER_NAME_TYPE {
+ NetPrimaryComputerName,
+ NetAlternateComputerNames,
+ NetAllComputerNames,
+ NetComputerNameTypeMax,
+}}
+pub type PNET_COMPUTER_NAME_TYPE = *mut NET_COMPUTER_NAME_TYPE;
+extern "system" {
+ pub fn NetEnumerateComputerNames(
+ Server: LPCWSTR,
+ NameType: NET_COMPUTER_NAME_TYPE,
+ Reserved: ULONG,
+ EntryCount: PDWORD,
+ ComputerNames: *mut *mut LPWSTR,
+ ) -> NET_API_STATUS;
+}
+pub const NETSETUP_PROVISION_DOWNLEVEL_PRIV_SUPPORT: DWORD = 0x00000001;
+pub const NETSETUP_PROVISION_REUSE_ACCOUNT: DWORD = 0x00000002;
+pub const NETSETUP_PROVISION_USE_DEFAULT_PASSWORD: DWORD = 0x00000004;
+pub const NETSETUP_PROVISION_SKIP_ACCOUNT_SEARCH: DWORD = 0x00000008;
+pub const NETSETUP_PROVISION_ROOT_CA_CERTS: DWORD = 0x00000010;
+pub const NETSETUP_PROVISION_PERSISTENTSITE: DWORD = 0x00000020;
+pub const NETSETUP_PROVISION_ONLINE_CALLER: DWORD = 0x40000000;
+pub const NETSETUP_PROVISION_CHECK_PWD_ONLY: DWORD = 0x80000000;
+extern "system" {
+ pub fn NetProvisionComputerAccount(
+ lpDomain: LPCWSTR,
+ lpMachineName: LPCWSTR,
+ lpMachineAccountOU: LPCWSTR,
+ lpDcName: LPCWSTR,
+ dwOptions: DWORD,
+ pProvisionBinData: *mut PBYTE,
+ pdwProvisionBinDataSize: *mut DWORD,
+ pProvisionTextData: *mut LPWSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetRequestOfflineDomainJoin(
+ pProvisionBinData: *mut BYTE,
+ cbProvisionBinDataSize: DWORD,
+ dwOptions: DWORD,
+ lpWindowsPath: LPCWSTR,
+ ) -> NET_API_STATUS;
+}
+pub const NETSETUP_PROVISIONING_PARAMS_WIN8_VERSION: DWORD = 0x00000001;
+pub const NETSETUP_PROVISIONING_PARAMS_CURRENT_VERSION: DWORD = 0x00000002;
+STRUCT!{struct NETSETUP_PROVISIONING_PARAMS {
+ dwVersion: DWORD,
+ lpDomain: LPCWSTR,
+ lpHostName: LPCWSTR,
+ lpMachineAccountOU: LPCWSTR,
+ lpDcName: LPCWSTR,
+ dwProvisionOptions: DWORD,
+ aCertTemplateNames: *mut LPCWSTR,
+ cCertTemplateNames: DWORD,
+ aMachinePolicyNames: *mut LPCWSTR,
+ cMachinePolicyNames: DWORD,
+ aMachinePolicyPaths: *mut LPCWSTR,
+ cMachinePolicyPaths: DWORD,
+ lpNetbiosName: LPWSTR,
+ lpSiteName: LPWSTR,
+ lpPrimaryDNSDomain: LPWSTR,
+}}
+pub type PNETSETUP_PROVISIONING_PARAMS = *mut NETSETUP_PROVISIONING_PARAMS;
+extern "system" {
+ pub fn NetCreateProvisioningPackage(
+ pProvisioningParams: PNETSETUP_PROVISIONING_PARAMS,
+ ppPackageBinData: *mut PBYTE,
+ pdwPackageBinDataSize: *mut DWORD,
+ ppPackageTextData: *mut LPWSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetRequestProvisioningPackageInstall(
+ pPackageBinData: *mut BYTE,
+ dwPackageBinDataSize: DWORD,
+ dwProvisionOptions: DWORD,
+ lpWindowsPath: LPCWSTR,
+ pvReserved: PVOID,
+ ) -> NET_API_STATUS;
+ pub fn NetGetAadJoinInformation(
+ pcszTenantId: LPCWSTR,
+ ppJoinInfo: *mut PDSREG_JOIN_INFO,
+ ) -> HRESULT;
+ pub fn NetFreeAadJoinInformation(
+ pJoinInfo: PDSREG_JOIN_INFO,
+ );
+}
+ENUM!{enum NETSETUP_JOIN_STATUS {
+ NetSetupUnknownStatus = 0,
+ NetSetupUnjoined,
+ NetSetupWorkgroupName,
+ NetSetupDomainName,
+}}
+pub type PNETSETUP_JOIN_STATUS = *mut NETSETUP_JOIN_STATUS;
+extern "system" {
+ pub fn NetGetJoinInformation(
+ lpServer: LPCWSTR,
+ lpNameBuffer: *mut LPWSTR,
+ BufferType: PNETSETUP_JOIN_STATUS,
+ ) -> NET_API_STATUS;
+}
diff --git a/vendor/winapi/src/um/lmmsg.rs b/vendor/winapi/src/um/lmmsg.rs
new file mode 100644
index 000000000..9970fe94e
--- /dev/null
+++ b/vendor/winapi/src/um/lmmsg.rs
@@ -0,0 +1,56 @@
+// 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.
+//! This file contains structures, function prototypes, and definitions for the NetMessage API
+use shared::lmcons::NET_API_STATUS;
+use shared::minwindef::{DWORD, LPBYTE, LPDWORD};
+use um::winnt::{LPCWSTR, LPWSTR};
+extern "system" {
+ pub fn NetMessageNameAdd(
+ servername: LPCWSTR,
+ msgname: LPCWSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetMessageNameEnum(
+ servername: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resumehandle: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetMessageNameGetInfo(
+ servername: LPCWSTR,
+ msgname: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetMessageNameDel(
+ servername: LPCWSTR,
+ msgname: LPCWSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetMessageBufferSend(
+ servername: LPCWSTR,
+ msgname: LPCWSTR,
+ fromname: LPCWSTR,
+ buf: LPBYTE,
+ buflen: DWORD,
+ ) -> NET_API_STATUS;
+}
+STRUCT!{struct MSG_INFO_0 {
+ msgi0_name: LPWSTR,
+}}
+pub type PMSG_INFO_0 = *mut MSG_INFO_0;
+pub type LPMSG_INFO_0 = *mut MSG_INFO_0;
+STRUCT!{struct MSG_INFO_1 {
+ msgi1_name: LPWSTR,
+ msgi1_forward_flag: DWORD,
+ msgi1_forward: LPWSTR,
+}}
+pub type PMSG_INFO_1 = *mut MSG_INFO_1;
+pub type LPMSG_INFO_1 = *mut MSG_INFO_1;
+pub const MSGNAME_NOT_FORWARDED: DWORD = 0;
+pub const MSGNAME_FORWARDED_TO: DWORD = 0x04;
+pub const MSGNAME_FORWARDED_FROM: DWORD = 0x10;
diff --git a/vendor/winapi/src/um/lmremutl.rs b/vendor/winapi/src/um/lmremutl.rs
new file mode 100644
index 000000000..27275203b
--- /dev/null
+++ b/vendor/winapi/src/um/lmremutl.rs
@@ -0,0 +1,61 @@
+// 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.
+//! This file contains structures, function prototypes, and definitions for the NetRemote API
+use shared::lmcons::NET_API_STATUS;
+use shared::minwindef::{DWORD, LPBYTE, LPDWORD};
+use um::winnt::{CHAR, LONG, LPCWSTR, LPSTR};
+pub type DESC_CHAR = CHAR;
+pub type LPDESC = LPSTR;
+extern "system" {
+ pub fn NetRemoteTOD(
+ UncServerName: LPCWSTR,
+ BufferPtr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetRemoteComputerSupports(
+ UncServerName: LPCWSTR,
+ OptionsWanted: DWORD,
+ OptionsSupported: LPDWORD,
+ ) -> NET_API_STATUS;
+}
+extern "C" {
+ pub fn RxRemoteApi(
+ ApiNumber: DWORD,
+ UncServerName: LPCWSTR,
+ ParmDescString: LPDESC,
+ DataDesc16: LPDESC,
+ DataDesc32: LPDESC,
+ DataDescSmb: LPDESC,
+ AuxDesc16: LPDESC,
+ AuxDesc32: LPDESC,
+ AuxDescSmb: LPDESC,
+ Flags: DWORD,
+ ) -> NET_API_STATUS;
+}
+STRUCT!{struct TIME_OF_DAY_INFO {
+ tod_elapsedt: DWORD,
+ tod_msecs: DWORD,
+ tod_hours: DWORD,
+ tod_mins: DWORD,
+ tod_secs: DWORD,
+ tod_hunds: DWORD,
+ tod_timezone: LONG,
+ tod_tinterval: DWORD,
+ tod_day: DWORD,
+ tod_month: DWORD,
+ tod_year: DWORD,
+ tod_weekday: DWORD,
+}}
+pub type PTIME_OF_DAY_INFO = *mut TIME_OF_DAY_INFO;
+pub type LPTIME_OF_DAY_INFO = *mut TIME_OF_DAY_INFO;
+pub const SUPPORTS_REMOTE_ADMIN_PROTOCOL: DWORD = 0x00000002;
+pub const SUPPORTS_RPC: DWORD = 0x00000004;
+pub const SUPPORTS_SAM_PROTOCOL: DWORD = 0x00000008;
+pub const SUPPORTS_UNICODE: DWORD = 0x00000010;
+pub const SUPPORTS_LOCAL: DWORD = 0x00000020;
+pub const SUPPORTS_ANY: DWORD = 0xFFFFFFFF;
+pub const NO_PERMISSION_REQUIRED: DWORD = 0x00000001;
+pub const ALLOCATE_RESPONSE: DWORD = 0x00000002;
+pub const USE_SPECIFIC_TRANSPORT: DWORD = 0x80000000;
diff --git a/vendor/winapi/src/um/lmrepl.rs b/vendor/winapi/src/um/lmrepl.rs
new file mode 100644
index 000000000..81a665be5
--- /dev/null
+++ b/vendor/winapi/src/um/lmrepl.rs
@@ -0,0 +1,200 @@
+// 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.
+//! This file contains structures, function prototypes, and definitions for the replicator APIs
+use shared::lmcons::{NET_API_STATUS, PARMNUM_BASE_INFOLEVEL};
+use shared::minwindef::{DWORD, LPBYTE, LPDWORD};
+use um::winnt::{LPCWSTR, LPWSTR};
+pub const REPL_ROLE_EXPORT: DWORD = 1;
+pub const REPL_ROLE_IMPORT: DWORD = 2;
+pub const REPL_ROLE_BOTH: DWORD = 3;
+pub const REPL_INTERVAL_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + 0;
+pub const REPL_PULSE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + 1;
+pub const REPL_GUARDTIME_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + 2;
+pub const REPL_RANDOM_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + 3;
+STRUCT!{struct REPL_INFO_0 {
+ rp0_role: DWORD,
+ rp0_exportpath: LPWSTR,
+ rp0_exportlist: LPWSTR,
+ rp0_importpath: LPWSTR,
+ rp0_importlist: LPWSTR,
+ rp0_logonusername: LPWSTR,
+ rp0_interval: DWORD,
+ rp0_pulse: DWORD,
+ rp0_guardtime: DWORD,
+ rp0_random: DWORD,
+}}
+pub type PREPL_INFO_0 = *mut REPL_INFO_0;
+pub type LPREPL_INFO_0 = *mut REPL_INFO_0;
+STRUCT!{struct REPL_INFO_1000 {
+ rp1000_interval: DWORD,
+}}
+pub type PREPL_INFO_1000 = *mut REPL_INFO_1000;
+pub type LPREPL_INFO_1000 = *mut REPL_INFO_1000;
+STRUCT!{struct REPL_INFO_1001 {
+ rp1001_pulse: DWORD,
+}}
+pub type PREPL_INFO_1001 = *mut REPL_INFO_1001;
+pub type LPREPL_INFO_1001 = *mut REPL_INFO_1001;
+STRUCT!{struct REPL_INFO_1002 {
+ rp1002_guardtime: DWORD,
+}}
+pub type PREPL_INFO_1002 = *mut REPL_INFO_1002;
+pub type LPREPL_INFO_1002 = *mut REPL_INFO_1002;
+STRUCT!{struct REPL_INFO_1003 {
+ rp1003_random: DWORD,
+}}
+pub type PREPL_INFO_1003 = *mut REPL_INFO_1003;
+pub type LPREPL_INFO_1003 = *mut REPL_INFO_1003;
+extern "system" {
+ pub fn NetReplGetInfo(
+ servername: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetReplSetInfo(
+ servername: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+}
+pub const REPL_INTEGRITY_FILE: DWORD = 1;
+pub const REPL_INTEGRITY_TREE: DWORD = 2;
+pub const REPL_EXTENT_FILE: DWORD = 1;
+pub const REPL_EXTENT_TREE: DWORD = 2;
+pub const REPL_EXPORT_INTEGRITY_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + 0;
+pub const REPL_EXPORT_EXTENT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + 1;
+STRUCT!{struct REPL_EDIR_INFO_0 {
+ rped0_dirname: LPWSTR,
+}}
+pub type PREPL_EDIR_INFO_0 = *mut REPL_EDIR_INFO_0;
+pub type LPREPL_EDIR_INFO_0 = *mut REPL_EDIR_INFO_0;
+STRUCT!{struct REPL_EDIR_INFO_1 {
+ rped1_dirname: LPWSTR,
+ rped1_integrity: DWORD,
+ rped1_extent: DWORD,
+}}
+pub type PREPL_EDIR_INFO_1 = *mut REPL_EDIR_INFO_1;
+pub type LPREPL_EDIR_INFO_1 = *mut REPL_EDIR_INFO_1;
+STRUCT!{struct REPL_EDIR_INFO_2 {
+ rped2_dirname: LPWSTR,
+ rped2_integrity: DWORD,
+ rped2_extent: DWORD,
+ rped2_lockcount: DWORD,
+ rped2_locktime: DWORD,
+}}
+pub type PREPL_EDIR_INFO_2 = *mut REPL_EDIR_INFO_2;
+pub type LPREPL_EDIR_INFO_2 = *mut REPL_EDIR_INFO_2;
+STRUCT!{struct REPL_EDIR_INFO_1000 {
+ rped1000_integrity: DWORD,
+}}
+pub type PREPL_EDIR_INFO_1000 = *mut REPL_EDIR_INFO_1000;
+pub type LPREPL_EDIR_INFO_1000 = *mut REPL_EDIR_INFO_1000;
+STRUCT!{struct REPL_EDIR_INFO_1001 {
+ rped1001_extent: DWORD,
+}}
+pub type PREPL_EDIR_INFO_1001 = *mut REPL_EDIR_INFO_1001;
+pub type LPREPL_EDIR_INFO_1001 = *mut REPL_EDIR_INFO_1001;
+extern "system" {
+ pub fn NetReplExportDirAdd(
+ servername: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetReplExportDirDel(
+ servername: LPCWSTR,
+ dirname: LPCWSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetReplExportDirEnum(
+ servername: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resumehandle: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetReplExportDirGetInfo(
+ servername: LPCWSTR,
+ dirname: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetReplExportDirSetInfo(
+ servername: LPCWSTR,
+ dirname: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetReplExportDirLock(
+ servername: LPCWSTR,
+ dirname: LPCWSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetReplExportDirUnlock(
+ servername: LPCWSTR,
+ dirname: LPCWSTR,
+ unlockforce: DWORD,
+ ) -> NET_API_STATUS;
+}
+pub const REPL_UNLOCK_NOFORCE: DWORD = 0;
+pub const REPL_UNLOCK_FORCE: DWORD = 1;
+STRUCT!{struct REPL_IDIR_INFO_0 {
+ rpid0_dirname: LPWSTR,
+}}
+pub type PREPL_IDIR_INFO_0 = *mut REPL_IDIR_INFO_0;
+pub type LPREPL_IDIR_INFO_0 = *mut REPL_IDIR_INFO_0;
+STRUCT!{struct REPL_IDIR_INFO_1 {
+ rpid1_dirname: LPWSTR,
+ rpid1_state: DWORD,
+ rpid1_mastername: LPWSTR,
+ rpid1_last_update_time: DWORD,
+ rpid1_lockcount: DWORD,
+ rpid1_locktime: DWORD,
+}}
+pub type PREPL_IDIR_INFO_1 = *mut REPL_IDIR_INFO_1;
+pub type LPREPL_IDIR_INFO_1 = *mut REPL_IDIR_INFO_1;
+extern "system" {
+ pub fn NetReplImportDirAdd(
+ servername: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetReplImportDirDel(
+ servername: LPCWSTR,
+ dirname: LPCWSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetReplImportDirEnum(
+ servername: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resumehandle: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetReplImportDirGetInfo(
+ servername: LPCWSTR,
+ dirname: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetReplImportDirLock(
+ servername: LPCWSTR,
+ dirname: LPCWSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetReplImportDirUnlock(
+ servername: LPCWSTR,
+ dirname: LPCWSTR,
+ unlockforce: DWORD,
+ ) -> NET_API_STATUS;
+}
+pub const REPL_STATE_OK: DWORD = 0;
+pub const REPL_STATE_NO_MASTER: DWORD = 1;
+pub const REPL_STATE_NO_SYNC: DWORD = 2;
+pub const REPL_STATE_NEVER_REPLICATED: DWORD = 3;
diff --git a/vendor/winapi/src/um/lmserver.rs b/vendor/winapi/src/um/lmserver.rs
new file mode 100644
index 000000000..621c4be9a
--- /dev/null
+++ b/vendor/winapi/src/um/lmserver.rs
@@ -0,0 +1,1255 @@
+// 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.
+//! This file contains information about NetServer APIs
+use shared::guiddef::GUID;
+use shared::lmcons::{LMCSTR, LMSTR, NET_API_STATUS, PARMNUM_BASE_INFOLEVEL, PATHLEN};
+use shared::minwindef::{BOOL, BYTE, DWORD, LPBYTE, LPDWORD, ULONG};
+use um::winnt::{BOOLEAN, LONG};
+use um::winsvc::SERVICE_STATUS_HANDLE;
+extern "system" {
+ pub fn NetServerEnum(
+ servername: LMCSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ servertype: DWORD,
+ domain: LMCSTR,
+ resumehandle: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetServerEnumEx(
+ servername: LMCSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ servertype: DWORD,
+ domain: LMCSTR,
+ FirstNameToReturn: LMCSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetServerGetInfo(
+ servername: LMSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetServerSetInfo(
+ servername: LMSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ ParmError: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetServerDiskEnum(
+ servername: LMSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resumehandle: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetServerComputerNameAdd(
+ ServerName: LMSTR,
+ EmulatedDomainName: LMSTR,
+ EmulatedServerName: LMSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetServerComputerNameDel(
+ ServerName: LMSTR,
+ EmulatedServerName: LMSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetServerTransportAdd(
+ servername: LMSTR,
+ level: DWORD,
+ bufptr: LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetServerTransportAddEx(
+ servername: LMSTR,
+ level: DWORD,
+ bufptr: LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetServerTransportDel(
+ servername: LMSTR,
+ level: DWORD,
+ bufptr: LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetServerTransportEnum(
+ servername: LMSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resumehandle: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn SetServiceBits(
+ hServiceStatus: SERVICE_STATUS_HANDLE,
+ dwServiceBits: DWORD,
+ bSetBitsOn: BOOL,
+ bUpdateImmediately: BOOL,
+ ) -> BOOL;
+}
+STRUCT!{struct SERVER_INFO_100 {
+ sv100_platform_id: DWORD,
+ sv100_name: LMSTR,
+}}
+pub type PSERVER_INFO_100 = *mut SERVER_INFO_100;
+pub type LPSERVER_INFO_100 = *mut SERVER_INFO_100;
+STRUCT!{struct SERVER_INFO_101 {
+ sv101_platform_id: DWORD,
+ sv101_name: LMSTR,
+ sv101_version_major: DWORD,
+ sv101_version_minor: DWORD,
+ sv101_type: DWORD,
+ sv101_comment: LMSTR,
+}}
+pub type PSERVER_INFO_101 = *mut SERVER_INFO_101;
+pub type LPSERVER_INFO_101 = *mut SERVER_INFO_101;
+STRUCT!{struct SERVER_INFO_102 {
+ sv102_platform_id: DWORD,
+ sv102_name: LMSTR,
+ sv102_version_major: DWORD,
+ sv102_version_minor: DWORD,
+ sv102_type: DWORD,
+ sv102_comment: LMSTR,
+ sv102_users: DWORD,
+ sv102_disc: LONG,
+ sv102_hidden: BOOL,
+ sv102_announce: DWORD,
+ sv102_anndelta: DWORD,
+ sv102_licenses: DWORD,
+ sv102_userpath: LMSTR,
+}}
+pub type PSERVER_INFO_102 = *mut SERVER_INFO_102;
+pub type LPSERVER_INFO_102 = *mut SERVER_INFO_102;
+STRUCT!{struct SERVER_INFO_103 {
+ sv103_platform_id: DWORD,
+ sv103_name: LMSTR,
+ sv103_version_major: DWORD,
+ sv103_version_minor: DWORD,
+ sv103_type: DWORD,
+ sv103_comment: LMSTR,
+ sv103_users: DWORD,
+ sv103_disc: LONG,
+ sv103_hidden: BOOL,
+ sv103_announce: DWORD,
+ sv103_anndelta: DWORD,
+ sv103_licenses: DWORD,
+ sv103_userpath: LMSTR,
+ sv103_capabilities: DWORD,
+}}
+pub type PSERVER_INFO_103 = *mut SERVER_INFO_103;
+pub type LPSERVER_INFO_103 = *mut SERVER_INFO_103;
+STRUCT!{struct SERVER_INFO_402 {
+ sv402_ulist_mtime: DWORD,
+ sv402_glist_mtime: DWORD,
+ sv402_alist_mtime: DWORD,
+ sv402_alerts: LMSTR,
+ sv402_security: DWORD,
+ sv402_numadmin: DWORD,
+ sv402_lanmask: DWORD,
+ sv402_guestacct: LMSTR,
+ sv402_chdevs: DWORD,
+ sv402_chdevq: DWORD,
+ sv402_chdevjobs: DWORD,
+ sv402_connections: DWORD,
+ sv402_shares: DWORD,
+ sv402_openfiles: DWORD,
+ sv402_sessopens: DWORD,
+ sv402_sessvcs: DWORD,
+ sv402_sessreqs: DWORD,
+ sv402_opensearch: DWORD,
+ sv402_activelocks: DWORD,
+ sv402_numreqbuf: DWORD,
+ sv402_sizreqbuf: DWORD,
+ sv402_numbigbuf: DWORD,
+ sv402_numfiletasks: DWORD,
+ sv402_alertsched: DWORD,
+ sv402_erroralert: DWORD,
+ sv402_logonalert: DWORD,
+ sv402_accessalert: DWORD,
+ sv402_diskalert: DWORD,
+ sv402_netioalert: DWORD,
+ sv402_maxauditsz: DWORD,
+ sv402_srvheuristics: LMSTR,
+}}
+pub type PSERVER_INFO_402 = *mut SERVER_INFO_402;
+pub type LPSERVER_INFO_402 = *mut SERVER_INFO_402;
+STRUCT!{struct SERVER_INFO_403 {
+ sv403_ulist_mtime: DWORD,
+ sv403_glist_mtime: DWORD,
+ sv403_alist_mtime: DWORD,
+ sv403_alerts: LMSTR,
+ sv403_security: DWORD,
+ sv403_numadmin: DWORD,
+ sv403_lanmask: DWORD,
+ sv403_guestacct: LMSTR,
+ sv403_chdevs: DWORD,
+ sv403_chdevq: DWORD,
+ sv403_chdevjobs: DWORD,
+ sv403_connections: DWORD,
+ sv403_shares: DWORD,
+ sv403_openfiles: DWORD,
+ sv403_sessopens: DWORD,
+ sv403_sessvcs: DWORD,
+ sv403_sessreqs: DWORD,
+ sv403_opensearch: DWORD,
+ sv403_activelocks: DWORD,
+ sv403_numreqbuf: DWORD,
+ sv403_sizreqbuf: DWORD,
+ sv403_numbigbuf: DWORD,
+ sv403_numfiletasks: DWORD,
+ sv403_alertsched: DWORD,
+ sv403_erroralert: DWORD,
+ sv403_logonalert: DWORD,
+ sv403_accessalert: DWORD,
+ sv403_diskalert: DWORD,
+ sv403_netioalert: DWORD,
+ sv403_maxauditsz: DWORD,
+ sv403_srvheuristics: LMSTR,
+ sv403_auditedevents: DWORD,
+ sv403_autoprofile: DWORD,
+ sv403_autopath: LMSTR,
+}}
+pub type PSERVER_INFO_403 = *mut SERVER_INFO_403;
+pub type LPSERVER_INFO_403 = *mut SERVER_INFO_403;
+STRUCT!{struct SERVER_INFO_502 {
+ sv502_sessopens: DWORD,
+ sv502_sessvcs: DWORD,
+ sv502_opensearch: DWORD,
+ sv502_sizreqbuf: DWORD,
+ sv502_initworkitems: DWORD,
+ sv502_maxworkitems: DWORD,
+ sv502_rawworkitems: DWORD,
+ sv502_irpstacksize: DWORD,
+ sv502_maxrawbuflen: DWORD,
+ sv502_sessusers: DWORD,
+ sv502_sessconns: DWORD,
+ sv502_maxpagedmemoryusage: DWORD,
+ sv502_maxnonpagedmemoryusage: DWORD,
+ sv502_enablesoftcompat: BOOL,
+ sv502_enableforcedlogoff: BOOL,
+ sv502_timesource: BOOL,
+ sv502_acceptdownlevelapis: BOOL,
+ sv502_lmannounce: BOOL,
+}}
+pub type PSERVER_INFO_502 = *mut SERVER_INFO_502;
+pub type LPSERVER_INFO_502 = *mut SERVER_INFO_502;
+STRUCT!{struct SERVER_INFO_503 {
+ sv503_sessopens : DWORD,
+ sv503_sessvcs: DWORD,
+ sv503_opensearch: DWORD,
+ sv503_sizreqbuf: DWORD,
+ sv503_initworkitems: DWORD,
+ sv503_maxworkitems: DWORD,
+ sv503_rawworkitems: DWORD,
+ sv503_irpstacksize: DWORD,
+ sv503_maxrawbuflen: DWORD,
+ sv503_sessusers: DWORD,
+ sv503_sessconns: DWORD,
+ sv503_maxpagedmemoryusage: DWORD,
+ sv503_maxnonpagedmemoryusage: DWORD,
+ sv503_enablesoftcompat: BOOL,
+ sv503_enableforcedlogoff: BOOL,
+ sv503_timesource: BOOL,
+ sv503_acceptdownlevelapis: BOOL,
+ sv503_lmannounce: BOOL,
+ sv503_domain: LMSTR,
+ sv503_maxcopyreadlen: DWORD,
+ sv503_maxcopywritelen: DWORD,
+ sv503_minkeepsearch: DWORD,
+ sv503_maxkeepsearch: DWORD,
+ sv503_minkeepcomplsearch: DWORD,
+ sv503_maxkeepcomplsearch: DWORD,
+ sv503_threadcountadd: DWORD,
+ sv503_numblockthreads: DWORD,
+ sv503_scavtimeout: DWORD,
+ sv503_minrcvqueue: DWORD,
+ sv503_minfreeworkitems: DWORD,
+ sv503_xactmemsize: DWORD,
+ sv503_threadpriority: DWORD,
+ sv503_maxmpxct: DWORD,
+ sv503_oplockbreakwait: DWORD,
+ sv503_oplockbreakresponsewait: DWORD,
+ sv503_enableoplocks: BOOL,
+ sv503_enableoplockforceclose: BOOL,
+ sv503_enablefcbopens: BOOL,
+ sv503_enableraw: BOOL,
+ sv503_enablesharednetdrives: BOOL,
+ sv503_minfreeconnections: DWORD,
+ sv503_maxfreeconnections: DWORD,
+}}
+pub type PSERVER_INFO_503 = *mut SERVER_INFO_503;
+pub type LPSERVER_INFO_503 = *mut SERVER_INFO_503;
+STRUCT!{struct SERVER_INFO_599 {
+ sv599_sessopens: DWORD,
+ sv599_sessvcs: DWORD,
+ sv599_opensearch: DWORD,
+ sv599_sizreqbuf: DWORD,
+ sv599_initworkitems: DWORD,
+ sv599_maxworkitems: DWORD,
+ sv599_rawworkitems: DWORD,
+ sv599_irpstacksize: DWORD,
+ sv599_maxrawbuflen: DWORD,
+ sv599_sessusers: DWORD,
+ sv599_sessconns: DWORD,
+ sv599_maxpagedmemoryusage: DWORD,
+ sv599_maxnonpagedmemoryusage: DWORD,
+ sv599_enablesoftcompat: BOOL,
+ sv599_enableforcedlogoff: BOOL,
+ sv599_timesource: BOOL,
+ sv599_acceptdownlevelapis: BOOL,
+ sv599_lmannounce: BOOL,
+ sv599_domain: LMSTR,
+ sv599_maxcopyreadlen: DWORD,
+ sv599_maxcopywritelen: DWORD,
+ sv599_minkeepsearch: DWORD,
+ sv599_maxkeepsearch: DWORD,
+ sv599_minkeepcomplsearch: DWORD,
+ sv599_maxkeepcomplsearch: DWORD,
+ sv599_threadcountadd: DWORD,
+ sv599_numblockthreads: DWORD,
+ sv599_scavtimeout: DWORD,
+ sv599_minrcvqueue: DWORD,
+ sv599_minfreeworkitems: DWORD,
+ sv599_xactmemsize: DWORD,
+ sv599_threadpriority: DWORD,
+ sv599_maxmpxct: DWORD,
+ sv599_oplockbreakwait: DWORD,
+ sv599_oplockbreakresponsewait: DWORD,
+ sv599_enableoplocks: BOOL,
+ sv599_enableoplockforceclose: BOOL,
+ sv599_enablefcbopens: BOOL,
+ sv599_enableraw: BOOL,
+ sv599_enablesharednetdrives: BOOL,
+ sv599_minfreeconnections: DWORD,
+ sv599_maxfreeconnections: DWORD,
+ sv599_initsesstable: DWORD,
+ sv599_initconntable: DWORD,
+ sv599_initfiletable: DWORD,
+ sv599_initsearchtable: DWORD,
+ sv599_alertschedule: DWORD,
+ sv599_errorthreshold: DWORD,
+ sv599_networkerrorthreshold: DWORD,
+ sv599_diskspacethreshold: DWORD,
+ sv599_reserved: DWORD,
+ sv599_maxlinkdelay: DWORD,
+ sv599_minlinkthroughput: DWORD,
+ sv599_linkinfovalidtime: DWORD,
+ sv599_scavqosinfoupdatetime: DWORD,
+ sv599_maxworkitemidletime: DWORD,
+}}
+pub type PSERVER_INFO_599 = *mut SERVER_INFO_599;
+pub type LPSERVER_INFO_599 = *mut SERVER_INFO_599;
+STRUCT!{struct SERVER_INFO_598 {
+ sv598_maxrawworkitems: DWORD,
+ sv598_maxthreadsperqueue: DWORD,
+ sv598_producttype: DWORD,
+ sv598_serversize: DWORD,
+ sv598_connectionlessautodisc: DWORD,
+ sv598_sharingviolationretries: DWORD,
+ sv598_sharingviolationdelay: DWORD,
+ sv598_maxglobalopensearch: DWORD,
+ sv598_removeduplicatesearches: DWORD,
+ sv598_lockviolationoffset: DWORD,
+ sv598_lockviolationdelay: DWORD,
+ sv598_mdlreadswitchover: DWORD,
+ sv598_cachedopenlimit: DWORD,
+ sv598_otherqueueaffinity: DWORD,
+ sv598_restrictnullsessaccess: BOOL,
+ sv598_enablewfw311directipx: BOOL,
+ sv598_queuesamplesecs: DWORD,
+ sv598_balancecount: DWORD,
+ sv598_preferredaffinity: DWORD,
+ sv598_maxfreerfcbs: DWORD,
+ sv598_maxfreemfcbs: DWORD,
+ sv598_maxfreelfcbs: DWORD,
+ sv598_maxfreepagedpoolchunks: DWORD,
+ sv598_minpagedpoolchunksize: DWORD,
+ sv598_maxpagedpoolchunksize: DWORD,
+ sv598_sendsfrompreferredprocessor: BOOL,
+ sv598_cacheddirectorylimit: DWORD,
+ sv598_maxcopylength: DWORD,
+ sv598_enablecompression: BOOL,
+ sv598_autosharewks: BOOL,
+ sv598_autoshareserver: BOOL,
+ sv598_enablesecuritysignature: BOOL,
+ sv598_requiresecuritysignature: BOOL,
+ sv598_minclientbuffersize: DWORD,
+ sv598_serverguid: GUID,
+ sv598_ConnectionNoSessionsTimeout: DWORD,
+ sv598_IdleThreadTimeOut: DWORD,
+ sv598_enableW9xsecuritysignature: BOOL,
+ sv598_enforcekerberosreauthentication: BOOL,
+ sv598_disabledos: BOOL,
+ sv598_lowdiskspaceminimum: DWORD,
+ sv598_disablestrictnamechecking: BOOL,
+ sv598_enableauthenticateusersharing: BOOL,
+}}
+pub type PSERVER_INFO_598 = *mut SERVER_INFO_598;
+pub type LPSERVER_INFO_598 = *mut SERVER_INFO_598;
+STRUCT!{struct SERVER_INFO_1005 {
+ sv1005_comment: LMSTR,
+}}
+pub type PSERVER_INFO_1005 = *mut SERVER_INFO_1005;
+pub type LPSERVER_INFO_1005 = *mut SERVER_INFO_1005;
+STRUCT!{struct SERVER_INFO_1107 {
+ sv1107_users: DWORD,
+}}
+pub type PSERVER_INFO_1107 = *mut SERVER_INFO_1107;
+pub type LPSERVER_INFO_1107 = *mut SERVER_INFO_1107;
+STRUCT!{struct SERVER_INFO_1010 {
+ sv1010_disc: LONG,
+}}
+pub type PSERVER_INFO_1010 = *mut SERVER_INFO_1010;
+pub type LPSERVER_INFO_1010 = *mut SERVER_INFO_1010;
+STRUCT!{struct SERVER_INFO_1016 {
+ sv1016_hidden: BOOL,
+}}
+pub type PSERVER_INFO_1016 = *mut SERVER_INFO_1016;
+pub type LPSERVER_INFO_1016 = *mut SERVER_INFO_1016;
+STRUCT!{struct SERVER_INFO_1017 {
+ sv1017_announce: DWORD,
+}}
+pub type PSERVER_INFO_1017 = *mut SERVER_INFO_1017;
+pub type LPSERVER_INFO_1017 = *mut SERVER_INFO_1017;
+STRUCT!{struct SERVER_INFO_1018 {
+ sv1018_anndelta: DWORD,
+}}
+pub type PSERVER_INFO_1018 = *mut SERVER_INFO_1018;
+pub type LPSERVER_INFO_1018 = *mut SERVER_INFO_1018;
+STRUCT!{struct SERVER_INFO_1501 {
+ sv1501_sessopens: DWORD,
+}}
+pub type PSERVER_INFO_1501 = *mut SERVER_INFO_1501;
+pub type LPSERVER_INFO_1501 = *mut SERVER_INFO_1501;
+STRUCT!{struct SERVER_INFO_1502 {
+ sv1502_sessvcs: DWORD,
+}}
+pub type PSERVER_INFO_1502 = *mut SERVER_INFO_1502;
+pub type LPSERVER_INFO_1502 = *mut SERVER_INFO_1502;
+STRUCT!{struct SERVER_INFO_1503 {
+ sv1503_opensearch: DWORD,
+}}
+pub type PSERVER_INFO_1503 = *mut SERVER_INFO_1503;
+pub type LPSERVER_INFO_1503 = *mut SERVER_INFO_1503;
+STRUCT!{struct SERVER_INFO_1506 {
+ sv1506_maxworkitems: DWORD,
+}}
+pub type PSERVER_INFO_1506 = *mut SERVER_INFO_1506;
+pub type LPSERVER_INFO_1506 = *mut SERVER_INFO_1506;
+STRUCT!{struct SERVER_INFO_1509 {
+ sv1509_maxrawbuflen: DWORD,
+}}
+pub type PSERVER_INFO_1509 = *mut SERVER_INFO_1509;
+pub type LPSERVER_INFO_1509 = *mut SERVER_INFO_1509;
+STRUCT!{struct SERVER_INFO_1510 {
+ sv1510_sessusers: DWORD,
+}}
+pub type PSERVER_INFO_1510 = *mut SERVER_INFO_1510;
+pub type LPSERVER_INFO_1510 = *mut SERVER_INFO_1510;
+STRUCT!{struct SERVER_INFO_1511 {
+ sv1511_sessconns: DWORD,
+}}
+pub type PSERVER_INFO_1511 = *mut SERVER_INFO_1511;
+pub type LPSERVER_INFO_1511 = *mut SERVER_INFO_1511;
+STRUCT!{struct SERVER_INFO_1512 {
+ sv1512_maxnonpagedmemoryusage: DWORD,
+}}
+pub type PSERVER_INFO_1512 = *mut SERVER_INFO_1512;
+pub type LPSERVER_INFO_1512 = *mut SERVER_INFO_1512;
+STRUCT!{struct SERVER_INFO_1513 {
+ sv1513_maxpagedmemoryusage: DWORD,
+}}
+pub type PSERVER_INFO_1513 = *mut SERVER_INFO_1513;
+pub type LPSERVER_INFO_1513 = *mut SERVER_INFO_1513;
+STRUCT!{struct SERVER_INFO_1514 {
+ sv1514_enablesoftcompat: BOOL,
+}}
+pub type PSERVER_INFO_1514 = *mut SERVER_INFO_1514;
+pub type LPSERVER_INFO_1514 = *mut SERVER_INFO_1514;
+STRUCT!{struct SERVER_INFO_1515 {
+ sv1515_enableforcedlogoff: BOOL,
+}}
+pub type PSERVER_INFO_1515 = *mut SERVER_INFO_1515;
+pub type LPSERVER_INFO_1515 = *mut SERVER_INFO_1515;
+STRUCT!{struct SERVER_INFO_1516 {
+ sv1516_timesource: BOOL,
+}}
+pub type PSERVER_INFO_1516 = *mut SERVER_INFO_1516;
+pub type LPSERVER_INFO_1516 = *mut SERVER_INFO_1516;
+STRUCT!{struct SERVER_INFO_1518 {
+ sv1518_lmannounce: BOOL,
+}}
+pub type PSERVER_INFO_1518 = *mut SERVER_INFO_1518;
+pub type LPSERVER_INFO_1518 = *mut SERVER_INFO_1518;
+STRUCT!{struct SERVER_INFO_1520 {
+ sv1520_maxcopyreadlen: DWORD,
+}}
+pub type PSERVER_INFO_1520 = *mut SERVER_INFO_1520;
+pub type LPSERVER_INFO_1520 = *mut SERVER_INFO_1520;
+STRUCT!{struct SERVER_INFO_1521 {
+ sv1521_maxcopywritelen: DWORD,
+}}
+pub type PSERVER_INFO_1521 = *mut SERVER_INFO_1521;
+pub type LPSERVER_INFO_1521 = *mut SERVER_INFO_1521;
+STRUCT!{struct SERVER_INFO_1522 {
+ sv1522_minkeepsearch: DWORD,
+}}
+pub type PSERVER_INFO_1522 = *mut SERVER_INFO_1522;
+pub type LPSERVER_INFO_1522 = *mut SERVER_INFO_1522;
+STRUCT!{struct SERVER_INFO_1523 {
+ sv1523_maxkeepsearch: DWORD,
+}}
+pub type PSERVER_INFO_1523 = *mut SERVER_INFO_1523;
+pub type LPSERVER_INFO_1523 = *mut SERVER_INFO_1523;
+STRUCT!{struct SERVER_INFO_1524 {
+ sv1524_minkeepcomplsearch: DWORD,
+}}
+pub type PSERVER_INFO_1524 = *mut SERVER_INFO_1524;
+pub type LPSERVER_INFO_1524 = *mut SERVER_INFO_1524;
+STRUCT!{struct SERVER_INFO_1525 {
+ sv1525_maxkeepcomplsearch: DWORD,
+}}
+pub type PSERVER_INFO_1525 = *mut SERVER_INFO_1525;
+pub type LPSERVER_INFO_1525 = *mut SERVER_INFO_1525;
+STRUCT!{struct SERVER_INFO_1528 {
+ sv1528_scavtimeout: DWORD,
+}}
+pub type PSERVER_INFO_1528 = *mut SERVER_INFO_1528;
+pub type LPSERVER_INFO_1528 = *mut SERVER_INFO_1528;
+STRUCT!{struct SERVER_INFO_1529 {
+ sv1529_minrcvqueue: DWORD,
+}}
+pub type PSERVER_INFO_1529 = *mut SERVER_INFO_1529;
+pub type LPSERVER_INFO_1529 = *mut SERVER_INFO_1529;
+STRUCT!{struct SERVER_INFO_1530 {
+ sv1530_minfreeworkitems: DWORD,
+}}
+pub type PSERVER_INFO_1530 = *mut SERVER_INFO_1530;
+pub type LPSERVER_INFO_1530 = *mut SERVER_INFO_1530;
+STRUCT!{struct SERVER_INFO_1533 {
+ sv1533_maxmpxct: DWORD,
+}}
+pub type PSERVER_INFO_1533 = *mut SERVER_INFO_1533;
+pub type LPSERVER_INFO_1533 = *mut SERVER_INFO_1533;
+STRUCT!{struct SERVER_INFO_1534 {
+ sv1534_oplockbreakwait: DWORD,
+}}
+pub type PSERVER_INFO_1534 = *mut SERVER_INFO_1534;
+pub type LPSERVER_INFO_1534 = *mut SERVER_INFO_1534;
+STRUCT!{struct SERVER_INFO_1535 {
+ sv1535_oplockbreakresponsewait: DWORD,
+}}
+pub type PSERVER_INFO_1535 = *mut SERVER_INFO_1535;
+pub type LPSERVER_INFO_1535 = *mut SERVER_INFO_1535;
+STRUCT!{struct SERVER_INFO_1536 {
+ sv1536_enableoplocks: BOOL,
+}}
+pub type PSERVER_INFO_1536 = *mut SERVER_INFO_1536;
+pub type LPSERVER_INFO_1536 = *mut SERVER_INFO_1536;
+STRUCT!{struct SERVER_INFO_1537 {
+ sv1537_enableoplockforceclose: BOOL,
+}}
+pub type PSERVER_INFO_1537 = *mut SERVER_INFO_1537;
+pub type LPSERVER_INFO_1537 = *mut SERVER_INFO_1537;
+STRUCT!{struct SERVER_INFO_1538 {
+ sv1538_enablefcbopens: BOOL,
+}}
+pub type PSERVER_INFO_1538 = *mut SERVER_INFO_1538;
+pub type LPSERVER_INFO_1538 = *mut SERVER_INFO_1538;
+STRUCT!{struct SERVER_INFO_1539 {
+ sv1539_enableraw: BOOL,
+}}
+pub type PSERVER_INFO_1539 = *mut SERVER_INFO_1539;
+pub type LPSERVER_INFO_1539 = *mut SERVER_INFO_1539;
+STRUCT!{struct SERVER_INFO_1540 {
+ sv1540_enablesharednetdrives: BOOL,
+}}
+pub type PSERVER_INFO_1540 = *mut SERVER_INFO_1540;
+pub type LPSERVER_INFO_1540 = *mut SERVER_INFO_1540;
+STRUCT!{struct SERVER_INFO_1541 {
+ sv1541_minfreeconnections: BOOL,
+}}
+pub type PSERVER_INFO_1541 = *mut SERVER_INFO_1541;
+pub type LPSERVER_INFO_1541 = *mut SERVER_INFO_1541;
+STRUCT!{struct SERVER_INFO_1542 {
+ sv1542_maxfreeconnections: BOOL,
+}}
+pub type PSERVER_INFO_1542 = *mut SERVER_INFO_1542;
+pub type LPSERVER_INFO_1542 = *mut SERVER_INFO_1542;
+STRUCT!{struct SERVER_INFO_1543 {
+ sv1543_initsesstable: DWORD,
+}}
+pub type PSERVER_INFO_1543 = *mut SERVER_INFO_1543;
+pub type LPSERVER_INFO_1543 = *mut SERVER_INFO_1543;
+STRUCT!{struct SERVER_INFO_1544 {
+ sv1544_initconntable: DWORD,
+}}
+pub type PSERVER_INFO_1544 = *mut SERVER_INFO_1544;
+pub type LPSERVER_INFO_1544 = *mut SERVER_INFO_1544;
+STRUCT!{struct SERVER_INFO_1545 {
+ sv1545_initfiletable: DWORD,
+}}
+pub type PSERVER_INFO_1545 = *mut SERVER_INFO_1545;
+pub type LPSERVER_INFO_1545 = *mut SERVER_INFO_1545;
+STRUCT!{struct SERVER_INFO_1546 {
+ sv1546_initsearchtable: DWORD,
+}}
+pub type PSERVER_INFO_1546 = *mut SERVER_INFO_1546;
+pub type LPSERVER_INFO_1546 = *mut SERVER_INFO_1546;
+STRUCT!{struct SERVER_INFO_1547 {
+ sv1547_alertschedule: DWORD,
+}}
+pub type PSERVER_INFO_1547 = *mut SERVER_INFO_1547;
+pub type LPSERVER_INFO_1547 = *mut SERVER_INFO_1547;
+STRUCT!{struct SERVER_INFO_1548 {
+ sv1548_errorthreshold: DWORD,
+}}
+pub type PSERVER_INFO_1548 = *mut SERVER_INFO_1548;
+pub type LPSERVER_INFO_1548 = *mut SERVER_INFO_1548;
+STRUCT!{struct SERVER_INFO_1549 {
+ sv1549_networkerrorthreshold: DWORD,
+}}
+pub type PSERVER_INFO_1549 = *mut SERVER_INFO_1549;
+pub type LPSERVER_INFO_1549 = *mut SERVER_INFO_1549;
+STRUCT!{struct SERVER_INFO_1550 {
+ sv1550_diskspacethreshold: DWORD,
+}}
+pub type PSERVER_INFO_1550 = *mut SERVER_INFO_1550;
+pub type LPSERVER_INFO_1550 = *mut SERVER_INFO_1550;
+STRUCT!{struct SERVER_INFO_1552 {
+ sv1552_maxlinkdelay: DWORD,
+}}
+pub type PSERVER_INFO_1552 = *mut SERVER_INFO_1552;
+pub type LPSERVER_INFO_1552 = *mut SERVER_INFO_1552;
+STRUCT!{struct SERVER_INFO_1553 {
+ sv1553_minlinkthroughput: DWORD,
+}}
+pub type PSERVER_INFO_1553 = *mut SERVER_INFO_1553;
+pub type LPSERVER_INFO_1553 = *mut SERVER_INFO_1553;
+STRUCT!{struct SERVER_INFO_1554 {
+ sv1554_linkinfovalidtime: DWORD,
+}}
+pub type PSERVER_INFO_1554 = *mut SERVER_INFO_1554;
+pub type LPSERVER_INFO_1554 = *mut SERVER_INFO_1554;
+STRUCT!{struct SERVER_INFO_1555 {
+ sv1555_scavqosinfoupdatetime: DWORD,
+}}
+pub type PSERVER_INFO_1555 = *mut SERVER_INFO_1555;
+pub type LPSERVER_INFO_1555 = *mut SERVER_INFO_1555;
+STRUCT!{struct SERVER_INFO_1556 {
+ sv1556_maxworkitemidletime: DWORD,
+}}
+pub type PSERVER_INFO_1556 = *mut SERVER_INFO_1556;
+pub type LPSERVER_INFO_1556 = *mut SERVER_INFO_1556;
+STRUCT!{struct SERVER_INFO_1557 {
+ sv1557_maxrawworkitems: DWORD,
+}}
+pub type PSERVER_INFO_1557 = *mut SERVER_INFO_1557;
+pub type LPSERVER_INFO_1557 = *mut SERVER_INFO_1557;
+STRUCT!{struct SERVER_INFO_1560 {
+ sv1560_producttype: DWORD,
+}}
+pub type PSERVER_INFO_1560 = *mut SERVER_INFO_1560;
+pub type LPSERVER_INFO_1560 = *mut SERVER_INFO_1560;
+STRUCT!{struct SERVER_INFO_1561 {
+ sv1561_serversize: DWORD,
+}}
+pub type PSERVER_INFO_1561 = *mut SERVER_INFO_1561;
+pub type LPSERVER_INFO_1561 = *mut SERVER_INFO_1561;
+STRUCT!{struct SERVER_INFO_1562 {
+ sv1562_connectionlessautodisc: DWORD,
+}}
+pub type PSERVER_INFO_1562 = *mut SERVER_INFO_1562;
+pub type LPSERVER_INFO_1562 = *mut SERVER_INFO_1562;
+STRUCT!{struct SERVER_INFO_1563 {
+ sv1563_sharingviolationretries: DWORD,
+}}
+pub type PSERVER_INFO_1563 = *mut SERVER_INFO_1563;
+pub type LPSERVER_INFO_1563 = *mut SERVER_INFO_1563;
+STRUCT!{struct SERVER_INFO_1564 {
+ sv1564_sharingviolationdelay: DWORD,
+}}
+pub type PSERVER_INFO_1564 = *mut SERVER_INFO_1564;
+pub type LPSERVER_INFO_1564 = *mut SERVER_INFO_1564;
+STRUCT!{struct SERVER_INFO_1565 {
+ sv1565_maxglobalopensearch: DWORD,
+}}
+pub type PSERVER_INFO_1565 = *mut SERVER_INFO_1565;
+pub type LPSERVER_INFO_1565 = *mut SERVER_INFO_1565;
+STRUCT!{struct SERVER_INFO_1566 {
+ sv1566_removeduplicatesearches: BOOL,
+}}
+pub type PSERVER_INFO_1566 = *mut SERVER_INFO_1566;
+pub type LPSERVER_INFO_1566 = *mut SERVER_INFO_1566;
+STRUCT!{struct SERVER_INFO_1567 {
+ sv1567_lockviolationretries: DWORD,
+}}
+pub type PSERVER_INFO_1567 = *mut SERVER_INFO_1567;
+pub type LPSERVER_INFO_1567 = *mut SERVER_INFO_1567;
+STRUCT!{struct SERVER_INFO_1568 {
+ sv1568_lockviolationoffset: DWORD,
+}}
+pub type PSERVER_INFO_1568 = *mut SERVER_INFO_1568;
+pub type LPSERVER_INFO_1568 = *mut SERVER_INFO_1568;
+STRUCT!{struct SERVER_INFO_1569 {
+ sv1569_lockviolationdelay: DWORD,
+}}
+pub type PSERVER_INFO_1569 = *mut SERVER_INFO_1569;
+pub type LPSERVER_INFO_1569 = *mut SERVER_INFO_1569;
+STRUCT!{struct SERVER_INFO_1570 {
+ sv1570_mdlreadswitchover: DWORD,
+}}
+pub type PSERVER_INFO_1570 = *mut SERVER_INFO_1570;
+pub type LPSERVER_INFO_1570 = *mut SERVER_INFO_1570;
+STRUCT!{struct SERVER_INFO_1571 {
+ sv1571_cachedopenlimit: DWORD,
+}}
+pub type PSERVER_INFO_1571 = *mut SERVER_INFO_1571;
+pub type LPSERVER_INFO_1571 = *mut SERVER_INFO_1571;
+STRUCT!{struct SERVER_INFO_1572 {
+ sv1572_criticalthreads: DWORD,
+}}
+pub type PSERVER_INFO_1572 = *mut SERVER_INFO_1572;
+pub type LPSERVER_INFO_1572 = *mut SERVER_INFO_1572;
+STRUCT!{struct SERVER_INFO_1573 {
+ sv1573_restrictnullsessaccess: DWORD,
+}}
+pub type PSERVER_INFO_1573 = *mut SERVER_INFO_1573;
+pub type LPSERVER_INFO_1573 = *mut SERVER_INFO_1573;
+STRUCT!{struct SERVER_INFO_1574 {
+ sv1574_enablewfw311directipx: DWORD,
+}}
+pub type PSERVER_INFO_1574 = *mut SERVER_INFO_1574;
+pub type LPSERVER_INFO_1574 = *mut SERVER_INFO_1574;
+STRUCT!{struct SERVER_INFO_1575 {
+ sv1575_otherqueueaffinity: DWORD,
+}}
+pub type PSERVER_INFO_1575 = *mut SERVER_INFO_1575;
+pub type LPSERVER_INFO_1575 = *mut SERVER_INFO_1575;
+STRUCT!{struct SERVER_INFO_1576 {
+ sv1576_queuesamplesecs: DWORD,
+}}
+pub type PSERVER_INFO_1576 = *mut SERVER_INFO_1576;
+pub type LPSERVER_INFO_1576 = *mut SERVER_INFO_1576;
+STRUCT!{struct SERVER_INFO_1577 {
+ sv1577_balancecount: DWORD,
+}}
+pub type PSERVER_INFO_1577 = *mut SERVER_INFO_1577;
+pub type LPSERVER_INFO_1577 = *mut SERVER_INFO_1577;
+STRUCT!{struct SERVER_INFO_1578 {
+ sv1578_preferredaffinity: DWORD,
+}}
+pub type PSERVER_INFO_1578 = *mut SERVER_INFO_1578;
+pub type LPSERVER_INFO_1578 = *mut SERVER_INFO_1578;
+STRUCT!{struct SERVER_INFO_1579 {
+ sv1579_maxfreerfcbs: DWORD,
+}}
+pub type PSERVER_INFO_1579 = *mut SERVER_INFO_1579;
+pub type LPSERVER_INFO_1579 = *mut SERVER_INFO_1579;
+STRUCT!{struct SERVER_INFO_1580 {
+ sv1580_maxfreemfcbs: DWORD,
+}}
+pub type PSERVER_INFO_1580 = *mut SERVER_INFO_1580;
+pub type LPSERVER_INFO_1580 = *mut SERVER_INFO_1580;
+STRUCT!{struct SERVER_INFO_1581 {
+ sv1581_maxfreemlcbs: DWORD,
+}}
+pub type PSERVER_INFO_1581 = *mut SERVER_INFO_1581;
+pub type LPSERVER_INFO_1581 = *mut SERVER_INFO_1581;
+STRUCT!{struct SERVER_INFO_1582 {
+ sv1582_maxfreepagedpoolchunks: DWORD,
+}}
+pub type PSERVER_INFO_1582 = *mut SERVER_INFO_1582;
+pub type LPSERVER_INFO_1582 = *mut SERVER_INFO_1582;
+STRUCT!{struct SERVER_INFO_1583 {
+ sv1583_minpagedpoolchunksize: DWORD,
+}}
+pub type PSERVER_INFO_1583 = *mut SERVER_INFO_1583;
+pub type LPSERVER_INFO_1583 = *mut SERVER_INFO_1583;
+STRUCT!{struct SERVER_INFO_1584 {
+ sv1584_maxpagedpoolchunksize: DWORD,
+}}
+pub type PSERVER_INFO_1584 = *mut SERVER_INFO_1584;
+pub type LPSERVER_INFO_1584 = *mut SERVER_INFO_1584;
+STRUCT!{struct SERVER_INFO_1585 {
+ sv1585_sendsfrompreferredprocessor: BOOL,
+}}
+pub type PSERVER_INFO_1585 = *mut SERVER_INFO_1585;
+pub type LPSERVER_INFO_1585 = *mut SERVER_INFO_1585;
+STRUCT!{struct SERVER_INFO_1586 {
+ sv1586_maxthreadsperqueue: DWORD,
+}}
+pub type PSERVER_INFO_1586 = *mut SERVER_INFO_1586;
+pub type LPSERVER_INFO_1586 = *mut SERVER_INFO_1586;
+STRUCT!{struct SERVER_INFO_1587 {
+ sv1587_cacheddirectorylimit: DWORD,
+}}
+pub type PSERVER_INFO_1587 = *mut SERVER_INFO_1587;
+pub type LPSERVER_INFO_1587 = *mut SERVER_INFO_1587;
+STRUCT!{struct SERVER_INFO_1588 {
+ sv1588_maxcopylength: DWORD,
+}}
+pub type PSERVER_INFO_1588 = *mut SERVER_INFO_1588;
+pub type LPSERVER_INFO_1588 = *mut SERVER_INFO_1588;
+STRUCT!{struct SERVER_INFO_1590 {
+ sv1590_enablecompression: DWORD,
+}}
+pub type PSERVER_INFO_1590 = *mut SERVER_INFO_1590;
+pub type LPSERVER_INFO_1590 = *mut SERVER_INFO_1590;
+STRUCT!{struct SERVER_INFO_1591 {
+ sv1591_autosharewks: DWORD,
+}}
+pub type PSERVER_INFO_1591 = *mut SERVER_INFO_1591;
+pub type LPSERVER_INFO_1591 = *mut SERVER_INFO_1591;
+STRUCT!{struct SERVER_INFO_1592 {
+ sv1592_autosharewks: DWORD,
+}}
+pub type PSERVER_INFO_1592 = *mut SERVER_INFO_1592;
+pub type LPSERVER_INFO_1592 = *mut SERVER_INFO_1592;
+STRUCT!{struct SERVER_INFO_1593 {
+ sv1593_enablesecuritysignature: DWORD,
+}}
+pub type PSERVER_INFO_1593 = *mut SERVER_INFO_1593;
+pub type LPSERVER_INFO_1593 = *mut SERVER_INFO_1593;
+STRUCT!{struct SERVER_INFO_1594 {
+ sv1594_requiresecuritysignature: DWORD,
+}}
+pub type PSERVER_INFO_1594 = *mut SERVER_INFO_1594;
+pub type LPSERVER_INFO_1594 = *mut SERVER_INFO_1594;
+STRUCT!{struct SERVER_INFO_1595 {
+ sv1595_minclientbuffersize: DWORD,
+}}
+pub type PSERVER_INFO_1595 = *mut SERVER_INFO_1595;
+pub type LPSERVER_INFO_1595 = *mut SERVER_INFO_1595;
+STRUCT!{struct SERVER_INFO_1596 {
+ sv1596_ConnectionNoSessionsTimeout: DWORD,
+}}
+pub type PSERVER_INFO_1596 = *mut SERVER_INFO_1596;
+pub type LPSERVER_INFO_1596 = *mut SERVER_INFO_1596;
+STRUCT!{struct SERVER_INFO_1597 {
+ sv1597_IdleThreadTimeOut: DWORD,
+}}
+pub type PSERVER_INFO_1597 = *mut SERVER_INFO_1597;
+pub type LPSERVER_INFO_1597 = *mut SERVER_INFO_1597;
+STRUCT!{struct SERVER_INFO_1598 {
+ sv1598_enableW9xsecuritysignature: DWORD,
+}}
+pub type PSERVER_INFO_1598 = *mut SERVER_INFO_1598;
+pub type LPSERVER_INFO_1598 = *mut SERVER_INFO_1598;
+STRUCT!{struct SERVER_INFO_1599 {
+ sv1598_enforcekerberosreauthentication: BOOLEAN,
+}}
+pub type PSERVER_INFO_1599 = *mut SERVER_INFO_1599;
+pub type LPSERVER_INFO_1599 = *mut SERVER_INFO_1599;
+STRUCT!{struct SERVER_INFO_1600 {
+ sv1598_disabledos: BOOLEAN,
+}}
+pub type PSERVER_INFO_1600 = *mut SERVER_INFO_1600;
+pub type LPSERVER_INFO_1600 = *mut SERVER_INFO_1600;
+STRUCT!{struct SERVER_INFO_1601 {
+ sv1598_lowdiskspaceminimum: DWORD,
+}}
+pub type PSERVER_INFO_1601 = *mut SERVER_INFO_1601;
+pub type LPSERVER_INFO_1601 = *mut SERVER_INFO_1601;
+STRUCT!{struct SERVER_INFO_1602 {
+ sv_1598_disablestrictnamechecking: BOOL,
+}}
+pub type PSERVER_INFO_1602 = *mut SERVER_INFO_1602;
+pub type LPSERVER_INFO_1602 = *mut SERVER_INFO_1602;
+STRUCT!{struct SERVER_TRANSPORT_INFO_0 {
+ svti0_numberofvcs: DWORD,
+ svti0_transportname: LMSTR,
+ svti0_transportaddress: LPBYTE,
+ svti0_transportaddresslength: DWORD,
+ svti0_networkaddress: LMSTR,
+}}
+pub type PSERVER_TRANSPORT_INFO_0 = *mut SERVER_TRANSPORT_INFO_0;
+pub type LPSERVER_TRANSPORT_INFO_0 = *mut SERVER_TRANSPORT_INFO_0;
+STRUCT!{struct SERVER_TRANSPORT_INFO_1 {
+ svti1_numberofvcs: DWORD,
+ svti1_transportname: LMSTR,
+ svti1_transportaddress: LPBYTE,
+ svti1_transportaddresslength: DWORD,
+ svti1_networkaddress: LMSTR,
+ svti1_domain: LMSTR,
+}}
+pub type PSERVER_TRANSPORT_INFO_1 = *mut SERVER_TRANSPORT_INFO_1;
+pub type LPSERVER_TRANSPORT_INFO_1 = *mut SERVER_TRANSPORT_INFO_1;
+STRUCT!{struct SERVER_TRANSPORT_INFO_2 {
+ svti2_numberofvcs: DWORD,
+ svti2_transportname: LMSTR,
+ svti2_transportaddress: LPBYTE,
+ svti2_transportaddresslength: DWORD,
+ svti2_networkaddress: LMSTR,
+ svti2_domain: LMSTR,
+ svti2_flags: ULONG,
+}}
+pub type PSERVER_TRANSPORT_INFO_2 = *mut SERVER_TRANSPORT_INFO_2;
+pub type LPSERVER_TRANSPORT_INFO_2 = *mut SERVER_TRANSPORT_INFO_2;
+STRUCT!{struct SERVER_TRANSPORT_INFO_3 {
+ svti3_numberofvcs: DWORD,
+ svti3_transportname: LMSTR,
+ svti3_transportaddress: LPBYTE,
+ svti3_transportaddresslength: DWORD,
+ svti3_networkaddress: LMSTR,
+ svti3_domain: LMSTR,
+ svti3_flags: ULONG,
+ svti3_passwordlength: DWORD,
+ svti3_password: [BYTE; 256],
+}}
+pub type PSERVER_TRANSPORT_INFO_3 = *mut SERVER_TRANSPORT_INFO_3;
+pub type LPSERVER_TRANSPORT_INFO_3 = *mut SERVER_TRANSPORT_INFO_3;
+pub const SV_PLATFORM_ID_OS2: DWORD = 400;
+pub const SV_PLATFORM_ID_NT: DWORD = 500;
+pub const MAJOR_VERSION_MASK: DWORD = 0x0F;
+pub const SV_TYPE_WORKSTATION: DWORD = 0x00000001;
+pub const SV_TYPE_SERVER: DWORD = 0x00000002;
+pub const SV_TYPE_SQLSERVER: DWORD = 0x00000004;
+pub const SV_TYPE_DOMAIN_CTRL: DWORD = 0x00000008;
+pub const SV_TYPE_DOMAIN_BAKCTRL: DWORD = 0x00000010;
+pub const SV_TYPE_TIME_SOURCE: DWORD = 0x00000020;
+pub const SV_TYPE_AFP: DWORD = 0x00000040;
+pub const SV_TYPE_NOVELL: DWORD = 0x00000080;
+pub const SV_TYPE_DOMAIN_MEMBER: DWORD = 0x00000100;
+pub const SV_TYPE_PRINTQ_SERVER: DWORD = 0x00000200;
+pub const SV_TYPE_DIALIN_SERVER: DWORD = 0x00000400;
+pub const SV_TYPE_XENIX_SERVER: DWORD = 0x00000800;
+pub const SV_TYPE_SERVER_UNIX: DWORD = SV_TYPE_XENIX_SERVER;
+pub const SV_TYPE_NT: DWORD = 0x00001000;
+pub const SV_TYPE_WFW: DWORD = 0x00002000;
+pub const SV_TYPE_SERVER_MFPN: DWORD = 0x00004000;
+pub const SV_TYPE_SERVER_NT: DWORD = 0x00008000;
+pub const SV_TYPE_POTENTIAL_BROWSER: DWORD = 0x00010000;
+pub const SV_TYPE_BACKUP_BROWSER: DWORD = 0x00020000;
+pub const SV_TYPE_MASTER_BROWSER: DWORD = 0x00040000;
+pub const SV_TYPE_DOMAIN_MASTER: DWORD = 0x00080000;
+pub const SV_TYPE_SERVER_OSF: DWORD = 0x00100000;
+pub const SV_TYPE_SERVER_VMS: DWORD = 0x00200000;
+pub const SV_TYPE_WINDOWS: DWORD = 0x00400000;
+pub const SV_TYPE_DFS: DWORD = 0x00800000;
+pub const SV_TYPE_CLUSTER_NT: DWORD = 0x01000000;
+pub const SV_TYPE_TERMINALSERVER: DWORD = 0x02000000;
+pub const SV_TYPE_CLUSTER_VS_NT: DWORD = 0x04000000;
+pub const SV_TYPE_DCE: DWORD = 0x10000000;
+pub const SV_TYPE_ALTERNATE_XPORT: DWORD = 0x20000000;
+pub const SV_TYPE_LOCAL_LIST_ONLY: DWORD = 0x40000000;
+pub const SV_TYPE_DOMAIN_ENUM: DWORD = 0x80000000;
+pub const SV_TYPE_ALL: DWORD = 0xFFFFFFFF;
+pub const SV_NODISC: DWORD = -1i32 as u32;
+pub const SV_USERSECURITY: DWORD = 1;
+pub const SV_SHARESECURITY: DWORD = 0;
+pub const SV_HIDDEN: DWORD = 1;
+pub const SV_VISIBLE: DWORD = 0;
+pub const SV_PLATFORM_ID_PARMNUM: DWORD = 101;
+pub const SV_NAME_PARMNUM: DWORD = 102;
+pub const SV_VERSION_MAJOR_PARMNUM: DWORD = 103;
+pub const SV_VERSION_MINOR_PARMNUM: DWORD = 104;
+pub const SV_TYPE_PARMNUM: DWORD = 105;
+pub const SV_COMMENT_PARMNUM: DWORD = 5;
+pub const SV_USERS_PARMNUM: DWORD = 107;
+pub const SV_DISC_PARMNUM: DWORD = 10;
+pub const SV_HIDDEN_PARMNUM: DWORD = 16;
+pub const SV_ANNOUNCE_PARMNUM: DWORD = 17;
+pub const SV_ANNDELTA_PARMNUM: DWORD = 18;
+pub const SV_USERPATH_PARMNUM: DWORD = 112;
+pub const SV_ULIST_MTIME_PARMNUM: DWORD = 401;
+pub const SV_GLIST_MTIME_PARMNUM: DWORD = 402;
+pub const SV_ALIST_MTIME_PARMNUM: DWORD = 403;
+pub const SV_ALERTS_PARMNUM: DWORD = 11;
+pub const SV_SECURITY_PARMNUM: DWORD = 405;
+pub const SV_NUMADMIN_PARMNUM: DWORD = 406;
+pub const SV_LANMASK_PARMNUM: DWORD = 407;
+pub const SV_GUESTACC_PARMNUM: DWORD = 408;
+pub const SV_CHDEVQ_PARMNUM: DWORD = 410;
+pub const SV_CHDEVJOBS_PARMNUM: DWORD = 411;
+pub const SV_CONNECTIONS_PARMNUM: DWORD = 412;
+pub const SV_SHARES_PARMNUM: DWORD = 413;
+pub const SV_OPENFILES_PARMNUM: DWORD = 414;
+pub const SV_SESSREQS_PARMNUM: DWORD = 417;
+pub const SV_ACTIVELOCKS_PARMNUM: DWORD = 419;
+pub const SV_NUMREQBUF_PARMNUM: DWORD = 420;
+pub const SV_NUMBIGBUF_PARMNUM: DWORD = 422;
+pub const SV_NUMFILETASKS_PARMNUM: DWORD = 423;
+pub const SV_ALERTSCHED_PARMNUM: DWORD = 37;
+pub const SV_ERRORALERT_PARMNUM: DWORD = 38;
+pub const SV_LOGONALERT_PARMNUM: DWORD = 39;
+pub const SV_ACCESSALERT_PARMNUM: DWORD = 40;
+pub const SV_DISKALERT_PARMNUM: DWORD = 41;
+pub const SV_NETIOALERT_PARMNUM: DWORD = 42;
+pub const SV_MAXAUDITSZ_PARMNUM: DWORD = 43;
+pub const SV_SRVHEURISTICS_PARMNUM: DWORD = 431;
+pub const SV_SESSOPENS_PARMNUM: DWORD = 501;
+pub const SV_SESSVCS_PARMNUM: DWORD = 502;
+pub const SV_OPENSEARCH_PARMNUM: DWORD = 503;
+pub const SV_SIZREQBUF_PARMNUM: DWORD = 504;
+pub const SV_INITWORKITEMS_PARMNUM: DWORD = 505;
+pub const SV_MAXWORKITEMS_PARMNUM: DWORD = 506;
+pub const SV_RAWWORKITEMS_PARMNUM: DWORD = 507;
+pub const SV_IRPSTACKSIZE_PARMNUM: DWORD = 508;
+pub const SV_MAXRAWBUFLEN_PARMNUM: DWORD = 509;
+pub const SV_SESSUSERS_PARMNUM: DWORD = 510;
+pub const SV_SESSCONNS_PARMNUM: DWORD = 511;
+pub const SV_MAXNONPAGEDMEMORYUSAGE_PARMNUM: DWORD = 512;
+pub const SV_MAXPAGEDMEMORYUSAGE_PARMNUM: DWORD = 513;
+pub const SV_ENABLESOFTCOMPAT_PARMNUM: DWORD = 514;
+pub const SV_ENABLEFORCEDLOGOFF_PARMNUM: DWORD = 515;
+pub const SV_TIMESOURCE_PARMNUM: DWORD = 516;
+pub const SV_ACCEPTDOWNLEVELAPIS_PARMNUM: DWORD = 517;
+pub const SV_LMANNOUNCE_PARMNUM: DWORD = 518;
+pub const SV_DOMAIN_PARMNUM: DWORD = 519;
+pub const SV_MAXCOPYREADLEN_PARMNUM: DWORD = 520;
+pub const SV_MAXCOPYWRITELEN_PARMNUM: DWORD = 521;
+pub const SV_MINKEEPSEARCH_PARMNUM: DWORD = 522;
+pub const SV_MAXKEEPSEARCH_PARMNUM: DWORD = 523;
+pub const SV_MINKEEPCOMPLSEARCH_PARMNUM: DWORD = 524;
+pub const SV_MAXKEEPCOMPLSEARCH_PARMNUM: DWORD = 525;
+pub const SV_THREADCOUNTADD_PARMNUM: DWORD = 526;
+pub const SV_NUMBLOCKTHREADS_PARMNUM: DWORD = 527;
+pub const SV_SCAVTIMEOUT_PARMNUM: DWORD = 528;
+pub const SV_MINRCVQUEUE_PARMNUM: DWORD = 529;
+pub const SV_MINFREEWORKITEMS_PARMNUM: DWORD = 530;
+pub const SV_XACTMEMSIZE_PARMNUM: DWORD = 531;
+pub const SV_THREADPRIORITY_PARMNUM: DWORD = 532;
+pub const SV_MAXMPXCT_PARMNUM: DWORD = 533;
+pub const SV_OPLOCKBREAKWAIT_PARMNUM: DWORD = 534;
+pub const SV_OPLOCKBREAKRESPONSEWAIT_PARMNUM: DWORD = 535;
+pub const SV_ENABLEOPLOCKS_PARMNUM: DWORD = 536;
+pub const SV_ENABLEOPLOCKFORCECLOSE_PARMNUM: DWORD = 537;
+pub const SV_ENABLEFCBOPENS_PARMNUM: DWORD = 538;
+pub const SV_ENABLERAW_PARMNUM: DWORD = 539;
+pub const SV_ENABLESHAREDNETDRIVES_PARMNUM: DWORD = 540;
+pub const SV_MINFREECONNECTIONS_PARMNUM: DWORD = 541;
+pub const SV_MAXFREECONNECTIONS_PARMNUM: DWORD = 542;
+pub const SV_INITSESSTABLE_PARMNUM: DWORD = 543;
+pub const SV_INITCONNTABLE_PARMNUM: DWORD = 544;
+pub const SV_INITFILETABLE_PARMNUM: DWORD = 545;
+pub const SV_INITSEARCHTABLE_PARMNUM: DWORD = 546;
+pub const SV_ALERTSCHEDULE_PARMNUM: DWORD = 547;
+pub const SV_ERRORTHRESHOLD_PARMNUM: DWORD = 548;
+pub const SV_NETWORKERRORTHRESHOLD_PARMNUM: DWORD = 549;
+pub const SV_DISKSPACETHRESHOLD_PARMNUM: DWORD = 550;
+pub const SV_MAXLINKDELAY_PARMNUM: DWORD = 552;
+pub const SV_MINLINKTHROUGHPUT_PARMNUM: DWORD = 553;
+pub const SV_LINKINFOVALIDTIME_PARMNUM: DWORD = 554;
+pub const SV_SCAVQOSINFOUPDATETIME_PARMNUM: DWORD = 555;
+pub const SV_MAXWORKITEMIDLETIME_PARMNUM: DWORD = 556;
+pub const SV_MAXRAWWORKITEMS_PARMNUM: DWORD = 557;
+pub const SV_PRODUCTTYPE_PARMNUM: DWORD = 560;
+pub const SV_SERVERSIZE_PARMNUM: DWORD = 561;
+pub const SV_CONNECTIONLESSAUTODISC_PARMNUM: DWORD = 562;
+pub const SV_SHARINGVIOLATIONRETRIES_PARMNUM: DWORD = 563;
+pub const SV_SHARINGVIOLATIONDELAY_PARMNUM: DWORD = 564;
+pub const SV_MAXGLOBALOPENSEARCH_PARMNUM: DWORD = 565;
+pub const SV_REMOVEDUPLICATESEARCHES_PARMNUM: DWORD = 566;
+pub const SV_LOCKVIOLATIONRETRIES_PARMNUM: DWORD = 567;
+pub const SV_LOCKVIOLATIONOFFSET_PARMNUM: DWORD = 568;
+pub const SV_LOCKVIOLATIONDELAY_PARMNUM: DWORD = 569;
+pub const SV_MDLREADSWITCHOVER_PARMNUM: DWORD = 570;
+pub const SV_CACHEDOPENLIMIT_PARMNUM: DWORD = 571;
+pub const SV_CRITICALTHREADS_PARMNUM: DWORD = 572;
+pub const SV_RESTRICTNULLSESSACCESS_PARMNUM: DWORD = 573;
+pub const SV_ENABLEWFW311DIRECTIPX_PARMNUM: DWORD = 574;
+pub const SV_OTHERQUEUEAFFINITY_PARMNUM: DWORD = 575;
+pub const SV_QUEUESAMPLESECS_PARMNUM: DWORD = 576;
+pub const SV_BALANCECOUNT_PARMNUM: DWORD = 577;
+pub const SV_PREFERREDAFFINITY_PARMNUM: DWORD = 578;
+pub const SV_MAXFREERFCBS_PARMNUM: DWORD = 579;
+pub const SV_MAXFREEMFCBS_PARMNUM: DWORD = 580;
+pub const SV_MAXFREELFCBS_PARMNUM: DWORD = 581;
+pub const SV_MAXFREEPAGEDPOOLCHUNKS_PARMNUM: DWORD = 582;
+pub const SV_MINPAGEDPOOLCHUNKSIZE_PARMNUM: DWORD = 583;
+pub const SV_MAXPAGEDPOOLCHUNKSIZE_PARMNUM: DWORD = 584;
+pub const SV_SENDSFROMPREFERREDPROCESSOR_PARMNUM: DWORD = 585;
+pub const SV_MAXTHREADSPERQUEUE_PARMNUM: DWORD = 586;
+pub const SV_CACHEDDIRECTORYLIMIT_PARMNUM: DWORD = 587;
+pub const SV_MAXCOPYLENGTH_PARMNUM: DWORD = 588;
+pub const SV_ENABLECOMPRESSION_PARMNUM: DWORD = 590;
+pub const SV_AUTOSHAREWKS_PARMNUM: DWORD = 591;
+pub const SV_AUTOSHARESERVER_PARMNUM: DWORD = 592;
+pub const SV_ENABLESECURITYSIGNATURE_PARMNUM: DWORD = 593;
+pub const SV_REQUIRESECURITYSIGNATURE_PARMNUM: DWORD = 594;
+pub const SV_MINCLIENTBUFFERSIZE_PARMNUM: DWORD = 595;
+pub const SV_CONNECTIONNOSESSIONSTIMEOUT_PARMNUM: DWORD = 596;
+pub const SV_IDLETHREADTIMEOUT_PARMNUM: DWORD = 597;
+pub const SV_ENABLEW9XSECURITYSIGNATURE_PARMNUM: DWORD = 598;
+pub const SV_ENFORCEKERBEROSREAUTHENTICATION_PARMNUM: DWORD = 599;
+pub const SV_DISABLEDOS_PARMNUM: DWORD = 600;
+pub const SV_LOWDISKSPACEMINIMUM_PARMNUM: DWORD = 601;
+pub const SV_DISABLESTRICTNAMECHECKING_PARMNUM: DWORD = 602;
+pub const SV_ENABLEAUTHENTICATEUSERSHARING_PARMNUM: DWORD = 603;
+pub const SV_COMMENT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_COMMENT_PARMNUM;
+pub const SV_USERS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_USERS_PARMNUM;
+pub const SV_DISC_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_DISC_PARMNUM;
+pub const SV_HIDDEN_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_HIDDEN_PARMNUM;
+pub const SV_ANNOUNCE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_ANNOUNCE_PARMNUM;
+pub const SV_ANNDELTA_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_ANNDELTA_PARMNUM;
+pub const SV_SESSOPENS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_SESSOPENS_PARMNUM;
+pub const SV_SESSVCS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_SESSVCS_PARMNUM;
+pub const SV_OPENSEARCH_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_OPENSEARCH_PARMNUM;
+pub const SV_MAXWORKITEMS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_MAXWORKITEMS_PARMNUM;
+pub const SV_MAXRAWBUFLEN_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_MAXRAWBUFLEN_PARMNUM;
+pub const SV_SESSUSERS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_SESSUSERS_PARMNUM;
+pub const SV_SESSCONNS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_SESSCONNS_PARMNUM;
+pub const SV_MAXNONPAGEDMEMORYUSAGE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MAXNONPAGEDMEMORYUSAGE_PARMNUM;
+pub const SV_MAXPAGEDMEMORYUSAGE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MAXPAGEDMEMORYUSAGE_PARMNUM;
+pub const SV_ENABLESOFTCOMPAT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_ENABLESOFTCOMPAT_PARMNUM;
+pub const SV_ENABLEFORCEDLOGOFF_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_ENABLEFORCEDLOGOFF_PARMNUM;
+pub const SV_TIMESOURCE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_TIMESOURCE_PARMNUM;
+pub const SV_LMANNOUNCE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_LMANNOUNCE_PARMNUM;
+pub const SV_MAXCOPYREADLEN_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_MAXCOPYREADLEN_PARMNUM;
+pub const SV_MAXCOPYWRITELEN_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MAXCOPYWRITELEN_PARMNUM;
+pub const SV_MINKEEPSEARCH_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_MINKEEPSEARCH_PARMNUM;
+pub const SV_MAXKEEPSEARCH_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_MAXKEEPSEARCH_PARMNUM;
+pub const SV_MINKEEPCOMPLSEARCH_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MINKEEPCOMPLSEARCH_PARMNUM;
+pub const SV_MAXKEEPCOMPLSEARCH_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MAXKEEPCOMPLSEARCH_PARMNUM;
+pub const SV_SCAVTIMEOUT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_SCAVTIMEOUT_PARMNUM;
+pub const SV_MINRCVQUEUE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_MINRCVQUEUE_PARMNUM;
+pub const SV_MINFREEWORKITEMS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MINFREEWORKITEMS_PARMNUM;
+pub const SV_MAXMPXCT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_MAXMPXCT_PARMNUM;
+pub const SV_OPLOCKBREAKWAIT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_OPLOCKBREAKWAIT_PARMNUM;
+pub const SV_OPLOCKBREAKRESPONSEWAIT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_OPLOCKBREAKRESPONSEWAIT_PARMNUM;
+pub const SV_ENABLEOPLOCKS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_ENABLEOPLOCKS_PARMNUM;
+pub const SV_ENABLEOPLOCKFORCECLOSE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_ENABLEOPLOCKFORCECLOSE_PARMNUM;
+pub const SV_ENABLEFCBOPENS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_ENABLEFCBOPENS_PARMNUM;
+pub const SV_ENABLERAW_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_ENABLERAW_PARMNUM;
+pub const SV_ENABLESHAREDNETDRIVES_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_ENABLESHAREDNETDRIVES_PARMNUM;
+pub const SV_MINFREECONNECTIONS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MINFREECONNECTIONS_PARMNUM;
+pub const SV_MAXFREECONNECTIONS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MAXFREECONNECTIONS_PARMNUM;
+pub const SV_INITSESSTABLE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_INITSESSTABLE_PARMNUM;
+pub const SV_INITCONNTABLE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_INITCONNTABLE_PARMNUM;
+pub const SV_INITFILETABLE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_INITFILETABLE_PARMNUM;
+pub const SV_INITSEARCHTABLE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_INITSEARCHTABLE_PARMNUM;
+pub const SV_ALERTSCHEDULE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_ALERTSCHEDULE_PARMNUM;
+pub const SV_ERRORTHRESHOLD_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_ERRORTHRESHOLD_PARMNUM;
+pub const SV_NETWORKERRORTHRESHOLD_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_NETWORKERRORTHRESHOLD_PARMNUM;
+pub const SV_DISKSPACETHRESHOLD_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_DISKSPACETHRESHOLD_PARMNUM;
+pub const SV_MAXLINKDELAY_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_MAXLINKDELAY_PARMNUM;
+pub const SV_MINLINKTHROUGHPUT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MINLINKTHROUGHPUT_PARMNUM;
+pub const SV_LINKINFOVALIDTIME_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_LINKINFOVALIDTIME_PARMNUM;
+pub const SV_SCAVQOSINFOUPDATETIME_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_SCAVQOSINFOUPDATETIME_PARMNUM;
+pub const SV_MAXWORKITEMIDLETIME_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MAXWORKITEMIDLETIME_PARMNUM;
+pub const SV_MAXRAWWORKITEMS_INFOLOEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MAXRAWWORKITEMS_PARMNUM;
+pub const SV_PRODUCTTYPE_INFOLOEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_PRODUCTTYPE_PARMNUM;
+pub const SV_SERVERSIZE_INFOLOEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_SERVERSIZE_PARMNUM;
+pub const SV_CONNECTIONLESSAUTODISC_INFOLOEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_CONNECTIONLESSAUTODISC_PARMNUM;
+pub const SV_SHARINGVIOLATIONRETRIES_INFOLOEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_SHARINGVIOLATIONRETRIES_PARMNUM;
+pub const SV_SHARINGVIOLATIONDELAY_INFOLOEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_SHARINGVIOLATIONDELAY_PARMNUM;
+pub const SV_MAXGLOBALOPENSEARCH_INFOLOEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MAXGLOBALOPENSEARCH_PARMNUM;
+pub const SV_REMOVEDUPLICATESEARCHES_INFOLOEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_REMOVEDUPLICATESEARCHES_PARMNUM;
+pub const SV_LOCKVIOLATIONRETRIES_INFOLOEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_LOCKVIOLATIONRETRIES_PARMNUM;
+pub const SV_LOCKVIOLATIONOFFSET_INFOLOEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_LOCKVIOLATIONOFFSET_PARMNUM;
+pub const SV_LOCKVIOLATIONDELAY_INFOLOEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_LOCKVIOLATIONDELAY_PARMNUM;
+pub const SV_MDLREADSWITCHOVER_INFOLOEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MDLREADSWITCHOVER_PARMNUM;
+pub const SV_CACHEDOPENLIMIT_INFOLOEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_CACHEDOPENLIMIT_PARMNUM;
+pub const SV_CRITICALTHREADS_INFOLOEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_CRITICALTHREADS_PARMNUM;
+pub const SV_RESTRICTNULLSESSACCESS_INFOLOEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_RESTRICTNULLSESSACCESS_PARMNUM;
+pub const SV_ENABLEWFW311DIRECTIPX_INFOLOEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_ENABLEWFW311DIRECTIPX_PARMNUM;
+pub const SV_OTHERQUEUEAFFINITY_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_OTHERQUEUEAFFINITY_PARMNUM;
+pub const SV_QUEUESAMPLESECS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_QUEUESAMPLESECS_PARMNUM;
+pub const SV_BALANCECOUNT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_BALANCECOUNT_PARMNUM;
+pub const SV_PREFERREDAFFINITY_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_PREFERREDAFFINITY_PARMNUM;
+pub const SV_MAXFREERFCBS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_MAXFREERFCBS_PARMNUM;
+pub const SV_MAXFREEMFCBS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_MAXFREEMFCBS_PARMNUM;
+pub const SV_MAXFREELFCBS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_MAXFREELFCBS_PARMNUM;
+pub const SV_MAXFREEPAGEDPOOLCHUNKS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MAXFREEPAGEDPOOLCHUNKS_PARMNUM;
+pub const SV_MINPAGEDPOOLCHUNKSIZE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MINPAGEDPOOLCHUNKSIZE_PARMNUM;
+pub const SV_MAXPAGEDPOOLCHUNKSIZE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MAXPAGEDPOOLCHUNKSIZE_PARMNUM;
+pub const SV_SENDSFROMPREFERREDPROCESSOR_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_SENDSFROMPREFERREDPROCESSOR_PARMNUM;
+pub const SV_MAXTHREADSPERQUEUE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MAXTHREADSPERQUEUE_PARMNUM;
+pub const SV_CACHEDDIRECTORYLIMIT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_CACHEDDIRECTORYLIMIT_PARMNUM;
+pub const SV_MAXCOPYLENGTH_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_MAXCOPYLENGTH_PARMNUM;
+pub const SV_ENABLECOMPRESSION_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_ENABLECOMPRESSION_PARMNUM;
+pub const SV_AUTOSHAREWKS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_AUTOSHAREWKS_PARMNUM;
+pub const SV_AUTOSHARESERVER_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_AUTOSHARESERVER_PARMNUM;
+pub const SV_ENABLESECURITYSIGNATURE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_ENABLESECURITYSIGNATURE_PARMNUM;
+pub const SV_REQUIRESECURITYSIGNATURE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_REQUIRESECURITYSIGNATURE_PARMNUM;
+pub const SV_MINCLIENTBUFFERSIZE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_MINCLIENTBUFFERSIZE_PARMNUM;
+pub const SV_CONNECTIONNOSESSIONSTIMEOUT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_CONNECTIONNOSESSIONSTIMEOUT_PARMNUM;
+pub const SV_IDLETHREADTIMEOUT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_IDLETHREADTIMEOUT_PARMNUM;
+pub const SV_ENABLEW9XSECURITYSIGNATURE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_ENABLEW9XSECURITYSIGNATURE_PARMNUM;
+pub const SV_ENFORCEKERBEROSREAUTHENTICATION_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_ENFORCEKERBEROSREAUTHENTICATION_PARMNUM;
+pub const SV_DISABLEDOS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SV_DISABLEDOS_PARMNUM;
+pub const SV_LOWDISKSPACEMINIMUM_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_LOWDISKSPACEMINIMUM_PARMNUM;
+pub const SV_DISABLESTRICTNAMECHECKING_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_DISABLESTRICTNAMECHECKING_PARMNUM;
+pub const SV_ENABLEAUTHENTICATEUSERSHARING_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL
+ + SV_ENABLEAUTHENTICATEUSERSHARING_PARMNUM;
+pub const SVI1_NUM_ELEMENTS: DWORD = 5;
+pub const SVI2_NUM_ELEMENTS: DWORD = 40;
+pub const SVI3_NUM_ELEMENTS: DWORD = 44;
+pub const SV_MAX_CMD_LEN: DWORD = PATHLEN;
+pub const SW_AUTOPROF_LOAD_MASK: DWORD = 0x1;
+pub const SW_AUTOPROF_SAVE_MASK: DWORD = 0x2;
+pub const SV_MAX_SRV_HEUR_LEN: DWORD = 32;
+pub const SV_USERS_PER_LICENSE: DWORD = 5;
+pub const SVTI2_REMAP_PIPE_NAMES: DWORD = 0x02;
+pub const SVTI2_SCOPED_NAME: DWORD = 0x04;
+pub const SVTI2_CLUSTER_NAME: DWORD = 0x08;
+pub const SVTI2_CLUSTER_DNN_NAME: DWORD = 0x10;
+pub const SVTI2_UNICODE_TRANSPORT_ADDRESS: DWORD = 0x20;
+pub const SVTI2_RESERVED1: DWORD = 0x1000;
+pub const SVTI2_RESERVED2: DWORD = 0x2000;
+pub const SVTI2_RESERVED3: DWORD = 0x4000;
+pub const SVTI2_VALID_FLAGS: DWORD = SVTI2_REMAP_PIPE_NAMES | SVTI2_SCOPED_NAME
+ | SVTI2_CLUSTER_NAME | SVTI2_CLUSTER_DNN_NAME | SVTI2_UNICODE_TRANSPORT_ADDRESS;
+pub const SRV_SUPPORT_HASH_GENERATION: DWORD = 0x0001;
+pub const SRV_HASH_GENERATION_ACTIVE: DWORD = 0x0002;
diff --git a/vendor/winapi/src/um/lmshare.rs b/vendor/winapi/src/um/lmshare.rs
new file mode 100644
index 000000000..3024ac3aa
--- /dev/null
+++ b/vendor/winapi/src/um/lmshare.rs
@@ -0,0 +1,379 @@
+// 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.
+//! This module defines the API function prototypes and data structures
+use shared::basetsd::PDWORD_PTR;
+use shared::guiddef::GUID;
+use shared::lmcons::{LMSTR, NET_API_STATUS, PARMNUM_BASE_INFOLEVEL};
+use shared::minwindef::{DWORD, LPBYTE, LPDWORD, ULONG};
+use um::winnt::{BOOLEAN, PSECURITY_DESCRIPTOR};
+extern "system" {
+ pub fn NetShareAdd(
+ servername: LMSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetShareEnum(
+ servername: LMSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resumehandle: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetShareEnumSticky(
+ servername: LMSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resumehandle: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetShareGetInfo(
+ servername: LMSTR,
+ netname: LMSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetShareSetInfo(
+ servername: LMSTR,
+ netname: LMSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetShareDel(
+ servername: LMSTR,
+ netname: LMSTR,
+ reserved: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetShareDelSticky(
+ servername: LMSTR,
+ netname: LMSTR,
+ reserved: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetShareCheck(
+ servername: LMSTR,
+ device: LMSTR,
+ _type: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetShareDelEx(
+ servername: LMSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ ) -> NET_API_STATUS;
+}
+STRUCT!{struct SHARE_INFO_0 {
+ shi0_netname: LMSTR,
+}}
+pub type PSHARE_INFO_0 = *mut SHARE_INFO_0;
+pub type LPSHARE_INFO_0 = *mut SHARE_INFO_0;
+STRUCT!{struct SHARE_INFO_1 {
+ shi1_netname: LMSTR,
+ shi1_type: DWORD,
+ shi1_remark: LMSTR,
+}}
+pub type PSHARE_INFO_1 = *mut SHARE_INFO_1;
+pub type LPSHARE_INFO_1 = *mut SHARE_INFO_1;
+STRUCT!{struct SHARE_INFO_2 {
+ shi2_netname: LMSTR,
+ shi2_type: DWORD,
+ shi2_remark: LMSTR,
+ shi2_permissions: DWORD,
+ shi2_max_uses: DWORD,
+ shi2_current_uses: DWORD,
+ shi2_path: LMSTR,
+ shi2_passwd: LMSTR,
+}}
+pub type PSHARE_INFO_2 = *mut SHARE_INFO_2;
+pub type LPSHARE_INFO_2 = *mut SHARE_INFO_2;
+STRUCT!{struct SHARE_INFO_501 {
+ shi501_netname: LMSTR,
+ shi501_type: DWORD,
+ shi501_remark: LMSTR,
+ shi501_flags: DWORD,
+}}
+pub type PSHARE_INFO_501 = *mut SHARE_INFO_501;
+pub type LPSHARE_INFO_501 = *mut SHARE_INFO_501;
+STRUCT!{struct SHARE_INFO_502 {
+ shi502_netname: LMSTR,
+ shi502_type: DWORD,
+ shi502_remark: LMSTR,
+ shi502_permissions: DWORD,
+ shi502_max_uses: DWORD,
+ shi502_current_uses: DWORD,
+ shi502_path: LMSTR,
+ shi502_passwd: LMSTR,
+ shi502_reserved: DWORD,
+ shi502_security_descriptor: PSECURITY_DESCRIPTOR,
+}}
+pub type PSHARE_INFO_502 = *mut SHARE_INFO_502;
+pub type LPSHARE_INFO_502 = *mut SHARE_INFO_502;
+STRUCT!{struct SHARE_INFO_503 {
+ shi503_netname: LMSTR,
+ shi503_type: DWORD,
+ shi503_remark: LMSTR,
+ shi503_permissions: DWORD,
+ shi503_max_uses: DWORD,
+ shi503_current_uses: DWORD,
+ shi503_path: LMSTR,
+ shi503_passwd: LMSTR,
+ shi503_servername: LMSTR,
+ shi503_reserved: DWORD,
+ shi503_security_descriptor: PSECURITY_DESCRIPTOR,
+}}
+pub type PSHARE_INFO_503 = *mut SHARE_INFO_503;
+pub type LPSHARE_INFO_503 = *mut SHARE_INFO_503;
+STRUCT!{struct SHARE_INFO_1004 {
+ shi1004_remark: LMSTR,
+}}
+pub type PSHARE_INFO_1004 = *mut SHARE_INFO_1004;
+pub type LPSHARE_INFO_1004 = *mut SHARE_INFO_1004;
+STRUCT!{struct SHARE_INFO_1005 {
+ shi1005_flags: DWORD,
+}}
+pub type PSHARE_INFO_1005 = *mut SHARE_INFO_1005;
+pub type LPSHARE_INFO_1005 = *mut SHARE_INFO_1005;
+STRUCT!{struct SHARE_INFO_1006 {
+ shi1006_max_uses: DWORD,
+}}
+pub type PSHARE_INFO_1006 = *mut SHARE_INFO_1006;
+pub type LPSHARE_INFO_1006 = *mut SHARE_INFO_1006;
+STRUCT!{struct SHARE_INFO_1501 {
+ shi1501_reserved: DWORD,
+ shi1501_security_descriptor: PSECURITY_DESCRIPTOR,
+}}
+pub type PSHARE_INFO_1501 = *mut SHARE_INFO_1501;
+pub type LPSHARE_INFO_1501 = *mut SHARE_INFO_1501;
+STRUCT!{struct SHARE_INFO_1503 {
+ shi1503_sharefilter: GUID,
+}}
+pub type PSHARE_INFO_1503 = *mut SHARE_INFO_1503;
+pub type LPSHARE_INFO_1503 = *mut SHARE_INFO_1503;
+extern "system" {
+ pub fn NetServerAliasAdd(
+ servername: LMSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetServerAliasDel(
+ servername: LMSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetServerAliasEnum(
+ servername: LMSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resumehandle: LPDWORD,
+ ) -> NET_API_STATUS;
+}
+STRUCT!{struct SERVER_ALIAS_INFO_0 {
+ srvai0_alias: LMSTR,
+ srvai0_target: LMSTR,
+ srvai0_default: BOOLEAN,
+ srvai0_reserved: ULONG,
+}}
+pub type PSERVER_ALIAS_INFO_0 = *mut SERVER_ALIAS_INFO_0;
+pub type LPSERVER_ALIAS_INFO_0 = *mut SERVER_ALIAS_INFO_0;
+pub const SHARE_NETNAME_PARMNUM: DWORD = 1;
+pub const SHARE_TYPE_PARMNUM: DWORD = 3;
+pub const SHARE_REMARK_PARMNUM: DWORD = 4;
+pub const SHARE_PERMISSIONS_PARMNUM: DWORD = 5;
+pub const SHARE_MAX_USES_PARMNUM: DWORD = 6;
+pub const SHARE_CURRENT_USES_PARMNUM: DWORD = 7;
+pub const SHARE_PATH_PARMNUM: DWORD = 8;
+pub const SHARE_PASSWD_PARMNUM: DWORD = 9;
+pub const SHARE_FILE_SD_PARMNUM: DWORD = 501;
+pub const SHARE_SERVER_PARMNUM: DWORD = 503;
+pub const SHARE_REMARK_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SHARE_REMARK_PARMNUM;
+pub const SHARE_MAX_USES_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SHARE_MAX_USES_PARMNUM;
+pub const SHARE_FILE_SD_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + SHARE_FILE_SD_PARMNUM;
+pub const SHI1_NUM_ELEMENTS: DWORD = 4;
+pub const SHI2_NUM_ELEMENTS: DWORD = 10;
+pub const STYPE_DISKTREE: DWORD = 0;
+pub const STYPE_PRINTQ: DWORD = 1;
+pub const STYPE_DEVICE: DWORD = 2;
+pub const STYPE_IPC: DWORD = 3;
+pub const STYPE_MASK: DWORD = 0x000000FF;
+pub const STYPE_RESERVED1: DWORD = 0x01000000;
+pub const STYPE_RESERVED2: DWORD = 0x02000000;
+pub const STYPE_RESERVED3: DWORD = 0x04000000;
+pub const STYPE_RESERVED4: DWORD = 0x08000000;
+pub const STYPE_RESERVED_ALL: DWORD = 0x3FFFFF00;
+pub const STYPE_TEMPORARY: DWORD = 0x40000000;
+pub const STYPE_SPECIAL: DWORD = 0x80000000;
+pub const SHI_USES_UNLIMITED: DWORD = -1i32 as u32;
+pub const SHI1005_FLAGS_DFS: DWORD = 0x0001;
+pub const SHI1005_FLAGS_DFS_ROOT: DWORD = 0x0002;
+pub const CSC_MASK_EXT: DWORD = 0x2030;
+pub const CSC_MASK: DWORD = 0x0030;
+pub const CSC_CACHE_MANUAL_REINT: DWORD = 0x0000;
+pub const CSC_CACHE_AUTO_REINT: DWORD = 0x0010;
+pub const CSC_CACHE_VDO: DWORD = 0x0020;
+pub const CSC_CACHE_NONE: DWORD = 0x0030;
+pub const SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS: DWORD = 0x00100;
+pub const SHI1005_FLAGS_FORCE_SHARED_DELETE: DWORD = 0x00200;
+pub const SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING: DWORD = 0x00400;
+pub const SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM: DWORD = 0x00800;
+pub const SHI1005_FLAGS_FORCE_LEVELII_OPLOCK: DWORD = 0x01000;
+pub const SHI1005_FLAGS_ENABLE_HASH: DWORD = 0x02000;
+pub const SHI1005_FLAGS_ENABLE_CA: DWORD = 0x04000;
+pub const SHI1005_FLAGS_ENCRYPT_DATA: DWORD = 0x08000;
+pub const SHI1005_FLAGS_RESERVED: DWORD = 0x10000;
+pub const SHI1005_VALID_FLAGS_SET: DWORD = CSC_MASK | SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS
+ | SHI1005_FLAGS_FORCE_SHARED_DELETE | SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING
+ | SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM | SHI1005_FLAGS_FORCE_LEVELII_OPLOCK
+ | SHI1005_FLAGS_ENABLE_HASH | SHI1005_FLAGS_ENABLE_CA | SHI1005_FLAGS_ENCRYPT_DATA
+ | SHI1005_FLAGS_RESERVED;
+extern "system" {
+ pub fn NetSessionEnum(
+ servername: LMSTR,
+ UncClientName: LMSTR,
+ username: LMSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resumehandle: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetSessionDel(
+ servername: LMSTR,
+ UncClientName: LMSTR,
+ username: LMSTR,
+ ) -> NET_API_STATUS;
+ pub fn NetSessionGetInfo(
+ servername: LMSTR,
+ UncClientName: LMSTR,
+ username: LMSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+}
+STRUCT!{struct SESSION_INFO_0 {
+ sesi0_cname: LMSTR,
+}}
+pub type PSESSION_INFO_0 = *mut SESSION_INFO_0;
+pub type LPSESSION_INFO_0 = *mut SESSION_INFO_0;
+STRUCT!{struct SESSION_INFO_1 {
+ sesi1_cname: LMSTR,
+ sesi1_username: LMSTR,
+ sesi1_num_opens: DWORD,
+ sesi1_time: DWORD,
+ sesi1_idle_time: DWORD,
+ sesi1_user_flags: DWORD,
+}}
+pub type PSESSION_INFO_1 = *mut SESSION_INFO_1;
+pub type LPSESSION_INFO_1 = *mut SESSION_INFO_1;
+STRUCT!{struct SESSION_INFO_2 {
+ sesi2_cname: LMSTR,
+ sesi2_username: LMSTR,
+ sesi2_num_opens: DWORD,
+ sesi2_time: DWORD,
+ sesi2_idle_time: DWORD,
+ sesi2_user_flags: DWORD,
+ sesi2_cltype_name: LMSTR,
+}}
+pub type PSESSION_INFO_2 = *mut SESSION_INFO_2;
+pub type LPSESSION_INFO_2 = *mut SESSION_INFO_2;
+STRUCT!{struct SESSION_INFO_10 {
+ sesi10_cname: LMSTR,
+ sesi10_username: LMSTR,
+ sesi10_time: DWORD,
+ sesi10_idle_time: DWORD,
+}}
+pub type PSESSION_INFO_10 = *mut SESSION_INFO_10;
+pub type LPSESSION_INFO_10 = *mut SESSION_INFO_10;
+STRUCT!{struct SESSION_INFO_502 {
+ sesi502_cname: LMSTR,
+ sesi502_username: LMSTR,
+ sesi502_num_opens: DWORD,
+ sesi502_time: DWORD,
+ sesi502_idle_time: DWORD,
+ sesi502_user_flags: DWORD,
+ sesi502_cltype_name: LMSTR,
+ sesi502_transport: LMSTR,
+}}
+pub type PSESSION_INFO_502 = *mut SESSION_INFO_502;
+pub type LPSESSION_INFO_502 = *mut SESSION_INFO_502;
+pub const SESS_GUEST: DWORD = 0x00000001;
+pub const SESS_NOENCRYPTION: DWORD = 0x00000002;
+pub const SESI1_NUM_ELEMENTS: DWORD = 8;
+pub const SESI2_NUM_ELEMENTS: DWORD = 9;
+extern "system" {
+ pub fn NetConnectionEnum(
+ servername: LMSTR,
+ qualifier: LMSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resume_handle: LPDWORD,
+ ) -> NET_API_STATUS;
+}
+STRUCT!{struct CONNECTION_INFO_0 {
+ coni0_id: DWORD,
+}}
+pub type PCONNECTION_INFO_0 = *mut CONNECTION_INFO_0;
+pub type LPCONNECTION_INFO_0 = *mut CONNECTION_INFO_0;
+STRUCT!{struct CONNECTION_INFO_1 {
+ coni1_id: DWORD,
+ coni1_type: DWORD,
+ coni1_num_opens: DWORD,
+ coni1_num_users: DWORD,
+ coni1_time: DWORD,
+ coni1_username: LMSTR,
+ coni1_netname: LMSTR,
+}}
+pub type PCONNECTION_INFO_1 = *mut CONNECTION_INFO_1;
+pub type LPCONNECTION_INFO_1 = *mut CONNECTION_INFO_1;
+extern "system" {
+ pub fn NetFileClose(
+ servername: LMSTR,
+ fileid: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetFileEnum(
+ servername: LMSTR,
+ basepath: LMSTR,
+ username: LMSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resume_handle: PDWORD_PTR,
+ ) -> NET_API_STATUS;
+ pub fn NetFileGetInfo(
+ servername: LMSTR,
+ fileid: DWORD,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+}
+STRUCT!{struct FILE_INFO_2 {
+ fi2_id: DWORD,
+}}
+pub type PFILE_INFO_2 = *mut FILE_INFO_2;
+pub type LPFILE_INFO_2 = *mut FILE_INFO_2;
+STRUCT!{struct FILE_INFO_3 {
+ fi3_id: DWORD,
+ fi3_permissions: DWORD,
+ fi3_num_locks: DWORD,
+ fi3_pathname: LMSTR,
+ fi3_username: LMSTR,
+}}
+pub type PFILE_INFO_3 = *mut FILE_INFO_3;
+pub type LPFILE_INFO_3 = *mut FILE_INFO_3;
+pub const PERM_FILE_READ: DWORD = 0x1;
+pub const PERM_FILE_WRITE: DWORD = 0x2;
+pub const PERM_FILE_CREATE: DWORD = 0x4;
diff --git a/vendor/winapi/src/um/lmstats.rs b/vendor/winapi/src/um/lmstats.rs
new file mode 100644
index 000000000..c0bfc3746
--- /dev/null
+++ b/vendor/winapi/src/um/lmstats.rs
@@ -0,0 +1,85 @@
+// 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::lmcons::NET_API_STATUS;
+use shared::minwindef::{DWORD, LPBYTE};
+use um::winnt::{LARGE_INTEGER, LPCWSTR};
+extern "system" {
+ pub fn NetStatisticsGet(
+ ServerName: LPCWSTR,
+ Service: LPCWSTR,
+ Level: DWORD,
+ Options: DWORD,
+ Buffer: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+}
+STRUCT!{struct STAT_WORKSTATION_0 {
+ StatisticsStartTime: LARGE_INTEGER,
+ BytesReceived: LARGE_INTEGER,
+ SmbsReceived: LARGE_INTEGER,
+ PagingReadBytesRequested: LARGE_INTEGER,
+ NonPagingReadBytesRequested: LARGE_INTEGER,
+ CacheReadBytesRequested: LARGE_INTEGER,
+ NetworkReadBytesRequested: LARGE_INTEGER,
+ BytesTransmitted: LARGE_INTEGER,
+ SmbsTransmitted: LARGE_INTEGER,
+ PagingWriteBytesRequested: LARGE_INTEGER,
+ NonPagingWriteBytesRequested: LARGE_INTEGER,
+ CacheWriteBytesRequested: LARGE_INTEGER,
+ NetworkWriteBytesRequested: LARGE_INTEGER,
+ InitiallyFailedOperations: DWORD,
+ FailedCompletionOperations: DWORD,
+ ReadOperations: DWORD,
+ RandomReadOperations: DWORD,
+ ReadSmbs: DWORD,
+ LargeReadSmbs: DWORD,
+ SmallReadSmbs: DWORD,
+ WriteOperations: DWORD,
+ RandomWriteOperations: DWORD,
+ WriteSmbs: DWORD,
+ LargeWriteSmbs: DWORD,
+ SmallWriteSmbs: DWORD,
+ RawReadsDenied: DWORD,
+ RawWritesDenied: DWORD,
+ NetworkErrors: DWORD,
+ Sessions: DWORD,
+ FailedSessions: DWORD,
+ Reconnects: DWORD,
+ CoreConnects: DWORD,
+ Lanman20Connects: DWORD,
+ Lanman21Connects: DWORD,
+ LanmanNtConnects: DWORD,
+ ServerDisconnects: DWORD,
+ HungSessions: DWORD,
+ UseCount: DWORD,
+ FailedUseCount: DWORD,
+ CurrentCommands: DWORD,
+}}
+pub type PSTAT_WORKSTATION_0 = *mut STAT_WORKSTATION_0;
+pub type LPSTAT_WORKSTATION_0 = *mut STAT_WORKSTATION_0;
+STRUCT!{struct STAT_SERVER_0 {
+ sts0_start: DWORD,
+ sts0_fopens: DWORD,
+ sts0_devopens: DWORD,
+ sts0_jobsqueued: DWORD,
+ sts0_sopens: DWORD,
+ sts0_stimedout: DWORD,
+ sts0_serrorout: DWORD,
+ sts0_pwerrors: DWORD,
+ sts0_permerrors: DWORD,
+ sts0_syserrors: DWORD,
+ sts0_bytessent_low: DWORD,
+ sts0_bytessent_high: DWORD,
+ sts0_bytesrcvd_low: DWORD,
+ sts0_bytesrcvd_high: DWORD,
+ sts0_avresponse: DWORD,
+ sts0_reqbufneed: DWORD,
+ sts0_bigbufneed: DWORD,
+}}
+pub type PSTAT_SERVER_0 = *mut STAT_SERVER_0;
+pub type LPSTAT_SERVER_0 = *mut STAT_SERVER_0;
+pub const STATSOPT_CLR: DWORD = 1;
+pub const STATS_NO_VALUE: DWORD = -1i32 as u32;
+pub const STATS_OVERFLOW: DWORD = -2i32 as u32;
diff --git a/vendor/winapi/src/um/lmsvc.rs b/vendor/winapi/src/um/lmsvc.rs
new file mode 100644
index 000000000..2d9ee5e2e
--- /dev/null
+++ b/vendor/winapi/src/um/lmsvc.rs
@@ -0,0 +1,180 @@
+// 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
+//! This file contains structures, function prototypes, and definitions for the NetService API
+use ctypes::c_long;
+use shared::lmcons::NET_API_STATUS;
+use shared::minwindef::{DWORD, LPBYTE, LPDWORD};
+use um::winnt::{LPCWSTR, LPWSTR};
+STRUCT!{struct SERVICE_INFO_0 {
+ svci0_name: LPWSTR,
+}}
+pub type PSERVICE_INFO_0 = *mut SERVICE_INFO_0;
+pub type LPSERVICE_INFO_0 = *mut SERVICE_INFO_0;
+STRUCT!{struct SERVICE_INFO_1 {
+ svci1_name: LPWSTR,
+ svci1_status: DWORD,
+ svci1_code: DWORD,
+ svci1_pid: DWORD,
+}}
+pub type PSERVICE_INFO_1 = *mut SERVICE_INFO_1;
+pub type LPSERVICE_INFO_1 = *mut SERVICE_INFO_1;
+STRUCT!{struct SERVICE_INFO_2 {
+ svci2_name: LPWSTR,
+ svci2_status: DWORD,
+ svci2_code: DWORD,
+ svci2_pid: DWORD,
+ svci2_text: LPWSTR,
+ svci2_specific_error: DWORD,
+ svci2_display_name: LPWSTR,
+}}
+pub type PSERVICE_INFO_2 = *mut SERVICE_INFO_2;
+pub type LPSERVICE_INFO_2 = *mut SERVICE_INFO_2;
+extern "system" {
+ pub fn NetServiceControl(
+ servername: LPCWSTR,
+ service: LPCWSTR,
+ opcode: DWORD,
+ arg: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetServiceEnum(
+ servername: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resumehandle: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetServiceGetInfo(
+ servername: LPCWSTR,
+ service: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetServiceInstall(
+ servername: LPCWSTR,
+ service: LPCWSTR,
+ argc: DWORD,
+ argv: *mut LPCWSTR,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+}
+pub const SERVICE_INSTALL_STATE: DWORD = 0x03;
+pub const SERVICE_UNINSTALLED: DWORD = 0x00;
+pub const SERVICE_INSTALL_PENDING: DWORD = 0x01;
+pub const SERVICE_UNINSTALL_PENDING: DWORD = 0x02;
+pub const SERVICE_INSTALLED: DWORD = 0x03;
+pub const SERVICE_PAUSE_STATE: DWORD = 0x0C;
+pub const LM20_SERVICE_ACTIVE: DWORD = 0x00;
+pub const LM20_SERVICE_CONTINUE_PENDING: DWORD = 0x04;
+pub const LM20_SERVICE_PAUSE_PENDING: DWORD = 0x08;
+pub const LM20_SERVICE_PAUSED: DWORD = 0x0C;
+pub const SERVICE_NOT_UNINSTALLABLE: DWORD = 0x00;
+pub const SERVICE_UNINSTALLABLE: DWORD = 0x10;
+pub const SERVICE_NOT_PAUSABLE: DWORD = 0x00;
+pub const SERVICE_PAUSABLE: DWORD = 0x20;
+pub const SERVICE_REDIR_PAUSED: DWORD = 0x700;
+pub const SERVICE_REDIR_DISK_PAUSED: DWORD = 0x100;
+pub const SERVICE_REDIR_PRINT_PAUSED: DWORD = 0x200;
+pub const SERVICE_REDIR_COMM_PAUSED: DWORD = 0x400;
+pub const SERVICE_DOS_ENCRYPTION: &'static str = "ENCRYPT";
+pub const SERVICE_CTRL_INTERROGATE: DWORD = 0;
+pub const SERVICE_CTRL_PAUSE: DWORD = 1;
+pub const SERVICE_CTRL_CONTINUE: DWORD = 2;
+pub const SERVICE_CTRL_UNINSTALL: DWORD = 3;
+pub const SERVICE_CTRL_REDIR_DISK: DWORD = 0x1;
+pub const SERVICE_CTRL_REDIR_PRINT: DWORD = 0x2;
+pub const SERVICE_CTRL_REDIR_COMM: DWORD = 0x4;
+pub const SERVICE_IP_NO_HINT: DWORD = 0x0;
+pub const SERVICE_CCP_NO_HINT: DWORD = 0x0;
+pub const SERVICE_IP_QUERY_HINT: DWORD = 0x10000;
+pub const SERVICE_CCP_QUERY_HINT: DWORD = 0x10000;
+pub const SERVICE_IP_CHKPT_NUM: DWORD = 0x0FF;
+pub const SERVICE_CCP_CHKPT_NUM: DWORD = 0x0FF;
+pub const SERVICE_IP_WAIT_TIME: DWORD = 0x0FF00;
+pub const SERVICE_CCP_WAIT_TIME: DWORD = 0x0FF00;
+pub const SERVICE_IP_WAITTIME_SHIFT: DWORD = 8;
+pub const SERVICE_NTIP_WAITTIME_SHIFT: DWORD = 12;
+pub const UPPER_HINT_MASK: DWORD = 0x0000FF00;
+pub const LOWER_HINT_MASK: DWORD = 0x000000FF;
+pub const UPPER_GET_HINT_MASK: DWORD = 0x0FF00000;
+pub const LOWER_GET_HINT_MASK: DWORD = 0x0000FF00;
+pub const SERVICE_NT_MAXTIME: DWORD = 0x0000FFFF;
+pub const SERVICE_RESRV_MASK: DWORD = 0x0001FFFF;
+pub const SERVICE_MAXTIME: DWORD = 0x000000FF;
+pub const SERVICE_BASE: DWORD = 3050;
+pub const SERVICE_UIC_NORMAL: DWORD = 0;
+pub const SERVICE_UIC_BADPARMVAL: DWORD = SERVICE_BASE + 1;
+pub const SERVICE_UIC_MISSPARM: DWORD = SERVICE_BASE + 2;
+pub const SERVICE_UIC_UNKPARM: DWORD = SERVICE_BASE + 3;
+pub const SERVICE_UIC_RESOURCE: DWORD = SERVICE_BASE + 4;
+pub const SERVICE_UIC_CONFIG: DWORD = SERVICE_BASE + 5;
+pub const SERVICE_UIC_SYSTEM: DWORD = SERVICE_BASE + 6;
+pub const SERVICE_UIC_INTERNAL: DWORD = SERVICE_BASE + 7;
+pub const SERVICE_UIC_AMBIGPARM: DWORD = SERVICE_BASE + 8;
+pub const SERVICE_UIC_DUPPARM: DWORD = SERVICE_BASE + 9;
+pub const SERVICE_UIC_KILL: DWORD = SERVICE_BASE + 10;
+pub const SERVICE_UIC_EXEC: DWORD = SERVICE_BASE + 11;
+pub const SERVICE_UIC_SUBSERV: DWORD = SERVICE_BASE + 12;
+pub const SERVICE_UIC_CONFLPARM: DWORD = SERVICE_BASE + 13;
+pub const SERVICE_UIC_FILE: DWORD = SERVICE_BASE + 14;
+pub const SERVICE_UIC_M_NULL: DWORD = 0;
+pub const SERVICE_UIC_M_MEMORY: DWORD = SERVICE_BASE + 20;
+pub const SERVICE_UIC_M_DISK: DWORD = SERVICE_BASE + 21;
+pub const SERVICE_UIC_M_THREADS: DWORD = SERVICE_BASE + 22;
+pub const SERVICE_UIC_M_PROCESSES: DWORD = SERVICE_BASE + 23;
+pub const SERVICE_UIC_M_SECURITY: DWORD = SERVICE_BASE + 24;
+pub const SERVICE_UIC_M_LANROOT: DWORD = SERVICE_BASE + 25;
+pub const SERVICE_UIC_M_REDIR: DWORD = SERVICE_BASE + 26;
+pub const SERVICE_UIC_M_SERVER: DWORD = SERVICE_BASE + 27;
+pub const SERVICE_UIC_M_SEC_FILE_ERR: DWORD = SERVICE_BASE + 28;
+pub const SERVICE_UIC_M_FILES: DWORD = SERVICE_BASE + 29;
+pub const SERVICE_UIC_M_LOGS: DWORD = SERVICE_BASE + 30;
+pub const SERVICE_UIC_M_LANGROUP: DWORD = SERVICE_BASE + 31;
+pub const SERVICE_UIC_M_MSGNAME: DWORD = SERVICE_BASE + 32;
+pub const SERVICE_UIC_M_ANNOUNCE: DWORD = SERVICE_BASE + 33;
+pub const SERVICE_UIC_M_UAS: DWORD = SERVICE_BASE + 34;
+pub const SERVICE_UIC_M_SERVER_SEC_ERR: DWORD = SERVICE_BASE + 35;
+pub const SERVICE_UIC_M_WKSTA: DWORD = SERVICE_BASE + 37;
+pub const SERVICE_UIC_M_ERRLOG: DWORD = SERVICE_BASE + 38;
+pub const SERVICE_UIC_M_FILE_UW: DWORD = SERVICE_BASE + 39;
+pub const SERVICE_UIC_M_ADDPAK: DWORD = SERVICE_BASE + 40;
+pub const SERVICE_UIC_M_LAZY: DWORD = SERVICE_BASE + 41;
+pub const SERVICE_UIC_M_UAS_MACHINE_ACCT: DWORD = SERVICE_BASE + 42;
+pub const SERVICE_UIC_M_UAS_SERVERS_NMEMB: DWORD = SERVICE_BASE + 43;
+pub const SERVICE_UIC_M_UAS_SERVERS_NOGRP: DWORD = SERVICE_BASE + 44;
+pub const SERVICE_UIC_M_UAS_INVALID_ROLE: DWORD = SERVICE_BASE + 45;
+pub const SERVICE_UIC_M_NETLOGON_NO_DC: DWORD = SERVICE_BASE + 46;
+pub const SERVICE_UIC_M_NETLOGON_DC_CFLCT: DWORD = SERVICE_BASE + 47;
+pub const SERVICE_UIC_M_NETLOGON_AUTH: DWORD = SERVICE_BASE + 48;
+pub const SERVICE_UIC_M_UAS_PROLOG: DWORD = SERVICE_BASE + 49;
+pub const SERVICE2_BASE: DWORD = 5600;
+pub const SERVICE_UIC_M_NETLOGON_MPATH: DWORD = SERVICE2_BASE + 0;
+pub const SERVICE_UIC_M_LSA_MACHINE_ACCT: DWORD = SERVICE2_BASE + 1;
+pub const SERVICE_UIC_M_DATABASE_ERROR: DWORD = SERVICE2_BASE + 2;
+#[inline]
+pub fn SERVICE_IP_CODE(tt: DWORD, nn: DWORD) -> c_long {
+ (SERVICE_IP_QUERY_HINT | (nn | (tt << SERVICE_IP_WAITTIME_SHIFT))) as c_long
+}
+#[inline]
+pub fn SERVICE_CCP_CODE(tt: DWORD, nn: DWORD) -> c_long {
+ (SERVICE_CCP_QUERY_HINT | (nn | (tt << SERVICE_IP_WAITTIME_SHIFT))) as c_long
+}
+#[inline]
+pub fn SERVICE_UIC_CODE(cc: DWORD, mm: DWORD) -> c_long {
+ ((cc << 16) | mm) as c_long
+}
+#[inline]
+pub fn SERVICE_NT_CCP_CODE(tt: DWORD, nn: DWORD) -> c_long {
+ (SERVICE_CCP_QUERY_HINT | nn | ((tt & LOWER_HINT_MASK) << SERVICE_IP_WAITTIME_SHIFT)
+ | ((tt & UPPER_HINT_MASK) << SERVICE_NTIP_WAITTIME_SHIFT)) as c_long
+}
+#[inline]
+pub fn SERVICE_NT_WAIT_GET(code: DWORD) -> DWORD {
+ ((code & UPPER_GET_HINT_MASK) >> SERVICE_NTIP_WAITTIME_SHIFT)
+ | ((code & LOWER_GET_HINT_MASK) >> SERVICE_IP_WAITTIME_SHIFT)
+}
diff --git a/vendor/winapi/src/um/lmuse.rs b/vendor/winapi/src/um/lmuse.rs
new file mode 100644
index 000000000..66423121f
--- /dev/null
+++ b/vendor/winapi/src/um/lmuse.rs
@@ -0,0 +1,101 @@
+// 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
+//! This file contains structures, function prototypes, and definitions for the NetUse API
+use shared::lmcons::{LMSTR, NET_API_STATUS};
+use shared::minwindef::{DWORD, LPBYTE, LPDWORD, PBYTE, ULONG};
+use um::winnt::LPWSTR;
+extern "system" {
+ pub fn NetUseAdd(
+ servername: LPWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetUseDel(
+ UncServerName: LMSTR,
+ UseName: LMSTR,
+ ForceCond: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetUseEnum(
+ UncServerName: LMSTR,
+ Level: DWORD,
+ BufPtr: *mut LPBYTE,
+ PreferedMaximumSize: DWORD,
+ EntriesRead: LPDWORD,
+ TotalEntries: LPDWORD,
+ ResumeHandle: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetUseGetInfo(
+ UncServerName: LMSTR,
+ UseName: LMSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+}
+STRUCT!{struct USE_INFO_0 {
+ ui0_local: LMSTR,
+ ui0_remote: LMSTR,
+}}
+pub type PUSE_INFO_0 = *mut USE_INFO_0;
+pub type LPUSE_INFO_0 = *mut USE_INFO_0;
+STRUCT!{struct USE_INFO_1 {
+ ui1_local: LMSTR,
+ ui1_remote: LMSTR,
+ ui1_password: LMSTR,
+ ui1_status: DWORD,
+ ui1_asg_type: DWORD,
+ ui1_refcount: DWORD,
+ ui1_usecount: DWORD,
+}}
+pub type PUSE_INFO_1 = *mut USE_INFO_1;
+pub type LPUSE_INFO_1 = *mut USE_INFO_1;
+STRUCT!{struct USE_INFO_2 {
+ ui2_local: LMSTR,
+ ui2_remote: LMSTR,
+ ui2_password: LMSTR,
+ ui2_status: DWORD,
+ ui2_asg_type: DWORD,
+ ui2_refcount: DWORD,
+ ui2_usecount: DWORD,
+ ui2_username: LMSTR,
+ ui2_domainname: LMSTR,
+}}
+pub type PUSE_INFO_2 = *mut USE_INFO_2;
+pub type LPUSE_INFO_2 = *mut USE_INFO_2;
+STRUCT!{struct USE_INFO_3 {
+ ui3_ui2: USE_INFO_2,
+ ui3_flags: ULONG,
+}}
+pub type PUSE_INFO_3 = *mut USE_INFO_3;
+STRUCT!{struct USE_INFO_4 {
+ ui4_ui3: USE_INFO_3,
+ ui4_auth_identity_length: DWORD,
+ ui4_auth_identity: PBYTE,
+}}
+pub type PUSE_INFO_4 = *mut USE_INFO_4;
+pub type LPUSE_INFO_4 = *mut USE_INFO_4;
+pub const USE_LOCAL_PARMNUM: DWORD = 1;
+pub const USE_REMOTE_PARMNUM: DWORD = 2;
+pub const USE_PASSWORD_PARMNUM: DWORD = 3;
+pub const USE_ASGTYPE_PARMNUM: DWORD = 4;
+pub const USE_USERNAME_PARMNUM: DWORD = 5;
+pub const USE_DOMAINNAME_PARMNUM: DWORD = 6;
+pub const USE_OK: DWORD = 0;
+pub const USE_PAUSED: DWORD = 1;
+pub const USE_SESSLOST: DWORD = 2;
+pub const USE_DISCONN: DWORD = 2;
+pub const USE_NETERR: DWORD = 3;
+pub const USE_CONN: DWORD = 4;
+pub const USE_RECONN: DWORD = 5;
+pub const USE_WILDCARD: DWORD = -1i32 as u32;
+pub const USE_DISKDEV: DWORD = 0;
+pub const USE_SPOOLDEV: DWORD = 1;
+pub const USE_CHARDEV: DWORD = 2;
+pub const USE_IPC: DWORD = 3;
+pub const CREATE_NO_CONNECT: ULONG = 0x1;
+pub const CREATE_BYPASS_CSC: ULONG = 0x2;
+pub const CREATE_CRED_RESET: ULONG = 0x4;
+pub const USE_DEFAULT_CREDENTIALS: ULONG = 0x4;
diff --git a/vendor/winapi/src/um/lmwksta.rs b/vendor/winapi/src/um/lmwksta.rs
new file mode 100644
index 000000000..9b086bf60
--- /dev/null
+++ b/vendor/winapi/src/um/lmwksta.rs
@@ -0,0 +1,421 @@
+// 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::lmcons::{LMSTR, NET_API_STATUS};
+use shared::minwindef::{BOOL, DWORD, LPBYTE, LPDWORD};
+use um::winnt::LPCWSTR;
+extern "system" {
+ pub fn NetWkstaGetInfo(
+ servername: LMSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetWkstaSetInfo(
+ servername: LMSTR,
+ level: DWORD,
+ buffer: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetWkstaUserGetInfo(
+ reserved: LMSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ ) -> NET_API_STATUS;
+ pub fn NetWkstaUserSetInfo(
+ reserved: LMSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetWkstaUserEnum(
+ servername: LMSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resumehandle: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetWkstaTransportAdd(
+ servername: LPCWSTR,
+ level: DWORD,
+ buf: LPBYTE,
+ parm_err: LPDWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetWkstaTransportDel(
+ servername: LMSTR,
+ transportname: LMSTR,
+ ucond: DWORD,
+ ) -> NET_API_STATUS;
+ pub fn NetWkstaTransportEnum(
+ servername: LPCWSTR,
+ level: DWORD,
+ bufptr: *mut LPBYTE,
+ prefmaxlen: DWORD,
+ entriesread: LPDWORD,
+ totalentries: LPDWORD,
+ resumehandle: LPDWORD,
+ ) -> NET_API_STATUS;
+}
+STRUCT!{struct WKSTA_INFO_100 {
+ wki100_platform_id: DWORD,
+ wki100_computername: LMSTR,
+ wki100_langroup: LMSTR,
+ wki100_ver_major: DWORD,
+ wki100_ver_minor: DWORD,
+}}
+pub type PWKSTA_INFO_100 = *mut WKSTA_INFO_100;
+pub type LPWKSTA_INFO_100 = *mut WKSTA_INFO_100;
+STRUCT!{struct WKSTA_INFO_101 {
+ wki101_platform_id: DWORD,
+ wki101_computername: LMSTR,
+ wki101_langroup: LMSTR,
+ wki101_ver_major: DWORD,
+ wki101_ver_minor: DWORD,
+ wki101_lanroot: LMSTR,
+}}
+pub type PWKSTA_INFO_101 = *mut WKSTA_INFO_101;
+pub type LPWKSTA_INFO_101 = *mut WKSTA_INFO_101;
+STRUCT!{struct WKSTA_INFO_102 {
+ wki102_platform_id: DWORD,
+ wki102_computername: LMSTR,
+ wki102_langroup: LMSTR,
+ wki102_ver_major: DWORD,
+ wki102_ver_minor: DWORD,
+ wki102_lanroot: LMSTR,
+ wki102_logged_on_users: DWORD,
+}}
+pub type PWKSTA_INFO_102 = *mut WKSTA_INFO_102;
+pub type LPWKSTA_INFO_102 = *mut WKSTA_INFO_102;
+STRUCT!{struct WKSTA_INFO_302 {
+ wki302_char_wait: DWORD,
+ wki302_collection_time: DWORD,
+ wki302_maximum_collection_count: DWORD,
+ wki302_keep_conn: DWORD,
+ wki302_keep_search: DWORD,
+ wki302_max_cmds: DWORD,
+ wki302_num_work_buf: DWORD,
+ wki302_siz_work_buf: DWORD,
+ wki302_max_wrk_cache: DWORD,
+ wki302_sess_timeout: DWORD,
+ wki302_siz_error: DWORD,
+ wki302_num_alerts: DWORD,
+ wki302_num_services: DWORD,
+ wki302_errlog_sz: DWORD,
+ wki302_print_buf_time: DWORD,
+ wki302_num_char_buf: DWORD,
+ wki302_siz_char_buf: DWORD,
+ wki302_wrk_heuristics: LMSTR,
+ wki302_mailslots: DWORD,
+ wki302_num_dgram_buf: DWORD,
+}}
+pub type PWKSTA_INFO_302 = *mut WKSTA_INFO_302;
+pub type LPWKSTA_INFO_302 = *mut WKSTA_INFO_302;
+STRUCT!{struct WKSTA_INFO_402 {
+ wki402_char_wait: DWORD,
+ wki402_collection_time: DWORD,
+ wki402_maximum_collection_count: DWORD,
+ wki402_keep_conn: DWORD,
+ wki402_keep_search: DWORD,
+ wki402_max_cmds: DWORD,
+ wki402_num_work_buf: DWORD,
+ wki402_siz_work_buf: DWORD,
+ wki402_max_wrk_cache: DWORD,
+ wki402_sess_timeout: DWORD,
+ wki402_siz_error: DWORD,
+ wki402_num_alerts: DWORD,
+ wki402_num_services: DWORD,
+ wki402_errlog_sz: DWORD,
+ wki402_print_buf_time: DWORD,
+ wki402_num_char_buf: DWORD,
+ wki402_siz_char_buf: DWORD,
+ wki402_wrk_heuristics: LMSTR,
+ wki402_mailslots: DWORD,
+ wki402_num_dgram_buf: DWORD,
+ wki402_max_threads: DWORD,
+}}
+pub type PWKSTA_INFO_402 = *mut WKSTA_INFO_402;
+pub type LPWKSTA_INFO_402 = *mut WKSTA_INFO_402;
+STRUCT!{struct WKSTA_INFO_502 {
+ wki502_char_wait: DWORD,
+ wki502_collection_time: DWORD,
+ wki502_maximum_collection_count: DWORD,
+ wki502_keep_conn: DWORD,
+ wki502_max_cmds: DWORD,
+ wki502_sess_timeout: DWORD,
+ wki502_siz_char_buf: DWORD,
+ wki502_max_threads: DWORD,
+ wki502_lock_quota: DWORD,
+ wki502_lock_increment: DWORD,
+ wki502_lock_maximum: DWORD,
+ wki502_pipe_increment: DWORD,
+ wki502_pipe_maximum: DWORD,
+ wki502_cache_file_timeout: DWORD,
+ wki502_dormant_file_limit: DWORD,
+ wki502_read_ahead_throughput: DWORD,
+ wki502_num_mailslot_buffers: DWORD,
+ wki502_num_srv_announce_buffers: DWORD,
+ wki502_max_illegal_datagram_events: DWORD,
+ wki502_illegal_datagram_event_reset_frequency: DWORD,
+ wki502_log_election_packets: BOOL,
+ wki502_use_opportunistic_locking: BOOL,
+ wki502_use_unlock_behind: BOOL,
+ wki502_use_close_behind: BOOL,
+ wki502_buf_named_pipes: BOOL,
+ wki502_use_lock_read_unlock: BOOL,
+ wki502_utilize_nt_caching: BOOL,
+ wki502_use_raw_read: BOOL,
+ wki502_use_raw_write: BOOL,
+ wki502_use_write_raw_data: BOOL,
+ wki502_use_encryption: BOOL,
+ wki502_buf_files_deny_write: BOOL,
+ wki502_buf_read_only_files: BOOL,
+ wki502_force_core_create_mode: BOOL,
+ wki502_use_512_byte_max_transfer: BOOL,
+}}
+pub type PWKSTA_INFO_502 = *mut WKSTA_INFO_502;
+pub type LPWKSTA_INFO_502 = *mut WKSTA_INFO_502;
+STRUCT!{struct WKSTA_INFO_1010 {
+ wki1010_char_wait: DWORD,
+}}
+pub type PWKSTA_INFO_1010 = *mut WKSTA_INFO_1010;
+pub type LPWKSTA_INFO_1010 = *mut WKSTA_INFO_1010;
+STRUCT!{struct WKSTA_INFO_1011 {
+ wki1011_collection_time: DWORD,
+}}
+pub type PWKSTA_INFO_1011 = *mut WKSTA_INFO_1011;
+pub type LPWKSTA_INFO_1011 = *mut WKSTA_INFO_1011;
+STRUCT!{struct WKSTA_INFO_1012 {
+ wki1012_maximum_collection_count: DWORD,
+}}
+pub type PWKSTA_INFO_1012 = *mut WKSTA_INFO_1012;
+pub type LPWKSTA_INFO_1012 = *mut WKSTA_INFO_1012;
+STRUCT!{struct WKSTA_INFO_1027 {
+ wki1027_errlog_sz: DWORD,
+}}
+pub type PWKSTA_INFO_1027 = *mut WKSTA_INFO_1027;
+pub type LPWKSTA_INFO_1027 = *mut WKSTA_INFO_1027;
+STRUCT!{struct WKSTA_INFO_1028 {
+ wki1028_print_buf_time: DWORD,
+}}
+pub type PWKSTA_INFO_1028 = *mut WKSTA_INFO_1028;
+pub type LPWKSTA_INFO_1028 = *mut WKSTA_INFO_1028;
+STRUCT!{struct WKSTA_INFO_1032 {
+ wki1032_wrk_heuristics: DWORD,
+}}
+pub type PWKSTA_INFO_1032 = *mut WKSTA_INFO_1032;
+pub type LPWKSTA_INFO_1032 = *mut WKSTA_INFO_1032;
+STRUCT!{struct WKSTA_INFO_1013 {
+ wki1013_keep_conn: DWORD,
+}}
+pub type PWKSTA_INFO_1013 = *mut WKSTA_INFO_1013;
+pub type LPWKSTA_INFO_1013 = *mut WKSTA_INFO_1013;
+STRUCT!{struct WKSTA_INFO_1018 {
+ wki1018_sess_timeout: DWORD,
+}}
+pub type PWKSTA_INFO_1018 = *mut WKSTA_INFO_1018;
+pub type LPWKSTA_INFO_1018 = *mut WKSTA_INFO_1018;
+STRUCT!{struct WKSTA_INFO_1023 {
+ wki1023_siz_char_buf: DWORD,
+}}
+pub type PWKSTA_INFO_1023 = *mut WKSTA_INFO_1023;
+pub type LPWKSTA_INFO_1023 = *mut WKSTA_INFO_1023;
+STRUCT!{struct WKSTA_INFO_1033 {
+ wki1033_max_threads: DWORD,
+}}
+pub type PWKSTA_INFO_1033 = *mut WKSTA_INFO_1033;
+pub type LPWKSTA_INFO_1033 = *mut WKSTA_INFO_1033;
+STRUCT!{struct WKSTA_INFO_1041 {
+ wki1041_lock_quota: DWORD,
+}}
+pub type PWKSTA_INFO_1041 = *mut WKSTA_INFO_1041;
+pub type LPWKSTA_INFO_1041 = *mut WKSTA_INFO_1041;
+STRUCT!{struct WKSTA_INFO_1042 {
+ wki1042_lock_increment: DWORD,
+}}
+pub type PWKSTA_INFO_1042 = *mut WKSTA_INFO_1042;
+pub type LPWKSTA_INFO_1042 = *mut WKSTA_INFO_1042;
+STRUCT!{struct WKSTA_INFO_1043 {
+ wki1043_lock_maximum: DWORD,
+}}
+pub type PWKSTA_INFO_1043 = *mut WKSTA_INFO_1043;
+pub type LPWKSTA_INFO_1043 = *mut WKSTA_INFO_1043;
+STRUCT!{struct WKSTA_INFO_1044 {
+ wki1044_pipe_increment: DWORD,
+}}
+pub type PWKSTA_INFO_1044 = *mut WKSTA_INFO_1044;
+pub type LPWKSTA_INFO_1044 = *mut WKSTA_INFO_1044;
+STRUCT!{struct WKSTA_INFO_1045 {
+ wki1045_pipe_maximum: DWORD,
+}}
+pub type PWKSTA_INFO_1045 = *mut WKSTA_INFO_1045;
+pub type LPWKSTA_INFO_1045 = *mut WKSTA_INFO_1045;
+STRUCT!{struct WKSTA_INFO_1046 {
+ wki1046_dormant_file_limit: DWORD,
+}}
+pub type PWKSTA_INFO_1046 = *mut WKSTA_INFO_1046;
+pub type LPWKSTA_INFO_1046 = *mut WKSTA_INFO_1046;
+STRUCT!{struct WKSTA_INFO_1047 {
+ wki1047_cache_file_timeout: DWORD,
+}}
+pub type PWKSTA_INFO_1047 = *mut WKSTA_INFO_1047;
+pub type LPWKSTA_INFO_1047 = *mut WKSTA_INFO_1047;
+STRUCT!{struct WKSTA_INFO_1048 {
+ wki1048_use_opportunistic_locking: BOOL,
+}}
+pub type PWKSTA_INFO_1048 = *mut WKSTA_INFO_1048;
+pub type LPWKSTA_INFO_1048 = *mut WKSTA_INFO_1048;
+STRUCT!{struct WKSTA_INFO_1049 {
+ wki1049_use_unlock_behind: BOOL,
+}}
+pub type PWKSTA_INFO_1049 = *mut WKSTA_INFO_1049;
+pub type LPWKSTA_INFO_1049 = *mut WKSTA_INFO_1049;
+STRUCT!{struct WKSTA_INFO_1050 {
+ wki1050_use_close_behind: BOOL,
+}}
+pub type PWKSTA_INFO_1050 = *mut WKSTA_INFO_1050;
+pub type LPWKSTA_INFO_1050 = *mut WKSTA_INFO_1050;
+STRUCT!{struct WKSTA_INFO_1051 {
+ wki1051_buf_named_pipes: BOOL,
+}}
+pub type PWKSTA_INFO_1051 = *mut WKSTA_INFO_1051;
+pub type LPWKSTA_INFO_1051 = *mut WKSTA_INFO_1051;
+STRUCT!{struct WKSTA_INFO_1052 {
+ wki1052_use_lock_read_unlock: BOOL,
+}}
+pub type PWKSTA_INFO_1052 = *mut WKSTA_INFO_1052;
+pub type LPWKSTA_INFO_1052 = *mut WKSTA_INFO_1052;
+STRUCT!{struct WKSTA_INFO_1053 {
+ wki1053_utilize_nt_caching: BOOL,
+}}
+pub type PWKSTA_INFO_1053 = *mut WKSTA_INFO_1053;
+pub type LPWKSTA_INFO_1053 = *mut WKSTA_INFO_1053;
+STRUCT!{struct WKSTA_INFO_1054 {
+ wki1054_use_raw_read: BOOL,
+}}
+pub type PWKSTA_INFO_1054 = *mut WKSTA_INFO_1054;
+pub type LPWKSTA_INFO_1054 = *mut WKSTA_INFO_1054;
+STRUCT!{struct WKSTA_INFO_1055 {
+ wki1055_use_raw_write: BOOL,
+}}
+pub type PWKSTA_INFO_1055 = *mut WKSTA_INFO_1055;
+pub type LPWKSTA_INFO_1055 = *mut WKSTA_INFO_1055;
+STRUCT!{struct WKSTA_INFO_1056 {
+ wki1056_use_write_raw_data: BOOL,
+}}
+pub type PWKSTA_INFO_1056 = *mut WKSTA_INFO_1056;
+pub type LPWKSTA_INFO_1056 = *mut WKSTA_INFO_1056;
+STRUCT!{struct WKSTA_INFO_1057 {
+ wki1057_use_encryption: BOOL,
+}}
+pub type PWKSTA_INFO_1057 = *mut WKSTA_INFO_1057;
+pub type LPWKSTA_INFO_1057 = *mut WKSTA_INFO_1057;
+STRUCT!{struct WKSTA_INFO_1058 {
+ wki1058_buf_files_deny_write: BOOL,
+}}
+pub type PWKSTA_INFO_1058 = *mut WKSTA_INFO_1058;
+pub type LPWKSTA_INFO_1058 = *mut WKSTA_INFO_1058;
+STRUCT!{struct WKSTA_INFO_1059 {
+ wki1059_buf_read_only_files: BOOL,
+}}
+pub type PWKSTA_INFO_1059 = *mut WKSTA_INFO_1059;
+pub type LPWKSTA_INFO_1059 = *mut WKSTA_INFO_1059;
+STRUCT!{struct WKSTA_INFO_1060 {
+ wki1060_force_core_create_mode: BOOL,
+}}
+pub type PWKSTA_INFO_1060 = *mut WKSTA_INFO_1060;
+pub type LPWKSTA_INFO_1060 = *mut WKSTA_INFO_1060;
+STRUCT!{struct WKSTA_INFO_1061 {
+ wki1061_use_512_byte_max_transfer: BOOL,
+}}
+pub type PWKSTA_INFO_1061 = *mut WKSTA_INFO_1061;
+pub type LPWKSTA_INFO_1061 = *mut WKSTA_INFO_1061;
+STRUCT!{struct WKSTA_INFO_1062 {
+ wki1062_read_ahead_throughput: DWORD,
+}}
+pub type PWKSTA_INFO_1062 = *mut WKSTA_INFO_1062;
+pub type LPWKSTA_INFO_1062 = *mut WKSTA_INFO_1062;
+STRUCT!{struct WKSTA_USER_INFO_0 {
+ wkui0_username: LMSTR,
+}}
+pub type PWKSTA_USER_INFO_0 = *mut WKSTA_USER_INFO_0;
+pub type LPWKSTA_USER_INFO_0 = *mut WKSTA_USER_INFO_0;
+STRUCT!{struct WKSTA_USER_INFO_1 {
+ wkui1_username: LMSTR,
+ wkui1_logon_domain: LMSTR,
+ wkui1_oth_domains: LMSTR,
+ wkui1_logon_server: LMSTR,
+}}
+pub type PWKSTA_USER_INFO_1 = *mut WKSTA_USER_INFO_1;
+pub type LPWKSTA_USER_INFO_1 = *mut WKSTA_USER_INFO_1;
+STRUCT!{struct WKSTA_USER_INFO_1101 {
+ wkui1101_oth_domains: LMSTR,
+}}
+pub type PWKSTA_USER_INFO_1101 = *mut WKSTA_USER_INFO_1101;
+pub type LPWKSTA_USER_INFO_1101 = *mut WKSTA_USER_INFO_1101;
+STRUCT!{struct WKSTA_TRANSPORT_INFO_0 {
+ wkti0_quality_of_service: DWORD,
+ wkti0_number_of_vcs: DWORD,
+ wkti0_transport_name: LMSTR,
+ wkti0_transport_address: LMSTR,
+ wkti0_wan_ish: BOOL,
+}}
+pub type PWKSTA_TRANSPORT_INFO_0 = *mut WKSTA_TRANSPORT_INFO_0;
+pub type LPWKSTA_TRANSPORT_INFO_0 = *mut WKSTA_TRANSPORT_INFO_0;
+pub const WKSTA_PLATFORM_ID_PARMNUM: DWORD = 100;
+pub const WKSTA_COMPUTERNAME_PARMNUM: DWORD = 1;
+pub const WKSTA_LANGROUP_PARMNUM: DWORD = 2;
+pub const WKSTA_VER_MAJOR_PARMNUM: DWORD = 4;
+pub const WKSTA_VER_MINOR_PARMNUM: DWORD = 5;
+pub const WKSTA_LOGGED_ON_USERS_PARMNUM: DWORD = 6;
+pub const WKSTA_LANROOT_PARMNUM: DWORD = 7;
+pub const WKSTA_LOGON_DOMAIN_PARMNUM: DWORD = 8;
+pub const WKSTA_LOGON_SERVER_PARMNUM: DWORD = 9;
+pub const WKSTA_CHARWAIT_PARMNUM: DWORD = 10;
+pub const WKSTA_CHARTIME_PARMNUM: DWORD = 11;
+pub const WKSTA_CHARCOUNT_PARMNUM: DWORD = 12;
+pub const WKSTA_KEEPCONN_PARMNUM: DWORD = 13;
+pub const WKSTA_KEEPSEARCH_PARMNUM: DWORD = 14;
+pub const WKSTA_MAXCMDS_PARMNUM: DWORD = 15;
+pub const WKSTA_NUMWORKBUF_PARMNUM: DWORD = 16;
+pub const WKSTA_MAXWRKCACHE_PARMNUM: DWORD = 17;
+pub const WKSTA_SESSTIMEOUT_PARMNUM: DWORD = 18;
+pub const WKSTA_SIZERROR_PARMNUM: DWORD = 19;
+pub const WKSTA_NUMALERTS_PARMNUM: DWORD = 20;
+pub const WKSTA_NUMSERVICES_PARMNUM: DWORD = 21;
+pub const WKSTA_NUMCHARBUF_PARMNUM: DWORD = 22;
+pub const WKSTA_SIZCHARBUF_PARMNUM: DWORD = 23;
+pub const WKSTA_ERRLOGSZ_PARMNUM: DWORD = 27;
+pub const WKSTA_PRINTBUFTIME_PARMNUM: DWORD = 28;
+pub const WKSTA_SIZWORKBUF_PARMNUM: DWORD = 29;
+pub const WKSTA_MAILSLOTS_PARMNUM: DWORD = 30;
+pub const WKSTA_NUMDGRAMBUF_PARMNUM: DWORD = 31;
+pub const WKSTA_WRKHEURISTICS_PARMNUM: DWORD = 32;
+pub const WKSTA_MAXTHREADS_PARMNUM: DWORD = 33;
+pub const WKSTA_LOCKQUOTA_PARMNUM: DWORD = 41;
+pub const WKSTA_LOCKINCREMENT_PARMNUM: DWORD = 42;
+pub const WKSTA_LOCKMAXIMUM_PARMNUM: DWORD = 43;
+pub const WKSTA_PIPEINCREMENT_PARMNUM: DWORD = 44;
+pub const WKSTA_PIPEMAXIMUM_PARMNUM: DWORD = 45;
+pub const WKSTA_DORMANTFILELIMIT_PARMNUM: DWORD = 46;
+pub const WKSTA_CACHEFILETIMEOUT_PARMNUM: DWORD = 47;
+pub const WKSTA_USEOPPORTUNISTICLOCKING_PARMNUM: DWORD = 48;
+pub const WKSTA_USEUNLOCKBEHIND_PARMNUM: DWORD = 49;
+pub const WKSTA_USECLOSEBEHIND_PARMNUM: DWORD = 50;
+pub const WKSTA_BUFFERNAMEDPIPES_PARMNUM: DWORD = 51;
+pub const WKSTA_USELOCKANDREADANDUNLOCK_PARMNUM: DWORD = 52;
+pub const WKSTA_UTILIZENTCACHING_PARMNUM: DWORD = 53;
+pub const WKSTA_USERAWREAD_PARMNUM: DWORD = 54;
+pub const WKSTA_USERAWWRITE_PARMNUM: DWORD = 55;
+pub const WKSTA_USEWRITERAWWITHDATA_PARMNUM: DWORD = 56;
+pub const WKSTA_USEENCRYPTION_PARMNUM: DWORD = 57;
+pub const WKSTA_BUFFILESWITHDENYWRITE_PARMNUM: DWORD = 58;
+pub const WKSTA_BUFFERREADONLYFILES_PARMNUM: DWORD = 59;
+pub const WKSTA_FORCECORECREATEMODE_PARMNUM: DWORD = 60;
+pub const WKSTA_USE512BYTESMAXTRANSFER_PARMNUM: DWORD = 61;
+pub const WKSTA_READAHEADTHRUPUT_PARMNUM: DWORD = 62;
+pub const WKSTA_OTH_DOMAINS_PARMNUM: DWORD = 101;
+pub const TRANSPORT_QUALITYOFSERVICE_PARMNUM: DWORD = 201;
+pub const TRANSPORT_NAME_PARMNUM: DWORD = 202;
diff --git a/vendor/winapi/src/um/lowlevelmonitorconfigurationapi.rs b/vendor/winapi/src/um/lowlevelmonitorconfigurationapi.rs
new file mode 100644
index 000000000..fe73214b5
--- /dev/null
+++ b/vendor/winapi/src/um/lowlevelmonitorconfigurationapi.rs
@@ -0,0 +1,49 @@
+// 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::minwindef::{BYTE, DWORD, LPDWORD};
+use um::physicalmonitorenumerationapi::_BOOL;
+use um::winnt::{HANDLE, LPSTR};
+STRUCT!{#[repr(packed)] struct MC_TIMING_REPORT {
+ dwHorizontalFrequencyInHZ: DWORD,
+ dwVerticalFrequencyInHZ: DWORD,
+ bTimingStatusByte: BYTE,
+}}
+pub type LPMC_TIMING_REPORT = *mut MC_TIMING_REPORT;
+ENUM!{enum MC_VCP_CODE_TYPE {
+ MC_MOMENTARY,
+ MC_SET_PARAMETER,
+}}
+pub type LPMC_VCP_CODE_TYPE = *mut MC_VCP_CODE_TYPE;
+extern "system" {
+ pub fn GetVCPFeatureAndVCPFeatureReply(
+ hMonitor: HANDLE,
+ bVCPCode: BYTE,
+ pvct: LPMC_VCP_CODE_TYPE,
+ pdwCurrentValue: LPDWORD,
+ pdwMaximumValue: LPDWORD,
+ ) -> _BOOL;
+ pub fn SetVCPFeature(
+ hMonitor: HANDLE,
+ bVCPCode: BYTE,
+ dwNewValue: DWORD,
+ ) -> _BOOL;
+ pub fn SaveCurrentSettings(
+ hMonitor: HANDLE,
+ ) -> _BOOL;
+ pub fn GetCapabilitiesStringLength(
+ hMonitor: HANDLE,
+ pdwCapabilitiesStringLengthInCharacters: LPDWORD,
+ ) -> _BOOL;
+ pub fn CapabilitiesRequestAndCapabilitiesReply(
+ hMonitor: HANDLE,
+ pszASCIICapabilitiesString: LPSTR,
+ dwCapabilitiesStringLengthInCharacters: DWORD,
+ ) -> _BOOL;
+ pub fn GetTimingReport(
+ hMonitor: HANDLE,
+ pmtrMonitorTimingReport: LPMC_TIMING_REPORT,
+ ) -> _BOOL;
+}
diff --git a/vendor/winapi/src/um/lsalookup.rs b/vendor/winapi/src/um/lsalookup.rs
new file mode 100644
index 000000000..95a6b62b7
--- /dev/null
+++ b/vendor/winapi/src/um/lsalookup.rs
@@ -0,0 +1,109 @@
+// 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.
+//! LSA Policy Lookup API
+use shared::guiddef::GUID;
+use shared::minwindef::{ULONG, USHORT};
+use shared::ntdef::NTSTATUS;
+use um::winnt::{ACCESS_MASK, HANDLE, LONG, PCHAR, PSID, PVOID, PWSTR, SID_NAME_USE};
+STRUCT!{struct LSA_UNICODE_STRING {
+ Length: USHORT,
+ MaximumLength: USHORT,
+ Buffer: PWSTR,
+}}
+pub type PLSA_UNICODE_STRING = *mut LSA_UNICODE_STRING;
+STRUCT!{struct LSA_STRING {
+ Length: USHORT,
+ MaximumLength: USHORT,
+ Buffer: PCHAR,
+}}
+pub type PLSA_STRING = *mut LSA_STRING;
+STRUCT!{struct LSA_OBJECT_ATTRIBUTES {
+ Length: ULONG,
+ RootDirectory: HANDLE,
+ ObjectName: PLSA_UNICODE_STRING,
+ Attributes: ULONG,
+ SecurityDescriptor: PVOID,
+ SecurityQualityOfService: PVOID,
+}}
+pub type PLSA_OBJECT_ATTRIBUTES = *mut LSA_OBJECT_ATTRIBUTES;
+STRUCT!{struct LSA_TRUST_INFORMATION {
+ Name: LSA_UNICODE_STRING,
+ Sid: PSID,
+}}
+pub type PLSA_TRUST_INFORMATION = *mut LSA_TRUST_INFORMATION;
+STRUCT!{struct LSA_REFERENCED_DOMAIN_LIST {
+ Entries: ULONG,
+ Domains: PLSA_TRUST_INFORMATION,
+}}
+pub type PLSA_REFERENCED_DOMAIN_LIST = *mut LSA_REFERENCED_DOMAIN_LIST;
+STRUCT!{struct LSA_TRANSLATED_SID2 {
+ Use: SID_NAME_USE,
+ Sid: PSID,
+ DomainIndex: LONG,
+ Flags: ULONG,
+}}
+pub type PLSA_TRANSLATED_SID2 = *mut LSA_TRANSLATED_SID2;
+STRUCT!{struct LSA_TRANSLATED_NAME {
+ Use: SID_NAME_USE,
+ Name: LSA_UNICODE_STRING,
+ DomainIndex: LONG,
+}}
+pub type PLSA_TRANSLATED_NAME = *mut LSA_TRANSLATED_NAME;
+STRUCT!{struct POLICY_ACCOUNT_DOMAIN_INFO {
+ DomainName: LSA_UNICODE_STRING,
+ DomainSid: PSID,
+}}
+pub type PPOLICY_ACCOUNT_DOMAIN_INFO = *mut POLICY_ACCOUNT_DOMAIN_INFO;
+STRUCT!{struct POLICY_DNS_DOMAIN_INFO {
+ Name: LSA_UNICODE_STRING,
+ DnsDomainName: LSA_UNICODE_STRING,
+ DnsForestName: LSA_UNICODE_STRING,
+ DomainGuid: GUID,
+ Sid: PSID,
+}}
+pub type PPOLICY_DNS_DOMAIN_INFO = *mut POLICY_DNS_DOMAIN_INFO;
+pub const LOOKUP_VIEW_LOCAL_INFORMATION: ACCESS_MASK = 0x00000001;
+pub const LOOKUP_TRANSLATE_NAMES: ACCESS_MASK = 0x00000800;
+ENUM!{enum LSA_LOOKUP_DOMAIN_INFO_CLASS {
+ AccountDomainInformation = 5,
+ DnsDomainInformation = 12,
+}}
+pub type PLSA_LOOKUP_DOMAIN_INFO_CLASS = *mut LSA_LOOKUP_DOMAIN_INFO_CLASS;
+pub type LSA_LOOKUP_HANDLE = PVOID;
+pub type PLSA_LOOKUP_HANDLE = *mut PVOID;
+extern "C" {
+ pub fn LsaLookupOpenLocalPolicy(
+ ObjectAttributes: PLSA_OBJECT_ATTRIBUTES,
+ AccessMask: ACCESS_MASK,
+ PolicyHandle: PLSA_LOOKUP_HANDLE,
+ ) -> NTSTATUS;
+ pub fn LsaLookupClose(
+ ObjectHandle: LSA_LOOKUP_HANDLE,
+ ) -> NTSTATUS;
+ pub fn LsaLookupTranslateSids(
+ PolicyHandle: LSA_LOOKUP_HANDLE,
+ Count: ULONG,
+ Sids: *mut PSID,
+ ReferencedDomains: *mut PLSA_REFERENCED_DOMAIN_LIST,
+ Names: *mut PLSA_TRANSLATED_NAME,
+ ) -> NTSTATUS;
+ pub fn LsaLookupTranslateNames(
+ PolicyHandle: LSA_LOOKUP_HANDLE,
+ Flags: ULONG,
+ Count: ULONG,
+ Names: PLSA_UNICODE_STRING,
+ ReferencedDomains: *mut PLSA_REFERENCED_DOMAIN_LIST,
+ Sids: *mut PLSA_TRANSLATED_SID2,
+ ) -> NTSTATUS;
+ pub fn LsaLookupGetDomainInfo(
+ PolicyHandle: LSA_LOOKUP_HANDLE,
+ DomainInfoClass: LSA_LOOKUP_DOMAIN_INFO_CLASS,
+ DomainInfo: *mut PVOID,
+ ) -> NTSTATUS;
+ pub fn LsaLookupFreeMemory(
+ Buffer: PVOID,
+ ) -> NTSTATUS;
+}
diff --git a/vendor/winapi/src/um/memoryapi.rs b/vendor/winapi/src/um/memoryapi.rs
new file mode 100644
index 000000000..5bf5bd01c
--- /dev/null
+++ b/vendor/winapi/src/um/memoryapi.rs
@@ -0,0 +1,390 @@
+// 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.
+//! ApiSet Contract for api-ms-win-core-memory-l1-1-0
+use ctypes::c_void;
+use shared::basetsd::{PSIZE_T, PULONG_PTR, SIZE_T, ULONG64, ULONG_PTR};
+use shared::minwindef::{
+ BOOL, DWORD, LPCVOID, LPDWORD, LPVOID, PBOOL, PDWORD, PULONG, UINT, ULONG,
+};
+use um::minwinbase::{LPSECURITY_ATTRIBUTES, PSECURITY_ATTRIBUTES};
+use um::winnt::{
+ HANDLE, LPCWSTR, PCWSTR, PMEMORY_BASIC_INFORMATION, PVOID, SECTION_ALL_ACCESS,
+ SECTION_MAP_EXECUTE_EXPLICIT, SECTION_MAP_READ, SECTION_MAP_WRITE,
+};
+pub const FILE_MAP_WRITE: DWORD = SECTION_MAP_WRITE;
+pub const FILE_MAP_READ: DWORD = SECTION_MAP_READ;
+pub const FILE_MAP_ALL_ACCESS: DWORD = SECTION_ALL_ACCESS;
+pub const FILE_MAP_EXECUTE: DWORD = SECTION_MAP_EXECUTE_EXPLICIT;
+pub const FILE_MAP_COPY: DWORD = 0x00000001;
+pub const FILE_MAP_RESERVE: DWORD = 0x80000000;
+pub const FILE_MAP_TARGETS_INVALID: DWORD = 0x40000000;
+pub const FILE_MAP_LARGE_PAGES: DWORD = 0x20000000;
+extern "system" {
+ pub fn VirtualAlloc(
+ lpAddress: LPVOID,
+ dwSize: SIZE_T,
+ flAllocationType: DWORD,
+ flProtect: DWORD,
+ ) -> LPVOID;
+ pub fn VirtualProtect(
+ lpAddress: LPVOID,
+ dwSize: SIZE_T,
+ flNewProtect: DWORD,
+ lpflOldProtect: PDWORD,
+ ) -> BOOL;
+ pub fn VirtualFree(
+ lpAddress: LPVOID,
+ dwSize: SIZE_T,
+ dwFreeType: DWORD,
+ ) -> BOOL;
+ pub fn VirtualQuery(
+ lpAddress: LPCVOID,
+ lpBuffer: PMEMORY_BASIC_INFORMATION,
+ dwLength: SIZE_T,
+ ) -> SIZE_T;
+ pub fn VirtualAllocEx(
+ hProcess: HANDLE,
+ lpAddress: LPVOID,
+ dwSize: SIZE_T,
+ flAllocationType: DWORD,
+ flProtect: DWORD,
+ ) -> LPVOID;
+ pub fn VirtualFreeEx(
+ hProcess: HANDLE,
+ lpAddress: LPVOID,
+ dwSize: SIZE_T,
+ dwFreeType: DWORD,
+ ) -> BOOL;
+ pub fn VirtualProtectEx(
+ hProcess: HANDLE,
+ lpAddress: LPVOID,
+ dwSize: SIZE_T,
+ flNewProtect: DWORD,
+ lpflOldProtect: PDWORD,
+ ) -> BOOL;
+ pub fn VirtualQueryEx(
+ hProcess: HANDLE,
+ lpAddress: LPCVOID,
+ lpBuffer: PMEMORY_BASIC_INFORMATION,
+ dwLength: SIZE_T,
+ ) -> SIZE_T;
+ pub fn ReadProcessMemory(
+ hProcess: HANDLE,
+ lpBaseAddress: LPCVOID,
+ lpBuffer: LPVOID,
+ nSize: SIZE_T,
+ lpNumberOfBytesRead: *mut SIZE_T,
+ ) -> BOOL;
+ pub fn WriteProcessMemory(
+ hProcess: HANDLE,
+ lpBaseAddress: LPVOID,
+ lpBuffer: LPCVOID,
+ nSize: SIZE_T,
+ lpNumberOfBytesWritten: *mut SIZE_T,
+ ) -> BOOL;
+ pub fn CreateFileMappingW(
+ hFile: HANDLE,
+ lpFileMappingAttributes: LPSECURITY_ATTRIBUTES,
+ flProtect: DWORD,
+ dwMaximumSizeHigh: DWORD,
+ dwMaximumSizeLow: DWORD,
+ lpName: LPCWSTR,
+ ) -> HANDLE;
+ pub fn OpenFileMappingW(
+ dwDesiredAccess: DWORD,
+ bInheritHandle: BOOL,
+ lpName: LPCWSTR,
+ ) -> HANDLE;
+ pub fn MapViewOfFile(
+ hFileMappingObject: HANDLE,
+ dwDesiredAccess: DWORD,
+ dwFileOffsetHigh: DWORD,
+ dwFileOffsetLow: DWORD,
+ dwNumberOfBytesToMap: SIZE_T,
+ ) -> LPVOID;
+ pub fn MapViewOfFileEx(
+ hFileMappingObject: HANDLE,
+ dwDesiredAccess: DWORD,
+ dwFileOffsetHigh: DWORD,
+ dwFileOffsetLow: DWORD,
+ dwNumberOfBytesToMap: SIZE_T,
+ lpBaseAddress: LPVOID,
+ ) -> LPVOID;
+ pub fn FlushViewOfFile(
+ lpBaseAddress: LPCVOID,
+ dwNumberOfBytesToFlush: SIZE_T,
+ ) -> BOOL;
+ pub fn UnmapViewOfFile(
+ lpBaseAddress: LPCVOID,
+ ) -> BOOL;
+ pub fn GetLargePageMinimum() -> SIZE_T;
+ pub fn GetProcessWorkingSetSizeEx(
+ hProcess: HANDLE,
+ lpMinimumWorkingSetSize: PSIZE_T,
+ lpMaximumWorkingSetSize: PSIZE_T,
+ Flags: PDWORD,
+ ) -> BOOL;
+ pub fn SetProcessWorkingSetSizeEx(
+ hProcess: HANDLE,
+ dwMinimumWorkingSetSize: SIZE_T,
+ dwMaximumWorkingSetSize: SIZE_T,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn VirtualLock(
+ lpAddress: LPVOID,
+ dwSize: SIZE_T,
+ ) -> BOOL;
+ pub fn VirtualUnlock(
+ lpAddress: LPVOID,
+ dwSize: SIZE_T,
+ ) -> BOOL;
+ pub fn GetWriteWatch(
+ dwFlags: DWORD,
+ lpBaseAddress: PVOID,
+ dwRegionSize: SIZE_T,
+ lpAddresses: *mut PVOID,
+ lpdwCount: *mut ULONG_PTR,
+ lpdwGranularity: LPDWORD,
+ ) -> UINT;
+ pub fn ResetWriteWatch(
+ lpBaseAddress: LPVOID,
+ dwRegionSize: SIZE_T,
+ ) -> UINT;
+}
+ENUM!{enum MEMORY_RESOURCE_NOTIFICATION_TYPE {
+ LowMemoryResourceNotification,
+ HighMemoryResourceNotification,
+}}
+extern "system" {
+ pub fn CreateMemoryResourceNotification(
+ NotificationType: MEMORY_RESOURCE_NOTIFICATION_TYPE,
+ ) -> HANDLE;
+ pub fn QueryMemoryResourceNotification(
+ ResourceNotificationHandle: HANDLE,
+ ResourceState: PBOOL,
+ ) -> BOOL;
+}
+pub const FILE_CACHE_MAX_HARD_ENABLE: DWORD = 0x00000001;
+pub const FILE_CACHE_MAX_HARD_DISABLE: DWORD = 0x00000002;
+pub const FILE_CACHE_MIN_HARD_ENABLE: DWORD = 0x00000004;
+pub const FILE_CACHE_MIN_HARD_DISABLE: DWORD = 0x00000008;
+extern "system" {
+ pub fn GetSystemFileCacheSize(
+ lpMinimumFileCacheSize: PSIZE_T,
+ lpMaximumFileCacheSize: PSIZE_T,
+ lpFlags: PDWORD,
+ ) -> BOOL;
+ pub fn SetSystemFileCacheSize(
+ MinimumFileCacheSize: SIZE_T,
+ MaximumFileCacheSize: SIZE_T,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn CreateFileMappingNumaW(
+ hFile: HANDLE,
+ lpFileMappingAttributes: LPSECURITY_ATTRIBUTES,
+ flProtect: DWORD,
+ dwMaximumSizeHigh: DWORD,
+ dwMaximumSizeLow: DWORD,
+ lpName: LPCWSTR,
+ nndPreferred: DWORD,
+ ) -> HANDLE;
+}
+STRUCT!{struct WIN32_MEMORY_RANGE_ENTRY {
+ VirtualAddress: PVOID,
+ NumberOfBytes: SIZE_T,
+}}
+pub type PWIN32_MEMORY_RANGE_ENTRY = *mut WIN32_MEMORY_RANGE_ENTRY;
+extern "system" {
+ pub fn PrefetchVirtualMemory(
+ hProcess: HANDLE,
+ NumberOfEntries: ULONG_PTR,
+ VirtualAddresses: PWIN32_MEMORY_RANGE_ENTRY,
+ Flags: ULONG,
+ ) -> BOOL;
+ pub fn CreateFileMappingFromApp(
+ hFile: HANDLE,
+ SecurityAttributes: PSECURITY_ATTRIBUTES,
+ PageProtection: ULONG,
+ MaximumSize: ULONG64,
+ Name: PCWSTR,
+ ) -> HANDLE;
+ pub fn MapViewOfFileFromApp(
+ hFileMappingObject: HANDLE,
+ DesiredAccess: ULONG,
+ FileOffset: ULONG64,
+ NumberOfBytesToMap: SIZE_T,
+ ) -> PVOID;
+ pub fn UnmapViewOfFileEx(
+ BaseAddress: PVOID,
+ UnmapFlags: ULONG,
+ ) -> BOOL;
+ pub fn AllocateUserPhysicalPages(
+ hProcess: HANDLE,
+ NumberOfPages: PULONG_PTR,
+ PageArray: PULONG_PTR,
+ ) -> BOOL;
+ pub fn FreeUserPhysicalPages(
+ hProcess: HANDLE,
+ NumberOfPages: PULONG_PTR,
+ PageArray: PULONG_PTR,
+ ) -> BOOL;
+ pub fn MapUserPhysicalPages(
+ VirtualAddress: PVOID,
+ NumberOfPages: ULONG_PTR,
+ PageArray: PULONG_PTR,
+ ) -> BOOL;
+ pub fn AllocateUserPhysicalPagesNuma(
+ hProcess: HANDLE,
+ NumberOfPages: PULONG_PTR,
+ PageArray: PULONG_PTR,
+ nndPreferred: DWORD,
+ ) -> BOOL;
+ pub fn VirtualAllocExNuma(
+ hProcess: HANDLE,
+ lpAddress: LPVOID,
+ dwSize: SIZE_T,
+ flAllocationType: DWORD,
+ flProtect: DWORD,
+ nndPreferred: DWORD,
+ ) -> LPVOID;
+}
+pub const MEHC_PATROL_SCRUBBER_PRESENT: ULONG = 0x1;
+extern "system" {
+ pub fn GetMemoryErrorHandlingCapabilities(
+ Capabilities: PULONG,
+ ) -> BOOL;
+}
+FN!{stdcall PBAD_MEMORY_CALLBACK_ROUTINE() -> ()}
+extern "system" {
+ pub fn RegisterBadMemoryNotification(
+ Callback: PBAD_MEMORY_CALLBACK_ROUTINE,
+ ) -> PVOID;
+ pub fn UnregisterBadMemoryNotification(
+ RegistrationHandle: PVOID,
+ ) -> BOOL;
+}
+ENUM!{enum OFFER_PRIORITY {
+ VmOfferPriorityVeryLow = 1,
+ VmOfferPriorityLow,
+ VmOfferPriorityBelowNormal,
+ VmOfferPriorityNormal,
+}}
+extern "system" {
+ pub fn OfferVirtualMemory(
+ VirtualAddress: PVOID,
+ Size: SIZE_T,
+ Priority: OFFER_PRIORITY,
+ ) -> DWORD;
+ pub fn ReclaimVirtualMemory(
+ VirtualAddress: *const c_void,
+ Size: SIZE_T,
+ ) -> DWORD;
+ pub fn DiscardVirtualMemory(
+ VirtualAddress: PVOID,
+ Size: SIZE_T,
+ ) -> DWORD;
+// TODO: Needs winnt::PCFG_CALL_TARGET_INFO.
+/* pub fn SetProcessValidCallTargets(
+ hProcess: HANDLE,
+ VirtualAddress: PVOID,
+ RegionSize: SIZE_T,
+ NumberOfOffsets: ULONG,
+ OffsetInformation: PCFG_CALL_TARGET_INFO,
+ ) -> BOOL; */
+ pub fn VirtualAllocFromApp(
+ BaseAddress: PVOID,
+ Size: SIZE_T,
+ AllocationType: ULONG,
+ Protection: ULONG,
+ ) -> PVOID;
+ pub fn VirtualProtectFromApp(
+ Address: PVOID,
+ Size: SIZE_T,
+ NewProtection: ULONG,
+ OldProtection: PULONG,
+ ) -> BOOL;
+ pub fn OpenFileMappingFromApp(
+ DesiredAccess: ULONG,
+ InheritHandle: BOOL,
+ Name: PCWSTR,
+ ) -> HANDLE;
+}
+// TODO: Under WINAPI_PARTITION_APP, define CreateFileMappingW, MapViewOfFile, VirtualAlloc,
+// VirtualProtect, and OpenFileMappingW as wrappers around the *FromApp functions.
+ENUM!{enum WIN32_MEMORY_INFORMATION_CLASS {
+ MemoryRegionInfo,
+}}
+STRUCT!{struct WIN32_MEMORY_REGION_INFORMATION {
+ AllocationBase: PVOID,
+ AllocationProtect: ULONG,
+ u: WIN32_MEMORY_REGION_INFORMATION_u,
+ RegionSize: SIZE_T,
+ CommitSize: SIZE_T,
+}}
+UNION!{union WIN32_MEMORY_REGION_INFORMATION_u {
+ [u32; 1],
+ Flags Flags_mut: ULONG,
+ s s_mut: WIN32_MEMORY_REGION_INFORMATION_u_s,
+}}
+STRUCT!{struct WIN32_MEMORY_REGION_INFORMATION_u_s {
+ Bitfield: ULONG,
+}}
+BITFIELD!{WIN32_MEMORY_REGION_INFORMATION_u_s Bitfield: ULONG [
+ Private set_Private[0..1],
+ MappedDataFile set_MappedDataFile[1..2],
+ MappedImage set_MappedImage[2..3],
+ MappedPageFile set_MappedPageFile[3..4],
+ MappedPhysical set_MappedPhysical[4..5],
+ DirectMapped set_DirectMapped[5..6],
+ Reserved set_Reserved[6..32],
+]}
+// TODO: Need to resolve issue #323 first.
+/*extern "system" {
+ pub fn QueryVirtualMemoryInformation(
+ Process: HANDLE,
+ VirtualAddress: *const VOID,
+ MemoryInformationClass: WIN32_MEMORY_INFORMATION_CLASS,
+ MemoryInformation: PVOID,
+ MemoryInformationSize: SIZE_T,
+ ReturnSize: PSIZE_T,
+ ) -> BOOL;
+ pub fn MapViewOfFileNuma2(
+ FileMappingHandle: HANDLE,
+ ProcessHandle: HANDLE,
+ Offset: ULONG64,
+ BaseAddress: PVOID,
+ ViewSize: SIZE_T,
+ AllocationType: ULONG,
+ PageProtection: ULONG,
+ PreferredNode: ULONG,
+ ) -> PVOID;
+}
+#[inline]
+pub unsafe fn MapViewOfFile2(
+ FileMappingHandle: HANDLE,
+ ProcessHandle: HANDLE,
+ Offset: ULONG64,
+ BaseAddress: PVOID,
+ ViewSize: SIZE_T,
+ AllocationType: ULONG,
+ PageProtection: ULONG,
+) -> PVOID {
+ MapViewOfFileNuma2(FileMappingHandle,
+ ProcessHandle,
+ Offset,
+ BaseAddress,
+ ViewSize,
+ AllocationType,
+ PageProtection,
+ NUMA_NO_PREFERRED_NODE)
+}*/
+extern "system" {
+ pub fn UnmapViewOfFile2(
+ ProcessHandle: HANDLE,
+ BaseAddress: PVOID,
+ UnmapFlags: ULONG,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/minschannel.rs b/vendor/winapi/src/um/minschannel.rs
new file mode 100644
index 000000000..ba3ca4f29
--- /dev/null
+++ b/vendor/winapi/src/um/minschannel.rs
@@ -0,0 +1,58 @@
+// 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.
+//! Public Definitions for MIN SCHANNEL Security Provider
+use shared::guiddef::GUID;
+use shared::minwindef::{BOOL, DWORD};
+use um::wincrypt::ALG_ID;
+use um::winnt::LPWSTR;
+pub const SECPKG_ATTR_ISSUER_LIST: DWORD = 0x50;
+pub const SECPKG_ATTR_REMOTE_CRED: DWORD = 0x51;
+pub const SECPKG_ATTR_LOCAL_CRED: DWORD = 0x52;
+pub const SECPKG_ATTR_REMOTE_CERT_CONTEXT: DWORD = 0x53;
+pub const SECPKG_ATTR_LOCAL_CERT_CONTEXT: DWORD = 0x54;
+pub const SECPKG_ATTR_ROOT_STORE: DWORD = 0x55;
+pub const SECPKG_ATTR_SUPPORTED_ALGS: DWORD = 0x56;
+pub const SECPKG_ATTR_CIPHER_STRENGTHS: DWORD = 0x57;
+pub const SECPKG_ATTR_SUPPORTED_PROTOCOLS: DWORD = 0x58;
+pub const SECPKG_ATTR_ISSUER_LIST_EX: DWORD = 0x59;
+pub const SECPKG_ATTR_CONNECTION_INFO: DWORD = 0x5a;
+pub const SECPKG_ATTR_EAP_KEY_BLOCK: DWORD = 0x5b;
+pub const SECPKG_ATTR_MAPPED_CRED_ATTR: DWORD = 0x5c;
+pub const SECPKG_ATTR_SESSION_INFO: DWORD = 0x5d;
+pub const SECPKG_ATTR_APP_DATA: DWORD = 0x5e;
+pub const SECPKG_ATTR_REMOTE_CERTIFICATES: DWORD = 0x5F;
+pub const SECPKG_ATTR_CLIENT_CERT_POLICY: DWORD = 0x60;
+pub const SECPKG_ATTR_CC_POLICY_RESULT: DWORD = 0x61;
+pub const SECPKG_ATTR_USE_NCRYPT: DWORD = 0x62;
+pub const SECPKG_ATTR_LOCAL_CERT_INFO: DWORD = 0x63;
+pub const SECPKG_ATTR_CIPHER_INFO: DWORD = 0x64;
+pub const SECPKG_ATTR_EAP_PRF_INFO: DWORD = 0x65;
+pub const SECPKG_ATTR_SUPPORTED_SIGNATURES: DWORD = 0x66;
+pub const SECPKG_ATTR_REMOTE_CERT_CHAIN: DWORD = 0x67;
+pub const SECPKG_ATTR_UI_INFO: DWORD = 0x68;
+pub const SECPKG_ATTR_EARLY_START: DWORD = 0x69;
+STRUCT!{struct SecPkgCred_SupportedAlgs {
+ cSupportedAlgs: DWORD,
+ palgSupportedAlgs: *mut ALG_ID,
+}}
+STRUCT!{struct SecPkgCred_CipherStrengths {
+ dwMinimumCipherStrength: DWORD,
+ dwMaximumCipherStrength: DWORD,
+}}
+STRUCT!{struct SecPkgCred_SupportedProtocols {
+ grbitProtocol: DWORD,
+}}
+STRUCT!{struct SecPkgCred_ClientCertPolicy {
+ dwFlags: DWORD,
+ guidPolicyId: GUID,
+ dwCertFlags: DWORD,
+ dwUrlRetrievalTimeout: DWORD,
+ fCheckRevocationFreshnessTime: BOOL,
+ dwRevocationFreshnessTime: DWORD,
+ fOmitUsageCheck: BOOL,
+ pwszSslCtlStoreName: LPWSTR,
+ pwszSslCtlIdentifier: LPWSTR,
+}}
diff --git a/vendor/winapi/src/um/minwinbase.rs b/vendor/winapi/src/um/minwinbase.rs
new file mode 100644
index 000000000..b414af1ba
--- /dev/null
+++ b/vendor/winapi/src/um/minwinbase.rs
@@ -0,0 +1,337 @@
+// 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
+//! This module defines the 32-Bit Windows Base APIs
+use shared::basetsd::ULONG_PTR;
+use shared::minwindef::{BOOL, BYTE, DWORD, FILETIME, HMODULE, LPVOID, MAX_PATH, UINT, ULONG, WORD};
+use shared::ntstatus::{
+ STATUS_ACCESS_VIOLATION, STATUS_ARRAY_BOUNDS_EXCEEDED, STATUS_BREAKPOINT,
+ STATUS_CONTROL_C_EXIT, STATUS_DATATYPE_MISALIGNMENT, STATUS_FLOAT_DENORMAL_OPERAND,
+ STATUS_FLOAT_DIVIDE_BY_ZERO, STATUS_FLOAT_INEXACT_RESULT, STATUS_FLOAT_INVALID_OPERATION,
+ STATUS_FLOAT_OVERFLOW, STATUS_FLOAT_STACK_CHECK, STATUS_FLOAT_UNDERFLOW,
+ STATUS_GUARD_PAGE_VIOLATION, STATUS_ILLEGAL_INSTRUCTION, STATUS_INTEGER_DIVIDE_BY_ZERO,
+ STATUS_INTEGER_OVERFLOW, STATUS_INVALID_DISPOSITION, STATUS_INVALID_HANDLE,
+ STATUS_IN_PAGE_ERROR, STATUS_NONCONTINUABLE_EXCEPTION, STATUS_PENDING,
+ STATUS_POSSIBLE_DEADLOCK, STATUS_PRIVILEGED_INSTRUCTION, STATUS_SINGLE_STEP,
+ STATUS_STACK_OVERFLOW,
+};
+use um::winnt::{
+ CHAR, EXCEPTION_RECORD, HANDLE, LPSTR, LPWSTR, PCONTEXT, PRTL_CRITICAL_SECTION,
+ PRTL_CRITICAL_SECTION_DEBUG, PVOID, RTL_CRITICAL_SECTION, RTL_CRITICAL_SECTION_DEBUG, WCHAR,
+};
+//MoveMemory
+//CopyMemory
+//FillMemory
+//ZeroMemory
+STRUCT!{struct SECURITY_ATTRIBUTES {
+ nLength: DWORD,
+ lpSecurityDescriptor: LPVOID,
+ bInheritHandle: BOOL,
+}}
+pub type PSECURITY_ATTRIBUTES = *mut SECURITY_ATTRIBUTES;
+pub type LPSECURITY_ATTRIBUTES = *mut SECURITY_ATTRIBUTES;
+STRUCT!{struct OVERLAPPED_u_s {
+ Offset: DWORD,
+ OffsetHigh: DWORD,
+}}
+UNION!{union OVERLAPPED_u {
+ [u32; 2] [u64; 1],
+ s s_mut: OVERLAPPED_u_s,
+ Pointer Pointer_mut: PVOID,
+}}
+STRUCT!{struct OVERLAPPED {
+ Internal: ULONG_PTR,
+ InternalHigh: ULONG_PTR,
+ u: OVERLAPPED_u,
+ hEvent: HANDLE,
+}}
+pub type LPOVERLAPPED = *mut OVERLAPPED;
+STRUCT!{struct OVERLAPPED_ENTRY {
+ lpCompletionKey: ULONG_PTR,
+ lpOverlapped: LPOVERLAPPED,
+ Internal: ULONG_PTR,
+ dwNumberOfBytesTransferred: DWORD,
+}}
+pub type LPOVERLAPPED_ENTRY = *mut OVERLAPPED_ENTRY;
+STRUCT!{struct SYSTEMTIME {
+ wYear: WORD,
+ wMonth: WORD,
+ wDayOfWeek: WORD,
+ wDay: WORD,
+ wHour: WORD,
+ wMinute: WORD,
+ wSecond: WORD,
+ wMilliseconds: WORD,
+}}
+pub type PSYSTEMTIME = *mut SYSTEMTIME;
+pub type LPSYSTEMTIME = *mut SYSTEMTIME;
+STRUCT!{struct WIN32_FIND_DATAA {
+ dwFileAttributes: DWORD,
+ ftCreationTime: FILETIME,
+ ftLastAccessTime: FILETIME,
+ ftLastWriteTime: FILETIME,
+ nFileSizeHigh: DWORD,
+ nFileSizeLow: DWORD,
+ dwReserved0: DWORD,
+ dwReserved1: DWORD,
+ cFileName: [CHAR; MAX_PATH],
+ cAlternateFileName: [CHAR; 14],
+}}
+pub type PWIN32_FIND_DATAA = *mut WIN32_FIND_DATAA;
+pub type LPWIN32_FIND_DATAA = *mut WIN32_FIND_DATAA;
+STRUCT!{struct WIN32_FIND_DATAW {
+ dwFileAttributes: DWORD,
+ ftCreationTime: FILETIME,
+ ftLastAccessTime: FILETIME,
+ ftLastWriteTime: FILETIME,
+ nFileSizeHigh: DWORD,
+ nFileSizeLow: DWORD,
+ dwReserved0: DWORD,
+ dwReserved1: DWORD,
+ cFileName: [WCHAR; MAX_PATH],
+ cAlternateFileName: [WCHAR; 14],
+}}
+pub type PWIN32_FIND_DATAW = *mut WIN32_FIND_DATAW;
+pub type LPWIN32_FIND_DATAW = *mut WIN32_FIND_DATAW;
+ENUM!{enum FINDEX_INFO_LEVELS {
+ FindExInfoStandard,
+ FindExInfoBasic,
+ FindExInfoMaxInfoLevel,
+}}
+pub const FIND_FIRST_EX_CASE_SENSITIVE: DWORD = 0x00000001;
+pub const FIND_FIRST_EX_LARGE_FETCH: DWORD = 0x00000002;
+ENUM!{enum FINDEX_SEARCH_OPS {
+ FindExSearchNameMatch,
+ FindExSearchLimitToDirectories,
+ FindExSearchLimitToDevices,
+ FindExSearchMaxSearchOp,
+}}
+ENUM!{enum GET_FILEEX_INFO_LEVELS {
+ GetFileExInfoStandard,
+ GetFileExMaxInfoLevel,
+}}
+ENUM!{enum FILE_INFO_BY_HANDLE_CLASS {
+ FileBasicInfo,
+ FileStandardInfo,
+ FileNameInfo,
+ FileRenameInfo,
+ FileDispositionInfo,
+ FileAllocationInfo,
+ FileEndOfFileInfo,
+ FileStreamInfo,
+ FileCompressionInfo,
+ FileAttributeTagInfo,
+ FileIdBothDirectoryInfo,
+ FileIdBothDirectoryRestartInfo,
+ FileIoPriorityHintInfo,
+ FileRemoteProtocolInfo,
+ FileFullDirectoryInfo,
+ FileFullDirectoryRestartInfo,
+ FileStorageInfo,
+ FileAlignmentInfo,
+ FileIdInfo,
+ FileIdExtdDirectoryInfo,
+ FileIdExtdDirectoryRestartInfo,
+ FileDispositionInfoEx,
+ FileRenameInfoEx,
+ MaximumFileInfoByHandleClass,
+}}
+pub type PFILE_INFO_BY_HANDLE_CLASS = *mut FILE_INFO_BY_HANDLE_CLASS;
+pub type CRITICAL_SECTION = RTL_CRITICAL_SECTION;
+pub type PCRITICAL_SECTION = PRTL_CRITICAL_SECTION;
+pub type LPCRITICAL_SECTION = PRTL_CRITICAL_SECTION;
+pub type CRITICAL_SECTION_DEBUG = RTL_CRITICAL_SECTION_DEBUG;
+pub type PCRITICAL_SECTION_DEBUG = PRTL_CRITICAL_SECTION_DEBUG;
+pub type LPCRITICAL_SECTION_DEBUG = PRTL_CRITICAL_SECTION_DEBUG;
+FN!{stdcall LPOVERLAPPED_COMPLETION_ROUTINE(
+ dwErrorCode: DWORD,
+ dwNumberOfBytesTransfered: DWORD,
+ lpOverlapped: LPOVERLAPPED,
+) -> ()}
+pub const LOCKFILE_FAIL_IMMEDIATELY: DWORD = 0x00000001;
+pub const LOCKFILE_EXCLUSIVE_LOCK: DWORD = 0x00000002;
+STRUCT!{struct PROCESS_HEAP_ENTRY_Block {
+ hMem: HANDLE,
+ dwReserved: [DWORD; 3],
+}}
+STRUCT!{struct PROCESS_HEAP_ENTRY_Region {
+ dwCommittedSize: DWORD,
+ dwUnCommittedSize: DWORD,
+ lpFirstBlock: LPVOID,
+ lpLastBlock: LPVOID,
+}}
+UNION!{union PROCESS_HEAP_ENTRY_u {
+ [u32; 4] [u64; 3],
+ Block Block_mut: PROCESS_HEAP_ENTRY_Block,
+ Region Region_mut: PROCESS_HEAP_ENTRY_Region,
+}}
+STRUCT!{struct PROCESS_HEAP_ENTRY {
+ lpData: PVOID,
+ cbData: DWORD,
+ cbOverhead: BYTE,
+ iRegionIndex: BYTE,
+ wFlags: WORD,
+ u: PROCESS_HEAP_ENTRY_u,
+}}
+pub type LPPROCESS_HEAP_ENTRY = *mut PROCESS_HEAP_ENTRY;
+pub type PPROCESS_HEAP_ENTRY = *mut PROCESS_HEAP_ENTRY;
+pub const PROCESS_HEAP_REGION: WORD = 0x0001;
+pub const PROCESS_HEAP_UNCOMMITTED_RANGE: WORD = 0x0002;
+pub const PROCESS_HEAP_ENTRY_BUSY: WORD = 0x0004;
+pub const PROCESS_HEAP_SEG_ALLOC: WORD = 0x0008;
+pub const PROCESS_HEAP_ENTRY_MOVEABLE: WORD = 0x0010;
+pub const PROCESS_HEAP_ENTRY_DDESHARE: WORD = 0x0020;
+STRUCT!{struct REASON_CONTEXT_Detailed {
+ LocalizedReasonModule: HMODULE,
+ LocalizedReasonId: ULONG,
+ ReasonStringCount: ULONG,
+ ReasonStrings: *mut LPWSTR,
+}}
+UNION!{union REASON_CONTEXT_Reason {
+ [u32; 4] [u64; 3],
+ Detailed Detailed_mut: REASON_CONTEXT_Detailed,
+ SimpleReasonString SimpleReasonString_mut: LPWSTR,
+}}
+STRUCT!{struct REASON_CONTEXT {
+ Version: ULONG,
+ Flags: DWORD,
+ Reason: REASON_CONTEXT_Reason,
+}}
+pub type PREASON_CONTEXT = *mut REASON_CONTEXT;
+pub const EXCEPTION_DEBUG_EVENT: DWORD = 1;
+pub const CREATE_THREAD_DEBUG_EVENT: DWORD = 2;
+pub const CREATE_PROCESS_DEBUG_EVENT: DWORD = 3;
+pub const EXIT_THREAD_DEBUG_EVENT: DWORD = 4;
+pub const EXIT_PROCESS_DEBUG_EVENT: DWORD = 5;
+pub const LOAD_DLL_DEBUG_EVENT: DWORD = 6;
+pub const UNLOAD_DLL_DEBUG_EVENT: DWORD = 7;
+pub const OUTPUT_DEBUG_STRING_EVENT: DWORD = 8;
+pub const RIP_EVENT: DWORD = 9;
+FN!{stdcall PTHREAD_START_ROUTINE(
+ lpThreadParameter: LPVOID,
+) -> DWORD}
+pub type LPTHREAD_START_ROUTINE = PTHREAD_START_ROUTINE;
+FN!{stdcall PENCLAVE_ROUTINE(
+ lpThreadParameter: LPVOID,
+) -> DWORD}
+pub type LPENCLAVE_ROUTINE = PENCLAVE_ROUTINE;
+STRUCT!{struct EXCEPTION_DEBUG_INFO {
+ ExceptionRecord: EXCEPTION_RECORD,
+ dwFirstChance: DWORD,
+}}
+pub type LPEXCEPTION_DEBUG_INFO = *mut EXCEPTION_DEBUG_INFO;
+STRUCT!{struct CREATE_THREAD_DEBUG_INFO {
+ hThread: HANDLE,
+ lpThreadLocalBase: LPVOID,
+ lpStartAddress: LPTHREAD_START_ROUTINE,
+}}
+pub type LPCREATE_THREAD_DEBUG_INFO = *mut CREATE_THREAD_DEBUG_INFO;
+STRUCT!{struct CREATE_PROCESS_DEBUG_INFO {
+ hFile: HANDLE,
+ hProcess: HANDLE,
+ hThread: HANDLE,
+ lpBaseOfImage: LPVOID,
+ dwDebugInfoFileOffset: DWORD,
+ nDebugInfoSize: DWORD,
+ lpThreadLocalBase: LPVOID,
+ lpStartAddress: LPTHREAD_START_ROUTINE,
+ lpImageName: LPVOID,
+ fUnicode: WORD,
+}}
+pub type LPCREATE_PROCESS_DEBUG_INFO = *mut CREATE_PROCESS_DEBUG_INFO;
+STRUCT!{struct EXIT_THREAD_DEBUG_INFO {
+ dwExitCode: DWORD,
+}}
+pub type LPEXIT_THREAD_DEBUG_INFO = *mut EXIT_THREAD_DEBUG_INFO;
+STRUCT!{struct EXIT_PROCESS_DEBUG_INFO {
+ dwExitCode: DWORD,
+}}
+pub type LPEXIT_PROCESS_DEBUG_INFO = *mut EXIT_PROCESS_DEBUG_INFO;
+STRUCT!{struct LOAD_DLL_DEBUG_INFO {
+ hFile: HANDLE,
+ lpBaseOfDll: LPVOID,
+ dwDebugInfoFileOffset: DWORD,
+ nDebugInfoSize: DWORD,
+ lpImageName: LPVOID,
+ fUnicode: WORD,
+}}
+pub type LPLOAD_DLL_DEBUG_INFO = *mut LOAD_DLL_DEBUG_INFO;
+STRUCT!{struct UNLOAD_DLL_DEBUG_INFO {
+ lpBaseOfDll: LPVOID,
+}}
+pub type LPUNLOAD_DLL_DEBUG_INFO = *mut UNLOAD_DLL_DEBUG_INFO;
+STRUCT!{struct OUTPUT_DEBUG_STRING_INFO {
+ lpDebugStringData: LPSTR,
+ fUnicode: WORD,
+ nDebugStringLength: WORD,
+}}
+pub type LPOUTPUT_DEBUG_STRING_INFO = *mut OUTPUT_DEBUG_STRING_INFO;
+STRUCT!{struct RIP_INFO {
+ dwError: DWORD,
+ dwType: DWORD,
+}}
+pub type LPRIP_INFO = *mut RIP_INFO;
+UNION!{union DEBUG_EVENT_u {
+ [u32; 21] [u64; 20],
+ Exception Exception_mut: EXCEPTION_DEBUG_INFO,
+ CreateThread CreateThread_mut: CREATE_THREAD_DEBUG_INFO,
+ CreateProcessInfo CreateProcessInfo_mut: CREATE_PROCESS_DEBUG_INFO,
+ ExitThread ExitThread_mut: EXIT_THREAD_DEBUG_INFO,
+ ExitProcess ExitProcess_mut: EXIT_PROCESS_DEBUG_INFO,
+ LoadDll LoadDll_mut: LOAD_DLL_DEBUG_INFO,
+ UnloadDll UnloadDll_mut: UNLOAD_DLL_DEBUG_INFO,
+ DebugString DebugString_mut: OUTPUT_DEBUG_STRING_INFO,
+ RipInfo RipInfo_mut: RIP_INFO,
+}}
+STRUCT!{struct DEBUG_EVENT {
+ dwDebugEventCode: DWORD,
+ dwProcessId: DWORD,
+ dwThreadId: DWORD,
+ u: DEBUG_EVENT_u,
+}}
+pub type LPDEBUG_EVENT = *mut DEBUG_EVENT;
+pub type LPCONTEXT = PCONTEXT;
+pub const STILL_ACTIVE: DWORD = STATUS_PENDING as u32;
+pub const EXCEPTION_ACCESS_VIOLATION: DWORD = STATUS_ACCESS_VIOLATION as u32;
+pub const EXCEPTION_DATATYPE_MISALIGNMENT: DWORD = STATUS_DATATYPE_MISALIGNMENT as u32;
+pub const EXCEPTION_BREAKPOINT: DWORD = STATUS_BREAKPOINT as u32;
+pub const EXCEPTION_SINGLE_STEP: DWORD = STATUS_SINGLE_STEP as u32;
+pub const EXCEPTION_ARRAY_BOUNDS_EXCEEDED: DWORD = STATUS_ARRAY_BOUNDS_EXCEEDED as u32;
+pub const EXCEPTION_FLT_DENORMAL_OPERAND: DWORD = STATUS_FLOAT_DENORMAL_OPERAND as u32;
+pub const EXCEPTION_FLT_DIVIDE_BY_ZERO: DWORD = STATUS_FLOAT_DIVIDE_BY_ZERO as u32;
+pub const EXCEPTION_FLT_INEXACT_RESULT: DWORD = STATUS_FLOAT_INEXACT_RESULT as u32;
+pub const EXCEPTION_FLT_INVALID_OPERATION: DWORD = STATUS_FLOAT_INVALID_OPERATION as u32;
+pub const EXCEPTION_FLT_OVERFLOW: DWORD = STATUS_FLOAT_OVERFLOW as u32;
+pub const EXCEPTION_FLT_STACK_CHECK: DWORD = STATUS_FLOAT_STACK_CHECK as u32;
+pub const EXCEPTION_FLT_UNDERFLOW: DWORD = STATUS_FLOAT_UNDERFLOW as u32;
+pub const EXCEPTION_INT_DIVIDE_BY_ZERO: DWORD = STATUS_INTEGER_DIVIDE_BY_ZERO as u32;
+pub const EXCEPTION_INT_OVERFLOW: DWORD = STATUS_INTEGER_OVERFLOW as u32;
+pub const EXCEPTION_PRIV_INSTRUCTION: DWORD = STATUS_PRIVILEGED_INSTRUCTION as u32;
+pub const EXCEPTION_IN_PAGE_ERROR: DWORD = STATUS_IN_PAGE_ERROR as u32;
+pub const EXCEPTION_ILLEGAL_INSTRUCTION: DWORD = STATUS_ILLEGAL_INSTRUCTION as u32;
+pub const EXCEPTION_NONCONTINUABLE_EXCEPTION: DWORD = STATUS_NONCONTINUABLE_EXCEPTION as u32;
+pub const EXCEPTION_STACK_OVERFLOW: DWORD = STATUS_STACK_OVERFLOW as u32;
+pub const EXCEPTION_INVALID_DISPOSITION: DWORD = STATUS_INVALID_DISPOSITION as u32;
+pub const EXCEPTION_GUARD_PAGE: DWORD = STATUS_GUARD_PAGE_VIOLATION as u32;
+pub const EXCEPTION_INVALID_HANDLE: DWORD = STATUS_INVALID_HANDLE as u32;
+pub const EXCEPTION_POSSIBLE_DEADLOCK: DWORD = STATUS_POSSIBLE_DEADLOCK as u32;
+pub const CONTROL_C_EXIT: DWORD = STATUS_CONTROL_C_EXIT as u32;
+pub const LMEM_FIXED: UINT = 0x0000;
+pub const LMEM_MOVEABLE: UINT = 0x0002;
+pub const LMEM_NOCOMPACT: UINT = 0x0010;
+pub const LMEM_NODISCARD: UINT = 0x0020;
+pub const LMEM_ZEROINIT: UINT = 0x0040;
+pub const LMEM_MODIFY: UINT = 0x0080;
+pub const LMEM_DISCARDABLE: UINT = 0x0F00;
+pub const LMEM_VALID_FLAGS: UINT = 0x0F72;
+pub const LMEM_INVALID_HANDLE: UINT = 0x8000;
+pub const LHND: UINT = LMEM_MOVEABLE | LMEM_ZEROINIT;
+pub const LPTR: UINT = LMEM_FIXED | LMEM_ZEROINIT;
+pub const NONZEROLHND: UINT = LMEM_MOVEABLE;
+pub const NONZEROLPTR: UINT = LMEM_FIXED;
+//LocalDiscard
+pub const LMEM_DISCARDED: UINT = 0x4000;
+pub const LMEM_LOCKCOUNT: UINT = 0x00FF;
+pub const NUMA_NO_PREFERRED_NODE: DWORD = -1i32 as u32;
diff --git a/vendor/winapi/src/um/mmdeviceapi.rs b/vendor/winapi/src/um/mmdeviceapi.rs
new file mode 100644
index 000000000..9ab810f0c
--- /dev/null
+++ b/vendor/winapi/src/um/mmdeviceapi.rs
@@ -0,0 +1,220 @@
+// 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
+//! this ALWAYS GENERATED file contains the definitions for the interfaces
+use ctypes::c_void;
+use shared::guiddef::{GUID, REFIID};
+use shared::minwindef::{DWORD, LPARAM, LPVOID, UINT};
+// use shared::winerror::{ERROR_NOT_FOUND, ERROR_UNSUPPORTED_TYPE, HRESULT_FROM_WIN32};
+use shared::wtypes::PROPERTYKEY;
+use um::propidl::PROPVARIANT;
+use um::propsys::IPropertyStore;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPCWSTR, LPWSTR};
+// pub const E_NOTFOUND: HRESULT = HRESULT_FROM_WIN32(ERROR_NOT_FOUND);
+// pub const E_UNSUPPORTED_TYPE: HRESULT = HRESULT_FROM_WIN32(ERROR_UNSUPPORTED_TYPE);
+pub const DEVICE_STATE_ACTIVE: DWORD = 0x00000001;
+pub const DEVICE_STATE_DISABLED: DWORD = 0x00000002;
+pub const DEVICE_STATE_NOTPRESENT: DWORD = 0x00000004;
+pub const DEVICE_STATE_UNPLUGGED: DWORD = 0x00000008;
+pub const DEVICE_STATEMASK_ALL: DWORD = 0x0000000F;
+DEFINE_PROPERTYKEY!{PKEY_AudioEndpoint_FormFactor,
+ 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 0}
+DEFINE_PROPERTYKEY!{PKEY_AudioEndpoint_ControlPanelPageProvider,
+ 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 1}
+DEFINE_PROPERTYKEY!{PKEY_AudioEndpoint_Association,
+ 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 2}
+DEFINE_PROPERTYKEY!{PKEY_AudioEndpoint_PhysicalSpeakers,
+ 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 3}
+DEFINE_PROPERTYKEY!{PKEY_AudioEndpoint_GUID,
+ 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 4}
+DEFINE_PROPERTYKEY!{PKEY_AudioEndpoint_Disable_SysFx,
+ 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 5}
+pub const ENDPOINT_SYSFX_ENABLED: DWORD = 0x00000000;
+pub const ENDPOINT_SYSFX_DISABLED: DWORD = 0x00000001;
+DEFINE_PROPERTYKEY!{PKEY_AudioEndpoint_FullRangeSpeakers,
+ 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 6}
+DEFINE_PROPERTYKEY!{PKEY_AudioEndpoint_Supports_EventDriven_Mode,
+ 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 7}
+DEFINE_PROPERTYKEY!{PKEY_AudioEndpoint_JackSubType,
+ 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 8}
+DEFINE_PROPERTYKEY!{PKEY_AudioEndpoint_Default_VolumeInDb,
+ 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 9}
+DEFINE_PROPERTYKEY!{PKEY_AudioEngine_DeviceFormat,
+ 0xf19f064d, 0x82c, 0x4e27, 0xbc, 0x73, 0x68, 0x82, 0xa1, 0xbb, 0x8e, 0x4c, 0}
+DEFINE_PROPERTYKEY!{PKEY_AudioEngine_OEMFormat,
+ 0xe4870e26, 0x3cc5, 0x4cd2, 0xba, 0x46, 0xca, 0xa, 0x9a, 0x70, 0xed, 0x4, 3}
+DEFINE_PROPERTYKEY!{PKEY_AudioEndpointLogo_IconEffects,
+ 0xf1ab780d, 0x2010, 0x4ed3, 0xa3, 0xa6, 0x8b, 0x87, 0xf0, 0xf0, 0xc4, 0x76, 0}
+DEFINE_PROPERTYKEY!{PKEY_AudioEndpointLogo_IconPath,
+ 0xf1ab780d, 0x2010, 0x4ed3, 0xa3, 0xa6, 0x8b, 0x87, 0xf0, 0xf0, 0xc4, 0x76, 1}
+DEFINE_PROPERTYKEY!{PKEY_AudioEndpointSettings_MenuText,
+ 0x14242002, 0x0320, 0x4de4, 0x95, 0x55, 0xa7, 0xd8, 0x2b, 0x73, 0xc2, 0x86, 0}
+DEFINE_PROPERTYKEY!{PKEY_AudioEndpointSettings_LaunchContract,
+ 0x14242002, 0x0320, 0x4de4, 0x95, 0x55, 0xa7, 0xd8, 0x2b, 0x73, 0xc2, 0x86, 1}
+STRUCT!{struct DIRECTX_AUDIO_ACTIVATION_PARAMS {
+ cbDirectXAudioActivationParams: DWORD,
+ guidAudioSession: GUID,
+ dwAudioStreamFlags: DWORD,
+}}
+pub type PDIRECTX_AUDIO_ACTIVATION_PARAMS = *mut DIRECTX_AUDIO_ACTIVATION_PARAMS;
+ENUM!{enum EDataFlow {
+ eRender,
+ eCapture,
+ eAll,
+ EDataFlow_enum_count,
+}}
+ENUM!{enum ERole {
+ eConsole,
+ eMultimedia,
+ eCommunications,
+ ERole_enum_count,
+}}
+ENUM!{enum EndpointFormFactor {
+ RemoteNetworkDevice,
+ Speakers,
+ LineLevel,
+ Headphones,
+ Microphone,
+ Headset,
+ Handset,
+ UnknownDigitalPassthrough,
+ SPDIF,
+ DigitalAudioDisplayDevice,
+ UnknownFormFactor,
+ EndpointFormFactor_enum_count,
+}}
+pub const HDMI: EndpointFormFactor = DigitalAudioDisplayDevice;
+DEFINE_GUID!{DEVINTERFACE_AUDIO_RENDER,
+ 0xe6327cad, 0xdcec, 0x4949, 0xae, 0x8a, 0x99, 0x1e, 0x97, 0x6a, 0x79, 0xd2}
+DEFINE_GUID!{DEVINTERFACE_AUDIO_CAPTURE,
+ 0x2eef81be, 0x33fa, 0x4800, 0x96, 0x70, 0x1c, 0xd4, 0x74, 0x97, 0x2c, 0x3f}
+DEFINE_GUID!{DEVINTERFACE_MIDI_OUTPUT,
+ 0x6dc23320, 0xab33, 0x4ce4, 0x80, 0xd4, 0xbb, 0xb3, 0xeb, 0xbf, 0x28, 0x14}
+DEFINE_GUID!{DEVINTERFACE_MIDI_INPUT,
+ 0x504be32c, 0xccf6, 0x4d2c, 0xb7, 0x3f, 0x6f, 0x8b, 0x37, 0x47, 0xe2, 0x2b}
+RIDL!{#[uuid(0x7991eec9, 0x7e89, 0x4d85, 0x83, 0x90, 0x6c, 0x70, 0x3c, 0xec, 0x60, 0xc0)]
+interface IMMNotificationClient(IMMNotificationClientVtbl): IUnknown(IUnknownVtbl) {
+ fn OnDeviceStateChanged(
+ pwstrDeviceId: LPCWSTR,
+ dwNewState: DWORD,
+ ) -> HRESULT,
+ fn OnDeviceAdded(
+ pwstrDeviceId: LPCWSTR,
+ ) -> HRESULT,
+ fn OnDeviceRemoved(
+ pwstrDeviceId: LPCWSTR,
+ ) -> HRESULT,
+ fn OnDefaultDeviceChanged(
+ flow: EDataFlow,
+ role: ERole,
+ pwstrDefaultDeviceId: LPCWSTR,
+ ) -> HRESULT,
+ fn OnPropertyValueChanged(
+ pwstrDeviceId: LPCWSTR,
+ key: PROPERTYKEY,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xd666063f, 0x1587, 0x4e43, 0x81, 0xf1, 0xb9, 0x48, 0xe8, 0x07, 0x36, 0x3f)]
+interface IMMDevice(IMMDeviceVtbl): IUnknown(IUnknownVtbl) {
+ fn Activate(
+ iid: REFIID,
+ dwClsCtx: DWORD,
+ pActivationParams: *mut PROPVARIANT,
+ ppInterface: *mut LPVOID,
+ ) -> HRESULT,
+ fn OpenPropertyStore(
+ stgmAccess: DWORD,
+ ppProperties: *mut *mut IPropertyStore,
+ ) -> HRESULT,
+ fn GetId(
+ ppstrId: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetState(
+ pdwState: *mut DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x0bd7a1be, 0x7a1a, 0x44db, 0x83, 0x97, 0xcc, 0x53, 0x92, 0x38, 0x7b, 0x5e)]
+interface IMMDeviceCollection(IMMDeviceCollectionVtbl): IUnknown(IUnknownVtbl) {
+ fn GetCount(
+ pcDevices: *const UINT,
+ ) -> HRESULT,
+ fn Item(
+ nDevice: UINT,
+ ppDevice: *mut *mut IMMDevice,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x1be09788, 0x6894, 0x4089, 0x85, 0x86, 0x9a, 0x2a, 0x6c, 0x26, 0x5a, 0xc5)]
+interface IMMEndpoint(IMMEndpointVtbl): IUnknown(IUnknownVtbl) {
+ fn GetDataFlow(
+ pDataFlow: *mut EDataFlow,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa95664d2, 0x9614, 0x4f35, 0xa7, 0x46, 0xde, 0x8d, 0xb6, 0x36, 0x17, 0xe6)]
+interface IMMDeviceEnumerator(IMMDeviceEnumeratorVtbl): IUnknown(IUnknownVtbl) {
+ fn EnumAudioEndpoints(
+ dataFlow: EDataFlow,
+ dwStateMask: DWORD,
+ ppDevices: *mut *mut IMMDeviceCollection,
+ ) -> HRESULT,
+ fn GetDefaultAudioEndpoint(
+ dataFlow: EDataFlow,
+ role: ERole,
+ ppEndpoint: *mut *mut IMMDevice,
+ ) -> HRESULT,
+ fn GetDevice(
+ pwstrId: LPCWSTR,
+ ppDevices: *mut *mut IMMDevice,
+ ) -> HRESULT,
+ fn RegisterEndpointNotificationCallback(
+ pClient: *mut IMMNotificationClient,
+ ) -> HRESULT,
+ fn UnregisterEndpointNotificationCallback(
+ pClient: *mut IMMNotificationClient,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3b0d0ea4, 0xd0a9, 0x4b0e, 0x93, 0x5b, 0x09, 0x51, 0x67, 0x46, 0xfa, 0xc0)]
+interface IMMDeviceActivator(IMMDeviceActivatorVtbl): IUnknown(IUnknownVtbl) {
+ fn Activate(
+ iid: REFIID,
+ pDevice: *mut IMMDevice,
+ pActivationParams: *mut PROPVARIANT,
+ ppInterface: *mut *mut c_void,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x41d949ab, 0x9862, 0x444a, 0x80, 0xf6, 0xc2, 0x61, 0x33, 0x4d, 0xa5, 0xeb)]
+interface IActivateAudioInterfaceCompletionHandler(IActivateAudioInterfaceCompletionHandlerVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn ActivateCompleted(
+ activateOperation: *mut IActivateAudioInterfaceAsyncOperation,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x72a22d78, 0xcde4, 0x431d, 0xb8, 0xcc, 0x84, 0x3a, 0x71, 0x19, 0x9b, 0x6d)]
+interface IActivateAudioInterfaceAsyncOperation(IActivateAudioInterfaceAsyncOperationVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn GetActivateResult(
+ activateResult: *mut HRESULT,
+ activatedInterface: *mut *mut IUnknown,
+ ) -> HRESULT,
+}}
+extern "system" {
+ pub fn ActivateAudioInterfaceAsync(
+ deviceInterfacePath: LPCWSTR,
+ riid: REFIID,
+ activationParams: *mut PROPVARIANT,
+ completionHandler: *mut IActivateAudioInterfaceCompletionHandler,
+ activationOperation: *mut *mut IActivateAudioInterfaceAsyncOperation,
+ ) -> HRESULT;
+}
+STRUCT!{struct AudioExtensionParams {
+ AddPageParam: LPARAM,
+ pEndpoint: *mut IMMDevice,
+ pPnpInterface: *mut IMMDevice,
+ pPnpDevnode: *mut IMMDevice,
+}}
+DEFINE_GUID!{CLSID_MMDeviceEnumerator,
+ 0xBCDE0395, 0xE52F, 0x467C, 0x8E, 0x3D, 0xC4, 0x57, 0x92, 0x91, 0x69, 0x2E}
+RIDL!{#[uuid(0xBCDE0395, 0xE52F, 0x467C, 0x8E, 0x3D, 0xC4, 0x57, 0x92, 0x91, 0x69, 0x2E)]
+class MMDeviceEnumerator;}
diff --git a/vendor/winapi/src/um/mmeapi.rs b/vendor/winapi/src/um/mmeapi.rs
new file mode 100644
index 000000000..cc5153b3b
--- /dev/null
+++ b/vendor/winapi/src/um/mmeapi.rs
@@ -0,0 +1,336 @@
+// 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::{DWORD_PTR, UINT_PTR};
+use shared::minwindef::{DWORD, LPBYTE, LPDWORD, LPWORD, PDWORD, UINT};
+use um::imm::LPUINT;
+use um::mmsystem::{
+ HMIDI, HMIDIIN, HMIDIOUT, HMIDISTRM, HWAVEIN, HWAVEOUT, LPCWAVEFORMATEX, LPHMIDIIN, LPHMIDIOUT,
+ LPHMIDISTRM, LPHWAVEIN, LPHWAVEOUT, LPMIDIHDR, LPMIDIINCAPSW, LPMIDIOUTCAPSW, LPMMTIME,
+ LPWAVEHDR, LPWAVEINCAPSW, LPWAVEOUTCAPSW, MMRESULT
+};
+use um::winnt::{LPWSTR, PVOID};
+extern "system" {
+ pub fn waveOutGetNumDevs() -> UINT;
+ // pub fn waveOutGetDevCapsA();
+ pub fn waveOutGetDevCapsW(
+ uDeviceID: UINT_PTR,
+ pwoc: LPWAVEOUTCAPSW,
+ cbwoc: UINT,
+ ) -> MMRESULT;
+ pub fn waveOutGetVolume(
+ hwo: HWAVEOUT,
+ pdwVolume: LPDWORD,
+ ) -> MMRESULT;
+ pub fn waveOutSetVolume(
+ hwo: HWAVEOUT,
+ dwVolume: DWORD,
+ ) -> MMRESULT;
+ // pub fn waveOutGetErrorTextA();
+ pub fn waveOutGetErrorTextW(
+ mmrError: MMRESULT,
+ pszText: LPWSTR,
+ cchText: UINT,
+ ) -> MMRESULT;
+ pub fn waveOutOpen(
+ phwo: LPHWAVEOUT,
+ uDeviceID: UINT,
+ pwfx: LPCWAVEFORMATEX,
+ dwCallback: DWORD_PTR,
+ dwInstance: DWORD_PTR,
+ fdwOpen: DWORD,
+ ) -> MMRESULT;
+ pub fn waveOutClose(
+ hwo: HWAVEOUT,
+ ) -> MMRESULT;
+ pub fn waveOutPrepareHeader(
+ hwo: HWAVEOUT,
+ pwh: LPWAVEHDR,
+ cbwh: UINT,
+ ) -> MMRESULT;
+ pub fn waveOutUnprepareHeader(
+ hwo: HWAVEOUT,
+ pwh: LPWAVEHDR,
+ cbwh: UINT,
+ ) -> MMRESULT;
+ pub fn waveOutWrite(
+ hwo: HWAVEOUT,
+ pwh: LPWAVEHDR,
+ cbwh: UINT,
+ ) -> MMRESULT;
+ pub fn waveOutPause(
+ hwo: HWAVEOUT,
+ ) -> MMRESULT;
+ pub fn waveOutRestart(
+ hwo: HWAVEOUT,
+ ) -> MMRESULT;
+ pub fn waveOutReset(
+ hwo: HWAVEOUT,
+ ) -> MMRESULT;
+ pub fn waveOutBreakLoop(
+ hwo: HWAVEOUT,
+ ) -> MMRESULT;
+ pub fn waveOutGetPosition(
+ hwo: HWAVEOUT,
+ pmmt: LPMMTIME,
+ cbmmt: UINT,
+ ) -> MMRESULT;
+ pub fn waveOutGetPitch(
+ hwo: HWAVEOUT,
+ pdwPitch: LPDWORD,
+ ) -> MMRESULT;
+ pub fn waveOutSetPitch(
+ hwo: HWAVEOUT,
+ dwPitch: DWORD,
+ ) -> MMRESULT;
+ pub fn waveOutGetPlaybackRate(
+ hwo: HWAVEOUT,
+ pdwRate: LPDWORD,
+ ) -> MMRESULT;
+ pub fn waveOutSetPlaybackRate(
+ hwo: HWAVEOUT,
+ dwRate: DWORD,
+ ) -> MMRESULT;
+ // pub fn waveOutGetID();
+ pub fn waveOutMessage(
+ hwo: HWAVEOUT,
+ uMsg: UINT,
+ dw1: DWORD_PTR,
+ dw2: DWORD_PTR,
+ ) -> MMRESULT;
+ pub fn waveInGetNumDevs() -> UINT;
+ // pub fn waveInGetDevCapsA();
+ pub fn waveInGetDevCapsW(
+ uDeviceID: UINT_PTR,
+ pwic: LPWAVEINCAPSW,
+ cbwic: UINT,
+ ) -> MMRESULT;
+ // pub fn waveInGetErrorTextA();
+ pub fn waveInGetErrorTextW(
+ mmrError: MMRESULT,
+ pszText: LPWSTR,
+ cchText: UINT,
+ ) -> MMRESULT;
+ pub fn waveInOpen(
+ phwi: LPHWAVEIN,
+ uDeviceID: UINT,
+ pwfx: LPCWAVEFORMATEX,
+ dwCallback: DWORD_PTR,
+ dwInstance: DWORD_PTR,
+ fdwOpen: DWORD,
+ ) -> MMRESULT;
+ pub fn waveInClose(
+ hwi: HWAVEIN,
+ ) -> MMRESULT;
+ pub fn waveInPrepareHeader(
+ hwi: HWAVEIN,
+ pwh: LPWAVEHDR,
+ cbwh: UINT,
+ ) -> MMRESULT;
+ pub fn waveInUnprepareHeader(
+ hwi: HWAVEIN,
+ pwh: LPWAVEHDR,
+ cbwh: UINT,
+ ) -> MMRESULT;
+ pub fn waveInAddBuffer(
+ hwi: HWAVEIN,
+ pwh: LPWAVEHDR,
+ cbwh: UINT,
+ ) -> MMRESULT;
+ pub fn waveInStart(
+ hwi: HWAVEIN,
+ ) -> MMRESULT;
+ pub fn waveInStop(
+ hwi: HWAVEIN,
+ ) -> MMRESULT;
+ pub fn waveInReset(
+ hwi: HWAVEIN,
+ ) -> MMRESULT;
+ pub fn waveInGetPosition(
+ hwi: HWAVEIN,
+ pmmt: LPMMTIME,
+ cbmmt: UINT,
+ ) -> MMRESULT;
+ // pub fn waveInGetID();
+ pub fn waveInMessage(
+ hwi: HWAVEIN,
+ uMsg: UINT,
+ dw1: DWORD_PTR,
+ dw2: DWORD_PTR,
+ ) -> MMRESULT;
+ pub fn midiOutGetNumDevs() -> UINT;
+ pub fn midiStreamOpen(
+ lphStream: LPHMIDISTRM,
+ puDeviceID: LPUINT,
+ cMidi: DWORD,
+ dwCallback: DWORD_PTR,
+ dwInstance: DWORD_PTR,
+ fdwOpen: DWORD,
+ ) -> MMRESULT;
+ pub fn midiStreamClose(
+ hStream: HMIDISTRM,
+ ) -> MMRESULT;
+ pub fn midiStreamProperty(
+ hm: HMIDISTRM,
+ lppropdata: LPBYTE,
+ dwProperty: DWORD,
+ ) -> MMRESULT;
+ pub fn midiStreamPosition(
+ hms: HMIDISTRM,
+ pmmt: LPMMTIME,
+ cbmmt: UINT,
+ ) -> MMRESULT;
+ pub fn midiStreamOut(
+ hMidiStream: HMIDISTRM,
+ lpMidiHdr: LPMIDIHDR,
+ cbMidiHdr: UINT,
+ ) -> MMRESULT;
+ pub fn midiStreamPause(
+ hms: HMIDISTRM,
+ ) -> MMRESULT;
+ pub fn midiStreamRestart(
+ hms: HMIDISTRM,
+ ) -> MMRESULT;
+ pub fn midiStreamStop(
+ hms: HMIDISTRM,
+ ) -> MMRESULT;
+ pub fn midiConnect(
+ hMidi: HMIDI,
+ hmo: HMIDIOUT,
+ pReserved: PVOID,
+ ) -> MMRESULT;
+ pub fn midiDisconnect(
+ hMidi: HMIDI,
+ hmo: HMIDIOUT,
+ pReserved: PVOID,
+ ) -> MMRESULT;
+ pub fn midiOutGetDevCapsW(
+ uDeviceID: UINT_PTR,
+ lpMidiOutCaps: LPMIDIOUTCAPSW,
+ cbMidiOutCaps: UINT,
+ ) -> MMRESULT;
+ pub fn midiOutGetVolume(
+ hmo: HMIDIOUT,
+ lpdwVolume: PDWORD,
+ ) -> MMRESULT;
+ pub fn midiOutSetVolume(
+ hmo: HMIDIOUT,
+ dwVolume: DWORD,
+ ) -> MMRESULT;
+ pub fn midiOutGetErrorTextW(
+ mmrError: MMRESULT,
+ lpText: LPWSTR,
+ cchText: UINT,
+ ) -> MMRESULT;
+ pub fn midiOutOpen(
+ lphmo: LPHMIDIOUT,
+ uDeviceID: UINT,
+ dwCallback: DWORD_PTR,
+ dwCallbackInstance: DWORD_PTR,
+ dwFlags: DWORD,
+ ) -> MMRESULT;
+ pub fn midiOutClose(
+ hmo: HMIDIOUT,
+ ) -> MMRESULT;
+ pub fn midiOutPrepareHeader(
+ hmo: HMIDIOUT,
+ lpMidiOutHdr: LPMIDIHDR,
+ cbMidiOutHdr: UINT,
+ ) -> MMRESULT;
+ pub fn midiOutUnprepareHeader(
+ hmo: HMIDIOUT,
+ lpMidiOutHdr: LPMIDIHDR,
+ cbMidiOutHdr: UINT,
+ ) -> MMRESULT;
+ pub fn midiOutShortMsg(
+ hmo: HMIDIOUT,
+ dwMsg: DWORD,
+ ) -> MMRESULT;
+ pub fn midiOutLongMsg(
+ hmo: HMIDIOUT,
+ lpMidiOutHdr: LPMIDIHDR,
+ cbMidiOutHdr: UINT,
+ ) -> MMRESULT;
+ pub fn midiOutReset(
+ hmo: HMIDIOUT,
+ ) -> MMRESULT;
+ pub fn midiOutCachePatches(
+ hmo: HMIDIOUT,
+ wBank: UINT,
+ lpPatchArray: LPWORD,
+ wFlags: UINT,
+ ) -> MMRESULT;
+ pub fn midiOutCacheDrumPatches(
+ hmo: HMIDIOUT,
+ wPatch: UINT,
+ lpKeyArray: LPWORD,
+ wFlags: UINT,
+ ) -> MMRESULT;
+ pub fn midiOutGetID(
+ hmo: HMIDIOUT,
+ puDeviceID: LPUINT,
+ ) -> MMRESULT;
+ pub fn midiOutMessage(
+ deviceID: HMIDIOUT,
+ msg: UINT,
+ dw1: DWORD_PTR,
+ dw2: DWORD_PTR,
+ ) -> MMRESULT;
+ pub fn midiInGetNumDevs() -> UINT;
+ pub fn midiInGetDevCapsW(
+ uDeviceID: UINT_PTR,
+ lpMidiInCaps: LPMIDIINCAPSW,
+ cbMidiInCaps: UINT,
+ ) -> MMRESULT;
+ pub fn midiInGetErrorTextW(
+ wError: MMRESULT,
+ lpText: LPWSTR,
+ cchText: UINT,
+ ) -> MMRESULT;
+ pub fn midiInOpen(
+ lphMidiIn: LPHMIDIIN,
+ uDeviceID: UINT,
+ dwCallback: DWORD_PTR,
+ dwCallbackInstance: DWORD_PTR,
+ dwFlags: DWORD,
+ ) -> MMRESULT;
+ pub fn midiInClose(
+ hMidiIn: HMIDIIN,
+ ) -> MMRESULT;
+ pub fn midiInPrepareHeader(
+ hMidiIn: HMIDIIN,
+ lpMidiInHdr: LPMIDIHDR,
+ cbMidiInHdr: UINT,
+ ) -> MMRESULT;
+ pub fn midiInUnprepareHeader(
+ hMidiIn: HMIDIIN,
+ lpMidiInHdr: LPMIDIHDR,
+ cbMidiInHdr: UINT,
+ ) -> MMRESULT;
+ pub fn midiInAddBuffer(
+ hMidiIn: HMIDIIN,
+ lpMidiInHdr: LPMIDIHDR,
+ cbMidiInHdr: UINT,
+ ) -> MMRESULT;
+ pub fn midiInStart(
+ hMidiIn: HMIDIIN,
+ ) -> MMRESULT;
+ pub fn midiInStop(
+ hMidiIn: HMIDIIN,
+ ) -> MMRESULT;
+ pub fn midiInReset(
+ hMidiIn: HMIDIIN,
+ ) -> MMRESULT;
+ pub fn midiInGetID(
+ hmi: HMIDIIN,
+ puDeviceID: LPUINT,
+ ) -> MMRESULT;
+ pub fn midiInMessage(
+ deviceID: HMIDIIN,
+ msg: UINT,
+ dw1: DWORD_PTR,
+ dw2: DWORD_PTR,
+ ) -> MMRESULT;
+}
diff --git a/vendor/winapi/src/um/mmsystem.rs b/vendor/winapi/src/um/mmsystem.rs
new file mode 100644
index 000000000..657ba5f4e
--- /dev/null
+++ b/vendor/winapi/src/um/mmsystem.rs
@@ -0,0 +1,266 @@
+// 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.
+//! MM procedure declarations, constant definitions and macros
+use shared::basetsd::DWORD_PTR;
+use shared::minwindef::{BYTE, DWORD, UINT, WORD};
+use shared::mmreg::WAVEFORMATEX;
+use um::winnt::{LPSTR, WCHAR};
+//109 (Win 7 SDK)
+pub type MMVERSION = UINT;
+pub type MMRESULT = UINT;
+STRUCT!{#[repr(packed)] struct MMTIME_smpte {
+ hour: BYTE,
+ min: BYTE,
+ sec: BYTE,
+ frame: BYTE,
+ fps: BYTE,
+ dummy: BYTE,
+ pad: [BYTE; 2],
+}}
+STRUCT!{#[repr(packed)] struct MMTIME_midi {
+ songptrpos: DWORD,
+}}
+UNION!{#[repr(packed)] union MMTIME_u {
+ [u32; 2],
+ ms ms_mut: DWORD,
+ sample sample_mut: DWORD,
+ cb cb_mut: DWORD,
+ ticks ticks_mut: DWORD,
+ smpte smpte_mut: MMTIME_smpte,
+ midi midi_mut: MMTIME_midi,
+}}
+STRUCT!{#[repr(packed)] struct MMTIME {
+ wType: UINT,
+ u: MMTIME_u,
+}}
+pub type PMMTIME = *mut MMTIME;
+pub type NPMMTIME = *mut MMTIME;
+pub type LPMMTIME = *mut MMTIME;
+pub const TIME_MS: UINT = 0x0001;
+pub const TIME_SAMPLES: UINT = 0x0002;
+pub const TIME_BYTES: UINT = 0x0004;
+pub const TIME_SMPTE: UINT = 0x0008;
+pub const TIME_MIDI: UINT = 0x0010;
+pub const TIME_TICKS: UINT = 0x0020;
+pub const MM_JOY1MOVE: UINT = 0x3A0;
+pub const MM_JOY2MOVE: UINT = 0x3A1;
+pub const MM_JOY1ZMOVE: UINT = 0x3A2;
+pub const MM_JOY2ZMOVE: UINT = 0x3A3;
+pub const MM_JOY1BUTTONDOWN: UINT = 0x3B5;
+pub const MM_JOY2BUTTONDOWN: UINT = 0x3B6;
+pub const MM_JOY1BUTTONUP: UINT = 0x3B7;
+pub const MM_JOY2BUTTONUP: UINT = 0x3B8;
+pub const MM_MCINOTIFY: UINT = 0x3B9;
+pub const MM_WOM_OPEN: UINT = 0x3BB;
+pub const MM_WOM_CLOSE: UINT = 0x3BC;
+pub const MM_WOM_DONE: UINT = 0x3BD;
+pub const MM_WIM_OPEN: UINT = 0x3BE;
+pub const MM_WIM_CLOSE: UINT = 0x3BF;
+pub const MM_WIM_DATA: UINT = 0x3C0;
+pub const MM_MIM_OPEN: UINT = 0x3C1;
+pub const MM_MIM_CLOSE: UINT = 0x3C2;
+pub const MM_MIM_DATA: UINT = 0x3C3;
+pub const MM_MIM_LONGDATA: UINT = 0x3C4;
+pub const MM_MIM_ERROR: UINT = 0x3C5;
+pub const MM_MIM_LONGERROR: UINT = 0x3C6;
+pub const MM_MOM_OPEN: UINT = 0x3C7;
+pub const MM_MOM_CLOSE: UINT = 0x3C8;
+pub const MM_MOM_DONE: UINT = 0x3C9;
+pub const MMSYSERR_BASE: MMRESULT = 0;
+pub const WAVERR_BASE: MMRESULT = 32;
+pub const MIDIERR_BASE: MMRESULT = 64;
+pub const TIMERR_BASE: MMRESULT = 96;
+pub const JOYERR_BASE: MMRESULT = 160;
+pub const MCIERR_BASE: MMRESULT = 256;
+pub const MIXERR_BASE: MMRESULT = 1024;
+pub const MMSYSERR_NOERROR: MMRESULT = 0;
+pub const MMSYSERR_ERROR: MMRESULT = MMSYSERR_BASE + 1;
+pub const MMSYSERR_BADDEVICEID: MMRESULT = MMSYSERR_BASE + 2;
+pub const MMSYSERR_NOTENABLED: MMRESULT = MMSYSERR_BASE + 3;
+pub const MMSYSERR_ALLOCATED: MMRESULT = MMSYSERR_BASE + 4;
+pub const MMSYSERR_INVALHANDLE: MMRESULT = MMSYSERR_BASE + 5;
+pub const MMSYSERR_NODRIVER: MMRESULT = MMSYSERR_BASE + 6;
+pub const MMSYSERR_NOMEM: MMRESULT = MMSYSERR_BASE + 7;
+pub const MMSYSERR_NOTSUPPORTED: MMRESULT = MMSYSERR_BASE + 8;
+pub const MMSYSERR_BADERRNUM: MMRESULT = MMSYSERR_BASE + 9;
+pub const MMSYSERR_INVALFLAG: MMRESULT = MMSYSERR_BASE + 10;
+pub const MMSYSERR_INVALPARAM: MMRESULT = MMSYSERR_BASE + 11;
+pub const MMSYSERR_HANDLEBUSY: MMRESULT = MMSYSERR_BASE + 12;
+pub const MMSYSERR_INVALIDALIAS: MMRESULT = MMSYSERR_BASE + 13;
+pub const MMSYSERR_BADDB: MMRESULT = MMSYSERR_BASE + 14;
+pub const MMSYSERR_KEYNOTFOUND: MMRESULT = MMSYSERR_BASE + 15;
+pub const MMSYSERR_READERROR: MMRESULT = MMSYSERR_BASE + 16;
+pub const MMSYSERR_WRITEERROR: MMRESULT = MMSYSERR_BASE + 17;
+pub const MMSYSERR_DELETEERROR: MMRESULT = MMSYSERR_BASE + 18;
+pub const MMSYSERR_VALNOTFOUND: MMRESULT = MMSYSERR_BASE + 19;
+pub const MMSYSERR_NODRIVERCB: MMRESULT = MMSYSERR_BASE + 20;
+pub const MMSYSERR_MOREDATA: MMRESULT = MMSYSERR_BASE + 21;
+pub const MMSYSERR_LASTERROR: MMRESULT = MMSYSERR_BASE + 21;
+pub const MIDIERR_UNPREPARED: MMRESULT = MIDIERR_BASE + 0;
+pub const MIDIERR_STILLPLAYING: MMRESULT = MIDIERR_BASE + 1;
+pub const MIDIERR_NOMAP: MMRESULT = MIDIERR_BASE + 2;
+pub const MIDIERR_NOTREADY: MMRESULT = MIDIERR_BASE + 3;
+pub const MIDIERR_NODEVICE: MMRESULT = MIDIERR_BASE + 4;
+pub const MIDIERR_INVALIDSETUP: MMRESULT = MIDIERR_BASE + 5;
+pub const MIDIERR_BADOPENMODE: MMRESULT = MIDIERR_BASE + 6;
+pub const MIDIERR_DONT_CONTINUE: MMRESULT = MIDIERR_BASE + 7;
+pub const MIDIERR_LASTERROR: MMRESULT = MIDIERR_BASE + 7;
+pub const CALLBACK_TYPEMASK: DWORD = 0x00070000;
+pub const CALLBACK_NULL: DWORD = 0x00000000;
+pub const CALLBACK_WINDOW: DWORD = 0x00010000;
+pub const CALLBACK_TASK: DWORD = 0x00020000;
+pub const CALLBACK_FUNCTION: DWORD = 0x00030000;
+pub const CALLBACK_THREAD: DWORD = CALLBACK_TASK;
+pub const CALLBACK_EVENT: DWORD = 0x00050000;
+//497 (Win 7 SDK)
+pub const WAVERR_BADFORMAT: MMRESULT = WAVERR_BASE + 0;
+pub const WAVERR_STILLPLAYING: MMRESULT = WAVERR_BASE + 1;
+pub const WAVERR_UNPREPARED: MMRESULT = WAVERR_BASE + 2;
+pub const WAVERR_SYNC: MMRESULT = WAVERR_BASE + 3;
+pub const WAVERR_LASTERROR: MMRESULT = WAVERR_BASE + 3;
+DECLARE_HANDLE!{HWAVEIN, HWAVEIN__}
+DECLARE_HANDLE!{HWAVEOUT, HWAVEOUT__}
+pub type LPHWAVEIN = *mut HWAVEIN;
+pub type LPHWAVEOUT = *mut HWAVEOUT;
+pub const WOM_OPEN: UINT = MM_WOM_OPEN;
+pub const WOM_CLOSE: UINT = MM_WOM_CLOSE;
+pub const WOM_DONE: UINT = MM_WOM_DONE;
+pub const WIM_OPEN: UINT = MM_WIM_OPEN;
+pub const WIM_CLOSE: UINT = MM_WIM_CLOSE;
+pub const WIM_DATA: UINT = MM_WIM_DATA;
+pub const WAVE_MAPPER: UINT = 0xFFFFFFFF;
+pub const WAVE_FORMAT_QUERY: DWORD = 0x0001;
+pub const WAVE_ALLOWSYNC: DWORD = 0x0002;
+pub const WAVE_MAPPED: DWORD = 0x0004;
+pub const WAVE_FORMAT_DIRECT: DWORD = 0x0008;
+pub const WAVE_FORMAT_DIRECT_QUERY: DWORD = WAVE_FORMAT_QUERY | WAVE_FORMAT_DIRECT;
+pub const WAVE_MAPPED_DEFAULT_COMMUNICATION_DEVICE: DWORD = 0x0010;
+STRUCT!{#[repr(packed)] struct WAVEHDR {
+ lpData: LPSTR,
+ dwBufferLength: DWORD,
+ dwBytesRecorded: DWORD,
+ dwUser: DWORD_PTR,
+ dwFlags: DWORD,
+ dwLoops: DWORD,
+ lpNext: *mut WAVEHDR,
+ reserved: DWORD_PTR,
+}}
+pub type PWAVEHDR = *mut WAVEHDR;
+pub type NPWAVEHDR = *mut WAVEHDR;
+pub type LPWAVEHDR = *mut WAVEHDR;
+STRUCT!{#[repr(packed)] struct WAVEOUTCAPSW {
+ wMid: WORD,
+ wPid: WORD,
+ vDriverVersion: MMVERSION,
+ szPname: [WCHAR; 32],
+ dwFormats: DWORD,
+ wChannels: WORD,
+ wReserved1: WORD,
+ dwSupport: DWORD,
+}}
+pub type PWAVEOUTCAPSW = *mut WAVEOUTCAPSW;
+pub type NPWAVEOUTCAPSW = *mut WAVEOUTCAPSW;
+pub type LPWAVEOUTCAPSW = *mut WAVEOUTCAPSW;
+STRUCT!{#[repr(packed)] struct WAVEINCAPSW {
+ wMid: WORD,
+ wPid: WORD,
+ vDriverVersion: MMVERSION,
+ szPname: [WCHAR; 32],
+ dwFormats: DWORD,
+ wChannels: WORD,
+ wReserved1: WORD,
+}}
+pub type PWAVEINCAPSW = *mut WAVEINCAPSW;
+pub type NPWAVEINCAPSW = *mut WAVEINCAPSW;
+pub type LPWAVEINCAPSW = *mut WAVEINCAPSW;
+pub const WAVE_INVALIDFORMAT: DWORD = 0x00000000;
+pub const WAVE_FORMAT_1M08: DWORD = 0x00000001;
+pub const WAVE_FORMAT_1S08: DWORD = 0x00000002;
+pub const WAVE_FORMAT_1M16: DWORD = 0x00000004;
+pub const WAVE_FORMAT_1S16: DWORD = 0x00000008;
+pub const WAVE_FORMAT_2M08: DWORD = 0x00000010;
+pub const WAVE_FORMAT_2S08: DWORD = 0x00000020;
+pub const WAVE_FORMAT_2M16: DWORD = 0x00000040;
+pub const WAVE_FORMAT_2S16: DWORD = 0x00000080;
+pub const WAVE_FORMAT_4M08: DWORD = 0x00000100;
+pub const WAVE_FORMAT_4S08: DWORD = 0x00000200;
+pub const WAVE_FORMAT_4M16: DWORD = 0x00000400;
+pub const WAVE_FORMAT_4S16: DWORD = 0x00000800;
+pub const WAVE_FORMAT_44M08: DWORD = 0x00000100;
+pub const WAVE_FORMAT_44S08: DWORD = 0x00000200;
+pub const WAVE_FORMAT_44M16: DWORD = 0x00000400;
+pub const WAVE_FORMAT_44S16: DWORD = 0x00000800;
+pub const WAVE_FORMAT_48M08: DWORD = 0x00001000;
+pub const WAVE_FORMAT_48S08: DWORD = 0x00002000;
+pub const WAVE_FORMAT_48M16: DWORD = 0x00004000;
+pub const WAVE_FORMAT_48S16: DWORD = 0x00008000;
+pub const WAVE_FORMAT_96M08: DWORD = 0x00010000;
+pub const WAVE_FORMAT_96S08: DWORD = 0x00020000;
+pub const WAVE_FORMAT_96M16: DWORD = 0x00040000;
+pub const WAVE_FORMAT_96S16: DWORD = 0x00080000;
+//782 (Win 7 SDK)
+pub type PWAVEFORMATEX = *mut WAVEFORMATEX;
+pub type NPWAVEFORMATEX = *mut WAVEFORMATEX;
+pub type LPWAVEFORMATEX = *mut WAVEFORMATEX;
+pub type LPCWAVEFORMATEX = *const WAVEFORMATEX;
+//2170 (Win 7 SDK)
+pub const TIMERR_NOERROR: MMRESULT = 0;
+pub const TIMERR_NOCANDO: MMRESULT = TIMERR_BASE + 1;
+pub const TIMERR_STRUCT: MMRESULT = TIMERR_BASE + 33;
+//2198 (Win 7 SDK)
+STRUCT!{#[repr(packed)] struct TIMECAPS {
+ wPeriodMin: UINT,
+ wPeriodMax: UINT,
+}}
+pub type PTIMECAPS = *mut TIMECAPS;
+pub type NPTIMECAPS = *mut TIMECAPS;
+pub type LPTIMECAPS = *mut TIMECAPS;
+STRUCT!{#[repr(packed)] struct MIDIHDR {
+ lpData: LPSTR,
+ dwBufferLength: DWORD,
+ dwBytesRecorded: DWORD,
+ dwUser: DWORD_PTR,
+ dwFlags: DWORD,
+ lpNext: *mut MIDIHDR,
+ reserved: DWORD_PTR,
+ dwOffset: DWORD,
+ dwReserved: [DWORD_PTR; 8],
+}}
+pub type PMIDIHDR = *mut MIDIHDR;
+pub type NPMIDIHDR = *mut MIDIHDR;
+pub type LPMIDIHDR = *mut MIDIHDR;
+STRUCT!{#[repr(packed)] struct MIDIINCAPSW {
+ wMid: WORD,
+ wPid: WORD,
+ vDriverVersion: MMVERSION,
+ szPname: [WCHAR; 32],
+ dwSupport: DWORD,
+}}
+pub type PMIDIINCAPSW = *mut MIDIINCAPSW;
+pub type NPMIDIINCAPSW = *mut MIDIINCAPSW;
+pub type LPMIDIINCAPSW = *mut MIDIINCAPSW;
+STRUCT!{#[repr(packed)] struct MIDIOUTCAPSW {
+ wMid: WORD,
+ wPid: WORD,
+ vDriverVersion: MMVERSION,
+ szPname: [WCHAR; 32],
+ wTechnology: WORD,
+ wVoices: WORD,
+ wNotes: WORD,
+ wChannelMask: WORD,
+ dwSupport: DWORD,
+}}
+pub type PMIDIOUTCAPSW = *mut MIDIOUTCAPSW;
+pub type NPMIDIOUTCAPSW = *mut MIDIOUTCAPSW;
+pub type LPMIDIOUTCAPSW = *mut MIDIOUTCAPSW;
+DECLARE_HANDLE!{HMIDIIN, HMIDIIN__}
+DECLARE_HANDLE!{HMIDIOUT, HMIDIOUT__}
+pub type LPHMIDIIN = *mut HMIDIIN;
+pub type LPHMIDIOUT = *mut HMIDIOUT;
+DECLARE_HANDLE!{HMIDISTRM, HMIDISTRM__}
+DECLARE_HANDLE!{HMIDI, HMIDI__}
+pub type LPHMIDISTRM = *mut HMIDISTRM;
+pub type LPHMIDI = *mut HMIDI;
diff --git a/vendor/winapi/src/um/mod.rs b/vendor/winapi/src/um/mod.rs
new file mode 100644
index 000000000..b7f0bca4e
--- /dev/null
+++ b/vendor/winapi/src/um/mod.rs
@@ -0,0 +1,302 @@
+// 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.
+//! Headers for user mode only
+pub mod gl;
+#[cfg(feature = "accctrl")] pub mod accctrl;
+#[cfg(feature = "aclapi")] pub mod aclapi;
+#[cfg(feature = "adhoc")] pub mod adhoc;
+#[cfg(feature = "appmgmt")] pub mod appmgmt;
+#[cfg(feature = "audioclient")] pub mod audioclient;
+#[cfg(feature = "audiosessiontypes")] pub mod audiosessiontypes;
+#[cfg(feature = "avrt")] pub mod avrt;
+#[cfg(feature = "bits")] pub mod bits;
+#[cfg(feature = "bits10_1")] pub mod bits10_1;
+#[cfg(feature = "bits1_5")] pub mod bits1_5;
+#[cfg(feature = "bits2_0")] pub mod bits2_0;
+#[cfg(feature = "bits2_5")] pub mod bits2_5;
+#[cfg(feature = "bits3_0")] pub mod bits3_0;
+#[cfg(feature = "bits4_0")] pub mod bits4_0;
+#[cfg(feature = "bits5_0")] pub mod bits5_0;
+#[cfg(feature = "bitscfg")] pub mod bitscfg;
+#[cfg(feature = "bitsmsg")] pub mod bitsmsg;
+#[cfg(feature = "bluetoothapis")] pub mod bluetoothapis;
+#[cfg(feature = "bluetoothleapis")] pub mod bluetoothleapis;
+#[cfg(feature = "bthledef")] pub mod bthledef;
+#[cfg(feature = "cfgmgr32")] pub mod cfgmgr32;
+#[cfg(feature = "cguid")] pub mod cguid;
+#[cfg(feature = "combaseapi")] pub mod combaseapi;
+#[cfg(feature = "coml2api")] pub mod coml2api;
+#[cfg(feature = "commapi")] pub mod commapi;
+#[cfg(feature = "commctrl")] pub mod commctrl;
+#[cfg(feature = "commdlg")] pub mod commdlg;
+#[cfg(feature = "commoncontrols")] pub mod commoncontrols;
+#[cfg(feature = "consoleapi")] pub mod consoleapi;
+#[cfg(feature = "corsym")] pub mod corsym;
+#[cfg(feature = "d2d1")] pub mod d2d1;
+#[cfg(feature = "d2d1_1")] pub mod d2d1_1;
+#[cfg(feature = "d2d1_2")] pub mod d2d1_2;
+#[cfg(feature = "d2d1_3")] pub mod d2d1_3;
+#[cfg(feature = "d2d1effectauthor")] pub mod d2d1effectauthor;
+#[cfg(feature = "d2d1effects")] pub mod d2d1effects;
+#[cfg(feature = "d2d1effects_1")] pub mod d2d1effects_1;
+#[cfg(feature = "d2d1effects_2")] pub mod d2d1effects_2;
+#[cfg(feature = "d2d1svg")] pub mod d2d1svg;
+#[cfg(feature = "d2dbasetypes")] pub mod d2dbasetypes;
+#[cfg(feature = "d3d")] pub mod d3d;
+#[cfg(feature = "d3d10")] pub mod d3d10;
+#[cfg(feature = "d3d10_1")] pub mod d3d10_1;
+#[cfg(feature = "d3d10_1shader")] pub mod d3d10_1shader;
+#[cfg(feature = "d3d10effect")] pub mod d3d10effect;
+#[cfg(feature = "d3d10misc")] pub mod d3d10misc;
+#[cfg(feature = "d3d10sdklayers")] pub mod d3d10sdklayers;
+#[cfg(feature = "d3d10shader")] pub mod d3d10shader;
+#[cfg(feature = "d3d11")] pub mod d3d11;
+#[cfg(feature = "d3d11_1")] pub mod d3d11_1;
+#[cfg(feature = "d3d11_2")] pub mod d3d11_2;
+#[cfg(feature = "d3d11_3")] pub mod d3d11_3;
+#[cfg(feature = "d3d11_4")] pub mod d3d11_4;
+#[cfg(feature = "d3d11on12")] pub mod d3d11on12;
+#[cfg(feature = "d3d11sdklayers")] pub mod d3d11sdklayers;
+#[cfg(feature = "d3d11shader")] pub mod d3d11shader;
+#[cfg(feature = "d3d11tokenizedprogramformat")] pub mod d3d11tokenizedprogramformat;
+#[cfg(feature = "d3d12")] pub mod d3d12;
+#[cfg(feature = "d3d12sdklayers")] pub mod d3d12sdklayers;
+#[cfg(feature = "d3d12shader")] pub mod d3d12shader;
+#[cfg(feature = "d3dcommon")] pub mod d3dcommon;
+#[cfg(feature = "d3dcompiler")] pub mod d3dcompiler;
+#[cfg(feature = "d3dcsx")] pub mod d3dcsx;
+#[cfg(feature = "d3dx10core")] pub mod d3dx10core;
+#[cfg(feature = "d3dx10math")] pub mod d3dx10math;
+#[cfg(feature = "d3dx10mesh")] pub mod d3dx10mesh;
+#[cfg(feature = "datetimeapi")] pub mod datetimeapi;
+#[cfg(feature = "davclnt")] pub mod davclnt;
+#[cfg(feature = "dbghelp")] pub mod dbghelp;
+#[cfg(feature = "dbt")] pub mod dbt;
+#[cfg(feature = "dcommon")] pub mod dcommon;
+#[cfg(feature = "dcomp")] pub mod dcomp;
+#[cfg(feature = "dcompanimation")] pub mod dcompanimation;
+#[cfg(feature = "dde")] pub mod dde;
+#[cfg(feature = "ddraw")] pub mod ddraw;
+#[cfg(feature = "ddrawi")] pub mod ddrawi;
+#[cfg(feature = "ddrawint")] pub mod ddrawint;
+#[cfg(feature = "debugapi")] pub mod debugapi;
+#[cfg(feature = "devicetopology")] pub mod devicetopology;
+#[cfg(feature = "dinput")] pub mod dinput;
+#[cfg(feature = "dispex")] pub mod dispex;
+#[cfg(feature = "dmksctl")] pub mod dmksctl;
+#[cfg(feature = "dmusicc")] pub mod dmusicc;
+#[cfg(feature = "docobj")] pub mod docobj;
+#[cfg(feature = "documenttarget")] pub mod documenttarget;
+#[cfg(feature = "dot1x")] pub mod dot1x;
+#[cfg(feature = "dpa_dsa")] pub mod dpa_dsa;
+#[cfg(feature = "dpapi")] pub mod dpapi;
+#[cfg(feature = "dsgetdc")] pub mod dsgetdc;
+#[cfg(feature = "dsound")] pub mod dsound;
+#[cfg(feature = "dsrole")] pub mod dsrole;
+#[cfg(feature = "dvp")] pub mod dvp;
+#[cfg(feature = "dwmapi")] pub mod dwmapi;
+#[cfg(feature = "dwrite")] pub mod dwrite;
+#[cfg(feature = "dwrite_1")] pub mod dwrite_1;
+#[cfg(feature = "dwrite_2")] pub mod dwrite_2;
+#[cfg(feature = "dwrite_3")] pub mod dwrite_3;
+#[cfg(feature = "dxdiag")] pub mod dxdiag;
+#[cfg(feature = "dxfile")] pub mod dxfile;
+#[cfg(feature = "dxgidebug")] pub mod dxgidebug;
+#[cfg(feature = "dxva2api")] pub mod dxva2api;
+#[cfg(feature = "dxvahd")] pub mod dxvahd;
+#[cfg(feature = "eaptypes")] pub mod eaptypes;
+#[cfg(feature = "enclaveapi")] pub mod enclaveapi;
+#[cfg(feature = "endpointvolume")] pub mod endpointvolume;
+#[cfg(feature = "errhandlingapi")] pub mod errhandlingapi;
+#[cfg(feature = "evntcons")] pub mod evntcons;
+#[cfg(feature = "exdisp")] pub mod exdisp;
+#[cfg(feature = "fibersapi")] pub mod fibersapi;
+#[cfg(feature = "fileapi")] pub mod fileapi;
+#[cfg(feature = "functiondiscoverykeys_devpkey")] pub mod functiondiscoverykeys_devpkey;
+#[cfg(feature = "handleapi")] pub mod handleapi;
+#[cfg(feature = "heapapi")] pub mod heapapi;
+#[cfg(feature = "highlevelmonitorconfigurationapi")] pub mod highlevelmonitorconfigurationapi;
+#[cfg(feature = "http")] pub mod http;
+#[cfg(feature = "imm")] pub mod imm;
+#[cfg(feature = "interlockedapi")] pub mod interlockedapi;
+#[cfg(feature = "ioapiset")] pub mod ioapiset;
+#[cfg(feature = "ipexport")] pub mod ipexport;
+#[cfg(feature = "iphlpapi")] pub mod iphlpapi;
+#[cfg(feature = "iptypes")] pub mod iptypes;
+#[cfg(feature = "jobapi")] pub mod jobapi;
+#[cfg(feature = "jobapi2")] pub mod jobapi2;
+#[cfg(feature = "knownfolders")] pub mod knownfolders;
+#[cfg(feature = "ktmw32")] pub mod ktmw32;
+#[cfg(feature = "l2cmn")] pub mod l2cmn;
+#[cfg(feature = "libloaderapi")] pub mod libloaderapi;
+#[cfg(feature = "lmaccess")] pub mod lmaccess;
+#[cfg(feature = "lmalert")] pub mod lmalert;
+#[cfg(feature = "lmapibuf")] pub mod lmapibuf;
+#[cfg(feature = "lmat")] pub mod lmat;
+#[cfg(feature = "lmdfs")] pub mod lmdfs;
+#[cfg(feature = "lmerrlog")] pub mod lmerrlog;
+#[cfg(feature = "lmjoin")] pub mod lmjoin;
+#[cfg(feature = "lmmsg")] pub mod lmmsg;
+#[cfg(feature = "lmremutl")] pub mod lmremutl;
+#[cfg(feature = "lmrepl")] pub mod lmrepl;
+#[cfg(feature = "lmserver")] pub mod lmserver;
+#[cfg(feature = "lmshare")] pub mod lmshare;
+#[cfg(feature = "lmstats")] pub mod lmstats;
+#[cfg(feature = "lmsvc")] pub mod lmsvc;
+#[cfg(feature = "lmuse")] pub mod lmuse;
+#[cfg(feature = "lmwksta")] pub mod lmwksta;
+#[cfg(feature = "lowlevelmonitorconfigurationapi")] pub mod lowlevelmonitorconfigurationapi;
+#[cfg(feature = "lsalookup")] pub mod lsalookup;
+#[cfg(feature = "memoryapi")] pub mod memoryapi;
+#[cfg(feature = "minschannel")] pub mod minschannel;
+#[cfg(feature = "minwinbase")] pub mod minwinbase;
+#[cfg(feature = "mmdeviceapi")] pub mod mmdeviceapi;
+#[cfg(feature = "mmeapi")] pub mod mmeapi;
+#[cfg(feature = "mmsystem")] pub mod mmsystem;
+#[cfg(feature = "msaatext")] pub mod msaatext;
+#[cfg(feature = "mscat")] pub mod mscat;
+#[cfg(feature = "mschapp")] pub mod mschapp;
+#[cfg(feature = "mssip")] pub mod mssip;
+#[cfg(feature = "mswsock")] pub mod mswsock;
+#[cfg(feature = "namedpipeapi")] pub mod namedpipeapi;
+#[cfg(feature = "namespaceapi")] pub mod namespaceapi;
+#[cfg(feature = "nb30")] pub mod nb30;
+#[cfg(feature = "ncrypt")] pub mod ncrypt;
+#[cfg(feature = "ntlsa")] pub mod ntlsa;
+#[cfg(feature = "ntsecapi")] pub mod ntsecapi;
+#[cfg(feature = "oaidl")] pub mod oaidl;
+#[cfg(feature = "objbase")] pub mod objbase;
+#[cfg(feature = "objidl")] pub mod objidl;
+#[cfg(feature = "objidlbase")] pub mod objidlbase;
+#[cfg(feature = "ocidl")] pub mod ocidl;
+#[cfg(feature = "ole2")] pub mod ole2;
+#[cfg(feature = "oleauto")] pub mod oleauto;
+#[cfg(feature = "olectl")] pub mod olectl;
+#[cfg(feature = "oleidl")] pub mod oleidl;
+#[cfg(feature = "opmapi")] pub mod opmapi;
+#[cfg(feature = "pdh")] pub mod pdh;
+#[cfg(feature = "perflib")] pub mod perflib;
+#[cfg(feature = "physicalmonitorenumerationapi")] pub mod physicalmonitorenumerationapi;
+#[cfg(feature = "playsoundapi")] pub mod playsoundapi;
+#[cfg(feature = "portabledevice")] pub mod portabledevice;
+#[cfg(feature = "portabledeviceapi")] pub mod portabledeviceapi;
+#[cfg(feature = "portabledevicetypes")] pub mod portabledevicetypes;
+#[cfg(feature = "powerbase")] pub mod powerbase;
+#[cfg(feature = "powersetting")] pub mod powersetting;
+#[cfg(feature = "powrprof")] pub mod powrprof;
+#[cfg(feature = "processenv")] pub mod processenv;
+#[cfg(feature = "processsnapshot")] pub mod processsnapshot;
+#[cfg(feature = "processthreadsapi")] pub mod processthreadsapi;
+#[cfg(feature = "processtopologyapi")] pub mod processtopologyapi;
+#[cfg(feature = "profileapi")] pub mod profileapi;
+#[cfg(feature = "propidl")] pub mod propidl;
+#[cfg(feature = "propkey")] pub mod propkey;
+#[cfg(feature = "propkeydef")] pub mod propkeydef;
+#[cfg(feature = "propsys")] pub mod propsys;
+#[cfg(feature = "prsht")] pub mod prsht;
+#[cfg(feature = "psapi")] pub mod psapi;
+#[cfg(feature = "realtimeapiset")] pub mod realtimeapiset;
+#[cfg(feature = "reason")] pub mod reason;
+#[cfg(feature = "restartmanager")] pub mod restartmanager;
+#[cfg(feature = "restrictederrorinfo")] pub mod restrictederrorinfo;
+#[cfg(feature = "rmxfguid")] pub mod rmxfguid;
+#[cfg(feature = "rtinfo")] pub mod rtinfo;
+#[cfg(feature = "sapi")] pub mod sapi;
+#[cfg(feature = "sapi51")] pub mod sapi51;
+#[cfg(feature = "sapi53")] pub mod sapi53;
+#[cfg(feature = "sapiddk")] pub mod sapiddk;
+#[cfg(feature = "sapiddk51")] pub mod sapiddk51;
+#[cfg(feature = "schannel")] pub mod schannel;
+#[cfg(feature = "securityappcontainer")] pub mod securityappcontainer;
+#[cfg(feature = "securitybaseapi")] pub mod securitybaseapi;
+#[cfg(feature = "servprov")] pub mod servprov;
+#[cfg(feature = "setupapi")] pub mod setupapi;
+#[cfg(feature = "shellapi")] pub mod shellapi;
+#[cfg(feature = "shellscalingapi")] pub mod shellscalingapi;
+#[cfg(feature = "shlobj")] pub mod shlobj;
+#[cfg(feature = "shobjidl")] pub mod shobjidl;
+#[cfg(feature = "shobjidl_core")] pub mod shobjidl_core;
+#[cfg(feature = "shtypes")] pub mod shtypes;
+#[cfg(feature = "softpub")] pub mod softpub;
+#[cfg(feature = "spapidef")] pub mod spapidef;
+#[cfg(feature = "spellcheck")] pub mod spellcheck;
+#[cfg(feature = "sporder")] pub mod sporder;
+#[cfg(feature = "sql")] pub mod sql;
+#[cfg(feature = "sqlext")] pub mod sqlext;
+#[cfg(feature = "sqltypes")] pub mod sqltypes;
+#[cfg(feature = "sqlucode")] pub mod sqlucode;
+#[cfg(feature = "sspi")] pub mod sspi;
+#[cfg(feature = "stringapiset")] pub mod stringapiset;
+#[cfg(feature = "strmif")] pub mod strmif;
+#[cfg(feature = "subauth")] pub mod subauth;
+#[cfg(feature = "synchapi")] pub mod synchapi;
+#[cfg(feature = "sysinfoapi")] pub mod sysinfoapi;
+#[cfg(feature = "systemtopologyapi")] pub mod systemtopologyapi;
+#[cfg(feature = "taskschd")] pub mod taskschd;
+#[cfg(feature = "textstor")] pub mod textstor;
+#[cfg(feature = "threadpoolapiset")] pub mod threadpoolapiset;
+#[cfg(feature = "threadpoollegacyapiset")] pub mod threadpoollegacyapiset;
+#[cfg(feature = "timeapi")] pub mod timeapi;
+#[cfg(feature = "timezoneapi")] pub mod timezoneapi;
+#[cfg(feature = "tlhelp32")] pub mod tlhelp32;
+#[cfg(feature = "unknwnbase")] pub mod unknwnbase;
+#[cfg(feature = "urlhist")] pub mod urlhist;
+#[cfg(feature = "urlmon")] pub mod urlmon;
+#[cfg(feature = "userenv")] pub mod userenv;
+#[cfg(feature = "usp10")] pub mod usp10;
+#[cfg(feature = "utilapiset")] pub mod utilapiset;
+#[cfg(feature = "uxtheme")] pub mod uxtheme;
+#[cfg(feature = "vsbackup")] pub mod vsbackup;
+#[cfg(feature = "vss")] pub mod vss;
+#[cfg(feature = "vsserror")] pub mod vsserror;
+#[cfg(feature = "vswriter")] pub mod vswriter;
+#[cfg(feature = "wbemads")] pub mod wbemads;
+#[cfg(feature = "wbemcli")] pub mod wbemcli;
+#[cfg(feature = "wbemdisp")] pub mod wbemdisp;
+#[cfg(feature = "wbemprov")] pub mod wbemprov;
+#[cfg(feature = "wbemtran")] pub mod wbemtran;
+#[cfg(feature = "wct")] pub mod wct;
+#[cfg(feature = "werapi")] pub mod werapi;
+#[cfg(feature = "winbase")] pub mod winbase;
+#[cfg(feature = "wincodec")] pub mod wincodec;
+#[cfg(feature = "wincodecsdk")] pub mod wincodecsdk;
+#[cfg(feature = "wincon")] pub mod wincon;
+#[cfg(feature = "wincontypes")] pub mod wincontypes;
+#[cfg(feature = "wincred")] pub mod wincred;
+#[cfg(feature = "wincrypt")] pub mod wincrypt;
+#[cfg(feature = "windowsceip")] pub mod windowsceip;
+#[cfg(feature = "winefs")] pub mod winefs;
+#[cfg(feature = "winevt")] pub mod winevt;
+#[cfg(feature = "wingdi")] pub mod wingdi;
+#[cfg(feature = "winhttp")] pub mod winhttp;
+#[cfg(feature = "wininet")] pub mod wininet;
+#[cfg(feature = "winineti")] pub mod winineti;
+#[cfg(feature = "winioctl")] pub mod winioctl;
+#[cfg(feature = "winnetwk")] pub mod winnetwk;
+#[cfg(feature = "winnls")] pub mod winnls;
+#[cfg(feature = "winnt")] pub mod winnt;
+#[cfg(feature = "winreg")] pub mod winreg;
+#[cfg(feature = "winsafer")] pub mod winsafer;
+#[cfg(feature = "winscard")] pub mod winscard;
+#[cfg(feature = "winsmcrd")] pub mod winsmcrd;
+#[cfg(feature = "winsock2")] pub mod winsock2;
+#[cfg(feature = "winspool")] pub mod winspool;
+#[cfg(feature = "winsvc")] pub mod winsvc;
+#[cfg(feature = "wintrust")] pub mod wintrust;
+#[cfg(feature = "winusb")] pub mod winusb;
+#[cfg(feature = "winuser")] pub mod winuser;
+#[cfg(feature = "winver")] pub mod winver;
+#[cfg(feature = "wlanapi")] pub mod wlanapi;
+#[cfg(feature = "wlanihv")] pub mod wlanihv;
+#[cfg(feature = "wlanihvtypes")] pub mod wlanihvtypes;
+#[cfg(feature = "wlclient")] pub mod wlclient;
+#[cfg(feature = "wow64apiset")] pub mod wow64apiset;
+#[cfg(feature = "wpdmtpextensions")] pub mod wpdmtpextensions;
+#[cfg(feature = "ws2bth")] pub mod ws2bth;
+#[cfg(feature = "ws2spi")] pub mod ws2spi;
+#[cfg(feature = "ws2tcpip")] pub mod ws2tcpip;
+#[cfg(feature = "wtsapi32")] pub mod wtsapi32;
+#[cfg(feature = "xinput")] pub mod xinput;
diff --git a/vendor/winapi/src/um/msaatext.rs b/vendor/winapi/src/um/msaatext.rs
new file mode 100644
index 000000000..238ca2c13
--- /dev/null
+++ b/vendor/winapi/src/um/msaatext.rs
@@ -0,0 +1,59 @@
+// 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.
+DEFINE_GUID!{IID_ITfMSAAControl,
+ 0xb5f8fb3b, 0x393f, 0x4f7c, 0x84, 0xcb, 0x50, 0x49, 0x24, 0xc2, 0x70, 0x5a}
+DEFINE_GUID!{IID_IInternalDocWrap,
+ 0xe1aa6466, 0x9db4, 0x40ba, 0xbe, 0x03, 0x77, 0xc3, 0x8e, 0x8e, 0x60, 0xb2}
+DEFINE_GUID!{IID_ITextStoreACPEx,
+ 0xa2de3bc2, 0x3d8e, 0x11d3, 0x81, 0xa9, 0xf7, 0x53, 0xfb, 0xe6, 0x1a, 0x00}
+DEFINE_GUID!{IID_ITextStoreAnchorEx,
+ 0xa2de3bc1, 0x3d8e, 0x11d3, 0x81, 0xa9, 0xf7, 0x53, 0xfb, 0xe6, 0x1a, 0x00}
+DEFINE_GUID!{IID_ITextStoreACPSinkEx,
+ 0x2bdf9464, 0x41e2, 0x43e3, 0x95, 0x0c, 0xa6, 0x86, 0x5b, 0xa2, 0x5c, 0xd4}
+DEFINE_GUID!{IID_ITextStoreSinkAnchorEx,
+ 0x25642426, 0x028d, 0x4474, 0x97, 0x7b, 0x11, 0x1b, 0xb1, 0x14, 0xfe, 0x3e}
+DEFINE_GUID!{IID_IAccDictionary,
+ 0x1dc4cb5f, 0xd737, 0x474d, 0xad, 0xe9, 0x5c, 0xcf, 0xc9, 0xbc, 0x1c, 0xc9}
+DEFINE_GUID!{IID_IVersionInfo,
+ 0x401518ec, 0xdb00, 0x4611, 0x9b, 0x29, 0x2a, 0x0e, 0x4b, 0x9a, 0xfa, 0x85}
+DEFINE_GUID!{IID_ICoCreateLocally,
+ 0x03de00aa, 0xf272, 0x41e3, 0x99, 0xcb, 0x03, 0xc5, 0xe8, 0x11, 0x4e, 0xa0}
+DEFINE_GUID!{IID_ICoCreatedLocally,
+ 0x0a53eb6c, 0x1908, 0x4742, 0x8c, 0xff, 0x2c, 0xee, 0x2e, 0x93, 0xf9, 0x4c}
+DEFINE_GUID!{IID_IAccStore,
+ 0xe2cd4a63, 0x2b72, 0x4d48, 0xb7, 0x39, 0x95, 0xe4, 0x76, 0x51, 0x95, 0xba}
+DEFINE_GUID!{IID_IAccServerDocMgr,
+ 0xad7c73cf, 0x6dd5, 0x4855, 0xab, 0xc2, 0xb0, 0x4b, 0xad, 0x5b, 0x91, 0x53}
+DEFINE_GUID!{IID_IAccClientDocMgr,
+ 0x4c896039, 0x7b6d, 0x49e6, 0xa8, 0xc1, 0x45, 0x11, 0x6a, 0x98, 0x29, 0x2b}
+DEFINE_GUID!{IID_IDocWrap,
+ 0xdcd285fe, 0x0be0, 0x43bd, 0x99, 0xc9, 0xaa, 0xae, 0xc5, 0x13, 0xc5, 0x55}
+DEFINE_GUID!{IID_IClonableWrapper,
+ 0xb33e75ff, 0xe84c, 0x4dca, 0xa2, 0x5c, 0x33, 0xb8, 0xdc, 0x00, 0x33, 0x74}
+DEFINE_GUID!{LIBID_MSAATEXTLib,
+ 0x150e2d7a, 0xdac1, 0x4582, 0x94, 0x7d, 0x2a, 0x8f, 0xd7, 0x8b, 0x82, 0xcd}
+DEFINE_GUID!{CLSID_MSAAControl,
+ 0x08cd963f, 0x7a3e, 0x4f5c, 0x9b, 0xd8, 0xd6, 0x92, 0xbb, 0x04, 0x3c, 0x5b}
+DEFINE_GUID!{CLSID_AccStore,
+ 0x5440837f, 0x4bff, 0x4ae5, 0xa1, 0xb1, 0x77, 0x22, 0xec, 0xc6, 0x33, 0x2a}
+DEFINE_GUID!{CLSID_AccDictionary,
+ 0x6572ee16, 0x5fe5, 0x4331, 0xbb, 0x6d, 0x76, 0xa4, 0x9c, 0x56, 0xe4, 0x23}
+DEFINE_GUID!{CLSID_AccServerDocMgr,
+ 0x6089a37e, 0xeb8a, 0x482d, 0xbd, 0x6f, 0xf9, 0xf4, 0x69, 0x04, 0xd1, 0x6d}
+DEFINE_GUID!{CLSID_AccClientDocMgr,
+ 0xfc48cc30, 0x4f3e, 0x4fa1, 0x80, 0x3b, 0xad, 0x0e, 0x19, 0x6a, 0x83, 0xb1}
+DEFINE_GUID!{CLSID_DocWrap,
+ 0xbf426f7e, 0x7a5e, 0x44d6, 0x83, 0x0c, 0xa3, 0x90, 0xea, 0x94, 0x62, 0xa3}
+DEFINE_GUID!{IID_ITextStoreACP,
+ 0x28888fe3, 0xc2a0, 0x483a, 0xa3, 0xea, 0x8c, 0xb1, 0xce, 0x51, 0xff, 0x3d}
+DEFINE_GUID!{IID_ITextStoreAnchor,
+ 0x9b2077b0, 0x5f18, 0x4dec, 0xbe, 0xe9, 0x3c, 0xc7, 0x22, 0xf5, 0xdf, 0xe0}
+DEFINE_GUID!{IID_IAnchor,
+ 0x0feb7e34, 0x5a60, 0x4356, 0x8e, 0xf7, 0xab, 0xde, 0xc2, 0xff, 0x7c, 0xf8}
+DEFINE_GUID!{IID_ITextStoreAnchorSink,
+ 0xaa80e905, 0x2021, 0x11d2, 0x93, 0xe0, 0x00, 0x60, 0xb0, 0x67, 0xb8, 0x6e}
+DEFINE_GUID!{IID_ITextStoreACPSink,
+ 0x22d44c94, 0xa419, 0x4542, 0xa2, 0x72, 0xae, 0x26, 0x09, 0x3e, 0xce, 0xcf}
diff --git a/vendor/winapi/src/um/mscat.rs b/vendor/winapi/src/um/mscat.rs
new file mode 100644
index 000000000..fca635fcb
--- /dev/null
+++ b/vendor/winapi/src/um/mscat.rs
@@ -0,0 +1,36 @@
+// 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.
+//! Microsoft Internet Security Catalog API Prototypes and Definitions
+use shared::guiddef::GUID;
+use shared::minwindef::DWORD;
+use um::mssip::SIP_INDIRECT_DATA;
+use um::wincrypt::{CRYPT_ATTR_BLOB, HCRYPTMSG, HCRYPTPROV};
+use um::winnt::{HANDLE, LPWSTR};
+STRUCT!{struct CRYPTCATSTORE {
+ cbStruct: DWORD,
+ dwPublicVersion: DWORD,
+ pwszP7File: LPWSTR,
+ hProv: HCRYPTPROV,
+ dwEncodingType: DWORD,
+ fdwStoreFlags: DWORD,
+ hReserved: HANDLE,
+ hAttrs: HANDLE,
+ hCryptMsg: HCRYPTMSG,
+ hSorted: HANDLE,
+}}
+STRUCT!{struct CRYPTCATMEMBER {
+ cbStruct: DWORD,
+ pwszReferenceTag: LPWSTR,
+ pwszFileName: LPWSTR,
+ gSubjectType: GUID,
+ fdwMemberFlags: DWORD,
+ pIndirectData: *mut SIP_INDIRECT_DATA,
+ dwCertVersion: DWORD,
+ dwReserved: DWORD,
+ hReserved: HANDLE,
+ sEncodedIndirectData: CRYPT_ATTR_BLOB,
+ sEncodedMemberInfo: CRYPT_ATTR_BLOB,
+}}
diff --git a/vendor/winapi/src/um/mschapp.rs b/vendor/winapi/src/um/mschapp.rs
new file mode 100644
index 000000000..103b54c9f
--- /dev/null
+++ b/vendor/winapi/src/um/mschapp.rs
@@ -0,0 +1,48 @@
+// 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;
+use shared::minwindef::{DWORD, UCHAR};
+use um::winnt::{BOOLEAN, CHAR, PWSTR};
+pub const CYPHER_BLOCK_LENGTH: SIZE_T = 8;
+STRUCT!{struct CYPHER_BLOCK {
+ data: [CHAR; CYPHER_BLOCK_LENGTH],
+}}
+STRUCT!{struct LM_OWF_PASSWORD {
+ data: [CYPHER_BLOCK; 2],
+}}
+pub type PLM_OWF_PASSWORD = *mut LM_OWF_PASSWORD;
+pub type NT_OWF_PASSWORD = LM_OWF_PASSWORD;
+pub type PNT_OWF_PASSWORD = *mut NT_OWF_PASSWORD;
+STRUCT!{struct SAMPR_ENCRYPTED_USER_PASSWORD {
+ Buffer: [UCHAR; (256 * 2) + 4],
+}}
+pub type PSAMPR_ENCRYPTED_USER_PASSWORD = *mut SAMPR_ENCRYPTED_USER_PASSWORD;
+STRUCT!{struct ENCRYPTED_LM_OWF_PASSWORD {
+ data: [CYPHER_BLOCK; 2],
+}}
+pub type PENCRYPTED_LM_OWF_PASSWORD = *mut ENCRYPTED_LM_OWF_PASSWORD;
+pub type ENCRYPTED_NT_OWF_PASSWORD = ENCRYPTED_LM_OWF_PASSWORD;
+pub type PENCRYPTED_NT_OWF_PASSWORD = *mut ENCRYPTED_NT_OWF_PASSWORD;
+extern "system" {
+ pub fn MSChapSrvChangePassword(
+ ServerName: PWSTR,
+ UserName: PWSTR,
+ LmOldPresent: BOOLEAN,
+ LmOldOwfPassword: PLM_OWF_PASSWORD,
+ LmNewOwfPassword: PLM_OWF_PASSWORD,
+ NtOldOwfPassword: PNT_OWF_PASSWORD,
+ NtNewOwfPassword: PNT_OWF_PASSWORD,
+ ) -> DWORD;
+ pub fn MSChapSrvChangePassword2(
+ ServerName: PWSTR,
+ UserName: PWSTR,
+ NewPasswordEncryptedWithOldNt: PSAMPR_ENCRYPTED_USER_PASSWORD,
+ OldNtOwfPasswordEncryptedWithNewNt: PENCRYPTED_NT_OWF_PASSWORD,
+ LmPresent: BOOLEAN,
+ NewPasswordEncryptedWithOldLm: PSAMPR_ENCRYPTED_USER_PASSWORD,
+ OldLmOwfPasswordEncryptedWithNewLmOrNt: PENCRYPTED_LM_OWF_PASSWORD,
+ ) -> DWORD;
+}
diff --git a/vendor/winapi/src/um/mssip.rs b/vendor/winapi/src/um/mssip.rs
new file mode 100644
index 000000000..f8cd6e407
--- /dev/null
+++ b/vendor/winapi/src/um/mssip.rs
@@ -0,0 +1,255 @@
+// 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.
+//! Microsoft SIP Provider Prototypes and Definitions
+use shared::guiddef::GUID;
+use shared::minwindef::{BOOL, BYTE, DWORD, LPVOID};
+use um::mscat::{CRYPTCATMEMBER, CRYPTCATSTORE};
+use um::wincrypt::{
+ CRYPT_ALGORITHM_IDENTIFIER, CRYPT_ATTRIBUTE_TYPE_VALUE, CRYPT_HASH_BLOB, HCRYPTPROV,
+};
+use um::winnt::{HANDLE, LPCWSTR, PWSTR, WCHAR};
+pub type CRYPT_DIGEST_DATA = CRYPT_HASH_BLOB;
+pub const MSSIP_FLAGS_PROHIBIT_RESIZE_ON_CREATE: DWORD = 0x00010000;
+pub const MSSIP_FLAGS_USE_CATALOG: DWORD = 0x00020000;
+pub const MSSIP_FLAGS_MULTI_HASH: DWORD = 0x00040000;
+pub const SPC_INC_PE_RESOURCES_FLAG: DWORD = 0x80;
+pub const SPC_INC_PE_DEBUG_INFO_FLAG: DWORD = 0x40;
+pub const SPC_INC_PE_IMPORT_ADDR_TABLE_FLAG: DWORD = 0x20;
+pub const SPC_EXC_PE_PAGE_HASHES_FLAG: DWORD = 0x10;
+pub const SPC_INC_PE_PAGE_HASHES_FLAG: DWORD = 0x100;
+pub const SPC_DIGEST_GENERATE_FLAG: DWORD = 0x200;
+pub const SPC_DIGEST_SIGN_FLAG: DWORD = 0x400;
+pub const SPC_RELAXED_PE_MARKER_CHECK: DWORD = 0x800;
+pub const SPC_MARKER_CHECK_SKIP_SIP_INDIRECT_DATA_FLAG: DWORD = 0x00000001;
+pub const SPC_MARKER_CHECK_CURRENTLY_SUPPORTED_FLAGS: DWORD
+ = SPC_MARKER_CHECK_SKIP_SIP_INDIRECT_DATA_FLAG;
+pub const MSSIP_ADDINFO_NONE: DWORD = 0;
+pub const MSSIP_ADDINFO_FLAT: DWORD = 1;
+pub const MSSIP_ADDINFO_CATMEMBER: DWORD = 2;
+pub const MSSIP_ADDINFO_BLOB: DWORD = 3;
+pub const MSSIP_ADDINFO_NONMSSIP: DWORD = 500;
+UNION!{union SIP_SUBJECTINFO_u {
+ [usize; 1],
+ psFlat psFlat_mut: *mut MS_ADDINFO_FLAT,
+ psCatMember psCatMember_mut: *mut MS_ADDINFO_CATALOGMEMBER,
+ psBlob psBlob_mut: *mut MS_ADDINFO_BLOB,
+}}
+STRUCT!{struct SIP_SUBJECTINFO {
+ cbSize: DWORD,
+ pgSubjectType: *mut GUID,
+ hFile: HANDLE,
+ pwsFileName: LPCWSTR,
+ pwsDisplayName: LPCWSTR,
+ dwReserved1: DWORD,
+ dwIntVersion: DWORD,
+ hProv: HCRYPTPROV,
+ DigestAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ dwFlags: DWORD,
+ dwEncodingType: DWORD,
+ dwReserved2: DWORD,
+ fdwCAPISettings: DWORD,
+ fdwSecuritySettings: DWORD,
+ dwIndex: DWORD,
+ dwUnionChoice: DWORD,
+ u: SIP_SUBJECTINFO_u,
+ pClientData: LPVOID,
+}}
+pub type LPSIP_SUBJECTINFO = *mut SIP_SUBJECTINFO;
+STRUCT!{struct MS_ADDINFO_FLAT {
+ cbStruct: DWORD,
+ pIndirectData: *mut SIP_INDIRECT_DATA,
+}}
+pub type PMS_ADDINFO_FLAT = *mut MS_ADDINFO_FLAT;
+STRUCT!{struct MS_ADDINFO_CATALOGMEMBER {
+ cbStruct: DWORD,
+ pStore: *mut CRYPTCATSTORE,
+ pMember: *mut CRYPTCATMEMBER,
+}}
+pub type PMS_ADDINFO_CATALOGMEMBER = *mut MS_ADDINFO_CATALOGMEMBER;
+STRUCT!{struct MS_ADDINFO_BLOB {
+ cbStruct: DWORD,
+ cbMemObject: DWORD,
+ pbMemObject: *mut BYTE,
+ cbMemSignedMsg: DWORD,
+ pbMemSignedMsg: *mut BYTE,
+}}
+pub type PMS_ADDINFO_BLOB = *mut MS_ADDINFO_BLOB;
+STRUCT!{struct SIP_CAP_SET_V2 {
+ cbSize: DWORD,
+ dwVersion: DWORD,
+ isMultiSign: BOOL,
+ dwReserved: DWORD,
+}}
+pub type PSIP_CAP_SET_V2 = *mut SIP_CAP_SET_V2;
+UNION!{union SIP_CAP_SET_V3_u {
+ [u32; 1],
+ dwFlags dwFlags_mut: DWORD,
+ dwReserved dwReserved_mut: DWORD,
+}}
+STRUCT!{struct SIP_CAP_SET_V3 {
+ cbSize: DWORD,
+ dwVersion: DWORD,
+ isMultiSign: BOOL,
+ u: SIP_CAP_SET_V3_u,
+}}
+pub type PSIP_CAP_SET_V3 = *mut SIP_CAP_SET_V3;
+pub type SIP_CAP_SET = SIP_CAP_SET_V3;
+pub type PSIP_CAP_SET = PSIP_CAP_SET_V3;
+pub const SIP_CAP_SET_VERSION_2: DWORD = 2;
+pub const SIP_CAP_SET_VERSION_3: DWORD = 3;
+pub const SIP_CAP_SET_CUR_VER: DWORD = 3;
+pub const SIP_CAP_FLAG_SEALING: DWORD = 0x00000001;
+STRUCT!{struct SIP_INDIRECT_DATA {
+ Data: CRYPT_ATTRIBUTE_TYPE_VALUE,
+ DigestAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ Digest: CRYPT_HASH_BLOB,
+}}
+pub type PSIP_INDIRECT_DATA = *mut SIP_INDIRECT_DATA;
+extern "system" {
+ pub fn CryptSIPGetSignedDataMsg(
+ pSubjectInfo: *mut SIP_SUBJECTINFO,
+ pdwEncodingType: *mut DWORD,
+ dwIndex: DWORD,
+ pcbSignedDataMsg: *mut DWORD,
+ pbSignedDataMsg: *mut BYTE,
+ ) -> BOOL;
+}
+FN!{stdcall pCryptSIPGetSignedDataMsg(
+ pSubjectInfo: *mut SIP_SUBJECTINFO,
+ pdwEncodingType: *mut DWORD,
+ dwIndex: DWORD,
+ pcbSignedDataMsg: *mut DWORD,
+ pbSignedDataMsg: *mut BYTE,
+) -> BOOL}
+extern "system" {
+ pub fn CryptSIPPutSignedDataMsg(
+ pSubjectInfo: *mut SIP_SUBJECTINFO,
+ dwEncodingType: DWORD,
+ pdwIndex: *mut DWORD,
+ cbSignedDataMsg: DWORD,
+ pbSignedDataMsg: *mut BYTE,
+ ) -> BOOL;
+}
+FN!{stdcall pCryptSIPPutSignedDataMsg(
+ pSubjectInfo: *mut SIP_SUBJECTINFO,
+ dwEncodingType: DWORD,
+ pdwIndex: *mut DWORD,
+ cbSignedDataMsg: DWORD,
+ pbSignedDataMsg: *mut BYTE,
+) -> BOOL}
+extern "system" {
+ pub fn CryptSIPCreateIndirectData(
+ pSubjectInfo: *mut SIP_SUBJECTINFO,
+ pcbIndirectData: *mut DWORD,
+ pIndirectData: *mut SIP_INDIRECT_DATA,
+ ) -> BOOL;
+}
+FN!{stdcall pCryptSIPCreateIndirectData(
+ pSubjectInfo: *mut SIP_SUBJECTINFO,
+ pcbIndirectData: *mut DWORD,
+ pIndirectData: *mut SIP_INDIRECT_DATA,
+) -> BOOL}
+extern "system" {
+ pub fn CryptSIPVerifyIndirectData(
+ pSubjectInfo: *mut SIP_SUBJECTINFO,
+ pIndirectData: *mut SIP_INDIRECT_DATA,
+ ) -> BOOL;
+}
+FN!{stdcall pCryptSIPVerifyIndirectData(
+ pSubjectInfo: *mut SIP_SUBJECTINFO,
+ pIndirectData: *mut SIP_INDIRECT_DATA,
+) -> BOOL}
+extern "system" {
+ pub fn CryptSIPRemoveSignedDataMsg(
+ pSubjectInfo: *mut SIP_SUBJECTINFO,
+ dwIndex: DWORD,
+ ) -> BOOL;
+}
+FN!{stdcall pCryptSIPRemoveSignedDataMsg(
+ pSubjectInfo: *mut SIP_SUBJECTINFO,
+ dwIndex: DWORD,
+) -> BOOL}
+STRUCT!{struct SIP_DISPATCH_INFO {
+ cbSize: DWORD,
+ hSIP: HANDLE,
+ pfGet: pCryptSIPGetSignedDataMsg,
+ pfPut: pCryptSIPPutSignedDataMsg,
+ pfCreate: pCryptSIPCreateIndirectData,
+ pfVerify: pCryptSIPVerifyIndirectData,
+ pfRemove: pCryptSIPRemoveSignedDataMsg,
+}}
+pub type LPSIP_DISPATCH_INFO = *mut SIP_DISPATCH_INFO;
+FN!{stdcall pfnIsFileSupported(
+ hFile: HANDLE,
+ pgSubject: *mut GUID,
+) -> BOOL}
+FN!{stdcall pfnIsFileSupportedName(
+ pwszFileName: *mut WCHAR,
+ pgSubject: *mut GUID,
+) -> BOOL}
+STRUCT!{struct SIP_ADD_NEWPROVIDER {
+ cbStruct: DWORD,
+ pgSubject: *mut GUID,
+ pwszDLLFileName: *mut WCHAR,
+ pwszMagicNumber: *mut WCHAR,
+ pwszIsFunctionName: *mut WCHAR,
+ pwszGetFuncName: *mut WCHAR,
+ pwszPutFuncName: *mut WCHAR,
+ pwszCreateFuncName: *mut WCHAR,
+ pwszVerifyFuncName: *mut WCHAR,
+ pwszRemoveFuncName: *mut WCHAR,
+ pwszIsFunctionNameFmt2: *mut WCHAR,
+ pwszGetCapFuncName: PWSTR,
+}}
+pub type PSIP_ADD_NEWPROVIDER = *mut SIP_ADD_NEWPROVIDER;
+pub const SIP_MAX_MAGIC_NUMBER: DWORD = 4;
+extern "system" {
+ pub fn CryptSIPLoad(
+ pgSubject: *const GUID,
+ dwFlags: DWORD,
+ pSipDispatch: *mut SIP_DISPATCH_INFO,
+ ) -> BOOL;
+ pub fn CryptSIPRetrieveSubjectGuid(
+ FileName: LPCWSTR,
+ hFileIn: HANDLE,
+ pgSubject: *mut GUID,
+ ) -> BOOL;
+ pub fn CryptSIPRetrieveSubjectGuidForCatalogFile(
+ FileName: LPCWSTR,
+ hFileIn: HANDLE,
+ pgSubject: *mut GUID,
+ ) -> BOOL;
+ pub fn CryptSIPAddProvider(
+ psNewProv: *mut SIP_ADD_NEWPROVIDER,
+ ) -> BOOL;
+ pub fn CryptSIPRemoveProvider(
+ pgProv: *mut GUID,
+ ) -> BOOL;
+ pub fn CryptSIPGetCaps(
+ pSubjInfo: *mut SIP_SUBJECTINFO,
+ pCaps: *mut SIP_CAP_SET,
+ ) -> BOOL;
+}
+FN!{stdcall pCryptSIPGetCaps(
+ pSubjInfo: *mut SIP_SUBJECTINFO,
+ pCaps: *mut SIP_CAP_SET,
+) -> BOOL}
+extern "system" {
+ pub fn CryptSIPGetSealedDigest(
+ pSubjectInfo: *mut SIP_SUBJECTINFO,
+ pSig: *const BYTE,
+ dwSig: DWORD,
+ pbDigest: *mut BYTE,
+ pcbDigest: *mut DWORD,
+ ) -> BOOL;
+}
+FN!{stdcall pCryptSIPGetSealedDigest(
+ pSubjectInfo: *mut SIP_SUBJECTINFO,
+ pSig: *const BYTE,
+ dwSig: DWORD,
+ pbDigest: *mut BYTE,
+ pcbDigest: *mut DWORD,
+) -> BOOL}
diff --git a/vendor/winapi/src/um/mswsock.rs b/vendor/winapi/src/um/mswsock.rs
new file mode 100644
index 000000000..cbbe19135
--- /dev/null
+++ b/vendor/winapi/src/um/mswsock.rs
@@ -0,0 +1,413 @@
+// 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 ctypes::{c_char, c_int};
+use shared::minwindef::{BOOL, DWORD, INT, LPDWORD, LPINT, LPVOID, ULONG};
+use shared::mswsockdef::{PRIORESULT, PRIO_BUF, RIO_BUFFERID, RIO_CQ, RIO_RQ};
+use shared::ws2def::{IOC_VENDOR, IOC_WS2, LPWSAMSG, SOCKADDR};
+use um::minwinbase::LPOVERLAPPED;
+use um::winnt::{CHAR, HANDLE, LARGE_INTEGER, PCHAR, PVOID, WCHAR};
+use um::winsock2::{
+ LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE, LPWSAPOLLFD, SOCKET, WSAESETSERVICEOP,
+ WSAPOLLFD,
+};
+pub const SO_CONNDATA: c_int = 0x7000;
+pub const SO_CONNOPT: c_int = 0x7001;
+pub const SO_DISCDATA: c_int = 0x7002;
+pub const SO_DISCOPT: c_int = 0x7003;
+pub const SO_CONNDATALEN: c_int = 0x7004;
+pub const SO_CONNOPTLEN: c_int = 0x7005;
+pub const SO_DISCDATALEN: c_int = 0x7006;
+pub const SO_DISCOPTLEN: c_int = 0x7007;
+pub const SO_OPENTYPE: c_int = 0x7008;
+pub const SO_SYNCHRONOUS_ALERT: DWORD = 0x10;
+pub const SO_SYNCHRONOUS_NONALERT: DWORD = 0x20;
+pub const SO_MAXDG: c_int = 0x7009;
+pub const SO_MAXPATHDG: c_int = 0x700A;
+pub const SO_UPDATE_ACCEPT_CONTEXT: c_int = 0x700B;
+pub const SO_CONNECT_TIME: c_int = 0x700C;
+pub const SO_UPDATE_CONNECT_CONTEXT: c_int = 0x7010;
+pub const TCP_BSDURGENT: c_int = 0x7000;
+pub const SIO_UDP_CONNRESET: DWORD = _WSAIOW!(IOC_VENDOR, 12);
+pub const SIO_SOCKET_CLOSE_NOTIFY: DWORD = _WSAIOW!(IOC_VENDOR, 13);
+pub const SIO_UDP_NETRESET: DWORD = _WSAIOW!(IOC_VENDOR, 15);
+extern "system" {
+ pub fn WSARecvEx(
+ s: SOCKET,
+ buf: *mut c_char,
+ len: c_int,
+ flags: *mut c_int,
+ ) -> c_int;
+}
+STRUCT!{struct TRANSMIT_FILE_BUFFERS {
+ Head: LPVOID,
+ HeadLength: DWORD,
+ Tail: LPVOID,
+ TailLength: DWORD,
+}}
+pub type PTRANSMIT_FILE_BUFFERS = *mut TRANSMIT_FILE_BUFFERS;
+pub type LPTRANSMIT_FILE_BUFFERS = *mut TRANSMIT_FILE_BUFFERS;
+pub const TF_DISCONNECT: DWORD = 0x01;
+pub const TF_REUSE_SOCKET: DWORD = 0x02;
+pub const TF_WRITE_BEHIND: DWORD = 0x04;
+pub const TF_USE_DEFAULT_WORKER: DWORD = 0x00;
+pub const TF_USE_SYSTEM_THREAD: DWORD = 0x10;
+pub const TF_USE_KERNEL_APC: DWORD = 0x20;
+extern "system" {
+ pub fn TransmitFile(
+ hSocket: SOCKET,
+ hFile: HANDLE,
+ nNumberOfBytesToWrite: DWORD,
+ nNumberOfBytesPerSend: DWORD,
+ lpOverlapped: LPOVERLAPPED,
+ lpTransmitBuffers: LPTRANSMIT_FILE_BUFFERS,
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn AcceptEx(
+ sListenSocket: SOCKET,
+ sAcceptSocket: SOCKET,
+ lpOutputBuffer: PVOID,
+ dwReceiveDataLength: DWORD,
+ dwLocalAddressLength: DWORD,
+ dwRemoteAddressLength: DWORD,
+ lpdwBytesReceived: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn GetAcceptExSockaddrs(
+ lpOutputBuffer: PVOID,
+ dwReceiveDataLength: DWORD,
+ dwLocalAddressLength: DWORD,
+ dwRemoteAddressLength: DWORD,
+ LocalSockaddr: *mut *mut SOCKADDR,
+ LocalSockaddrLength: LPINT,
+ RemoteSockaddr: *mut *mut SOCKADDR,
+ RemoteSockaddrLength: LPINT,
+ );
+}
+FN!{stdcall LPFN_TRANSMITFILE(
+ hSocket: SOCKET,
+ hFile: HANDLE,
+ nNumberOfBytesToWrite: DWORD,
+ nNumberOfBytesPerSend: DWORD,
+ lpOverlapped: LPOVERLAPPED,
+ lpTransmitBuffers: LPTRANSMIT_FILE_BUFFERS,
+ dwReserved: DWORD,
+) -> BOOL}
+DEFINE_GUID!{WSAID_TRANSMITFILE,
+ 0xb5367df0, 0xcbac, 0x11cf, 0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}
+FN!{stdcall LPFN_ACCEPTEX(
+ sListenSocket: SOCKET,
+ sAcceptSocket: SOCKET,
+ lpOutputBuffer: PVOID,
+ dwReceiveDataLength: DWORD,
+ dwLocalAddressLength: DWORD,
+ dwRemoteAddressLength: DWORD,
+ lpdwBytesReceived: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+) -> BOOL}
+DEFINE_GUID!{WSAID_ACCEPTEX,
+ 0xb5367df1, 0xcbac, 0x11cf, 0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}
+FN!{stdcall LPFN_GETACCEPTEXSOCKADDRS(
+ lpOutputBuffer: PVOID,
+ dwReceiveDataLength: DWORD,
+ dwLocalAddressLength: DWORD,
+ dwRemoteAddressLength: DWORD,
+ LocalSockaddr: *mut *mut SOCKADDR,
+ LocalSockaddrLength: LPINT,
+ RemoteSockaddr: *mut *mut SOCKADDR,
+ RemoteSockaddrLength: LPINT,
+) -> ()}
+DEFINE_GUID!{WSAID_GETACCEPTEXSOCKADDRS,
+ 0xb5367df2, 0xcbac, 0x11cf, 0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}
+pub const TP_ELEMENT_MEMORY: ULONG = 1;
+pub const TP_ELEMENT_FILE: ULONG = 2;
+pub const TP_ELEMENT_EOP: ULONG = 4;
+STRUCT!{struct TRANSMIT_PACKETS_ELEMENT_u_s {
+ nFileOffset: LARGE_INTEGER,
+ hFile: HANDLE,
+}}
+UNION!{union TRANSMIT_PACKETS_ELEMENT_u {
+ [u64; 2],
+ s s_mut: TRANSMIT_PACKETS_ELEMENT_u_s,
+ pBuffer pBuffer_mut: PVOID,
+}}
+STRUCT!{struct TRANSMIT_PACKETS_ELEMENT {
+ dwElFlags: ULONG,
+ cLength: ULONG,
+ u: TRANSMIT_PACKETS_ELEMENT_u,
+}}
+pub type PTRANSMIT_PACKETS_ELEMENT = *mut TRANSMIT_PACKETS_ELEMENT;
+pub type LPTRANSMIT_PACKETS_ELEMENT = *mut TRANSMIT_PACKETS_ELEMENT;
+pub const TP_DISCONNECT: DWORD = TF_DISCONNECT;
+pub const TP_REUSE_SOCKET: DWORD = TF_REUSE_SOCKET;
+pub const TP_USE_DEFAULT_WORKER: DWORD = TF_USE_DEFAULT_WORKER;
+pub const TP_USE_SYSTEM_THREAD: DWORD = TF_USE_SYSTEM_THREAD;
+pub const TP_USE_KERNEL_APC: DWORD = TF_USE_KERNEL_APC;
+FN!{stdcall LPFN_TRANSMITPACKETS(
+ hSocket: SOCKET,
+ lpPacketArray: LPTRANSMIT_PACKETS_ELEMENT,
+ nElementCount: DWORD,
+ nSendSize: DWORD,
+ lpOverlapped: LPOVERLAPPED,
+ dwFlags: DWORD,
+) -> BOOL}
+DEFINE_GUID!{WSAID_TRANSMITPACKETS,
+ 0xd9689da0, 0x1f90, 0x11d3, 0x99, 0x71, 0x00, 0xc0, 0x4f, 0x68, 0xc8, 0x76}
+FN!{stdcall LPFN_CONNECTEX(
+ s: SOCKET,
+ name: *const SOCKADDR,
+ namelen: c_int,
+ lpSendBuffer: PVOID,
+ dwSendDataLength: DWORD,
+ lpdwBytesSent: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+) -> BOOL}
+DEFINE_GUID!{WSAID_CONNECTEX,
+ 0x25a207b9, 0xddf3, 0x4660, 0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}
+FN!{stdcall LPFN_DISCONNECTEX(
+ s: SOCKET,
+ lpOverlapped: LPOVERLAPPED,
+ dwFlags: DWORD,
+ dwReserved: DWORD,
+) -> BOOL}
+DEFINE_GUID!{WSAID_DISCONNECTEX,
+ 0x7fda2e11, 0x8630, 0x436f, 0xa0, 0x31, 0xf5, 0x36, 0xa6, 0xee, 0xc1, 0x57}
+pub const DE_REUSE_SOCKET: DWORD = TF_REUSE_SOCKET;
+DEFINE_GUID!{NLA_NAMESPACE_GUID,
+ 0x6642243a, 0x3ba8, 0x4aa6, 0xba, 0xa5, 0x2e, 0xb, 0xd7, 0x1f, 0xdd, 0x83}
+DEFINE_GUID!{NLA_SERVICE_CLASS_GUID,
+ 0x37e515, 0xb5c9, 0x4a43, 0xba, 0xda, 0x8b, 0x48, 0xa8, 0x7a, 0xd2, 0x39}
+pub const NLA_ALLUSERS_NETWORK: WSAESETSERVICEOP = 0x00000001;
+pub const NLA_FRIENDLY_NAME: WSAESETSERVICEOP = 0x00000002;
+ENUM!{enum NLA_BLOB_DATA_TYPE {
+ NLA_RAW_DATA = 0,
+ NLA_INTERFACE = 1,
+ NLA_802_1X_LOCATION = 2,
+ NLA_CONNECTIVITY = 3,
+ NLA_ICS = 4,
+}}
+pub type PNLA_BLOB_DATA_TYPE = *mut NLA_BLOB_DATA_TYPE;
+ENUM!{enum NLA_CONNECTIVITY_TYPE {
+ NLA_NETWORK_AD_HOC = 0,
+ NLA_NETWORK_MANAGED = 1,
+ NLA_NETWORK_UNMANAGED = 2,
+ NLA_NETWORK_UNKNOWN = 3,
+}}
+pub type PNLA_CONNECTIVITY_TYPE = *mut NLA_CONNECTIVITY_TYPE;
+ENUM!{enum NLA_INTERNET {
+ NLA_INTERNET_UNKNOWN = 0,
+ NLA_INTERNET_NO = 1,
+ NLA_INTERNET_YES = 2,
+}}
+pub type PNLA_INTERNET = *mut NLA_INTERNET;
+STRUCT!{struct NLA_BLOB_s {
+ type_: NLA_BLOB_DATA_TYPE,
+ dwSize: DWORD,
+ nextOffset: DWORD,
+}}
+STRUCT!{struct NLA_BLOB_u_s1 {
+ dwType: DWORD,
+ dwSpeed: DWORD,
+ adapterName: [CHAR; 1],
+}}
+STRUCT!{struct NLA_BLOB_u_s2 {
+ information: [CHAR; 1],
+}}
+STRUCT!{struct NLA_BLOB_u_s3 {
+ type_: NLA_CONNECTIVITY_TYPE,
+ internet: NLA_INTERNET,
+}}
+STRUCT!{struct NLA_BLOB_u_s4_s {
+ speed: DWORD,
+ type_: DWORD,
+ state: DWORD,
+ machineName: [WCHAR; 256],
+ sharedAdapterName: [WCHAR; 256],
+}}
+STRUCT!{struct NLA_BLOB_u_s4 {
+ remote: NLA_BLOB_u_s4_s,
+}}
+UNION!{union NLA_BLOB_u {
+ [u32; 259],
+ rawData rawData_mut: [CHAR; 1],
+ interfaceData interfaceData_mut: NLA_BLOB_u_s1,
+ locationData locationData_mut: NLA_BLOB_u_s2,
+ connectivity connectivity_mut: NLA_BLOB_u_s3,
+ ICS ICS_mut: NLA_BLOB_u_s4,
+}}
+STRUCT!{struct NLA_BLOB {
+ header: NLA_BLOB_s,
+ data: NLA_BLOB_u,
+}}
+pub type PNLA_BLOB = *mut NLA_BLOB;
+pub type LPNLA_BLOB = *mut NLA_BLOB;
+FN!{stdcall LPFN_WSARECVMSG(
+ s: SOCKET,
+ lpMsg: LPWSAMSG,
+ lpdwNumberOfBytesRecvd: LPDWORD,
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+) -> INT}
+DEFINE_GUID!{WSAID_WSARECVMSG,
+ 0xf689d7c8, 0x6f1f, 0x436b, 0x8a, 0x53, 0xe5, 0x4f, 0xe3, 0x51, 0xc3, 0x22}
+pub const SIO_BSP_HANDLE: DWORD = _WSAIOR!(IOC_WS2, 27);
+pub const SIO_BSP_HANDLE_SELECT: DWORD = _WSAIOR!(IOC_WS2, 28);
+pub const SIO_BSP_HANDLE_POLL: DWORD = _WSAIOR!(IOC_WS2, 29);
+pub const SIO_BASE_HANDLE: DWORD = _WSAIOR!(IOC_WS2, 34);
+pub const SIO_EXT_SELECT: DWORD = _WSAIORW!(IOC_WS2, 30);
+pub const SIO_EXT_POLL: DWORD = _WSAIORW!(IOC_WS2, 31);
+pub const SIO_EXT_SENDMSG: DWORD = _WSAIORW!(IOC_WS2, 32);
+STRUCT!{struct WSAPOLLDATA {
+ result: c_int,
+ fds: ULONG,
+ timeout: INT,
+ fdArray: *mut WSAPOLLFD,
+}}
+pub type LPWSAPOLLDATA = *mut WSAPOLLDATA;
+STRUCT!{struct WSASENDMSG {
+ lpMsg: LPWSAMSG,
+ dwFlags: DWORD,
+ lpNumberOfBytesSent: LPDWORD,
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+}}
+pub type LPWSASENDMSG = *mut WSASENDMSG;
+FN!{stdcall LPFN_WSASENDMSG(
+ s: SOCKET,
+ lpMsg: LPWSAMSG,
+ dwFlags: DWORD,
+ lpNumberOfBytesSent: LPDWORD,
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+) -> INT}
+DEFINE_GUID!{WSAID_WSASENDMSG,
+ 0xa441e712, 0x754f, 0x43ca, 0x84, 0xa7, 0x0d, 0xee, 0x44, 0xcf, 0x60, 0x6d}
+FN!{stdcall LPFN_WSAPOLL(
+ fdarray: LPWSAPOLLFD,
+ nfds: ULONG,
+ timeout: INT,
+) -> INT}
+DEFINE_GUID!{WSAID_WSAPOLL,
+ 0x18C76F85, 0xDC66, 0x4964, 0x97, 0x2E, 0x23, 0xC2, 0x72, 0x38, 0x31, 0x2B}
+FN!{stdcall LPFN_RIORECEIVE(
+ SocketQueue: RIO_RQ,
+ pData: PRIO_BUF,
+ DataBufferCount: ULONG,
+ Flags: DWORD,
+ RequestContext: PVOID,
+) -> BOOL}
+FN!{stdcall LPFN_RIORECEIVEEX(
+ SocketQueue: RIO_RQ,
+ pData: PRIO_BUF,
+ DataBufferCount: ULONG,
+ pLocalAddress: PRIO_BUF,
+ pRemoteAddress: PRIO_BUF,
+ pControlContext: PRIO_BUF,
+ pFlags: PRIO_BUF,
+ Flags: DWORD,
+ RequestContext: PVOID,
+) -> c_int}
+FN!{stdcall LPFN_RIOSEND(
+ SocketQueue: RIO_RQ,
+ pData: PRIO_BUF,
+ DataBufferCount: ULONG,
+ Flags: DWORD,
+ RequestContext: PVOID,
+) -> BOOL}
+FN!{stdcall LPFN_RIOSENDEX(
+ SocketQueue: RIO_RQ,
+ pData: PRIO_BUF,
+ DataBufferCount: ULONG,
+ pLocalAddress: PRIO_BUF,
+ pRemoteAddress: PRIO_BUF,
+ pControlContext: PRIO_BUF,
+ pFlags: PRIO_BUF,
+ Flags: DWORD,
+ RequestContext: PVOID,
+) -> BOOL}
+FN!{stdcall LPFN_RIOCLOSECOMPLETIONQUEUE(
+ CQ: RIO_CQ,
+) -> ()}
+ENUM!{enum RIO_NOTIFICATION_COMPLETION_TYPE {
+ RIO_EVENT_COMPLETION = 1,
+ RIO_IOCP_COMPLETION = 2,
+}}
+pub type PRIO_NOTIFICATION_COMPLETION_TYPE = *mut RIO_NOTIFICATION_COMPLETION_TYPE;
+STRUCT!{struct RIO_NOTIFICATION_COMPLETION_u_s1 {
+ EventHandle: HANDLE,
+ NotifyReset: BOOL,
+}}
+STRUCT!{struct RIO_NOTIFICATION_COMPLETION_u_s2 {
+ IocpHandle: HANDLE,
+ CompletionKey: PVOID,
+ Overlapped: PVOID,
+}}
+UNION!{union RIO_NOTIFICATION_COMPLETION_u {
+ [u32; 3] [u64; 3],
+ Event Event_mut: RIO_NOTIFICATION_COMPLETION_u_s1,
+ Iocp Iocp_mut: RIO_NOTIFICATION_COMPLETION_u_s2,
+}}
+STRUCT!{struct RIO_NOTIFICATION_COMPLETION {
+ Type: RIO_NOTIFICATION_COMPLETION_TYPE,
+ u: RIO_NOTIFICATION_COMPLETION_u,
+}}
+pub type PRIO_NOTIFICATION_COMPLETION = *mut RIO_NOTIFICATION_COMPLETION;
+FN!{stdcall LPFN_RIOCREATECOMPLETIONQUEUE(
+ QueueSize: DWORD,
+ NotificationCompletion: PRIO_NOTIFICATION_COMPLETION,
+) -> RIO_CQ}
+FN!{stdcall LPFN_RIOCREATEREQUESTQUEUE(
+ Socket: SOCKET,
+ MaxOutstandingReceive: ULONG,
+ MaxReceiveDataBuffers: ULONG,
+ MaxOutstandingSend: ULONG,
+ MaxSendDataBuffers: ULONG,
+ ReceiveCQ: RIO_CQ,
+ SendCQ: RIO_CQ,
+ SocketContext: PVOID,
+) -> RIO_RQ}
+FN!{stdcall LPFN_RIODEQUEUECOMPLETION(
+ CQ: RIO_CQ,
+ Array: PRIORESULT,
+ ArraySize: ULONG,
+) -> ULONG}
+FN!{stdcall LPFN_RIODEREGISTERBUFFER(
+ BufferId: RIO_BUFFERID,
+) -> ()}
+FN!{stdcall LPFN_RIONOTIFY(
+ CQ: RIO_CQ,
+) -> INT}
+FN!{stdcall LPFN_RIOREGISTERBUFFER(
+ DataBuffer: PCHAR,
+ DataLength: DWORD,
+) -> RIO_BUFFERID}
+FN!{stdcall LPFN_RIORESIZECOMPLETIONQUEUE(
+ CQ: RIO_CQ,
+ QueueSize: DWORD,
+) -> BOOL}
+FN!{stdcall LPFN_RIORESIZEREQUESTQUEUE(
+ RQ: RIO_RQ,
+ MaxOutstandingReceive: DWORD,
+ MaxOutstandingSend: DWORD,
+) -> BOOL}
+STRUCT!{struct RIO_EXTENSION_FUNCTION_TABLE {
+ cbSize: DWORD,
+ RIOReceive: LPFN_RIORECEIVE,
+ RIOReceiveEx: LPFN_RIORECEIVEEX,
+ RIOSend: LPFN_RIOSEND,
+ RIOSendEx: LPFN_RIOSENDEX,
+ RIOCloseCompletionQueue: LPFN_RIOCLOSECOMPLETIONQUEUE,
+ RIOCreateCompletionQueue: LPFN_RIOCREATECOMPLETIONQUEUE,
+ RIOCreateRequestQueue: LPFN_RIOCREATEREQUESTQUEUE,
+ RIODequeueCompletion: LPFN_RIODEQUEUECOMPLETION,
+ RIODeregisterBuffer: LPFN_RIODEREGISTERBUFFER,
+ RIONotify: LPFN_RIONOTIFY,
+ RIORegisterBuffer: LPFN_RIOREGISTERBUFFER,
+ RIOResizeCompletionQueue: LPFN_RIORESIZECOMPLETIONQUEUE,
+ RIOResizeRequestQueue: LPFN_RIORESIZEREQUESTQUEUE,
+}}
+pub type PRIO_EXTENSION_FUNCTION_TABLE = *mut RIO_EXTENSION_FUNCTION_TABLE;
+DEFINE_GUID!{WSAID_MULTIPLE_RIO,
+ 0x8509e081, 0x96dd, 0x4005, 0xb1, 0x65, 0x9e, 0x2e, 0xe8, 0xc7, 0x9e, 0x3f}
diff --git a/vendor/winapi/src/um/namedpipeapi.rs b/vendor/winapi/src/um/namedpipeapi.rs
new file mode 100644
index 000000000..7c7447f1e
--- /dev/null
+++ b/vendor/winapi/src/um/namedpipeapi.rs
@@ -0,0 +1,93 @@
+// 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::minwindef::{BOOL, DWORD, LPDWORD, LPVOID, ULONG};
+use um::minwinbase::{LPOVERLAPPED, LPSECURITY_ATTRIBUTES};
+use um::winnt::{HANDLE, LPCWSTR, LPWSTR, PHANDLE};
+extern "system" {
+ pub fn CreatePipe(
+ hReadPipe: PHANDLE,
+ hWritePipe: PHANDLE,
+ lpPipeAttributes: LPSECURITY_ATTRIBUTES,
+ nSize: DWORD,
+ ) -> BOOL;
+ pub fn ConnectNamedPipe(
+ hNamedPipe: HANDLE,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn DisconnectNamedPipe(
+ hNamedPipe: HANDLE,
+ ) -> BOOL;
+ pub fn SetNamedPipeHandleState(
+ hNamedPipe: HANDLE,
+ lpMode: LPDWORD,
+ lpMaxCollectionCount: LPDWORD,
+ lpCollectDataTimeout: LPDWORD,
+ ) -> BOOL;
+ pub fn PeekNamedPipe(
+ hNamedPipe: HANDLE,
+ lpBuffer: LPVOID,
+ nBufferSize: DWORD,
+ lpBytesRead: LPDWORD,
+ lpTotalBytesAvail: LPDWORD,
+ lpBytesLeftThisMessage: LPDWORD,
+ ) -> BOOL;
+ pub fn TransactNamedPipe(
+ hNamedPipe: HANDLE,
+ lpInBuffer: LPVOID,
+ nInBufferSize: DWORD,
+ lpOutBuffer: LPVOID,
+ nOutBufferSize: DWORD,
+ lpBytesRead: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn CreateNamedPipeW(
+ lpName: LPCWSTR,
+ dwOpenMode: DWORD,
+ dwPipeMode: DWORD,
+ nMaxInstances: DWORD,
+ nOutBufferSize: DWORD,
+ nInBufferSize: DWORD,
+ nDefaultTimeOut: DWORD,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ ) -> HANDLE;
+ pub fn WaitNamedPipeW(
+ lpNamedPipeName: LPCWSTR,
+ nTimeOut: DWORD,
+ ) -> BOOL;
+ pub fn GetNamedPipeClientComputerNameW(
+ Pipe: HANDLE,
+ ClientComputerName: LPWSTR,
+ ClientComputerNameLength: ULONG,
+ ) -> BOOL;
+ pub fn ImpersonateNamedPipeClient(
+ hNamedPipe: HANDLE,
+ ) -> BOOL;
+ pub fn GetNamedPipeInfo(
+ hNamedPipe: HANDLE,
+ lpFlags: LPDWORD,
+ lpOutBufferSize: LPDWORD,
+ lpInBufferSize: LPDWORD,
+ lpMaxInstances: LPDWORD,
+ ) -> BOOL;
+ pub fn GetNamedPipeHandleStateW(
+ hNamedPipe: HANDLE,
+ lpState: LPDWORD,
+ lpCurInstances: LPDWORD,
+ lpMaxCollectionCount: LPDWORD,
+ lpCollectDataTimeout: LPDWORD,
+ lpUserName: LPWSTR,
+ nMaxUserNameSize: DWORD,
+ ) -> BOOL;
+ pub fn CallNamedPipeW(
+ lpNamedPipeName: LPCWSTR,
+ lpInBuffer: LPVOID,
+ nInBufferSize: DWORD,
+ lpOutBuffer: LPVOID,
+ nOutBufferSize: DWORD,
+ lpBytesRead: LPDWORD,
+ nTimeOut: DWORD,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/namespaceapi.rs b/vendor/winapi/src/um/namespaceapi.rs
new file mode 100644
index 000000000..cfdb80572
--- /dev/null
+++ b/vendor/winapi/src/um/namespaceapi.rs
@@ -0,0 +1,36 @@
+// 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::minwindef::{BOOL, LPVOID, ULONG};
+use shared::ntdef::{BOOLEAN, HANDLE, LPCWSTR};
+use um::minwinbase::LPSECURITY_ATTRIBUTES;
+use um::winnt::PSID;
+pub const PRIVATE_NAMESPACE_FLAG_DESTROY: ULONG = 0x00000001;
+extern "system" {
+ pub fn CreatePrivateNamespaceW(
+ lpPrivateNamespaceAttributes: LPSECURITY_ATTRIBUTES,
+ lpBoundaryDescriptor: LPVOID,
+ lpAliasPrefix: LPCWSTR,
+ ) -> HANDLE;
+ pub fn OpenPrivateNamespaceW(
+ lpBoundaryDescriptor: LPVOID,
+ lpAliasPrefix: LPCWSTR,
+ ) -> HANDLE;
+ pub fn ClosePrivateNamespace(
+ Handle: HANDLE,
+ Flags: ULONG,
+ ) -> BOOLEAN;
+ pub fn CreateBoundaryDescriptorW(
+ Name: LPCWSTR,
+ Flags: ULONG,
+ ) -> HANDLE;
+ pub fn AddSIDToBoundaryDescriptor(
+ BoundaryDescriptor: *mut HANDLE,
+ RequiredSid: PSID,
+ ) -> BOOL;
+ pub fn DeleteBoundaryDescriptor(
+ BoundaryDescriptor: HANDLE,
+ ) -> ();
+}
diff --git a/vendor/winapi/src/um/nb30.rs b/vendor/winapi/src/um/nb30.rs
new file mode 100644
index 000000000..100efbd19
--- /dev/null
+++ b/vendor/winapi/src/um/nb30.rs
@@ -0,0 +1,214 @@
+// 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.
+//! This module contains the definitions for portable NetBIOS 3.0 support.
+use shared::minwindef::{DWORD, PUCHAR, UCHAR, ULONG, USHORT, WORD};
+use um::winnt::HANDLE;
+pub const NCBNAMSZ: usize = 16;
+pub const MAX_LANA: usize = 254;
+FN!{stdcall PFPOST(
+ *mut NCB,
+) -> ()}
+#[cfg(target_pointer_width = "64")]
+STRUCT!{struct NCB {
+ ncb_command: UCHAR,
+ ncb_retcode: UCHAR,
+ ncb_lsn: UCHAR,
+ ncb_num: UCHAR,
+ ncb_buffer: PUCHAR,
+ ncb_length: WORD,
+ ncb_callname: [UCHAR; NCBNAMSZ],
+ ncb_name: [UCHAR; NCBNAMSZ],
+ ncb_rto: UCHAR,
+ ncb_sto: UCHAR,
+ ncb_post: PFPOST,
+ ncb_lana_num: UCHAR,
+ ncb_cmd_cplt: UCHAR,
+ ncb_reserve: [UCHAR; 18],
+ ncb_event: HANDLE,
+}}
+#[cfg(target_pointer_width = "32")]
+STRUCT!{struct NCB {
+ ncb_command: UCHAR,
+ ncb_retcode: UCHAR,
+ ncb_lsn: UCHAR,
+ ncb_num: UCHAR,
+ ncb_buffer: PUCHAR,
+ ncb_length: WORD,
+ ncb_callname: [UCHAR; NCBNAMSZ],
+ ncb_name: [UCHAR; NCBNAMSZ],
+ ncb_rto: UCHAR,
+ ncb_sto: UCHAR,
+ ncb_post: PFPOST,
+ ncb_lana_num: UCHAR,
+ ncb_cmd_cplt: UCHAR,
+ ncb_reserve: [UCHAR; 10],
+ ncb_event: HANDLE,
+}}
+pub type PNCB = *mut NCB;
+STRUCT!{struct ADAPTER_STATUS {
+ adapter_address: [UCHAR; 6],
+ rev_major: UCHAR,
+ reserved0: UCHAR,
+ adapter_type: UCHAR,
+ rev_minor: UCHAR,
+ duration: WORD,
+ frmr_recv: WORD,
+ frmr_xmit: WORD,
+ iframe_recv_err: WORD,
+ xmit_aborts: WORD,
+ xmit_success: DWORD,
+ recv_success: DWORD,
+ iframe_xmit_err: WORD,
+ recv_buff_unavail: WORD,
+ t1_timeouts: WORD,
+ ti_timeouts: WORD,
+ reserved1: DWORD,
+ free_ncbs: WORD,
+ max_cfg_ncbs: WORD,
+ max_ncbs: WORD,
+ xmit_buf_unavail: WORD,
+ max_dgram_size: WORD,
+ pending_sess: WORD,
+ max_cfg_sess: WORD,
+ max_sess: WORD,
+ max_sess_pkt_size: WORD,
+ name_count: WORD,
+}}
+pub type PADAPTER_STATUS = *mut ADAPTER_STATUS;
+STRUCT!{struct NAME_BUFFER {
+ name: [UCHAR; NCBNAMSZ],
+ name_num: UCHAR,
+ name_flags: UCHAR,
+}}
+pub type PNAME_BUFFER = *mut NAME_BUFFER;
+pub const NAME_FLAGS_MASK: UCHAR = 0x87;
+pub const GROUP_NAME: UCHAR = 0x80;
+pub const UNIQUE_NAME: UCHAR = 0x00;
+pub const REGISTERING: UCHAR = 0x00;
+pub const REGISTERED: UCHAR = 0x04;
+pub const DEREGISTERED: UCHAR = 0x05;
+pub const DUPLICATE: UCHAR = 0x06;
+pub const DUPLICATE_DEREG: UCHAR = 0x07;
+STRUCT!{struct SESSION_HEADER {
+ sess_name: UCHAR,
+ num_sess: UCHAR,
+ rcv_dg_outstanding: UCHAR,
+ rcv_any_outstanding: UCHAR,
+}}
+pub type PSESSION_HEADER = *mut SESSION_HEADER;
+STRUCT!{struct SESSION_BUFFER {
+ lsn: UCHAR,
+ state: UCHAR,
+ local_name: [UCHAR; NCBNAMSZ],
+ remote_name: [UCHAR; NCBNAMSZ],
+ rcvs_outstanding: UCHAR,
+ sends_outstanding: UCHAR,
+}}
+pub type PSESSION_BUFFER = *mut SESSION_BUFFER;
+pub const LISTEN_OUTSTANDING: UCHAR = 0x01;
+pub const CALL_PENDING: UCHAR = 0x02;
+pub const SESSION_ESTABLISHED: UCHAR = 0x03;
+pub const HANGUP_PENDING: UCHAR = 0x04;
+pub const HANGUP_COMPLETE: UCHAR = 0x05;
+pub const SESSION_ABORTED: UCHAR = 0x06;
+STRUCT!{struct LANA_ENUM {
+ length: UCHAR,
+ lana: [UCHAR; MAX_LANA + 1],
+}}
+pub type PLANA_ENUM = *mut LANA_ENUM;
+STRUCT!{struct FIND_NAME_HEADER {
+ node_count: WORD,
+ reserved: UCHAR,
+ unique_group: UCHAR,
+}}
+pub type PFIND_NAME_HEADER = *mut FIND_NAME_HEADER;
+STRUCT!{struct FIND_NAME_BUFFER {
+ length: UCHAR,
+ access_control: UCHAR,
+ frame_control: UCHAR,
+ destination_addr: [UCHAR; 6],
+ source_addr: [UCHAR; 6],
+ routing_info: [UCHAR; 18],
+}}
+pub type PFIND_NAME_BUFFER = *mut FIND_NAME_BUFFER;
+STRUCT!{struct ACTION_HEADER {
+ transport_id: ULONG,
+ action_code: USHORT,
+ reserved: USHORT,
+}}
+pub type PACTION_HEADER = *mut ACTION_HEADER;
+pub const ALL_TRANSPORTS: ULONG = 0x0000004d;
+pub const MS_NBF: ULONG = 0x46424e4d;
+pub const NCBCALL: UCHAR = 0x10;
+pub const NCBLISTEN: UCHAR = 0x11;
+pub const NCBHANGUP: UCHAR = 0x12;
+pub const NCBSEND: UCHAR = 0x14;
+pub const NCBRECV: UCHAR = 0x15;
+pub const NCBRECVANY: UCHAR = 0x16;
+pub const NCBCHAINSEND: UCHAR = 0x17;
+pub const NCBDGSEND: UCHAR = 0x20;
+pub const NCBDGRECV: UCHAR = 0x21;
+pub const NCBDGSENDBC: UCHAR = 0x22;
+pub const NCBADDNAME: UCHAR = 0x30;
+pub const NCBDELNAME: UCHAR = 0x31;
+pub const NCBRESET: UCHAR = 0x32;
+pub const NCBASTAT: UCHAR = 0x33;
+pub const NCBSSTAT: UCHAR = 0x34;
+pub const NCBCANCEL: UCHAR = 0x35;
+pub const NCBADDGRNAME: UCHAR = 0x36;
+pub const NCBENUM: UCHAR = 0x37;
+pub const NCBUNLINK: UCHAR = 0x70;
+pub const NCBSENDNA: UCHAR = 0x71;
+pub const NCBCHAINSENDNA: UCHAR = 0x72;
+pub const NCBLANSTALERT: UCHAR = 0x73;
+pub const NCBACTION: UCHAR = 0x77;
+pub const NCBFINDNAME: UCHAR = 0x78;
+pub const NCBTRACE: UCHAR = 0x79;
+pub const ASYNCH: UCHAR = 0x80;
+pub const NRC_GOODRET: UCHAR = 0x00;
+pub const NRC_BUFLEN: UCHAR = 0x01;
+pub const NRC_ILLCMD: UCHAR = 0x03;
+pub const NRC_CMDTMO: UCHAR = 0x05;
+pub const NRC_INCOMP: UCHAR = 0x06;
+pub const NRC_BADDR: UCHAR = 0x07;
+pub const NRC_SNUMOUT: UCHAR = 0x08;
+pub const NRC_NORES: UCHAR = 0x09;
+pub const NRC_SCLOSED: UCHAR = 0x0a;
+pub const NRC_CMDCAN: UCHAR = 0x0b;
+pub const NRC_DUPNAME: UCHAR = 0x0d;
+pub const NRC_NAMTFUL: UCHAR = 0x0e;
+pub const NRC_ACTSES: UCHAR = 0x0f;
+pub const NRC_LOCTFUL: UCHAR = 0x11;
+pub const NRC_REMTFUL: UCHAR = 0x12;
+pub const NRC_ILLNN: UCHAR = 0x13;
+pub const NRC_NOCALL: UCHAR = 0x14;
+pub const NRC_NOWILD: UCHAR = 0x15;
+pub const NRC_INUSE: UCHAR = 0x16;
+pub const NRC_NAMERR: UCHAR = 0x17;
+pub const NRC_SABORT: UCHAR = 0x18;
+pub const NRC_NAMCONF: UCHAR = 0x19;
+pub const NRC_IFBUSY: UCHAR = 0x21;
+pub const NRC_TOOMANY: UCHAR = 0x22;
+pub const NRC_BRIDGE: UCHAR = 0x23;
+pub const NRC_CANOCCR: UCHAR = 0x24;
+pub const NRC_CANCEL: UCHAR = 0x26;
+pub const NRC_DUPENV: UCHAR = 0x30;
+pub const NRC_ENVNOTDEF: UCHAR = 0x34;
+pub const NRC_OSRESNOTAV: UCHAR = 0x35;
+pub const NRC_MAXAPPS: UCHAR = 0x36;
+pub const NRC_NOSAPS: UCHAR = 0x37;
+pub const NRC_NORESOURCES: UCHAR = 0x38;
+pub const NRC_INVADDRESS: UCHAR = 0x39;
+pub const NRC_INVDDID: UCHAR = 0x3B;
+pub const NRC_LOCKFAIL: UCHAR = 0x3C;
+pub const NRC_OPENERR: UCHAR = 0x3f;
+pub const NRC_SYSTEM: UCHAR = 0x40;
+pub const NRC_PENDING: UCHAR = 0xff;
+extern "system" {
+ pub fn Netbios(
+ pncb: PNCB,
+ ) -> UCHAR;
+}
diff --git a/vendor/winapi/src/um/ncrypt.rs b/vendor/winapi/src/um/ncrypt.rs
new file mode 100644
index 000000000..5f5431e21
--- /dev/null
+++ b/vendor/winapi/src/um/ncrypt.rs
@@ -0,0 +1,88 @@
+// 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, ULONG_PTR};
+use shared::bcrypt::{BCRYPT_NO_KEY_VALIDATION, BCryptBufferDesc};
+use shared::minwindef::{DWORD, LPVOID, PBYTE};
+use um::winnt::{LONG, LPCWSTR, VOID};
+pub type SECURITY_STATUS = LONG;
+pub type HCRYPTPROV = ULONG_PTR;
+pub type HCRYPTKEY = ULONG_PTR;
+pub type HCRYPTHASH = ULONG_PTR;
+FN!{stdcall PFN_NCRYPT_ALLOC(
+ cbSize: SIZE_T,
+) -> LPVOID}
+FN!{stdcall PFN_NCRYPT_FREE(
+ pv: LPVOID,
+) -> VOID}
+STRUCT!{struct NCRYPT_ALLOC_PARA {
+ cbSize: DWORD,
+ pfnAlloc: PFN_NCRYPT_ALLOC,
+ pfnFree: PFN_NCRYPT_FREE,
+}}
+pub type NCryptBufferDesc = BCryptBufferDesc;
+pub type NCRYPT_HANDLE = ULONG_PTR;
+pub type NCRYPT_PROV_HANDLE = ULONG_PTR;
+pub type NCRYPT_KEY_HANDLE = ULONG_PTR;
+pub type NCRYPT_HASH_HANDLE = ULONG_PTR;
+pub type NCRYPT_SECRET_HANDLE = ULONG_PTR;
+pub const NCRYPT_NO_PADDING_FLAG: DWORD = 0x00000001;
+pub const NCRYPT_PAD_PKCS1_FLAG: DWORD = 0x00000002;
+pub const NCRYPT_PAD_OAEP_FLAG: DWORD = 0x00000004;
+pub const NCRYPT_PAD_PSS_FLAG: DWORD = 0x00000008;
+pub const NCRYPT_PAD_CIPHER_FLAG: DWORD = 0x00000010;
+pub const NCRYPT_ATTESTATION_FLAG: DWORD = 0x00000020;
+pub const NCRYPT_SEALING_FLAG: DWORD = 0x00000100;
+pub const NCRYPT_REGISTER_NOTIFY_FLAG: DWORD = 0x00000001;
+pub const NCRYPT_UNREGISTER_NOTIFY_FLAG: DWORD = 0x00000002;
+pub const NCRYPT_NO_KEY_VALIDATION: DWORD = BCRYPT_NO_KEY_VALIDATION;
+pub const NCRYPT_MACHINE_KEY_FLAG: DWORD = 0x00000020;
+pub const NCRYPT_SILENT_FLAG: DWORD = 0x00000040;
+pub const NCRYPT_OVERWRITE_KEY_FLAG: DWORD = 0x00000080;
+pub const NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG: DWORD = 0x00000200;
+pub const NCRYPT_DO_NOT_FINALIZE_FLAG: DWORD = 0x00000400;
+pub const NCRYPT_EXPORT_LEGACY_FLAG: DWORD = 0x00000800;
+pub const NCRYPT_IGNORE_DEVICE_STATE_FLAG: DWORD = 0x00001000;
+pub const NCRYPT_TREAT_NIST_AS_GENERIC_ECC_FLAG: DWORD = 0x00002000;
+pub const NCRYPT_NO_CACHED_PASSWORD: DWORD = 0x00004000;
+pub const NCRYPT_PROTECT_TO_LOCAL_SYSTEM: DWORD = 0x00008000;
+pub const NCRYPT_PERSIST_ONLY_FLAG: DWORD = 0x40000000;
+pub const NCRYPT_PERSIST_FLAG: DWORD = 0x80000000;
+pub const NCRYPT_PREFER_VIRTUAL_ISOLATION_FLAG: DWORD = 0x00010000;
+pub const NCRYPT_USE_VIRTUAL_ISOLATION_FLAG: DWORD = 0x00020000;
+pub const NCRYPT_USE_PER_BOOT_KEY_FLAG: DWORD = 0x00040000;
+extern "system" {
+ pub fn NCryptOpenStorageProvider(
+ phProvider: *mut NCRYPT_PROV_HANDLE,
+ pszProviderName: LPCWSTR,
+ dwFlags: DWORD,
+ ) -> SECURITY_STATUS;
+}
+pub const NCRYPT_ALLOW_EXPORT_FLAG: DWORD = 0x00000001;
+pub const NCRYPT_ALLOW_PLAINTEXT_EXPORT_FLAG: DWORD = 0x00000002;
+pub const NCRYPT_ALLOW_ARCHIVING_FLAG: DWORD = 0x00000004;
+pub const NCRYPT_ALLOW_PLAINTEXT_ARCHIVING_FLAG: DWORD = 0x00000008;
+extern "system" {
+ pub fn NCryptSetProperty(
+ hObject: NCRYPT_HANDLE,
+ pszProperty: LPCWSTR,
+ pbInput: PBYTE,
+ cbInput: DWORD,
+ dwFlags: DWORD,
+ ) -> SECURITY_STATUS;
+ pub fn NCryptImportKey(
+ hProvider: NCRYPT_PROV_HANDLE,
+ hImportKey: NCRYPT_KEY_HANDLE,
+ pszBlobType: LPCWSTR,
+ pParameterList: *const NCryptBufferDesc,
+ phKey: *mut NCRYPT_KEY_HANDLE,
+ pbData: PBYTE,
+ cbData: DWORD,
+ dwFlags: DWORD,
+ ) -> SECURITY_STATUS;
+ pub fn NCryptFreeObject(
+ hObject: NCRYPT_HANDLE,
+ ) -> SECURITY_STATUS;
+}
diff --git a/vendor/winapi/src/um/ntlsa.rs b/vendor/winapi/src/um/ntlsa.rs
new file mode 100644
index 000000000..0e283b1ad
--- /dev/null
+++ b/vendor/winapi/src/um/ntlsa.rs
@@ -0,0 +1,1530 @@
+// 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, ULONG_PTR};
+use shared::guiddef::GUID;
+use shared::minwindef::{PUCHAR, PULONG, UCHAR, ULONG, USHORT};
+use shared::ntdef::{NTSTATUS, PNTSTATUS};
+use um::lsalookup::{
+ LSA_TRUST_INFORMATION, LSA_UNICODE_STRING, PLSA_OBJECT_ATTRIBUTES,
+ PLSA_REFERENCED_DOMAIN_LIST, PLSA_STRING, PLSA_TRANSLATED_NAME, PLSA_TRANSLATED_SID2,
+ PLSA_TRUST_INFORMATION, PLSA_UNICODE_STRING,
+};
+use um::ntsecapi::PLSA_HANDLE;
+use um::subauth::{PUNICODE_STRING, UNICODE_STRING};
+use um::winnt::{
+ ACCESS_MASK, ANYSIZE_ARRAY, BOOLEAN, HANDLE, LARGE_INTEGER, LONG, LUID, PBOOLEAN,
+ PCLAIMS_BLOB, PHANDLE, PLARGE_INTEGER, PLUID, PPRIVILEGE_SET, PQUOTA_LIMITS,
+ PSECURITY_DESCRIPTOR, PSHORT, PSID, PTOKEN_GROUPS, PTOKEN_PRIVILEGES, PTOKEN_SOURCE, PVOID,
+ PWSTR, QUOTA_LIMITS, SECURITY_INFORMATION, SID_NAME_USE, STANDARD_RIGHTS_EXECUTE,
+ STANDARD_RIGHTS_READ, STANDARD_RIGHTS_REQUIRED, STANDARD_RIGHTS_WRITE, TOKEN_DEFAULT_DACL,
+ TOKEN_DEVICE_CLAIMS, TOKEN_OWNER, TOKEN_PRIMARY_GROUP, TOKEN_USER, TOKEN_USER_CLAIMS,
+};
+pub type LSA_OPERATIONAL_MODE = ULONG;
+pub type PLSA_OPERATIONAL_MODE = *mut LSA_OPERATIONAL_MODE;
+pub const LSA_MODE_PASSWORD_PROTECTED: ULONG = 0x00000001;
+pub const LSA_MODE_INDIVIDUAL_ACCOUNTS: ULONG = 0x00000002;
+pub const LSA_MODE_MANDATORY_ACCESS: ULONG = 0x00000004;
+pub const LSA_MODE_LOG_FULL: ULONG = 0x00000008;
+pub const LSA_MAXIMUM_SID_COUNT: SIZE_T = 0x00000100;
+pub const LSA_MAXIMUM_ENUMERATION_LENGTH: SIZE_T = 32000;
+pub const LSA_CALL_LICENSE_SERVER: ULONG = 0x80000000;
+ENUM!{enum SECURITY_LOGON_TYPE {
+ UndefinedLogonType = 0,
+ Interactive = 2,
+ Network,
+ Batch,
+ Service,
+ Proxy,
+ Unlock,
+ NetworkCleartext,
+ NewCredentials,
+ RemoteInteractive,
+ CachedInteractive,
+ CachedRemoteInteractive,
+ CachedUnlock,
+}}
+pub type PSECURITY_LOGON_TYPE = *mut SECURITY_LOGON_TYPE;
+pub const SECURITY_ACCESS_INTERACTIVE_LOGON: ULONG = 0x00000001;
+pub const SECURITY_ACCESS_NETWORK_LOGON: ULONG = 0x00000002;
+pub const SECURITY_ACCESS_BATCH_LOGON: ULONG = 0x00000004;
+pub const SECURITY_ACCESS_SERVICE_LOGON: ULONG = 0x00000010;
+pub const SECURITY_ACCESS_PROXY_LOGON: ULONG = 0x00000020;
+pub const SECURITY_ACCESS_DENY_INTERACTIVE_LOGON: ULONG = 0x00000040;
+pub const SECURITY_ACCESS_DENY_NETWORK_LOGON: ULONG = 0x00000080;
+pub const SECURITY_ACCESS_DENY_BATCH_LOGON: ULONG = 0x00000100;
+pub const SECURITY_ACCESS_DENY_SERVICE_LOGON: ULONG = 0x00000200;
+pub const SECURITY_ACCESS_REMOTE_INTERACTIVE_LOGON: ULONG = 0x00000400;
+pub const SECURITY_ACCESS_DENY_REMOTE_INTERACTIVE_LOGON: ULONG = 0x00000800;
+ENUM!{enum SE_ADT_PARAMETER_TYPE {
+ SeAdtParmTypeNone = 0,
+ SeAdtParmTypeString,
+ SeAdtParmTypeFileSpec,
+ SeAdtParmTypeUlong,
+ SeAdtParmTypeSid,
+ SeAdtParmTypeLogonId,
+ SeAdtParmTypeNoLogonId,
+ SeAdtParmTypeAccessMask,
+ SeAdtParmTypePrivs,
+ SeAdtParmTypeObjectTypes,
+ SeAdtParmTypeHexUlong,
+ SeAdtParmTypePtr,
+ SeAdtParmTypeTime,
+ SeAdtParmTypeGuid,
+ SeAdtParmTypeLuid,
+ SeAdtParmTypeHexInt64,
+ SeAdtParmTypeStringList,
+ SeAdtParmTypeSidList,
+ SeAdtParmTypeDuration,
+ SeAdtParmTypeUserAccountControl,
+ SeAdtParmTypeNoUac,
+ SeAdtParmTypeMessage,
+ SeAdtParmTypeDateTime,
+ SeAdtParmTypeSockAddr,
+ SeAdtParmTypeSD,
+ SeAdtParmTypeLogonHours,
+ SeAdtParmTypeLogonIdNoSid,
+ SeAdtParmTypeUlongNoConv,
+ SeAdtParmTypeSockAddrNoPort,
+ SeAdtParmTypeAccessReason,
+ SeAdtParmTypeStagingReason,
+ SeAdtParmTypeResourceAttribute,
+ SeAdtParmTypeClaims,
+ SeAdtParmTypeLogonIdAsSid,
+ SeAdtParmTypeMultiSzString,
+ SeAdtParmTypeLogonIdEx,
+}}
+pub type PSE_ADT_PARAMETER_TYPE = *mut SE_ADT_PARAMETER_TYPE;
+pub const SE_ADT_OBJECT_ONLY: USHORT = 0x1;
+STRUCT!{struct SE_ADT_OBJECT_TYPE {
+ ObjectType: GUID,
+ Flags: USHORT,
+ Level: USHORT,
+ AccessMask: ACCESS_MASK,
+}}
+pub type PSE_ADT_OBJECT_TYPE = *mut SE_ADT_OBJECT_TYPE;
+STRUCT!{struct SE_ADT_PARAMETER_ARRAY_ENTRY {
+ Type: SE_ADT_PARAMETER_TYPE,
+ Length: ULONG,
+ Data: [ULONG_PTR; 2],
+ Address: PVOID,
+}}
+pub type PSE_ADT_PARAMETER_ARRAY_ENTRY = *mut SE_ADT_PARAMETER_ARRAY_ENTRY;
+STRUCT!{struct SE_ADT_ACCESS_REASON {
+ AccessMask: ACCESS_MASK,
+ AccessReasons: [ULONG; 32],
+ ObjectTypeIndex: ULONG,
+ AccessGranted: ULONG,
+ SecurityDescriptor: PSECURITY_DESCRIPTOR,
+}}
+pub type PSE_ADT_ACCESS_REASON = *mut SE_ADT_ACCESS_REASON;
+STRUCT!{struct SE_ADT_CLAIMS {
+ Length: ULONG,
+ Claims: PCLAIMS_BLOB,
+}}
+pub type PSE_ADT_CLAIMS = *mut SE_ADT_CLAIMS;
+pub const SE_MAX_AUDIT_PARAMETERS: SIZE_T = 32;
+pub const SE_MAX_GENERIC_AUDIT_PARAMETERS: SIZE_T = 28;
+STRUCT!{struct SE_ADT_PARAMETER_ARRAY {
+ CategoryId: ULONG,
+ AuditId: ULONG,
+ ParameterCount: ULONG,
+ Length: ULONG,
+ FlatSubCategoryId: USHORT,
+ Type: USHORT,
+ Flags: ULONG,
+ Parameters: [SE_ADT_PARAMETER_ARRAY_ENTRY; SE_MAX_AUDIT_PARAMETERS],
+}}
+pub type PSE_ADT_PARAMETER_ARRAY = *mut SE_ADT_PARAMETER_ARRAY;
+STRUCT!{struct SE_ADT_PARAMETER_ARRAY_EX {
+ CategoryId: ULONG,
+ AuditId: ULONG,
+ Version: ULONG,
+ ParameterCount: ULONG,
+ Length: ULONG,
+ FlatSubCategoryId: USHORT,
+ Type: USHORT,
+ Flags: ULONG,
+ Parameters: [SE_ADT_PARAMETER_ARRAY_ENTRY; SE_MAX_AUDIT_PARAMETERS],
+}}
+pub type PSE_ADT_PARAMETER_ARRAY_EX = *mut SE_ADT_PARAMETER_ARRAY_EX;
+pub const SE_ADT_PARAMETERS_SELF_RELATIVE: ULONG = 0x00000001;
+pub const SE_ADT_PARAMETERS_SEND_TO_LSA: ULONG = 0x00000002;
+pub const SE_ADT_PARAMETER_EXTENSIBLE_AUDIT: ULONG = 0x00000004;
+pub const SE_ADT_PARAMETER_GENERIC_AUDIT: ULONG = 0x00000008;
+pub const SE_ADT_PARAMETER_WRITE_SYNCHRONOUS: ULONG = 0x00000010;
+#[cfg(target_pointer_width = "32")]
+#[inline]
+pub fn LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(
+ AuditParameters: SE_ADT_PARAMETER_ARRAY,
+) -> SIZE_T {
+ 664 // FIXME: sizeof::<SE_ADT_PARAMETER_ARRAY>()
+ - (20 // FIXME: sizeof::<SE_ADT_PARAMETER_ARRAY_ENTRY>()
+ * (SE_MAX_AUDIT_PARAMETERS - AuditParameters.ParameterCount as SIZE_T))
+}
+#[cfg(target_pointer_width = "64")]
+#[inline]
+pub fn LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(
+ AuditParameters: SE_ADT_PARAMETER_ARRAY,
+) -> SIZE_T {
+ 1048 // FIXME: sizeof::<SE_ADT_PARAMETER_ARRAY>()
+ - (32 // FIXME: sizeof::<SE_ADT_PARAMETER_ARRAY_ENTRY>()
+ * (SE_MAX_AUDIT_PARAMETERS - AuditParameters.ParameterCount as SIZE_T))
+}
+STRUCT!{struct LSA_ADT_STRING_LIST_ENTRY {
+ Flags: ULONG,
+ String: UNICODE_STRING,
+}}
+pub type PLSA_ADT_STRING_LIST_ENTRY = *mut LSA_ADT_STRING_LIST_ENTRY;
+STRUCT!{struct LSA_ADT_STRING_LIST {
+ cStrings: ULONG,
+ String: PLSA_ADT_STRING_LIST_ENTRY,
+}}
+pub type PLSA_ADT_STRING_LIST = *mut LSA_ADT_STRING_LIST;
+STRUCT!{struct LSA_ADT_SID_LIST_ENTRY {
+ Flags: ULONG,
+ Sid: PSID,
+}}
+pub type PLSA_ADT_SID_LIST_ENTRY = *mut LSA_ADT_SID_LIST_ENTRY;
+STRUCT!{struct LSA_ADT_SID_LIST {
+ cSids: ULONG,
+ Sid: PLSA_ADT_SID_LIST_ENTRY,
+}}
+pub type PLSA_ADT_SID_LIST = *mut LSA_ADT_SID_LIST;
+pub const LSA_ADT_SECURITY_SOURCE_NAME: &'static str = "Microsoft-Windows-Security-Auditing";
+pub const LSA_ADT_LEGACY_SECURITY_SOURCE_NAME: &'static str = "Security";
+pub const SE_ADT_POLICY_AUDIT_EVENT_TYPE_EX_BEGIN: ULONG = 100;
+ENUM!{enum POLICY_AUDIT_EVENT_TYPE_EX {
+ iSystem_SecurityStateChange = SE_ADT_POLICY_AUDIT_EVENT_TYPE_EX_BEGIN,
+ iSystem_SecuritySubsystemExtension,
+ iSystem_Integrity,
+ iSystem_IPSecDriverEvents,
+ iSystem_Others,
+ iLogon_Logon,
+ iLogon_Logoff,
+ iLogon_AccountLockout,
+ iLogon_IPSecMainMode,
+ iLogon_SpecialLogon,
+ iLogon_IPSecQuickMode,
+ iLogon_IPSecUsermode,
+ iLogon_Others,
+ iLogon_NPS,
+ iLogon_Claims,
+ iLogon_Groups,
+ iObjectAccess_FileSystem,
+ iObjectAccess_Registry,
+ iObjectAccess_Kernel,
+ iObjectAccess_Sam,
+ iObjectAccess_Other,
+ iObjectAccess_CertificationAuthority,
+ iObjectAccess_ApplicationGenerated,
+ iObjectAccess_HandleBasedAudits,
+ iObjectAccess_Share,
+ iObjectAccess_FirewallPacketDrops,
+ iObjectAccess_FirewallConnection,
+ iObjectAccess_DetailedFileShare,
+ iObjectAccess_RemovableStorage,
+ iObjectAccess_CbacStaging,
+ iPrivilegeUse_Sensitive,
+ iPrivilegeUse_NonSensitive,
+ iPrivilegeUse_Others,
+ iDetailedTracking_ProcessCreation,
+ iDetailedTracking_ProcessTermination,
+ iDetailedTracking_DpapiActivity,
+ iDetailedTracking_RpcCall,
+ iDetailedTracking_PnpActivity,
+ iDetailedTracking_TokenRightAdjusted,
+ iPolicyChange_AuditPolicy,
+ iPolicyChange_AuthenticationPolicy,
+ iPolicyChange_AuthorizationPolicy,
+ iPolicyChange_MpsscvRulePolicy,
+ iPolicyChange_WfpIPSecPolicy,
+ iPolicyChange_Others,
+ iAccountManagement_UserAccount,
+ iAccountManagement_ComputerAccount,
+ iAccountManagement_SecurityGroup,
+ iAccountManagement_DistributionGroup,
+ iAccountManagement_ApplicationGroup,
+ iAccountManagement_Others,
+ iDSAccess_DSAccess,
+ iDSAccess_AdAuditChanges,
+ iDS_Replication,
+ iDS_DetailedReplication,
+ iAccountLogon_CredentialValidation,
+ iAccountLogon_Kerberos,
+ iAccountLogon_Others,
+ iAccountLogon_KerbCredentialValidation,
+ iUnknownSubCategory = 999,
+}}
+pub type PPOLICY_AUDIT_EVENT_TYPE_EX = *mut POLICY_AUDIT_EVENT_TYPE_EX;
+ENUM!{enum POLICY_AUDIT_EVENT_TYPE {
+ AuditCategorySystem = 0,
+ AuditCategoryLogon,
+ AuditCategoryObjectAccess,
+ AuditCategoryPrivilegeUse,
+ AuditCategoryDetailedTracking,
+ AuditCategoryPolicyChange,
+ AuditCategoryAccountManagement,
+ AuditCategoryDirectoryServiceAccess,
+ AuditCategoryAccountLogon,
+}}
+pub type PPOLICY_AUDIT_EVENT_TYPE = *mut POLICY_AUDIT_EVENT_TYPE;
+pub const POLICY_AUDIT_EVENT_UNCHANGED: ULONG = 0x00000000;
+pub const POLICY_AUDIT_EVENT_SUCCESS: ULONG = 0x00000001;
+pub const POLICY_AUDIT_EVENT_FAILURE: ULONG = 0x00000002;
+pub const POLICY_AUDIT_EVENT_NONE: ULONG = 0x00000004;
+pub const POLICY_AUDIT_EVENT_MASK: ULONG = POLICY_AUDIT_EVENT_SUCCESS | POLICY_AUDIT_EVENT_FAILURE
+ | POLICY_AUDIT_EVENT_UNCHANGED | POLICY_AUDIT_EVENT_NONE;
+#[inline]
+pub fn LSA_SUCCESS(Error: NTSTATUS) -> bool {
+ (Error as LONG) >= 0
+}
+extern "system" {
+ pub fn LsaRegisterLogonProcess(
+ LogonProcessName: PLSA_STRING,
+ LsaHandle: PHANDLE,
+ SecurityMode: PLSA_OPERATIONAL_MODE,
+ ) -> NTSTATUS;
+ pub fn LsaLogonUser(
+ LsaHandle: HANDLE,
+ OriginName: PLSA_STRING,
+ LogonType: SECURITY_LOGON_TYPE,
+ AuthenticationPackage: ULONG,
+ AuthenticationInformation: PVOID,
+ AuthenticationInformationLength: ULONG,
+ LocalGroups: PTOKEN_GROUPS,
+ SourceContext: PTOKEN_SOURCE,
+ ProfileBuffer: *mut PVOID,
+ ProfileBufferLength: PULONG,
+ LogonId: PLUID,
+ Token: PHANDLE,
+ Quotas: PQUOTA_LIMITS,
+ SubStatus: PNTSTATUS,
+ ) -> NTSTATUS;
+ pub fn LsaLookupAuthenticationPackage(
+ LsaHandle: HANDLE,
+ PackageName: PLSA_STRING,
+ AuthenticationPackage: PULONG,
+ ) -> NTSTATUS;
+ pub fn LsaFreeReturnBuffer(
+ Buffer: PVOID,
+ ) -> NTSTATUS;
+ pub fn LsaCallAuthenticationPackage(
+ LsaHandle: HANDLE,
+ AuthenticationPackage: ULONG,
+ ProtocolSubmitBuffer: PVOID,
+ SubmitBufferLength: ULONG,
+ ProtocolReturnBuffer: *mut PVOID,
+ ReturnBufferLength: PULONG,
+ ProtocolStatus: PNTSTATUS,
+ ) -> NTSTATUS;
+ pub fn LsaDeregisterLogonProcess(
+ LsaHandle: HANDLE,
+ ) -> NTSTATUS;
+ pub fn LsaConnectUntrusted(
+ LsaHandle: PHANDLE,
+ ) -> NTSTATUS;
+}
+extern "C" {
+ pub fn LsaInsertProtectedProcessAddress(
+ BufferAddress: PVOID,
+ BufferSize: ULONG,
+ ) -> NTSTATUS;
+ pub fn LsaRemoveProtectedProcessAddress(
+ BufferAddress: PVOID,
+ BufferSize: ULONG,
+ ) -> NTSTATUS;
+}
+FN!{stdcall PFN_LSA_CALL_AUTH_PKG(
+ LsaHandle: HANDLE,
+ AuthenticationPackage: ULONG,
+ ProtocolSubmitBuffer: PVOID,
+ SubmitBufferLength: ULONG,
+ ProtocolReturnBuffer: *mut PVOID,
+ ReturnBufferLength: PULONG,
+ ProtocolStatus: PNTSTATUS,
+) -> NTSTATUS}
+FN!{stdcall PFN_LSA_DEREGISTER_PROC(
+ LsaHandle: HANDLE,
+) -> NTSTATUS}
+FN!{stdcall PFN_LSA_FREE_BUFFER(
+ Buffer: PVOID,
+) -> NTSTATUS}
+FN!{stdcall PFN_LSA_LOGON_USER(
+ LsaHandle: HANDLE,
+ OriginName: PLSA_STRING,
+ LogonType: SECURITY_LOGON_TYPE,
+ AuthenticationPackage: ULONG,
+ AuthenticationInformation: PVOID,
+ AuthenticationInformationLength: ULONG,
+ LocalGroups: PTOKEN_GROUPS,
+ SourceContext: PTOKEN_SOURCE,
+ ProfileBuffer: *mut PVOID,
+ ProfileBufferLength: PULONG,
+ LogonId: PLUID,
+ Token: PHANDLE,
+ Quotas: PQUOTA_LIMITS,
+ SubStatus: PNTSTATUS,
+) -> NTSTATUS}
+FN!{stdcall PFN_LOOKUP_AUTH_PKG(
+ LsaHandle: HANDLE,
+ PackageName: PLSA_STRING,
+ AuthenticationPackage: PULONG,
+) -> NTSTATUS}
+FN!{stdcall PFN_LSA_REGISTER_PROC(
+ LogonProcessName: PLSA_STRING,
+ LsaHandle: PHANDLE,
+ SecurityMode: PLSA_OPERATIONAL_MODE,
+) -> NTSTATUS}
+STRUCT!{struct LSA_AUTH_CALLBACKS {
+ LsaCallAuthPkgFn: PFN_LSA_CALL_AUTH_PKG,
+ LsaDeregisterProcFn: PFN_LSA_DEREGISTER_PROC,
+ LsaFreeReturnBufferFn: PFN_LSA_FREE_BUFFER,
+ LsaLogonUserFn: PFN_LSA_LOGON_USER,
+ LsaLookupAuthPkgFn: PFN_LOOKUP_AUTH_PKG,
+ LsaRegisterProcFn: PFN_LSA_REGISTER_PROC,
+}}
+pub type PLSA_AUTH_CALLBACKS = *mut LSA_AUTH_CALLBACKS;
+pub type PCLSA_AUTH_CALLBACKS = *const LSA_AUTH_CALLBACKS;
+pub type PLSA_CLIENT_REQUEST = *mut PVOID;
+ENUM!{enum LSA_TOKEN_INFORMATION_TYPE {
+ LsaTokenInformationNull,
+ LsaTokenInformationV1,
+ LsaTokenInformationV2,
+ LsaTokenInformationV3,
+}}
+pub type PLSA_TOKEN_INFORMATION_TYPE = *mut LSA_TOKEN_INFORMATION_TYPE;
+STRUCT!{struct LSA_TOKEN_INFORMATION_NULL {
+ ExpirationTime: LARGE_INTEGER,
+ Groups: PTOKEN_GROUPS,
+}}
+pub type PLSA_TOKEN_INFORMATION_NULL = *mut LSA_TOKEN_INFORMATION_NULL;
+STRUCT!{struct LSA_TOKEN_INFORMATION_V1 {
+ ExpirationTime: LARGE_INTEGER,
+ User: TOKEN_USER,
+ Groups: PTOKEN_GROUPS,
+ PrimaryGroup: TOKEN_PRIMARY_GROUP,
+ Privileges: PTOKEN_PRIVILEGES,
+ Owner: TOKEN_OWNER,
+ DefaultDacl: TOKEN_DEFAULT_DACL,
+}}
+pub type PLSA_TOKEN_INFORMATION_V1 = *mut LSA_TOKEN_INFORMATION_V1;
+pub type LSA_TOKEN_INFORMATION_V2 = LSA_TOKEN_INFORMATION_V1;
+pub type PLSA_TOKEN_INFORMATION_V2 = *mut LSA_TOKEN_INFORMATION_V2;
+STRUCT!{struct LSA_TOKEN_INFORMATION_V3 {
+ ExpirationTime: LARGE_INTEGER,
+ User: TOKEN_USER,
+ Groups: PTOKEN_GROUPS,
+ PrimaryGroup: TOKEN_PRIMARY_GROUP,
+ Privileges: PTOKEN_PRIVILEGES,
+ Owner: TOKEN_OWNER,
+ DefaultDacl: TOKEN_DEFAULT_DACL,
+ UserClaims: TOKEN_USER_CLAIMS,
+ DeviceClaims: TOKEN_DEVICE_CLAIMS,
+ DeviceGroups: PTOKEN_GROUPS,
+}}
+pub type PLSA_TOKEN_INFORMATION_V3 = *mut LSA_TOKEN_INFORMATION_V3;
+FN!{stdcall PLSA_CREATE_LOGON_SESSION(
+ LogonId: PLUID,
+) -> NTSTATUS}
+FN!{stdcall PLSA_DELETE_LOGON_SESSION(
+ LogonId: PLUID,
+) -> NTSTATUS}
+FN!{stdcall PLSA_ADD_CREDENTIAL(
+ LogonId: PLUID,
+ AuthenticationPackage: ULONG,
+ PrimaryKeyValue: PLSA_STRING,
+ Credentials: PLSA_STRING,
+) -> NTSTATUS}
+FN!{stdcall PLSA_GET_CREDENTIALS(
+ LogonId: PLUID,
+ AuthenticationPackage: ULONG,
+ QueryContext: PULONG,
+ RetrieveAllCredentials: BOOLEAN,
+ PrimaryKeyValue: PLSA_STRING,
+ PrimaryKeyLength: PULONG,
+ Credentials: PLSA_STRING,
+) -> NTSTATUS}
+FN!{stdcall PLSA_DELETE_CREDENTIAL(
+ LogonId: PLUID,
+ AuthenticationPackage: ULONG,
+ PrimaryKeyValue: PLSA_STRING,
+) -> NTSTATUS}
+FN!{stdcall PLSA_ALLOCATE_LSA_HEAP(
+ Length: ULONG,
+) -> PVOID}
+FN!{stdcall PLSA_FREE_LSA_HEAP(
+ Base: PVOID,
+) -> ()}
+FN!{stdcall PLSA_ALLOCATE_PRIVATE_HEAP(
+ Length: SIZE_T,
+) -> PVOID}
+FN!{stdcall PLSA_FREE_PRIVATE_HEAP(
+ Base: PVOID,
+) -> ()}
+FN!{stdcall PLSA_ALLOCATE_CLIENT_BUFFER(
+ ClientRequest: PLSA_CLIENT_REQUEST,
+ LengthRequired: ULONG,
+ ClientBaseAddress: *mut PVOID,
+) -> NTSTATUS}
+FN!{stdcall PLSA_FREE_CLIENT_BUFFER(
+ ClientRequest: PLSA_CLIENT_REQUEST,
+ ClientBaseAddress: PVOID,
+) -> NTSTATUS}
+FN!{stdcall PLSA_COPY_TO_CLIENT_BUFFER(
+ ClientRequest: PLSA_CLIENT_REQUEST,
+ Length: ULONG,
+ ClientBaseAddress: PVOID,
+ BufferToCopy: PVOID,
+) -> NTSTATUS}
+FN!{stdcall PLSA_COPY_FROM_CLIENT_BUFFER(
+ ClientRequest: PLSA_CLIENT_REQUEST,
+ Length: ULONG,
+ BufferToCopy: PVOID,
+ ClientBaseAddress: PVOID,
+) -> NTSTATUS}
+STRUCT!{struct LSA_DISPATCH_TABLE {
+ CreateLogonSession: PLSA_CREATE_LOGON_SESSION,
+ DeleteLogonSession: PLSA_DELETE_LOGON_SESSION,
+ AddCredential: PLSA_ADD_CREDENTIAL,
+ GetCredentials: PLSA_GET_CREDENTIALS,
+ DeleteCredential: PLSA_DELETE_CREDENTIAL,
+ AllocateLsaHeap: PLSA_ALLOCATE_LSA_HEAP,
+ FreeLsaHeap: PLSA_FREE_LSA_HEAP,
+ AllocateClientBuffer: PLSA_ALLOCATE_CLIENT_BUFFER,
+ FreeClientBuffer: PLSA_FREE_CLIENT_BUFFER,
+ CopyToClientBuffer: PLSA_COPY_TO_CLIENT_BUFFER,
+ CopyFromClientBuffer: PLSA_COPY_FROM_CLIENT_BUFFER,
+}}
+pub type PLSA_DISPATCH_TABLE = *mut LSA_DISPATCH_TABLE;
+pub const LSA_AP_NAME_INITIALIZE_PACKAGE: &'static str = "LsaApInitializePackage";
+pub const LSA_AP_NAME_LOGON_USER: &'static str = "LsaApLogonUser";
+pub const LSA_AP_NAME_LOGON_USER_EX: &'static str = "LsaApLogonUserEx";
+pub const LSA_AP_NAME_CALL_PACKAGE: &'static str = "LsaApCallPackage";
+pub const LSA_AP_NAME_LOGON_TERMINATED: &'static str = "LsaApLogonTerminated";
+pub const LSA_AP_NAME_CALL_PACKAGE_UNTRUSTED: &'static str = "LsaApCallPackageUntrusted";
+pub const LSA_AP_NAME_CALL_PACKAGE_PASSTHROUGH: &'static str = "LsaApCallPackagePassthrough";
+FN!{stdcall PLSA_AP_INITIALIZE_PACKAGE(
+ AuthenticationPackageId: ULONG,
+ LsaDispatchTable: PLSA_DISPATCH_TABLE,
+ Database: PLSA_STRING,
+ Confidentiality: PLSA_STRING,
+ AuthenticationPackageName: *mut PLSA_STRING,
+) -> NTSTATUS}
+FN!{stdcall PLSA_AP_LOGON_USER(
+ ClientRequest: PLSA_CLIENT_REQUEST,
+ LogonType: SECURITY_LOGON_TYPE,
+ AuthenticationInformation: PVOID,
+ ClientAuthentication: PVOID,
+ AuthenticationInformationLength: ULONG,
+ ProfileBuffer: *mut PVOID,
+ ProfileBufferLength: PULONG,
+ LogonId: PLUID,
+ SubStatus: PNTSTATUS,
+ TokenInformationType: PLSA_TOKEN_INFORMATION_TYPE,
+ TokenInformation: *mut PVOID,
+ AccountName: *mut PLSA_UNICODE_STRING,
+ AuthenticatingAutority: *mut PLSA_UNICODE_STRING,
+) -> NTSTATUS}
+FN!{stdcall PLSA_AP_LOGON_USER_EX(
+ ClientRequest: PLSA_CLIENT_REQUEST,
+ LogonType: SECURITY_LOGON_TYPE,
+ AuthenticationInformation: PVOID,
+ ClientAuthentication: PVOID,
+ AuthenticationInformationLength: ULONG,
+ ProfileBuffer: *mut PVOID,
+ ProfileBufferLength: PULONG,
+ LogonId: PLUID,
+ SubStatus: PNTSTATUS,
+ TokenInformationType: PLSA_TOKEN_INFORMATION_TYPE,
+ TokenInformation: *mut PVOID,
+ AccountName: *mut PLSA_UNICODE_STRING,
+ AuthenticatingAutority: *mut PLSA_UNICODE_STRING,
+ MachineName: *mut PUNICODE_STRING,
+) -> NTSTATUS}
+FN!{stdcall PLSA_AP_CALL_PACKAGE(
+ ClientRequest: PLSA_CLIENT_REQUEST,
+ ProtocolSubmitBuffer: PVOID,
+ ClientBufferBase: PVOID,
+ SubmitBufferLength: ULONG,
+ ProtocolReturnBuffer: *mut PVOID,
+ ReturnBufferLength: PULONG,
+ ProtocolStatus: PNTSTATUS,
+) -> NTSTATUS}
+FN!{stdcall PLSA_AP_CALL_PACKAGE_PASSTHROUGH(
+ ClientRequest: PLSA_CLIENT_REQUEST,
+ ProtocolSubmitBuffer: PVOID,
+ ClientBufferBase: PVOID,
+ SubmitBufferLength: ULONG,
+ ProtocolReturnBuffer: *mut PVOID,
+ ReturnBufferLength: PULONG,
+ ProtocolStatus: PNTSTATUS,
+) -> NTSTATUS}
+FN!{stdcall PLSA_AP_LOGON_TERMINATED(
+ LogonId: PLUID,
+) -> ()}
+pub const POLICY_VIEW_LOCAL_INFORMATION: ULONG = 0x00000001;
+pub const POLICY_VIEW_AUDIT_INFORMATION: ULONG = 0x00000002;
+pub const POLICY_GET_PRIVATE_INFORMATION: ULONG = 0x00000004;
+pub const POLICY_TRUST_ADMIN: ULONG = 0x00000008;
+pub const POLICY_CREATE_ACCOUNT: ULONG = 0x00000010;
+pub const POLICY_CREATE_SECRET: ULONG = 0x00000020;
+pub const POLICY_CREATE_PRIVILEGE: ULONG = 0x00000040;
+pub const POLICY_SET_DEFAULT_QUOTA_LIMITS: ULONG = 0x00000080;
+pub const POLICY_SET_AUDIT_REQUIREMENTS: ULONG = 0x00000100;
+pub const POLICY_AUDIT_LOG_ADMIN: ULONG = 0x00000200;
+pub const POLICY_SERVER_ADMIN: ULONG = 0x00000400;
+pub const POLICY_LOOKUP_NAMES: ULONG = 0x00000800;
+pub const POLICY_NOTIFICATION: ULONG = 0x00001000;
+pub const POLICY_ALL_ACCESS: ULONG = STANDARD_RIGHTS_REQUIRED | POLICY_VIEW_LOCAL_INFORMATION
+ | POLICY_VIEW_AUDIT_INFORMATION | POLICY_GET_PRIVATE_INFORMATION | POLICY_TRUST_ADMIN
+ | POLICY_CREATE_ACCOUNT | POLICY_CREATE_SECRET | POLICY_CREATE_PRIVILEGE
+ | POLICY_SET_DEFAULT_QUOTA_LIMITS | POLICY_SET_AUDIT_REQUIREMENTS | POLICY_AUDIT_LOG_ADMIN
+ | POLICY_SERVER_ADMIN | POLICY_LOOKUP_NAMES;
+pub const POLICY_READ: ULONG = STANDARD_RIGHTS_READ | POLICY_VIEW_AUDIT_INFORMATION
+ | POLICY_GET_PRIVATE_INFORMATION;
+pub const POLICY_WRITE: ULONG = STANDARD_RIGHTS_WRITE | POLICY_TRUST_ADMIN | POLICY_CREATE_ACCOUNT
+ | POLICY_CREATE_SECRET | POLICY_CREATE_PRIVILEGE | POLICY_SET_DEFAULT_QUOTA_LIMITS
+ | POLICY_SET_AUDIT_REQUIREMENTS | POLICY_AUDIT_LOG_ADMIN | POLICY_SERVER_ADMIN;
+pub const POLICY_EXECUTE: ULONG = STANDARD_RIGHTS_EXECUTE | POLICY_VIEW_LOCAL_INFORMATION
+ | POLICY_LOOKUP_NAMES;
+STRUCT!{struct LSA_TRANSLATED_SID {
+ Use: SID_NAME_USE,
+ RelativeId: ULONG,
+ DomainIndex: LONG,
+}}
+pub type PLSA_TRANSLATED_SID = *mut LSA_TRANSLATED_SID;
+pub type POLICY_SYSTEM_ACCESS_MODE = ULONG;
+pub type PPOLICY_SYSTEM_ACCESS_MODE = *mut POLICY_SYSTEM_ACCESS_MODE;
+pub const POLICY_MODE_INTERACTIVE: ULONG = SECURITY_ACCESS_INTERACTIVE_LOGON;
+pub const POLICY_MODE_NETWORK: ULONG = SECURITY_ACCESS_NETWORK_LOGON;
+pub const POLICY_MODE_BATCH: ULONG = SECURITY_ACCESS_BATCH_LOGON;
+pub const POLICY_MODE_SERVICE: ULONG = SECURITY_ACCESS_SERVICE_LOGON;
+pub const POLICY_MODE_PROXY: ULONG = SECURITY_ACCESS_PROXY_LOGON;
+pub const POLICY_MODE_DENY_INTERACTIVE: ULONG = SECURITY_ACCESS_DENY_INTERACTIVE_LOGON;
+pub const POLICY_MODE_DENY_NETWORK: ULONG = SECURITY_ACCESS_DENY_NETWORK_LOGON;
+pub const POLICY_MODE_DENY_BATCH: ULONG = SECURITY_ACCESS_DENY_BATCH_LOGON;
+pub const POLICY_MODE_DENY_SERVICE: ULONG = SECURITY_ACCESS_DENY_SERVICE_LOGON;
+pub const POLICY_MODE_REMOTE_INTERACTIVE: ULONG = SECURITY_ACCESS_REMOTE_INTERACTIVE_LOGON;
+pub const POLICY_MODE_DENY_REMOTE_INTERACTIVE: ULONG =
+ SECURITY_ACCESS_DENY_REMOTE_INTERACTIVE_LOGON;
+pub const POLICY_MODE_ALL: ULONG = POLICY_MODE_INTERACTIVE | POLICY_MODE_NETWORK
+ | POLICY_MODE_BATCH | POLICY_MODE_SERVICE | POLICY_MODE_PROXY | POLICY_MODE_DENY_INTERACTIVE
+ | POLICY_MODE_DENY_NETWORK | SECURITY_ACCESS_DENY_BATCH_LOGON
+ | SECURITY_ACCESS_DENY_SERVICE_LOGON | POLICY_MODE_REMOTE_INTERACTIVE
+ | POLICY_MODE_DENY_REMOTE_INTERACTIVE ;
+pub const POLICY_MODE_ALL_NT4: ULONG = POLICY_MODE_INTERACTIVE | POLICY_MODE_NETWORK
+ | POLICY_MODE_BATCH | POLICY_MODE_SERVICE;
+ENUM!{enum POLICY_LSA_SERVER_ROLE {
+ PolicyServerRoleBackup = 2,
+ PolicyServerRolePrimary,
+}}
+pub type PPOLICY_LSA_SERVER_ROLE = *mut POLICY_LSA_SERVER_ROLE;
+ENUM!{enum POLICY_SERVER_ENABLE_STATE {
+ PolicyServerEnabled = 2,
+ PolicyServerDisabled,
+}}
+pub type PPOLICY_SERVER_ENABLE_STATE = *mut POLICY_SERVER_ENABLE_STATE;
+pub type POLICY_AUDIT_EVENT_OPTIONS = ULONG;
+pub type PPOLICY_AUDIT_EVENT_OPTIONS = *mut POLICY_AUDIT_EVENT_OPTIONS;
+STRUCT!{struct POLICY_PRIVILEGE_DEFINITION {
+ Name: LSA_UNICODE_STRING,
+ LocalValue: LUID,
+}}
+pub type PPOLICY_PRIVILEGE_DEFINITION = *mut POLICY_PRIVILEGE_DEFINITION;
+pub const LSA_LOOKUP_ISOLATED_AS_LOCAL: ULONG = 0x80000000;
+pub const LSA_LOOKUP_DISALLOW_CONNECTED_ACCOUNT_INTERNET_SID: ULONG = 0x80000000;
+pub const LSA_LOOKUP_PREFER_INTERNET_NAMES: ULONG = 0x40000000;
+ENUM!{enum POLICY_INFORMATION_CLASS {
+ PolicyAuditLogInformation = 1,
+ PolicyAuditEventsInformation,
+ PolicyPrimaryDomainInformation,
+ PolicyPdAccountInformation,
+ PolicyAccountDomainInformation,
+ PolicyLsaServerRoleInformation,
+ PolicyReplicaSourceInformation,
+ PolicyDefaultQuotaInformation,
+ PolicyModificationInformation,
+ PolicyAuditFullSetInformation,
+ PolicyAuditFullQueryInformation,
+ PolicyDnsDomainInformation,
+ PolicyDnsDomainInformationInt,
+ PolicyLocalAccountDomainInformation,
+ PolicyLastEntry,
+}}
+pub type PPOLICY_INFORMATION_CLASS = *mut POLICY_INFORMATION_CLASS;
+STRUCT!{struct POLICY_AUDIT_LOG_INFO {
+ AuditLogPercentFull: ULONG,
+ MaximumLogSize: ULONG,
+ AuditRetentionPeriod: LARGE_INTEGER,
+ AuditLogFullShutdownInProgress: BOOLEAN,
+ TimeToShutdown: LARGE_INTEGER,
+ NextAuditRecordId: ULONG,
+}}
+pub type PPOLICY_AUDIT_LOG_INFO = *mut POLICY_AUDIT_LOG_INFO;
+STRUCT!{struct POLICY_AUDIT_EVENTS_INFO {
+ AuditingMode: BOOLEAN,
+ EventAuditingOptions: PPOLICY_AUDIT_EVENT_OPTIONS,
+ MaximumAuditEventCount: ULONG,
+}}
+pub type PPOLICY_AUDIT_EVENTS_INFO = *mut POLICY_AUDIT_EVENTS_INFO;
+STRUCT!{struct POLICY_AUDIT_SUBCATEGORIES_INFO {
+ MaximumSubCategoryCount: ULONG,
+ EventAuditingOptions: PPOLICY_AUDIT_EVENT_OPTIONS,
+}}
+pub type PPOLICY_AUDIT_SUBCATEGORIES_INFO = *mut POLICY_AUDIT_SUBCATEGORIES_INFO;
+STRUCT!{struct POLICY_AUDIT_CATEGORIES_INFO {
+ MaximumCategoryCount: ULONG,
+ SubCategoriesInfo: PPOLICY_AUDIT_SUBCATEGORIES_INFO,
+}}
+pub type PPOLICY_AUDIT_CATEGORIES_INFO = *mut POLICY_AUDIT_CATEGORIES_INFO;
+pub const PER_USER_POLICY_UNCHANGED: UCHAR = 0x00;
+pub const PER_USER_AUDIT_SUCCESS_INCLUDE: UCHAR = 0x01;
+pub const PER_USER_AUDIT_SUCCESS_EXCLUDE: UCHAR = 0x02;
+pub const PER_USER_AUDIT_FAILURE_INCLUDE: UCHAR = 0x04;
+pub const PER_USER_AUDIT_FAILURE_EXCLUDE: UCHAR = 0x08;
+pub const PER_USER_AUDIT_NONE: UCHAR = 0x10;
+pub const VALID_PER_USER_AUDIT_POLICY_FLAG: UCHAR = PER_USER_AUDIT_SUCCESS_INCLUDE
+ | PER_USER_AUDIT_SUCCESS_EXCLUDE | PER_USER_AUDIT_FAILURE_INCLUDE
+ | PER_USER_AUDIT_FAILURE_EXCLUDE | PER_USER_AUDIT_NONE;
+STRUCT!{struct POLICY_PRIMARY_DOMAIN_INFO {
+ Name: LSA_UNICODE_STRING,
+ Sid: PSID,
+}}
+pub type PPOLICY_PRIMARY_DOMAIN_INFO = *mut POLICY_PRIMARY_DOMAIN_INFO;
+STRUCT!{struct POLICY_PD_ACCOUNT_INFO {
+ Name: LSA_UNICODE_STRING,
+}}
+pub type PPOLICY_PD_ACCOUNT_INFO = *mut POLICY_PD_ACCOUNT_INFO;
+STRUCT!{struct POLICY_LSA_SERVER_ROLE_INFO {
+ LsaServerRole: POLICY_LSA_SERVER_ROLE,
+}}
+pub type PPOLICY_LSA_SERVER_ROLE_INFO = *mut POLICY_LSA_SERVER_ROLE_INFO;
+STRUCT!{struct POLICY_REPLICA_SOURCE_INFO {
+ ReplicaSource: LSA_UNICODE_STRING,
+ ReplicaAccountName: LSA_UNICODE_STRING,
+}}
+pub type PPOLICY_REPLICA_SOURCE_INFO = *mut POLICY_REPLICA_SOURCE_INFO;
+STRUCT!{struct POLICY_DEFAULT_QUOTA_INFO {
+ QuotaLimits: QUOTA_LIMITS,
+}}
+pub type PPOLICY_DEFAULT_QUOTA_INFO = *mut POLICY_DEFAULT_QUOTA_INFO;
+STRUCT!{struct POLICY_MODIFICATION_INFO {
+ ModifiedId: LARGE_INTEGER,
+ DatabaseCreationTime: LARGE_INTEGER,
+}}
+pub type PPOLICY_MODIFICATION_INFO = *mut POLICY_MODIFICATION_INFO;
+STRUCT!{struct POLICY_AUDIT_FULL_SET_INFO {
+ ShutDownOnFull: BOOLEAN,
+}}
+pub type PPOLICY_AUDIT_FULL_SET_INFO = *mut POLICY_AUDIT_FULL_SET_INFO;
+STRUCT!{struct POLICY_AUDIT_FULL_QUERY_INFO {
+ ShutDownOnFull: BOOLEAN,
+ LogIsFull: BOOLEAN,
+}}
+pub type PPOLICY_AUDIT_FULL_QUERY_INFO = *mut POLICY_AUDIT_FULL_QUERY_INFO;
+ENUM!{enum POLICY_DOMAIN_INFORMATION_CLASS {
+ PolicyDomainEfsInformation = 2,
+ PolicyDomainKerberosTicketInformation,
+}}
+pub type PPOLICY_DOMAIN_INFORMATION_CLASS = *mut POLICY_DOMAIN_INFORMATION_CLASS;
+pub const POLICY_QOS_SCHANNEL_REQUIRED: ULONG = 0x00000001;
+pub const POLICY_QOS_OUTBOUND_INTEGRITY: ULONG = 0x00000002;
+pub const POLICY_QOS_OUTBOUND_CONFIDENTIALITY: ULONG = 0x00000004;
+pub const POLICY_QOS_INBOUND_INTEGRITY: ULONG = 0x00000008;
+pub const POLICY_QOS_INBOUND_CONFIDENTIALITY: ULONG = 0x00000010;
+pub const POLICY_QOS_ALLOW_LOCAL_ROOT_CERT_STORE: ULONG = 0x00000020;
+pub const POLICY_QOS_RAS_SERVER_ALLOWED: ULONG = 0x00000040;
+pub const POLICY_QOS_DHCP_SERVER_ALLOWED: ULONG = 0x00000080;
+STRUCT!{struct POLICY_DOMAIN_EFS_INFO {
+ InfoLength: ULONG,
+ EfsBlob: PUCHAR,
+}}
+pub type PPOLICY_DOMAIN_EFS_INFO = *mut POLICY_DOMAIN_EFS_INFO;
+pub const POLICY_KERBEROS_VALIDATE_CLIENT: ULONG = 0x00000080;
+STRUCT!{struct POLICY_DOMAIN_KERBEROS_TICKET_INFO {
+ AuthenticationOptions: ULONG,
+ MaxServiceTicketAge: LARGE_INTEGER,
+ MaxTicketAge: LARGE_INTEGER,
+ MaxRenewAge: LARGE_INTEGER,
+ MaxClockSkew: LARGE_INTEGER,
+ Reserved: LARGE_INTEGER,
+}}
+pub type PPOLICY_DOMAIN_KERBEROS_TICKET_INFO = *mut POLICY_DOMAIN_KERBEROS_TICKET_INFO;
+ENUM!{enum POLICY_NOTIFICATION_INFORMATION_CLASS {
+ PolicyNotifyAuditEventsInformation = 1,
+ PolicyNotifyAccountDomainInformation,
+ PolicyNotifyServerRoleInformation,
+ PolicyNotifyDnsDomainInformation,
+ PolicyNotifyDomainEfsInformation,
+ PolicyNotifyDomainKerberosTicketInformation,
+ PolicyNotifyMachineAccountPasswordInformation,
+ PolicyNotifyGlobalSaclInformation,
+ PolicyNotifyMax,
+}}
+pub type PPOLICY_NOTIFICATION_INFORMATION_CLASS = *mut POLICY_NOTIFICATION_INFORMATION_CLASS;
+pub const ACCOUNT_VIEW: ULONG = 0x00000001;
+pub const ACCOUNT_ADJUST_PRIVILEGES: ULONG = 0x00000002;
+pub const ACCOUNT_ADJUST_QUOTAS: ULONG = 0x00000004;
+pub const ACCOUNT_ADJUST_SYSTEM_ACCESS: ULONG = 0x00000008;
+pub const ACCOUNT_ALL_ACCESS: ULONG = STANDARD_RIGHTS_REQUIRED | ACCOUNT_VIEW
+ | ACCOUNT_ADJUST_PRIVILEGES | ACCOUNT_ADJUST_QUOTAS | ACCOUNT_ADJUST_SYSTEM_ACCESS;
+pub const ACCOUNT_READ: ULONG = STANDARD_RIGHTS_READ | ACCOUNT_VIEW;
+pub const ACCOUNT_WRITE: ULONG = STANDARD_RIGHTS_WRITE | ACCOUNT_ADJUST_PRIVILEGES
+ | ACCOUNT_ADJUST_QUOTAS | ACCOUNT_ADJUST_SYSTEM_ACCESS;
+pub const ACCOUNT_EXECUTE: ULONG = STANDARD_RIGHTS_EXECUTE;
+DECLARE_HANDLE!{LSA_HANDLE, __LSA_HANDLE}
+pub const TRUSTED_QUERY_DOMAIN_NAME: ULONG = 0x00000001;
+pub const TRUSTED_QUERY_CONTROLLERS: ULONG = 0x00000002;
+pub const TRUSTED_SET_CONTROLLERS: ULONG = 0x00000004;
+pub const TRUSTED_QUERY_POSIX: ULONG = 0x00000008;
+pub const TRUSTED_SET_POSIX: ULONG = 0x00000010;
+pub const TRUSTED_SET_AUTH: ULONG = 0x00000020;
+pub const TRUSTED_QUERY_AUTH: ULONG = 0x00000040;
+pub const TRUSTED_ALL_ACCESS: ULONG = STANDARD_RIGHTS_REQUIRED | TRUSTED_QUERY_DOMAIN_NAME
+ | TRUSTED_QUERY_CONTROLLERS | TRUSTED_SET_CONTROLLERS | TRUSTED_QUERY_POSIX | TRUSTED_SET_POSIX
+ | TRUSTED_SET_AUTH | TRUSTED_QUERY_AUTH;
+pub const TRUSTED_READ: ULONG = STANDARD_RIGHTS_READ | TRUSTED_QUERY_DOMAIN_NAME;
+pub const TRUSTED_WRITE: ULONG = STANDARD_RIGHTS_WRITE | TRUSTED_SET_CONTROLLERS
+ | TRUSTED_SET_POSIX | TRUSTED_SET_AUTH;
+pub const TRUSTED_EXECUTE: ULONG = STANDARD_RIGHTS_EXECUTE | TRUSTED_QUERY_CONTROLLERS
+ | TRUSTED_QUERY_POSIX;
+ENUM!{enum TRUSTED_INFORMATION_CLASS {
+ TrustedDomainNameInformation = 1,
+ TrustedControllersInformation,
+ TrustedPosixOffsetInformation,
+ TrustedPasswordInformation,
+ TrustedDomainInformationBasic,
+ TrustedDomainInformationEx,
+ TrustedDomainAuthInformation,
+ TrustedDomainFullInformation,
+ TrustedDomainAuthInformationInternal,
+ TrustedDomainFullInformationInternal,
+ TrustedDomainInformationEx2Internal,
+ TrustedDomainFullInformation2Internal,
+ TrustedDomainSupportedEncryptionTypes,
+}}
+pub type PTRUSTED_INFORMATION_CLASS = *mut TRUSTED_INFORMATION_CLASS;
+STRUCT!{struct TRUSTED_DOMAIN_NAME_INFO {
+ Name: LSA_UNICODE_STRING,
+}}
+pub type PTRUSTED_DOMAIN_NAME_INFO = *mut TRUSTED_DOMAIN_NAME_INFO;
+STRUCT!{struct TRUSTED_CONTROLLERS_INFO {
+ Entries: ULONG,
+ Names: PLSA_UNICODE_STRING,
+}}
+pub type PTRUSTED_CONTROLLERS_INFO = *mut TRUSTED_CONTROLLERS_INFO;
+STRUCT!{struct TRUSTED_POSIX_OFFSET_INFO {
+ Offset: ULONG,
+}}
+pub type PTRUSTED_POSIX_OFFSET_INFO = *mut TRUSTED_POSIX_OFFSET_INFO;
+STRUCT!{struct TRUSTED_PASSWORD_INFO {
+ Password: LSA_UNICODE_STRING,
+ OldPassword: LSA_UNICODE_STRING,
+}}
+pub type PTRUSTED_PASSWORD_INFO = *mut TRUSTED_PASSWORD_INFO;
+pub type TRUSTED_DOMAIN_INFORMATION_BASIC = LSA_TRUST_INFORMATION;
+pub type PTRUSTED_DOMAIN_INFORMATION_BASIC = PLSA_TRUST_INFORMATION;
+// NOTE: Ignoring Win XP constants
+pub const TRUST_DIRECTION_DISABLED: ULONG = 0x00000000;
+pub const TRUST_DIRECTION_INBOUND: ULONG = 0x00000001;
+pub const TRUST_DIRECTION_OUTBOUND: ULONG = 0x00000002;
+pub const TRUST_DIRECTION_BIDIRECTIONAL: ULONG = TRUST_DIRECTION_INBOUND
+ | TRUST_DIRECTION_OUTBOUND;
+pub const TRUST_TYPE_DOWNLEVEL: ULONG = 0x00000001;
+pub const TRUST_TYPE_UPLEVEL: ULONG = 0x00000002;
+pub const TRUST_TYPE_MIT: ULONG = 0x00000003;
+pub const TRUST_ATTRIBUTE_NON_TRANSITIVE: ULONG = 0x00000001;
+pub const TRUST_ATTRIBUTE_UPLEVEL_ONLY: ULONG = 0x00000002;
+pub const TRUST_ATTRIBUTE_QUARANTINED_DOMAIN: ULONG = 0x00000004;
+pub const TRUST_ATTRIBUTE_FOREST_TRANSITIVE: ULONG = 0x00000008;
+pub const TRUST_ATTRIBUTE_CROSS_ORGANIZATION: ULONG = 0x00000010;
+pub const TRUST_ATTRIBUTE_WITHIN_FOREST: ULONG = 0x00000020;
+pub const TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL: ULONG = 0x00000040;
+pub const TRUST_ATTRIBUTE_TRUST_USES_RC4_ENCRYPTION: ULONG = 0x00000080;
+pub const TRUST_ATTRIBUTE_TRUST_USES_AES_KEYS: ULONG = 0x00000100;
+pub const TRUST_ATTRIBUTE_CROSS_ORGANIZATION_NO_TGT_DELEGATION: ULONG = 0x00000200;
+pub const TRUST_ATTRIBUTE_PIM_TRUST: ULONG = 0x00000400;
+pub const TRUST_ATTRIBUTES_VALID: ULONG = 0xFF03FFFF;
+pub const TRUST_ATTRIBUTES_USER: ULONG = 0xFF000000;
+STRUCT!{struct TRUSTED_DOMAIN_INFORMATION_EX {
+ Name: LSA_UNICODE_STRING,
+ FlatName: LSA_UNICODE_STRING,
+ Sid: PSID,
+ TrustDirection: ULONG,
+ TrustType: ULONG,
+ TrustAttributes: ULONG,
+}}
+pub type PTRUSTED_DOMAIN_INFORMATION_EX = *mut TRUSTED_DOMAIN_INFORMATION_EX;
+STRUCT!{struct TRUSTED_DOMAIN_INFORMATION_EX2 {
+ Name: LSA_UNICODE_STRING,
+ FlatName: LSA_UNICODE_STRING,
+ Sid: PSID,
+ TrustDirection: ULONG,
+ TrustType: ULONG,
+ TrustAttributes: ULONG,
+ ForestTrustLength: ULONG,
+ ForestTrustInfo: PUCHAR,
+}}
+pub type PTRUSTED_DOMAIN_INFORMATION_EX2 = *mut TRUSTED_DOMAIN_INFORMATION_EX2;
+pub const TRUST_AUTH_TYPE_NONE: ULONG = 0;
+pub const TRUST_AUTH_TYPE_NT4OWF: ULONG = 1;
+pub const TRUST_AUTH_TYPE_CLEAR: ULONG = 2;
+pub const TRUST_AUTH_TYPE_VERSION: ULONG = 3;
+STRUCT!{struct LSA_AUTH_INFORMATION {
+ LastUpdateTime: LARGE_INTEGER,
+ AuthType: ULONG,
+ AuthInfoLength: ULONG,
+ AuthInfo: PUCHAR,
+}}
+pub type PLSA_AUTH_INFORMATION = *mut LSA_AUTH_INFORMATION;
+STRUCT!{struct TRUSTED_DOMAIN_AUTH_INFORMATION {
+ IncomingAuthInfos: ULONG,
+ IncomingAuthenticationInformation: PLSA_AUTH_INFORMATION,
+ IncomingPreviousAuthenticationInformation: PLSA_AUTH_INFORMATION,
+ OutgoingAuthInfos: ULONG,
+ OutgoingAuthenticationInformation: PLSA_AUTH_INFORMATION,
+ OutgoingPreviousAuthenticationInformation: PLSA_AUTH_INFORMATION,
+}}
+pub type PTRUSTED_DOMAIN_AUTH_INFORMATION = *mut TRUSTED_DOMAIN_AUTH_INFORMATION;
+STRUCT!{struct TRUSTED_DOMAIN_FULL_INFORMATION {
+ Information: TRUSTED_DOMAIN_INFORMATION_EX,
+ PosixOffset: TRUSTED_POSIX_OFFSET_INFO,
+ AuthInformation: TRUSTED_DOMAIN_AUTH_INFORMATION,
+}}
+pub type PTRUSTED_DOMAIN_FULL_INFORMATION = *mut TRUSTED_DOMAIN_FULL_INFORMATION;
+STRUCT!{struct TRUSTED_DOMAIN_FULL_INFORMATION2 {
+ Information: TRUSTED_DOMAIN_INFORMATION_EX2,
+ PosixOffset: TRUSTED_POSIX_OFFSET_INFO,
+ AuthInformation: TRUSTED_DOMAIN_AUTH_INFORMATION,
+}}
+pub type PTRUSTED_DOMAIN_FULL_INFORMATION2 = *mut TRUSTED_DOMAIN_FULL_INFORMATION2;
+STRUCT!{struct TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES {
+ SupportedEncryptionTypes: ULONG,
+}}
+pub type PTRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES =
+ *mut TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES;
+ENUM!{enum LSA_FOREST_TRUST_RECORD_TYPE {
+ ForestTrustTopLevelName,
+ ForestTrustTopLevelNameEx,
+ ForestTrustDomainInfo,
+ ForestTrustRecordTypeLast = ForestTrustDomainInfo,
+}}
+pub const LSA_FTRECORD_DISABLED_REASONS: ULONG = 0x0000FFFF;
+pub const LSA_TLN_DISABLED_NEW: ULONG = 0x00000001;
+pub const LSA_TLN_DISABLED_ADMIN: ULONG = 0x00000002;
+pub const LSA_TLN_DISABLED_CONFLICT: ULONG = 0x00000004;
+pub const LSA_SID_DISABLED_ADMIN: ULONG = 0x00000001;
+pub const LSA_SID_DISABLED_CONFLICT: ULONG = 0x00000002;
+pub const LSA_NB_DISABLED_ADMIN: ULONG = 0x00000004;
+pub const LSA_NB_DISABLED_CONFLICT: ULONG = 0x00000008;
+STRUCT!{struct LSA_FOREST_TRUST_DOMAIN_INFO {
+ Sid: PSID,
+ DnsName: LSA_UNICODE_STRING,
+ NetbiosName: LSA_UNICODE_STRING,
+}}
+pub type PLSA_FOREST_TRUST_DOMAIN_INFO = *mut LSA_FOREST_TRUST_DOMAIN_INFO;
+pub const MAX_FOREST_TRUST_BINARY_DATA_SIZE: SIZE_T = 128 * 1024;
+STRUCT!{struct LSA_FOREST_TRUST_BINARY_DATA {
+ Length: ULONG,
+ Buffer: PUCHAR,
+}}
+pub type PLSA_FOREST_TRUST_BINARY_DATA = *mut LSA_FOREST_TRUST_BINARY_DATA;
+UNION!{union LSA_FOREST_TRUST_RECORD_FORESTTRUSTDATA {
+ [u32; 5] [u64; 5],
+ TopLevelName TopLevelName_mut: LSA_UNICODE_STRING,
+ DomainInfo DomainInfo_mut: LSA_FOREST_TRUST_DOMAIN_INFO,
+ Data Data_mut: LSA_FOREST_TRUST_BINARY_DATA,
+}}
+STRUCT!{struct LSA_FOREST_TRUST_RECORD {
+ Flags: ULONG,
+ ForestTrustType: LSA_FOREST_TRUST_RECORD_TYPE,
+ Time: LARGE_INTEGER,
+ ForestTrustData: LSA_FOREST_TRUST_RECORD_FORESTTRUSTDATA,
+}}
+pub type PLSA_FOREST_TRUST_RECORD = *mut LSA_FOREST_TRUST_RECORD;
+pub const MAX_RECORDS_IN_FOREST_TRUST_INFO: SIZE_T = 4000;
+STRUCT!{struct LSA_FOREST_TRUST_INFORMATION {
+ RecordCount: ULONG,
+ Entries: *mut PLSA_FOREST_TRUST_RECORD,
+}}
+pub type PLSA_FOREST_TRUST_INFORMATION = LSA_FOREST_TRUST_INFORMATION;
+ENUM!{enum LSA_FOREST_TRUST_COLLISION_RECORD_TYPE {
+ CollisionTdo,
+ CollisionXref,
+ CollisionOther,
+}}
+STRUCT!{struct LSA_FOREST_TRUST_COLLISION_RECORD {
+ Index: ULONG,
+ Type: LSA_FOREST_TRUST_COLLISION_RECORD_TYPE,
+ Flags: ULONG,
+ Name: LSA_UNICODE_STRING,
+}}
+pub type PLSA_FOREST_TRUST_COLLISION_RECORD = *mut LSA_FOREST_TRUST_COLLISION_RECORD;
+STRUCT!{struct LSA_FOREST_TRUST_COLLISION_INFORMATION {
+ RecordCount: ULONG,
+ Entries: *mut PLSA_FOREST_TRUST_COLLISION_RECORD,
+}}
+pub type PLSA_FOREST_TRUST_COLLISION_INFORMATION = *mut LSA_FOREST_TRUST_COLLISION_INFORMATION;
+pub const SECRET_SET_VALUE: ULONG = 0x00000001;
+pub const SECRET_QUERY_VALUE: ULONG = 0x00000002;
+pub const SECRET_ALL_ACCESS: ULONG = STANDARD_RIGHTS_REQUIRED | SECRET_SET_VALUE
+ | SECRET_QUERY_VALUE;
+pub const SECRET_READ: ULONG = STANDARD_RIGHTS_READ | SECRET_QUERY_VALUE;
+pub const SECRET_WRITE: ULONG = STANDARD_RIGHTS_WRITE | SECRET_SET_VALUE;
+pub const SECRET_EXECUTE: ULONG = STANDARD_RIGHTS_EXECUTE;
+pub const LSA_GLOBAL_SECRET_PREFIX: &'static str = "G$";
+pub const LSA_GLOBAL_SECRET_PREFIX_LENGTH: SIZE_T = 2;
+pub const LSA_LOCAL_SECRET_PREFIX: &'static str = "L$";
+pub const LSA_LOCAL_SECRET_PREFIX_LENGTH: SIZE_T = 2;
+pub const LSA_MACHINE_SECRET_PREFIX: &'static str = "M$";
+pub const LSA_MACHINE_SECRET_PREFIX_LENGTH: SIZE_T = 2;
+pub const LSA_SECRET_MAXIMUM_COUNT: SIZE_T = 0x00001000;
+pub const LSA_SECRET_MAXIMUM_LENGTH: SIZE_T = 0x00000200;
+DECLARE_HANDLE!{LSA_ENUMERATION_HANDLE, __LSA_ENUMERATION_HANDLE}
+pub type PLSA_ENUMERATION_HANDLE = *mut LSA_ENUMERATION_HANDLE;
+STRUCT!{struct LSA_ENUMERATION_INFORMATION {
+ Sid: PSID,
+}}
+pub type PLSA_ENUMERATION_INFORMATION = *mut LSA_ENUMERATION_INFORMATION;
+extern "system" {
+ pub fn LsaFreeMemory(
+ Buffer: PVOID,
+ ) -> NTSTATUS;
+ pub fn LsaClose(
+ ObjectHandle: LSA_HANDLE,
+ ) -> NTSTATUS;
+ pub fn LsaDelete(
+ ObjectHandle: LSA_HANDLE,
+ ) -> NTSTATUS;
+ pub fn LsaQuerySecurityObject(
+ ObjectHandle: LSA_HANDLE,
+ SecurityInformation: SECURITY_INFORMATION,
+ SecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
+ ) -> NTSTATUS;
+ pub fn LsaSetSecurityObject(
+ ObjectHandle: LSA_HANDLE,
+ SecurityInformation: SECURITY_INFORMATION,
+ SecurityDescriptor: PSECURITY_DESCRIPTOR,
+ ) -> NTSTATUS;
+ pub fn LsaChangePassword(
+ ServerName: PLSA_UNICODE_STRING,
+ DomainName: PLSA_UNICODE_STRING,
+ AccountName: PLSA_UNICODE_STRING,
+ OldPassword: PLSA_UNICODE_STRING,
+ NewPassword: PLSA_UNICODE_STRING,
+ ) -> NTSTATUS;
+}
+STRUCT!{struct LSA_LAST_INTER_LOGON_INFO {
+ LastSuccessfulLogon: LARGE_INTEGER,
+ LastFailedLogon: LARGE_INTEGER,
+ FailedAttemptCountSinceLastSuccessfulLogon: ULONG,
+}}
+pub type PLSA_LAST_INTER_LOGON_INFO = *mut LSA_LAST_INTER_LOGON_INFO;
+STRUCT!{struct SECURITY_LOGON_SESSION_DATA {
+ Size: ULONG,
+ LogonId: LUID,
+ UserName: LSA_UNICODE_STRING,
+ LogonDomain: LSA_UNICODE_STRING,
+ AuthenticationPackage: LSA_UNICODE_STRING,
+ LogonType: ULONG,
+ Session: ULONG,
+ Sid: PSID,
+ LogonTime: LARGE_INTEGER,
+ LogonServer: LSA_UNICODE_STRING,
+ DnsDomainName: LSA_UNICODE_STRING,
+ Upn: LSA_UNICODE_STRING,
+ UserFlags: ULONG,
+ LastLogonInfo: LSA_LAST_INTER_LOGON_INFO,
+ LogonScript: LSA_UNICODE_STRING,
+ ProfilePath: LSA_UNICODE_STRING,
+ HomeDirectory: LSA_UNICODE_STRING,
+ HomeDirectoryDrive: LSA_UNICODE_STRING,
+ LogoffTime: LARGE_INTEGER,
+ KickOffTime: LARGE_INTEGER,
+ PasswordLastSet: LARGE_INTEGER,
+ PasswordCanChange: LARGE_INTEGER,
+ PasswordMustChange: LARGE_INTEGER,
+}}
+pub type PSECURITY_LOGON_SESSION_DATA = *mut SECURITY_LOGON_SESSION_DATA;
+extern "system" {
+ pub fn LsaEnumerateLogonSessions(
+ LogonSessionCount: PULONG,
+ LogonSessionList: *mut PLUID,
+ ) -> NTSTATUS;
+ pub fn LsaGetLogonSessionData(
+ LogonId: PLUID,
+ ppLogonSessionData: *mut PSECURITY_LOGON_SESSION_DATA,
+ ) -> NTSTATUS;
+ pub fn LsaOpenPolicy(
+ SystemName: PLSA_UNICODE_STRING,
+ ObjectAttributes: PLSA_OBJECT_ATTRIBUTES,
+ DesiredAccess: ACCESS_MASK,
+ PolicyHandle: PLSA_HANDLE,
+ ) -> NTSTATUS;
+ pub fn LsaOpenPolicySce(
+ SystemName: PLSA_UNICODE_STRING,
+ ObjectAttributes: PLSA_OBJECT_ATTRIBUTES,
+ DesiredAccess: ACCESS_MASK,
+ PolicyHandle: PLSA_HANDLE,
+ ) -> NTSTATUS;
+}
+pub const MAXIMUM_CAPES_PER_CAP: SIZE_T = 0x7F;
+pub const CENTRAL_ACCESS_POLICY_OWNER_RIGHTS_PRESENT_FLAG: ULONG = 0x00000001;
+pub const CENTRAL_ACCESS_POLICY_STAGED_OWNER_RIGHTS_PRESENT_FLAG: ULONG = 0x00000100;
+#[inline]
+pub fn STAGING_FLAG(Effective: ULONG) -> ULONG {
+ (Effective & 0xF) << 8
+}
+pub const CENTRAL_ACCESS_POLICY_STAGED_FLAG: ULONG = 0x00010000;
+pub const CENTRAL_ACCESS_POLICY_VALID_FLAG_MASK: ULONG =
+ CENTRAL_ACCESS_POLICY_OWNER_RIGHTS_PRESENT_FLAG
+ | CENTRAL_ACCESS_POLICY_STAGED_OWNER_RIGHTS_PRESENT_FLAG | CENTRAL_ACCESS_POLICY_STAGED_FLAG;
+pub const LSASETCAPS_RELOAD_FLAG: ULONG = 0x00000001;
+pub const LSASETCAPS_VALID_FLAG_MASK: ULONG = LSASETCAPS_RELOAD_FLAG;
+STRUCT!{struct CENTRAL_ACCESS_POLICY_ENTRY {
+ Name: LSA_UNICODE_STRING,
+ Description: LSA_UNICODE_STRING,
+ ChangeId: LSA_UNICODE_STRING,
+ LengthAppliesTo: ULONG,
+ AppliesTo: PUCHAR,
+ LengthSD: ULONG,
+ SD: PSECURITY_DESCRIPTOR,
+ LengthStagedSD: ULONG,
+ StagedSD: PSECURITY_DESCRIPTOR,
+ Flags: ULONG,
+}}
+pub type PCENTRAL_ACCESS_POLICY_ENTRY = *mut CENTRAL_ACCESS_POLICY_ENTRY;
+pub type PCCENTRAL_ACCESS_POLICY_ENTRY = *const CENTRAL_ACCESS_POLICY_ENTRY;
+STRUCT!{struct CENTRAL_ACCESS_POLICY {
+ CAPID: PSID,
+ Name: LSA_UNICODE_STRING,
+ Description: LSA_UNICODE_STRING,
+ ChangeId: LSA_UNICODE_STRING,
+ Flags: ULONG,
+ CAPECount: ULONG,
+ CAPEs: *mut PCENTRAL_ACCESS_POLICY_ENTRY,
+}}
+pub type PCENTRAL_ACCESS_POLICY = *mut CENTRAL_ACCESS_POLICY;
+pub type PCCENTRAL_ACCESS_POLICY = *const CENTRAL_ACCESS_POLICY;
+extern "system" {
+ pub fn LsaSetCAPs(
+ CAPDNs: PLSA_UNICODE_STRING,
+ CAPDNCount: ULONG,
+ Flags: ULONG,
+ ) -> NTSTATUS;
+ pub fn LsaGetAppliedCAPIDs(
+ SystemName: PLSA_UNICODE_STRING,
+ CAPIDs: *mut *mut PSID,
+ CAPIDCount: PULONG,
+ ) -> NTSTATUS;
+ pub fn LsaQueryCAPs(
+ CAPIDs: *mut PSID,
+ CAPIDCount: ULONG,
+ CAPs: *mut PCENTRAL_ACCESS_POLICY,
+ CAPCount: PULONG,
+ ) -> NTSTATUS;
+ pub fn LsaQueryInformationPolicy(
+ PolicyHandle: LSA_HANDLE,
+ InformationClass: POLICY_INFORMATION_CLASS,
+ Buffer: *mut PVOID,
+ ) -> NTSTATUS;
+ pub fn LsaSetInformationPolicy(
+ PolicyHandle: LSA_HANDLE,
+ InformationClass: POLICY_INFORMATION_CLASS,
+ Buffer: PVOID,
+ ) -> NTSTATUS;
+ pub fn LsaQueryDomainInformationPolicy(
+ PolicyHandle: LSA_HANDLE,
+ InformationClass: POLICY_DOMAIN_INFORMATION_CLASS,
+ Buffer: *mut PVOID,
+ ) -> NTSTATUS;
+ pub fn LsaSetDomainInformationPolicy(
+ PolicyHandle: LSA_HANDLE,
+ InformationClass: POLICY_DOMAIN_INFORMATION_CLASS,
+ Buffer: PVOID,
+ ) -> NTSTATUS;
+ pub fn LsaRegisterPolicyChangeNotification(
+ InformationClass: POLICY_NOTIFICATION_INFORMATION_CLASS,
+ NotifcationEventHandle: HANDLE,
+ ) -> NTSTATUS;
+ pub fn LsaUnregisterPolicyChangeNotification(
+ InformationClass: POLICY_NOTIFICATION_INFORMATION_CLASS,
+ NotifcationEventHandle: HANDLE,
+ ) -> NTSTATUS;
+ pub fn LsaClearAuditLog(
+ PolicyHandle: LSA_HANDLE,
+ ) -> NTSTATUS;
+ pub fn LsaCreateAccount(
+ PolicyHandle: LSA_HANDLE,
+ AccountSid: PSID,
+ DesiredAccess: ACCESS_MASK,
+ AccountHandle: PLSA_HANDLE,
+ ) -> NTSTATUS;
+ pub fn LsaEnumerateAccounts(
+ PolicyHandle: LSA_HANDLE,
+ EnumerationContext: PLSA_ENUMERATION_HANDLE,
+ Buffer: *mut PVOID,
+ PreferredMaximumLength: ULONG,
+ CountReturned: PULONG,
+ ) -> NTSTATUS;
+ pub fn LsaCreateTrustedDomain(
+ PolicyHandle: LSA_HANDLE,
+ TrustedDomainInformation: PLSA_TRUST_INFORMATION,
+ DesiredAccess: ACCESS_MASK,
+ TrustedDomainHandle: PLSA_HANDLE,
+ ) -> NTSTATUS;
+ pub fn LsaEnumerateTrustedDomains(
+ PolicyHandle: LSA_HANDLE,
+ EnumerationContext: PLSA_ENUMERATION_HANDLE,
+ Buffer: *mut PVOID,
+ PreferredMaximumLength: ULONG,
+ CountReturned: PULONG,
+ ) -> NTSTATUS;
+ pub fn LsaEnumeratePrivileges(
+ PolicyHandle: LSA_HANDLE,
+ EnumerationContext: PLSA_ENUMERATION_HANDLE,
+ Buffer: *mut PVOID,
+ PreferredMaximumLength: ULONG,
+ CountReturned: PULONG,
+ ) -> NTSTATUS;
+ pub fn LsaLookupNames(
+ PolicyHandle: LSA_HANDLE,
+ Count: ULONG,
+ Names: PLSA_UNICODE_STRING,
+ ReferencedDomains: *mut PLSA_REFERENCED_DOMAIN_LIST,
+ Sids: *mut PLSA_TRANSLATED_SID,
+ ) -> NTSTATUS;
+ pub fn LsaLookupNames2(
+ PolicyHandle: LSA_HANDLE,
+ Flags: ULONG,
+ Count: ULONG,
+ Names: PLSA_UNICODE_STRING,
+ ReferencedDomains: *mut PLSA_REFERENCED_DOMAIN_LIST,
+ Sids: *mut PLSA_TRANSLATED_SID2,
+ ) -> NTSTATUS;
+ pub fn LsaLookupSids(
+ PolicyHandle: LSA_HANDLE,
+ Count: ULONG,
+ Sids: *mut PSID,
+ ReferencedDomains: *mut PLSA_REFERENCED_DOMAIN_LIST,
+ Names: *mut PLSA_TRANSLATED_NAME,
+ ) -> NTSTATUS;
+ pub fn LsaLookupSids2(
+ PolicyHandle: LSA_HANDLE,
+ LookupOptions: ULONG,
+ Count: ULONG,
+ Sids: *mut PSID,
+ ReferencedDomains: *mut PLSA_REFERENCED_DOMAIN_LIST,
+ Names: *mut PLSA_TRANSLATED_NAME,
+ ) -> NTSTATUS;
+ pub fn LsaCreateSecret(
+ PolicyHandle: LSA_HANDLE,
+ SecretName: PLSA_UNICODE_STRING,
+ DesiredAccess: ACCESS_MASK,
+ SecretHandle: PLSA_HANDLE,
+ ) -> NTSTATUS;
+ pub fn LsaOpenAccount(
+ PolicyHandle: LSA_HANDLE,
+ AccountSid: PSID,
+ DesiredAccess: ACCESS_MASK,
+ AccountHandle: PLSA_HANDLE,
+ ) -> NTSTATUS;
+ pub fn LsaEnumeratePrivilegesOfAccount(
+ AccountHandle: LSA_HANDLE,
+ Privileges: *mut PPRIVILEGE_SET,
+ ) -> NTSTATUS;
+ pub fn LsaAddPrivilegesToAccount(
+ AccountHandle: LSA_HANDLE,
+ Privileges: PPRIVILEGE_SET,
+ ) -> NTSTATUS;
+ pub fn LsaRemovePrivilegesFromAccount(
+ AccountHandle: LSA_HANDLE,
+ AllPrivileges: BOOLEAN,
+ Privileges: PPRIVILEGE_SET,
+ ) -> NTSTATUS;
+ pub fn LsaGetQuotasForAccount(
+ AccountHandle: LSA_HANDLE,
+ QuotaLimits: PQUOTA_LIMITS,
+ ) -> NTSTATUS;
+ pub fn LsaSetQuotasForAccount(
+ AccountHandle: LSA_HANDLE,
+ QuotaLimits: PQUOTA_LIMITS,
+ ) -> NTSTATUS;
+ pub fn LsaGetSystemAccessAccount(
+ AccountHandle: LSA_HANDLE,
+ SystemAccess: PULONG,
+ ) -> NTSTATUS;
+ pub fn LsaSetSystemAccessAccount(
+ AccountHandle: LSA_HANDLE,
+ SystemAccess: ULONG,
+ ) -> NTSTATUS;
+ pub fn LsaOpenTrustedDomain(
+ PolicyHandle: LSA_HANDLE,
+ TrustedDomainSid: PSID,
+ DesiredAccess: ACCESS_MASK,
+ TrustedDomainHandle: PLSA_HANDLE,
+ ) -> NTSTATUS;
+ pub fn LsaQueryInfoTrustedDomain(
+ TrustedDomainHandle: LSA_HANDLE,
+ InformationClass: TRUSTED_INFORMATION_CLASS,
+ Buffer: *mut PVOID,
+ ) -> NTSTATUS;
+ pub fn LsaSetInformationTrustedDomain(
+ TrustedDomainHandle: LSA_HANDLE,
+ InformationClass: TRUSTED_INFORMATION_CLASS,
+ Buffer: PVOID,
+ ) -> NTSTATUS;
+ pub fn LsaOpenSecret(
+ PolicyHandle: LSA_HANDLE,
+ SecretName: PLSA_UNICODE_STRING,
+ DesiredAccess: ACCESS_MASK,
+ SecretHandle: PLSA_HANDLE,
+ ) -> NTSTATUS;
+ pub fn LsaSetSecret(
+ SecretHandle: LSA_HANDLE,
+ CurrentValue: PLSA_UNICODE_STRING,
+ OldValue: PLSA_UNICODE_STRING,
+ ) -> NTSTATUS;
+ pub fn LsaQuerySecret(
+ SecretHandle: LSA_HANDLE,
+ CurrentValue: *mut PLSA_UNICODE_STRING,
+ CurrentValueSetTime: PLARGE_INTEGER,
+ OldValue: *mut PLSA_UNICODE_STRING,
+ OldValueSetTime: PLARGE_INTEGER,
+ ) -> NTSTATUS;
+ pub fn LsaLookupPrivilegeValue(
+ PolicyHandle: LSA_HANDLE,
+ Name: PLSA_UNICODE_STRING,
+ Value: PLUID,
+ ) -> NTSTATUS;
+ pub fn LsaLookupPrivilegeName(
+ PolicyHandle: LSA_HANDLE,
+ Value: PLUID,
+ Name: *mut PLSA_UNICODE_STRING,
+ ) -> NTSTATUS;
+ pub fn LsaLookupPrivilegeDisplayName(
+ PolicyHandle: LSA_HANDLE,
+ Name: PLSA_UNICODE_STRING,
+ DisplayName: *mut PLSA_UNICODE_STRING,
+ LanguageReturned: PSHORT,
+ ) -> NTSTATUS;
+}
+extern "C" {
+ pub fn LsaGetUserName(
+ UserName: *mut PLSA_UNICODE_STRING,
+ DomainName: *mut PLSA_UNICODE_STRING,
+ ) -> NTSTATUS;
+ pub fn LsaGetRemoteUserName(
+ SystemName: PLSA_UNICODE_STRING,
+ UserName: *mut PLSA_UNICODE_STRING,
+ DomainName: *mut PLSA_UNICODE_STRING,
+ ) -> NTSTATUS;
+}
+pub const SE_INTERACTIVE_LOGON_NAME: &'static str = "SeInteractiveLogonRight";
+pub const SE_NETWORK_LOGON_NAME: &'static str = "SeNetworkLogonRight";
+pub const SE_BATCH_LOGON_NAME: &'static str = "SeBatchLogonRight";
+pub const SE_SERVICE_LOGON_NAME: &'static str = "SeServiceLogonRight";
+pub const SE_DENY_INTERACTIVE_LOGON_NAME: &'static str = "SeDenyInteractiveLogonRight";
+pub const SE_DENY_NETWORK_LOGON_NAME: &'static str = "SeDenyNetworkLogonRight";
+pub const SE_DENY_BATCH_LOGON_NAME: &'static str = "SeDenyBatchLogonRight";
+pub const SE_DENY_SERVICE_LOGON_NAME: &'static str = "SeDenyServiceLogonRight";
+pub const SE_REMOTE_INTERACTIVE_LOGON_NAME: &'static str = "SeRemoteInteractiveLogonRight";
+pub const SE_DENY_REMOTE_INTERACTIVE_LOGON_NAME: &'static str =
+ "SeDenyRemoteInteractiveLogonRight";
+extern "system" {
+ pub fn LsaEnumerateAccountsWithUserRight(
+ PolictHandle: LSA_HANDLE,
+ UserRights: PLSA_UNICODE_STRING,
+ EnumerationBuffer: *mut PVOID,
+ CountReturned: PULONG,
+ ) -> NTSTATUS;
+ pub fn LsaEnumerateAccountRights(
+ PolicyHandle: LSA_HANDLE,
+ AccountSid: PSID,
+ UserRights: *mut PLSA_UNICODE_STRING,
+ CountOfRights: PULONG,
+ ) -> NTSTATUS;
+ pub fn LsaAddAccountRights(
+ PolicyHandle: LSA_HANDLE,
+ AccountSid: PSID,
+ UserRights: PLSA_UNICODE_STRING,
+ CountOfRights: ULONG,
+ ) -> NTSTATUS;
+ pub fn LsaRemoveAccountRights(
+ PolicyHandle: LSA_HANDLE,
+ AccountSid: PSID,
+ AllRights: BOOLEAN,
+ UserRights: PLSA_UNICODE_STRING,
+ CountOfRights: ULONG,
+ ) -> NTSTATUS;
+ pub fn LsaOpenTrustedDomainByName(
+ PolicyHandle: LSA_HANDLE,
+ TrustedDomainName: PLSA_UNICODE_STRING,
+ DesiredAccess: ACCESS_MASK,
+ TrustedDomainHandle: PLSA_HANDLE,
+ ) -> NTSTATUS;
+ pub fn LsaQueryTrustedDomainInfo(
+ PolicyHandle: LSA_HANDLE,
+ TrustedDomainSid: PSID,
+ InformationClass: TRUSTED_INFORMATION_CLASS,
+ Buffer: *mut PVOID,
+ ) -> NTSTATUS;
+ pub fn LsaSetTrustedDomainInformation(
+ PolicyHandle: LSA_HANDLE,
+ TrustedDomainSid: PSID,
+ InformationClass: TRUSTED_INFORMATION_CLASS,
+ Buffer: PVOID,
+ ) -> NTSTATUS;
+ pub fn LsaDeleteTrustedDomain(
+ PolicyHandle: LSA_HANDLE,
+ TrustedDomainSid: PSID,
+ ) -> NTSTATUS;
+ pub fn LsaQueryTrustedDomainInfoByName(
+ PolicyHandle: LSA_HANDLE,
+ TrustedDomainName: PLSA_UNICODE_STRING,
+ InformationClass: TRUSTED_INFORMATION_CLASS,
+ Buffer: *mut PVOID,
+ ) -> NTSTATUS;
+ pub fn LsaSetTrustedDomainInfoByName(
+ PolicyHandle: LSA_HANDLE,
+ TrustedDomainName: PLSA_UNICODE_STRING,
+ InformationClass: TRUSTED_INFORMATION_CLASS,
+ Buffer: PVOID,
+ ) -> NTSTATUS;
+ pub fn LsaEnumerateTrustedDomainsEx(
+ PolicyHandle: LSA_HANDLE,
+ EnumerationContext: PLSA_ENUMERATION_HANDLE,
+ Buffer: *mut PVOID,
+ PreferredMaximumLength: ULONG,
+ CountReturned: PULONG,
+ ) -> NTSTATUS;
+ pub fn LsaCreateTrustedDomainEx(
+ PolicyHandle: LSA_HANDLE,
+ TrustedDomainInformation: PTRUSTED_DOMAIN_INFORMATION_EX,
+ AuthenticationInformation: PTRUSTED_DOMAIN_AUTH_INFORMATION,
+ DesiredAccess: ACCESS_MASK,
+ TrustedDomainHandle: PLSA_HANDLE,
+ ) -> NTSTATUS;
+ pub fn LsaQueryForestTrustInformation(
+ PolicyHandle: LSA_HANDLE,
+ TrustedDomainName: PLSA_UNICODE_STRING,
+ ForestTrustInfo: *mut PLSA_FOREST_TRUST_INFORMATION,
+ ) -> NTSTATUS;
+ pub fn LsaSetForestTrustInformation(
+ PolicyHandle: LSA_HANDLE,
+ TrustedDomainName: PLSA_UNICODE_STRING,
+ ForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION,
+ CheckOnly: BOOLEAN,
+ CollisionInfo: *mut PLSA_FOREST_TRUST_COLLISION_INFORMATION,
+ ) -> NTSTATUS;
+ pub fn LsaForestTrustFindMatch(
+ PolicyHandle: LSA_HANDLE,
+ Type: ULONG,
+ Name: PLSA_UNICODE_STRING,
+ Match: *mut PLSA_UNICODE_STRING,
+ ) -> NTSTATUS;
+ pub fn LsaStorePrivateData(
+ PolicyHandle: LSA_HANDLE,
+ KeyName: PLSA_UNICODE_STRING,
+ PrivateData: PLSA_UNICODE_STRING,
+ ) -> NTSTATUS;
+ pub fn LsaRetrievePrivateData(
+ PolicyHandle: LSA_HANDLE,
+ KeyName: PLSA_UNICODE_STRING,
+ PrivateData: *mut PLSA_UNICODE_STRING,
+ ) -> NTSTATUS;
+ pub fn LsaNtStatusToWinError(
+ Status: NTSTATUS,
+ ) -> ULONG;
+}
+ENUM!{enum NEGOTIATE_MESSAGES {
+ NegEnumPackagePrefixes = 0,
+ NegGetCallerName = 1,
+ NegTransferCredentials = 2,
+ NegEnumPackageNames = 3,
+ NegCallPackageMax,
+}}
+pub const NEGOTIATE_MAX_PREFIX: SIZE_T = 32;
+STRUCT!{struct NEGOTIATE_PACKAGE_PREFIX {
+ PackageId: ULONG_PTR,
+ PackageDataA: PVOID,
+ PackageDataW: PVOID,
+ PrefixLen: ULONG_PTR,
+ Prefix: [UCHAR; NEGOTIATE_MAX_PREFIX],
+}}
+pub type PNEGOTIATE_PACKAGE_PREFIX = *mut NEGOTIATE_PACKAGE_PREFIX;
+STRUCT!{struct NEGOTIATE_PACKAGE_PREFIXES {
+ MessageType: ULONG,
+ PrefixCount: ULONG,
+ Offset: ULONG,
+ Pad: ULONG,
+}}
+pub type PNEGOTIATE_PACKAGE_PREFIXES = *mut NEGOTIATE_PACKAGE_PREFIXES;
+STRUCT!{struct NEGOTIATE_CALLER_NAME_REQUEST {
+ MessageType: ULONG,
+ LogonId: LUID,
+}}
+pub type PNEGOTIATE_CALLER_NAME_REQUEST = *mut NEGOTIATE_CALLER_NAME_REQUEST;
+STRUCT!{struct NEGOTIATE_CALLER_NAME_RESPONSE {
+ Messagetype: ULONG,
+ CallerName: PWSTR,
+}}
+pub type PNEGOTIATE_CALLER_NAME_RESPONSE = *mut NEGOTIATE_CALLER_NAME_RESPONSE;
+STRUCT!{struct NEGOTIATE_PACKAGE_NAMES {
+ NamesCount: ULONG,
+ Names: [UNICODE_STRING; ANYSIZE_ARRAY],
+}}
+pub type PNEGOTIATE_PACKAGE_NAMES = *mut NEGOTIATE_PACKAGE_NAMES;
+pub const NEGOTIATE_ALLOW_NTLM: ULONG = 0x10000000;
+pub const NEGOTIATE_NEG_NTLM: ULONG = 0x20000000;
+STRUCT!{struct NEGOTIATE_PACKAGE_PREFIX_WOW {
+ PackageId: ULONG,
+ PackageDataA: ULONG,
+ PackageDataW: ULONG,
+ PrefixLen: ULONG,
+ Prefix: [UCHAR; NEGOTIATE_MAX_PREFIX],
+}}
+pub type PNEGOTIATE_PACKAGE_PREFIX_WOW = *mut NEGOTIATE_PACKAGE_PREFIX_WOW;
+STRUCT!{struct NEGOTIATE_CALLER_NAME_RESPONSE_WOW {
+ MessageType: ULONG,
+ CallerName: ULONG,
+}}
+pub type PNEGOTIATE_CALLER_NAME_RESPONSE_WOW = *mut NEGOTIATE_CALLER_NAME_RESPONSE_WOW;
+extern "system" {
+ pub fn LsaSetPolicyReplicationHandle(
+ PolicyHandle: PLSA_HANDLE,
+ ) -> NTSTATUS;
+}
+pub const MAX_USER_RECORDS: SIZE_T = 1000;
+STRUCT!{struct LSA_USER_REGISTRATION_INFO {
+ Sid: LSA_UNICODE_STRING,
+ DeviceId: LSA_UNICODE_STRING,
+ Username: LSA_UNICODE_STRING,
+ Thumbprint: LSA_UNICODE_STRING,
+ RegistrationTime: LARGE_INTEGER,
+}}
+pub type PLSA_USER_REGISTRATION_INFO = *mut LSA_USER_REGISTRATION_INFO;
+STRUCT!{struct LSA_REGISTRATION_INFO {
+ RegisteredCount: ULONG,
+ UserRegistrationInfo: *mut PLSA_USER_REGISTRATION_INFO,
+}}
+pub type PLSA_REGISTRATION_INFO = *mut LSA_REGISTRATION_INFO;
+extern "system" {
+ pub fn LsaGetDeviceRegistrationInfo(
+ RegistrationInfo: *mut PLSA_REGISTRATION_INFO,
+ ) -> NTSTATUS;
+}
+ENUM!{enum LSA_CREDENTIAL_KEY_SOURCE_TYPE {
+ eFromPrecomputed = 1,
+ eFromClearPassword,
+ eFromNtOwf,
+}}
+pub type PLSA_CREDENTIAL_KEY_SOURCE_TYPE = *mut LSA_CREDENTIAL_KEY_SOURCE_TYPE;
+extern "C" {
+ pub fn SeciIsProtectedUser(
+ ProtectedUser: PBOOLEAN,
+ ) -> NTSTATUS;
+}
diff --git a/vendor/winapi/src/um/ntsecapi.rs b/vendor/winapi/src/um/ntsecapi.rs
new file mode 100644
index 000000000..cf30ea929
--- /dev/null
+++ b/vendor/winapi/src/um/ntsecapi.rs
@@ -0,0 +1,1728 @@
+// 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.
+//! This module defines the Local Security Authority APIs.
+use shared::basetsd::{ULONG64, ULONG_PTR};
+use shared::guiddef::GUID;
+use shared::minwindef::{PUCHAR, PULONG, UCHAR, ULONG, USHORT};
+use shared::ntdef::NTSTATUS;
+use shared::sspi::SecHandle;
+use um::lsalookup::{
+ LSA_TRUST_INFORMATION, LSA_UNICODE_STRING, PLSA_TRUST_INFORMATION, PLSA_UNICODE_STRING
+};
+use um::subauth::{PUNICODE_STRING, STRING, UNICODE_STRING};
+use um::winnt::{
+ ACCESS_MASK, ANYSIZE_ARRAY, BOOLEAN, HANDLE, LARGE_INTEGER, LONG, LUID, PACL, PCSTR, PCWSTR,
+ PSECURITY_DESCRIPTOR, PSID, PSTR, PVOID, PWSTR, QUOTA_LIMITS, SECURITY_INFORMATION, SHORT, SID,
+ SID_NAME_USE, STANDARD_RIGHTS_EXECUTE, STANDARD_RIGHTS_READ, STANDARD_RIGHTS_REQUIRED,
+ STANDARD_RIGHTS_WRITE, ULONGLONG
+};
+DEFINE_GUID!{Audit_System_SecurityStateChange,
+ 0x0cce9210, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_System_SecuritySubsystemExtension,
+ 0x0cce9211, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_System_Integrity,
+ 0x0cce9212, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_System_IPSecDriverEvents,
+ 0x0cce9213, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_System_Others,
+ 0x0cce9214, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_Logon_Logon,
+ 0x0cce9215, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_Logon_Logoff,
+ 0x0cce9216, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_Logon_AccountLockout,
+ 0x0cce9217, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_Logon_IPSecMainMode,
+ 0x0cce9218, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_Logon_IPSecQuickMode,
+ 0x0cce9219, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_Logon_IPSecUserMode,
+ 0x0cce921a, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_Logon_SpecialLogon,
+ 0x0cce921b, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_Logon_Others,
+ 0x0cce921c, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_ObjectAccess_FileSystem,
+ 0x0cce921d, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_ObjectAccess_Registry,
+ 0x0cce921e, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_ObjectAccess_Kernel,
+ 0x0cce921f, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_ObjectAccess_Sam,
+ 0x0cce9220, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_ObjectAccess_CertificationServices,
+ 0x0cce9221, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_ObjectAccess_ApplicationGenerated,
+ 0x0cce9222, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_ObjectAccess_Handle,
+ 0x0cce9223, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_ObjectAccess_Share,
+ 0x0cce9224, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_ObjectAccess_FirewallPacketDrops,
+ 0x0cce9225, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_ObjectAccess_FirewallConnection,
+ 0x0cce9226, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_ObjectAccess_Other,
+ 0x0cce9227, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_PrivilegeUse_Sensitive,
+ 0x0cce9228, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_PrivilegeUse_NonSensitive,
+ 0x0cce9229, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_PrivilegeUse_Others,
+ 0x0cce922a, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_DetailedTracking_ProcessCreation,
+ 0x0cce922b, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_DetailedTracking_ProcessTermination,
+ 0x0cce922c, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_DetailedTracking_DpapiActivity,
+ 0x0cce922d, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_DetailedTracking_RpcCall,
+ 0x0cce922e, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_PolicyChange_AuditPolicy,
+ 0x0cce922f, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_PolicyChange_AuthenticationPolicy,
+ 0x0cce9230, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_PolicyChange_AuthorizationPolicy,
+ 0x0cce9231, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_PolicyChange_MpsscvRulePolicy,
+ 0x0cce9232, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_PolicyChange_WfpIPSecPolicy,
+ 0x0cce9233, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_PolicyChange_Others,
+ 0x0cce9234, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_AccountManagement_UserAccount,
+ 0x0cce9235, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_AccountManagement_ComputerAccount,
+ 0x0cce9236, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_AccountManagement_SecurityGroup,
+ 0x0cce9237, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_AccountManagement_DistributionGroup,
+ 0x0cce9238, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_AccountManagement_ApplicationGroup,
+ 0x0cce9239, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_AccountManagement_Others,
+ 0x0cce923a, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_DSAccess_DSAccess,
+ 0x0cce923b, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_DsAccess_AdAuditChanges,
+ 0x0cce923c, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_Ds_Replication,
+ 0x0cce923d, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_Ds_DetailedReplication,
+ 0x0cce923e, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_AccountLogon_CredentialValidation,
+ 0x0cce923f, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_AccountLogon_Kerberos,
+ 0x0cce9240, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_AccountLogon_Others,
+ 0x0cce9241, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_AccountLogon_KerbCredentialValidation,
+ 0x0cce9242, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_Logon_NPS,
+ 0x0cce9243, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_ObjectAccess_DetailedFileShare,
+ 0x0cce9244, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_ObjectAccess_RemovableStorage,
+ 0x0cce9245, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_ObjectAccess_CbacStaging,
+ 0x0cce9246, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_Logon_Claims,
+ 0x0cce9247, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_System,
+ 0x69979848, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_Logon,
+ 0x69979849, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_ObjectAccess,
+ 0x6997984a, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_PrivilegeUse,
+ 0x6997984b, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_DetailedTracking,
+ 0x6997984c, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_PolicyChange,
+ 0x6997984d, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_AccountManagement,
+ 0x6997984e, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_DirectoryServiceAccess,
+ 0x6997984f, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+DEFINE_GUID!{Audit_AccountLogon,
+ 0x69979850, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
+ENUM!{enum POLICY_AUDIT_EVENT_TYPE {
+ AuditCategorySystem = 0,
+ AuditCategoryLogon,
+ AuditCategoryObjectAccess,
+ AuditCategoryPrivilegeUse,
+ AuditCategoryDetailedTracking,
+ AuditCategoryPolicyChange,
+ AuditCategoryAccountManagement,
+ AuditCategoryDirectoryServiceAccess,
+ AuditCategoryAccountLogon,
+}}
+pub type PPOLICY_AUDIT_EVENT_TYPE = *mut POLICY_AUDIT_EVENT_TYPE;
+pub const POLICY_AUDIT_EVENT_UNCHANGED: POLICY_AUDIT_EVENT_OPTIONS = 0x00000000;
+pub const POLICY_AUDIT_EVENT_SUCCESS: POLICY_AUDIT_EVENT_OPTIONS = 0x00000001;
+pub const POLICY_AUDIT_EVENT_FAILURE: POLICY_AUDIT_EVENT_OPTIONS = 0x00000002;
+pub const POLICY_AUDIT_EVENT_NONE: POLICY_AUDIT_EVENT_OPTIONS = 0x00000004;
+pub const POLICY_AUDIT_EVENT_MASK: POLICY_AUDIT_EVENT_OPTIONS = POLICY_AUDIT_EVENT_SUCCESS
+ | POLICY_AUDIT_EVENT_FAILURE | POLICY_AUDIT_EVENT_UNCHANGED | POLICY_AUDIT_EVENT_NONE;
+pub const POLICY_VIEW_LOCAL_INFORMATION: ACCESS_MASK = 0x00000001;
+pub const POLICY_VIEW_AUDIT_INFORMATION: ACCESS_MASK = 0x00000002;
+pub const POLICY_GET_PRIVATE_INFORMATION: ACCESS_MASK = 0x00000004;
+pub const POLICY_TRUST_ADMIN: ACCESS_MASK = 0x00000008;
+pub const POLICY_CREATE_ACCOUNT: ACCESS_MASK = 0x00000010;
+pub const POLICY_CREATE_SECRET: ACCESS_MASK = 0x00000020;
+pub const POLICY_CREATE_PRIVILEGE: ACCESS_MASK = 0x00000040;
+pub const POLICY_SET_DEFAULT_QUOTA_LIMITS: ACCESS_MASK = 0x00000080;
+pub const POLICY_SET_AUDIT_REQUIREMENTS: ACCESS_MASK = 0x00000100;
+pub const POLICY_AUDIT_LOG_ADMIN: ACCESS_MASK = 0x00000200;
+pub const POLICY_SERVER_ADMIN: ACCESS_MASK = 0x00000400;
+pub const POLICY_LOOKUP_NAMES: ACCESS_MASK = 0x00000800;
+pub const POLICY_NOTIFICATION: ACCESS_MASK = 0x00001000;
+pub const POLICY_ALL_ACCESS: ACCESS_MASK = STANDARD_RIGHTS_REQUIRED
+ | POLICY_VIEW_LOCAL_INFORMATION | POLICY_VIEW_AUDIT_INFORMATION
+ | POLICY_GET_PRIVATE_INFORMATION | POLICY_TRUST_ADMIN | POLICY_CREATE_ACCOUNT
+ | POLICY_CREATE_SECRET | POLICY_CREATE_PRIVILEGE | POLICY_SET_DEFAULT_QUOTA_LIMITS
+ | POLICY_SET_AUDIT_REQUIREMENTS | POLICY_AUDIT_LOG_ADMIN | POLICY_SERVER_ADMIN
+ | POLICY_LOOKUP_NAMES;
+pub const POLICY_READ: ACCESS_MASK = STANDARD_RIGHTS_READ | POLICY_VIEW_AUDIT_INFORMATION
+ | POLICY_GET_PRIVATE_INFORMATION;
+pub const POLICY_WRITE: ACCESS_MASK = STANDARD_RIGHTS_WRITE | POLICY_TRUST_ADMIN
+ | POLICY_CREATE_ACCOUNT | POLICY_CREATE_SECRET | POLICY_CREATE_PRIVILEGE
+ | POLICY_SET_DEFAULT_QUOTA_LIMITS | POLICY_SET_AUDIT_REQUIREMENTS | POLICY_AUDIT_LOG_ADMIN
+ | POLICY_SERVER_ADMIN;
+pub const POLICY_EXECUTE: ACCESS_MASK = STANDARD_RIGHTS_EXECUTE
+ | POLICY_VIEW_LOCAL_INFORMATION | POLICY_LOOKUP_NAMES;
+STRUCT!{struct LSA_TRANSLATED_SID {
+ Use: SID_NAME_USE,
+ RelativeId: ULONG,
+ DomainIndex: LONG,
+}}
+pub type PLSA_TRANSLATED_SID = *mut LSA_TRANSLATED_SID;
+ENUM!{enum POLICY_LSA_SERVER_ROLE {
+ PolicyServerRoleBackup = 2,
+ PolicyServerRolePrimary,
+}}
+pub type PPOLICY_LSA_SERVER_ROLE = *mut POLICY_LSA_SERVER_ROLE;
+pub type POLICY_AUDIT_EVENT_OPTIONS = ULONG;
+pub type PPOLICY_AUDIT_EVENT_OPTIONS = *mut ULONG;
+ENUM!{enum POLICY_INFORMATION_CLASS {
+ PolicyAuditLogInformation = 1,
+ PolicyAuditEventsInformation,
+ PolicyPrimaryDomainInformation,
+ PolicyPdAccountInformation,
+ PolicyAccountDomainInformation,
+ PolicyLsaServerRoleInformation,
+ PolicyReplicaSourceInformation,
+ PolicyDefaultQuotaInformation,
+ PolicyModificationInformation,
+ PolicyAuditFullSetInformation,
+ PolicyAuditFullQueryInformation,
+ PolicyDnsDomainInformation,
+ PolicyDnsDomainInformationInt,
+ PolicyLocalAccountDomainInformation,
+ PolicyLastEntry,
+}}
+pub type PPOLICY_INFORMATION_CLASS = *mut POLICY_INFORMATION_CLASS;
+STRUCT!{struct POLICY_AUDIT_LOG_INFO {
+ AuditLogPercentFull: ULONG,
+ MaximumLogSize: ULONG,
+ AuditRetentionPeriod: LARGE_INTEGER,
+ AuditLogFullShutdownInProgress: BOOLEAN,
+ TimeToShutdown: LARGE_INTEGER,
+ NextAuditRecordId: ULONG,
+}}
+pub type PPOLICY_AUDIT_LOG_INFO = *mut POLICY_AUDIT_LOG_INFO;
+STRUCT!{struct POLICY_AUDIT_EVENTS_INFO {
+ AuditingMode: BOOLEAN,
+ EventAuditingOptions: PPOLICY_AUDIT_EVENT_OPTIONS,
+ MaximumAuditEventCount: ULONG,
+}}
+pub type PPOLICY_AUDIT_EVENTS_INFO = *mut POLICY_AUDIT_EVENTS_INFO;
+STRUCT!{struct POLICY_AUDIT_SUBCATEGORIES_INFO {
+ MaximumSubCategoryCount: ULONG,
+ EventAuditingOptions: PPOLICY_AUDIT_EVENT_OPTIONS,
+}}
+pub type PPOLICY_AUDIT_SUBCATEGORIES_INFO = *mut POLICY_AUDIT_SUBCATEGORIES_INFO;
+STRUCT!{struct POLICY_AUDIT_CATEGORIES_INFO {
+ MaximumSubCategoryCount: ULONG,
+ SubCategoriesInfo: PPOLICY_AUDIT_SUBCATEGORIES_INFO,
+}}
+pub type PPOLICY_AUDIT_CATEGORIES_INFO = *mut POLICY_AUDIT_CATEGORIES_INFO;
+pub const PER_USER_POLICY_UNCHANGED: ULONG = 0x00;
+pub const PER_USER_AUDIT_SUCCESS_INCLUDE: ULONG = 0x01;
+pub const PER_USER_AUDIT_SUCCESS_EXCLUDE: ULONG = 0x02;
+pub const PER_USER_AUDIT_FAILURE_INCLUDE: ULONG = 0x04;
+pub const PER_USER_AUDIT_FAILURE_EXCLUDE: ULONG = 0x08;
+pub const PER_USER_AUDIT_NONE: ULONG = 0x10;
+pub const VALID_PER_USER_AUDIT_POLICY_FLAG: ULONG = PER_USER_AUDIT_SUCCESS_INCLUDE
+ | PER_USER_AUDIT_SUCCESS_EXCLUDE | PER_USER_AUDIT_FAILURE_INCLUDE
+ | PER_USER_AUDIT_FAILURE_EXCLUDE | PER_USER_AUDIT_NONE;
+STRUCT!{struct POLICY_PRIMARY_DOMAIN_INFO {
+ Name: LSA_UNICODE_STRING,
+ Sid: PSID,
+}}
+pub type PPOLICY_PRIMARY_DOMAIN_INFO = *mut POLICY_PRIMARY_DOMAIN_INFO;
+STRUCT!{struct POLICY_PD_ACCOUNT_INFO {
+ Name: LSA_UNICODE_STRING,
+}}
+pub type PPOLICY_PD_ACCOUNT_INFO = *mut POLICY_PD_ACCOUNT_INFO;
+STRUCT!{struct POLICY_LSA_SERVER_ROLE_INFO {
+ LsaServerRole: POLICY_LSA_SERVER_ROLE,
+}}
+pub type PPOLICY_LSA_SERVER_ROLE_INFO = *mut POLICY_LSA_SERVER_ROLE_INFO;
+STRUCT!{struct POLICY_REPLICA_SOURCE_INFO {
+ ReplicaSource: LSA_UNICODE_STRING,
+ ReplicaAccountName: LSA_UNICODE_STRING,
+}}
+pub type PPOLICY_REPLICA_SOURCE_INFO = *mut POLICY_REPLICA_SOURCE_INFO;
+STRUCT!{struct POLICY_DEFAULT_QUOTA_INFO {
+ QuotaLimits: QUOTA_LIMITS,
+}}
+pub type PPOLICY_DEFAULT_QUOTA_INFO = *mut POLICY_DEFAULT_QUOTA_INFO;
+STRUCT!{struct POLICY_MODIFICATION_INFO {
+ ModifiedId: LARGE_INTEGER,
+ DatabaseCreationTime: LARGE_INTEGER,
+}}
+pub type PPOLICY_MODIFICATION_INFO = *mut POLICY_MODIFICATION_INFO;
+STRUCT!{struct POLICY_AUDIT_FULL_SET_INFO {
+ ShutDownOnFull: BOOLEAN,
+}}
+pub type PPOLICY_AUDIT_FULL_SET_INFO = *mut POLICY_AUDIT_FULL_SET_INFO;
+STRUCT!{struct POLICY_AUDIT_FULL_QUERY_INFO {
+ ShutDownOnFull: BOOLEAN,
+ LogIsFull: BOOLEAN,
+}}
+pub type PPOLICY_AUDIT_FULL_QUERY_INFO = *mut POLICY_AUDIT_FULL_QUERY_INFO;
+ENUM!{enum POLICY_DOMAIN_INFORMATION_CLASS {
+ PolicyDomainEfsInformation = 2,
+ PolicyDomainKerberosTicketInformation,
+}}
+pub type PPOLICY_DOMAIN_INFORMATION_CLASS = *mut POLICY_DOMAIN_INFORMATION_CLASS;
+STRUCT!{struct POLICY_DOMAIN_EFS_INFO {
+ InfoLength: ULONG,
+ EfsBlob: PUCHAR,
+}}
+pub type PPOLICY_DOMAIN_EFS_INFO = *mut POLICY_DOMAIN_EFS_INFO;
+STRUCT!{struct POLICY_DOMAIN_KERBEROS_TICKET_INFO {
+ AuthenticationOptions: ULONG,
+ MaxServiceTicketAge: LARGE_INTEGER,
+ MaxTicketAge: LARGE_INTEGER,
+ MaxRenewAge: LARGE_INTEGER,
+ MaxClockSkew: LARGE_INTEGER,
+ Reserved: LARGE_INTEGER,
+}}
+pub type PPOLICY_DOMAIN_KERBEROS_TICKET_INFO = *mut POLICY_DOMAIN_KERBEROS_TICKET_INFO;
+ENUM!{enum POLICY_NOTIFICATION_INFORMATION_CLASS {
+ PolicyNotifyAuditEventsInformation = 1,
+ PolicyNotifyAccountDomainInformation,
+ PolicyNotifyServerRoleInformation,
+ PolicyNotifyDnsDomainInformation,
+ PolicyNotifyDomainEfsInformation,
+ PolicyNotifyDomainKerberosTicketInformation,
+ PolicyNotifyMachineAccountPasswordInformation,
+ PolicyNotifyGlobalSaclInformation,
+ PolicyNotifyMax,
+}}
+pub type PPOLICY_NOTIFICATION_INFORMATION_CLASS = *mut POLICY_NOTIFICATION_INFORMATION_CLASS;
+pub type LSA_HANDLE = PVOID;
+pub type PLSA_HANDLE = *mut PVOID;
+ENUM!{enum TRUSTED_INFORMATION_CLASS {
+ TrustedDomainNameInformation = 1,
+ TrustedControllersInformation,
+ TrustedPosixOffsetInformation,
+ TrustedPasswordInformation,
+ TrustedDomainInformationBasic,
+ TrustedDomainInformationEx,
+ TrustedDomainAuthInformation,
+ TrustedDomainFullInformation,
+ TrustedDomainAuthInformationInternal,
+ TrustedDomainFullInformationInternal,
+ TrustedDomainInformationEx2Internal,
+ TrustedDomainFullInformation2Internal,
+ TrustedDomainSupportedEncryptionTypes,
+}}
+pub type PTRUSTED_INFORMATION_CLASS = *mut TRUSTED_INFORMATION_CLASS;
+STRUCT!{struct TRUSTED_DOMAIN_NAME_INFO {
+ Name: LSA_UNICODE_STRING,
+}}
+pub type PTRUSTED_DOMAIN_NAME_INFO = *mut TRUSTED_DOMAIN_NAME_INFO;
+STRUCT!{struct TRUSTED_CONTROLLERS_INFO {
+ Entries: ULONG,
+ Names: PLSA_UNICODE_STRING,
+}}
+pub type PTRUSTED_CONTROLLERS_INFO = *mut TRUSTED_CONTROLLERS_INFO;
+STRUCT!{struct TRUSTED_POSIX_OFFSET_INFO {
+ Offset: ULONG,
+}}
+pub type PTRUSTED_POSIX_OFFSET_INFO = *mut TRUSTED_POSIX_OFFSET_INFO;
+STRUCT!{struct TRUSTED_PASSWORD_INFO {
+ Password: LSA_UNICODE_STRING,
+ OldPassword: LSA_UNICODE_STRING,
+}}
+pub type PTRUSTED_PASSWORD_INFO = *mut TRUSTED_PASSWORD_INFO;
+pub type TRUSTED_DOMAIN_INFORMATION_BASIC = LSA_TRUST_INFORMATION;
+pub type PTRUSTED_DOMAIN_INFORMATION_BASIC = PLSA_TRUST_INFORMATION;
+pub const TRUST_DIRECTION_DISABLED: ULONG = 0x00000000;
+pub const TRUST_DIRECTION_INBOUND: ULONG = 0x00000001;
+pub const TRUST_DIRECTION_OUTBOUND: ULONG = 0x00000002;
+pub const TRUST_DIRECTION_BIDIRECTIONAL: ULONG = TRUST_DIRECTION_INBOUND
+ | TRUST_DIRECTION_OUTBOUND;
+pub const TRUST_TYPE_DOWNLEVEL: ULONG = 0x00000001;
+pub const TRUST_TYPE_UPLEVEL: ULONG = 0x00000002;
+pub const TRUST_TYPE_MIT: ULONG = 0x00000003;
+pub const TRUST_ATTRIBUTE_NON_TRANSITIVE: ULONG = 0x00000001;
+pub const TRUST_ATTRIBUTE_UPLEVEL_ONLY: ULONG = 0x00000002;
+pub const TRUST_ATTRIBUTE_QUARANTINED_DOMAIN: ULONG = 0x00000004;
+pub const TRUST_ATTRIBUTE_FOREST_TRANSITIVE: ULONG = 0x00000008;
+pub const TRUST_ATTRIBUTE_CROSS_ORGANIZATION: ULONG = 0x00000010;
+pub const TRUST_ATTRIBUTE_WITHIN_FOREST: ULONG = 0x00000020;
+pub const TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL: ULONG = 0x00000040;
+pub const TRUST_ATTRIBUTE_TRUST_USES_RC4_ENCRYPTION: ULONG = 0x00000080;
+pub const TRUST_ATTRIBUTE_TRUST_USES_AES_KEYS: ULONG = 0x00000100;
+pub const TRUST_ATTRIBUTE_CROSS_ORGANIZATION_NO_TGT_DELEGATION: ULONG = 0x00000200;
+pub const TRUST_ATTRIBUTES_VALID: ULONG = 0xFF03FFFF;
+pub const TRUST_ATTRIBUTES_USER: ULONG = 0xFF000000;
+STRUCT!{struct TRUSTED_DOMAIN_INFORMATION_EX {
+ Name: LSA_UNICODE_STRING,
+ FlatName: LSA_UNICODE_STRING,
+ Sid: PSID,
+ TrustDirection: ULONG,
+ TrustType: ULONG,
+ TrustAttributes: ULONG,
+}}
+pub type PTRUSTED_DOMAIN_INFORMATION_EX = *mut TRUSTED_DOMAIN_INFORMATION_EX;
+STRUCT!{struct TRUSTED_DOMAIN_INFORMATION_EX2 {
+ Name: LSA_UNICODE_STRING,
+ FlatName: LSA_UNICODE_STRING,
+ Sid: PSID,
+ TrustDirection: ULONG,
+ TrustType: ULONG,
+ TrustAttributes: ULONG,
+ ForestTrustLength: ULONG,
+ ForestTrustInfo: PUCHAR,
+}}
+pub type PTRUSTED_DOMAIN_INFORMATION_EX2 = *mut TRUSTED_DOMAIN_INFORMATION_EX2;
+pub const TRUST_AUTH_TYPE_NONE: ULONG = 0;
+pub const TRUST_AUTH_TYPE_NT4OWF: ULONG = 1;
+pub const TRUST_AUTH_TYPE_CLEAR: ULONG = 2;
+pub const TRUST_AUTH_TYPE_VERSION: ULONG = 3;
+STRUCT!{struct LSA_AUTH_INFORMATION {
+ LastUpdateTime: LARGE_INTEGER,
+ AuthType: ULONG,
+ AuthInfoLength: ULONG,
+ AuthInfo: PUCHAR,
+}}
+pub type PLSA_AUTH_INFORMATION = *mut LSA_AUTH_INFORMATION;
+STRUCT!{struct TRUSTED_DOMAIN_AUTH_INFORMATION {
+ IncomingAuthInfos: ULONG,
+ IncomingAuthenticationInformation: PLSA_AUTH_INFORMATION,
+ IncomingPreviousAuthenticationInformation: PLSA_AUTH_INFORMATION,
+ OutgoingAuthInfos: ULONG,
+ OutgoingAuthenticationInformation: PLSA_AUTH_INFORMATION,
+ OutgoingPreviousAuthenticationInformation: PLSA_AUTH_INFORMATION,
+}}
+pub type PTRUSTED_DOMAIN_AUTH_INFORMATION = *mut TRUSTED_DOMAIN_AUTH_INFORMATION;
+STRUCT!{struct TRUSTED_DOMAIN_FULL_INFORMATION {
+ Information: TRUSTED_DOMAIN_INFORMATION_EX,
+ PosixOffset: TRUSTED_POSIX_OFFSET_INFO,
+ AuthInformation: TRUSTED_DOMAIN_AUTH_INFORMATION,
+}}
+pub type PTRUSTED_DOMAIN_FULL_INFORMATION = *mut TRUSTED_DOMAIN_FULL_INFORMATION;
+STRUCT!{struct TRUSTED_DOMAIN_FULL_INFORMATION2 {
+ Information: TRUSTED_DOMAIN_INFORMATION_EX2,
+ PosixOffset: TRUSTED_POSIX_OFFSET_INFO,
+ AuthInformation: TRUSTED_DOMAIN_AUTH_INFORMATION,
+}}
+pub type PTRUSTED_DOMAIN_FULL_INFORMATION2 = *mut TRUSTED_DOMAIN_FULL_INFORMATION2;
+STRUCT!{struct TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES {
+ SupportedEncryptionTypes: ULONG,
+}}
+pub type PTRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES =
+ *mut TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES;
+ENUM!{enum LSA_FOREST_TRUST_RECORD_TYPE {
+ ForestTrustTopLevelName,
+ ForestTrustTopLevelNameEx,
+ ForestTrustDomainInfo,
+ ForestTrustRecordTypeLast, // = ForestTrustDomainInfo,
+}}
+pub const LSA_FTRECORD_DISABLED_REASONS: ULONG = 0x0000FFFF;
+pub const LSA_TLN_DISABLED_NEW: ULONG = 0x00000001;
+pub const LSA_TLN_DISABLED_ADMIN: ULONG = 0x00000002;
+pub const LSA_TLN_DISABLED_CONFLICT: ULONG = 0x00000004;
+pub const LSA_SID_DISABLED_ADMIN: ULONG = 0x00000001;
+pub const LSA_SID_DISABLED_CONFLICT: ULONG = 0x00000002;
+pub const LSA_NB_DISABLED_ADMIN: ULONG = 0x00000004;
+pub const LSA_NB_DISABLED_CONFLICT: ULONG = 0x00000008;
+STRUCT!{struct LSA_FOREST_TRUST_DOMAIN_INFO {
+ Sid: PSID,
+ DnsName: LSA_UNICODE_STRING,
+ NetbiosName: LSA_UNICODE_STRING,
+}}
+pub type PLSA_FOREST_TRUST_DOMAIN_INFO = *mut LSA_FOREST_TRUST_DOMAIN_INFO;
+pub const MAX_FOREST_TRUST_BINARY_DATA_SIZE: ULONG = 128 * 1024;
+STRUCT!{struct LSA_FOREST_TRUST_BINARY_DATA {
+ Length: ULONG,
+ Buffer: PUCHAR,
+}}
+pub type PLSA_FOREST_TRUST_BINARY_DATA = *mut LSA_FOREST_TRUST_BINARY_DATA;
+UNION!{union LSA_FOREST_TRUST_RECORD_ForestTrustData {
+ [usize; 5],
+ TopLevelName TopLevelName_mut: LSA_UNICODE_STRING,
+ DomainInfo DomainInfo_mut: LSA_FOREST_TRUST_DOMAIN_INFO,
+ Data Data_mut: LSA_FOREST_TRUST_BINARY_DATA,
+}}
+STRUCT!{struct LSA_FOREST_TRUST_RECORD {
+ Flags: ULONG,
+ ForestTrustType: LSA_FOREST_TRUST_RECORD_TYPE,
+ Time: LARGE_INTEGER,
+ ForestTrustData: LSA_FOREST_TRUST_RECORD_ForestTrustData,
+}}
+pub type PLSA_FOREST_TRUST_RECORD = *mut LSA_FOREST_TRUST_RECORD;
+pub const MAX_RECORDS_IN_FOREST_TRUST_INFO: ULONG = 4000;
+STRUCT!{struct LSA_FOREST_TRUST_INFORMATION {
+ RecordCount: ULONG,
+ Entries: *mut PLSA_FOREST_TRUST_RECORD,
+}}
+pub type PLSA_FOREST_TRUST_INFORMATION = *mut LSA_FOREST_TRUST_INFORMATION;
+ENUM!{enum LSA_FOREST_TRUST_COLLISION_RECORD_TYPE {
+ CollisionTdo,
+ CollisionXref,
+ CollisionOther,
+}}
+STRUCT!{struct LSA_FOREST_TRUST_COLLISION_RECORD {
+ Index: ULONG,
+ Type: LSA_FOREST_TRUST_COLLISION_RECORD_TYPE,
+ Flags: ULONG,
+ Name: LSA_UNICODE_STRING,
+}}
+pub type PLSA_FOREST_TRUST_COLLISION_RECORD = *mut LSA_FOREST_TRUST_COLLISION_RECORD;
+STRUCT!{struct LSA_FOREST_TRUST_COLLISION_INFORMATION {
+ RecordCount: ULONG,
+ Entries: *mut PLSA_FOREST_TRUST_COLLISION_RECORD,
+}}
+pub type PLSA_FOREST_TRUST_COLLISION_INFORMATION = *mut LSA_FOREST_TRUST_COLLISION_INFORMATION;
+pub type LSA_ENUMERATION_HANDLE = ULONG;
+pub type PLSA_ENUMERATION_HANDLE = *mut ULONG;
+STRUCT!{struct LSA_ENUMERATION_INFORMATION {
+ Sid: PSID,
+}}
+pub type PLSA_ENUMERATION_INFORMATION = *mut LSA_ENUMERATION_INFORMATION;
+STRUCT!{struct LSA_LAST_INTER_LOGON_INFO {
+ LastSuccessfulLogon: LARGE_INTEGER,
+ LastFailedLogon: LARGE_INTEGER,
+ FailedAttemptCountSinceLastSuccessfulLogon: ULONG,
+}}
+pub type PLSA_LAST_INTER_LOGON_INFO = *mut LSA_LAST_INTER_LOGON_INFO;
+STRUCT!{struct SECURITY_LOGON_SESSION_DATA {
+ Size: ULONG,
+ LogonId: LUID,
+ UserName: LSA_UNICODE_STRING,
+ LogonDomain: LSA_UNICODE_STRING,
+ AuthenticationPackage: LSA_UNICODE_STRING,
+ LogonType: ULONG,
+ Session: ULONG,
+ Sid: PSID,
+ LogonTime: LARGE_INTEGER,
+ LogonServer: LSA_UNICODE_STRING,
+ DnsDomainName: LSA_UNICODE_STRING,
+ Upn: LSA_UNICODE_STRING,
+ UserFlags: ULONG,
+ LastLogonInfo: LSA_LAST_INTER_LOGON_INFO,
+ LogonScript: LSA_UNICODE_STRING,
+ ProfilePath: LSA_UNICODE_STRING,
+ HomeDirectory: LSA_UNICODE_STRING,
+ HomeDirectoryDrive: LSA_UNICODE_STRING,
+ LogoffTime: LARGE_INTEGER,
+ KickOffTime: LARGE_INTEGER,
+ PasswordLastSet: LARGE_INTEGER,
+ PasswordCanChange: LARGE_INTEGER,
+ PasswordMustChange: LARGE_INTEGER,
+}}
+pub type PSECURITY_LOGON_SESSION_DATA = *mut SECURITY_LOGON_SESSION_DATA;
+pub const CENTRAL_ACCESS_POLICY_OWNER_RIGHTS_PRESENT_FLAG: ULONG = 0x00000001;
+pub const CENTRAL_ACCESS_POLICY_STAGED_OWNER_RIGHTS_PRESENT_FLAG: ULONG = 0x00000100;
+pub const CENTRAL_ACCESS_POLICY_STAGED_FLAG: ULONG = 0x00010000;
+pub const CENTRAL_ACCESS_POLICY_VALID_FLAG_MASK: ULONG =
+ CENTRAL_ACCESS_POLICY_OWNER_RIGHTS_PRESENT_FLAG
+ | CENTRAL_ACCESS_POLICY_STAGED_OWNER_RIGHTS_PRESENT_FLAG
+ | CENTRAL_ACCESS_POLICY_STAGED_FLAG;
+pub const LSASETCAPS_RELOAD_FLAG: ULONG = 0x00000001;
+pub const LSASETCAPS_VALID_FLAG_MASK: ULONG = LSASETCAPS_RELOAD_FLAG;
+STRUCT!{struct CENTRAL_ACCESS_POLICY_ENTRY {
+ Name: LSA_UNICODE_STRING,
+ Description: LSA_UNICODE_STRING,
+ ChangeId: LSA_UNICODE_STRING,
+ LengthAppliesTo: ULONG,
+ AppliesTo: PUCHAR,
+ LengthSD: ULONG,
+ SD: PSECURITY_DESCRIPTOR,
+ LengthStagedSD: ULONG,
+ StagedSD: PSECURITY_DESCRIPTOR,
+ Flags: ULONG,
+}}
+pub type PCENTRAL_ACCESS_POLICY_ENTRY = *mut CENTRAL_ACCESS_POLICY_ENTRY;
+pub type PCCENTRAL_ACCESS_POLICY_ENTRY = *const CENTRAL_ACCESS_POLICY_ENTRY;
+STRUCT!{struct CENTRAL_ACCESS_POLICY {
+ CAPID: PSID,
+ Name: LSA_UNICODE_STRING,
+ Description: LSA_UNICODE_STRING,
+ ChangeId: LSA_UNICODE_STRING,
+ Flags: ULONG,
+ CAPECount: ULONG,
+ CAPEs: *mut PCENTRAL_ACCESS_POLICY_ENTRY,
+}}
+pub type PCENTRAL_ACCESS_POLICY = *mut CENTRAL_ACCESS_POLICY;
+pub type PCCENTRAL_ACCESS_POLICY = *const CENTRAL_ACCESS_POLICY;
+ENUM!{enum NEGOTIATE_MESSAGES {
+ NegEnumPackagePrefixes = 0,
+ NegGetCallerName = 1,
+ NegTransferCredentials = 2,
+ NegCallPackageMax,
+}}
+pub const NEGOTIATE_MAX_PREFIX: usize = 32;
+STRUCT!{struct NEGOTIATE_PACKAGE_PREFIX {
+ PackageId: ULONG_PTR,
+ PackageDataA: PVOID,
+ PackageDataW: PVOID,
+ PrefixLen: ULONG_PTR,
+ Prefix: [UCHAR; NEGOTIATE_MAX_PREFIX],
+}}
+pub type PNEGOTIATE_PACKAGE_PREFIX = *mut NEGOTIATE_PACKAGE_PREFIX;
+STRUCT!{struct NEGOTIATE_PACKAGE_PREFIXES {
+ MessageType: ULONG,
+ PrefixCount: ULONG,
+ Offset: ULONG,
+ Pad: ULONG,
+}}
+pub type PNEGOTIATE_PACKAGE_PREFIXES = *mut NEGOTIATE_PACKAGE_PREFIXES;
+STRUCT!{struct NEGOTIATE_CALLER_NAME_REQUEST {
+ MessageType: ULONG,
+ LogonId: LUID,
+}}
+pub type PNEGOTIATE_CALLER_NAME_REQUEST = *mut NEGOTIATE_CALLER_NAME_REQUEST;
+STRUCT!{struct NEGOTIATE_CALLER_NAME_RESPONSE {
+ MessageType: ULONG,
+ CallerName: PWSTR,
+}}
+pub type PNEGOTIATE_CALLER_NAME_RESPONSE = *mut NEGOTIATE_CALLER_NAME_RESPONSE;
+STRUCT!{struct DOMAIN_PASSWORD_INFORMATION {
+ MinPasswordLength: USHORT,
+ PasswordHistoryLength: USHORT,
+ PasswordProperties: ULONG,
+ MaxPasswordAge: LARGE_INTEGER,
+ MinPasswordAge: LARGE_INTEGER,
+}}
+pub type PDOMAIN_PASSWORD_INFORMATION = *mut DOMAIN_PASSWORD_INFORMATION;
+pub const DOMAIN_PASSWORD_COMPLEX: ULONG = 0x00000001;
+pub const DOMAIN_PASSWORD_NO_ANON_CHANGE: ULONG = 0x00000002;
+pub const DOMAIN_PASSWORD_NO_CLEAR_CHANGE: ULONG = 0x00000004;
+pub const DOMAIN_LOCKOUT_ADMINS: ULONG = 0x00000008;
+pub const DOMAIN_PASSWORD_STORE_CLEARTEXT: ULONG = 0x00000010;
+pub const DOMAIN_REFUSE_PASSWORD_CHANGE: ULONG = 0x00000020;
+pub const DOMAIN_NO_LM_OWF_CHANGE: ULONG = 0x00000040;
+FN!{stdcall PSAM_PASSWORD_NOTIFICATION_ROUTINE(
+ UserName: PUNICODE_STRING,
+ RelativeId: ULONG,
+ NewPassword: PUNICODE_STRING,
+) -> NTSTATUS}
+FN!{stdcall PSAM_INIT_NOTIFICATION_ROUTINE() -> BOOLEAN}
+FN!{stdcall PSAM_PASSWORD_FILTER_ROUTINE(
+ AccountName: PUNICODE_STRING,
+ FullName: PUNICODE_STRING,
+ Password: PUNICODE_STRING,
+ SetOperation: BOOLEAN,
+) -> BOOLEAN}
+ENUM!{enum MSV1_0_LOGON_SUBMIT_TYPE {
+ MsV1_0InteractiveLogon = 2,
+ MsV1_0Lm20Logon,
+ MsV1_0NetworkLogon,
+ MsV1_0SubAuthLogon,
+ MsV1_0WorkstationUnlockLogon = 7,
+ MsV1_0S4ULogon = 12,
+ MsV1_0VirtualLogon = 82,
+ MsV1_0NoElevationLogon = 83,
+ MsV1_0LuidLogon = 84,
+}}
+pub type PMSV1_0_LOGON_SUBMIT_TYPE = *mut MSV1_0_LOGON_SUBMIT_TYPE;
+ENUM!{enum MSV1_0_PROFILE_BUFFER_TYPE {
+ MsV1_0InteractiveProfile = 2,
+ MsV1_0Lm20LogonProfile,
+ MsV1_0SmartCardProfile,
+}}
+pub type PMSV1_0_PROFILE_BUFFER_TYPE = *mut MSV1_0_PROFILE_BUFFER_TYPE;
+STRUCT!{struct MSV1_0_INTERACTIVE_LOGON {
+ MessageType: MSV1_0_LOGON_SUBMIT_TYPE,
+ LogonDomainName: UNICODE_STRING,
+ UserName: UNICODE_STRING,
+ Password: UNICODE_STRING,
+}}
+pub type PMSV1_0_INTERACTIVE_LOGON = *mut MSV1_0_INTERACTIVE_LOGON;
+STRUCT!{struct MSV1_0_INTERACTIVE_PROFILE {
+ MessageType: MSV1_0_PROFILE_BUFFER_TYPE,
+ LogonCount: USHORT,
+ BadPasswordCount: USHORT,
+ LogonTime: LARGE_INTEGER,
+ LogoffTime: LARGE_INTEGER,
+ KickOffTime: LARGE_INTEGER,
+ PasswordLastSet: LARGE_INTEGER,
+ PasswordCanChange: LARGE_INTEGER,
+ PasswordMustChange: LARGE_INTEGER,
+ LogonScript: UNICODE_STRING,
+ HomeDirectory: UNICODE_STRING,
+ FullName: UNICODE_STRING,
+ ProfilePath: UNICODE_STRING,
+ HomeDirectoryDrive: UNICODE_STRING,
+ LogonServer: UNICODE_STRING,
+ UserFlags: ULONG,
+}}
+pub type PMSV1_0_INTERACTIVE_PROFILE = *mut MSV1_0_INTERACTIVE_PROFILE;
+pub const MSV1_0_CHALLENGE_LENGTH: usize = 8;
+pub const MSV1_0_USER_SESSION_KEY_LENGTH: usize = 16;
+pub const MSV1_0_LANMAN_SESSION_KEY_LENGTH: usize = 8;
+pub const MSV1_0_CLEARTEXT_PASSWORD_ALLOWED: ULONG = 0x02;
+pub const MSV1_0_UPDATE_LOGON_STATISTICS: ULONG = 0x04;
+pub const MSV1_0_RETURN_USER_PARAMETERS: ULONG = 0x08;
+pub const MSV1_0_DONT_TRY_GUEST_ACCOUNT: ULONG = 0x10;
+pub const MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT: ULONG = 0x20;
+pub const MSV1_0_RETURN_PASSWORD_EXPIRY: ULONG = 0x40;
+pub const MSV1_0_USE_CLIENT_CHALLENGE: ULONG = 0x80;
+pub const MSV1_0_TRY_GUEST_ACCOUNT_ONLY: ULONG = 0x100;
+pub const MSV1_0_RETURN_PROFILE_PATH: ULONG = 0x200;
+pub const MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY: ULONG = 0x400;
+pub const MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT: ULONG = 0x800;
+pub const MSV1_0_DISABLE_PERSONAL_FALLBACK: ULONG = 0x00001000;
+pub const MSV1_0_ALLOW_FORCE_GUEST: ULONG = 0x00002000;
+pub const MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED: ULONG = 0x00004000;
+pub const MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY: ULONG = 0x00008000;
+pub const MSV1_0_SUBAUTHENTICATION_DLL_EX: ULONG = 0x00100000;
+pub const MSV1_0_ALLOW_MSVCHAPV2: ULONG = 0x00010000;
+pub const MSV1_0_S4U2SELF: ULONG = 0x00020000;
+pub const MSV1_0_CHECK_LOGONHOURS_FOR_S4U: ULONG = 0x00040000;
+pub const MSV1_0_INTERNET_DOMAIN: ULONG = 0x00080000;
+pub const MSV1_0_SUBAUTHENTICATION_DLL: ULONG = 0xFF000000;
+pub const MSV1_0_SUBAUTHENTICATION_DLL_SHIFT: ULONG = 24;
+pub const MSV1_0_MNS_LOGON: ULONG = 0x01000000;
+pub const MSV1_0_SUBAUTHENTICATION_DLL_RAS: ULONG = 2;
+pub const MSV1_0_SUBAUTHENTICATION_DLL_IIS: ULONG = 132;
+STRUCT!{struct MSV1_0_LM20_LOGON {
+ MessageType: MSV1_0_LOGON_SUBMIT_TYPE,
+ LogonDomainName: UNICODE_STRING,
+ UserName: UNICODE_STRING,
+ Workstation: UNICODE_STRING,
+ ChallengeToClient: [UCHAR; MSV1_0_CHALLENGE_LENGTH],
+ CaseSensitiveChallengeResponse: STRING,
+ CaseInsensitiveChallengeResponse: STRING,
+ ParameterControl: ULONG,
+}}
+pub type PMSV1_0_LM20_LOGON = *mut MSV1_0_LM20_LOGON;
+STRUCT!{struct MSV1_0_SUBAUTH_LOGON {
+ MessageType: MSV1_0_LOGON_SUBMIT_TYPE,
+ LogonDomainName: UNICODE_STRING,
+ UserName: UNICODE_STRING,
+ Workstation: UNICODE_STRING,
+ ChallengeToClient: [UCHAR; MSV1_0_CHALLENGE_LENGTH],
+ AuthenticationInfo1: STRING,
+ AuthenticationInfo2: STRING,
+ ParameterControl: ULONG,
+ SubAuthPackageId: ULONG,
+}}
+pub type PMSV1_0_SUBAUTH_LOGON = *mut MSV1_0_SUBAUTH_LOGON;
+STRUCT!{struct MSV1_0_S4U_LOGON {
+ MessageType: MSV1_0_LOGON_SUBMIT_TYPE,
+ MSV1_0_LOGON_SUBMIT_TYPE: ULONG,
+ UserPrincipalName: UNICODE_STRING,
+ DomainName: UNICODE_STRING,
+}}
+pub type PMSV1_0_S4U_LOGON = *mut MSV1_0_S4U_LOGON;
+pub const LOGON_GUEST: ULONG = 0x01;
+pub const LOGON_NOENCRYPTION: ULONG = 0x02;
+pub const LOGON_CACHED_ACCOUNT: ULONG = 0x04;
+pub const LOGON_USED_LM_PASSWORD: ULONG = 0x08;
+pub const LOGON_EXTRA_SIDS: ULONG = 0x20;
+pub const LOGON_SUBAUTH_SESSION_KEY: ULONG = 0x40;
+pub const LOGON_SERVER_TRUST_ACCOUNT: ULONG = 0x80;
+pub const LOGON_NTLMV2_ENABLED: ULONG = 0x100;
+pub const LOGON_RESOURCE_GROUPS: ULONG = 0x200;
+pub const LOGON_PROFILE_PATH_RETURNED: ULONG = 0x400;
+pub const LOGON_NT_V2: ULONG = 0x800;
+pub const LOGON_LM_V2: ULONG = 0x1000;
+pub const LOGON_NTLM_V2: ULONG = 0x2000;
+pub const LOGON_OPTIMIZED: ULONG = 0x4000;
+pub const LOGON_WINLOGON: ULONG = 0x8000;
+pub const LOGON_PKINIT: ULONG = 0x10000;
+pub const LOGON_NO_OPTIMIZED: ULONG = 0x20000;
+pub const LOGON_NO_ELEVATION: ULONG = 0x40000;
+pub const LOGON_MANAGED_SERVICE: ULONG = 0x80000;
+pub const LOGON_GRACE_LOGON: ULONG = 0x01000000;
+STRUCT!{struct MSV1_0_LM20_LOGON_PROFILE {
+ MessageType: MSV1_0_PROFILE_BUFFER_TYPE,
+ KickOffTime: LARGE_INTEGER,
+ LogoffTime: LARGE_INTEGER,
+ UserFlags: ULONG,
+ UserSessionKey: [UCHAR; MSV1_0_USER_SESSION_KEY_LENGTH],
+ LogonDomainName: UNICODE_STRING,
+ LanmanSessionKey: [UCHAR; MSV1_0_LANMAN_SESSION_KEY_LENGTH],
+ LogonServer: UNICODE_STRING,
+ UserParameters: UNICODE_STRING,
+}}
+pub type PMSV1_0_LM20_LOGON_PROFILE = *mut MSV1_0_LM20_LOGON_PROFILE;
+pub const MSV1_0_OWF_PASSWORD_LENGTH: usize = 16;
+STRUCT!{struct MSV1_0_SUPPLEMENTAL_CREDENTIAL {
+ Version: ULONG,
+ Flags: ULONG,
+ LmPassword: [UCHAR; MSV1_0_OWF_PASSWORD_LENGTH],
+ NtPassword: [UCHAR; MSV1_0_OWF_PASSWORD_LENGTH],
+}}
+pub type PMSV1_0_SUPPLEMENTAL_CREDENTIAL = *mut MSV1_0_SUPPLEMENTAL_CREDENTIAL;
+pub const MSV1_0_NTLM3_RESPONSE_LENGTH: usize = 16;
+pub const MSV1_0_NTLM3_OWF_LENGTH: usize = 16;
+STRUCT!{struct MSV1_0_NTLM3_RESPONSE {
+ Response: [UCHAR; MSV1_0_NTLM3_RESPONSE_LENGTH],
+ RespType: UCHAR,
+ HiRespType: UCHAR,
+ Flags: USHORT,
+ MsgWord: ULONG,
+ TimeStamp: ULONGLONG,
+ ChallengeFromClient: [UCHAR; MSV1_0_CHALLENGE_LENGTH],
+ AvPairsOff: ULONG,
+ Buffer: [UCHAR; 1],
+}}
+pub type PMSV1_0_NTLM3_RESPONSE = *mut MSV1_0_NTLM3_RESPONSE;
+ENUM!{enum MSV1_0_AVID {
+ MsvAvEOL,
+ MsvAvNbComputerName,
+ MsvAvNbDomainName,
+ MsvAvDnsComputerName,
+ MsvAvDnsDomainName,
+ MsvAvDnsTreeName,
+ MsvAvFlags,
+ MsvAvTimestamp,
+ MsvAvRestrictions,
+ MsvAvTargetName,
+ MsvAvChannelBindings,
+}}
+STRUCT!{struct MSV1_0_AV_PAIR {
+ AvId: USHORT,
+ AvLen: USHORT,
+}}
+pub type PMSV1_0_AV_PAIR = *mut MSV1_0_AV_PAIR;
+ENUM!{enum MSV1_0_PROTOCOL_MESSAGE_TYPE {
+ MsV1_0Lm20ChallengeRequest = 0,
+ MsV1_0Lm20GetChallengeResponse,
+ MsV1_0EnumerateUsers,
+ MsV1_0GetUserInfo,
+ MsV1_0ReLogonUsers,
+ MsV1_0ChangePassword,
+ MsV1_0ChangeCachedPassword,
+ MsV1_0GenericPassthrough,
+ MsV1_0CacheLogon,
+ MsV1_0SubAuth,
+ MsV1_0DeriveCredential,
+ MsV1_0CacheLookup,
+ MsV1_0SetProcessOption,
+ MsV1_0ConfigLocalAliases,
+ MsV1_0ClearCachedCredentials,
+ MsV1_0LookupToken,
+ MsV1_0ValidateAuth,
+ MsV1_0CacheLookupEx,
+ MsV1_0GetCredentialKey,
+ MsV1_0SetThreadOption,
+}}
+pub type PMSV1_0_PROTOCOL_MESSAGE_TYPE = *mut MSV1_0_PROTOCOL_MESSAGE_TYPE;
+STRUCT!{struct MSV1_0_CHANGEPASSWORD_REQUEST {
+ MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE,
+ DomainName: UNICODE_STRING,
+ AccountName: UNICODE_STRING,
+ OldPassword: UNICODE_STRING,
+ NewPassword: UNICODE_STRING,
+ Impersonating: BOOLEAN,
+}}
+pub type PMSV1_0_CHANGEPASSWORD_REQUEST = *mut MSV1_0_CHANGEPASSWORD_REQUEST;
+STRUCT!{struct MSV1_0_CHANGEPASSWORD_RESPONSE {
+ MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE,
+ PasswordInfoValid: BOOLEAN,
+ DomainPasswordInfo: DOMAIN_PASSWORD_INFORMATION,
+}}
+pub type PMSV1_0_CHANGEPASSWORD_RESPONSE = *mut MSV1_0_CHANGEPASSWORD_RESPONSE;
+STRUCT!{struct MSV1_0_PASSTHROUGH_REQUEST {
+ MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE,
+ DomainName: UNICODE_STRING,
+ PackageName: UNICODE_STRING,
+ DataLength: ULONG,
+ LogonData: PUCHAR,
+ Pad: ULONG,
+}}
+pub type PMSV1_0_PASSTHROUGH_REQUEST = *mut MSV1_0_PASSTHROUGH_REQUEST;
+STRUCT!{struct MSV1_0_PASSTHROUGH_RESPONSE {
+ MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE,
+ Pad: ULONG,
+ DataLength: ULONG,
+ ValidationData: PUCHAR,
+}}
+pub type PMSV1_0_PASSTHROUGH_RESPONSE = *mut MSV1_0_PASSTHROUGH_RESPONSE;
+STRUCT!{struct MSV1_0_SUBAUTH_REQUEST {
+ MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE,
+ SubAuthPackageId: ULONG,
+ SubAuthInfoLength: ULONG,
+ SubAuthSubmitBuffer: PUCHAR,
+}}
+pub type PMSV1_0_SUBAUTH_REQUEST = *mut MSV1_0_SUBAUTH_REQUEST;
+STRUCT!{struct MSV1_0_SUBAUTH_RESPONSE {
+ MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE,
+ SubAuthInfoLength: ULONG,
+ SubAuthReturnBuffer: PUCHAR,
+}}
+pub type PMSV1_0_SUBAUTH_RESPONSE = *mut MSV1_0_SUBAUTH_RESPONSE;
+pub use self::SystemFunction036 as RtlGenRandom;
+pub use self::SystemFunction040 as RtlEncryptMemory;
+pub use self::SystemFunction041 as RtlDecryptMemory;
+extern "system" {
+ pub fn SystemFunction036(
+ RandomBuffer: PVOID,
+ RandomBufferLength: ULONG,
+ ) -> BOOLEAN;
+}
+pub const RTL_ENCRYPT_MEMORY_SIZE: ULONG = 8;
+pub const RTL_ENCRYPT_OPTION_CROSS_PROCESS: ULONG = 0x01;
+pub const RTL_ENCRYPT_OPTION_SAME_LOGON: ULONG = 0x02;
+extern "system" {
+ pub fn SystemFunction040(
+ Memory: PVOID,
+ MemorySize: ULONG,
+ OptionFlags: ULONG,
+ ) -> NTSTATUS;
+ pub fn SystemFunction041(
+ Memory: PVOID,
+ MemorySize: ULONG,
+ OptionFlags: ULONG,
+ ) -> NTSTATUS;
+}
+pub const KERBEROS_VERSION: ULONG = 5;
+pub const KERBEROS_REVISION: ULONG = 6;
+pub const KERB_ETYPE_NULL: LONG = 0;
+pub const KERB_ETYPE_DES_CBC_CRC: LONG = 1;
+pub const KERB_ETYPE_DES_CBC_MD4: LONG = 2;
+pub const KERB_ETYPE_DES_CBC_MD5: LONG = 3;
+pub const KERB_ETYPE_AES128_CTS_HMAC_SHA1_96: LONG = 17;
+pub const KERB_ETYPE_AES256_CTS_HMAC_SHA1_96: LONG = 18;
+pub const KERB_ETYPE_RC4_MD4: LONG = -128;
+pub const KERB_ETYPE_RC4_PLAIN2: LONG = -129;
+pub const KERB_ETYPE_RC4_LM: LONG = -130;
+pub const KERB_ETYPE_RC4_SHA: LONG = -131;
+pub const KERB_ETYPE_DES_PLAIN: LONG = -132;
+pub const KERB_ETYPE_RC4_HMAC_OLD: LONG = -133;
+pub const KERB_ETYPE_RC4_PLAIN_OLD: LONG = -134;
+pub const KERB_ETYPE_RC4_HMAC_OLD_EXP: LONG = -135;
+pub const KERB_ETYPE_RC4_PLAIN_OLD_EXP: LONG = -136;
+pub const KERB_ETYPE_RC4_PLAIN: LONG = -140;
+pub const KERB_ETYPE_RC4_PLAIN_EXP: LONG = -141;
+pub const KERB_ETYPE_AES128_CTS_HMAC_SHA1_96_PLAIN: LONG = -148;
+pub const KERB_ETYPE_AES256_CTS_HMAC_SHA1_96_PLAIN: LONG = -149;
+pub const KERB_ETYPE_DSA_SHA1_CMS: LONG = 9;
+pub const KERB_ETYPE_RSA_MD5_CMS: LONG = 10;
+pub const KERB_ETYPE_RSA_SHA1_CMS: LONG = 11;
+pub const KERB_ETYPE_RC2_CBC_ENV: LONG = 12;
+pub const KERB_ETYPE_RSA_ENV: LONG = 13;
+pub const KERB_ETYPE_RSA_ES_OEAP_ENV: LONG = 14;
+pub const KERB_ETYPE_DES_EDE3_CBC_ENV: LONG = 15;
+pub const KERB_ETYPE_DSA_SIGN: LONG = 8;
+pub const KERB_ETYPE_RSA_PRIV: LONG = 9;
+pub const KERB_ETYPE_RSA_PUB: LONG = 10;
+pub const KERB_ETYPE_RSA_PUB_MD5: LONG = 11;
+pub const KERB_ETYPE_RSA_PUB_SHA1: LONG = 12;
+pub const KERB_ETYPE_PKCS7_PUB: LONG = 13;
+pub const KERB_ETYPE_DES3_CBC_MD5: LONG = 5;
+pub const KERB_ETYPE_DES3_CBC_SHA1: LONG = 7;
+pub const KERB_ETYPE_DES3_CBC_SHA1_KD: LONG = 16;
+pub const KERB_ETYPE_DES_CBC_MD5_NT: LONG = 20;
+pub const KERB_ETYPE_RC4_HMAC_NT: LONG = 23;
+pub const KERB_ETYPE_RC4_HMAC_NT_EXP: LONG = 24;
+pub const KERB_CHECKSUM_NONE: LONG = 0;
+pub const KERB_CHECKSUM_CRC32: LONG = 1;
+pub const KERB_CHECKSUM_MD4: LONG = 2;
+pub const KERB_CHECKSUM_KRB_DES_MAC: LONG = 4;
+pub const KERB_CHECKSUM_KRB_DES_MAC_K: LONG = 5;
+pub const KERB_CHECKSUM_MD5: LONG = 7;
+pub const KERB_CHECKSUM_MD5_DES: LONG = 8;
+pub const KERB_CHECKSUM_SHA1_NEW: LONG = 14;
+pub const KERB_CHECKSUM_HMAC_SHA1_96_AES128: LONG = 15;
+pub const KERB_CHECKSUM_HMAC_SHA1_96_AES256: LONG = 16;
+pub const KERB_CHECKSUM_LM: LONG = -130;
+pub const KERB_CHECKSUM_SHA1: LONG = -131;
+pub const KERB_CHECKSUM_REAL_CRC32: LONG = -132;
+pub const KERB_CHECKSUM_DES_MAC: LONG = -133;
+pub const KERB_CHECKSUM_DES_MAC_MD5: LONG = -134;
+pub const KERB_CHECKSUM_MD25: LONG = -135;
+pub const KERB_CHECKSUM_RC4_MD5: LONG = -136;
+pub const KERB_CHECKSUM_MD5_HMAC: LONG = -137;
+pub const KERB_CHECKSUM_HMAC_MD5: LONG = -138;
+pub const KERB_CHECKSUM_HMAC_SHA1_96_AES128_Ki: LONG = -150;
+pub const KERB_CHECKSUM_HMAC_SHA1_96_AES256_Ki: LONG = -151;
+pub const KERB_TICKET_FLAGS_reserved: ULONG = 0x80000000;
+pub const KERB_TICKET_FLAGS_forwardable: ULONG = 0x40000000;
+pub const KERB_TICKET_FLAGS_forwarded: ULONG = 0x20000000;
+pub const KERB_TICKET_FLAGS_proxiable: ULONG = 0x10000000;
+pub const KERB_TICKET_FLAGS_proxy: ULONG = 0x08000000;
+pub const KERB_TICKET_FLAGS_may_postdate: ULONG = 0x04000000;
+pub const KERB_TICKET_FLAGS_postdated: ULONG = 0x02000000;
+pub const KERB_TICKET_FLAGS_invalid: ULONG = 0x01000000;
+pub const KERB_TICKET_FLAGS_renewable: ULONG = 0x00800000;
+pub const KERB_TICKET_FLAGS_initial: ULONG = 0x00400000;
+pub const KERB_TICKET_FLAGS_pre_authent: ULONG = 0x00200000;
+pub const KERB_TICKET_FLAGS_hw_authent: ULONG = 0x00100000;
+pub const KERB_TICKET_FLAGS_ok_as_delegate: ULONG = 0x00040000;
+pub const KERB_TICKET_FLAGS_name_canonicalize: ULONG = 0x00010000;
+pub const KERB_TICKET_FLAGS_cname_in_pa_data: ULONG = 0x00040000;
+pub const KERB_TICKET_FLAGS_enc_pa_rep: ULONG = 0x00010000;
+pub const KERB_TICKET_FLAGS_reserved1: ULONG = 0x00000001;
+pub const KRB_NT_UNKNOWN: LONG = 0;
+pub const KRB_NT_PRINCIPAL: LONG = 1;
+pub const KRB_NT_PRINCIPAL_AND_ID: LONG = -131;
+pub const KRB_NT_SRV_INST: LONG = 2;
+pub const KRB_NT_SRV_INST_AND_ID: LONG = -132;
+pub const KRB_NT_SRV_HST: LONG = 3;
+pub const KRB_NT_SRV_XHST: LONG = 4;
+pub const KRB_NT_UID: LONG = 5;
+pub const KRB_NT_ENTERPRISE_PRINCIPAL: LONG = 10;
+pub const KRB_NT_WELLKNOWN: LONG = 11;
+pub const KRB_NT_ENT_PRINCIPAL_AND_ID: LONG = -130;
+pub const KRB_NT_MS_PRINCIPAL: LONG = -128;
+pub const KRB_NT_MS_PRINCIPAL_AND_ID: LONG = -129;
+pub const KRB_NT_MS_BRANCH_ID: LONG = -133;
+pub const KRB_NT_X500_PRINCIPAL: LONG = 6;
+pub const KERB_WRAP_NO_ENCRYPT: ULONG = 0x80000001;
+ENUM!{enum KERB_LOGON_SUBMIT_TYPE {
+ KerbInteractiveLogon = 2,
+ KerbSmartCardLogon = 6,
+ KerbWorkstationUnlockLogon = 7,
+ KerbSmartCardUnlockLogon = 8,
+ KerbProxyLogon = 9,
+ KerbTicketLogon = 10,
+ KerbTicketUnlockLogon = 11,
+ KerbS4ULogon = 12,
+ KerbCertificateLogon = 13,
+ KerbCertificateS4ULogon = 14,
+ KerbCertificateUnlockLogon = 15,
+ KerbNoElevationLogon = 83,
+ KerbLuidLogon = 84,
+}}
+pub type PKERB_LOGON_SUBMIT_TYPE = *mut KERB_LOGON_SUBMIT_TYPE;
+STRUCT!{struct KERB_INTERACTIVE_LOGON {
+ MessageType: KERB_LOGON_SUBMIT_TYPE,
+ LogonDomainName: UNICODE_STRING,
+ UserName: UNICODE_STRING,
+ Password: UNICODE_STRING,
+}}
+pub type PKERB_INTERACTIVE_LOGON = *mut KERB_INTERACTIVE_LOGON;
+STRUCT!{struct KERB_INTERACTIVE_UNLOCK_LOGON {
+ Logon: KERB_INTERACTIVE_LOGON,
+ LogonId: LUID,
+}}
+pub type PKERB_INTERACTIVE_UNLOCK_LOGON = *mut KERB_INTERACTIVE_UNLOCK_LOGON;
+STRUCT!{struct KERB_SMART_CARD_LOGON {
+ MessageType: KERB_LOGON_SUBMIT_TYPE,
+ Pin: UNICODE_STRING,
+ CspDataLength: ULONG,
+ CspData: PUCHAR,
+}}
+pub type PKERB_SMART_CARD_LOGON = *mut KERB_SMART_CARD_LOGON;
+STRUCT!{struct KERB_SMART_CARD_UNLOCK_LOGON {
+ Logon: KERB_SMART_CARD_LOGON,
+ LogonId: LUID,
+}}
+pub type PKERB_SMART_CARD_UNLOCK_LOGON = *mut KERB_SMART_CARD_UNLOCK_LOGON;
+pub const KERB_CERTIFICATE_LOGON_FLAG_CHECK_DUPLICATES: ULONG = 0x1;
+pub const KERB_CERTIFICATE_LOGON_FLAG_USE_CERTIFICATE_INFO: ULONG = 0x2;
+STRUCT!{struct KERB_CERTIFICATE_LOGON {
+ MessageType: KERB_LOGON_SUBMIT_TYPE,
+ DomainName: UNICODE_STRING,
+ UserName: UNICODE_STRING,
+ Pin: UNICODE_STRING,
+ Flags: ULONG,
+ CspDataLength: ULONG,
+ CspData: PUCHAR,
+}}
+pub type PKERB_CERTIFICATE_LOGON = *mut KERB_CERTIFICATE_LOGON;
+STRUCT!{struct KERB_CERTIFICATE_UNLOCK_LOGON {
+ Logon: KERB_CERTIFICATE_LOGON,
+ LogonId: LUID,
+}}
+pub type PKERB_CERTIFICATE_UNLOCK_LOGON = *mut KERB_CERTIFICATE_UNLOCK_LOGON;
+pub const KERB_CERTIFICATE_S4U_LOGON_FLAG_CHECK_DUPLICATES: ULONG = 0x1;
+pub const KERB_CERTIFICATE_S4U_LOGON_FLAG_CHECK_LOGONHOURS: ULONG = 0x2;
+pub const KERB_CERTIFICATE_S4U_LOGON_FLAG_FAIL_IF_NT_AUTH_POLICY_REQUIRED: ULONG = 0x4;
+pub const KERB_CERTIFICATE_S4U_LOGON_FLAG_IDENTIFY: ULONG = 0x8;
+STRUCT!{struct KERB_CERTIFICATE_S4U_LOGON {
+ MessageType: KERB_LOGON_SUBMIT_TYPE,
+ Flags: ULONG,
+ UserPrincipalName: UNICODE_STRING,
+ DomainName: UNICODE_STRING,
+ CertificateLength: ULONG,
+ Certificate: PUCHAR,
+}}
+pub type PKERB_CERTIFICATE_S4U_LOGON = *mut KERB_CERTIFICATE_S4U_LOGON;
+STRUCT!{struct KERB_TICKET_LOGON {
+ MessageType: KERB_LOGON_SUBMIT_TYPE,
+ Flags: ULONG,
+ ServiceTicketLength: ULONG,
+ TicketGrantingTicketLength: ULONG,
+ ServiceTicket: PUCHAR,
+ TicketGrantingTicket: PUCHAR,
+}}
+pub type PKERB_TICKET_LOGON = *mut KERB_TICKET_LOGON;
+STRUCT!{struct KERB_TICKET_UNLOCK_LOGON {
+ Logon: KERB_TICKET_LOGON,
+ LogonId: LUID,
+}}
+pub type PKERB_TICKET_UNLOCK_LOGON = *mut KERB_TICKET_UNLOCK_LOGON;
+pub const KERB_S4U_LOGON_FLAG_CHECK_LOGONHOURS: ULONG = 0x2;
+pub const KERB_S4U_LOGON_FLAG_IDENTIFY: ULONG = 0x8;
+STRUCT!{struct KERB_S4U_LOGON {
+ MessageType: KERB_LOGON_SUBMIT_TYPE,
+ Flags: ULONG,
+ ClientUpn: UNICODE_STRING,
+ ClientRealm: UNICODE_STRING,
+}}
+pub type PKERB_S4U_LOGON = *mut KERB_S4U_LOGON;
+ENUM!{enum KERB_PROFILE_BUFFER_TYPE {
+ KerbInteractiveProfile = 2,
+ KerbSmartCardProfile = 4,
+ KerbTicketProfile = 6,
+}}
+pub type PKERB_PROFILE_BUFFER_TYPE = *mut KERB_PROFILE_BUFFER_TYPE;
+STRUCT!{struct KERB_INTERACTIVE_PROFILE {
+ MessageType: KERB_PROFILE_BUFFER_TYPE,
+ LogonCount: USHORT,
+ BadPasswordCount: USHORT,
+ LogonTime: LARGE_INTEGER,
+ LogoffTime: LARGE_INTEGER,
+ KickOffTime: LARGE_INTEGER,
+ PasswordLastSet: LARGE_INTEGER,
+ PasswordCanChange: LARGE_INTEGER,
+ PasswordMustChange: LARGE_INTEGER,
+ LogonScript: UNICODE_STRING,
+ HomeDirectory: UNICODE_STRING,
+ FullName: UNICODE_STRING,
+ ProfilePath: UNICODE_STRING,
+ HomeDirectoryDrive: UNICODE_STRING,
+ LogonServer: UNICODE_STRING,
+ UserFlags: ULONG,
+}}
+pub type PKERB_INTERACTIVE_PROFILE = *mut KERB_INTERACTIVE_PROFILE;
+STRUCT!{struct KERB_SMART_CARD_PROFILE {
+ Profile: KERB_INTERACTIVE_PROFILE,
+ CertificateSize: ULONG,
+ CertificateData: PUCHAR,
+}}
+pub type PKERB_SMART_CARD_PROFILE = *mut KERB_SMART_CARD_PROFILE;
+STRUCT!{struct KERB_CRYPTO_KEY {
+ KeyType: LONG,
+ Length: ULONG,
+ Value: PUCHAR,
+}}
+pub type PKERB_CRYPTO_KEY = *mut KERB_CRYPTO_KEY;
+STRUCT!{struct KERB_CRYPTO_KEY32 {
+ KeyType: LONG,
+ Length: ULONG,
+ Offset: ULONG,
+}}
+pub type PKERB_CRYPTO_KEY32 = *mut KERB_CRYPTO_KEY32;
+STRUCT!{struct KERB_TICKET_PROFILE {
+ Profile: KERB_INTERACTIVE_PROFILE,
+ SessionKey: KERB_CRYPTO_KEY,
+}}
+pub type PKERB_TICKET_PROFILE = *mut KERB_TICKET_PROFILE;
+ENUM!{enum KERB_PROTOCOL_MESSAGE_TYPE {
+ KerbDebugRequestMessage = 0,
+ KerbQueryTicketCacheMessage,
+ KerbChangeMachinePasswordMessage,
+ KerbVerifyPacMessage,
+ KerbRetrieveTicketMessage,
+ KerbUpdateAddressesMessage,
+ KerbPurgeTicketCacheMessage,
+ KerbChangePasswordMessage,
+ KerbRetrieveEncodedTicketMessage,
+ KerbDecryptDataMessage,
+ KerbAddBindingCacheEntryMessage,
+ KerbSetPasswordMessage,
+ KerbSetPasswordExMessage,
+ KerbVerifyCredentialsMessage,
+ KerbQueryTicketCacheExMessage,
+ KerbPurgeTicketCacheExMessage,
+ KerbRefreshSmartcardCredentialsMessage,
+ KerbAddExtraCredentialsMessage,
+ KerbQuerySupplementalCredentialsMessage,
+ KerbTransferCredentialsMessage,
+ KerbQueryTicketCacheEx2Message,
+ KerbSubmitTicketMessage,
+ KerbAddExtraCredentialsExMessage,
+ KerbQueryKdcProxyCacheMessage,
+ KerbPurgeKdcProxyCacheMessage,
+ KerbQueryTicketCacheEx3Message,
+ KerbCleanupMachinePkinitCredsMessage,
+ KerbAddBindingCacheEntryExMessage,
+ KerbQueryBindingCacheMessage,
+ KerbPurgeBindingCacheMessage,
+ KerbPinKdcMessage,
+ KerbUnpinAllKdcsMessage,
+ KerbQueryDomainExtendedPoliciesMessage,
+ KerbQueryS4U2ProxyCacheMessage,
+}}
+pub type PKERB_PROTOCOL_MESSAGE_TYPE = *mut KERB_PROTOCOL_MESSAGE_TYPE;
+STRUCT!{struct KERB_QUERY_TKT_CACHE_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ LogonId: LUID,
+}}
+pub type PKERB_QUERY_TKT_CACHE_REQUEST = *mut KERB_QUERY_TKT_CACHE_REQUEST;
+STRUCT!{struct KERB_TICKET_CACHE_INFO {
+ ServerName: UNICODE_STRING,
+ RealmName: UNICODE_STRING,
+ StartTime: LARGE_INTEGER,
+ EndTime: LARGE_INTEGER,
+ RenewTime: LARGE_INTEGER,
+ EncryptionType: LONG,
+ TicketFlags: ULONG,
+}}
+pub type PKERB_TICKET_CACHE_INFO = *mut KERB_TICKET_CACHE_INFO;
+STRUCT!{struct KERB_TICKET_CACHE_INFO_EX {
+ ClientName: UNICODE_STRING,
+ ClientRealm: UNICODE_STRING,
+ ServerName: UNICODE_STRING,
+ ServerRealm: UNICODE_STRING,
+ StartTime: LARGE_INTEGER,
+ EndTime: LARGE_INTEGER,
+ RenewTime: LARGE_INTEGER,
+ EncryptionType: LONG,
+ TicketFlags: ULONG,
+}}
+pub type PKERB_TICKET_CACHE_INFO_EX = *mut KERB_TICKET_CACHE_INFO_EX;
+STRUCT!{struct KERB_TICKET_CACHE_INFO_EX2 {
+ ClientName: UNICODE_STRING,
+ ClientRealm: UNICODE_STRING,
+ ServerName: UNICODE_STRING,
+ ServerRealm: UNICODE_STRING,
+ StartTime: LARGE_INTEGER,
+ EndTime: LARGE_INTEGER,
+ RenewTime: LARGE_INTEGER,
+ EncryptionType: LONG,
+ TicketFlags: ULONG,
+ SessionKeyType: ULONG,
+ BranchId: ULONG,
+}}
+pub type PKERB_TICKET_CACHE_INFO_EX2 = *mut KERB_TICKET_CACHE_INFO_EX2;
+STRUCT!{struct KERB_TICKET_CACHE_INFO_EX3 {
+ ClientName: UNICODE_STRING,
+ ClientRealm: UNICODE_STRING,
+ ServerName: UNICODE_STRING,
+ ServerRealm: UNICODE_STRING,
+ StartTime: LARGE_INTEGER,
+ EndTime: LARGE_INTEGER,
+ RenewTime: LARGE_INTEGER,
+ EncryptionType: LONG,
+ TicketFlags: ULONG,
+ SessionKeyType: ULONG,
+ BranchId: ULONG,
+ CacheFlags: ULONG,
+ KdcCalled: UNICODE_STRING,
+}}
+pub type PKERB_TICKET_CACHE_INFO_EX3 = *mut KERB_TICKET_CACHE_INFO_EX3;
+STRUCT!{struct KERB_QUERY_TKT_CACHE_RESPONSE {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ CountOfTickets: ULONG,
+ Tickets: [KERB_TICKET_CACHE_INFO; ANYSIZE_ARRAY],
+}}
+pub type PKERB_QUERY_TKT_CACHE_RESPONSE = *mut KERB_QUERY_TKT_CACHE_RESPONSE;
+STRUCT!{struct KERB_QUERY_TKT_CACHE_EX_RESPONSE {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ CountOfTickets: ULONG,
+ Tickets: [KERB_TICKET_CACHE_INFO_EX; ANYSIZE_ARRAY],
+}}
+pub type PKERB_QUERY_TKT_CACHE_EX_RESPONSE = *mut KERB_QUERY_TKT_CACHE_EX_RESPONSE;
+STRUCT!{struct KERB_QUERY_TKT_CACHE_EX2_RESPONSE {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ CountOfTickets: ULONG,
+ Tickets: [KERB_TICKET_CACHE_INFO_EX2; ANYSIZE_ARRAY],
+}}
+pub type PKERB_QUERY_TKT_CACHE_EX2_RESPONSE = *mut KERB_QUERY_TKT_CACHE_EX2_RESPONSE;
+STRUCT!{struct KERB_QUERY_TKT_CACHE_EX3_RESPONSE {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ CountOfTickets: ULONG,
+ Tickets: [KERB_TICKET_CACHE_INFO_EX3; ANYSIZE_ARRAY],
+}}
+pub type PKERB_QUERY_TKT_CACHE_EX3_RESPONSE = *mut KERB_QUERY_TKT_CACHE_EX3_RESPONSE;
+pub const KERB_USE_DEFAULT_TICKET_FLAGS: ULONG = 0x0;
+pub const KERB_RETRIEVE_TICKET_DEFAULT: ULONG = 0x0;
+pub const KERB_RETRIEVE_TICKET_DONT_USE_CACHE: ULONG = 0x1;
+pub const KERB_RETRIEVE_TICKET_USE_CACHE_ONLY: ULONG = 0x2;
+pub const KERB_RETRIEVE_TICKET_USE_CREDHANDLE: ULONG = 0x4;
+pub const KERB_RETRIEVE_TICKET_AS_KERB_CRED: ULONG = 0x8;
+pub const KERB_RETRIEVE_TICKET_WITH_SEC_CRED: ULONG = 0x10;
+pub const KERB_RETRIEVE_TICKET_CACHE_TICKET: ULONG = 0x20;
+pub const KERB_RETRIEVE_TICKET_MAX_LIFETIME: ULONG = 0x40;
+STRUCT!{struct KERB_AUTH_DATA {
+ Type: ULONG,
+ Length: ULONG,
+ Data: PUCHAR,
+}}
+pub type PKERB_AUTH_DATA = *mut KERB_AUTH_DATA;
+STRUCT!{struct KERB_NET_ADDRESS {
+ Family: ULONG,
+ Length: ULONG,
+ Address: PUCHAR,
+}}
+pub type PKERB_NET_ADDRESS = *mut KERB_NET_ADDRESS;
+STRUCT!{struct KERB_NET_ADDRESSES {
+ Number: ULONG,
+ Addresses: [KERB_NET_ADDRESS; ANYSIZE_ARRAY],
+}}
+pub type PKERB_NET_ADDRESSES = *mut KERB_NET_ADDRESSES;
+STRUCT!{struct KERB_EXTERNAL_NAME {
+ NameType: SHORT,
+ NameCount: USHORT,
+ Names: [UNICODE_STRING; ANYSIZE_ARRAY],
+}}
+pub type PKERB_EXTERNAL_NAME = *mut KERB_EXTERNAL_NAME;
+STRUCT!{struct KERB_EXTERNAL_TICKET {
+ ServiceName: PKERB_EXTERNAL_NAME,
+ TargetName: PKERB_EXTERNAL_NAME,
+ ClientName: PKERB_EXTERNAL_NAME,
+ DomainName: UNICODE_STRING,
+ TargetDomainName: UNICODE_STRING,
+ AltTargetDomainName: UNICODE_STRING,
+ SessionKey: KERB_CRYPTO_KEY,
+ TicketFlags: ULONG,
+ Flags: ULONG,
+ KeyExpirationTime: LARGE_INTEGER,
+ StartTime: LARGE_INTEGER,
+ EndTime: LARGE_INTEGER,
+ RenewUntil: LARGE_INTEGER,
+ TimeSkew: LARGE_INTEGER,
+ EncodedTicketSize: ULONG,
+ EncodedTicket: PUCHAR,
+}}
+pub type PKERB_EXTERNAL_TICKET = *mut KERB_EXTERNAL_TICKET;
+STRUCT!{struct KERB_RETRIEVE_TKT_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ LogonId: LUID,
+ TargetName: UNICODE_STRING,
+ TicketFlags: ULONG,
+ CacheOptions: ULONG,
+ EncryptionType: LONG,
+ CredentialsHandle: SecHandle,
+}}
+pub type PKERB_RETRIEVE_TKT_REQUEST = *mut KERB_RETRIEVE_TKT_REQUEST;
+STRUCT!{struct KERB_RETRIEVE_TKT_RESPONSE {
+ Ticket: KERB_EXTERNAL_TICKET,
+}}
+pub type PKERB_RETRIEVE_TKT_RESPONSE = *mut KERB_RETRIEVE_TKT_RESPONSE;
+STRUCT!{struct KERB_PURGE_TKT_CACHE_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ LogonId: LUID,
+ ServerName: UNICODE_STRING,
+ RealmName: UNICODE_STRING,
+}}
+pub type PKERB_PURGE_TKT_CACHE_REQUEST = *mut KERB_PURGE_TKT_CACHE_REQUEST;
+pub const KERB_PURGE_ALL_TICKETS: ULONG = 1;
+STRUCT!{struct KERB_PURGE_TKT_CACHE_EX_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ LogonId: LUID,
+ Flags: ULONG,
+ TicketTemplate: KERB_TICKET_CACHE_INFO_EX,
+}}
+pub type PKERB_PURGE_TKT_CACHE_EX_REQUEST = *mut KERB_PURGE_TKT_CACHE_EX_REQUEST;
+STRUCT!{struct KERB_SUBMIT_TKT_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ LogonId: LUID,
+ Flags: ULONG,
+ Key: KERB_CRYPTO_KEY32,
+ KerbCredSize: ULONG,
+ KerbCredOffset: ULONG,
+}}
+pub type PKERB_SUBMIT_TKT_REQUEST = *mut KERB_SUBMIT_TKT_REQUEST;
+STRUCT!{struct KERB_QUERY_KDC_PROXY_CACHE_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ Flags: ULONG,
+ LogonId: LUID,
+}}
+pub type PKERB_QUERY_KDC_PROXY_CACHE_REQUEST = *mut KERB_QUERY_KDC_PROXY_CACHE_REQUEST;
+STRUCT!{struct KDC_PROXY_CACHE_ENTRY_DATA {
+ SinceLastUsed: ULONG64,
+ DomainName: UNICODE_STRING,
+ ProxyServerName: UNICODE_STRING,
+ ProxyServerVdir: UNICODE_STRING,
+ ProxyServerPort: USHORT,
+ LogonId: LUID,
+ CredUserName: UNICODE_STRING,
+ CredDomainName: UNICODE_STRING,
+ GlobalCache: BOOLEAN,
+}}
+pub type PKDC_PROXY_CACHE_ENTRY_DATA = *mut KDC_PROXY_CACHE_ENTRY_DATA;
+STRUCT!{struct KERB_QUERY_KDC_PROXY_CACHE_RESPONSE {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ CountOfEntries: ULONG,
+ Entries: PKDC_PROXY_CACHE_ENTRY_DATA,
+}}
+pub type PKERB_QUERY_KDC_PROXY_CACHE_RESPONSE = *mut KERB_QUERY_KDC_PROXY_CACHE_RESPONSE;
+STRUCT!{struct KERB_PURGE_KDC_PROXY_CACHE_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ Flags: ULONG,
+ LogonId: LUID,
+}}
+pub type PKERB_PURGE_KDC_PROXY_CACHE_REQUEST = *mut KERB_PURGE_KDC_PROXY_CACHE_REQUEST;
+STRUCT!{struct KERB_PURGE_KDC_PROXY_CACHE_RESPONSE {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ CountOfPurged: ULONG,
+}}
+pub type PKERB_PURGE_KDC_PROXY_CACHE_RESPONSE = *mut KERB_PURGE_KDC_PROXY_CACHE_RESPONSE;
+pub const KERB_S4U2PROXY_CACHE_ENTRY_INFO_FLAG_NEGATIVE: ULONG = 0x1;
+STRUCT!{struct KERB_S4U2PROXY_CACHE_ENTRY_INFO {
+ ServerName: UNICODE_STRING,
+ Flags: ULONG,
+ LastStatus: NTSTATUS,
+ Expiry: LARGE_INTEGER,
+}}
+pub type PKERB_S4U2PROXY_CACHE_ENTRY_INFO = *mut KERB_S4U2PROXY_CACHE_ENTRY_INFO;
+pub const KERB_S4U2PROXY_CRED_FLAG_NEGATIVE: ULONG = 0x1;
+STRUCT!{struct KERB_S4U2PROXY_CRED {
+ UserName: UNICODE_STRING,
+ DomainName: UNICODE_STRING,
+ Flags: ULONG,
+ LastStatus: NTSTATUS,
+ Expiry: LARGE_INTEGER,
+ CountOfEntries: ULONG,
+ Entries: PKERB_S4U2PROXY_CACHE_ENTRY_INFO,
+}}
+pub type PKERB_S4U2PROXY_CRED = *mut KERB_S4U2PROXY_CRED;
+STRUCT!{struct KERB_QUERY_S4U2PROXY_CACHE_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ Flags: ULONG,
+ LogonId: LUID,
+}}
+pub type PKERB_QUERY_S4U2PROXY_CACHE_REQUEST = *mut KERB_QUERY_S4U2PROXY_CACHE_REQUEST;
+STRUCT!{struct KERB_QUERY_S4U2PROXY_CACHE_RESPONSE {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ CountOfCreds: ULONG,
+ Creds: PKERB_S4U2PROXY_CRED,
+}}
+pub type PKERB_QUERY_S4U2PROXY_CACHE_RESPONSE = *mut KERB_QUERY_S4U2PROXY_CACHE_RESPONSE;
+STRUCT!{struct KERB_CHANGEPASSWORD_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ DomainName: UNICODE_STRING,
+ AccountName: UNICODE_STRING,
+ OldPassword: UNICODE_STRING,
+ NewPassword: UNICODE_STRING,
+ Impersonating: BOOLEAN,
+}}
+pub type PKERB_CHANGEPASSWORD_REQUEST = *mut KERB_CHANGEPASSWORD_REQUEST;
+STRUCT!{struct KERB_SETPASSWORD_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ LogonId: LUID,
+ CredentialsHandle: SecHandle,
+ Flags: ULONG,
+ DomainName: UNICODE_STRING,
+ AccountName: UNICODE_STRING,
+ Password: UNICODE_STRING,
+}}
+pub type PKERB_SETPASSWORD_REQUEST = *mut KERB_SETPASSWORD_REQUEST;
+STRUCT!{struct KERB_SETPASSWORD_EX_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ LogonId: LUID,
+ CredentialsHandle: SecHandle,
+ Flags: ULONG,
+ AccountRealm: UNICODE_STRING,
+ AccountName: UNICODE_STRING,
+ Password: UNICODE_STRING,
+ ClientRealm: UNICODE_STRING,
+ ClientName: UNICODE_STRING,
+ Impersonating: BOOLEAN,
+ KdcAddress: UNICODE_STRING,
+ KdcAddressType: ULONG,
+}}
+pub type PKERB_SETPASSWORD_EX_REQUEST = *mut KERB_SETPASSWORD_EX_REQUEST;
+pub const DS_UNKNOWN_ADDRESS_TYPE: ULONG = 0;
+pub const KERB_SETPASS_USE_LOGONID: ULONG = 1;
+pub const KERB_SETPASS_USE_CREDHANDLE: ULONG = 2;
+STRUCT!{struct KERB_DECRYPT_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ LogonId: LUID,
+ Flags: ULONG,
+ CryptoType: LONG,
+ KeyUsage: LONG,
+ Key: KERB_CRYPTO_KEY,
+ EncryptedDataSize: ULONG,
+ InitialVectorSize: ULONG,
+ InitialVector: PUCHAR,
+ EncryptedData: PUCHAR,
+}}
+pub type PKERB_DECRYPT_REQUEST = *mut KERB_DECRYPT_REQUEST;
+pub const KERB_DECRYPT_FLAG_DEFAULT_KEY: ULONG = 0x00000001;
+STRUCT!{struct KERB_DECRYPT_RESPONSE {
+ DecryptedData: [UCHAR; ANYSIZE_ARRAY],
+}}
+pub type PKERB_DECRYPT_RESPONSE = *mut KERB_DECRYPT_RESPONSE;
+STRUCT!{struct KERB_ADD_BINDING_CACHE_ENTRY_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ RealmName: UNICODE_STRING,
+ KdcAddress: UNICODE_STRING,
+ AddressType: ULONG,
+}}
+pub type PKERB_ADD_BINDING_CACHE_ENTRY_REQUEST = *mut KERB_ADD_BINDING_CACHE_ENTRY_REQUEST;
+STRUCT!{struct KERB_REFRESH_SCCRED_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ CredentialBlob: UNICODE_STRING,
+ LogonId: LUID,
+ Flags: ULONG,
+}}
+pub type PKERB_REFRESH_SCCRED_REQUEST = *mut KERB_REFRESH_SCCRED_REQUEST;
+pub const KERB_REFRESH_SCCRED_RELEASE: ULONG = 0x0;
+pub const KERB_REFRESH_SCCRED_GETTGT: ULONG = 0x1;
+STRUCT!{struct KERB_ADD_CREDENTIALS_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ UserName: UNICODE_STRING,
+ DomainName: UNICODE_STRING,
+ Password: UNICODE_STRING,
+ LogonId: LUID,
+ Flags: ULONG,
+}}
+pub type PKERB_ADD_CREDENTIALS_REQUEST = *mut KERB_ADD_CREDENTIALS_REQUEST;
+pub const KERB_REQUEST_ADD_CREDENTIAL: ULONG = 1;
+pub const KERB_REQUEST_REPLACE_CREDENTIAL: ULONG = 2;
+pub const KERB_REQUEST_REMOVE_CREDENTIAL: ULONG = 4;
+STRUCT!{struct KERB_ADD_CREDENTIALS_REQUEST_EX {
+ Credentials: KERB_ADD_CREDENTIALS_REQUEST,
+ PrincipalNameCount: ULONG,
+ PrincipalNames: [UNICODE_STRING; ANYSIZE_ARRAY],
+}}
+pub type PKERB_ADD_CREDENTIALS_REQUEST_EX = *mut KERB_ADD_CREDENTIALS_REQUEST_EX;
+STRUCT!{struct KERB_TRANSFER_CRED_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ OriginLogonId: LUID,
+ DestinationLogonId: LUID,
+ Flags: ULONG,
+}}
+pub type PKERB_TRANSFER_CRED_REQUEST = *mut KERB_TRANSFER_CRED_REQUEST;
+pub const KERB_TRANSFER_CRED_WITH_TICKETS: ULONG = 0x1;
+pub const KERB_TRANSFER_CRED_CLEANUP_CREDENTIALS: ULONG = 0x2;
+STRUCT!{struct KERB_CLEANUP_MACHINE_PKINIT_CREDS_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ LogonId: LUID,
+}}
+pub type PKERB_CLEANUP_MACHINE_PKINIT_CREDS_REQUEST =
+ *mut KERB_CLEANUP_MACHINE_PKINIT_CREDS_REQUEST;
+STRUCT!{struct KERB_BINDING_CACHE_ENTRY_DATA {
+ DiscoveryTime: ULONG64,
+ RealmName: UNICODE_STRING,
+ KdcAddress: UNICODE_STRING,
+ AddressType: ULONG,
+ Flags: ULONG,
+ DcFlags: ULONG,
+ CacheFlags: ULONG,
+ KdcName: UNICODE_STRING,
+}}
+pub type PKERB_BINDING_CACHE_ENTRY_DATA = *mut KERB_BINDING_CACHE_ENTRY_DATA;
+STRUCT!{struct KERB_QUERY_BINDING_CACHE_RESPONSE {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ CountOfEntries: ULONG,
+ Entries: PKERB_BINDING_CACHE_ENTRY_DATA,
+}}
+pub type PKERB_QUERY_BINDING_CACHE_RESPONSE = *mut KERB_QUERY_BINDING_CACHE_RESPONSE;
+STRUCT!{struct KERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ RealmName: UNICODE_STRING,
+ KdcAddress: UNICODE_STRING,
+ AddressType: ULONG,
+ DcFlags: ULONG,
+}}
+pub type PKERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST = *mut KERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST;
+STRUCT!{struct KERB_QUERY_BINDING_CACHE_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+}}
+pub type PKERB_QUERY_BINDING_CACHE_REQUEST = *mut KERB_QUERY_BINDING_CACHE_REQUEST;
+STRUCT!{struct KERB_PURGE_BINDING_CACHE_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+}}
+pub type PKERB_PURGE_BINDING_CACHE_REQUEST = *mut KERB_PURGE_BINDING_CACHE_REQUEST;
+STRUCT!{struct KERB_QUERY_DOMAIN_EXTENDED_POLICIES_REQUEST {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ Flags: ULONG,
+ DomainName: UNICODE_STRING,
+}}
+pub type PKERB_QUERY_DOMAIN_EXTENDED_POLICIES_REQUEST =
+ *mut KERB_QUERY_DOMAIN_EXTENDED_POLICIES_REQUEST;
+STRUCT!{struct KERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSE {
+ MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
+ Flags: ULONG,
+ ExtendedPolicies: ULONG,
+ DsFlags: ULONG,
+}}
+pub type PKERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSE =
+ *mut KERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSE;
+ENUM!{enum KERB_CERTIFICATE_INFO_TYPE {
+ CertHashInfo = 1,
+}}
+pub type PKERB_CERTIFICATE_INFO_TYPE = *mut KERB_CERTIFICATE_INFO_TYPE;
+STRUCT!{struct KERB_CERTIFICATE_HASHINFO {
+ StoreNameLength: USHORT,
+ HashLength: USHORT,
+}}
+pub type PKERB_CERTIFICATE_HASHINFO = *mut KERB_CERTIFICATE_HASHINFO;
+STRUCT!{struct KERB_CERTIFICATE_INFO {
+ CertInfoSize: ULONG,
+ InfoType: ULONG,
+}}
+pub type PKERB_CERTIFICATE_INFO = *mut KERB_CERTIFICATE_INFO;
+STRUCT!{struct POLICY_AUDIT_SID_ARRAY {
+ UsersCount: ULONG,
+ UserSidArray: *mut PSID,
+}}
+pub type PPOLICY_AUDIT_SID_ARRAY = *mut POLICY_AUDIT_SID_ARRAY;
+STRUCT!{struct AUDIT_POLICY_INFORMATION {
+ AuditSubCategoryGuid: GUID,
+ AuditingInformation: ULONG,
+ AuditCategoryGuid: GUID,
+}}
+pub type PAUDIT_POLICY_INFORMATION = *mut AUDIT_POLICY_INFORMATION;
+pub type LPAUDIT_POLICY_INFORMATION = PAUDIT_POLICY_INFORMATION;
+pub type PCAUDIT_POLICY_INFORMATION = *const AUDIT_POLICY_INFORMATION;
+pub const AUDIT_SET_SYSTEM_POLICY: ULONG = 0x0001;
+pub const AUDIT_QUERY_SYSTEM_POLICY: ULONG = 0x0002;
+pub const AUDIT_SET_USER_POLICY: ULONG = 0x0004;
+pub const AUDIT_QUERY_USER_POLICY: ULONG = 0x0008;
+pub const AUDIT_ENUMERATE_USERS: ULONG = 0x0010;
+pub const AUDIT_SET_MISC_POLICY: ULONG = 0x0020;
+pub const AUDIT_QUERY_MISC_POLICY: ULONG = 0x0040;
+pub const AUDIT_GENERIC_ALL: ULONG = STANDARD_RIGHTS_REQUIRED | AUDIT_SET_SYSTEM_POLICY
+ | AUDIT_QUERY_SYSTEM_POLICY | AUDIT_SET_USER_POLICY | AUDIT_QUERY_USER_POLICY
+ | AUDIT_ENUMERATE_USERS | AUDIT_SET_MISC_POLICY | AUDIT_QUERY_MISC_POLICY;
+pub const AUDIT_GENERIC_READ: ULONG = STANDARD_RIGHTS_READ | AUDIT_QUERY_SYSTEM_POLICY
+ | AUDIT_QUERY_USER_POLICY | AUDIT_ENUMERATE_USERS | AUDIT_QUERY_MISC_POLICY;
+pub const AUDIT_GENERIC_WRITE: ULONG = STANDARD_RIGHTS_WRITE | AUDIT_SET_USER_POLICY
+ | AUDIT_SET_MISC_POLICY | AUDIT_SET_SYSTEM_POLICY;
+pub const AUDIT_GENERIC_EXECUTE: ULONG = STANDARD_RIGHTS_EXECUTE;
+extern "system" {
+ pub fn AuditSetSystemPolicy(
+ pAuditPolicy: PCAUDIT_POLICY_INFORMATION,
+ PolicyCount: ULONG,
+ ) -> BOOLEAN;
+ pub fn AuditSetPerUserPolicy(
+ pSid: *const SID,
+ pAuditPolicy: PCAUDIT_POLICY_INFORMATION,
+ PolicyCount: ULONG,
+ ) -> BOOLEAN;
+ pub fn AuditQuerySystemPolicy(
+ pSubCategoryGuids: *const GUID,
+ PolicyCount: ULONG,
+ ppAuditPolicy: *mut PAUDIT_POLICY_INFORMATION,
+ ) -> BOOLEAN;
+ pub fn AuditQueryPerUserPolicy(
+ pSid: *const SID,
+ pSubCategoryGuids: *const GUID,
+ PolicyCount: ULONG,
+ ppAuditPolicy: *mut PAUDIT_POLICY_INFORMATION,
+ ) -> BOOLEAN;
+ pub fn AuditEnumeratePerUserPolicy(
+ ppAuditSidArray: *mut PPOLICY_AUDIT_SID_ARRAY,
+ ) -> BOOLEAN;
+ pub fn AuditComputeEffectivePolicyBySid(
+ pSid: *const SID,
+ pSubCategoryGuids: *const GUID,
+ dwPolicyCount: ULONG,
+ ppAuditPolicy: *mut PAUDIT_POLICY_INFORMATION,
+ ) -> BOOLEAN;
+ pub fn AuditComputeEffectivePolicyByToken(
+ hTokenHandle: HANDLE,
+ pSubCategoryGuids: *const GUID,
+ dwPolicyCount: ULONG,
+ ppAuditPolicy: *mut PAUDIT_POLICY_INFORMATION,
+ ) -> BOOLEAN;
+ pub fn AuditEnumerateCategories(
+ ppAuditCategoriesArray: *mut *mut GUID,
+ pdwCountReturned: PULONG,
+ ) -> BOOLEAN;
+ pub fn AuditEnumerateSubCategories(
+ pAuditCategoryGuid: *const GUID,
+ bRetrieveAllSubCategories: BOOLEAN,
+ ppAuditSubCategoriesArray: *mut *mut GUID,
+ pdwCountReturned: PULONG,
+ ) -> BOOLEAN;
+ pub fn AuditLookupCategoryNameW(
+ pAuditCategoryGuid: *const GUID,
+ ppszCategoryName: *mut PWSTR,
+ ) -> BOOLEAN;
+ pub fn AuditLookupCategoryNameA(
+ pAuditCategoryGuid: *const GUID,
+ ppszCategoryName: *mut PSTR,
+ ) -> BOOLEAN;
+ pub fn AuditLookupSubCategoryNameW(
+ pAuditSubCategoryGuid: *const GUID,
+ ppszSubCategoryName: *mut PWSTR,
+ ) -> BOOLEAN;
+ pub fn AuditLookupSubCategoryNameA(
+ pAuditSubCategoryGuid: *const GUID,
+ ppszSubCategoryName: *mut PSTR,
+ ) -> BOOLEAN;
+ pub fn AuditLookupCategoryIdFromCategoryGuid(
+ pAuditCategoryGuid: *const GUID,
+ pAuditCategoryId: PPOLICY_AUDIT_EVENT_TYPE,
+ ) -> BOOLEAN;
+ pub fn AuditLookupCategoryGuidFromCategoryId(
+ AuditCategoryId: POLICY_AUDIT_EVENT_TYPE,
+ pAuditCategoryGuid: *mut GUID,
+ ) -> BOOLEAN;
+ pub fn AuditSetSecurity(
+ SecurityInformation: SECURITY_INFORMATION,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ ) -> BOOLEAN;
+ pub fn AuditQuerySecurity(
+ SecurityInformation: SECURITY_INFORMATION,
+ ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
+ ) -> BOOLEAN;
+ pub fn AuditSetGlobalSaclW(
+ ObjectTypeName: PCWSTR,
+ Acl: PACL,
+ ) -> BOOLEAN;
+ pub fn AuditSetGlobalSaclA(
+ ObjectTypeName: PCSTR,
+ Acl: PACL,
+ ) -> BOOLEAN;
+ pub fn AuditQueryGlobalSaclW(
+ ObjectTypeName: PCWSTR,
+ Acl: *mut PACL,
+ ) -> BOOLEAN;
+ pub fn AuditQueryGlobalSaclA(
+ ObjectTypeName: PCSTR,
+ Acl: *mut PACL,
+ ) -> BOOLEAN;
+ pub fn AuditFree(
+ Buffer: PVOID,
+ );
+}
+STRUCT!{struct PKU2U_CERT_BLOB {
+ CertOffset: ULONG,
+ CertLength: USHORT,
+}}
+pub type PPKU2U_CERT_BLOB = *mut PKU2U_CERT_BLOB;
+pub const PKU2U_CREDUI_CONTEXT_VERSION: ULONG64 = 0x4154414454524543;
+STRUCT!{struct PKU2U_CREDUI_CONTEXT {
+ Version: ULONG64,
+ cbHeaderLength: USHORT,
+ cbStructureLength: ULONG,
+ CertArrayCount: USHORT,
+ CertArrayOffset: ULONG,
+}}
+pub type PPKU2U_CREDUI_CONTEXT = *mut PKU2U_CREDUI_CONTEXT;
+ENUM!{enum PKU2U_LOGON_SUBMIT_TYPE {
+ Pku2uCertificateS4ULogon = 14,
+}}
+pub type PPKU2U_LOGON_SUBMIT_TYPE = *mut PKU2U_LOGON_SUBMIT_TYPE;
+STRUCT!{struct PKU2U_CERTIFICATE_S4U_LOGON {
+ MessageType: PKU2U_LOGON_SUBMIT_TYPE,
+ Flags: ULONG,
+ UserPrincipalName: UNICODE_STRING,
+ DomainName: UNICODE_STRING,
+ CertificateLength: ULONG,
+ Certificate: PUCHAR,
+}}
+pub type PPKU2U_CERTIFICATE_S4U_LOGON = *mut PKU2U_CERTIFICATE_S4U_LOGON;
diff --git a/vendor/winapi/src/um/oaidl.rs b/vendor/winapi/src/um/oaidl.rs
new file mode 100644
index 000000000..d653f9e58
--- /dev/null
+++ b/vendor/winapi/src/um/oaidl.rs
@@ -0,0 +1,915 @@
+// 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 OAIdl.h
+use shared::basetsd::ULONG_PTR;
+use shared::guiddef::{GUID, IID, REFGUID, REFIID};
+use shared::minwindef::{BOOL, BYTE, DWORD, FLOAT, INT, UINT, ULONG, USHORT, WORD};
+use shared::rpcndr::byte;
+use shared::wtypes::{
+ BSTR, CY, DATE, DECIMAL, VARIANT_BOOL, VARTYPE, VT_BSTR, VT_DISPATCH, VT_ERROR,
+ VT_I1, VT_I2, VT_I4, VT_I8, VT_RECORD, VT_RESERVED, VT_UNKNOWN, VT_VARIANT,
+ wireBSTR
+};
+use shared::wtypesbase::{
+ BYTE_SIZEDARR, DOUBLE, DWORD_SIZEDARR, HYPER_SIZEDARR, LPCOLESTR, LPOLESTR, SCODE,
+ WORD_SIZEDARR
+};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{CHAR, HRESULT, LCID, LONG, LONGLONG, PVOID, SHORT, ULONGLONG};
+pub type CURRENCY = CY;
+STRUCT!{struct SAFEARRAYBOUND {
+ cElements: ULONG,
+ lLbound: LONG,
+}}
+pub type LPSAFEARRAYBOUND = *mut SAFEARRAYBOUND;
+pub type wireBRECORD = *mut _wireBRECORD;
+pub type wireVARIANT = *mut _wireVARIANT;
+STRUCT!{struct SAFEARR_BSTR {
+ Size: ULONG,
+ aBstr: *mut wireBSTR,
+}}
+STRUCT!{struct SAFEARR_UNKNOWN {
+ Size: ULONG,
+ apUnknown: *mut *mut IUnknown,
+}}
+STRUCT!{struct SAFEARR_DISPATCH {
+ Size: ULONG,
+ apDispatch: *mut *mut IDispatch,
+}}
+STRUCT!{struct SAFEARR_VARIANT {
+ Size: ULONG,
+ aVariant: *mut wireVARIANT,
+}}
+STRUCT!{struct SAFEARR_BRECORD {
+ Size: ULONG,
+ aRecord: *mut wireBRECORD,
+}}
+STRUCT!{struct SAFEARR_HAVEIID {
+ Size: ULONG,
+ apUnknown: *mut *mut IUnknown,
+ iid: IID,
+}}
+ENUM!{enum SF_TYPE {
+ SF_ERROR = VT_ERROR,
+ SF_I1 = VT_I1,
+ SF_I2 = VT_I2,
+ SF_I4 = VT_I4,
+ SF_I8 = VT_I8,
+ SF_BSTR = VT_BSTR,
+ SF_UNKNOWN = VT_UNKNOWN,
+ SF_DISPATCH = VT_DISPATCH,
+ SF_VARIANT = VT_VARIANT,
+ SF_RECORD = VT_RECORD,
+ SF_HAVEIID = VT_UNKNOWN | VT_RESERVED,
+}}
+#[cfg(target_pointer_width = "32")]
+UNION!{union __MIDL_IOleAutomationTypes_0001 {
+ [u32; 6],
+ BstrStr BstrStr_mut: SAFEARR_BSTR,
+ UnknownStr UnknownStr_mut: SAFEARR_UNKNOWN,
+ DispatchStr DispatchStr_mut: SAFEARR_DISPATCH,
+ VariantStr VariantStr_mut: SAFEARR_VARIANT,
+ RecordStr RecordStr_mut: SAFEARR_BRECORD,
+ HaveIidStr HaveIidStr_mut: SAFEARR_HAVEIID,
+ ByteStr ByteStr_mut: BYTE_SIZEDARR,
+ WordStr WordStr_mut: WORD_SIZEDARR,
+ LongStr LongStr_mut: DWORD_SIZEDARR,
+ HyperStr HyperStr_mut: HYPER_SIZEDARR,
+}}
+#[cfg(target_pointer_width = "64")]
+UNION!{union __MIDL_IOleAutomationTypes_0001 {
+ [u64; 4],
+ BstrStr BstrStr_mut: SAFEARR_BSTR,
+ UnknownStr UnknownStr_mut: SAFEARR_UNKNOWN,
+ DispatchStr DispatchStr_mut: SAFEARR_DISPATCH,
+ VariantStr VariantStr_mut: SAFEARR_VARIANT,
+ RecordStr RecordStr_mut: SAFEARR_BRECORD,
+ HaveIidStr HaveIidStr_mut: SAFEARR_HAVEIID,
+ ByteStr ByteStr_mut: BYTE_SIZEDARR,
+ WordStr WordStr_mut: WORD_SIZEDARR,
+ LongStr LongStr_mut: DWORD_SIZEDARR,
+ HyperStr HyperStr_mut: HYPER_SIZEDARR,
+}}
+STRUCT!{struct SAFEARRAYUNION {
+ sfType: ULONG,
+ u: __MIDL_IOleAutomationTypes_0001,
+}}
+STRUCT!{struct _wireSAFEARRAY {
+ cDims: USHORT,
+ fFeatures: USHORT,
+ cbElements: ULONG,
+ cLocks: ULONG,
+ uArrayStructs: SAFEARRAYUNION,
+ rgsaBound: [SAFEARRAYBOUND; 1],
+}}
+pub type wireSAFEARRAY = *mut _wireSAFEARRAY;
+pub type wirePSAFEARRAY = *mut wireSAFEARRAY;
+STRUCT!{struct SAFEARRAY {
+ cDims: USHORT,
+ fFeatures: USHORT,
+ cbElements: ULONG,
+ cLocks: ULONG,
+ pvData: PVOID,
+ rgsabound: [SAFEARRAYBOUND; 1],
+}}
+pub type LPSAFEARRAY = *mut SAFEARRAY;
+pub const FADF_AUTO: DWORD = 0x1;
+pub const FADF_STATIC: DWORD = 0x2;
+pub const FADF_EMBEDDED: DWORD = 0x4;
+pub const FADF_FIXEDSIZE: DWORD = 0x10;
+pub const FADF_RECORD: DWORD = 0x20;
+pub const FADF_HAVEIID: DWORD = 0x40;
+pub const FADF_HAVEVARTYPE: DWORD = 0x80;
+pub const FADF_BSTR: DWORD = 0x100;
+pub const FADF_UNKNOWN: DWORD = 0x200;
+pub const FADF_DISPATCH: DWORD = 0x400;
+pub const FADF_VARIANT: DWORD = 0x800;
+pub const FADF_RESERVED: DWORD = 0xf008;
+STRUCT!{struct __tagBRECORD {
+ pvRecord: PVOID,
+ pRecInfo: *mut IRecordInfo,
+}}
+UNION!{union VARIANT_n3 {
+ [u64; 1] [u64; 2],
+ llVal llVal_mut: LONGLONG,
+ lVal lVal_mut: LONG,
+ bVal bVal_mut: BYTE,
+ iVal iVal_mut: SHORT,
+ fltVal fltVal_mut: FLOAT,
+ dblVal dblVal_mut: DOUBLE,
+ boolVal boolVal_mut: VARIANT_BOOL,
+ scode scode_mut: SCODE,
+ cyVal cyVal_mut: CY,
+ date date_mut: DATE,
+ bstrVal bstrVal_mut: BSTR,
+ punkVal punkVal_mut: *mut IUnknown,
+ pdispVal pdispVal_mut: *mut IDispatch,
+ parray parray_mut: *mut SAFEARRAY,
+ pbVal pbVal_mut: *mut BYTE,
+ piVal piVal_mut: *mut SHORT,
+ plVal plVal_mut: *mut LONG,
+ pllVal pllVal_mut: *mut LONGLONG,
+ pfltVal pfltVal_mut: *mut FLOAT,
+ pdblVal pdblVal_mut: *mut DOUBLE,
+ pboolVal pboolVal_mut: *mut VARIANT_BOOL,
+ pscode pscode_mut: *mut SCODE,
+ pcyVal pcyVal_mut: *mut CY,
+ pdate pdate_mut: *mut DATE,
+ pbstrVal pbstrVal_mut: *mut BSTR,
+ ppunkVal ppunkVal_mut: *mut *mut IUnknown,
+ ppdispVal ppdispVal_mut: *mut *mut IDispatch,
+ pparray pparray_mut: *mut *mut SAFEARRAY,
+ pvarVal pvarVal_mut: *mut VARIANT,
+ byref byref_mut: PVOID,
+ cVal cVal_mut: CHAR,
+ uiVal uiVal_mut: USHORT,
+ ulVal ulVal_mut: ULONG,
+ ullVal ullVal_mut: ULONGLONG,
+ intVal intVal_mut: INT,
+ uintVal uintVal_mut: UINT,
+ pdecVal pdecVal_mut: *mut DECIMAL,
+ pcVal pcVal_mut: *mut CHAR,
+ puiVal puiVal_mut: *mut USHORT,
+ pulVal pulVal_mut: *mut ULONG,
+ pullVal pullVal_mut: *mut ULONGLONG,
+ pintVal pintVal_mut: *mut INT,
+ puintVal puintVal_mut: *mut UINT,
+ n4 n4_mut: __tagBRECORD,
+}}
+STRUCT!{struct __tagVARIANT {
+ vt: VARTYPE,
+ wReserved1: WORD,
+ wReserved2: WORD,
+ wReserved3: WORD,
+ n3: VARIANT_n3,
+}}
+UNION!{union VARIANT_n1 {
+ [u64; 2] [u64; 3],
+ n2 n2_mut: __tagVARIANT,
+ decVal decVal_mut: DECIMAL,
+}}
+STRUCT!{struct VARIANT {
+ n1: VARIANT_n1,
+}}
+pub type LPVARIANT = *mut VARIANT;
+pub type VARIANTARG = VARIANT;
+pub type LPVARIANTARG = *mut VARIANT;
+pub type REFVARIANT = *const VARIANT;
+STRUCT!{struct _wireBRECORD {
+ fFlags: ULONG,
+ clSize: ULONG,
+ pRecInfo: *mut IRecordInfo,
+ pRecord: *mut byte,
+}}
+UNION!{union _wireVARIANT_u {
+ [u64; 2],
+ llVal llVal_mut: LONGLONG,
+ lVal lVal_mut: LONG,
+ bVal bVal_mut: BYTE,
+ iVal iVal_mut: SHORT,
+ fltVal fltVal_mut: FLOAT,
+ dblVal dblVal_mut: DOUBLE,
+ boolVal boolVal_mut: VARIANT_BOOL,
+ scode scode_mut: SCODE,
+ cyVal cyVal_mut: CY,
+ date date_mut: DATE,
+ bstrVal bstrVal_mut: wireBSTR,
+ punkVal punkVal_mut: *mut IUnknown,
+ pdispVal pdispVal_mut: *mut IDispatch,
+ parray parray_mut: wirePSAFEARRAY,
+ brecVal brecVal_mut: wireBRECORD,
+ pbVal pbVal_mut: *mut BYTE,
+ piVal piVal_mut: *mut SHORT,
+ plVal plVal_mut: *mut LONG,
+ pllVal pllVal_mut: *mut LONGLONG,
+ pfltVal pfltVal_mut: *mut FLOAT,
+ pdblVal pdblVal_mut: *mut DOUBLE,
+ pboolVal pboolVal_mut: *mut VARIANT_BOOL,
+ pscode pscode_mut: *mut SCODE,
+ pcyVal pcyVal_mut: *mut CY,
+ pdate pdate_mut: *mut DATE,
+ pbstrVal pbstrVal_mut: *mut wireBSTR,
+ ppunkVal ppunkVal_mut: *mut *mut IUnknown,
+ ppdispVal ppdispVal_mut: *mut *mut IDispatch,
+ pparray pparray_mut: *mut wirePSAFEARRAY,
+ pvarVal pvarVal_mut: *mut wireVARIANT,
+ cVal cVal_mut: CHAR,
+ uiVal uiVal_mut: USHORT,
+ ulVal ulVal_mut: ULONG,
+ ullVal ullVal_mut: ULONGLONG,
+ intVal intVal_mut: INT,
+ uintVal uintVal_mut: UINT,
+ decVal decVal_mut: DECIMAL,
+ pdecVal pdecVal_mut: *mut DECIMAL,
+ pcVal pcVal_mut: *mut CHAR,
+ puiVal puiVal_mut: *mut USHORT,
+ pulVal pulVal_mut: *mut ULONG,
+ pullVal pullVal_mut: *mut ULONGLONG,
+ pintVal pintVal_mut: *mut INT,
+ puintVal puintVal_mut: *mut UINT,
+}}
+STRUCT!{struct _wireVARIANT {
+ clSize: DWORD,
+ rpcReserved: DWORD,
+ vt: USHORT,
+ wReserved1: USHORT,
+ wReserved2: USHORT,
+ wReserved3: USHORT,
+ u: _wireVARIANT_u,
+}}
+pub type DISPID = LONG;
+pub type MEMBERID = DISPID;
+pub type HREFTYPE = DWORD;
+ENUM!{enum TYPEKIND {
+ TKIND_ENUM = 0,
+ TKIND_RECORD,
+ TKIND_MODULE,
+ TKIND_INTERFACE,
+ TKIND_DISPATCH,
+ TKIND_COCLASS,
+ TKIND_ALIAS,
+ TKIND_UNION,
+ TKIND_MAX,
+}}
+UNION!{union TYPEDESC_u {
+ [usize; 1],
+ lptdesc lptdesc_mut: *mut TYPEDESC,
+ lpadesc lpadesc_mut: *mut ARRAYDESC,
+ hreftype hreftype_mut: HREFTYPE,
+}}
+STRUCT!{struct TYPEDESC {
+ u: TYPEDESC_u,
+ vt: VARTYPE,
+}}
+STRUCT!{struct ARRAYDESC {
+ tdescElem: TYPEDESC,
+ cDims: USHORT,
+ rgbounds: [SAFEARRAYBOUND; 1],
+}}
+STRUCT!{struct PARAMDESCEX {
+ cBytes: ULONG,
+ varDefaultValue: VARIANTARG,
+}}
+pub type LPPARAMDESCEX = *mut PARAMDESCEX;
+STRUCT!{struct PARAMDESC {
+ pparamdescex: LPPARAMDESCEX,
+ wParamFlags: USHORT,
+}}
+pub type LPPARAMDESC = *mut PARAMDESC;
+pub const PARAMFLAG_NONE: DWORD = 0;
+pub const PARAMFLAG_FIN: DWORD = 0x1;
+pub const PARAMFLAG_FOUT: DWORD = 0x2;
+pub const PARAMFLAG_FLCID: DWORD = 0x4;
+pub const PARAMFLAG_FRETVAL: DWORD = 0x8;
+pub const PARAMFLAG_FOPT: DWORD = 0x10;
+pub const PARAMFLAG_FHASDEFAULT: DWORD = 0x20;
+pub const PARAMFLAG_FHASCUSTDATA: DWORD = 0x40;
+STRUCT!{struct IDLDESC {
+ dwReserved: ULONG_PTR,
+ wIDLFlags: USHORT,
+}}
+pub type LPIDLDESC = *mut IDLDESC;
+pub const IDLFLAG_NONE: DWORD = PARAMFLAG_NONE;
+pub const IDLFLAG_FIN: DWORD = PARAMFLAG_FIN;
+pub const IDLFLAG_FOUT: DWORD = PARAMFLAG_FOUT;
+pub const IDLFLAG_FLCID: DWORD = PARAMFLAG_FLCID;
+pub const IDLFLAG_FRETVAL: DWORD = PARAMFLAG_FRETVAL;
+UNION!{union ELEMDESC_u {
+ [usize; 2],
+ idldesc idldesc_mut: IDLDESC,
+ paramdesc paramdesc_mut: PARAMDESC,
+}}
+STRUCT!{struct ELEMDESC {
+ tdesc: TYPEDESC,
+ u: ELEMDESC_u,
+}}
+pub type LPELEMDESC = *mut ELEMDESC;
+STRUCT!{struct TYPEATTR {
+ guid: GUID,
+ lcid: LCID,
+ dwReserved: DWORD,
+ memidConstructor: MEMBERID,
+ memidDestructor: MEMBERID,
+ lpstrSchema: LPOLESTR,
+ cbSizeInstance: ULONG,
+ typekind: TYPEKIND,
+ cFuncs: WORD,
+ cVars: WORD,
+ cImplTypes: WORD,
+ cbSizeVft: WORD,
+ cbAlignment: WORD,
+ wTypeFlags: WORD,
+ wMajorVerNum: WORD,
+ wMinorVerNum: WORD,
+ tdescAlias: TYPEDESC,
+ idldescType: IDLDESC,
+}}
+pub type LPTYPEATTR = *mut TYPEATTR;
+STRUCT!{struct DISPPARAMS {
+ rgvarg: *mut VARIANTARG,
+ rgdispidNamedArgs: *mut DISPID,
+ cArgs: UINT,
+ cNamedArgs: UINT,
+}}
+STRUCT!{struct EXCEPINFO {
+ wCode: WORD,
+ wReserved: WORD,
+ bstrSource: BSTR,
+ bstrDescription: BSTR,
+ bstrHelpFile: BSTR,
+ dwHelpContext: DWORD,
+ pvReserved: PVOID,
+ pfnDeferredFillIn: Option<unsafe extern "system" fn(
+ einfo: *mut EXCEPINFO,
+ ) -> HRESULT>,
+ scode: SCODE,
+}}
+ENUM!{enum CALLCONV {
+ CC_FASTCALL = 0,
+ CC_CDECL = 1,
+ CC_MSCPASCAL,
+ CC_PASCAL,
+ CC_MACPASCAL,
+ CC_STDCALL,
+ CC_FPFASTCALL,
+ CC_SYSCALL,
+ CC_MPWCDECL,
+ CC_MPWPASCAL,
+ CC_MAX,
+}}
+ENUM!{enum FUNCKIND {
+ FUNC_VIRTUAL = 0,
+ FUNC_PUREVIRTUAL,
+ FUNC_NONVIRTUAL,
+ FUNC_STATIC,
+ FUNC_DISPATCH,
+}}
+ENUM!{enum INVOKEKIND {
+ INVOKE_FUNC = 1,
+ INVOKE_PROPERTYGET = 2,
+ INVOKE_PROPERTYPUT = 4,
+ INVOKE_PROPERTYPUTREF = 8,
+}}
+STRUCT!{struct FUNCDESC {
+ memid: MEMBERID,
+ lprgscode: *mut SCODE,
+ lprgelemdescParam: *mut ELEMDESC,
+ funckind: FUNCKIND,
+ invkind: INVOKEKIND,
+ callconv: CALLCONV,
+ cParams: SHORT,
+ cParamsOpt: SHORT,
+ oVft: SHORT,
+ cScodes: SHORT,
+ elemdescFunc: ELEMDESC,
+ wFuncFlags: WORD,
+}}
+pub type LPFUNCDESC = *mut FUNCDESC;
+ENUM!{enum VARKIND {
+ VAR_PERINSTANCE = 0,
+ VAR_STATIC,
+ VAR_CONST,
+ VAR_DISPATCH,
+}}
+pub const IMPLTYPEFLAG_FDEFAULT: DWORD = 0x1;
+pub const IMPLTYPEFLAG_FSOURCE: DWORD = 0x2;
+pub const IMPLTYPEFLAG_FRESTRICTED: DWORD = 0x4;
+pub const IMPLTYPEFLAG_FDEFAULTVTABLE: DWORD = 0x8;
+UNION!{union VARDESC_u {
+ [usize; 1],
+ oInst oInst_mut: ULONG,
+ lpvarValue lpvarValue_mut: *mut VARIANT,
+}}
+STRUCT!{struct VARDESC {
+ memid: MEMBERID,
+ lpstrSchema: LPOLESTR,
+ u: VARDESC_u,
+ elemdescVar: ELEMDESC,
+ wVarFlags: WORD,
+ varkind: VARKIND,
+}}
+pub type LPVARDESC = *mut VARDESC;
+ENUM!{enum TYPEFLAGS {
+ TYPEFLAG_FAPPOBJECT = 0x1,
+ TYPEFLAG_FCANCREATE = 0x2,
+ TYPEFLAG_FLICENSED = 0x4,
+ TYPEFLAG_FPREDECLID = 0x8,
+ TYPEFLAG_FHIDDEN = 0x10,
+ TYPEFLAG_FCONTROL = 0x20,
+ TYPEFLAG_FDUAL = 0x40,
+ TYPEFLAG_FNONEXTENSIBLE = 0x80,
+ TYPEFLAG_FOLEAUTOMATION = 0x100,
+ TYPEFLAG_FRESTRICTED = 0x200,
+ TYPEFLAG_FAGGREGATABLE = 0x400,
+ TYPEFLAG_FREPLACEABLE = 0x800,
+ TYPEFLAG_FDISPATCHABLE = 0x1000,
+ TYPEFLAG_FREVERSEBIND = 0x2000,
+ TYPEFLAG_FPROXY = 0x4000,
+}}
+ENUM!{enum FUNCFLAGS {
+ FUNCFLAG_FRESTRICTED = 0x1,
+ FUNCFLAG_FSOURCE = 0x2,
+ FUNCFLAG_FBINDABLE = 0x4,
+ FUNCFLAG_FREQUESTEDIT = 0x8,
+ FUNCFLAG_FDISPLAYBIND = 0x10,
+ FUNCFLAG_FDEFAULTBIND = 0x20,
+ FUNCFLAG_FHIDDEN = 0x40,
+ FUNCFLAG_FUSESGETLASTERROR = 0x80,
+ FUNCFLAG_FDEFAULTCOLLELEM = 0x100,
+ FUNCFLAG_FUIDEFAULT = 0x200,
+ FUNCFLAG_FNONBROWSABLE = 0x400,
+ FUNCFLAG_FREPLACEABLE = 0x800,
+ FUNCFLAG_FIMMEDIATEBIND = 0x1000,
+}}
+ENUM!{enum VARFLAGS {
+ VARFLAG_FREADONLY = 0x1,
+ VARFLAG_FSOURCE = 0x2,
+ VARFLAG_FBINDABLE = 0x4,
+ VARFLAG_FREQUESTEDIT = 0x8,
+ VARFLAG_FDISPLAYBIND = 0x10,
+ VARFLAG_FDEFAULTBIND = 0x20,
+ VARFLAG_FHIDDEN = 0x40,
+ VARFLAG_FRESTRICTED = 0x80,
+ VARFLAG_FDEFAULTCOLLELEM = 0x100,
+ VARFLAG_FUIDEFAULT = 0x200,
+ VARFLAG_FNONBROWSABLE = 0x400,
+ VARFLAG_FREPLACEABLE = 0x800,
+ VARFLAG_FIMMEDIATEBIND = 0x1000,
+}}
+STRUCT!{struct CLEANLOCALSTORAGE {
+ pInterface: *mut IUnknown,
+ pStorage: PVOID,
+ flags: DWORD,
+}}
+STRUCT!{struct CUSTDATAITEM {
+ guid: GUID,
+ varValue: VARIANTARG,
+}}
+pub type LPCUSTDATAITEM = *mut CUSTDATAITEM;
+STRUCT!{struct CUSTDATA {
+ cCustData: DWORD,
+ prgCustData: LPCUSTDATAITEM,
+}}
+pub type LPCUSTDATA = *mut CUSTDATA;
+pub type LPCREATETYPEINFO = *mut ICreateTypeInfo;
+RIDL!{#[uuid(0x00020405, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface ICreateTypeInfo(ICreateTypeInfoVtbl): IUnknown(IUnknownVtbl) {
+ fn SetGuid(
+ guid: REFGUID,
+ ) -> HRESULT,
+ fn SetTypeFlags(
+ uTypeFlags: UINT,
+ ) -> HRESULT,
+ fn SetDocString(
+ pStrDoc: LPOLESTR,
+ ) -> HRESULT,
+ fn SetHelpContext(
+ dwHelpContext: DWORD,
+ ) -> HRESULT,
+ fn SetVersion(
+ wMajorVerNum: WORD,
+ wMinorVerNum: WORD,
+ ) -> HRESULT,
+ fn AddRefTypeInfo(
+ pTInfo: *mut ITypeInfo,
+ ) -> HRESULT,
+ fn AddFuncDesc(
+ index: UINT,
+ pFuncDesc: *mut FUNCDESC,
+ ) -> HRESULT,
+ fn SetImplTypeFlags(
+ index: UINT,
+ implTypeFlags: INT,
+ ) -> HRESULT,
+ fn SetAlignment(
+ cbAlignment: WORD,
+ ) -> HRESULT,
+ fn SetSchema(
+ pStrSchema: LPOLESTR,
+ ) -> HRESULT,
+ fn AddVarDesc(
+ index: UINT,
+ pVarDesc: *mut VARDESC,
+ ) -> HRESULT,
+ fn SetFuncAndParamNames(
+ index: UINT,
+ rgszNames: *mut LPOLESTR,
+ cNames: UINT,
+ ) -> HRESULT,
+ fn SetVarName(
+ index: UINT,
+ szName: LPOLESTR,
+ ) -> HRESULT,
+ fn SetTypeDescAlias(
+ pTDescAlias: *mut TYPEDESC,
+ ) -> HRESULT,
+ fn DefineFuncAsDllEntry(
+ index: UINT,
+ szDllName: LPOLESTR,
+ szProcName: LPOLESTR,
+ ) -> HRESULT,
+ fn SetFuncDocString(
+ index: UINT,
+ szDocString: LPOLESTR,
+ ) -> HRESULT,
+ fn SetVarDocString(
+ index: UINT,
+ szDocString: LPOLESTR,
+ ) -> HRESULT,
+ fn SetFuncHelpContext(
+ index: UINT,
+ dwHelpContext: DWORD,
+ ) -> HRESULT,
+ fn SetVarHelpContext(
+ index: UINT,
+ dwHelpContext: DWORD,
+ ) -> HRESULT,
+ fn SetMops(
+ index: UINT,
+ bstrMops: BSTR,
+ ) -> HRESULT,
+ fn SetTypeIdldesc(
+ pIdlDesc: *mut IDLDESC,
+ ) -> HRESULT,
+ fn LayOut() -> HRESULT,
+}}
+// LPCREATETYPEINFO2
+// ICreateTypeInfo2
+// LPCREATETYPELIB
+// ICreateTypeLib
+// LPCREATETYPELIB2
+// ICreateTypeLib2
+pub type LPDISPATCH = *mut IDispatch;
+pub const DISPID_UNKNOWN: INT = -1;
+pub const DISPID_VALUE: INT = 0;
+pub const DISPID_PROPERTYPUT: INT = -3;
+pub const DISPID_NEWENUM: INT = -4;
+pub const DISPID_EVALUATE: INT = -5;
+pub const DISPID_CONSTRUCTOR: INT = -6;
+pub const DISPID_DESTRUCTOR: INT = -7;
+pub const DISPID_COLLECT: INT = -8;
+RIDL!{#[uuid(0x00020400, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IDispatch(IDispatchVtbl): IUnknown(IUnknownVtbl) {
+ fn GetTypeInfoCount(
+ pctinfo: *mut UINT,
+ ) -> HRESULT,
+ fn GetTypeInfo(
+ iTInfo: UINT,
+ lcid: LCID,
+ ppTInfo: *mut *mut ITypeInfo,
+ ) -> HRESULT,
+ fn GetIDsOfNames(
+ riid: REFIID,
+ rgszNames: *mut LPOLESTR,
+ cNames: UINT,
+ lcid: LCID,
+ rgDispId: *mut DISPID,
+ ) -> HRESULT,
+ fn Invoke(
+ dispIdMember: DISPID,
+ riid: REFIID,
+ lcid: LCID,
+ wFlags: WORD,
+ pDispParams: *mut DISPPARAMS,
+ pVarResult: *mut VARIANT,
+ pExcepInfo: *mut EXCEPINFO,
+ puArgErr: *mut UINT,
+ ) -> HRESULT,
+}}
+// IDispatch_RemoteInvoke_Proxy
+// IDispatch_RemoteInvoke_Stub
+// LPENUMVARIANT
+// IEnumVARIANT
+// IEnumVARIANT_RemoteNext_Proxy
+// IEnumVARIANT_RemoteNext_Stub
+RIDL!{#[uuid(0x0000002F, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IRecordInfo(IRecordInfoVtbl): IUnknown(IUnknownVtbl) {
+ fn RecordInit(
+ pvNew: PVOID,
+ ) -> HRESULT,
+ fn RecordClear(
+ pvExisting: PVOID,
+ ) -> HRESULT,
+ fn RecordCopy(
+ pvExisting: PVOID,
+ pvNew: PVOID,
+ ) -> HRESULT,
+ fn GetGuid(
+ pguid: *mut GUID,
+ ) -> HRESULT,
+ fn GetName(
+ pbstrName: *mut BSTR,
+ ) -> HRESULT,
+ fn GetSize(
+ pcbSize: *mut ULONG,
+ ) -> HRESULT,
+ fn GetTypeInfo(
+ ppTypeInfo: *mut *mut ITypeInfo,
+ ) -> HRESULT,
+ fn GetField(
+ pvData: PVOID,
+ szFieldName: LPCOLESTR,
+ pvarField: *mut VARIANT,
+ ) -> HRESULT,
+ fn GetFieldNoCopy(
+ pvData: PVOID,
+ szFieldName: LPCOLESTR,
+ pvarField: *mut VARIANT,
+ ppvDataCArray: *mut PVOID,
+ ) -> HRESULT,
+ fn PutField(
+ wFlags: ULONG,
+ pvData: PVOID,
+ szFieldName: LPCOLESTR,
+ pvarField: *mut VARIANT,
+ ) -> HRESULT,
+ fn PutFieldNoCopy(
+ wFlags: ULONG,
+ pvData: PVOID,
+ szFieldName: LPCOLESTR,
+ pvarField: *mut VARIANT,
+ ) -> HRESULT,
+ fn GetFieldNames(
+ pcNames: *mut ULONG,
+ rgBstrNames: *mut BSTR,
+ ) -> HRESULT,
+ fn IsMatchingType(
+ pRecordInfo: *mut IRecordInfo,
+ ) -> BOOL,
+ fn RecordCreate() -> PVOID,
+ fn RecordCreateCopy(
+ pvSource: PVOID,
+ ppvDest: *mut PVOID,
+ ) -> HRESULT,
+ fn RecordDestroy(
+ pvRecord: PVOID,
+ ) -> HRESULT,
+}}
+pub type LPTYPECOMP = *mut ITypeComp;
+ENUM!{enum DESCKIND {
+ DESCKIND_NONE = 0,
+ DESCKIND_FUNCDESC = DESCKIND_NONE + 1,
+ DESCKIND_VARDESC = DESCKIND_FUNCDESC + 1,
+ DESCKIND_TYPECOMP = DESCKIND_VARDESC + 1,
+ DESCKIND_IMPLICITAPPOBJ = DESCKIND_TYPECOMP + 1,
+ DESCKIND_MAX = DESCKIND_IMPLICITAPPOBJ + 1,
+}}
+UNION!{union BINDPTR {
+ [usize; 1],
+ lpfuncdesc lpfuncdesc_mut: *mut FUNCDESC,
+ lpvardesc lpvardesc_mut: *mut VARDESC,
+ lptcomp lptcomp_mut: *mut ITypeComp,
+}}
+pub type LPBINDPTR = *mut BINDPTR;
+RIDL!{#[uuid(0x00020403, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface ITypeComp(ITypeCompVtbl): IUnknown(IUnknownVtbl) {
+ fn Bind(
+ szName: LPOLESTR,
+ lHashVal: ULONG,
+ wFlags: WORD,
+ ppTInfo: *mut *mut ITypeInfo,
+ pDescKind: *mut DESCKIND,
+ pBindPtr: *mut BINDPTR,
+ ) -> HRESULT,
+ fn BindType(
+ szName: LPOLESTR,
+ lHashVal: ULONG,
+ ppTInfo: *mut *mut ITypeInfo,
+ ppTComp: *mut *mut ITypeComp,
+ ) -> HRESULT,
+}}
+ENUM!{enum SYSKIND {
+ SYS_WIN16 = 0,
+ SYS_WIN32,
+ SYS_MAC,
+ SYS_WIN64,
+}}
+STRUCT!{struct TLIBATTR {
+ guid: GUID,
+ lcid: LCID,
+ syskind: SYSKIND,
+ wMajorVerNum: WORD,
+ wMinorVerNum: WORD,
+ wLibFlags: WORD,
+}}
+RIDL!{#[uuid(0x00020402, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface ITypeLib(ITypeLibVtbl): IUnknown(IUnknownVtbl) {
+ fn GetTypeInfoCount() -> UINT,
+ fn GetTypeInfo(
+ index: UINT,
+ ppTInfo: *mut *mut ITypeInfo,
+ ) -> HRESULT,
+ fn GetTypeInfoType(
+ index: UINT,
+ pTKind: *mut TYPEKIND,
+ ) -> HRESULT,
+ fn GetTypeInfoOfGuid(
+ guid: REFGUID,
+ ppTInfo: *mut *mut ITypeInfo,
+ ) -> HRESULT,
+ fn GetLibAttr(
+ ppTLibAttr: *mut *mut TLIBATTR,
+ ) -> HRESULT,
+ fn GetTypeComp(
+ ppTComp: *mut *mut ITypeComp,
+ ) -> HRESULT,
+ fn GetDocumentation(
+ index: INT,
+ pbstrName: *mut BSTR,
+ pBstrDocString: *mut BSTR,
+ pdwHelpContext: *mut DWORD,
+ pBstrHelpFile: *mut BSTR,
+ ) -> HRESULT,
+ fn IsName(
+ szNameBuf: LPOLESTR,
+ lHashVal: ULONG,
+ pfName: *mut BOOL,
+ ) -> HRESULT,
+ fn FindName(
+ szNameBuf: LPOLESTR,
+ lHashVal: ULONG,
+ ppTInfo: *mut *mut ITypeInfo,
+ rgMemId: *mut MEMBERID,
+ pcFound: *mut USHORT,
+ ) -> HRESULT,
+ fn ReleaseTLibAttr(
+ pTLibAttr: *const TLIBATTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00020401, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface ITypeInfo(ITypeInfoVtbl): IUnknown(IUnknownVtbl) {
+ fn GetTypeAttr(
+ ppTypeAttr: *mut *mut TYPEATTR,
+ ) -> HRESULT,
+ fn GetTypeComp(
+ ppTComp: *mut *mut ITypeComp,
+ ) -> HRESULT,
+ fn GetFuncDesc(
+ index: UINT,
+ ppFunDesc: *mut *mut FUNCDESC,
+ ) -> HRESULT,
+ fn GetVarDesc(
+ index: UINT,
+ pPVarDesc: *mut *mut VARDESC,
+ ) -> HRESULT,
+ fn GetNames(
+ memid: MEMBERID,
+ rgBstrNames: *mut BSTR,
+ cMaxNames: UINT,
+ pcNames: *mut UINT,
+ ) -> HRESULT,
+ fn GetRefTypeOfImplType(
+ index: UINT,
+ pRefType: *mut HREFTYPE,
+ ) -> HRESULT,
+ fn GetImplTypeFlags(
+ index: UINT,
+ pImplTypeFlags: *mut INT,
+ ) -> HRESULT,
+ fn GetIDsOfNames(
+ rgszNames: *mut LPOLESTR,
+ cNames: UINT,
+ pMemId: *mut MEMBERID,
+ ) -> HRESULT,
+ fn Invoke(
+ pvInstance: PVOID,
+ memid: MEMBERID,
+ wFlags: WORD,
+ pDispParams: *mut DISPPARAMS,
+ pVarResult: *mut VARIANT,
+ pExcepInfo: *mut EXCEPINFO,
+ puArgErr: *mut UINT,
+ ) -> HRESULT,
+ fn GetDocumentation(
+ memid: MEMBERID,
+ pBstrName: *mut BSTR,
+ pBstrDocString: *mut BSTR,
+ pdwHelpContext: *mut DWORD,
+ pBstrHelpFile: *mut BSTR,
+ ) -> HRESULT,
+ fn GetDllEntry(
+ memid: MEMBERID,
+ invKind: INVOKEKIND,
+ pBstrDllName: *mut BSTR,
+ pBstrName: *mut BSTR,
+ pwOrdinal: *mut WORD,
+ ) -> HRESULT,
+ fn GetRefTypeInfo(
+ hRefType: HREFTYPE,
+ ppTInfo: *mut *mut ITypeInfo,
+ ) -> HRESULT,
+ fn AddressOfMember(
+ memid: MEMBERID,
+ invKind: INVOKEKIND,
+ ppv: *mut PVOID,
+ ) -> HRESULT,
+ fn CreateInstance(
+ pUnkOuter: *mut IUnknown,
+ riid: REFIID,
+ ppvObj: *mut PVOID,
+ ) -> HRESULT,
+ fn GetMops(
+ memid: MEMBERID,
+ pBstrMops: *mut BSTR,
+ ) -> HRESULT,
+ fn GetContainingTypeLib(
+ ppTLib: *mut *mut ITypeLib,
+ pIndex: *mut UINT,
+ ) -> HRESULT,
+ fn ReleaseTypeAttr(
+ pTypeAttr: *mut TYPEATTR,
+ ) -> (),
+ fn ReleaseFuncDesc(
+ pFuncDesc: *mut FUNCDESC,
+ ) -> (),
+ fn ReleaseVarDesc(
+ pVarDesc: *mut VARDESC,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x1cf2b120, 0x547d, 0x101b, 0x8e, 0x65, 0x08, 0x00, 0x2b, 0x2b, 0xd1, 0x19)]
+interface IErrorInfo(IErrorInfoVtbl): IUnknown(IUnknownVtbl) {
+ fn GetGUID(
+ pGUID: *mut GUID,
+ ) -> HRESULT,
+ fn GetSource(
+ pBstrSource: *mut BSTR,
+ ) -> HRESULT,
+ fn GetDescription(
+ pBstrDescription: *mut BSTR,
+ ) -> HRESULT,
+ fn GetHelpFile(
+ pBstrHelpFile: *mut BSTR,
+ ) -> HRESULT,
+ fn GetHelpContext(
+ pdwHelpContext: *mut DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x22f03340, 0x547d, 0x101b, 0x8e, 0x65, 0x08, 0x00, 0x2b, 0x2b, 0xd1, 0x19)]
+interface ICreateErrorInfo(ICreateErrorInfoVtbl): IUnknown(IUnknownVtbl) {
+ fn SetGUID(
+ rguid: REFGUID,
+ ) -> HRESULT,
+ fn SetSource(
+ szSource: LPOLESTR,
+ ) -> HRESULT,
+ fn SetDescription(
+ szDescription: LPOLESTR,
+ ) -> HRESULT,
+ fn SetHelpFile(
+ szHelpFile: LPOLESTR,
+ ) -> HRESULT,
+ fn SetHelpContext(
+ dwHelpContext: DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3127ca40, 0x446e, 0x11ce, 0x81, 0x35, 0x00, 0xaa, 0x00, 0x4b, 0xb8, 0x51)]
+interface IErrorLog(IErrorLogVtbl): IUnknown(IUnknownVtbl) {
+ fn AddError(
+ pszPropName: LPCOLESTR,
+ pExcepInfo: *const EXCEPINFO,
+ ) -> HRESULT,
+}}
+pub type LPERRORLOG = *mut IErrorLog;
diff --git a/vendor/winapi/src/um/objbase.rs b/vendor/winapi/src/um/objbase.rs
new file mode 100644
index 000000000..7cafface2
--- /dev/null
+++ b/vendor/winapi/src/um/objbase.rs
@@ -0,0 +1,64 @@
+// 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.
+//! Component object model defintions
+use shared::minwindef::LPVOID;
+use um::combaseapi::COINITBASE_MULTITHREADED;
+use um::winnt::HRESULT;
+ENUM!{enum COINIT {
+ COINIT_APARTMENTTHREADED = 0x2,
+ COINIT_MULTITHREADED = COINITBASE_MULTITHREADED,
+ COINIT_DISABLE_OLE1DDE = 0x4,
+ COINIT_SPEED_OVER_MEMORY = 0x8,
+}}
+ // pub fn CoBuildVersion();
+extern "system" {
+ pub fn CoInitialize(
+ pvReserved: LPVOID,
+ ) -> HRESULT;
+}
+ // pub fn CoRegisterMallocSpy();
+ // pub fn CoRevokeMallocSpy();
+ // pub fn CoRegisterInitializeSpy();
+ // pub fn CoRevokeInitializeSpy();
+ // pub fn CoGetSystemSecurityPermissions();
+ // pub fn CoLoadLibrary();
+ // pub fn CoFreeLibrary();
+ // pub fn CoFreeAllLibraries();
+ // pub fn CoGetInstanceFromFile();
+ // pub fn CoGetInstanceFromIStorage();
+ // pub fn CoAllowSetForegroundWindow();
+ // pub fn DcomChannelSetHResult();
+ // pub fn CoIsOle1Class();
+ // pub fn CLSIDFromProgIDEx();
+ // pub fn CoFileTimeToDosDateTime();
+ // pub fn CoDosDateTimeToFileTime();
+ // pub fn CoFileTimeNow();
+ // pub fn CoRegisterMessageFilter();
+ // pub fn CoRegisterChannelHook();
+ // pub fn CoTreatAsClass();
+ // pub fn CreateDataAdviseHolder();
+ // pub fn CreateDataCache();
+ // pub fn StgOpenAsyncDocfileOnIFillLockBytes();
+ // pub fn StgGetIFillLockBytesOnILockBytes();
+ // pub fn StgGetIFillLockBytesOnFile();
+ // pub fn StgOpenLayoutDocfile();
+ // pub fn CoInstall();
+ // pub fn BindMoniker();
+ // pub fn CoGetObject();
+ // pub fn MkParseDisplayName();
+ // pub fn MonikerRelativePathTo();
+ // pub fn MonikerCommonPrefixWith();
+ // pub fn CreateBindCtx();
+ // pub fn CreateGenericComposite();
+ // pub fn GetClassFile();
+ // pub fn CreateClassMoniker();
+ // pub fn CreateFileMoniker();
+ // pub fn CreateItemMoniker();
+ // pub fn CreateAntiMoniker();
+ // pub fn CreatePointerMoniker();
+ // pub fn CreateObjrefMoniker();
+ // pub fn GetRunningObjectTable();
+ // pub fn CreateStdProgressIndicator();
diff --git a/vendor/winapi/src/um/objidl.rs b/vendor/winapi/src/um/objidl.rs
new file mode 100644
index 000000000..067fb8c88
--- /dev/null
+++ b/vendor/winapi/src/um/objidl.rs
@@ -0,0 +1,525 @@
+// 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.
+//! this ALWAYS GENERATED file contains the definitions for the interfaces
+use ctypes::c_void;
+use shared::basetsd::UINT64;
+use shared::guiddef::{CLSID, IID, REFCLSID, REFIID};
+use shared::minwindef::{BOOL, BYTE, DWORD, FILETIME, HGLOBAL, ULONG, WORD};
+use shared::ntdef::LONG;
+use shared::windef::{HBITMAP, HENHMETAFILE};
+use shared::wtypes::{CLIPFORMAT, HMETAFILEPICT};
+use shared::wtypesbase::{LPCOLESTR, LPOLESTR, OLECHAR};
+use um::objidlbase::{IEnumString, IStream, STATSTG};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, ULARGE_INTEGER};
+//8402
+STRUCT!{struct BIND_OPTS {
+ cbStruct: DWORD,
+ grfFlags: DWORD,
+ grfMode: DWORD,
+ dwTickCountDeadline: DWORD,
+}}
+pub type LPBIND_OPTS = *mut BIND_OPTS;
+//8479
+RIDL!{#[uuid(0x0000000e, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IBindCtx(IBindCtxVtbl): IUnknown(IUnknownVtbl) {
+ fn RegisterObjectBound(
+ punk: *mut IUnknown,
+ ) -> HRESULT,
+ fn RevokeObjectBound(
+ punk: *mut IUnknown,
+ ) -> HRESULT,
+ fn ReleaseBoundObjects() -> HRESULT,
+ fn SetBindOptions(
+ pbindopts: *mut BIND_OPTS,
+ ) -> HRESULT,
+ fn GetBindOptions(
+ pbindopts: *mut BIND_OPTS,
+ ) -> HRESULT,
+ fn GetRunningObjectTable(
+ pprot: *mut *mut IRunningObjectTable,
+ ) -> HRESULT,
+ fn RegisterObjectParam(
+ pszKey: LPOLESTR,
+ punk: *mut IUnknown,
+ ) -> HRESULT,
+ fn GetObjectParam(
+ pszKey: LPOLESTR,
+ ppunk: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn EnumObjectParam(
+ ppenum: *mut *mut IEnumString,
+ ) -> HRESULT,
+ fn RevokeObjectParam(
+ pszKey: LPOLESTR,
+ ) -> HRESULT,
+}}
+//8681
+RIDL!{#[uuid(0x00000102, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IEnumMoniker(IEnumMonikerVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ celt: ULONG,
+ rgelt: *mut *mut IMoniker,
+ pceltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ celt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppenum: *mut *mut IEnumMoniker,
+ ) -> HRESULT,
+}}
+//8958
+RIDL!{#[uuid(0x00000010, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IRunningObjectTable(IRunningObjectTableVtbl): IUnknown(IUnknownVtbl) {
+ fn Register(
+ grfFlags: DWORD,
+ punkObject: *mut IUnknown,
+ pmkObjectName: *mut IMoniker,
+ pdwRegister: *mut DWORD,
+ ) -> HRESULT,
+ fn Revoke(
+ dwRegister: DWORD,
+ ) -> HRESULT,
+ fn IsRunning(
+ pmkObjectName: *mut IMoniker,
+ ) -> HRESULT,
+ fn GetObject(
+ pmkObjectName: *mut IMoniker,
+ ppunkObject: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn NoteChangeTime(
+ dwRegister: DWORD,
+ pfiletime: *mut FILETIME,
+ ) -> HRESULT,
+ fn GetTimeOfLastChange(
+ pmkObjectName: *mut IMoniker,
+ pfiletime: *mut FILETIME,
+ ) -> HRESULT,
+ fn EnumRunning(
+ ppenumMoniker: *mut *mut IEnumMoniker,
+ ) -> HRESULT,
+}}
+//9125
+RIDL!{#[uuid(0x0000010c, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IPersist(IPersistVtbl): IUnknown(IUnknownVtbl) {
+ fn GetClassID(
+ pClassID: *mut CLSID,
+ ) -> HRESULT,
+}}
+//9207
+RIDL!{#[uuid(0x00000109, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IPersistStream(IPersistStreamVtbl): IPersist(IPersistVtbl) {
+ fn IsDirty() -> HRESULT,
+ fn Load(
+ pStm: *mut IStream,
+ ) -> HRESULT,
+ fn Save(
+ pStm: *mut IStream,
+ fClearDirty: BOOL,
+ ) -> HRESULT,
+ fn GetSizeMax(
+ pcbSize: *mut ULARGE_INTEGER,
+ ) -> HRESULT,
+}}
+//9350
+RIDL!{#[uuid(0x0000000f, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IMoniker(IMonikerVtbl): IPersistStream(IPersistStreamVtbl) {
+ fn BindToObject(
+ pbc: *mut IBindCtx,
+ pmkToLeft: *mut IMoniker,
+ riidResult: REFIID,
+ ppvResult: *mut *mut c_void,
+ ) -> HRESULT,
+ fn BindToStorage(
+ pbc: *mut IBindCtx,
+ pmkToLeft: *mut IMoniker,
+ riid: REFIID,
+ ppvObj: *mut *mut c_void,
+ ) -> HRESULT,
+ fn Reduce(
+ pbc: *mut IBindCtx,
+ dwReduceHowFar: DWORD,
+ ppmkToLeft: *mut *mut IMoniker,
+ ppmkReduced: *mut *mut IMoniker,
+ ) -> HRESULT,
+ fn ComposeWith(
+ pmkRight: *mut IMoniker,
+ fOnlyIfNotGeneric: BOOL,
+ ppmkComposite: *mut *mut IMoniker,
+ ) -> HRESULT,
+ fn Enum(
+ fForward: BOOL,
+ ppenumMoniker: *mut *mut IEnumMoniker,
+ ) -> HRESULT,
+ fn IsEqual(
+ pmkOtherMoniker: *mut IMoniker,
+ ) -> HRESULT,
+ fn Hash(
+ pdwHash: *mut DWORD,
+ ) -> HRESULT,
+ fn IsRunning(
+ pbc: *mut IBindCtx,
+ pmkToLeft: *mut IMoniker,
+ pmkNewlyRunning: *mut IMoniker,
+ ) -> HRESULT,
+ fn GetTimeOfLastChange(
+ pbc: *mut IBindCtx,
+ pmkToLeft: *mut IMoniker,
+ pFileTime: *mut FILETIME,
+ ) -> HRESULT,
+ fn Inverse(
+ ppmk: *mut *mut IMoniker,
+ ) -> HRESULT,
+ fn CommonPrefixWith(
+ pmkOther: *mut IMoniker,
+ ppmkPrefix: *mut *mut IMoniker,
+ ) -> HRESULT,
+ fn RelativePathTo(
+ pmkOther: *mut IMoniker,
+ ppmkRelPath: *mut *mut IMoniker,
+ ) -> HRESULT,
+ fn GetDisplayName(
+ pbc: *mut IBindCtx,
+ pmkToLeft: *mut IMoniker,
+ ppszDisplayName: *mut LPOLESTR,
+ ) -> HRESULT,
+ fn ParseDisplayName(
+ pbc: *mut IBindCtx,
+ pmkToLeft: *mut IMoniker,
+ pszDisplayName: LPOLESTR,
+ pchEaten: *mut ULONG,
+ ppmkOut: *mut *mut IMoniker,
+ ) -> HRESULT,
+ fn IsSystemMoniker(
+ pdwMksys: *mut DWORD,
+ ) -> HRESULT,
+}}
+ENUM!{enum EOLE_AUTHENTICATION_CAPABILITIES {
+ EOAC_NONE = 0,
+ EOAC_MUTUAL_AUTH = 0x1,
+ EOAC_STATIC_CLOAKING = 0x20,
+ EOAC_DYNAMIC_CLOAKING = 0x40,
+ EOAC_ANY_AUTHORITY = 0x80,
+ EOAC_MAKE_FULLSIC = 0x100,
+ EOAC_DEFAULT = 0x800,
+ EOAC_SECURE_REFS = 0x2,
+ EOAC_ACCESS_CONTROL = 0x4,
+ EOAC_APPID = 0x8,
+ EOAC_DYNAMIC = 0x10,
+ EOAC_REQUIRE_FULLSIC = 0x200,
+ EOAC_AUTO_IMPERSONATE = 0x400,
+ EOAC_NO_CUSTOM_MARSHAL = 0x2000,
+ EOAC_DISABLE_AAA = 0x1000,
+}}
+STRUCT!{struct SOLE_AUTHENTICATION_SERVICE {
+ dwAuthnSvc: DWORD,
+ dwAuthzSvc: DWORD,
+ pPrincipalName: *mut OLECHAR,
+ hr: HRESULT,
+}}
+RIDL!{#[uuid(0x0000000d, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IEnumSTATSTG(IEnumSTATSTGVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ celt: ULONG,
+ rgelt: *mut STATSTG,
+ pceltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ celt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppenum: *mut *mut IEnumSTATSTG,
+ ) -> HRESULT,
+}}
+pub type SNB = *const *const OLECHAR;
+RIDL!{#[uuid(0x0000000b, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IStorage(IStorageVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateStream(
+ pwcsName: *const OLECHAR,
+ grfMode: DWORD,
+ reserved1: DWORD,
+ reserved2: DWORD,
+ ppstm: *mut *mut IStream,
+ ) -> HRESULT,
+ fn OpenStream(
+ pwcsName: *const OLECHAR,
+ reserved1: *const c_void,
+ grfMode: DWORD,
+ reserved2: DWORD,
+ ppstm: *mut *mut IStream,
+ ) -> HRESULT,
+ fn CreateStorage(
+ pwcsName: *const OLECHAR,
+ grfMode: DWORD,
+ reserved1: DWORD,
+ reserved2: DWORD,
+ ppstg: *mut *mut IStorage,
+ ) -> HRESULT,
+ fn OpenStorage(
+ pwcsName: *const OLECHAR,
+ pstgPriority: IStorage,
+ grfMode: DWORD,
+ snbExclude: SNB,
+ reserved: DWORD,
+ ppstg: *mut *mut IStorage,
+ ) -> HRESULT,
+ fn CopyTo(
+ ciidExclude: DWORD,
+ rgiidExclude: *const IID,
+ snbExclude: SNB,
+ pstgDest: *const IStorage,
+ ) -> HRESULT,
+ fn MoveElementTo(
+ pwcsName: *const OLECHAR,
+ pstgDest: *const IStorage,
+ pwcsNewName: *const OLECHAR,
+ grfFlags: DWORD,
+ ) -> HRESULT,
+ fn Commit(
+ grfCommitFlags: DWORD,
+ ) -> HRESULT,
+ fn Revert() -> HRESULT,
+ fn EnumElements(
+ reserved1: DWORD,
+ reserved2: *const c_void,
+ reserved3: DWORD,
+ ppenum: *mut *mut IEnumSTATSTG,
+ ) -> HRESULT,
+ fn DestroyElement(
+ pwcsName: *const OLECHAR,
+ ) -> HRESULT,
+ fn RenameElement(
+ pwcsOldName: *const OLECHAR,
+ pwcsNewName: *const OLECHAR,
+ ) -> HRESULT,
+ fn SetElementTimes(
+ pwcsName: *const OLECHAR,
+ pctime: *const FILETIME,
+ patime: *const FILETIME,
+ pmtime: *const FILETIME,
+ ) -> HRESULT,
+ fn SetClass(
+ clsid: REFCLSID,
+ ) -> HRESULT,
+ fn SetStateBits(
+ grfStateBits: DWORD,
+ grfMask: DWORD,
+ ) -> HRESULT,
+ fn Stat(
+ pstatstg: *mut STATSTG,
+ grfStatFlag: DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x0000010b, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IPersistFile(IPersistFileVtbl): IPersist(IPersistVtbl) {
+ fn IsDirty() -> HRESULT,
+ fn Load(
+ pszFileName: LPCOLESTR,
+ dwMode: DWORD,
+ ) -> HRESULT,
+ fn Save(
+ pszFileName: LPCOLESTR,
+ fRemember: BOOL,
+ ) -> HRESULT,
+ fn SaveCompleted(
+ pszFileName: LPCOLESTR,
+ ) -> HRESULT,
+ fn GetCurFile(
+ ppszFileName: *mut LPOLESTR,
+ ) -> HRESULT,
+}}
+STRUCT!{struct DVTARGETDEVICE {
+ tdSize: DWORD,
+ tdDriverNameOffset: WORD,
+ tdDeviceNameOffset: WORD,
+ tdPortNameOffset: WORD,
+ tdExtDevmodeOFfset: WORD,
+ tdData: [BYTE; 1],
+}}
+STRUCT!{struct FORMATETC {
+ cfFormat: CLIPFORMAT,
+ ptd: *const DVTARGETDEVICE,
+ dwAspect: DWORD,
+ lindex: LONG,
+ tymed: DWORD,
+}}
+RIDL!{#[uuid(0x00000103, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IEnumFORMATETC(IEnumFORMATETCVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ celt: ULONG,
+ rgelt: *mut FORMATETC,
+ pceltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ celt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppenum: *mut *mut IEnumFORMATETC,
+ ) -> HRESULT,
+}}
+ENUM!{enum ADVF {
+ ADVF_NODATA = 1,
+ ADVF_PRIMEFIRST = 2,
+ ADVF_ONLYONCE = 4,
+ ADVF_DATAONSTOP = 64,
+ ADVFCACHE_NOHANDLER = 8,
+ ADVFCACHE_FORCEBUILTIN = 16,
+ ADVFCACHE_ONSAVE = 32,
+}}
+STRUCT!{struct STATDATA {
+ formatetc: FORMATETC,
+ advf: DWORD,
+ pAdvSInk: *mut IAdviseSink,
+ dwConnection: DWORD,
+}}
+RIDL!{#[uuid(0x00000105, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IEnumSTATDATA(IEnumSTATDATAVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ celt: ULONG,
+ rgelt: *mut STATDATA,
+ pceltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ celt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppenum: *mut *mut IEnumSTATDATA,
+ ) -> HRESULT,
+}}
+ENUM!{enum TYMED {
+ TYMED_HGLOBAL = 1,
+ TYMED_FILE = 2,
+ TYMED_ISTREAM = 4,
+ TYMED_ISTORAGE = 8,
+ TYMED_GDI = 16,
+ TYMED_MFPICT = 32,
+ TYMED_ENHMF = 64,
+ TYMED_NULL = 0,
+}}
+UNION!{union STGMEDIUM_u {
+ [u64; 7], //TODO: I guessed to move on
+ hBitmap hBitmap_mut: HBITMAP,
+ hMetaFilePict hMetaFilePict_mut: HMETAFILEPICT,
+ hEnhMetaFile hEnhMetaFile_mut: HENHMETAFILE,
+ hGlobal hGlobal_mut: HGLOBAL,
+ lpszFileName lpszFileName_mut: LPOLESTR,
+ pstm pstm_mut: *mut IStream,
+ pstg pstg_mut: *mut IStorage,
+}}
+STRUCT!{struct STGMEDIUM {
+ tymed: DWORD,
+ u: *mut STGMEDIUM_u,
+ pUnkForRelease: *mut IUnknown,
+}}
+RIDL!{#[uuid(0x0000010f, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IAdviseSink(IAdviseSinkVtbl): IUnknown(IUnknownVtbl) {
+ fn OnDataChange(
+ pformatetc: *mut FORMATETC,
+ pStgmed: *mut STGMEDIUM,
+ ) -> c_void,
+ fn OnViewChange(
+ dwAspect: DWORD,
+ lindex: LONG,
+ ) -> c_void,
+ fn OnRename(
+ pmk: *mut IMoniker,
+ ) -> c_void,
+ fn OnSave() -> c_void,
+ fn OnClose() -> c_void,
+}}
+ENUM!{enum DATADIR {
+ DATADIR_GET = 1,
+ DATADIR_SET = 2,
+}}
+pub type LPDATAOBJECT = *mut IDataObject;
+RIDL!{#[uuid(0x0000010e, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IDataObject(IDataObjectVtbl): IUnknown(IUnknownVtbl) {
+ fn GetData(
+ pformatetcIn: *const FORMATETC,
+ pmedium: *mut STGMEDIUM,
+ ) -> HRESULT,
+ fn GetDataHere(
+ pformatetc: *const FORMATETC,
+ pmedium: *mut STGMEDIUM,
+ ) -> HRESULT,
+ fn QueryGetData(
+ pformatetc: *const FORMATETC,
+ ) -> HRESULT,
+ fn GetCanonicalFormatEtc(
+ pformatetcIn: *const FORMATETC,
+ pformatetcOut: *mut FORMATETC,
+ ) -> HRESULT,
+ fn SetData(
+ pformatetc: *const FORMATETC,
+ pformatetcOut: *const FORMATETC,
+ fRelease: BOOL,
+ ) -> HRESULT,
+ fn EnumFormatEtc(
+ dwDirection: DWORD,
+ ppenumFormatEtc: *mut *mut IEnumFORMATETC,
+ ) -> HRESULT,
+ fn DAdvise(
+ pformatetc: *const FORMATETC,
+ advf: DWORD,
+ pAdvSInk: *const IAdviseSink,
+ pdwConnection: *mut DWORD,
+ ) -> HRESULT,
+ fn DUnadvise(
+ dwConnection: DWORD,
+ ) -> HRESULT,
+ fn EnumDAdvise(
+ ppenumAdvise: *const *const IEnumSTATDATA,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa2f05a09, 0x27a2, 0x42b5, 0xbc, 0x0e, 0xac, 0x16, 0x3e, 0xf4, 0x9d, 0x9b)]
+interface IApartmentShutdown(IApartmentShutdownVtbl): IUnknown(IUnknownVtbl) {
+ fn OnUninitialize(
+ ui64ApartmentIdentifier: UINT64,
+ ) -> (),
+}}
+RIDL!{#[uuid(0x00000003, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IMarshal(IMarshalVtbl): IUnknown(IUnknownVtbl) {
+ fn GetUnmarshalClass(
+ riid: REFIID,
+ pv: *mut c_void,
+ dwDestContext: DWORD,
+ pvDestContext: *mut c_void,
+ mshlflags: DWORD,
+ pCid: *mut CLSID,
+ ) -> HRESULT,
+ fn GetMarshalSizeMax(
+ riid: REFIID,
+ pv: *mut c_void,
+ dwDestContext: DWORD,
+ pvDestContext: *mut c_void,
+ mshlflags: DWORD,
+ pSize: *mut DWORD,
+ ) -> HRESULT,
+ fn MarshalInterface(
+ pStm: *mut IStream,
+ riid: REFIID,
+ pv: *mut c_void,
+ dwDestContext: DWORD,
+ pvDestContext: *mut c_void,
+ mshlflags: DWORD,
+ ) -> HRESULT,
+ fn UnmarshalInterface(
+ pStm: *mut IStream,
+ riid: REFIID,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT,
+ fn ReleaseMarshalData(
+ pStm: *mut IStream,
+ ) -> HRESULT,
+ fn DisconnectObject(
+ dwReserved: DWORD,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/objidlbase.rs b/vendor/winapi/src/um/objidlbase.rs
new file mode 100644
index 000000000..9984480ea
--- /dev/null
+++ b/vendor/winapi/src/um/objidlbase.rs
@@ -0,0 +1,952 @@
+// 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 ctypes::{c_int, c_void};
+use shared::basetsd::{SIZE_T, ULONG_PTR};
+use shared::guiddef::{CLSID, GUID, IID, REFCLSID, REFGUID, REFIID};
+use shared::minwindef::{BOOL, BYTE, DWORD, FILETIME, ULONG};
+use shared::wtypesbase::{COAUTHINFO, DOUBLE, LPOLESTR, OLECHAR};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HANDLE, HRESULT, LARGE_INTEGER, LONG, LPWSTR, ULARGE_INTEGER};
+STRUCT!{struct COSERVERINFO {
+ dwReserved1: DWORD,
+ pwszName: LPWSTR,
+ pAuthInfo: *mut COAUTHINFO,
+ dwReserved2: DWORD,
+}}
+pub type LPMARSHAL = *mut IMarshal;
+RIDL!{#[uuid(0x00000003, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IMarshal(IMarshalVtbl): IUnknown(IUnknownVtbl) {
+ fn GetUnmarshalClass(
+ riid: REFIID,
+ pv: *mut c_void,
+ dwDestContext: DWORD,
+ pvDestContext: *mut c_void,
+ mshlflags: DWORD,
+ pCid: *mut CLSID,
+ ) -> HRESULT,
+ fn GetMarshalSizeMax(
+ riid: REFIID,
+ pv: *mut c_void,
+ dwDestContext: DWORD,
+ pvDestContext: *mut c_void,
+ mshlflags: DWORD,
+ pSize: *mut DWORD,
+ ) -> HRESULT,
+ fn MarshalInterface(
+ pStm: *mut IStream,
+ riid: REFIID,
+ pv: *mut c_void,
+ dwDestContext: DWORD,
+ pvDestContext: *mut c_void,
+ mshlflags: DWORD,
+ ) -> HRESULT,
+ fn UnmarshalInterface(
+ pStm: *mut IStream,
+ riid: REFIID,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT,
+ fn ReleaseMarshalData(
+ pStm: *mut IStream,
+ ) -> HRESULT,
+ fn DisconnectObject(
+ dwReserved: DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xecc8691b, 0xc1db, 0x4dc0, 0x85, 0x5e, 0x65, 0xf6, 0xc5, 0x51, 0xaf, 0x49)]
+interface INoMarshal(INoMarshalVtbl): IUnknown(IUnknownVtbl) {}}
+RIDL!{#[uuid(0x94ea2b94, 0xe9cc, 0x49e0, 0xc0, 0xff, 0xee, 0x64, 0xca, 0x8f, 0x5b, 0x90)]
+interface IAgileObject(IAgileObjectVtbl): IUnknown(IUnknownVtbl) {}}
+ENUM!{enum ACTIVATIONTYPE {
+ ACTIVATIONTYPE_UNCATEGORIZED = 0,
+ ACTIVATIONTYPE_FROM_MONIKER = 0x1,
+ ACTIVATIONTYPE_FROM_DATA = 0x2,
+ ACTIVATIONTYPE_FROM_STORAGE = 0x4,
+ ACTIVATIONTYPE_FROM_STREAM = 0x8,
+ ACTIVATIONTYPE_FROM_FILE = 0x10,
+}}
+RIDL!{#[uuid(0x00000017, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IActivationFilter(IActivationFilterVtbl): IUnknown(IUnknownVtbl) {
+ fn HandleActivation(
+ dwActivationType: DWORD,
+ rclsid: REFCLSID,
+ pReplacementClsId: *mut CLSID,
+ ) -> HRESULT,
+}}
+pub type LPMARSHAL2 = *mut IMarshal2;
+RIDL!{#[uuid(0x000001cf, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IMarshal2(IMarshal2Vtbl): IMarshal(IMarshalVtbl) {}}
+pub type LPMALLOC = *mut IMalloc;
+RIDL!{#[uuid(0x00000002, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IMalloc(IMallocVtbl): IUnknown(IUnknownVtbl) {
+ fn Alloc(
+ cb: SIZE_T,
+ ) -> *mut c_void,
+ fn Realloc(
+ pv: *mut c_void,
+ cb: SIZE_T,
+ ) -> *mut c_void,
+ fn Free(
+ pv: *mut c_void,
+ ) -> (),
+ fn GetSize(
+ pv: *mut c_void,
+ ) -> SIZE_T,
+ fn DidAlloc(
+ pv: *mut c_void,
+ ) -> c_int,
+ fn HeapMinimize() -> (),
+}}
+pub type LPSTDMARSHALINFO = IStdMarshalInfo;
+RIDL!{#[uuid(0x00000018, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IStdMarshalInfo(IStdMarshalInfoVtbl): IUnknown(IUnknownVtbl) {
+ fn GetClassForHandler(
+ dwDestContext: DWORD,
+ pvDestContext: *mut c_void,
+ pClsid: *mut CLSID,
+ ) -> HRESULT,
+}}
+ENUM!{enum EXTCONN {
+ EXTCONN_STRONG = 0x1,
+ EXTCONN_WEAK = 0x2,
+ EXTCONN_CALLABLE = 0x4,
+}}
+RIDL!{#[uuid(0x00000019, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IExternalConnection(IExternalConnectionVtbl): IUnknown(IUnknownVtbl) {
+ fn AddConnection(
+ extconn: DWORD,
+ reserved: DWORD,
+ ) -> DWORD,
+ fn ReleaseConnection(
+ extconn: DWORD,
+ reserved: DWORD,
+ fLastReleaseCloses: BOOL,
+ ) -> DWORD,
+}}
+pub type LPMULTIQI = *mut IMultiQI;
+STRUCT!{struct MULTI_QI {
+ pIID: *const IID,
+ pItf: *mut IUnknown,
+ hr: HRESULT,
+}}
+RIDL!{#[uuid(0x00000020, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IMultiQI(IMultiQIVtbl): IUnknown(IUnknownVtbl) {
+ fn QueryMultipleInterfaces(
+ cMQIs: ULONG,
+ pMQIs: *mut MULTI_QI,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x000e0020, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface AsyncIMultiQI(AsyncIMultiQIVtbl): IUnknown(IUnknownVtbl) {
+ fn Begin_QueryMultipleInterfaces(
+ cMQIs: ULONG,
+ pMQIs: *mut MULTI_QI,
+ ) -> HRESULT,
+ fn Finish_QueryMultipleInterfaces(
+ pMQIs: *mut MULTI_QI,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000021, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IInternalUnknown(IInternalUnknownVtbl): IUnknown(IUnknownVtbl) {
+ fn QueryInternalInterface(
+ riid: REFIID,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000100, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IEnumUnknown(IEnumUnknownVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ celt: ULONG,
+ rgelt: *mut *mut IUnknown,
+ pceltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ celt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppenum: *mut *mut IEnumUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000101, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IEnumString(IEnumStringVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ celt: ULONG,
+ rgelt: *mut LPOLESTR,
+ pceltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ celt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppenum: *mut *mut IEnumString,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x0c733a30, 0x2a1c, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d)]
+interface ISequentialStream(ISequentialStreamVtbl): IUnknown(IUnknownVtbl) {
+ fn Read(
+ pv: *mut c_void,
+ cb: ULONG,
+ pcbRead: *mut ULONG,
+ ) -> HRESULT,
+ fn Write(
+ pv: *const c_void,
+ cb: ULONG,
+ pcbWritten: *mut ULONG,
+ ) -> HRESULT,
+}}
+STRUCT!{struct STATSTG {
+ pwcsName: LPOLESTR,
+ type_: DWORD,
+ cbSize: ULARGE_INTEGER,
+ mtime: FILETIME,
+ ctime: FILETIME,
+ atime: FILETIME,
+ grfMode: DWORD,
+ grfLocksSupported: DWORD,
+ clsid: CLSID,
+ grfStateBits: DWORD,
+ reserved: DWORD,
+}}
+ENUM!{enum STGTY {
+ STGTY_STORAGE = 1,
+ STGTY_STREAM = 2,
+ STGTY_LOCKBYTES = 3,
+ STGTY_PROPERTY = 4,
+}}
+ENUM!{enum STREAM_SEEK {
+ STREAM_SEEK_SET = 0,
+ STREAM_SEEK_CUR = 1,
+ STREAM_SEEK_END = 2,
+}}
+ENUM!{enum LOCKTYPE {
+ LOCK_WRITE = 1,
+ LOCK_EXCLUSIVE = 2,
+ LOCK_ONLYONCE = 4,
+}}
+pub type LPSTREAM = *mut IStream;
+RIDL!{#[uuid(0x0000000c, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IStream(IStreamVtbl): ISequentialStream(ISequentialStreamVtbl) {
+ fn Seek(
+ dlibMove: LARGE_INTEGER,
+ dwOrigin: DWORD,
+ plibNewPosition: *mut ULARGE_INTEGER,
+ ) -> HRESULT,
+ fn SetSize(
+ libNewSize: ULARGE_INTEGER,
+ ) -> HRESULT,
+ fn CopyTo(
+ pstm: *mut IStream,
+ cb: ULARGE_INTEGER,
+ pcbRead: *mut ULARGE_INTEGER,
+ pcbWritten: *mut ULARGE_INTEGER,
+ ) -> HRESULT,
+ fn Commit(
+ grfCommitFlags: DWORD,
+ ) -> HRESULT,
+ fn Revert() -> HRESULT,
+ fn LockRegion(
+ libOffset: ULARGE_INTEGER,
+ cb: ULARGE_INTEGER,
+ dwLockType: DWORD,
+ ) -> HRESULT,
+ fn UnlockRegion(
+ libOffset: ULARGE_INTEGER,
+ cb: ULARGE_INTEGER,
+ dwLockType: DWORD,
+ ) -> HRESULT,
+ fn Stat(
+ pstatstg: *mut STATSTG,
+ grfStatFlag: DWORD,
+ ) -> HRESULT,
+ fn Clone(
+ ppstm: *mut *mut IStream,
+ ) -> HRESULT,
+}}
+pub type RPCOLEDATAREP = ULONG;
+STRUCT!{struct RPCOLEMESSAGE {
+ reserved1: *mut c_void,
+ dataRepresentation: RPCOLEDATAREP,
+ Buffer: *mut c_void,
+ cbBuffer: ULONG,
+ iMethod: ULONG,
+ reserved2: [*mut c_void; 5],
+ rpcFlags: ULONG,
+}}
+pub type PRPCOLEMESSAGE = *mut RPCOLEMESSAGE;
+RIDL!{#[uuid(0xd5f56b60, 0x593b, 0x101a, 0xb5, 0x69, 0x08, 0x00, 0x2b, 0x2d, 0xbf, 0x7a)]
+interface IRpcChannelBuffer(IRpcChannelBufferVtbl): IUnknown(IUnknownVtbl) {
+ fn GetBuffer(
+ pMessage: *mut RPCOLEMESSAGE,
+ riid: REFIID,
+ ) -> HRESULT,
+ fn SendReceive(
+ pMessage: *mut RPCOLEMESSAGE,
+ pStatus: *mut ULONG,
+ ) -> HRESULT,
+ fn FreeBuffer(
+ pMessage: *mut RPCOLEMESSAGE,
+ ) -> HRESULT,
+ fn GetDestCtx(
+ pdwDestContext: *mut DWORD,
+ ppvDestContext: *mut *mut c_void,
+ ) -> HRESULT,
+ fn IsConnected() -> HRESULT,
+}}
+RIDL!{#[uuid(0x594f31d0, 0x7f19, 0x11d0, 0xb1, 0x94, 0x00, 0xa0, 0xc9, 0x0d, 0xc8, 0xbf)]
+interface IRpcChannelBuffer2(IRpcChannelBuffer2Vtbl): IRpcChannelBuffer(IRpcChannelBufferVtbl) {
+ fn GetProtocolVersion(
+ pdwVersion: *mut DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa5029fb6, 0x3c34, 0x11d1, 0x9c, 0x99, 0x00, 0xc0, 0x4f, 0xb9, 0x98, 0xaa)]
+interface IAsyncRpcChannelBuffer(IAsyncRpcChannelBufferVtbl):
+ IRpcChannelBuffer2(IRpcChannelBuffer2Vtbl) {
+ fn Send(
+ pMsg: *mut RPCOLEMESSAGE,
+ pSync: *mut ISynchronize,
+ pulStatus: *mut ULONG,
+ ) -> HRESULT,
+ fn Receive(
+ pMsg: *mut RPCOLEMESSAGE,
+ pulStatus: *mut ULONG,
+ ) -> HRESULT,
+ fn GetDestCtxEx(
+ pMsg: *mut RPCOLEMESSAGE,
+ pdwDestContext: *mut DWORD,
+ ppvDestContext: *mut *mut c_void,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x25b15600, 0x0115, 0x11d0, 0xbf, 0x0d, 0x00, 0xaa, 0x00, 0xb8, 0xdf, 0xd2)]
+interface IRpcChannelBuffer3(IRpcChannelBuffer3Vtbl): IRpcChannelBuffer2(IRpcChannelBuffer2Vtbl) {
+ fn Send(
+ pMsg: *mut RPCOLEMESSAGE,
+ pulStatus: *mut ULONG,
+ ) -> HRESULT,
+ fn Receive(
+ pMsg: *mut RPCOLEMESSAGE,
+ ulSize: ULONG,
+ pulStatus: *mut ULONG,
+ ) -> HRESULT,
+ fn Cancel(
+ pMsg: *mut RPCOLEMESSAGE,
+ ) -> HRESULT,
+ fn GetCallContext(
+ pMsg: *mut RPCOLEMESSAGE,
+ riid: REFIID,
+ pInterface: *mut *mut c_void,
+ ) -> HRESULT,
+ fn GetDestCtxEx(
+ pMsg: *mut RPCOLEMESSAGE,
+ pdwDestContext: *mut DWORD,
+ ppvDestContext: *mut *mut c_void,
+ ) -> HRESULT,
+ fn GetState(
+ pMsg: *mut RPCOLEMESSAGE,
+ pState: *mut DWORD,
+ ) -> HRESULT,
+ fn RegisterAsync(
+ pMsg: *mut RPCOLEMESSAGE,
+ pAsyncMgr: *mut IAsyncManager,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x58a08519, 0x24c8, 0x4935, 0xb4, 0x82, 0x3f, 0xd8, 0x23, 0x33, 0x3a, 0x4f)]
+interface IRpcSyntaxNegotiate(IRpcSyntaxNegotiateVtbl): IUnknown(IUnknownVtbl) {
+ fn NegotiateSyntax(
+ pMsg: *mut RPCOLEMESSAGE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xd5f56a34, 0x593b, 0x101a, 0xb5, 0x69, 0x08, 0x00, 0x2b, 0x2d, 0xbf, 0x7a)]
+interface IRpcProxyBuffer(IRpcProxyBufferVtbl): IUnknown(IUnknownVtbl) {
+ fn Connect(
+ pRpcChannelBuffer: *mut IRpcChannelBuffer,
+ ) -> HRESULT,
+ fn Disconnect() -> (),
+}}
+RIDL!{#[uuid(0xd5f56afc, 0x593b, 0x101a, 0xb5, 0x69, 0x08, 0x00, 0x2b, 0x2d, 0xbf, 0x7a)]
+interface IRpcStubBuffer(IRpcStubBufferVtbl): IUnknown(IUnknownVtbl) {
+ fn Connect(
+ pUnkServer: *mut IUnknown,
+ ) -> HRESULT,
+ fn Disconnect() -> (),
+ fn Invoke(
+ _prpcmsg: *mut RPCOLEMESSAGE,
+ _pRpcChannelBuffer: *mut IRpcChannelBuffer,
+ ) -> HRESULT,
+ fn IsIIDSupported(
+ riid: REFIID,
+ ) -> *mut IRpcStubBuffer,
+ fn CountRefs() -> ULONG,
+ fn DebugServerQueryInterface(
+ ppv: *mut *mut c_void,
+ ) -> HRESULT,
+ fn DebugServerRelease(
+ pv: *mut c_void,
+ ) -> (),
+}}
+RIDL!{#[uuid(0xd5f569d0, 0x593b, 0x101a, 0xb5, 0x69, 0x08, 0x00, 0x2b, 0x2d, 0xbf, 0x7a)]
+interface IPSFactoryBuffer(IPSFactoryBufferVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateProxy(
+ pUnkOuter: *mut IUnknown,
+ riid: REFIID,
+ ppProxy: *mut *mut IRpcProxyBuffer,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT,
+ fn CreateStub(
+ riid: REFIID,
+ pUnkServer: *mut *mut IUnknown,
+ ppStub: *mut *mut IRpcStubBuffer,
+ ) -> HRESULT,
+}}
+STRUCT!{struct SChannelHookCallInfo {
+ iid: IID,
+ cbSize: DWORD,
+ uCausality: GUID,
+ dwServerPid: DWORD,
+ iMethod: DWORD,
+ pObject: *mut c_void,
+}}
+RIDL!{#[uuid(0x1008c4a0, 0x7613, 0x11cf, 0x9a, 0xf1, 0x00, 0x20, 0xaf, 0x6e, 0x72, 0xf4)]
+interface IChannelHook(IChannelHookVtbl): IUnknown(IUnknownVtbl) {
+ fn ClientGetSize(
+ uExtent: REFGUID,
+ riid: REFIID,
+ pDataSize: *mut ULONG,
+ ) -> (),
+ fn ClientFillBuffer(
+ uExtent: REFGUID,
+ riid: REFIID,
+ pDataSize: *mut ULONG,
+ pDataBuffer: *mut c_void,
+ ) -> (),
+ fn ClientNotify(
+ uExtent: REFGUID,
+ riid: REFIID,
+ cbDataSize: ULONG,
+ pDataBuffer: *mut c_void,
+ lDataRep: DWORD,
+ hrFault: HRESULT,
+ ) -> (),
+ fn ServerNotify(
+ uExtent: REFGUID,
+ riid: REFIID,
+ cbDataSize: ULONG,
+ pDataBuffer: *mut c_void,
+ lDataRep: DWORD,
+ ) -> (),
+ fn ServerGetSize(
+ uExtent: REFGUID,
+ riid: REFIID,
+ hrFault: HRESULT,
+ pDataSize: *mut ULONG,
+ ) -> (),
+ fn ServerFillBuffer(
+ uExtent: REFGUID,
+ riid: REFIID,
+ pDataSize: *mut ULONG,
+ pDataBuffer: *mut c_void,
+ hrFault: HRESULT,
+ ) -> (),
+}}
+STRUCT!{struct SOLE_AUTHENTICATION_SERVICE {
+ dwAuthnSvc: DWORD,
+ dwAuthzSvc: DWORD,
+ pPrincipalName: *mut OLECHAR,
+ hr: HRESULT,
+}}
+pub type PSOLE_AUTHENTICATION_SERVICE = *mut SOLE_AUTHENTICATION_SERVICE;
+ENUM!{enum EOLE_AUTHENTICATION_CAPABILITIES {
+ EOAC_NONE = 0,
+ EOAC_MUTUAL_AUTH = 0x1,
+ EOAC_STATIC_CLOAKING = 0x20,
+ EOAC_DYNAMIC_CLOAKING = 0x40,
+ EOAC_ANY_AUTHORITY = 0x80,
+ EOAC_MAKE_FULLSIC = 0x100,
+ EOAC_DEFAULT = 0x800,
+ EOAC_SECURE_REFS = 0x2,
+ EOAC_ACCESS_CONTROL = 0x4,
+ EOAC_APPID = 0x8,
+ EOAC_DYNAMIC = 0x10,
+ EOAC_REQUIRE_FULLSIC = 0x200,
+ EOAC_AUTO_IMPERSONATE = 0x400,
+ EOAC_DISABLE_AAA = 0x1000,
+ EOAC_NO_CUSTOM_MARSHAL = 0x2000,
+ EOAC_RESERVED1 = 0x4000,
+}}
+pub const COLE_DEFAULT_PRINCIPAL: *mut OLECHAR = -1isize as *mut OLECHAR;
+pub const COLE_DEFAULT_AUTHINFO: *mut c_void = -1isize as *mut c_void;
+STRUCT!{struct SOLE_AUTHENTICATION_INFO {
+ dwAuthnSvc: DWORD,
+ dwAuthzSvc: DWORD,
+ pAuthInfo: *mut c_void,
+}}
+pub type PSOLE_AUTHENTICATION_INFO = *mut SOLE_AUTHENTICATION_INFO;
+STRUCT!{struct SOLE_AUTHENTICATION_LIST {
+ cAuthInfo: DWORD,
+ aAuthInfo: *mut SOLE_AUTHENTICATION_INFO,
+}}
+pub type PSOLE_AUTHENTICATION_LIST = *mut SOLE_AUTHENTICATION_LIST;
+RIDL!{#[uuid(0x0000013d, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IClientSecurity(IClientSecurityVtbl): IUnknown(IUnknownVtbl) {
+ fn QueryBlanket(
+ pProxy: *mut IUnknown,
+ pAuthnSvc: *mut DWORD,
+ pAuthzSvc: *mut DWORD,
+ pServerPrincName: *mut *mut OLECHAR,
+ pAuthnLevel: *mut DWORD,
+ pImpLevel: *mut DWORD,
+ pAuthInfo: *mut *mut c_void,
+ pCapabilities: *mut DWORD,
+ ) -> HRESULT,
+ fn SetBlanket(
+ pProxy: *mut IUnknown,
+ dwAuthnSvc: DWORD,
+ dwAuthzSvc: DWORD,
+ pServerPrincName: *mut OLECHAR,
+ dwAuthnLevel: DWORD,
+ dwImpLevel: DWORD,
+ pAuthInfo: *mut c_void,
+ dwCapabilities: DWORD,
+ ) -> HRESULT,
+ fn CopyProxy(
+ pProxy: *mut IUnknown,
+ ppCopy: *mut *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x0000013e, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IServerSecurity(IServerSecurityVtbl): IUnknown(IUnknownVtbl) {
+ fn QueryBlanket(
+ pAuthnSvc: *mut DWORD,
+ pAuthzSvc: *mut DWORD,
+ pServerPrincName: *mut *mut OLECHAR,
+ pAuthnLevel: *mut DWORD,
+ pImpLevel: *mut DWORD,
+ pPrivs: *mut *mut c_void,
+ pCapabilities: *mut DWORD,
+ ) -> HRESULT,
+ fn ImpersonateClient() -> HRESULT,
+ fn RevertToSelf() -> HRESULT,
+ fn IsImpersonating() -> BOOL,
+}}
+ENUM!{enum RPCOPT_PROPERTIES {
+ COMBND_RPCTIMEOUT = 0x1,
+ COMBND_SERVER_LOCALITY = 0x2,
+ COMBND_RESERVED1 = 0x4,
+ COMBND_RESERVED2 = 0x5,
+ COMBND_RESERVED3 = 0x8,
+ COMBND_RESERVED4 = 0x10,
+}}
+ENUM!{enum RPCOPT_SERVER_LOCALITY_VALUES {
+ SERVER_LOCALITY_PROCESS_LOCAL = 0,
+ SERVER_LOCALITY_MACHINE_LOCAL = 1,
+ SERVER_LOCALITY_REMOTE = 2,
+}}
+RIDL!{#[uuid(0x00000144, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IRpcOptions(IRpcOptionsVtbl): IUnknown(IUnknownVtbl) {
+ fn Set(
+ pPrx: *mut IUnknown,
+ dwProperty: RPCOPT_PROPERTIES,
+ dwValue: ULONG_PTR,
+ ) -> HRESULT,
+ fn Query(
+ pPrx: *mut IUnknown,
+ dwProperty: RPCOPT_PROPERTIES,
+ pdwValue: *mut ULONG_PTR,
+ ) -> HRESULT,
+}}
+ENUM!{enum GLOBALOPT_PROPERTIES {
+ COMGLB_EXCEPTION_HANDLING = 1,
+ COMGLB_APPID = 2,
+ COMGLB_RPC_THREADPOOL_SETTING = 3,
+ COMGLB_RO_SETTINGS = 4,
+ COMGLB_UNMARSHALING_POLICY = 5,
+ COMGLB_PROPERTIES_RESERVED1 = 6,
+}}
+ENUM!{enum GLOBALOPT_EH_VALUES {
+ COMGLB_EXCEPTION_HANDLE = 0,
+ COMGLB_EXCEPTION_DONOT_HANDLE_FATAL = 1,
+ COMGLB_EXCEPTION_DONOT_HANDLE = COMGLB_EXCEPTION_DONOT_HANDLE_FATAL,
+ COMGLB_EXCEPTION_DONOT_HANDLE_ANY = 2,
+}}
+ENUM!{enum GLOBALOPT_RPCTP_VALUES {
+ COMGLB_RPC_THREADPOOL_SETTING_DEFAULT_POOL = 0,
+ COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL = 1,
+}}
+ENUM!{enum GLOBALOPT_RO_FLAGS {
+ COMGLB_STA_MODALLOOP_REMOVE_TOUCH_MESSAGES = 0x1,
+ COMGLB_STA_MODALLOOP_SHARED_QUEUE_REMOVE_INPUT_MESSAGES = 0x2,
+ COMGLB_STA_MODALLOOP_SHARED_QUEUE_DONOT_REMOVE_INPUT_MESSAGES = 0x4,
+ COMGLB_FAST_RUNDOWN = 0x8,
+ COMGLB_RESERVED1 = 0x10,
+ COMGLB_RESERVED2 = 0x20,
+ COMGLB_RESERVED3 = 0x40,
+ COMGLB_STA_MODALLOOP_SHARED_QUEUE_REORDER_POINTER_MESSAGES = 0x80,
+ COMGLB_RESERVED4 = 0x100,
+ COMGLB_RESERVED5 = 0x200,
+ COMGLB_RESERVED6 = 0x400,
+}}
+ENUM!{enum GLOBALOPT_UNMARSHALING_POLICY_VALUES {
+ COMGLB_UNMARSHALING_POLICY_NORMAL = 0,
+ COMGLB_UNMARSHALING_POLICY_STRONG = 1,
+ COMGLB_UNMARSHALING_POLICY_HYBRID = 2,
+}}
+RIDL!{#[uuid(0x0000015b, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IGlobalOptions(IGlobalOptionsVtbl): IUnknown(IUnknownVtbl) {
+ fn Set(
+ dwProperty: GLOBALOPT_PROPERTIES,
+ dwValue: ULONG_PTR,
+ ) -> HRESULT,
+ fn Query(
+ dwProperty: GLOBALOPT_PROPERTIES,
+ pdwValue: *mut ULONG_PTR,
+ ) -> HRESULT,
+}}
+pub type LPSURROGATE = *mut ISurrogate;
+RIDL!{#[uuid(0x00000022, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface ISurrogate(ISurrogateVtbl): IUnknown(IUnknownVtbl) {
+ fn LoadDllServer(
+ Clsid: REFCLSID,
+ ) -> HRESULT,
+ fn FreeSurrogate() -> HRESULT,
+}}
+pub type LPGLOBALINTERFACETABLE = *mut IGlobalInterfaceTable;
+RIDL!{#[uuid(0x00000146, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IGlobalInterfaceTable(IGlobalInterfaceTableVtbl): IUnknown(IUnknownVtbl) {
+ fn RegisterInterfaceInGlobal(
+ pUnk: *mut IUnknown,
+ riid: REFIID,
+ pdwCookie: *mut DWORD,
+ ) -> HRESULT,
+ fn RevokeInterfaceFromGlobal(
+ dwCookie: DWORD,
+ ) -> HRESULT,
+ fn GetInterfaceFromGlobal(
+ dwCookie: DWORD,
+ riid: REFIID,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000030, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface ISynchronize(ISynchronizeVtbl): IUnknown(IUnknownVtbl) {
+ fn Wait(
+ dwFlags: DWORD,
+ dwMilliseconds: DWORD,
+ ) -> HRESULT,
+ fn Signal() -> HRESULT,
+ fn Reset() -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000031, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface ISynchronizeHandle(ISynchronizeHandleVtbl): IUnknown(IUnknownVtbl) {
+ fn GetHandle(
+ ph: *mut HANDLE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000032, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface ISynchronizeEvent(ISynchronizeEventVtbl): ISynchronizeHandle(ISynchronizeHandleVtbl) {
+ fn SetEventHandle(
+ ph: *mut HANDLE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000033, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface ISynchronizeContainer(ISynchronizeContainerVtbl): IUnknown(IUnknownVtbl) {
+ fn AddSynchronize(
+ pSync: *mut ISynchronize,
+ ) -> HRESULT,
+ fn WaitMultiple(
+ dwFlags: DWORD,
+ dwTimeOut: DWORD,
+ ppSync: *mut *mut ISynchronize,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000025, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface ISynchronizeMutex(ISynchronizeMutexVtbl): ISynchronize(ISynchronizeVtbl) {
+ fn ReleaseMutex() -> HRESULT,
+}}
+pub type LPCANCELMETHODCALLS = *mut ICancelMethodCalls;
+RIDL!{#[uuid(0x00000029, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface ICancelMethodCalls(ICancelMethodCallsVtbl): IUnknown(IUnknownVtbl) {
+ fn Cancel(
+ ulSeconds: ULONG,
+ ) -> HRESULT,
+ fn TestCancel() -> HRESULT,
+}}
+ENUM!{enum DCOM_CALL_STATE {
+ DCOM_NONE = 0,
+ DCOM_CALL_COMPLETE = 0x1,
+ DCOM_CALL_CANCELED = 0x2,
+}}
+RIDL!{#[uuid(0x0000002a, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IAsyncManager(IAsyncManagerVtbl): IUnknown(IUnknownVtbl) {
+ fn CompleteCall(
+ Result: HRESULT,
+ ) -> HRESULT,
+ fn GetCallContext(
+ riid: REFIID,
+ pInterface: *mut *mut c_void,
+ ) -> HRESULT,
+ fn GetState(
+ pulStateFlags: *mut ULONG,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x1c733a30, 0x2a1c, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d)]
+interface ICallFactory(ICallFactoryVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateCall(
+ riid: REFIID,
+ pCtrlUnk: *mut IUnknown,
+ riid2: REFIID,
+ ppv: *mut *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000149, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IRpcHelper(IRpcHelperVtbl): IUnknown(IUnknownVtbl) {
+ fn GetDCOMProtocolVersion(
+ pComVersion: *mut DWORD,
+ ) -> HRESULT,
+ fn GetIIDFromOBJREF(
+ pObjRef: *mut c_void,
+ piid: *mut *mut IID,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xeb0cb9e8, 0x7996, 0x11d2, 0x87, 0x2e, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x59)]
+interface IReleaseMarshalBuffers(IReleaseMarshalBuffersVtbl): IUnknown(IUnknownVtbl) {
+ fn ReleaseMarshalBuffer(
+ pMsg: *mut RPCOLEMESSAGE,
+ dwFlags: DWORD,
+ pChnl: *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x0000002b, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IWaitMultiple(IWaitMultipleVtbl): IUnknown(IUnknownVtbl) {
+ fn WaitMultiple(
+ timeout: DWORD,
+ pSync: *mut *mut ISynchronize,
+ ) -> HRESULT,
+ fn AddSynchronize(
+ pSync: *mut ISynchronize,
+ ) -> HRESULT,
+}}
+pub type LPADDRTRACKINGCONTROL = *mut IAddrTrackingControl;
+RIDL!{#[uuid(0x00000147, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IAddrTrackingControl(IAddrTrackingControlVtbl): IUnknown(IUnknownVtbl) {
+ fn EnableCOMDynamicAddrTracking() -> HRESULT,
+ fn DisableCOMDynamicAddrTracking() -> HRESULT,
+}}
+pub type LPADDREXCLUSIONCONTROL = *mut IAddrExclusionControl;
+RIDL!{#[uuid(0x00000148, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IAddrExclusionControl(IAddrExclusionControlVtbl): IUnknown(IUnknownVtbl) {
+ fn GetCurrentAddrExclusionList(
+ riid: REFIID,
+ ppEnumerator: *mut *mut c_void,
+ ) -> HRESULT,
+ fn UpdateAddrExclusionList(
+ pEnumerator: *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xdb2f3aca, 0x2f86, 0x11d1, 0x8e, 0x04, 0x00, 0xc0, 0x4f, 0xb9, 0x98, 0x9a)]
+interface IPipeByte(IPipeByteVtbl): IUnknown(IUnknownVtbl) {
+ fn Pull(
+ buf: *mut BYTE,
+ cRequest: ULONG,
+ pcReturned: *mut ULONG,
+ ) -> HRESULT,
+ fn Push(
+ buf: *mut BYTE,
+ cSent: ULONG,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xdb2f3acb, 0x2f86, 0x11d1, 0x8e, 0x04, 0x00, 0xc0, 0x4f, 0xb9, 0x98, 0x9a)]
+interface AsyncIPipeByte(AsyncIPipeByteVtbl): IUnknown(IUnknownVtbl) {
+ fn Begin_Pull(
+ cRequest: ULONG,
+ ) -> HRESULT,
+ fn Finish_Pull(
+ buf: *mut BYTE,
+ pcReturned: *mut ULONG,
+ ) -> HRESULT,
+ fn Begin_Push(
+ buf: *mut BYTE,
+ cSent: ULONG,
+ ) -> HRESULT,
+ fn Finish_Push() -> HRESULT,
+}}
+RIDL!{#[uuid(0xdb2f3acc, 0x2f86, 0x11d1, 0x8e, 0x04, 0x00, 0xc0, 0x4f, 0xb9, 0x98, 0x9a)]
+interface IPipeLong(IPipeLongVtbl): IUnknown(IUnknownVtbl) {
+ fn Pull(
+ buf: *mut LONG,
+ cRequest: ULONG,
+ pcReturned: *mut ULONG,
+ ) -> HRESULT,
+ fn Push(
+ buf: *mut LONG,
+ cSent: ULONG,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xdb2f3acd, 0x2f86, 0x11d1, 0x8e, 0x04, 0x00, 0xc0, 0x4f, 0xb9, 0x98, 0x9a)]
+interface AsyncIPipeLong(AsyncIPipeLongVtbl): IUnknown(IUnknownVtbl) {
+ fn Begin_Pull(
+ cRequest: ULONG,
+ ) -> HRESULT,
+ fn Finish_Pull(
+ buf: *mut LONG,
+ pcReturned: *mut ULONG,
+ ) -> HRESULT,
+ fn Begin_Push(
+ buf: *mut LONG,
+ cSent: ULONG,
+ ) -> HRESULT,
+ fn Finish_Push() -> HRESULT,
+}}
+RIDL!{#[uuid(0xdb2f3ace, 0x2f86, 0x11d1, 0x8e, 0x04, 0x00, 0xc0, 0x4f, 0xb9, 0x98, 0x9a)]
+interface IPipeDouble(IPipeDoubleVtbl): IUnknown(IUnknownVtbl) {
+ fn Pull(
+ buf: *mut DOUBLE,
+ cRequest: ULONG,
+ pcReturned: *mut ULONG,
+ ) -> HRESULT,
+ fn Push(
+ buf: *mut DOUBLE,
+ cSent: ULONG,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xdb2f3acf, 0x2f86, 0x11d1, 0x8e, 0x04, 0x00, 0xc0, 0x4f, 0xb9, 0x98, 0x9a)]
+interface AsyncIPipeDouble(AsyncIPipeDoubleVtbl): IUnknown(IUnknownVtbl) {
+ fn Begin_Pull(
+ cRequest: ULONG,
+ ) -> HRESULT,
+ fn Finish_Pull(
+ buf: *mut DOUBLE,
+ pcReturned: *mut ULONG,
+ ) -> HRESULT,
+ fn Begin_Push(
+ buf: *mut DOUBLE,
+ cSent: ULONG,
+ ) -> HRESULT,
+ fn Finish_Push() -> HRESULT,
+}}
+pub type CPFLAGS = DWORD;
+STRUCT!{struct ContextProperty {
+ policyId: GUID,
+ flags: CPFLAGS,
+ pUnk: *mut IUnknown,
+}}
+pub type LPENUMCONTEXTPROPS = *mut IEnumContextProps;
+RIDL!{#[uuid(0x000001c1, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IEnumContextProps(IEnumContextPropsVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ celt: ULONG,
+ pContextProperties: *mut ContextProperty,
+ pceltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ celt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppEnumContextProps: *mut *mut IEnumContextProps,
+ ) -> HRESULT,
+ fn Count(
+ pcelt: *mut ULONG,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x000001c0, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IContext(IContextVtbl): IUnknown(IUnknownVtbl) {
+ fn SetProperty(
+ rpolicyId: REFGUID,
+ flags: CPFLAGS,
+ pUnk: *mut IUnknown,
+ ) -> HRESULT,
+ fn RemoveProperty(
+ rPolicyId: REFGUID,
+ ) -> HRESULT,
+ fn GetProperty(
+ policyId: REFGUID,
+ pFlags: *mut CPFLAGS,
+ ppUnk: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn EnumContextProps(
+ ppEnumContextProps: *mut *mut IEnumContextProps,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x000001c6, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IObjContext(IObjContextVtbl): IContext(IContextVtbl) {
+ fn Reserved1() -> (),
+ fn Reserved2() -> (),
+ fn Reserved3() -> (),
+ fn Reserved4() -> (),
+ fn Reserved5() -> (),
+ fn Reserved6() -> (),
+ fn Reserved7() -> (),
+}}
+ENUM!{enum APTTYPEQUALIFIER {
+ APTTYPEQUALIFIER_NONE = 0,
+ APTTYPEQUALIFIER_IMPLICIT_MTA = 1,
+ APTTYPEQUALIFIER_NA_ON_MTA = 2,
+ APTTYPEQUALIFIER_NA_ON_STA = 3,
+ APTTYPEQUALIFIER_NA_ON_IMPLICIT_MTA = 4,
+ APTTYPEQUALIFIER_NA_ON_MAINSTA = 5,
+ APTTYPEQUALIFIER_APPLICATION_STA= 6,
+}}
+ENUM!{enum APTTYPE {
+ APTTYPE_CURRENT = -1i32 as u32,
+ APTTYPE_STA = 0,
+ APTTYPE_MTA = 1,
+ APTTYPE_NA = 2,
+ APTTYPE_MAINSTA = 3,
+}}
+ENUM!{enum THDTYPE {
+ THDTYPE_BLOCKMESSAGES = 0,
+ THDTYPE_PROCESSMESSAGES = 1,
+}}
+pub type APARTMENTID = DWORD;
+RIDL!{#[uuid(0x000001ce, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IComThreadingInfo(IComThreadingInfoVtbl): IUnknown(IUnknownVtbl) {
+ fn GetCurrentApartmentType(
+ pAptType: *mut APTTYPE,
+ ) -> HRESULT,
+ fn GetCurrentThreadType(
+ pThreadType: *mut THDTYPE,
+ ) -> HRESULT,
+ fn GetCurrentLogicalThreadId(
+ pguidLogicalThreadId: *mut GUID,
+ ) -> HRESULT,
+ fn SetCurrentLogicalThreadId(
+ rguid: REFGUID,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x72380d55, 0x8d2b, 0x43a3, 0x85, 0x13, 0x2b, 0x6e, 0xf3, 0x14, 0x34, 0xe9)]
+interface IProcessInitControl(IProcessInitControlVtbl): IUnknown(IUnknownVtbl) {
+ fn ResetInitializerTimeout(
+ dwSecondsRemaining: DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000040, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IFastRundown(IFastRundownVtbl): IUnknown(IUnknownVtbl) {}}
+ENUM!{enum CO_MARSHALING_CONTEXT_ATTRIBUTES {
+ CO_MARSHALING_SOURCE_IS_APP_CONTAINER = 0,
+ CO_MARSHALING_CONTEXT_ATTRIBUTE_RESERVED_1 = 0x80000000,
+ CO_MARSHALING_CONTEXT_ATTRIBUTE_RESERVED_2 = 0x80000001,
+ CO_MARSHALING_CONTEXT_ATTRIBUTE_RESERVED_3 = 0x80000002,
+ CO_MARSHALING_CONTEXT_ATTRIBUTE_RESERVED_4 = 0x80000003,
+ CO_MARSHALING_CONTEXT_ATTRIBUTE_RESERVED_5 = 0x80000004,
+ CO_MARSHALING_CONTEXT_ATTRIBUTE_RESERVED_6 = 0x80000005,
+ CO_MARSHALING_CONTEXT_ATTRIBUTE_RESERVED_7 = 0x80000006,
+ CO_MARSHALING_CONTEXT_ATTRIBUTE_RESERVED_8 = 0x80000007,
+ CO_MARSHALING_CONTEXT_ATTRIBUTE_RESERVED_9 = 0x80000008,
+}}
+RIDL!{#[uuid(0xd8f2f5e6, 0x6102, 0x4863, 0x9f, 0x26, 0x38, 0x9a, 0x46, 0x76, 0xef, 0xde)]
+interface IMarshalingStream(IMarshalingStreamVtbl): IStream(IStreamVtbl) {
+ fn GetMarshalingContextAttribute(
+ attribute: CO_MARSHALING_CONTEXT_ATTRIBUTES,
+ pAttributeValue: *mut ULONG_PTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xc03f6a43, 0x65a4, 0x9818, 0x98, 0x7e, 0xe0, 0xb8, 0x10, 0xd2, 0xa6, 0xf2)]
+interface IAgileReference(IAgileReferenceVtbl): IUnknown(IUnknownVtbl) {
+ fn Resolve(
+ riid: REFIID,
+ ppvObjectReference: *mut *mut c_void,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/ocidl.rs b/vendor/winapi/src/um/ocidl.rs
new file mode 100644
index 000000000..07ec0d4ba
--- /dev/null
+++ b/vendor/winapi/src/um/ocidl.rs
@@ -0,0 +1,68 @@
+// 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.
+// TODO:It is a minimal implementation.
+use shared::guiddef::CLSID;
+use shared::minwindef::{DWORD, ULONG};
+use shared::ntdef::HRESULT;
+use shared::wtypes::{CLIPFORMAT, VARTYPE};
+use shared::wtypesbase::{LPCOLESTR, LPOLESTR};
+use um::oaidl::{IErrorLog, VARIANT};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+ENUM!{enum READYSTATE {
+ READYSTATE_UNINITIALIZED = 0,
+ READYSTATE_LOADING = 1,
+ READYSTATE_LOADED = 2,
+ READYSTATE_INTERACTIVE = 3,
+ READYSTATE_COMPLETE = 4,
+}}
+ENUM!{enum PROPBAG2_TYPE {
+ PROPBAG2_TYPE_UNDEFINED = 0,
+ PROPBAG2_TYPE_DATA = 1,
+ PROPBAG2_TYPE_URL = 2,
+ PROPBAG2_TYPE_OBJECT = 3,
+ PROPBAG2_TYPE_STREAM = 4,
+ PROPBAG2_TYPE_STORAGE = 5,
+ PROPBAG2_TYPE_MONIKER = 6,
+}}
+STRUCT!{struct PROPBAG2 {
+ dwType: DWORD,
+ vt: VARTYPE,
+ cfType: CLIPFORMAT,
+ dwHint: DWORD,
+ pstrName: LPOLESTR,
+ clsid: CLSID,
+}}
+RIDL!{#[uuid(0x22f55882, 0x280b, 0x11d0, 0xa8, 0xa9, 0x00, 0xa0, 0xc9, 0x0c, 0x20, 0x04)]
+interface IPropertyBag2(IPropertyBag2Vtbl): IUnknown(IUnknownVtbl) {
+ fn Read(
+ cProperties: ULONG,
+ pPropBag: *const PROPBAG2,
+ pErrLog: *const IErrorLog,
+ pvarValue: *mut VARIANT,
+ phrError: *mut HRESULT,
+ ) -> HRESULT,
+ fn Write(
+ cProperties: ULONG,
+ pPropBag: *const PROPBAG2,
+ pvarValue: *const VARIANT,
+ ) -> HRESULT,
+ fn CountProperties(
+ pcProperties: *mut ULONG,
+ ) -> HRESULT,
+ fn GetPropertyInfo(
+ iProperty: ULONG,
+ cProperties: ULONG,
+ pPropBag: *mut PROPBAG2,
+ pcProperties: *mut ULONG,
+ ) -> HRESULT,
+ fn LoadObject(
+ pstrName: LPCOLESTR,
+ dwHint: DWORD,
+ pUnkObject: *const IUnknown,
+ pErrLog: *const IErrorLog,
+ ) -> HRESULT,
+}}
+pub type LPPROPERTYBAG2 = *mut IPropertyBag2;
diff --git a/vendor/winapi/src/um/ole2.rs b/vendor/winapi/src/um/ole2.rs
new file mode 100644
index 000000000..66c168964
--- /dev/null
+++ b/vendor/winapi/src/um/ole2.rs
@@ -0,0 +1,21 @@
+// 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::minwindef::LPVOID;
+use shared::windef::HWND;
+use um::oleidl::LPDROPTARGET;
+use um::winnt::HRESULT;
+extern "system" {
+ pub fn OleInitialize(
+ pvReserved: LPVOID,
+ ) -> HRESULT;
+ pub fn RegisterDragDrop(
+ hwnd: HWND,
+ pDropTarget: LPDROPTARGET,
+ ) -> HRESULT;
+ pub fn RevokeDragDrop(
+ hwnd: HWND,
+ ) -> HRESULT;
+}
diff --git a/vendor/winapi/src/um/oleauto.rs b/vendor/winapi/src/um/oleauto.rs
new file mode 100644
index 000000000..194ef0598
--- /dev/null
+++ b/vendor/winapi/src/um/oleauto.rs
@@ -0,0 +1,849 @@
+// 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 OleAuto.h
+use ctypes::{c_double, c_float, c_int, c_uint, c_void};
+use shared::basetsd::{LONG64, ULONG64};
+use shared::minwindef::{BYTE, DWORD, FLOAT, UINT, ULONG, USHORT, WORD};
+use shared::wtypes::{BSTR, DATE, DECIMAL, LPBSTR, LPDECIMAL, VARTYPE};
+use shared::wtypesbase::{DOUBLE, LPCOLESTR, LPOLESTR, OLECHAR};
+use um::minwinbase::LPSYSTEMTIME;
+use um::oaidl::{
+ DISPID_UNKNOWN, ICreateErrorInfo, IErrorInfo, ITypeLib, SAFEARRAY, VARIANT, VARIANTARG
+};
+use um::winnt::{CHAR, HRESULT, INT, LCID, LONG, LPCSTR, SHORT};
+extern "system" {
+ pub fn SysAllocString(
+ psz: *const OLECHAR,
+ ) -> BSTR;
+ pub fn SysReAllocString(
+ pbstr: *mut BSTR,
+ psz: *const OLECHAR,
+ ) -> INT;
+ pub fn SysAllocStringLen(
+ strIn: *const OLECHAR,
+ ui: UINT,
+ ) -> BSTR;
+ pub fn SysReAllocStringLen(
+ pbstr: *mut BSTR,
+ psz: *const OLECHAR,
+ len: c_uint,
+ ) -> INT;
+ pub fn SysFreeString(
+ bstrString: BSTR,
+ );
+ pub fn SysStringLen(
+ pbstr: BSTR,
+ ) -> UINT;
+ pub fn SysStringByteLen(
+ bstr: BSTR,
+ ) -> UINT;
+ pub fn SysAllocStringByteLen(
+ psz: LPCSTR,
+ len: UINT,
+ ) -> BSTR;
+ pub fn DosDateTimeToVariantTime(
+ wDosDate: USHORT,
+ wDosTime: USHORT,
+ pvtime: *mut DOUBLE,
+ ) -> INT;
+ pub fn VariantTimeToDosDateTime(
+ vtime: DOUBLE,
+ pwDosDate: *mut USHORT,
+ pwDosTime: *mut USHORT,
+ ) -> INT;
+ pub fn SystemTimeToVariantTime(
+ lpSystemTime: LPSYSTEMTIME,
+ pvtime: *mut DOUBLE,
+ ) -> INT;
+ pub fn VariantTimeToSystemTime(
+ vtime: DOUBLE,
+ lpSystemTime: LPSYSTEMTIME,
+ ) -> INT;
+ pub fn SafeArrayAccessData(
+ psa: *mut SAFEARRAY,
+ ppvData: *mut *mut c_void,
+ ) -> HRESULT;
+ pub fn SafeArrayUnaccessData(
+ psa: *mut SAFEARRAY,
+ ) -> HRESULT;
+ pub fn SafeArrayCreateVector(
+ vt: VARTYPE,
+ lLbound: LONG,
+ cElements: ULONG,
+ ) -> *mut SAFEARRAY;
+ pub fn SafeArrayGetLBound(
+ psa: *mut SAFEARRAY,
+ nDim: UINT,
+ plLbound: *mut LONG
+ ) -> HRESULT;
+ pub fn SafeArrayGetUBound(
+ psa: *mut SAFEARRAY,
+ nDim: UINT,
+ plUbound: *mut LONG
+ ) -> HRESULT;
+ pub fn SafeArrayDestroy(
+ psa: *mut SAFEARRAY
+ ) -> HRESULT;
+ pub fn VariantInit(
+ pvarg: *mut VARIANTARG,
+ );
+ pub fn VariantClear(
+ pvarg: *mut VARIANTARG,
+ ) -> HRESULT;
+ pub fn VariantCopy(
+ pvargDest: *mut VARIANTARG,
+ pvargSrc: *const VARIANTARG,
+ ) -> HRESULT;
+ pub fn VariantCopyInd(
+ pvarDest: *mut VARIANT,
+ pvargSrc: *const VARIANTARG,
+ ) -> HRESULT;
+ pub fn VariantChangeType(
+ pvargDest: *mut VARIANTARG,
+ pvarSrc: *const VARIANTARG,
+ wFlags: USHORT,
+ vt: VARTYPE,
+ ) -> HRESULT;
+ pub fn VariantChangeTypeEx(
+ pvargDest: *mut VARIANTARG,
+ pvarSrc: *const VARIANTARG,
+ lcid: LCID,
+ wFlags: USHORT,
+ vt: VARTYPE,
+ ) -> HRESULT;
+ pub fn VarUI1FromI2(
+ sIn: SHORT,
+ pbOut: *mut BYTE,
+ );
+ pub fn VarUI1FromI4(
+ lIn: LONG,
+ pbOut: *mut BYTE,
+ );
+ pub fn VarUI1FromI8(
+ i64In: LONG64,
+ pbOut: *mut BYTE,
+ );
+ pub fn VarUI1FromR4(
+ fltIn: FLOAT,
+ pbOut: *mut BYTE,
+ );
+ pub fn VarUI1FromR8(
+ dblIn: DOUBLE,
+ pbOut: *mut BYTE,
+ );
+ pub fn VarUI1FromDate(
+ dateIn: DATE,
+ pbOut: *mut BYTE,
+ );
+ pub fn VarUI1FromStr(
+ strIn: LPCOLESTR,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pbOut: *mut BYTE,
+ );
+ pub fn VarUI1FromI1(
+ cIn: CHAR,
+ pbOut: *mut BYTE,
+ );
+ pub fn VarUI1FromUI2(
+ uiIn: USHORT,
+ pbOut: *mut BYTE,
+ );
+ pub fn VarUI1FromUI4(
+ ulIn: ULONG,
+ pbOut: *mut BYTE,
+ );
+ pub fn VarUI1FromUI8(
+ ui64In: ULONG64,
+ pbOut: *mut BYTE,
+ );
+ pub fn VarUI1FromDec(
+ pdecIn: *const DECIMAL,
+ pbOut: *mut BYTE,
+ );
+ pub fn VarI2FromUI1(
+ bIn: BYTE,
+ psOut: *mut SHORT,
+ );
+ pub fn VarI2FromI4(
+ lIn: LONG,
+ psOut: *mut SHORT,
+ );
+ pub fn VarI2FromI8(
+ i64In: LONG64,
+ psOut: *mut SHORT,
+ );
+ pub fn VarI2FromR4(
+ fltIn: FLOAT,
+ psOut: *mut SHORT,
+ );
+ pub fn VarI2FromR8(
+ dblIn: DOUBLE,
+ psOut: *mut SHORT,
+ );
+ pub fn VarI2FromDate(
+ dateIn: DATE,
+ psOut: *mut SHORT,
+ );
+ pub fn VarI2FromStr(
+ strIn: LPCOLESTR,
+ lcid: LCID,
+ dwFlags: ULONG,
+ psOut: *mut SHORT,
+ );
+ pub fn VarI2FromI1(
+ cIn: CHAR,
+ psOut: *mut SHORT,
+ );
+ pub fn VarI2FromUI2(
+ uiIn: USHORT,
+ psOut: *mut SHORT,
+ );
+ pub fn VarI2FromUI4(
+ ulIn: ULONG,
+ psOut: *mut SHORT,
+ );
+ pub fn VarI2FromUI8(
+ ui64In: ULONG64,
+ psOut: *mut SHORT,
+ );
+ pub fn VarI2FromDec(
+ pdecIn: *const DECIMAL,
+ psOut: *mut SHORT,
+ );
+ pub fn VarI4FromUI1(
+ bIn: BYTE,
+ plOut: *mut LONG,
+ );
+ pub fn VarI4FromI2(
+ sIn: SHORT,
+ plOut: *mut LONG,
+ );
+ pub fn VarI4FromI8(
+ i64In: LONG64,
+ plOut: *mut LONG,
+ );
+ pub fn VarI4FromR4(
+ fltIn: FLOAT,
+ plOut: *mut LONG,
+ );
+ pub fn VarI4FromR8(
+ dblIn: DOUBLE,
+ plOut: *mut LONG,
+ );
+ pub fn VarI4FromDate(
+ dateIn: DATE,
+ plOut: *mut LONG,
+ );
+ pub fn VarI4FromStr(
+ strIn: LPCOLESTR,
+ lcid: LCID,
+ dwFlags: ULONG,
+ plOut: *mut LONG,
+ );
+ pub fn VarI4FromI1(
+ cIn: CHAR,
+ plOut: *mut LONG,
+ );
+ pub fn VarI4FromUI2(
+ uiIn: USHORT,
+ plOut: *mut LONG,
+ );
+ pub fn VarI4FromUI4(
+ ulIn: ULONG,
+ plOut: *mut LONG,
+ );
+ pub fn VarI4FromUI8(
+ ui64In: ULONG64,
+ plOut: *mut LONG,
+ );
+ pub fn VarI4FromDec(
+ pdecIn: *const DECIMAL,
+ plOut: *mut LONG,
+ );
+ pub fn VarI8FromUI1(
+ bIn: BYTE,
+ pi64Out: *mut LONG64,
+ );
+ pub fn VarI8FromI2(
+ sIn: SHORT,
+ pi64Out: *mut LONG64,
+ );
+ pub fn VarI8FromR4(
+ fltIn: FLOAT,
+ pi64Out: *mut LONG64,
+ );
+ pub fn VarI8FromR8(
+ dblIn: DOUBLE,
+ pi64Out: *mut LONG64,
+ );
+ pub fn VarI8FromDate(
+ dateIn: DATE,
+ pi64Out: *mut LONG64,
+ );
+ pub fn VarI8FromStr(
+ strIn: LPCOLESTR,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pi64Out: *mut LONG64,
+ );
+ pub fn VarI8FromI1(
+ cIn: CHAR,
+ pi64Out: *mut LONG64,
+ );
+ pub fn VarI8FromUI2(
+ uiIn: USHORT,
+ pi64Out: *mut LONG64,
+ );
+ pub fn VarI8FromUI4(
+ ulIn: ULONG,
+ pi64Out: *mut LONG64,
+ );
+ pub fn VarI8FromUI8(
+ ui64In: ULONG64,
+ pi64Out: *mut LONG64,
+ );
+ pub fn VarI8FromDec(
+ pdecIn: *const DECIMAL,
+ pi64Out: *mut LONG64,
+ );
+ pub fn VarR4FromUI1(
+ bIn: BYTE,
+ pfltOut: *mut FLOAT,
+ );
+ pub fn VarR4FromI2(
+ sIn: SHORT,
+ pfltOut: *mut FLOAT,
+ );
+ pub fn VarR4FromI4(
+ lIn: LONG,
+ pfltOut: *mut FLOAT,
+ );
+ pub fn VarR4FromI8(
+ i64In: LONG64,
+ pfltOut: *mut FLOAT,
+ );
+ pub fn VarR4FromR8(
+ dblIn: DOUBLE,
+ pfltOut: *mut FLOAT,
+ );
+ pub fn VarR4FromDate(
+ dateIn: DATE,
+ pfltOut: *mut FLOAT,
+ );
+ pub fn VarR4FromStr(
+ strIn: LPCOLESTR,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pfltOut: *mut FLOAT,
+ );
+ pub fn VarR4FromI1(
+ cIn: CHAR,
+ pfltOut: *mut FLOAT,
+ );
+ pub fn VarR4FromUI2(
+ uiIn: USHORT,
+ pfltOut: *mut FLOAT,
+ );
+ pub fn VarR4FromUI4(
+ ulIn: ULONG,
+ pfltOut: *mut FLOAT,
+ );
+ pub fn VarR4FromUI8(
+ ui64In: ULONG64,
+ pfltOut: *mut FLOAT,
+ );
+ pub fn VarR4FromDec(
+ pdecIn: *const DECIMAL,
+ pfltOut: *mut FLOAT,
+ );
+ pub fn VarR8FromUI1(
+ bIn: BYTE,
+ pdblOut: *mut DOUBLE,
+ );
+ pub fn VarR8FromI2(
+ sIn: SHORT,
+ pdblOut: *mut DOUBLE,
+ );
+ pub fn VarR8FromI4(
+ lIn: LONG,
+ pdblOut: *mut DOUBLE,
+ );
+ pub fn VarR8FromI8(
+ i64In: LONG64,
+ pdblOut: *mut DOUBLE,
+ );
+ pub fn VarR8FromR4(
+ fltIn: FLOAT,
+ pdblOut: *mut DOUBLE,
+ );
+ pub fn VarR8FromDate(
+ dateIn: DATE,
+ pdblOut: *mut DOUBLE,
+ );
+ pub fn VarR8FromStr(
+ strIn: LPCOLESTR,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pdblOut: *mut DOUBLE,
+ );
+ pub fn VarR8FromI1(
+ cIn: CHAR,
+ pdblOut: *mut DOUBLE,
+ );
+ pub fn VarR8FromUI2(
+ uiIn: USHORT,
+ pdblOut: *mut DOUBLE,
+ );
+ pub fn VarR8FromUI4(
+ ulIn: ULONG,
+ pdblOut: *mut DOUBLE,
+ );
+ pub fn VarR8FromUI8(
+ ui64In: ULONG64,
+ pdblOut: *mut DOUBLE,
+ );
+ pub fn VarR8FromDec(
+ pdecIn: *const DECIMAL,
+ pdblOut: *mut DOUBLE,
+ );
+ pub fn VarDateFromUI1(
+ bIn: BYTE,
+ pdateOut: *mut DATE,
+ );
+ pub fn VarDateFromI2(
+ sIn: SHORT,
+ pdateOut: *mut DATE,
+ );
+ pub fn VarDateFromI4(
+ lIn: LONG,
+ pdateOut: *mut DATE,
+ );
+ pub fn VarDateFromI8(
+ i64In: LONG64,
+ pdateOut: *mut DATE,
+ );
+ pub fn VarDateFromR4(
+ fltIn: FLOAT,
+ pdateOut: *mut DATE,
+ );
+ pub fn VarDateFromR8(
+ dblIn: DOUBLE,
+ pdateOut: *mut DATE,
+ );
+ pub fn VarDateFromStr(
+ strIn: LPCOLESTR,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pdateOut: *mut DATE,
+ );
+ pub fn VarDateFromI1(
+ cIn: CHAR,
+ pdateOut: *mut DATE,
+ );
+ pub fn VarDateFromUI2(
+ uiIn: USHORT,
+ pdateOut: *mut DATE,
+ );
+ pub fn VarDateFromUI4(
+ ulIn: ULONG,
+ pdateOut: *mut DATE,
+ );
+ pub fn VarDateFromUI8(
+ ui64In: ULONG64,
+ pdateOut: *mut DATE,
+ );
+ pub fn VarDateFromDec(
+ pdecIn: *const DECIMAL,
+ pdateOut: *mut DATE,
+ );
+ pub fn VarBstrFromUI1(
+ bVal: BYTE,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pbstrOut: *mut BSTR,
+ );
+ pub fn VarBstrFromI2(
+ iVal: SHORT,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pbstrOut: *mut BSTR,
+ );
+ pub fn VarBstrFromI4(
+ lIn: LONG,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pbstrOut: *mut BSTR,
+ );
+ pub fn VarBstrFromI8(
+ i64In: LONG64,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pbstrOut: *mut BSTR,
+ );
+ pub fn VarBstrFromR4(
+ fltIn: FLOAT,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pbstrOut: *mut BSTR,
+ );
+ pub fn VarBstrFromR8(
+ dblIn: DOUBLE,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pbstrOut: *mut BSTR,
+ );
+ pub fn VarBstrFromDate(
+ dateIn: DATE,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pbstrOut: *mut BSTR,
+ );
+ pub fn VarBstrFromI1(
+ cIn: CHAR,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pbstrOut: *mut BSTR,
+ );
+ pub fn VarBstrFromUI2(
+ uiIn: USHORT,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pbstrOut: *mut BSTR,
+ );
+ pub fn VarBstrFromUI4(
+ ulIn: ULONG,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pbstrOut: *mut BSTR,
+ );
+ pub fn VarBstrFromUI8(
+ ui64In: ULONG64,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pbstrOut: *mut BSTR,
+ );
+ pub fn VarBstrFromDec(
+ pdecIn: *const DECIMAL,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pbstrOut: *mut BSTR,
+ );
+ pub fn VarUI2FromUI1(
+ bIn: BYTE,
+ puiOut: *mut USHORT,
+ );
+ pub fn VarUI2FromI2(
+ uiIn: SHORT,
+ puiOut: *mut USHORT,
+ );
+ pub fn VarUI2FromI4(
+ lIn: LONG,
+ puiOut: *mut USHORT,
+ );
+ pub fn VarUI2FromI8(
+ i64In: LONG64,
+ puiOut: *mut USHORT,
+ );
+ pub fn VarUI2FromR4(
+ fltIn: FLOAT,
+ puiOut: *mut USHORT,
+ );
+ pub fn VarUI2FromR8(
+ dblIn: DOUBLE,
+ puiOut: *mut USHORT,
+ );
+ pub fn VarUI2FromDate(
+ dateIn: DATE,
+ puiOut: *mut USHORT,
+ );
+ pub fn VarUI2FromStr(
+ strIn: LPCOLESTR,
+ lcid: LCID,
+ dwFlags: ULONG,
+ puiOut: *mut USHORT,
+ );
+ pub fn VarUI2FromI1(
+ cIn: CHAR,
+ puiOut: *mut USHORT,
+ );
+ pub fn VarUI2FromUI4(
+ ulIn: ULONG,
+ puiOut: *mut USHORT,
+ );
+ pub fn VarUI2FromUI8(
+ i64In: ULONG64,
+ puiOut: *mut USHORT,
+ );
+ pub fn VarUI2FromDec(
+ pdecIn: *const DECIMAL,
+ puiOut: *mut USHORT,
+ );
+ pub fn VarUI4FromUI1(
+ bIn: BYTE,
+ pulOut: *mut ULONG,
+ );
+ pub fn VarUI4FromI2(
+ uiIn: SHORT,
+ pulOut: *mut ULONG,
+ );
+ pub fn VarUI4FromI4(
+ lIn: LONG,
+ pulOut: *mut ULONG,
+ );
+ pub fn VarUI4FromI8(
+ i64In: LONG64,
+ plOut: *mut ULONG,
+ );
+ pub fn VarUI4FromR4(
+ fltIn: FLOAT,
+ pulOut: *mut ULONG,
+ );
+ pub fn VarUI4FromR8(
+ dblIn: DOUBLE,
+ pulOut: *mut ULONG,
+ );
+ pub fn VarUI4FromDate(
+ dateIn: DATE,
+ pulOut: *mut ULONG,
+ );
+ pub fn VarUI4FromStr(
+ strIn: LPCOLESTR,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pulOut: *mut ULONG,
+ );
+ pub fn VarUI4FromI1(
+ cIn: CHAR,
+ pulOut: *mut ULONG,
+ );
+ pub fn VarUI4FromUI2(
+ uiIn: USHORT,
+ pulOut: *mut ULONG,
+ );
+ pub fn VarUI4FromUI8(
+ ui64In: ULONG64,
+ plOut: *mut ULONG,
+ );
+ pub fn VarUI4FromDec(
+ pdecIn: *const DECIMAL,
+ pulOut: *mut ULONG,
+ );
+ pub fn VarUI8FromUI1(
+ bIn: BYTE,
+ pi64Out: *mut ULONG64,
+ );
+ pub fn VarUI8FromI2(
+ sIn: SHORT,
+ pi64Out: *mut ULONG64,
+ );
+ pub fn VarUI8FromI4(
+ lIn: LONG,
+ pi64Out: *mut ULONG64,
+ );
+ pub fn VarUI8FromI8(
+ ui64In: LONG64,
+ pi64Out: *mut ULONG64,
+ );
+ pub fn VarUI8FromR4(
+ fltIn: FLOAT,
+ pi64Out: *mut ULONG64,
+ );
+ pub fn VarUI8FromR8(
+ dblIn: DOUBLE,
+ pi64Out: *mut ULONG64,
+ );
+ pub fn VarUI8FromDate(
+ dateIn: DATE,
+ pi64Out: *mut ULONG64,
+ );
+ pub fn VarUI8FromStr(
+ strIn: LPCOLESTR,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pi64Out: *mut ULONG64,
+ );
+ pub fn VarUI8FromI1(
+ cIn: CHAR,
+ pi64Out: *mut ULONG64,
+ );
+ pub fn VarUI8FromUI2(
+ uiIn: USHORT,
+ pi64Out: *mut ULONG64,
+ );
+ pub fn VarUI8FromUI4(
+ ulIn: ULONG,
+ pi64Out: *mut ULONG64,
+ );
+ pub fn VarUI8FromDec(
+ pdecIn: *const DECIMAL,
+ pi64Out: *mut ULONG64,
+ );
+ pub fn VarDecFromUI1(
+ bIn: BYTE,
+ pdecOut: *mut DECIMAL,
+ );
+ pub fn VarDecFromI2(
+ uiIn: SHORT,
+ pdecOut: *mut DECIMAL,
+ );
+ pub fn VarDecFromI4(
+ lIn: LONG,
+ pdecOut: *mut DECIMAL,
+ );
+ pub fn VarDecFromI8(
+ i64In: LONG64,
+ pdecOut: *mut DECIMAL,
+ );
+ pub fn VarDecFromR4(
+ fltIn: FLOAT,
+ pdecOut: *mut DECIMAL,
+ );
+ pub fn VarDecFromR8(
+ dblIn: DOUBLE,
+ pdecOut: *mut DECIMAL,
+ );
+ pub fn VarDecFromDate(
+ dateIn: DATE,
+ pdecOut: *mut DECIMAL,
+ );
+ pub fn VarDecFromStr(
+ strIn: LPCOLESTR,
+ lcid: LCID,
+ dwFlags: ULONG,
+ pdecOut: *mut DECIMAL,
+ );
+ pub fn VarDecFromI1(
+ cIn: CHAR,
+ pdecOut: *mut DECIMAL,
+ );
+ pub fn VarDecFromUI2(
+ uiIn: USHORT,
+ pdecOut: *mut DECIMAL,
+ );
+ pub fn VarDecFromUI4(
+ ulIn: ULONG,
+ pdecOut: *mut DECIMAL,
+ );
+ pub fn VarDecFromUI8(
+ ui64In: ULONG64,
+ pdecOut: *mut DECIMAL,
+ );
+ pub fn VarDecAdd(
+ pdecLeft: LPDECIMAL,
+ pdecRight: LPDECIMAL,
+ pdecResult: LPDECIMAL,
+ );
+ pub fn VarDecDiv(
+ pdecLeft: LPDECIMAL,
+ pdecRight: LPDECIMAL,
+ pdecResult: LPDECIMAL,
+ );
+ pub fn VarDecMul(
+ pdecLeft: LPDECIMAL,
+ pdecRight: LPDECIMAL,
+ pdecResult: LPDECIMAL,
+ );
+ pub fn VarDecSub(
+ pdecLeft: LPDECIMAL,
+ pdecRight: LPDECIMAL,
+ pdecResult: LPDECIMAL,
+ );
+ pub fn VarDecAbs(
+ pdecIn: LPDECIMAL,
+ pdecResult: LPDECIMAL,
+ );
+ pub fn VarDecFix(
+ pdecIn: LPDECIMAL,
+ pdecResult: LPDECIMAL,
+ );
+ pub fn VarDecInt(
+ pdecIn: LPDECIMAL,
+ pdecResult: LPDECIMAL,
+ );
+ pub fn VarDecNeg(
+ pdecIn: LPDECIMAL,
+ pdecResult: LPDECIMAL,
+ );
+ pub fn VarDecRound(
+ pdecIn: LPDECIMAL,
+ cDecimals: c_int,
+ pdecResult: LPDECIMAL,
+ );
+ pub fn VarDecCmp(
+ pdecLeft: LPDECIMAL,
+ pdecRight: LPDECIMAL,
+ );
+ pub fn VarDecCmpR8(
+ pdecLeft: LPDECIMAL,
+ dblRight: c_double,
+ );
+ pub fn VarBstrCat(
+ bstrLeft: BSTR,
+ bstrRight: BSTR,
+ pbstrResult: LPBSTR,
+ );
+ pub fn VarBstrCmp(
+ bstrLeft: BSTR,
+ bstrRight: BSTR,
+ lcid: LCID,
+ dwFlags: ULONG,
+ );
+ pub fn VarR8Pow(
+ dblLeft: c_double,
+ dblRight: c_double,
+ pdblResult: *mut c_double,
+ );
+ pub fn VarR4CmpR8(
+ fltLeft: c_float,
+ dblRight: c_double,
+ );
+ pub fn VarR8Round(
+ dblIn: c_double,
+ cDecimals: c_int,
+ pdblResult: *mut c_double,
+ );
+ pub fn GetAltMonthNames(
+ lcid: LCID,
+ prgp: *mut LPOLESTR,
+ );
+}
+pub type DISPID = LONG;
+pub type MEMBERID = DISPID;
+pub const MEMBERID_NIL: MEMBERID = DISPID_UNKNOWN;
+pub const DISPATCH_METHOD: WORD = 0x1;
+pub const DISPATCH_PROPERTYGET: WORD = 0x2;
+pub const DISPATCH_PROPERTYPUT: WORD = 0x4;
+pub const DISPATCH_PROPERTYPUTREF: WORD = 0x8;
+ENUM!{enum REGKIND {
+ REGKIND_DEFAULT = 0,
+ REGKIND_REGISTER,
+ REGKIND_NONE,
+}}
+extern "system" {
+ pub fn LoadTypeLibEx(
+ szFile: LPCOLESTR,
+ regkind: REGKIND,
+ pptlib: *mut *mut ITypeLib,
+ ) -> HRESULT;
+ pub fn RevokeActiveObject(
+ dwRegister: DWORD,
+ pvReserved: *mut c_void,
+ );
+ pub fn SetErrorInfo(
+ dwReserved: ULONG,
+ perrinfo: *mut IErrorInfo,
+ ) -> HRESULT;
+ pub fn GetErrorInfo(
+ dwReserved: ULONG,
+ pperrinfo: *mut *mut IErrorInfo,
+ ) -> HRESULT;
+ pub fn CreateErrorInfo(
+ pperrinfo: *mut *mut ICreateErrorInfo,
+ ) -> HRESULT;
+ pub fn OaBuildVersion() -> ULONG;
+ pub fn OaEnablePerUserTLibRegistration();
+}
diff --git a/vendor/winapi/src/um/olectl.rs b/vendor/winapi/src/um/olectl.rs
new file mode 100644
index 000000000..4a9ccdf9d
--- /dev/null
+++ b/vendor/winapi/src/um/olectl.rs
@@ -0,0 +1,14 @@
+// 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.
+//! OLE Control interfaces
+use shared::winerror::{FACILITY_ITF, SEVERITY_ERROR, SEVERITY_SUCCESS};
+use um::winnt::HRESULT;
+pub const SELFREG_E_FIRST: HRESULT = MAKE_SCODE!(SEVERITY_ERROR, FACILITY_ITF, 0x0200);
+pub const SELFREG_E_LAST: HRESULT = MAKE_SCODE!(SEVERITY_ERROR, FACILITY_ITF, 0x020F);
+pub const SELFREG_S_FIRST: HRESULT = MAKE_SCODE!(SEVERITY_SUCCESS, FACILITY_ITF, 0x0200);
+pub const SELFREG_S_LAST: HRESULT = MAKE_SCODE!(SEVERITY_SUCCESS, FACILITY_ITF, 0x020F);
+pub const SELFREG_E_TYPELIB: HRESULT = SELFREG_E_FIRST + 0;
+pub const SELFREG_E_CLASS: HRESULT = SELFREG_E_FIRST + 1;
diff --git a/vendor/winapi/src/um/oleidl.rs b/vendor/winapi/src/um/oleidl.rs
new file mode 100644
index 000000000..39b8c309e
--- /dev/null
+++ b/vendor/winapi/src/um/oleidl.rs
@@ -0,0 +1,43 @@
+// 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::minwindef::DWORD;
+use shared::ntdef::HRESULT;
+use shared::windef::POINTL;
+use um::objidl::IDataObject;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+pub const MK_ALT: DWORD = 20;
+pub const DROPEFFECT_NONE: DWORD = 0;
+pub const DROPEFFECT_COPY: DWORD = 1;
+pub const DROPEFFECT_MOVE: DWORD = 2;
+pub const DROPEFFECT_LINK: DWORD = 4;
+pub const DROPEFFECT_SCROLL: DWORD = 0x80000000;
+pub const DD_DEFSCROLLINSET: DWORD = 11;
+pub const DD_DEFSCROLLDELAY: DWORD = 50;
+pub const DD_DEFSCROLLINTERVAL: DWORD = 50;
+pub const DD_DEFDRAGDELAY: DWORD = 200;
+pub const DD_DEFDRAGMINDIST: DWORD = 2;
+pub type LPDROPTARGET = *mut IDropTarget;
+RIDL!{#[uuid(0x00000122, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IDropTarget(IDropTargetVtbl): IUnknown(IUnknownVtbl) {
+ fn DragEnter(
+ pDataObj: *const IDataObject,
+ grfKeyState: DWORD,
+ pt: *const POINTL,
+ pdwEffect: *mut DWORD,
+ ) -> HRESULT,
+ fn DragOver(
+ grfKeyState: DWORD,
+ pt: *const POINTL,
+ pdwEffect: *mut DWORD,
+ ) -> HRESULT,
+ fn DragLeave() -> HRESULT,
+ fn Drop(
+ pDataObj: *const IDataObject,
+ grfKeyState: DWORD,
+ pt: *const POINTL,
+ pdwEffect: *mut DWORD,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/opmapi.rs b/vendor/winapi/src/um/opmapi.rs
new file mode 100644
index 000000000..a8e5de87a
--- /dev/null
+++ b/vendor/winapi/src/um/opmapi.rs
@@ -0,0 +1,362 @@
+// 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::UINT64;
+use shared::d3d9::IDirect3DDevice9;
+use shared::d3d9types::D3DFORMAT;
+use shared::guiddef::GUID;
+use shared::minwindef::{BYTE, DWORD, ULONG};
+use shared::windef::HMONITOR;
+use um::dxva2api::DXVA2_SampleFormat;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LUID};
+DEFINE_GUID!{OPM_GET_CURRENT_HDCP_SRM_VERSION,
+ 0x99c5ceff, 0x5f1d, 0x4879, 0x81, 0xc1, 0xc5, 0x24, 0x43, 0xc9, 0x48, 0x2b}
+DEFINE_GUID!{OPM_GET_CONNECTED_HDCP_DEVICE_INFORMATION,
+ 0x0db59d74, 0xa992, 0x492e, 0xa0, 0xbd, 0xc2, 0x3f, 0xda, 0x56, 0x4e, 0x00}
+DEFINE_GUID!{OPM_GET_ACP_AND_CGMSA_SIGNALING,
+ 0x6629a591, 0x3b79, 0x4cf3, 0x92, 0x4a, 0x11, 0xe8, 0xe7, 0x81, 0x16, 0x71}
+DEFINE_GUID!{OPM_GET_CONNECTOR_TYPE,
+ 0x81d0bfd5, 0x6afe, 0x48c2, 0x99, 0xc0, 0x95, 0xa0, 0x8f, 0x97, 0xc5, 0xda}
+DEFINE_GUID!{OPM_GET_SUPPORTED_PROTECTION_TYPES,
+ 0x38f2a801, 0x9a6c, 0x48bb, 0x91, 0x07, 0xb6, 0x69, 0x6e, 0x6f, 0x17, 0x97}
+DEFINE_GUID!{OPM_GET_VIRTUAL_PROTECTION_LEVEL,
+ 0xb2075857, 0x3eda, 0x4d5d, 0x88, 0xdb, 0x74, 0x8f, 0x8c, 0x1a, 0x05, 0x49}
+DEFINE_GUID!{OPM_GET_ACTUAL_PROTECTION_LEVEL,
+ 0x1957210a, 0x7766, 0x452a, 0xb9, 0x9a, 0xd2, 0x7a, 0xed, 0x54, 0xf0, 0x3a}
+DEFINE_GUID!{OPM_GET_ACTUAL_OUTPUT_FORMAT,
+ 0xd7bf1ba3, 0xad13, 0x4f8e, 0xaf, 0x98, 0x0d, 0xcb, 0x3c, 0xa2, 0x04, 0xcc}
+DEFINE_GUID!{OPM_GET_ADAPTER_BUS_TYPE,
+ 0xc6f4d673, 0x6174, 0x4184, 0x8e, 0x35, 0xf6, 0xdb, 0x52, 0x0, 0xbc, 0xba}
+DEFINE_GUID!{OPM_GET_OUTPUT_ID,
+ 0x72cb6df3, 0x244f, 0x40ce, 0xb0, 0x9e, 0x20, 0x50, 0x6a, 0xf6, 0x30, 0x2f}
+DEFINE_GUID!{OPM_GET_DVI_CHARACTERISTICS,
+ 0xa470b3bb, 0x5dd7, 0x4172, 0x83, 0x9c, 0x3d, 0x37, 0x76, 0xe0, 0xeb, 0xf5}
+DEFINE_GUID!{OPM_GET_CODEC_INFO,
+ 0x4f374491, 0x8f5f, 0x4445, 0x9d, 0xba, 0x95, 0x58, 0x8f, 0x6b, 0x58, 0xb4}
+DEFINE_GUID!{OPM_GET_OUTPUT_HARDWARE_PROTECTION_SUPPORT,
+ 0x3b129589, 0x2af8, 0x4ef0, 0x96, 0xa2, 0x70, 0x4a, 0x84, 0x5a, 0x21, 0x8e}
+DEFINE_GUID!{OPM_SET_PROTECTION_LEVEL,
+ 0x9bb9327c, 0x4eb5, 0x4727, 0x9f, 0x00, 0xb4, 0x2b, 0x09, 0x19, 0xc0, 0xda}
+DEFINE_GUID!{OPM_SET_ACP_AND_CGMSA_SIGNALING,
+ 0x09a631a5, 0xd684, 0x4c60, 0x8e, 0x4d, 0xd3, 0xbb, 0x0f, 0x0b, 0xe3, 0xee}
+DEFINE_GUID!{OPM_SET_HDCP_SRM,
+ 0x8b5ef5d1, 0xc30d, 0x44ff, 0x84, 0xa5, 0xea, 0x71, 0xdc, 0xe7, 0x8f, 0x13}
+DEFINE_GUID!{OPM_SET_PROTECTION_LEVEL_ACCORDING_TO_CSS_DVD,
+ 0x39ce333e, 0x4cc0, 0x44ae, 0xbf, 0xcc, 0xda, 0x50, 0xb5, 0xf8, 0x2e, 0x72}
+ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0001 {
+ OPM_OMAC_SIZE = 16,
+ OPM_128_BIT_RANDOM_NUMBER_SIZE = 16,
+ OPM_ENCRYPTED_INITIALIZATION_PARAMETERS_SIZE = 256,
+ OPM_CONFIGURE_SETTING_DATA_SIZE = 4056,
+ OPM_GET_INFORMATION_PARAMETERS_SIZE = 4056,
+ OPM_REQUESTED_INFORMATION_SIZE = 4076,
+ OPM_HDCP_KEY_SELECTION_VECTOR_SIZE = 5,
+ OPM_PROTECTION_TYPE_SIZE = 4,
+ OPM_BUS_TYPE_MASK = 0xffff,
+ OPM_BUS_IMPLEMENTATION_MODIFIER_MASK = 0x7fff,
+}}
+ENUM!{enum OPM_VIDEO_OUTPUT_SEMANTICS {
+ OPM_VOS_COPP_SEMANTICS = 0,
+ OPM_VOS_OPM_SEMANTICS = 1,
+ OPM_VOS_OPM_INDIRECT_DISPLAY = 2,
+}}
+ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0002 {
+ OPM_HDCP_FLAG_NONE = 0,
+ OPM_HDCP_FLAG_REPEATER = 0x1,
+}}
+ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0003 {
+ OPM_STATUS_NORMAL = 0,
+ OPM_STATUS_LINK_LOST = 0x1,
+ OPM_STATUS_RENEGOTIATION_REQUIRED = 0x2,
+ OPM_STATUS_TAMPERING_DETECTED = 0x4,
+ OPM_STATUS_REVOKED_HDCP_DEVICE_ATTACHED = 0x8,
+}}
+ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0004 {
+ OPM_CONNECTOR_TYPE_OTHER = -1i32 as u32,
+ OPM_CONNECTOR_TYPE_VGA = 0,
+ OPM_CONNECTOR_TYPE_SVIDEO = 1,
+ OPM_CONNECTOR_TYPE_COMPOSITE_VIDEO = 2,
+ OPM_CONNECTOR_TYPE_COMPONENT_VIDEO = 3,
+ OPM_CONNECTOR_TYPE_DVI = 4,
+ OPM_CONNECTOR_TYPE_HDMI = 5,
+ OPM_CONNECTOR_TYPE_LVDS = 6,
+ OPM_CONNECTOR_TYPE_D_JPN = 8,
+ OPM_CONNECTOR_TYPE_SDI = 9,
+ OPM_CONNECTOR_TYPE_DISPLAYPORT_EXTERNAL = 10,
+ OPM_CONNECTOR_TYPE_DISPLAYPORT_EMBEDDED = 11,
+ OPM_CONNECTOR_TYPE_UDI_EXTERNAL = 12,
+ OPM_CONNECTOR_TYPE_UDI_EMBEDDED = 13,
+ OPM_CONNECTOR_TYPE_RESERVED = 14,
+ OPM_CONNECTOR_TYPE_MIRACAST = 15,
+ OPM_CONNECTOR_TYPE_TRANSPORT_AGNOSTIC_DIGITAL_MODE_A = 16,
+ OPM_CONNECTOR_TYPE_TRANSPORT_AGNOSTIC_DIGITAL_MODE_B = 17,
+ OPM_COPP_COMPATIBLE_CONNECTOR_TYPE_INTERNAL = 0x80000000,
+}}
+ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0005 {
+ OPM_DVI_CHARACTERISTIC_1_0 = 1,
+ OPM_DVI_CHARACTERISTIC_1_1_OR_ABOVE = 2,
+}}
+ENUM!{enum OPM_OUTPUT_HARDWARE_PROTECTION {
+ OPM_OUTPUT_HARDWARE_PROTECTION_NOT_SUPPORTED = 0,
+ OPM_OUTPUT_HARDWARE_PROTECTION_SUPPORTED = 0x1,
+}}
+ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0006 {
+ OPM_BUS_TYPE_OTHER = 0,
+ OPM_BUS_TYPE_PCI = 0x1,
+ OPM_BUS_TYPE_PCIX = 0x2,
+ OPM_BUS_TYPE_PCIEXPRESS = 0x3,
+ OPM_BUS_TYPE_AGP = 0x4,
+ OPM_BUS_IMPLEMENTATION_MODIFIER_INSIDE_OF_CHIPSET = 0x10000,
+ OPM_BUS_IMPLEMENTATION_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_CHIP = 0x20000,
+ OPM_BUS_IMPLEMENTATION_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_SOCKET = 0x30000,
+ OPM_BUS_IMPLEMENTATION_MODIFIER_DAUGHTER_BOARD_CONNECTOR = 0x40000,
+ OPM_BUS_IMPLEMENTATION_MODIFIER_DAUGHTER_BOARD_CONNECTOR_INSIDE_OF_NUAE = 0x50000,
+ OPM_BUS_IMPLEMENTATION_MODIFIER_NON_STANDARD = 0x80000000,
+ OPM_COPP_COMPATIBLE_BUS_TYPE_INTEGRATED = 0x80000000,
+}}
+ENUM!{enum OPM_DPCP_PROTECTION_LEVEL {
+ OPM_DPCP_OFF = 0,
+ OPM_DPCP_ON = 1,
+ OPM_DPCP_FORCE_ULONG = 0x7fffffff,
+}}
+ENUM!{enum OPM_HDCP_PROTECTION_LEVEL {
+ OPM_HDCP_OFF = 0,
+ OPM_HDCP_ON = 1,
+ OPM_HDCP_FORCE_ULONG = 0x7fffffff,
+}}
+ENUM!{enum OPM_TYPE_ENFORCEMENT_HDCP_PROTECTION_LEVEL {
+ OPM_TYPE_ENFORCEMENT_HDCP_OFF = OPM_HDCP_OFF,
+ OPM_TYPE_ENFORCEMENT_HDCP_ON_WITH_NO_TYPE_RESTRICTION = OPM_HDCP_ON,
+ OPM_TYPE_ENFORCEMENT_HDCP_ON_WITH_TYPE1_RESTRICTION = OPM_HDCP_ON + 1,
+ OPM_TYPE_ENFORCEMENT_HDCP_FORCE_ULONG = 0x7fffffff,
+}}
+ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0007 {
+ OPM_CGMSA_OFF = 0,
+ OPM_CGMSA_COPY_FREELY = 0x1,
+ OPM_CGMSA_COPY_NO_MORE = 0x2,
+ OPM_CGMSA_COPY_ONE_GENERATION = 0x3,
+ OPM_CGMSA_COPY_NEVER = 0x4,
+ OPM_CGMSA_REDISTRIBUTION_CONTROL_REQUIRED = 0x8,
+}}
+ENUM!{enum OPM_ACP_PROTECTION_LEVEL {
+ OPM_ACP_OFF = 0,
+ OPM_ACP_LEVEL_ONE = 1,
+ OPM_ACP_LEVEL_TWO = 2,
+ OPM_ACP_LEVEL_THREE = 3,
+ OPM_ACP_FORCE_ULONG = 0x7fffffff,
+}}
+ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0008 {
+ OPM_PROTECTION_TYPE_OTHER = 0x80000000,
+ OPM_PROTECTION_TYPE_NONE = 0,
+ OPM_PROTECTION_TYPE_COPP_COMPATIBLE_HDCP = 0x1,
+ OPM_PROTECTION_TYPE_ACP = 0x2,
+ OPM_PROTECTION_TYPE_CGMSA = 0x4,
+ OPM_PROTECTION_TYPE_HDCP = 0x8,
+ OPM_PROTECTION_TYPE_DPCP = 0x10,
+ OPM_PROTECTION_TYPE_TYPE_ENFORCEMENT_HDCP = 0x20,
+}}
+ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0009 {
+ OPM_PROTECTION_STANDARD_OTHER = 0x80000000,
+ OPM_PROTECTION_STANDARD_NONE = 0,
+ OPM_PROTECTION_STANDARD_IEC61880_525I = 0x1,
+ OPM_PROTECTION_STANDARD_IEC61880_2_525I = 0x2,
+ OPM_PROTECTION_STANDARD_IEC62375_625P = 0x4,
+ OPM_PROTECTION_STANDARD_EIA608B_525 = 0x8,
+ OPM_PROTECTION_STANDARD_EN300294_625I = 0x10,
+ OPM_PROTECTION_STANDARD_CEA805A_TYPEA_525P = 0x20,
+ OPM_PROTECTION_STANDARD_CEA805A_TYPEA_750P = 0x40,
+ OPM_PROTECTION_STANDARD_CEA805A_TYPEA_1125I = 0x80,
+ OPM_PROTECTION_STANDARD_CEA805A_TYPEB_525P = 0x100,
+ OPM_PROTECTION_STANDARD_CEA805A_TYPEB_750P = 0x200,
+ OPM_PROTECTION_STANDARD_CEA805A_TYPEB_1125I = 0x400,
+ OPM_PROTECTION_STANDARD_ARIBTRB15_525I = 0x800,
+ OPM_PROTECTION_STANDARD_ARIBTRB15_525P = 0x1000,
+ OPM_PROTECTION_STANDARD_ARIBTRB15_750P = 0x2000,
+ OPM_PROTECTION_STANDARD_ARIBTRB15_1125I = 0x4000,
+}}
+ENUM!{enum OPM_IMAGE_ASPECT_RATIO_EN300294 {
+ OPM_ASPECT_RATIO_EN300294_FULL_FORMAT_4_BY_3 = 0,
+ OPM_ASPECT_RATIO_EN300294_BOX_14_BY_9_CENTER = 1,
+ OPM_ASPECT_RATIO_EN300294_BOX_14_BY_9_TOP = 2,
+ OPM_ASPECT_RATIO_EN300294_BOX_16_BY_9_CENTER = 3,
+ OPM_ASPECT_RATIO_EN300294_BOX_16_BY_9_TOP = 4,
+ OPM_ASPECT_RATIO_EN300294_BOX_GT_16_BY_9_CENTER = 5,
+ OPM_ASPECT_RATIO_EN300294_FULL_FORMAT_4_BY_3_PROTECTED_CENTER = 6,
+ OPM_ASPECT_RATIO_EN300294_FULL_FORMAT_16_BY_9_ANAMORPHIC = 7,
+ OPM_ASPECT_RATIO_FORCE_ULONG = 0x7fffffff,
+}}
+STRUCT!{#[repr(packed)] struct OPM_RANDOM_NUMBER {
+ abRandomNumber: [BYTE; 16],
+}}
+STRUCT!{#[repr(packed)] struct OPM_OMAC {
+ abOMAC: [BYTE; 16],
+}}
+STRUCT!{#[repr(packed)] struct OPM_ENCRYPTED_INITIALIZATION_PARAMETERS {
+ abEncryptedInitializationParameters: [BYTE; 256],
+}}
+STRUCT!{#[repr(packed)] struct OPM_GET_INFO_PARAMETERS {
+ omac: OPM_OMAC,
+ rnRandomNumber: OPM_RANDOM_NUMBER,
+ guidInformation: GUID,
+ ulSequenceNumber: ULONG,
+ cbParametersSize: ULONG,
+ abParameters: [BYTE; 4056],
+}}
+STRUCT!{#[repr(packed)] struct OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS {
+ rnRandomNumber: OPM_RANDOM_NUMBER,
+ guidInformation: GUID,
+ ulSequenceNumber: ULONG,
+ cbParametersSize: ULONG,
+ abParameters: [BYTE; 4056],
+}}
+STRUCT!{#[repr(packed)] struct OPM_HDCP_KEY_SELECTION_VECTOR {
+ abKeySelectionVector: [BYTE; 5],
+}}
+STRUCT!{#[repr(packed)] struct OPM_CONNECTED_HDCP_DEVICE_INFORMATION {
+ rnRandomNumber: OPM_RANDOM_NUMBER,
+ ulStatusFlags: ULONG,
+ ulHDCPFlags: ULONG,
+ ksvB: OPM_HDCP_KEY_SELECTION_VECTOR,
+ Reserved: [BYTE; 11],
+ Reserved2: [BYTE; 16],
+ Reserved3: [BYTE; 16],
+}}
+STRUCT!{#[repr(packed)] struct OPM_REQUESTED_INFORMATION {
+ omac: OPM_OMAC,
+ cbRequestedInformationSize: ULONG,
+ abRequestedInformation: [BYTE; 4076],
+}}
+STRUCT!{#[repr(packed)] struct OPM_STANDARD_INFORMATION {
+ rnRandomNumber: OPM_RANDOM_NUMBER,
+ ulStatusFlags: ULONG,
+ ulInformation: ULONG,
+ ulReserved: ULONG,
+ ulReserved2: ULONG,
+}}
+STRUCT!{#[repr(packed)] struct OPM_ACTUAL_OUTPUT_FORMAT {
+ rnRandomNumber: OPM_RANDOM_NUMBER,
+ ulStatusFlags: ULONG,
+ ulDisplayWidth: ULONG,
+ ulDisplayHeight: ULONG,
+ dsfSampleInterleaveFormat: DXVA2_SampleFormat,
+ d3dFormat: D3DFORMAT,
+ ulFrequencyNumerator: ULONG,
+ ulFrequencyDenominator: ULONG,
+}}
+STRUCT!{#[repr(packed)] struct OPM_ACP_AND_CGMSA_SIGNALING {
+ rnRandomNumber: OPM_RANDOM_NUMBER,
+ ulStatusFlags: ULONG,
+ ulAvailableTVProtectionStandards: ULONG,
+ ulActiveTVProtectionStandard: ULONG,
+ ulReserved: ULONG,
+ ulAspectRatioValidMask1: ULONG,
+ ulAspectRatioData1: ULONG,
+ ulAspectRatioValidMask2: ULONG,
+ ulAspectRatioData2: ULONG,
+ ulAspectRatioValidMask3: ULONG,
+ ulAspectRatioData3: ULONG,
+ ulReserved2: [ULONG; 4],
+ ulReserved3: [ULONG; 4],
+}}
+STRUCT!{#[repr(packed)] struct OPM_OUTPUT_ID_DATA {
+ rnRandomNumber: OPM_RANDOM_NUMBER,
+ ulStatusFlags: ULONG,
+ OutputId: UINT64,
+}}
+STRUCT!{#[repr(packed)] struct OPM_CONFIGURE_PARAMETERS {
+ omac: OPM_OMAC,
+ guidSetting: GUID,
+ ulSequenceNumber: ULONG,
+ cbParametersSize: ULONG,
+ abParameters: [BYTE; 4056],
+}}
+STRUCT!{#[repr(packed)] struct OPM_SET_PROTECTION_LEVEL_PARAMETERS {
+ ulProtectionType: ULONG,
+ ulProtectionLevel: ULONG,
+ Reserved: ULONG,
+ Reserved2: ULONG,
+}}
+STRUCT!{#[repr(packed)] struct OPM_SET_ACP_AND_CGMSA_SIGNALING_PARAMETERS {
+ ulNewTVProtectionStandard: ULONG,
+ ulAspectRatioChangeMask1: ULONG,
+ ulAspectRatioData1: ULONG,
+ ulAspectRatioChangeMask2: ULONG,
+ ulAspectRatioData2: ULONG,
+ ulAspectRatioChangeMask3: ULONG,
+ ulAspectRatioData3: ULONG,
+ ulReserved: [ULONG; 4],
+ ulReserved2: [ULONG; 4],
+ ulReserved3: ULONG,
+}}
+STRUCT!{#[repr(packed)] struct OPM_SET_HDCP_SRM_PARAMETERS {
+ ulSRMVersion: ULONG,
+}}
+STRUCT!{#[repr(packed)] struct OPM_GET_CODEC_INFO_PARAMETERS {
+ cbVerifier: DWORD,
+ Verifier: [BYTE; 4052],
+}}
+STRUCT!{#[repr(packed)] struct OPM_GET_CODEC_INFO_INFORMATION {
+ rnRandomNumber: OPM_RANDOM_NUMBER,
+ Merit: DWORD,
+}}
+DEFINE_GUID!{IID_IOPMVideoOutput,
+ 0x0a15159d, 0x41c7, 0x4456, 0x93, 0xe1, 0x28, 0x4c, 0xd6, 0x1d, 0x4e, 0x8d}
+RIDL!{#[uuid(0x0a15159d, 0x41c7, 0x4456, 0x93, 0xe1, 0x28, 0x4c, 0xd6, 0x1d, 0x4e, 0x8d)]
+interface IOPMVideoOutput(IOPMVideoOutputVtbl): IUnknown(IUnknownVtbl) {
+ fn StartInitialization(
+ prnRandomNumber: *mut OPM_RANDOM_NUMBER,
+ ppbCertificate: *mut *mut BYTE,
+ pulCertificateLength: *mut ULONG,
+ ) -> HRESULT,
+ fn FinishInitialization(
+ pParameters: *const OPM_ENCRYPTED_INITIALIZATION_PARAMETERS,
+ ) -> HRESULT,
+ fn GetInformation(
+ pParameters: *const OPM_GET_INFO_PARAMETERS,
+ pRequestedInformation: *mut OPM_REQUESTED_INFORMATION,
+ ) -> HRESULT,
+ fn COPPCompatibleGetInformation(
+ pParameters: *const OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS,
+ pRequestedInformation: *mut OPM_REQUESTED_INFORMATION,
+ ) -> HRESULT,
+ fn Configure(
+ pParameters: *const OPM_CONFIGURE_PARAMETERS,
+ ulAdditionalParametersSize: ULONG,
+ pbAdditionalParameters: *const BYTE,
+ ) -> HRESULT,
+}}
+#[inline]
+pub fn GetBusType(ulBusTypeAndImplementation: ULONG) -> ULONG {
+ ulBusTypeAndImplementation & OPM_BUS_TYPE_MASK
+}
+#[inline]
+pub fn GetBusImplementation(ulBusTypeAndImplementation: ULONG) -> ULONG {
+ (ulBusTypeAndImplementation & OPM_BUS_IMPLEMENTATION_MODIFIER_MASK) >> 16
+}
+#[inline]
+pub fn IsNonStandardBusImplementation(ulBusTypeAndImplementation: ULONG) -> ULONG {
+ ulBusTypeAndImplementation & OPM_BUS_IMPLEMENTATION_MODIFIER_NON_STANDARD
+}
+extern "system" {
+ pub fn OPMGetVideoOutputsFromHMONITOR(
+ hMonitor: HMONITOR,
+ vos: OPM_VIDEO_OUTPUT_SEMANTICS,
+ pulNumVideoOutputs: *mut ULONG,
+ pppOPMVideoOutputArray: *mut *mut *mut IOPMVideoOutput,
+ ) -> HRESULT;
+ pub fn OPMGetVideoOutputForTarget(
+ pAdapterLuid: *mut LUID,
+ VidPnTarget: ULONG,
+ vos: OPM_VIDEO_OUTPUT_SEMANTICS,
+ ppOPMVideoOutput: *mut *mut IOPMVideoOutput,
+ ) -> HRESULT;
+ pub fn OPMGetVideoOutputsFromIDirect3DDevice9Object(
+ pDirect3DDevice9: *mut IDirect3DDevice9,
+ vos: OPM_VIDEO_OUTPUT_SEMANTICS,
+ pulNumVideoOutputs: *mut ULONG,
+ pppOPMVideoOutputArray: *mut *mut *mut IOPMVideoOutput,
+ ) -> HRESULT;
+}
diff --git a/vendor/winapi/src/um/pdh.rs b/vendor/winapi/src/um/pdh.rs
new file mode 100644
index 000000000..9ef4ee74a
--- /dev/null
+++ b/vendor/winapi/src/um/pdh.rs
@@ -0,0 +1,806 @@
+// 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.
+//! Common Performance Data Helper definitions
+use ctypes::c_double;
+use shared::basetsd::DWORD_PTR;
+use shared::guiddef::GUID;
+use shared::minwindef::{BOOL, DWORD, FILETIME, LPDWORD, UCHAR};
+use shared::windef::HWND;
+use um::winnt::{BOOLEAN, HANDLE, LONG, LONGLONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR};
+pub const PDH_FMT_RAW: DWORD = 0x00000010;
+pub const PDH_FMT_ANSI: DWORD = 0x00000020;
+pub const PDH_FMT_UNICODE: DWORD = 0x00000040;
+pub const PDH_FMT_LONG: DWORD = 0x00000100;
+pub const PDH_FMT_DOUBLE: DWORD = 0x00000200;
+pub const PDH_FMT_LARGE: DWORD = 0x00000400;
+pub const PDH_FMT_NOSCALE: DWORD = 0x00001000;
+pub const PDH_FMT_1000: DWORD = 0x00002000;
+pub const PDH_FMT_NODATA: DWORD = 0x00004000;
+pub const PDH_FMT_NOCAP100: DWORD = 0x00008000;
+pub const PERF_DETAIL_COSTLY: DWORD = 0x00010000;
+pub const PERF_DETAIL_STANDARD: DWORD = 0x0000FFFF;
+pub type PDH_STATUS = LONG;
+pub type PDH_HQUERY = HANDLE;
+pub type HQUERY = PDH_HQUERY;
+pub type PDH_HCOUNTER = HANDLE;
+pub type HCOUNTER = PDH_HCOUNTER;
+pub type PPDH_BROWSE_DLG_CONFIG_A = *mut PDH_BROWSE_DLG_CONFIG_A;
+pub type PPDH_BROWSE_DLG_CONFIG_W = *mut PDH_BROWSE_DLG_CONFIG_W;
+pub type PDH_HLOG = HANDLE;
+pub type PPDH_RAW_LOG_RECORD = *mut PDH_RAW_LOG_RECORD;
+pub type PPDH_TIME_INFO = *mut PDH_TIME_INFO;
+pub type PPDH_RAW_COUNTER = *mut PDH_RAW_COUNTER;
+pub type PPDH_COUNTER_INFO_A = *mut PDH_COUNTER_INFO_A;
+pub type PPDH_COUNTER_INFO_W = *mut PDH_COUNTER_INFO_W;
+pub type PPDH_STATISTICS = *mut PDH_STATISTICS;
+pub type PPDH_FMT_COUNTERVALUE_ITEM_A = *mut PDH_FMT_COUNTERVALUE_ITEM_A;
+pub type PPDH_FMT_COUNTERVALUE_ITEM_W = *mut PDH_FMT_COUNTERVALUE_ITEM_W;
+pub type PPDH_DATA_ITEM_PATH_ELEMENTS_A = *mut PDH_DATA_ITEM_PATH_ELEMENTS_A;
+pub type PPDH_DATA_ITEM_PATH_ELEMENTS_W = *mut PDH_DATA_ITEM_PATH_ELEMENTS_W;
+pub type PPDH_FMT_COUNTERVALUE = *mut PDH_FMT_COUNTERVALUE;
+FN!{stdcall CounterPathCallBack(
+ DWORD_PTR,
+) -> PDH_STATUS}
+pub type PPDH_COUNTER_PATH_ELEMENTS_A = *mut PDH_COUNTER_PATH_ELEMENTS_A;
+pub type PPDH_COUNTER_PATH_ELEMENTS_W = *mut PDH_COUNTER_PATH_ELEMENTS_W;
+pub type PPDH_BROWSE_DLG_CONFIG_HA = *mut PDH_BROWSE_DLG_CONFIG_HA;
+pub type PPDH_BROWSE_DLG_CONFIG_HW = *mut PDH_BROWSE_DLG_CONFIG_HW;
+UNION!{union PDH_FMT_COUNTERVALUE_u {
+ [u64; 1],
+ longValue longValue_mut: LONG,
+ doubleValue doubleValue_mut: c_double,
+ largeValue largeValue_mut: LONGLONG,
+ AnsiStringValue AnsiStringValue_mut: LPCSTR,
+ WideStringValue WideStringValue_mut: LPCWSTR,
+}}
+STRUCT!{struct PDH_FMT_COUNTERVALUE {
+ CStatus: DWORD,
+ u: PDH_FMT_COUNTERVALUE_u,
+}}
+STRUCT!{struct PDH_RAW_LOG_RECORD {
+ dwStructureSize: DWORD,
+ dwRecordType: DWORD,
+ dwItems: DWORD,
+ RawBytes: UCHAR,
+}}
+STRUCT!{struct PDH_TIME_INFO {
+ StartTime: LONGLONG,
+ EndTime: LONGLONG,
+ SampleCount: DWORD,
+}}
+STRUCT!{struct PDH_RAW_COUNTER {
+ CStatus: DWORD,
+ TimeStamp: FILETIME,
+ FirstValue: LONGLONG,
+ SecondValue: LONGLONG,
+ MultiCount: DWORD,
+}}
+STRUCT!{struct PDH_STATISTICS {
+ dwFormat: DWORD,
+ count: DWORD,
+ min: PDH_FMT_COUNTERVALUE,
+ max: PDH_FMT_COUNTERVALUE,
+ mean: PDH_FMT_COUNTERVALUE,
+}}
+STRUCT!{struct PDH_FMT_COUNTERVALUE_ITEM_A {
+ szName: LPSTR,
+ FmtValue: PDH_FMT_COUNTERVALUE,
+}}
+STRUCT!{struct PDH_FMT_COUNTERVALUE_ITEM_W {
+ szName: LPWSTR,
+ FmtValue: PDH_FMT_COUNTERVALUE,
+}}
+STRUCT!{struct PDH_BROWSE_DLG_CONFIG_A {
+ flags: DWORD,
+ hWndOwner: HWND,
+ szDataSource: LPSTR,
+ szReturnPathBuffer: LPSTR,
+ cchReturnPathLength: DWORD,
+ pCallBack: CounterPathCallBack,
+ dwCallBackArg: DWORD_PTR,
+ CallBackStatus: PDH_STATUS,
+ dwDefaultDetailLevel: DWORD,
+ szDialogBoxCaption: LPSTR,
+}}
+BITFIELD!{PDH_BROWSE_DLG_CONFIG_A flags: DWORD [
+ IncludeInstanceIndex set_IncludeInstanceIndex[0..1],
+ SingleCounterPerAdd set_SingleCounterPerAdd[1..2],
+ SingleCounterPerDialog set_SingleCounterPerDialog[2..3],
+ LocalCountersOnly set_LocalCountersOnly[3..4],
+ WildCardInstances set_WildCardInstances[4..5],
+ HideDetailBox set_HideDetailBox[5..6],
+ InitializePath set_InitializePath[6..7],
+ DisableMachineSelection set_DisableMachineSelection[7..8],
+ IncludeCostlyObjects set_IncludeCostlyObjects[8..9],
+ ShowObjectBrowser set_ShowObjectBrowser[9..10],
+]}
+STRUCT!{struct PDH_BROWSE_DLG_CONFIG_W {
+ flags: DWORD,
+ hWndOwner: HWND,
+ szDataSource: LPWSTR,
+ szReturnPathBuffer: LPWSTR,
+ cchReturnPathLength: DWORD,
+ pCallBack: CounterPathCallBack,
+ dwCallBackArg: DWORD_PTR,
+ CallBackStatus: PDH_STATUS,
+ dwDefaultDetailLevel: DWORD,
+ szDialogBoxCaption: LPWSTR,
+}}
+BITFIELD!{PDH_BROWSE_DLG_CONFIG_W flags: DWORD [
+ IncludeInstanceIndex set_IncludeInstanceIndex[0..1],
+ SingleCounterPerAdd set_SingleCounterPerAdd[1..2],
+ SingleCounterPerDialog set_SingleCounterPerDialog[2..3],
+ LocalCountersOnly set_LocalCountersOnly[3..4],
+ WildCardInstances set_WildCardInstances[4..5],
+ HideDetailBox set_HideDetailBox[5..6],
+ InitializePath set_InitializePath[6..7],
+ DisableMachineSelection set_DisableMachineSelection[7..8],
+ IncludeCostlyObjects set_IncludeCostlyObjects[8..9],
+ ShowObjectBrowser set_ShowObjectBrowser[9..10],
+]}
+STRUCT!{struct PDH_COUNTER_PATH_ELEMENTS_A {
+ szMachineName: LPSTR,
+ szObjectName: LPSTR,
+ szInstanceName: LPSTR,
+ szParentInstance: LPSTR,
+ dwInstanceIndex: DWORD,
+ szCounterName: LPSTR,
+}}
+STRUCT!{struct PDH_COUNTER_PATH_ELEMENTS_W {
+ szMachineName: LPWSTR,
+ szObjectName: LPWSTR,
+ szInstanceName: LPWSTR,
+ szParentInstance: LPWSTR,
+ dwInstanceIndex: DWORD,
+ szCounterName: LPWSTR,
+}}
+STRUCT!{struct PDH_DATA_ITEM_PATH_ELEMENTS_A {
+ szMachineName: LPSTR,
+ ObjectGUID: GUID,
+ dwItemId: DWORD,
+ szInstanceName: LPSTR,
+}}
+STRUCT!{struct PDH_DATA_ITEM_PATH_ELEMENTS_W {
+ szMachineName: LPWSTR,
+ ObjectGUID: GUID,
+ dwItemId: DWORD,
+ szInstanceName: LPWSTR,
+}}
+STRUCT!{struct PDH_COUNTER_INFO_A_u_s {
+ szMachineName: LPSTR,
+ szObjectName: LPSTR,
+ szInstanceName: LPSTR,
+ szParentInstance: LPSTR,
+ dwInstanceIndex: DWORD,
+ szCounterName: LPSTR,
+}}
+UNION!{union PDH_COUNTER_INFO_A_u {
+ [u32; 7] [u64; 6],
+ DataItemPath DataItemPath_mut: PDH_DATA_ITEM_PATH_ELEMENTS_A,
+ CounterPath CounterPath_mut: PDH_COUNTER_PATH_ELEMENTS_A,
+ s s_mut: PDH_COUNTER_INFO_A_u_s,
+}}
+STRUCT!{struct PDH_COUNTER_INFO_A {
+ dwLength: DWORD,
+ dwType: DWORD,
+ CVersion: DWORD,
+ CStatus: DWORD,
+ lScale: LONG,
+ lDefaultScale: LONG,
+ dwUserData: DWORD_PTR,
+ dwQueryUserData: DWORD_PTR,
+ szFullPath: LPSTR,
+ u: PDH_COUNTER_INFO_A_u,
+ szExplainText: LPSTR,
+ DataBuffer: [DWORD; 1],
+}}
+STRUCT!{struct PDH_COUNTER_INFO_W_u_s {
+ szMachineName: LPWSTR,
+ szObjectName: LPWSTR,
+ szInstanceName: LPWSTR,
+ szParentInstance: LPWSTR,
+ dwInstanceIndex: DWORD,
+ szCounterName: LPWSTR,
+}}
+UNION!{union PDH_COUNTER_INFO_W_u {
+ [u32; 7] [u64; 6],
+ DataItemPath DataItemPath_mut: PDH_DATA_ITEM_PATH_ELEMENTS_W,
+ CounterPath CounterPath_mut: PDH_COUNTER_PATH_ELEMENTS_W,
+ s s_mut: PDH_COUNTER_INFO_W_u_s,
+}}
+STRUCT!{struct PDH_COUNTER_INFO_W {
+ dwLength: DWORD,
+ dwType: DWORD,
+ CVersion: DWORD,
+ CStatus: DWORD,
+ lScale: LONG,
+ lDefaultScale: LONG,
+ dwUserData: DWORD_PTR,
+ dwQueryUserData: DWORD_PTR,
+ szFullPath: LPWSTR,
+ u: PDH_COUNTER_INFO_W_u,
+ szExplainText: LPWSTR,
+ DataBuffer: [DWORD; 1],
+}}
+STRUCT!{struct PDH_BROWSE_DLG_CONFIG_HA {
+ flags: DWORD,
+ hWndOwner: HWND,
+ hDataSource: PDH_HLOG,
+ szReturnPathBuffer: LPSTR,
+ cchReturnPathLength: DWORD,
+ pCallBack: CounterPathCallBack,
+ dwCallBackArg: DWORD_PTR,
+ CallBackStatus: PDH_STATUS,
+ dwDefaultDetailLevel: DWORD,
+ szDialogBoxCaption: LPSTR,
+}}
+BITFIELD!{PDH_BROWSE_DLG_CONFIG_HA flags: DWORD [
+ IncludeInstanceIndex set_IncludeInstanceIndex[0..1],
+ SingleCounterPerAdd set_SingleCounterPerAdd[1..2],
+ SingleCounterPerDialog set_SingleCounterPerDialog[2..3],
+ LocalCountersOnly set_LocalCountersOnly[3..4],
+ WildCardInstances set_WildCardInstances[4..5],
+ HideDetailBox set_HideDetailBox[5..6],
+ InitializePath set_InitializePath[6..7],
+ DisableMachineSelection set_DisableMachineSelection[7..8],
+ IncludeCostlyObjects set_IncludeCostlyObjects[8..9],
+ ShowObjectBrowser set_ShowObjectBrowser[9..10],
+]}
+STRUCT!{struct PDH_BROWSE_DLG_CONFIG_HW {
+ flags: DWORD,
+ hWndOwner: HWND,
+ hDataSource: PDH_HLOG,
+ szReturnPathBuffer: LPWSTR,
+ cchReturnPathLength: DWORD,
+ pCallBack: CounterPathCallBack,
+ dwCallBackArg: DWORD_PTR,
+ CallBackStatus: PDH_STATUS,
+ dwDefaultDetailLevel: DWORD,
+ szDialogBoxCaption: LPWSTR,
+}}
+BITFIELD!{PDH_BROWSE_DLG_CONFIG_HW flags: DWORD [
+ IncludeInstanceIndex set_IncludeInstanceIndex[0..1],
+ SingleCounterPerAdd set_SingleCounterPerAdd[1..2],
+ SingleCounterPerDialog set_SingleCounterPerDialog[2..3],
+ LocalCountersOnly set_LocalCountersOnly[3..4],
+ WildCardInstances set_WildCardInstances[4..5],
+ HideDetailBox set_HideDetailBox[5..6],
+ InitializePath set_InitializePath[6..7],
+ DisableMachineSelection set_DisableMachineSelection[7..8],
+ IncludeCostlyObjects set_IncludeCostlyObjects[8..9],
+ ShowObjectBrowser set_ShowObjectBrowser[9..10],
+]}
+extern "system" {
+ pub fn PdhGetDllVersion(
+ lpdwVersion: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhOpenQueryW(
+ szDataSource: LPCWSTR,
+ dwUserData: DWORD_PTR,
+ phQuery: *mut PDH_HQUERY,
+ ) -> PDH_STATUS;
+ pub fn PdhOpenQueryA(
+ szDataSource: LPCSTR,
+ dwUserData: DWORD_PTR,
+ phQuery: *mut PDH_HQUERY,
+ ) -> PDH_STATUS;
+ pub fn PdhAddCounterW(
+ hQuery: PDH_HQUERY,
+ szFullCounterPath: LPCWSTR,
+ dwUserData: DWORD_PTR,
+ phCounter: *mut PDH_HCOUNTER,
+ ) -> PDH_STATUS;
+ pub fn PdhAddCounterA(
+ hQuery: PDH_HQUERY,
+ szFullCounterPath: LPCSTR,
+ dwUserData: DWORD_PTR,
+ phCounter: *mut PDH_HCOUNTER,
+ ) -> PDH_STATUS;
+ pub fn PdhAddEnglishCounterW(
+ hQuery: PDH_HQUERY,
+ szFullCounterPath: LPCWSTR,
+ dwUserData: DWORD_PTR,
+ phCounter: *mut PDH_HCOUNTER,
+ ) -> PDH_STATUS;
+ pub fn PdhAddEnglishCounterA(
+ hQuery: PDH_HQUERY,
+ szFullCounterPath: LPCSTR,
+ dwUserData: DWORD_PTR,
+ phCounter: *mut PDH_HCOUNTER,
+ ) -> PDH_STATUS;
+ pub fn PdhCollectQueryDataWithTime(
+ hQuery: PDH_HQUERY,
+ pllTimeStamp: *mut LONGLONG,
+ ) -> PDH_STATUS;
+ pub fn PdhValidatePathExW(
+ hDataSource: PDH_HLOG,
+ szFullPathBuffer: LPCWSTR,
+ ) -> PDH_STATUS;
+ pub fn PdhValidatePathExA(
+ hDataSource: PDH_HLOG,
+ szFullPathBuffer: LPCSTR,
+ ) -> PDH_STATUS;
+ pub fn PdhRemoveCounter(
+ hCounter: PDH_HCOUNTER,
+ ) -> PDH_STATUS;
+ pub fn PdhCollectQueryData(
+ hQuery: PDH_HQUERY,
+ ) -> PDH_STATUS;
+ pub fn PdhCloseQuery(
+ hQuery: PDH_HQUERY,
+ ) -> PDH_STATUS;
+ pub fn PdhGetFormattedCounterValue(
+ hCounter: PDH_HCOUNTER,
+ dwFormat: DWORD,
+ lpdwType: LPDWORD,
+ pValue: PPDH_FMT_COUNTERVALUE,
+ ) -> PDH_STATUS;
+ pub fn PdhGetFormattedCounterArrayA(
+ hCounter: PDH_HCOUNTER,
+ dwFormat: DWORD,
+ lpdwBufferSize: LPDWORD,
+ lpdwBufferCount: LPDWORD,
+ ItemBuffer: PPDH_FMT_COUNTERVALUE_ITEM_A,
+ ) -> PDH_STATUS;
+ pub fn PdhGetFormattedCounterArrayW(
+ hCounter: PDH_HCOUNTER,
+ dwFormat: DWORD,
+ lpdwBufferSize: LPDWORD,
+ lpdwBufferCount: LPDWORD,
+ ItemBuffer: PPDH_FMT_COUNTERVALUE_ITEM_W,
+ ) -> PDH_STATUS;
+ pub fn PdhGetRawCounterValue(
+ hCounter: PDH_HCOUNTER,
+ lpdwType: LPDWORD,
+ pValue: PPDH_RAW_COUNTER,
+ ) -> PDH_STATUS;
+ pub fn PdhGetRawCounterArrayA(
+ hCounter: PDH_HCOUNTER,
+ dwFormat: DWORD,
+ lpdwBufferSize: LPDWORD,
+ lpdwBufferCount: LPDWORD,
+ ItemBuffer: PPDH_FMT_COUNTERVALUE_ITEM_A,
+ ) -> PDH_STATUS;
+ pub fn PdhGetRawCounterArrayW(
+ hCounter: PDH_HCOUNTER,
+ dwFormat: DWORD,
+ lpdwBufferSize: LPDWORD,
+ lpdwBufferCount: LPDWORD,
+ ItemBuffer: PPDH_FMT_COUNTERVALUE_ITEM_W,
+ ) -> PDH_STATUS;
+ pub fn PdhCalculateCounterFromRawValue(
+ hCounter: PDH_HCOUNTER,
+ dwFormat: DWORD,
+ rawValue1: PPDH_RAW_COUNTER,
+ rawValue2: PPDH_RAW_COUNTER,
+ fmtValue: PPDH_FMT_COUNTERVALUE,
+ ) -> PDH_STATUS;
+ pub fn PdhComputeCounterStatistics(
+ hCounter: PDH_HCOUNTER,
+ dwFormat: DWORD,
+ dwFirstEntry: DWORD,
+ dwNumEntries: DWORD,
+ lpRawValueArray: PPDH_RAW_COUNTER,
+ data: PPDH_STATISTICS,
+ ) -> PDH_STATUS;
+ pub fn PdhGetCounterInfoW(
+ hCounter: PDH_HCOUNTER,
+ bRetrieveExplainText: BOOLEAN,
+ pdwBufferSize: LPDWORD,
+ lpBuffer: PPDH_COUNTER_INFO_W,
+ ) -> PDH_STATUS;
+ pub fn PdhGetCounterInfoA(
+ hCounter: PDH_HCOUNTER,
+ bRetrieveExplainText: BOOLEAN,
+ pdwBufferSize: LPDWORD,
+ lpBuffer: PPDH_COUNTER_INFO_A,
+ ) -> PDH_STATUS;
+ pub fn PdhSetCounterScaleFactor(
+ hCounter: PDH_HCOUNTER,
+ lFactor: LONG,
+ ) -> PDH_STATUS;
+ pub fn PdhConnectMachineW(
+ szMachineName: LPCWSTR,
+ ) -> PDH_STATUS;
+ pub fn PdhConnectMachineA(
+ szMachineName: LPCSTR,
+ ) -> PDH_STATUS;
+ pub fn PdhEnumMachinesW(
+ szDataSource: LPCWSTR,
+ mszMachineNameList: LPWSTR,
+ pcchBufferLength: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhEnumMachinesA(
+ szDataSource: LPCSTR,
+ mszMachineNameList: LPSTR,
+ pcchBufferLength: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhEnumObjectsW(
+ szDataSource: LPCWSTR,
+ szMachineName: LPCWSTR,
+ mszObjectList: LPWSTR,
+ pcchBufferLength: LPDWORD,
+ dwDetailLevel: DWORD,
+ bRefresh: BOOL,
+ ) -> PDH_STATUS;
+ pub fn PdhEnumObjectsA(
+ szDataSource: LPCSTR,
+ szMachineName: LPCSTR,
+ mszObjectList: LPSTR,
+ pcchBufferLength: LPDWORD,
+ dwDetailLevel: DWORD,
+ bRefresh: BOOL,
+ ) -> PDH_STATUS;
+ pub fn PdhEnumObjectItemsW(
+ szDataSource: LPCWSTR,
+ szMachineName: LPCWSTR,
+ szObjectName: LPCWSTR,
+ mszCounterList: LPWSTR,
+ pcchCounterListLength: LPDWORD,
+ mszInstanceList: LPWSTR,
+ pcchInstanceListLength: LPDWORD,
+ dwDetailLevel: DWORD,
+ dwFlags: DWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhEnumObjectItemsA(
+ szDataSource: LPCSTR,
+ szMachineName: LPCSTR,
+ szObjectName: LPCSTR,
+ mszCounterList: LPSTR,
+ pcchCounterListLength: LPDWORD,
+ mszInstanceList: LPSTR,
+ pcchInstanceListLength: LPDWORD,
+ dwDetailLevel: DWORD,
+ dwFlags: DWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhMakeCounterPathW(
+ pCounterPathElements: PPDH_COUNTER_PATH_ELEMENTS_W,
+ szFullPathBuffer: LPWSTR,
+ pcchBufferSize: LPDWORD,
+ dwFlags: DWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhMakeCounterPathA(
+ pCounterPathElements: PPDH_COUNTER_PATH_ELEMENTS_A,
+ szFullPathBuffer: LPSTR,
+ pcchBufferSize: LPDWORD,
+ dwFlags: DWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhParseCounterPathW(
+ szFullPathBuffer: LPCWSTR,
+ pCounterPathElements: *mut PDH_COUNTER_PATH_ELEMENTS_W,
+ pcchBufferSize: LPDWORD,
+ dwFlags: DWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhParseCounterPathA(
+ szFullPathBuffer: LPCSTR,
+ pCounterPathElements: *mut PDH_COUNTER_PATH_ELEMENTS_A,
+ pcchBufferSize: LPDWORD,
+ dwFlags: DWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhParseInstanceNameW(
+ szInstanceString: LPCWSTR,
+ szInstanceName: LPWSTR,
+ pcchInstanceNameLength: LPDWORD,
+ szParentName: LPWSTR,
+ pcchParentNameLength: LPDWORD,
+ lpIndex: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhParseInstanceNameA(
+ szInstanceString: LPCSTR,
+ szInstanceName: LPSTR,
+ pcchInstanceNameLength: LPDWORD,
+ szParentName: LPSTR,
+ pcchParentNameLength: LPDWORD,
+ lpIndex: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhValidatePathW(
+ szFullCounterPath: LPCWSTR,
+ ) -> PDH_STATUS;
+ pub fn PdhValidatePathA(
+ szFullCounterPath: LPCSTR,
+ ) -> PDH_STATUS;
+ pub fn PdhGetDefaultPerfObjectW(
+ szDataSource: LPCWSTR,
+ szMachineName: LPCWSTR,
+ szDefaultObjectName: LPWSTR,
+ pcchBufferSize: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhGetDefaultPerfObjectA(
+ szDataSource: LPCSTR,
+ szMachineName: LPCSTR,
+ szDefaultObjectName: LPSTR,
+ pcchBufferSize: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhGetDefaultPerfCounterW(
+ szDataSource: LPCWSTR,
+ szMachineName: LPCWSTR,
+ szObjectName: LPCWSTR,
+ szDefaultCounterName: LPWSTR,
+ pcchBufferSize: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhGetDefaultPerfCounterA(
+ szDataSource: LPCSTR,
+ szMachineName: LPCSTR,
+ szObjectName: LPCSTR,
+ szDefaultCounterName: LPSTR,
+ pcchBufferSize: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhBrowseCountersW(
+ pBrowseDlgData: PPDH_BROWSE_DLG_CONFIG_W,
+ ) -> PDH_STATUS;
+ pub fn PdhBrowseCountersA(
+ pBrowseDlgData: PPDH_BROWSE_DLG_CONFIG_A,
+ ) -> PDH_STATUS;
+ pub fn PdhExpandCounterPathW(
+ szWildCardPath: LPCWSTR,
+ mszExpandedPathList: LPWSTR,
+ pcchPathListLength: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhExpandCounterPathA(
+ szWildCardPath: LPCSTR,
+ mszExpandedPathList: LPSTR,
+ pcchPathListLength: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhLookupPerfNameByIndexW(
+ szMachineName: LPCWSTR,
+ dwNameIndex: DWORD,
+ szNameBuffer: LPWSTR,
+ pcchNameBufferSize: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhLookupPerfNameByIndexA(
+ szMachineName: LPCSTR,
+ dwNameIndex: DWORD,
+ szNameBuffer: LPSTR,
+ pcchNameBufferSize: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhLookupPerfIndexByNameW(
+ szMachineName: LPCWSTR,
+ szNameBuffer: LPCWSTR,
+ pdwIndex: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhLookupPerfIndexByNameA(
+ szMachineName: LPCSTR,
+ szNameBuffer: LPCSTR,
+ pdwIndex: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhExpandWildCardPathW(
+ szDataSource: LPCWSTR,
+ szWildCardPath: LPCWSTR,
+ mszExpandedPathList: LPWSTR,
+ pcchPathListLength: LPDWORD,
+ dwFlags: DWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhExpandWildCardPathA(
+ szDataSource: LPCSTR,
+ szWildCardPath: LPCSTR,
+ mszExpandedPathList: LPSTR,
+ pcchPathListLength: LPDWORD,
+ dwFlags: DWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhOpenLogW(
+ szLogFileName: LPCWSTR,
+ dwAccessFlags: DWORD,
+ lpdwLogType: LPDWORD,
+ hQuery: PDH_HQUERY,
+ dwMaxSize: DWORD,
+ szUserCaption: LPCWSTR,
+ phLog: *mut PDH_HLOG,
+ ) -> PDH_STATUS;
+ pub fn PdhOpenLogA(
+ szLogFileName: LPCSTR,
+ dwAccessFlags: DWORD,
+ lpdwLogType: LPDWORD,
+ hQuery: PDH_HQUERY,
+ dwMaxSize: DWORD,
+ szUserCaption: LPCSTR,
+ phLog: *mut PDH_HLOG,
+ ) -> PDH_STATUS;
+ pub fn PdhUpdateLogW(
+ hLog: PDH_HLOG,
+ szUserString: LPCWSTR,
+ ) -> PDH_STATUS;
+ pub fn PdhUpdateLogA(
+ hLog: PDH_HLOG,
+ szUserString: LPCSTR,
+ ) -> PDH_STATUS;
+ pub fn PdhUpdateLogFileCatalog(
+ hLog: PDH_HLOG,
+ ) -> PDH_STATUS;
+ pub fn PdhGetLogFileSize(
+ hLog: PDH_HLOG,
+ llSize: *mut LONGLONG,
+ ) -> PDH_STATUS;
+ pub fn PdhCloseLog(
+ hLog: PDH_HLOG,
+ dwFlags: DWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhSelectDataSourceW(
+ hWndOwner: HWND,
+ dwFlags: DWORD,
+ szDataSource: LPWSTR,
+ pcchBufferLength: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhSelectDataSourceA(
+ hWndOwner: HWND,
+ dwFlags: DWORD,
+ szDataSource: LPSTR,
+ pcchBufferLength: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhIsRealTimeQuery(
+ hQuery: PDH_HQUERY,
+ ) -> PDH_STATUS;
+ pub fn PdhSetQueryTimeRange(
+ hQuery: PDH_HQUERY,
+ pInfo: PPDH_TIME_INFO,
+ ) -> PDH_STATUS;
+ pub fn PdhGetDataSourceTimeRangeW(
+ szDataSource: LPCWSTR,
+ pdwNumEntries: LPDWORD,
+ pInfo: PPDH_TIME_INFO,
+ pdwBufferSize: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhGetDataSourceTimeRangeA(
+ szDataSource: LPCSTR,
+ pdwNumEntries: LPDWORD,
+ pInfo: PPDH_TIME_INFO,
+ pdwBufferSize: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhCollectQueryDataEx(
+ hQuery: PDH_HQUERY,
+ dwIntervalTime: DWORD,
+ hNewDataEvent: HANDLE,
+ ) -> PDH_STATUS;
+ pub fn PdhFormatFromRawValue(
+ dwCounterType: DWORD,
+ dwFormat: DWORD,
+ pTimeBase: *mut LONGLONG,
+ rawValue1: PPDH_RAW_COUNTER,
+ rawValue2: PPDH_RAW_COUNTER,
+ fmtValue: PPDH_FMT_COUNTERVALUE,
+ ) -> PDH_STATUS;
+ pub fn PdhGetCounterTimeBase(
+ hCounter: PDH_HCOUNTER,
+ pTimeBase: *mut LONGLONG,
+ ) -> PDH_STATUS;
+ pub fn PdhReadRawLogRecord(
+ hLog: PDH_HLOG,
+ ftRecord: FILETIME,
+ pRawLogRecord: PPDH_RAW_LOG_RECORD,
+ pdwBufferLength: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhSetDefaultRealTimeDataSource(
+ dwDataSourceId: DWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhBindInputDataSourceW(
+ phDataSource: *mut PDH_HLOG,
+ szLogFileNameList: LPCWSTR,
+ ) -> PDH_STATUS;
+ pub fn PdhBindInputDataSourceA(
+ phDataSource: *mut PDH_HLOG,
+ szLogFileNameList: LPCSTR,
+ ) -> PDH_STATUS;
+ pub fn PdhOpenQueryH(
+ hDataSource: PDH_HLOG,
+ dwUserData: DWORD_PTR,
+ phQuery: *mut PDH_HQUERY,
+ ) -> PDH_STATUS;
+ pub fn PdhEnumMachinesHW(
+ hDataSource: PDH_HLOG,
+ mszMachineNameList: LPWSTR,
+ pcchBufferLength: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhEnumMachinesHA(
+ hDataSource: PDH_HLOG,
+ mszMachineNameList: LPSTR,
+ pcchBufferLength: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhEnumObjectsHW(
+ hDataSource: PDH_HLOG,
+ szMachineName: LPCWSTR,
+ mszObjectList: LPWSTR,
+ pcchBufferLength: LPDWORD,
+ dwDetailLevel: DWORD,
+ bRefresh: BOOL,
+ ) -> PDH_STATUS;
+ pub fn PdhEnumObjectsHA(
+ hDataSource: PDH_HLOG,
+ szMachineName: LPCSTR,
+ mszObjectList: LPSTR,
+ pcchBufferLength: LPDWORD,
+ dwDetailLevel: DWORD,
+ bRefresh: BOOL,
+ ) -> PDH_STATUS;
+ pub fn PdhEnumObjectItemsHW(
+ hDataSource: PDH_HLOG,
+ szMachineName: LPCWSTR,
+ szObjectName: LPCWSTR,
+ mszCounterList: LPWSTR,
+ pcchCounterListLength: LPDWORD,
+ mszInstanceList: LPWSTR,
+ pcchInstanceListLength: LPDWORD,
+ dwDetailLevel: DWORD,
+ dwFlags: DWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhEnumObjectItemsHA(
+ hDataSource: PDH_HLOG,
+ szMachineName: LPCSTR,
+ szObjectName: LPCSTR,
+ mszCounterList: LPSTR,
+ pcchCounterListLength: LPDWORD,
+ mszInstanceList: LPSTR,
+ pcchInstanceListLength: LPDWORD,
+ dwDetailLevel: DWORD,
+ dwFlags: DWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhExpandWildCardPathHW(
+ hDataSource: PDH_HLOG,
+ szWildCardPath: LPCWSTR,
+ mszExpandedPathList: LPWSTR,
+ pcchPathListLength: LPDWORD,
+ dwFlags: DWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhExpandWildCardPathHA(
+ hDataSource: PDH_HLOG,
+ szWildCardPath: LPCSTR,
+ mszExpandedPathList: LPSTR,
+ pcchPathListLength: LPDWORD,
+ dwFlags: DWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhGetDataSourceTimeRangeH(
+ hDataSource: PDH_HLOG,
+ pdwNumEntries: LPDWORD,
+ pInfo: PPDH_TIME_INFO,
+ pdwBufferSize: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhGetDefaultPerfObjectHW(
+ hDataSource: PDH_HLOG,
+ szMachineName: LPCWSTR,
+ szDefaultObjectName: LPWSTR,
+ pcchBufferSize: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhGetDefaultPerfObjectHA(
+ hDataSource: PDH_HLOG,
+ szMachineName: LPCSTR,
+ szDefaultObjectName: LPSTR,
+ pcchBufferSize: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhGetDefaultPerfCounterHW(
+ hDataSource: PDH_HLOG,
+ szMachineName: LPCWSTR,
+ szObjectName: LPCWSTR,
+ szDefaultCounterName: LPWSTR,
+ pcchBufferSize: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhGetDefaultPerfCounterHA(
+ hDataSource: PDH_HLOG,
+ szMachineName: LPCSTR,
+ szObjectName: LPCSTR,
+ szDefaultCounterName: LPSTR,
+ pcchBufferSize: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhBrowseCountersHW(
+ pBrowseDlgData: PPDH_BROWSE_DLG_CONFIG_HW,
+ ) -> PDH_STATUS;
+ pub fn PdhBrowseCountersHA(
+ pBrowseDlgData: PPDH_BROWSE_DLG_CONFIG_HA,
+ ) -> PDH_STATUS;
+ pub fn PdhEnumLogSetNamesW(
+ szDataSource: LPCWSTR,
+ mszLogSetNameList: LPWSTR,
+ pcchBufferLength: LPDWORD,
+ ) -> PDH_STATUS;
+ pub fn PdhEnumLogSetNamesA(
+ szDataSource: LPCSTR,
+ mszLogSetNameList: LPSTR,
+ pcchBufferLength: LPDWORD,
+ ) -> PDH_STATUS;
+}
+// pub fn PdhVerifySQLDBW() -> PDH_STATUS;
+// pub fn PdhVerifySQLDBA() -> PDH_STATUS;
+// pub fn PdhCreateSQLTablesW() -> PDH_STATUS;
+// pub fn PdhCreateSQLTablesA() -> PDH_STATUS;
+//pub fn PdhGetLogSetGUID() -> PDH_STATUS;
+// pub fn PdhSetLogSetRunID() -> PDH_STATUS;
diff --git a/vendor/winapi/src/um/perflib.rs b/vendor/winapi/src/um/perflib.rs
new file mode 100644
index 000000000..aea3bde94
--- /dev/null
+++ b/vendor/winapi/src/um/perflib.rs
@@ -0,0 +1,331 @@
+// 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;
+use shared::guiddef::{GUID, LPCGUID, LPGUID};
+use shared::minwindef::{DWORD, LPBYTE, LPDWORD, LPVOID, ULONG};
+use um::minwinbase::SYSTEMTIME;
+use um::winnt::{HANDLE, LONG, LONGLONG, LPCWSTR, PCWSTR, PHANDLE, PVOID, ULONGLONG};
+pub const PERF_PROVIDER_USER_MODE: ULONG = 0;
+pub const PERF_PROVIDER_KERNEL_MODE: ULONG = 1;
+pub const PERF_PROVIDER_DRIVER: ULONG = 2;
+pub const PERF_COUNTERSET_FLAG_MULTIPLE: ULONG = 2;
+pub const PERF_COUNTERSET_FLAG_AGGREGATE: ULONG = 4;
+pub const PERF_COUNTERSET_FLAG_HISTORY: ULONG = 8;
+pub const PERF_COUNTERSET_FLAG_INSTANCE: ULONG = 16;
+pub const PERF_COUNTERSET_SINGLE_INSTANCE: ULONG = 0;
+pub const PERF_COUNTERSET_MULTI_INSTANCES: ULONG = PERF_COUNTERSET_FLAG_MULTIPLE;
+pub const PERF_COUNTERSET_SINGLE_AGGREGATE: ULONG = PERF_COUNTERSET_FLAG_AGGREGATE;
+pub const PERF_COUNTERSET_MULTI_AGGREGATE: ULONG = PERF_COUNTERSET_FLAG_AGGREGATE
+ | PERF_COUNTERSET_FLAG_MULTIPLE;
+pub const PERF_COUNTERSET_SINGLE_AGGREGATE_HISTORY: ULONG = PERF_COUNTERSET_FLAG_HISTORY
+ | PERF_COUNTERSET_SINGLE_AGGREGATE;
+pub const PERF_COUNTERSET_INSTANCE_AGGREGATE: ULONG = PERF_COUNTERSET_MULTI_AGGREGATE
+ | PERF_COUNTERSET_FLAG_INSTANCE;
+pub const PERF_AGGREGATE_UNDEFINED: ULONG = 0;
+pub const PERF_AGGREGATE_TOTAL: ULONG = 1;
+pub const PERF_AGGREGATE_AVG: ULONG = 2;
+pub const PERF_AGGREGATE_MIN: ULONG = 3;
+pub const PERF_AGGREGATE_MAX: ULONG = 4;
+pub const PERF_ATTRIB_BY_REFERENCE: ULONGLONG = 0x0000000000000001;
+pub const PERF_ATTRIB_NO_DISPLAYABLE: ULONGLONG = 0x0000000000000002;
+pub const PERF_ATTRIB_NO_GROUP_SEPARATOR: ULONGLONG = 0x0000000000000004;
+pub const PERF_ATTRIB_DISPLAY_AS_REAL: ULONGLONG = 0x0000000000000008;
+pub const PERF_ATTRIB_DISPLAY_AS_HEX: ULONGLONG = 0x0000000000000010;
+STRUCT!{struct PERF_COUNTERSET_INFO {
+ CounterSetGuid: GUID,
+ ProviderGuid: GUID,
+ NumCounters: ULONG,
+ InstanceType: ULONG,
+}}
+pub type PPERF_COUNTERSET_INFO = *mut PERF_COUNTERSET_INFO;
+STRUCT!{struct PERF_COUNTER_INFO {
+ CounterId: ULONG,
+ Type: ULONG,
+ Attrib: ULONGLONG,
+ Size: ULONG,
+ DetailLevel: ULONG,
+ Scale: LONG,
+ Offset: LONG,
+}}
+pub type PPERF_COUNTER_INFO = *mut PERF_COUNTER_INFO;
+STRUCT!{struct PERF_COUNTERSET_INSTANCE {
+ CounterSetGuid: GUID,
+ dwSize: ULONG,
+ InstanceId: ULONG,
+ InstanceNameOffset: ULONG,
+ InstanceNameSize: ULONG,
+}}
+pub type PPERF_COUNTERSET_INSTANCE = *mut PERF_COUNTERSET_INSTANCE;
+STRUCT!{struct PERF_COUNTER_IDENTITY {
+ CounterSetGuid: GUID,
+ BufferSize: ULONG,
+ CounterId: ULONG,
+ InstanceId: ULONG,
+ MachineOffset: ULONG,
+ NameOffset: ULONG,
+ Reserved: ULONG,
+}}
+pub type PPERF_COUNTER_IDENTITY = *mut PERF_COUNTER_IDENTITY;
+pub const PERF_WILDCARD_COUNTER: ULONG = 0xFFFFFFFF;
+pub const PERF_WILDCARD_INSTANCE: &'static str = "*";
+pub const PERF_AGGREGATE_INSTANCE: &'static str = "_Total";
+pub const PERF_MAX_INSTANCE_NAME: ULONG = 1024;
+pub const PERF_ADD_COUNTER: ULONG = 1;
+pub const PERF_REMOVE_COUNTER: ULONG = 2;
+pub const PERF_ENUM_INSTANCES: ULONG = 3;
+pub const PERF_COLLECT_START: ULONG = 5;
+pub const PERF_COLLECT_END: ULONG = 6;
+pub const PERF_FILTER: ULONG = 9;
+FN!{stdcall PERFLIBREQUEST(
+ RequestCode: ULONG,
+ Buffer: PVOID,
+ BufferSize: ULONG,
+) -> ULONG}
+FN!{stdcall PERF_MEM_ALLOC(
+ AllocSize: SIZE_T,
+ pContext: LPVOID,
+) -> LPVOID}
+FN!{stdcall PERF_MEM_FREE(
+ pBuffer: LPVOID,
+ pContext: LPVOID,
+) -> ()}
+STRUCT!{struct PERF_PROVIDER_CONTEXT {
+ ContextSize: DWORD,
+ Reserved: DWORD,
+ ControlCallback: PERFLIBREQUEST,
+ MemAllocRoutine: PERF_MEM_ALLOC,
+ MemFreeRoutine: PERF_MEM_FREE,
+ pMemContext: LPVOID,
+}}
+pub type PPERF_PROVIDER_CONTEXT = *mut PERF_PROVIDER_CONTEXT;
+extern "system" {
+ pub fn PerfStartProviderEx(
+ ProviderGuid: LPGUID,
+ ProviderContext: PPERF_PROVIDER_CONTEXT,
+ Provider: PHANDLE,
+ ) -> ULONG;
+ pub fn PerfStartProvider(
+ ProviderGuid: LPGUID,
+ ControlCallback: PERFLIBREQUEST,
+ Provider: PHANDLE,
+ ) -> ULONG;
+ pub fn PerfStopProvider(
+ ProviderHandle: HANDLE,
+ ) -> ULONG;
+ pub fn PerfSetCounterSetInfo(
+ ProviderHandle: HANDLE,
+ Template: PPERF_COUNTERSET_INFO,
+ TemplateSize: ULONG,
+ ) -> ULONG;
+ pub fn PerfCreateInstance(
+ ProviderHandle: HANDLE,
+ CounterSetGuid: LPCGUID,
+ Name: PCWSTR,
+ Id: ULONG,
+ ) -> PPERF_COUNTERSET_INSTANCE;
+ pub fn PerfDeleteInstance(
+ Provider: HANDLE,
+ InstanceBlock: PPERF_COUNTERSET_INSTANCE,
+ ) -> ULONG;
+ pub fn PerfQueryInstance(
+ ProviderHandle: HANDLE,
+ CounterSetGuid: LPCGUID,
+ Name: LPCWSTR,
+ Id: ULONG,
+ ) -> PPERF_COUNTERSET_INSTANCE;
+ pub fn PerfSetCounterRefValue(
+ Provider: HANDLE,
+ Instance: PPERF_COUNTERSET_INSTANCE,
+ CounterId: ULONG,
+ Address: PVOID,
+ ) -> ULONG;
+ pub fn PerfSetULongCounterValue(
+ Provider: HANDLE,
+ Instance: PPERF_COUNTERSET_INSTANCE,
+ CounterId: ULONG,
+ Value: ULONG,
+ ) -> ULONG;
+ pub fn PerfSetULongLongCounterValue(
+ Provider: HANDLE,
+ Instance: PPERF_COUNTERSET_INSTANCE,
+ CounterId: ULONG,
+ Value: ULONGLONG,
+ ) -> ULONG;
+ pub fn PerfIncrementULongCounterValue(
+ Provider: HANDLE,
+ Instance: PPERF_COUNTERSET_INSTANCE,
+ CounterId: ULONG,
+ Value: ULONG,
+ ) -> ULONG;
+ pub fn PerfIncrementULongLongCounterValue(
+ Provider: HANDLE,
+ Instance: PPERF_COUNTERSET_INSTANCE,
+ CounterId: ULONG,
+ Value: ULONGLONG,
+ ) -> ULONG;
+ pub fn PerfDecrementULongCounterValue(
+ Provider: HANDLE,
+ Instance: PPERF_COUNTERSET_INSTANCE,
+ CounterId: ULONG,
+ Value: ULONG,
+ ) -> ULONG;
+ pub fn PerfDecrementULongLongCounterValue(
+ Provider: HANDLE,
+ Instance: PPERF_COUNTERSET_INSTANCE,
+ CounterId: ULONG,
+ Value: ULONGLONG,
+ ) -> ULONG;
+}
+STRUCT!{struct PERF_INSTANCE_HEADER {
+ Size: ULONG,
+ InstanceId: ULONG,
+}}
+pub type PPERF_INSTANCE_HEADER = *mut PERF_INSTANCE_HEADER;
+ENUM!{enum PerfRegInfoType {
+ PERF_REG_COUNTERSET_STRUCT = 1,
+ PERF_REG_COUNTER_STRUCT,
+ PERF_REG_COUNTERSET_NAME_STRING,
+ PERF_REG_COUNTERSET_HELP_STRING,
+ PERF_REG_COUNTER_NAME_STRINGS,
+ PERF_REG_COUNTER_HELP_STRINGS,
+ PERF_REG_PROVIDER_NAME,
+ PERF_REG_PROVIDER_GUID,
+ PERF_REG_COUNTERSET_ENGLISH_NAME,
+ PERF_REG_COUNTER_ENGLISH_NAMES,
+}}
+STRUCT!{struct PERF_COUNTERSET_REG_INFO {
+ CounterSetGuid: GUID,
+ CounterSetType: ULONG,
+ DetailLevel: ULONG,
+ NumCounters: ULONG,
+ InstanceType: ULONG,
+}}
+pub type PPERF_COUNTERSET_REG_INFO = *mut PERF_COUNTERSET_REG_INFO;
+STRUCT!{struct PERF_COUNTER_REG_INFO {
+ CounterId: ULONG,
+ Type: ULONG,
+ Attrib: ULONGLONG,
+ DetailLevel: ULONG,
+ DefaultScale: LONG,
+ BaseCounterId: ULONG,
+ PerfTimeId: ULONG,
+ PerfFreqId: ULONG,
+ MultiId: ULONG,
+ AggregateFinc: ULONG,
+ Reserved: ULONG,
+}}
+pub type PPERF_COUNTER_REG_INFO = *mut PERF_COUNTER_REG_INFO;
+STRUCT!{struct PERF_STRING_BUFFER_HEADER {
+ dwSize: DWORD,
+ dwCounters: DWORD,
+}}
+pub type PPERF_STRING_BUFFER_HEADER = *mut PERF_STRING_BUFFER_HEADER;
+STRUCT!{struct PERF_STRING_COUNTER_HEADER {
+ dwCounterId: DWORD,
+ dwOffset: DWORD,
+}}
+pub type PPERF_STRING_COUNTER_HEADER = *mut PERF_STRING_COUNTER_HEADER;
+STRUCT!{struct PERF_COUNTER_IDENTIFIER {
+ CounterSetGuid: GUID,
+ Status: ULONG,
+ Size: ULONG,
+ CounterId: ULONG,
+ InstanceId: ULONG,
+ Index: ULONG,
+ Reserved: ULONG,
+}}
+pub type PPERF_COUNTER_IDENTIFIER = *mut PERF_COUNTER_IDENTIFIER;
+STRUCT!{struct PERF_DATA_HEADER {
+ dwTotalSize: ULONG,
+ dwNumCounters: ULONG,
+ PerfTimeStamp: LONGLONG,
+ PerfTime100NSec: LONGLONG,
+ PrefFreq: LONGLONG,
+ SystemTime: SYSTEMTIME,
+}}
+pub type PPERF_DATA_HEADER = *mut PERF_DATA_HEADER;
+ENUM!{enum PerfCounterDataType {
+ PERF_ERROR_RETURN = 0,
+ PERF_SINGLE_COUNTER = 1,
+ PERF_MULTIPLE_COUNTERS = 2,
+ PERF_MULTIPLE_INSTANCES = 4,
+ PERF_COUNTERSET = 6,
+}}
+STRUCT!{struct PERF_COUNTER_HEADER {
+ dwStatus: ULONG,
+ dwType: PerfCounterDataType,
+ dwSize: ULONG,
+ Reserved: ULONG,
+}}
+pub type PPERF_COUNTER_HEADER = *mut PERF_COUNTER_HEADER;
+STRUCT!{struct PERF_MULTI_INSTANCES {
+ dwTotalSize: ULONG,
+ dwInstances: ULONG,
+}}
+pub type PPERF_MULTI_INSTANCES = *mut PERF_MULTI_INSTANCES;
+STRUCT!{struct PERF_MULTI_COUNTERS {
+ dwSize: ULONG,
+ dwCounters: ULONG,
+}}
+pub type PPERF_MULTI_COUNTERS = *mut PERF_MULTI_COUNTERS;
+STRUCT!{struct PERF_COUNTER_DATA {
+ dwDataSize: ULONG,
+ dwSize: ULONG,
+}}
+pub type PPERF_COUNTER_DATA = *mut PERF_COUNTER_DATA;
+extern "system" {
+ pub fn PerfEnumerateCounterSet(
+ szMachine: LPCWSTR,
+ pCounterSetIds: LPGUID,
+ cCounterSetIds: DWORD,
+ pcCounterSetIdsActual: LPDWORD,
+ ) -> ULONG;
+ pub fn PerfEnumerateCounterSetInstances(
+ szMachine: LPCWSTR,
+ pCounterSetIds: LPCGUID,
+ pInstances: PPERF_INSTANCE_HEADER,
+ cbInstances: DWORD,
+ pcbInstancesActual: LPDWORD,
+ ) -> ULONG;
+ pub fn PerfQueryCounterSetRegistrationInfo(
+ szMachine: LPCWSTR,
+ pCounterSetId: LPCGUID,
+ requestCode: PerfRegInfoType,
+ requestLangId: DWORD,
+ pbRegInfo: LPBYTE,
+ cbRegInfo: DWORD,
+ pcbRegInfoActual: LPDWORD,
+ ) -> ULONG;
+ pub fn PerfOpenQueryHandle(
+ szMachine: LPCWSTR,
+ hQuery: *mut HANDLE,
+ ) -> ULONG;
+ pub fn PerfCloseQueryHandle(
+ hQuery: HANDLE,
+ ) -> ULONG;
+ pub fn PerfQueryCounterInfo(
+ hQuery: HANDLE,
+ pCounters: PPERF_COUNTER_IDENTIFIER,
+ cbCounters: DWORD,
+ pcbCountersActual: LPDWORD,
+ ) -> ULONG;
+ pub fn PerfQueryCounterData(
+ hQuery: HANDLE,
+ pCounterBlock: PPERF_DATA_HEADER,
+ cbCounterBlock: DWORD,
+ pcbCounterBlockActual: LPDWORD,
+ ) -> ULONG;
+ pub fn PerfAddCounters(
+ hQuery: HANDLE,
+ pCounters: PPERF_COUNTER_IDENTIFIER,
+ cbCounters: DWORD,
+ ) -> ULONG;
+ pub fn PerfDeleteCounters(
+ hQuery: HANDLE,
+ pCounters: PPERF_COUNTER_IDENTIFIER,
+ cbCounters: DWORD,
+ ) -> ULONG;
+}
diff --git a/vendor/winapi/src/um/physicalmonitorenumerationapi.rs b/vendor/winapi/src/um/physicalmonitorenumerationapi.rs
new file mode 100644
index 000000000..b61ff7e00
--- /dev/null
+++ b/vendor/winapi/src/um/physicalmonitorenumerationapi.rs
@@ -0,0 +1,43 @@
+// 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::d3d9::IDirect3DDevice9;
+use shared::minwindef::{BOOL, DWORD, LPDWORD};
+use shared::windef::HMONITOR;
+use um::winnt::{HANDLE, HRESULT, WCHAR};
+pub type _BOOL = BOOL;
+pub const PHYSICAL_MONITOR_DESCRIPTION_SIZE: usize = 128;
+STRUCT!{#[repr(packed)] struct PHYSICAL_MONITOR {
+ hPhysicalMonitor: HANDLE,
+ szPhysicalMonitorDescription: [WCHAR; PHYSICAL_MONITOR_DESCRIPTION_SIZE],
+}}
+pub type LPPHYSICAL_MONITOR = *mut PHYSICAL_MONITOR;
+extern "system" {
+ pub fn GetNumberOfPhysicalMonitorsFromHMONITOR(
+ hMonitor: HMONITOR,
+ pdwNumberOfPhysicalMonitor: LPDWORD,
+ ) -> _BOOL;
+ pub fn GetNumberOfPhysicalMonitorsFromIDirect3DDevice9(
+ pDirect3DDevice9: *mut IDirect3DDevice9,
+ pdwNumberOfPhysicalMonitor: LPDWORD,
+ ) -> HRESULT;
+ pub fn GetPhysicalMonitorsFromHMONITOR(
+ hMonitor: HMONITOR,
+ dwPhysicalMonitorArraySize: DWORD,
+ pPhysicalMonitorArray: LPPHYSICAL_MONITOR,
+ ) -> _BOOL;
+ pub fn GetPhysicalMonitorsFromIDirect3DDevice9(
+ pDirect3DDevice9: IDirect3DDevice9,
+ dwPhysicalMonitorArraySize: DWORD,
+ pPhysicalMonitorArray: LPPHYSICAL_MONITOR,
+ ) -> HRESULT;
+ pub fn DestroyPhysicalMonitor(
+ hMonitor: HANDLE,
+ ) -> _BOOL;
+ pub fn DestroyPhysicalMonitors(
+ dwPhysicalMonitorArraySize: DWORD,
+ pPhysicalMonitorArray: LPPHYSICAL_MONITOR,
+ ) -> _BOOL;
+}
diff --git a/vendor/winapi/src/um/playsoundapi.rs b/vendor/winapi/src/um/playsoundapi.rs
new file mode 100644
index 000000000..9b0d0d50a
--- /dev/null
+++ b/vendor/winapi/src/um/playsoundapi.rs
@@ -0,0 +1,46 @@
+// 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.
+//! ApiSet Contract for api-ms-win-mm-playsound-l1-1-0
+use shared::minwindef::{BOOL, DWORD, HMODULE, UINT};
+use um::winnt::{LPCSTR, LPCWSTR};
+extern "system" {
+ pub fn sndPlaySoundA(
+ pszSound: LPCSTR,
+ fuSound: UINT,
+ ) -> BOOL;
+ pub fn sndPlaySoundW(
+ pszSound: LPCWSTR,
+ fuSound: UINT,
+ ) -> BOOL;
+}
+pub const SND_SYNC: DWORD = 0x0000;
+pub const SND_ASYNC: DWORD = 0x0001;
+pub const SND_NODEFAULT: DWORD = 0x0002;
+pub const SND_MEMORY: DWORD = 0x0004;
+pub const SND_LOOP: DWORD = 0x0008;
+pub const SND_NOSTOP: DWORD = 0x0010;
+pub const SND_NOWAIT: DWORD = 0x00002000;
+pub const SND_ALIAS: DWORD = 0x00010000;
+pub const SND_ALIAS_ID: DWORD = 0x00110000;
+pub const SND_FILENAME: DWORD = 0x00020000;
+pub const SND_RESOURCE: DWORD = 0x00040004;
+pub const SND_PURGE: DWORD = 0x0040;
+pub const SND_APPLICATION: DWORD = 0x0080;
+pub const SND_SENTRY: DWORD = 0x00080000;
+pub const SND_RING: DWORD = 0x00100000;
+pub const SND_SYSTEM: DWORD = 0x00200000;
+extern "system" {
+ pub fn PlaySoundA(
+ pszSound: LPCSTR,
+ hmod: HMODULE,
+ fdwSound: DWORD,
+ ) -> BOOL;
+ pub fn PlaySoundW(
+ pszSound: LPCWSTR,
+ hmod: HMODULE,
+ fdwSound: DWORD,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/portabledevice.rs b/vendor/winapi/src/um/portabledevice.rs
new file mode 100644
index 000000000..68d63485b
--- /dev/null
+++ b/vendor/winapi/src/um/portabledevice.rs
@@ -0,0 +1,163 @@
+// 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 PortableDevice.h
+use shared::basetsd::ULONG_PTR;
+use shared::wtypes::PROPERTYKEY;
+DEFINE_GUID!{GUID_DEVINTERFACE_WPD,
+ 0x6AC27878, 0xA6FA, 0x4155, 0xBA, 0x85, 0xF9, 0x8F, 0x49, 0x1D, 0x4F, 0x33}
+DEFINE_GUID!{GUID_DEVINTERFACE_WPD_PRIVATE,
+ 0xBA0C718F, 0x4DED, 0x49B7, 0xBD, 0xD3, 0xFA, 0xBE, 0x28, 0x66, 0x12, 0x11}
+DEFINE_GUID!{GUID_DEVINTERFACE_WPD_SERVICE,
+ 0x9EF44F80, 0x3D64, 0x4246, 0xA6, 0xAA, 0x20, 0x6F, 0x32, 0x8D, 0x1E, 0xDC}
+//51
+pub const WPD_DEVICE_OBJECT_ID: &'static str = "DEVICE";
+pub const WMDRMDEVICEAPP_USE_WPD_DEVICE_PTR: ULONG_PTR = -1isize as ULONG_PTR;
+pub const PORTABLE_DEVICE_TYPE: &'static str = "PortableDeviceType";
+pub const PORTABLE_DEVICE_ICON: &'static str = "Icons";
+pub const PORTABLE_DEVICE_NAMESPACE_TIMEOUT: &'static str = "PortableDeviceNameSpaceTimeout";
+pub const PORTABLE_DEVICE_NAMESPACE_EXCLUDE_FROM_SHELL: &'static str
+ = "PortableDeviceNameSpaceExcludeFromShell";
+pub const PORTABLE_DEVICE_NAMESPACE_THUMBNAIL_CONTENT_TYPES: &'static str
+ = "PortableDeviceNameSpaceThumbnailContentTypes";
+pub const PORTABLE_DEVICE_IS_MASS_STORAGE: &'static str = "PortableDeviceIsMassStorage";
+pub const PORTABLE_DEVICE_DRM_SCHEME_WMDRM10_PD: &'static str = "WMDRM10-PD";
+pub const PORTABLE_DEVICE_DRM_SCHEME_PDDRM: &'static str = "PDDRM";
+//101
+ENUM!{enum WPD_DEVICE_TYPES {
+ WPD_DEVICE_TYPE_GENERIC = 0,
+ WPD_DEVICE_TYPE_CAMERA = 1,
+ WPD_DEVICE_TYPE_MEDIA_PLAYER = 2,
+ WPD_DEVICE_TYPE_PHONE = 3,
+ WPD_DEVICE_TYPE_VIDEO = 4,
+ WPD_DEVICE_TYPE_PERSONAL_INFORMATION_MANAGER = 5,
+ WPD_DEVICE_TYPE_AUDIO_RECORDER = 6,
+}}
+//133
+ENUM!{enum WPD_DEVICE_TRANSPORTS {
+ WPD_DEVICE_TRANSPORT_UNSPECIFIED = 0,
+ WPD_DEVICE_TRANSPORT_USB = 1,
+ WPD_DEVICE_TRANSPORT_IP = 2,
+ WPD_DEVICE_TRANSPORT_BLUETOOTH = 3,
+}}
+//175
+ENUM!{enum WPD_POWER_SOURCES {
+ WPD_POWER_SOURCE_BATTERY = 0,
+ WPD_POWER_SOURCE_EXTERNAL = 1,
+}}
+//696
+DEFINE_GUID!{WPD_FUNCTIONAL_OBJECT_PROPERTIES_V1,
+ 0x8F052D93, 0xABCA, 0x4FC5, 0xA5, 0xAC, 0xB0, 0x1D, 0xF4, 0xDB, 0xE5, 0x98}
+DEFINE_PROPERTYKEY!{WPD_FUNCTIONAL_OBJECT_CATEGORY,
+ 0x8F052D93, 0xABCA, 0x4FC5, 0xA5, 0xAC, 0xB0, 0x1D, 0xF4, 0xDB, 0xE5, 0x98, 2}
+//1140
+DEFINE_GUID!{WPD_DEVICE_PROPERTIES_V1,
+ 0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B, 0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_SYNC_PARTNER,
+ 0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B, 0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC, 2}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_FIRMWARE_VERSION,
+ 0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B, 0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC, 3}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_POWER_LEVEL,
+ 0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B, 0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC, 4}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_POWER_SOURCE,
+ 0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B, 0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC, 5}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_PROTOCOL,
+ 0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B, 0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC, 6}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_MANUFACTURER,
+ 0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B, 0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC, 7}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_MODEL,
+ 0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B, 0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC, 8}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_SERIAL_NUMBER,
+ 0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B, 0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC, 9}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_SUPPORTS_NON_CONSUMABLE,
+ 0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B, 0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC, 10}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_DATETIME,
+ 0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B, 0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC, 11}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_FRIENDLY_NAME,
+ 0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B, 0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC, 12}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_SUPPORTED_DRM_SCHEMES,
+ 0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B, 0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC, 13}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_SUPPORTED_FORMATS_ARE_ORDERED,
+ 0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B, 0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC, 14}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_TYPE,
+ 0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B, 0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC, 15}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_NETWORK_IDENTIFIER,
+ 0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B, 0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC, 16}
+DEFINE_GUID!{WPD_DEVICE_PROPERTIES_V2,
+ 0x463DD662, 0x7FC4, 0x4291, 0x91, 0x1C, 0x7F, 0x4C, 0x9C, 0xCA, 0x97, 0x99}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_FUNCTIONAL_UNIQUE_ID,
+ 0x463DD662, 0x7FC4, 0x4291, 0x91, 0x1C, 0x7F, 0x4C, 0x9C, 0xCA, 0x97, 0x99, 2}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_MODEL_UNIQUE_ID,
+ 0x463DD662, 0x7FC4, 0x4291, 0x91, 0x1C, 0x7F, 0x4C, 0x9C, 0xCA, 0x97, 0x99, 3}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_TRANSPORT,
+ 0x463DD662, 0x7FC4, 0x4291, 0x91, 0x1C, 0x7F, 0x4C, 0x9C, 0xCA, 0x97, 0x99, 4}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_USE_DEVICE_STAGE,
+ 0x463DD662, 0x7FC4, 0x4291, 0x91, 0x1C, 0x7F, 0x4C, 0x9C, 0xCA, 0x97, 0x99, 5}
+DEFINE_GUID!{WPD_DEVICE_PROPERTIES_V3,
+ 0x6C2B878C, 0xC2EC, 0x490D, 0xB4, 0x25, 0xD7, 0xA7, 0x5E, 0x23, 0xE5, 0xED}
+DEFINE_PROPERTYKEY!{WPD_DEVICE_EDP_IDENTITY,
+ 0x6C2B878C, 0xC2EC, 0x490D, 0xB4, 0x25, 0xD7, 0xA7, 0x5E, 0x23, 0xE5, 0xED, 1}
+//1488
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_COMMON_COMMAND_CATEGORY,
+ 0xF0422A9C, 0x5DC8, 0x4440, 0xB5, 0xBD, 0x5D, 0xF2, 0x88, 0x35, 0x65, 0x8A, 1001}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_COMMON_COMMAND_ID,
+ 0xF0422A9C, 0x5DC8, 0x4440, 0xB5, 0xBD, 0x5D, 0xF2, 0x88, 0x35, 0x65, 0x8A, 1002}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_COMMON_HRESULT,
+ 0xF0422A9C, 0x5DC8, 0x4440, 0xB5, 0xBD, 0x5D, 0xF2, 0x88, 0x35, 0x65, 0x8A, 1003}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_COMMON_DRIVER_ERROR_CODE,
+ 0xF0422A9C, 0x5DC8, 0x4440, 0xB5, 0xBD, 0x5D, 0xF2, 0x88, 0x35, 0x65, 0x8A, 1004}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_COMMON_COMMAND_TARGET,
+ 0xF0422A9C, 0x5DC8, 0x4440, 0xB5, 0xBD, 0x5D, 0xF2, 0x88, 0x35, 0x65, 0x8A, 1006}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_COMMON_PERSISTENT_UNIQUE_IDS,
+ 0xF0422A9C, 0x5DC8, 0x4440, 0xB5, 0xBD, 0x5D, 0xF2, 0x88, 0x35, 0x65, 0x8A, 1007}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_COMMON_OBJECT_IDS,
+ 0xF0422A9C, 0x5DC8, 0x4440, 0xB5, 0xBD, 0x5D, 0xF2, 0x88, 0x35, 0x65, 0x8A, 1008}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_COMMON_CLIENT_INFORMATION,
+ 0xF0422A9C, 0x5DC8, 0x4440, 0xB5, 0xBD, 0x5D, 0xF2, 0x88, 0x35, 0x65, 0x8A, 1009}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_COMMON_CLIENT_INFORMATION_CONTEXT,
+ 0xF0422A9C, 0x5DC8, 0x4440, 0xB5, 0xBD, 0x5D, 0xF2, 0x88, 0x35, 0x65, 0x8A, 1010}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_COMMON_ACTIVITY_ID,
+ 0xF0422A9C, 0x5DC8, 0x4440, 0xB5, 0xBD, 0x5D, 0xF2, 0x88, 0x35, 0x65, 0x8A, 1011}
+DEFINE_PROPERTYKEY!{WPD_OPTION_VALID_OBJECT_IDS,
+ 0xF0422A9C, 0x5DC8, 0x4440, 0xB5, 0xBD, 0x5D, 0xF2, 0x88, 0x35, 0x65, 0x8A, 5001}
+//3440
+DEFINE_PROPERTYKEY!{WPD_OBJECT_ID,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 2}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_PARENT_ID,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 3}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_NAME,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 4}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_PERSISTENT_UNIQUE_ID,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 5}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_FORMAT,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 6}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_ISHIDDEN,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 9}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_ISSYSTEM,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 10}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_SIZE,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 11}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_ORIGINAL_FILE_NAME,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 12}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_NON_CONSUMABLE,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 13}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_KEYWORDS,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 15}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_SYNC_ID,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 16}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_IS_DRM_PROTECTED,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 17}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_DATE_CREATED,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 18}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_DATE_MODIFIED,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 19}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_DATE_AUTHORED,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 20}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_BACK_REFERENCES,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 21}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_CAN_DELETE,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 26}
+DEFINE_PROPERTYKEY!{WPD_OBJECT_LANGUAGE_LOCALE,
+ 0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C, 27}
diff --git a/vendor/winapi/src/um/portabledeviceapi.rs b/vendor/winapi/src/um/portabledeviceapi.rs
new file mode 100644
index 000000000..a694e7e2d
--- /dev/null
+++ b/vendor/winapi/src/um/portabledeviceapi.rs
@@ -0,0 +1,288 @@
+// 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 PortableDeviceApi.h
+use shared::guiddef::REFGUID;
+use shared::minwindef::{BYTE, DWORD, ULONG};
+use um::objidlbase::IStream;
+use um::portabledevicetypes::{
+ IPortableDeviceKeyCollection, IPortableDevicePropVariantCollection, IPortableDeviceValues,
+};
+use um::propkeydef::REFPROPERTYKEY;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPCWSTR, LPWSTR, WCHAR};
+// 328
+RIDL!{#[uuid(0xa1567595, 0x4c2f, 0x4574, 0xa6, 0xfa, 0xec, 0xef, 0x91, 0x7b, 0x9a, 0x40)]
+interface IPortableDeviceManager(IPortableDeviceManagerVtbl): IUnknown(IUnknownVtbl) {
+ fn GetDevices(
+ pPnPDeviceIDs: *mut LPWSTR,
+ pcPnPDeviceIDs: *mut DWORD,
+ ) -> HRESULT,
+ fn RefreshDeviceList() -> HRESULT,
+ fn GetDeviceFriendlyName(
+ pszPnPDeviceID: LPCWSTR,
+ pDeviceFriendlyName: *mut WCHAR,
+ pcchDeviceFriendlyName: *mut DWORD,
+ ) -> HRESULT,
+ fn GetDeviceDescription(
+ pszPnPDeviceID: LPCWSTR,
+ pDeviceDescription: *mut WCHAR,
+ pcchDeviceDescription: *mut DWORD,
+ ) -> HRESULT,
+ fn GetDeviceManufacturer(
+ pszPnPDeviceID: LPCWSTR,
+ pDeviceManufacturer: *mut WCHAR,
+ pcchDeviceManufacturer: *mut DWORD,
+ ) -> HRESULT,
+ fn GetDeviceProperty(
+ pszPnPDeviceID: LPCWSTR,
+ pszDevicePropertyName: LPCWSTR,
+ pData: *mut BYTE,
+ pcbData: *mut DWORD,
+ pdwType: *mut DWORD,
+ ) -> HRESULT,
+ fn GetPrivateDevices(
+ pPnPDeviceIDs: *mut LPWSTR,
+ pcPnPDeviceIDs: *mut DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x625e2df8, 0x6392, 0x4cf0, 0x9a, 0xd1, 0x3c, 0xfa, 0x5f, 0x17, 0x77, 0x5c)]
+interface IPortableDevice(IPortableDeviceVtbl): IUnknown(IUnknownVtbl) {
+ fn Open(
+ pszPnPDeviceID: LPCWSTR,
+ pClientInfo: *mut IPortableDeviceValues,
+ ) -> HRESULT,
+ fn SendCommand(
+ dwFlags: DWORD,
+ pParameters: *mut IPortableDeviceValues,
+ ppResults: *mut *mut IPortableDeviceValues,
+ ) -> HRESULT,
+ fn Content(
+ ppContent: *mut *mut IPortableDeviceContent,
+ ) -> HRESULT,
+ fn Capabilities(
+ ppCapabilities: *mut *mut IPortableDeviceCapabilities,
+ ) -> HRESULT,
+ fn Cancel() -> HRESULT,
+ fn Close() -> HRESULT,
+ fn Advise(
+ dwFlags: DWORD,
+ pCallback: *mut IPortableDeviceEventCallback,
+ pParameters: *mut IPortableDeviceValues,
+ ppszCookie: *mut LPWSTR,
+ ) -> HRESULT,
+ fn Unadvise(
+ pszCookie: LPCWSTR,
+ ) -> HRESULT,
+ fn GetPnPDeviceID(
+ ppszPnPDeviceID: *mut LPWSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x6a96ed84, 0x7c73, 0x4480, 0x99, 0x38, 0xbf, 0x5a, 0xf4, 0x77, 0xd4, 0x26)]
+interface IPortableDeviceContent(IPortableDeviceContentVtbl): IUnknown(IUnknownVtbl) {
+ fn EnumObjects(
+ dwFlags: DWORD,
+ pszParentObjectID: LPCWSTR,
+ pFilter: *mut IPortableDeviceValues,
+ ppEnum: *mut *mut IEnumPortableDeviceObjectIDs,
+ ) -> HRESULT,
+ fn Properties(
+ ppProperties: *mut *mut IPortableDeviceProperties,
+ ) -> HRESULT,
+ fn Transfer(
+ ppResources: *mut *mut IPortableDeviceResources,
+ ) -> HRESULT,
+ fn CreateObjectWithPropertiesOnly(
+ pValues: *mut IPortableDeviceValues,
+ ppszObjectID: *mut LPWSTR,
+ ) -> HRESULT,
+ fn CreateObjectWithPropertiesAndData(
+ pValues: *mut IPortableDeviceValues,
+ ppData: *mut *mut IStream,
+ pdwOptimalWriteBufferSize: *mut DWORD,
+ ppszCookie: *mut LPWSTR,
+ ) -> HRESULT,
+ fn Delete(
+ dwOptions: DWORD,
+ pObjectIDs: *mut IPortableDevicePropVariantCollection,
+ ppResults: *mut *mut IPortableDevicePropVariantCollection,
+ ) -> HRESULT,
+ fn GetObjectIDsFromPersistentUniqueIDs(
+ pPersistentUniqueIDs: *mut IPortableDevicePropVariantCollection,
+ ppObjectIDs: *mut *mut IPortableDevicePropVariantCollection,
+ ) -> HRESULT,
+ fn Cancel() -> HRESULT,
+ fn Move(
+ pObjectIDs: *mut IPortableDevicePropVariantCollection,
+ pszDestinationFolderObjectID: LPCWSTR,
+ ppResults: *mut *mut IPortableDevicePropVariantCollection,
+ ) -> HRESULT,
+ fn Copy(
+ pObjectIDs: *mut IPortableDevicePropVariantCollection,
+ pszDestinationFolderObjectID: LPCWSTR,
+ ppResults: *mut *mut IPortableDevicePropVariantCollection,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x9b4add96, 0xf6bf, 0x4034, 0x87, 0x08, 0xec, 0xa7, 0x2b, 0xf1, 0x05, 0x54)]
+interface IPortableDeviceContent2(IPortableDeviceContent2Vtbl):
+ IPortableDeviceContent(IPortableDeviceContentVtbl) {
+ fn UpdateObjectWithPropertiesAndData(
+ pszObjectID: LPCWSTR,
+ pProperties: *mut IPortableDeviceValues,
+ ppData: *mut *mut IStream,
+ pdwOptimalWriteBufferSize: *mut DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x10ece955, 0xcf41, 0x4728, 0xbf, 0xa0, 0x41, 0xee, 0xdf, 0x1b, 0xbf, 0x19)]
+interface IEnumPortableDeviceObjectIDs(IEnumPortableDeviceObjectIDsVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ cObjects: ULONG,
+ pObjIDs: *mut LPWSTR,
+ pcFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ cObjects: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppEnum: *mut *mut IEnumPortableDeviceObjectIDs,
+ ) -> HRESULT,
+ fn Cancel() -> HRESULT,
+}}
+RIDL!{#[uuid(0x7f6d695c, 0x03df, 0x4439, 0xa8, 0x09, 0x59, 0x26, 0x6b, 0xee, 0xe3, 0xa6)]
+interface IPortableDeviceProperties(IPortableDevicePropertiesVtbl): IUnknown(IUnknownVtbl) {
+ fn GetSupportedProperties(
+ pszObjectID: LPCWSTR,
+ ppKeys: *mut *mut IPortableDeviceKeyCollection,
+ ) -> HRESULT,
+ fn GetPropertyAttributes(
+ pszObjectID: LPCWSTR,
+ Key: REFPROPERTYKEY,
+ ppAttributes: *mut *mut IPortableDeviceValues,
+ ) -> HRESULT,
+ fn GetValues(
+ pszObjectID: LPCWSTR,
+ pKeys: *mut IPortableDeviceKeyCollection,
+ ppValues: *mut *mut IPortableDeviceValues,
+ ) -> HRESULT,
+ fn SetValues(
+ pszObjectID: LPCWSTR,
+ pValues: *mut IPortableDeviceValues,
+ ppResults: *mut *mut IPortableDeviceValues,
+ ) -> HRESULT,
+ fn Delete(
+ pszObjectID: LPCWSTR,
+ pKeys: *mut IPortableDeviceKeyCollection,
+ ) -> HRESULT,
+ fn Cancel() -> HRESULT,
+}}
+RIDL!{#[uuid(0xfd8878ac, 0xd841, 0x4d17, 0x89, 0x1c, 0xe6, 0x82, 0x9c, 0xdb, 0x69, 0x34)]
+interface IPortableDeviceResources(IPortableDeviceResourcesVtbl): IUnknown(IUnknownVtbl) {
+ fn GetSupportedResources(
+ pszObjectID: LPCWSTR,
+ ppKeys: *mut *mut IPortableDeviceKeyCollection,
+ ) -> HRESULT,
+ fn GetResourceAttributes(
+ pszObjectID: LPCWSTR,
+ Key: REFPROPERTYKEY,
+ ppResourceAttributes: *mut *mut IPortableDeviceValues,
+ ) -> HRESULT,
+ fn GetStream(
+ pszObjectID: LPCWSTR,
+ Key: REFPROPERTYKEY,
+ dwMode: DWORD,
+ pdwOptimalBufferSize: *mut DWORD,
+ ppStream: *mut *mut IStream,
+ ) -> HRESULT,
+ fn Delete(
+ pszObjectID: LPCWSTR,
+ pKeys: *mut IPortableDeviceKeyCollection,
+ ) -> HRESULT,
+ fn Cancel() -> HRESULT,
+ fn CreateResource(
+ pResourceAttributes: *mut IPortableDeviceValues,
+ ppData: *mut *mut IStream,
+ pdwOptimalWriteBufferSize: *mut DWORD,
+ ppszCookie: *mut LPWSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x2c8c6dbf, 0xe3dc, 0x4061, 0xbe, 0xcc, 0x85, 0x42, 0xe8, 0x10, 0xd1, 0x26)]
+interface IPortableDeviceCapabilities(IPortableDeviceCapabilitiesVtbl): IUnknown(IUnknownVtbl) {
+ fn GetSupportedCommands(
+ ppCommands: *mut *mut IPortableDeviceKeyCollection,
+ ) -> HRESULT,
+ fn GetCommandOptions(
+ Command: REFPROPERTYKEY,
+ ppOptions: *mut *mut IPortableDeviceValues,
+ ) -> HRESULT,
+ fn GetFunctionalCategories(
+ ppCategories: *mut *mut IPortableDevicePropVariantCollection,
+ ) -> HRESULT,
+ fn GetFunctionalObjects(
+ Category: REFGUID,
+ ppObjectIDs: *mut *mut IPortableDevicePropVariantCollection,
+ ) -> HRESULT,
+ fn GetSupportedContentTypes(
+ Category: REFGUID,
+ ppContentTypes: *mut *mut IPortableDevicePropVariantCollection,
+ ) -> HRESULT,
+ fn GetSupportedFormats(
+ ContentType: REFGUID,
+ ppFormats: *mut *mut IPortableDevicePropVariantCollection,
+ ) -> HRESULT,
+ fn GetSupportedFormatProperties(
+ Format: REFGUID,
+ ppKeys: *mut *mut IPortableDeviceKeyCollection,
+ ) -> HRESULT,
+ fn GetFixedPropertyAttributes(
+ Format: REFGUID,
+ Key: REFPROPERTYKEY,
+ ppAttributes: *mut *mut IPortableDeviceValues,
+ ) -> HRESULT,
+ fn Cancel() -> HRESULT,
+ fn GetSupportedEvents(
+ ppEvents: *mut *mut IPortableDevicePropVariantCollection,
+ ) -> HRESULT,
+ fn GetEventOptions(
+ Event: REFGUID,
+ ppOptions: *mut *mut IPortableDeviceValues,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa8792a31, 0xf385, 0x493c, 0xa8, 0x93, 0x40, 0xf6, 0x4e, 0xb4, 0x5f, 0x6e)]
+interface IPortableDeviceEventCallback(IPortableDeviceEventCallbackVtbl): IUnknown(IUnknownVtbl) {
+ fn OnEvent(
+ pEventParameters: *mut IPortableDeviceValues,
+ ) -> HRESULT,
+}}
+DEFINE_GUID!{LIBID_PortableDeviceApiLib,
+ 0x1f001332, 0x1a57, 0x4934, 0xbe, 0x31, 0xaf, 0xfc, 0x99, 0xf4, 0xee, 0x0a}
+DEFINE_GUID!{CLSID_PortableDevice,
+ 0x728a21c5, 0x3d9e, 0x48d7, 0x98, 0x10, 0x86, 0x48, 0x48, 0xf0, 0xf4, 0x04}
+RIDL!{#[uuid(0x728a21c5, 0x3d9e, 0x48d7, 0x98, 0x10, 0x86, 0x48, 0x48, 0xf0, 0xf4, 0x04)]
+class PortableDevice;}
+DEFINE_GUID!{CLSID_PortableDeviceManager,
+ 0x0af10cec, 0x2ecd, 0x4b92, 0x95, 0x81, 0x34, 0xf6, 0xae, 0x06, 0x37, 0xf3}
+RIDL!{#[uuid(0x0af10cec, 0x2ecd, 0x4b92, 0x95, 0x81, 0x34, 0xf6, 0xae, 0x06, 0x37, 0xf3)]
+class PortableDeviceManager;}
+DEFINE_GUID!{CLSID_PortableDeviceService,
+ 0xef5db4c2, 0x9312, 0x422c, 0x91, 0x52, 0x41, 0x1c, 0xd9, 0xc4, 0xdd, 0x84}
+RIDL!{#[uuid(0xef5db4c2, 0x9312, 0x422c, 0x91, 0x52, 0x41, 0x1c, 0xd9, 0xc4, 0xdd, 0x84)]
+class PortableDeviceService;}
+DEFINE_GUID!{CLSID_PortableDeviceDispatchFactory,
+ 0x43232233, 0x8338, 0x4658, 0xae, 0x01, 0x0b, 0x4a, 0xe8, 0x30, 0xb6, 0xb0}
+RIDL!{#[uuid(0x43232233, 0x8338, 0x4658, 0xae, 0x01, 0x0b, 0x4a, 0xe8, 0x30, 0xb6, 0xb0)]
+class PortableDeviceDispatchFactory;}
+DEFINE_GUID!{CLSID_PortableDeviceFTM,
+ 0xf7c0039a, 0x4762, 0x488a, 0xb4, 0xb3, 0x76, 0x0e, 0xf9, 0xa1, 0xba, 0x9b}
+RIDL!{#[uuid(0xf7c0039a, 0x4762, 0x488a, 0xb4, 0xb3, 0x76, 0x0e, 0xf9, 0xa1, 0xba, 0x9b)]
+class PortableDeviceFTM;}
+DEFINE_GUID!{CLSID_PortableDeviceServiceFTM,
+ 0x1649b154, 0xc794, 0x497a, 0x9b, 0x03, 0xf3, 0xf0, 0x12, 0x13, 0x02, 0xf3}
+RIDL!{#[uuid(0x1649b154, 0xc794, 0x497a, 0x9b, 0x03, 0xf3, 0xf0, 0x12, 0x13, 0x02, 0xf3)]
+class PortableDeviceServiceFTM;}
+DEFINE_GUID!{CLSID_PortableDeviceWebControl,
+ 0x186dd02c, 0x2dec, 0x41b5, 0xa7, 0xd4, 0xb5, 0x90, 0x56, 0xfa, 0xde, 0x51}
+RIDL!{#[uuid(0x186dd02c, 0x2dec, 0x41b5, 0xa7, 0xd4, 0xb5, 0x90, 0x56, 0xfa, 0xde, 0x51)]
+class PortableDeviceWebControl;}
diff --git a/vendor/winapi/src/um/portabledevicetypes.rs b/vendor/winapi/src/um/portabledevicetypes.rs
new file mode 100644
index 000000000..f6c13d3ec
--- /dev/null
+++ b/vendor/winapi/src/um/portabledevicetypes.rs
@@ -0,0 +1,255 @@
+// 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 PortableDeviceTypes.h
+use shared::guiddef::{GUID, REFGUID};
+use shared::minwindef::{BOOL, BYTE, DWORD, FLOAT, ULONG};
+use shared::wtypes::{PROPERTYKEY, VARTYPE};
+use um::propidl::PROPVARIANT;
+use um::propkeydef::REFPROPERTYKEY;
+use um::propsys::IPropertyStore;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LONG, LONGLONG, LPCWSTR, LPWSTR, ULONGLONG};
+//330
+RIDL!{#[uuid(0x6848f6f2, 0x3155, 0x4f86, 0xb6, 0xf5, 0x26, 0x3e, 0xee, 0xab, 0x31, 0x43)]
+interface IPortableDeviceValues(IPortableDeviceValuesVtbl): IUnknown(IUnknownVtbl) {
+ fn GetCount(
+ pcelt: *mut DWORD,
+ ) -> HRESULT,
+ fn GetAt(
+ index: DWORD,
+ pKey: *mut PROPERTYKEY,
+ pValue: *mut PROPVARIANT,
+ ) -> HRESULT,
+ fn SetValue(
+ key: REFPROPERTYKEY,
+ pValue: *const PROPVARIANT,
+ ) -> HRESULT,
+ fn GetValue(
+ key: REFPROPERTYKEY,
+ pValue: *mut PROPVARIANT,
+ ) -> HRESULT,
+ fn SetStringValue(
+ key: REFPROPERTYKEY,
+ Value: LPCWSTR,
+ ) -> HRESULT,
+ fn GetStringValue(
+ key: REFPROPERTYKEY,
+ pValue: *mut LPWSTR,
+ ) -> HRESULT,
+ fn SetUnsignedIntegerValue(
+ key: REFPROPERTYKEY,
+ Value: ULONG,
+ ) -> HRESULT,
+ fn GetUnsignedIntegerValue(
+ key: REFPROPERTYKEY,
+ pValue: *mut ULONG,
+ ) -> HRESULT,
+ fn SetSignedIntegerValue(
+ key: REFPROPERTYKEY,
+ Value: LONG,
+ ) -> HRESULT,
+ fn GetSignedIntegerValue(
+ key: REFPROPERTYKEY,
+ pValue: *mut LONG,
+ ) -> HRESULT,
+ fn SetUnsignedLargeIntegerValue(
+ key: REFPROPERTYKEY,
+ Value: ULONGLONG,
+ ) -> HRESULT,
+ fn GetUnsignedLargeIntegerValue(
+ key: REFPROPERTYKEY,
+ pValue: *mut ULONGLONG,
+ ) -> HRESULT,
+ fn SetSignedLargeIntegerValue(
+ key: REFPROPERTYKEY,
+ Value: LONGLONG,
+ ) -> HRESULT,
+ fn GetSignedLargeIntegerValue(
+ key: REFPROPERTYKEY,
+ pValue: *mut LONGLONG,
+ ) -> HRESULT,
+ fn SetFloatValue(
+ key: REFPROPERTYKEY,
+ Value: FLOAT,
+ ) -> HRESULT,
+ fn GetFloatValue(
+ key: REFPROPERTYKEY,
+ pValue: *mut FLOAT,
+ ) -> HRESULT,
+ fn SetErrorValue(
+ key: REFPROPERTYKEY,
+ Value: HRESULT,
+ ) -> HRESULT,
+ fn GetErrorValue(
+ key: REFPROPERTYKEY,
+ pValue: *mut HRESULT,
+ ) -> HRESULT,
+ fn SetKeyValue(
+ key: REFPROPERTYKEY,
+ Value: REFPROPERTYKEY,
+ ) -> HRESULT,
+ fn GetKeyValue(
+ key: REFPROPERTYKEY,
+ pValue: *mut PROPERTYKEY,
+ ) -> HRESULT,
+ fn SetBoolValue(
+ key: REFPROPERTYKEY,
+ Value: BOOL,
+ ) -> HRESULT,
+ fn GetBoolValue(
+ key: REFPROPERTYKEY,
+ pValue: *mut BOOL,
+ ) -> HRESULT,
+ fn SetIUnknownValue(
+ key: REFPROPERTYKEY,
+ pValue: *mut IUnknown,
+ ) -> HRESULT,
+ fn GetIUnknownValue(
+ key: REFPROPERTYKEY,
+ ppValue: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn SetGuidValue(
+ key: REFPROPERTYKEY,
+ Value: REFGUID,
+ ) -> HRESULT,
+ fn GetGuidValue(
+ key: REFPROPERTYKEY,
+ pValue: *mut GUID,
+ ) -> HRESULT,
+ fn SetBufferValue(
+ key: REFPROPERTYKEY,
+ pValue: *mut BYTE,
+ cbValue: DWORD,
+ ) -> HRESULT,
+ fn GetBufferValue(
+ key: REFPROPERTYKEY,
+ ppValue: *mut *mut BYTE,
+ pcbValue: *mut DWORD,
+ ) -> HRESULT,
+ fn SetIPortableDeviceValuesValue(
+ key: REFPROPERTYKEY,
+ pValue: *mut IPortableDeviceValues,
+ ) -> HRESULT,
+ fn GetIPortableDeviceValuesValue(
+ key: REFPROPERTYKEY,
+ ppValue: *mut *mut IPortableDeviceValues,
+ ) -> HRESULT,
+ fn SetIPortableDevicePropVariantCollectionValue(
+ key: REFPROPERTYKEY,
+ pValue: *mut IPortableDevicePropVariantCollection,
+ ) -> HRESULT,
+ fn GetIPortableDevicePropVariantCollectionValue(
+ key: REFPROPERTYKEY,
+ ppValue: *mut *mut IPortableDevicePropVariantCollection,
+ ) -> HRESULT,
+ fn SetIPortableDeviceKeyCollectionValue(
+ key: REFPROPERTYKEY,
+ pValue: *mut IPortableDeviceKeyCollection,
+ ) -> HRESULT,
+ fn GetIPortableDeviceKeyCollectionValue(
+ key: REFPROPERTYKEY,
+ ppValue: *mut *mut IPortableDeviceKeyCollection,
+ ) -> HRESULT,
+ fn SetIPortableDeviceValuesCollectionValue(
+ key: REFPROPERTYKEY,
+ pValue: *mut IPortableDeviceValuesCollection,
+ ) -> HRESULT,
+ fn GetIPortableDeviceValuesCollectionValue(
+ key: REFPROPERTYKEY,
+ ppValue: *mut *mut IPortableDeviceValuesCollection,
+ ) -> HRESULT,
+ fn RemoveValue(
+ key: REFPROPERTYKEY,
+ ) -> HRESULT,
+ fn CopyValuesFromPropertyStore(
+ pStore: *mut IPropertyStore,
+ ) -> HRESULT,
+ fn CopyValuesToPropertyStore(
+ pStore: *mut IPropertyStore,
+ ) -> HRESULT,
+ fn Clear() -> HRESULT,
+}}
+RIDL!{#[uuid(0xdada2357, 0xe0ad, 0x492e, 0x98, 0xdb, 0xdd, 0x61, 0xc5, 0x3b, 0xa3, 0x53)]
+interface IPortableDeviceKeyCollection(IPortableDeviceKeyCollectionVtbl): IUnknown(IUnknownVtbl) {
+ fn GetCount(
+ pcElems: *mut DWORD,
+ ) -> HRESULT,
+ fn GetAt(
+ dwIndex: DWORD,
+ pKey: *mut PROPERTYKEY,
+ ) -> HRESULT,
+ fn Add(
+ Key: REFPROPERTYKEY,
+ ) -> HRESULT,
+ fn Clear() -> HRESULT,
+ fn RemoveAt(
+ dwIndex: DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x89b2e422, 0x4f1b, 0x4316, 0xbc, 0xef, 0xa4, 0x4a, 0xfe, 0xa8, 0x3e, 0xb3)]
+interface IPortableDevicePropVariantCollection(IPortableDevicePropVariantCollectionVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn GetCount(
+ pcElems: *mut DWORD,
+ ) -> HRESULT,
+ fn GetAt(
+ dwIndex: DWORD,
+ pValue: *mut PROPVARIANT,
+ ) -> HRESULT,
+ fn Add(
+ pValue: *const PROPVARIANT,
+ ) -> HRESULT,
+ fn GetType(
+ pvt: *mut VARTYPE,
+ ) -> HRESULT,
+ fn ChangeType(
+ vt: VARTYPE,
+ ) -> HRESULT,
+ fn Clear() -> HRESULT,
+ fn RemoveAt(
+ dwIndex: DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x6e3f2d79, 0x4e07, 0x48c4, 0x82, 0x08, 0xd8, 0xc2, 0xe5, 0xaf, 0x4a, 0x99)]
+interface IPortableDeviceValuesCollection(IPortableDeviceValuesCollectionVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn GetCount(
+ pcElems: *mut DWORD,
+ ) -> HRESULT,
+ fn GetAt(
+ dwIndex: DWORD,
+ ppValues: *mut *mut IPortableDeviceValues,
+ ) -> HRESULT,
+ fn Add(
+ pValues: *mut IPortableDeviceValues,
+ ) -> HRESULT,
+ fn Clear() -> HRESULT,
+ fn RemoveAt(
+ dwIndex: DWORD,
+ ) -> HRESULT,
+}}
+DEFINE_GUID!{LIBID_PortableDeviceTypesLib,
+ 0x2B00BA2F, 0xE750, 0x4beb, 0x92, 0x35, 0x97, 0x14, 0x2E, 0xDE, 0x1D, 0x3E}
+DEFINE_GUID!{CLSID_WpdSerializer,
+ 0x0b91a74b, 0xad7c, 0x4a9d, 0xb5, 0x63, 0x29, 0xee, 0xf9, 0x16, 0x71, 0x72}
+RIDL!{#[uuid(0x0b91a74b, 0xad7c, 0x4a9d, 0xb5, 0x63, 0x29, 0xee, 0xf9, 0x16, 0x71, 0x72)]
+class WpdSerializer;}
+DEFINE_GUID!{CLSID_PortableDeviceValues,
+ 0x0c15d503, 0xd017, 0x47ce, 0x90, 0x16, 0x7b, 0x3f, 0x97, 0x87, 0x21, 0xcc}
+RIDL!{#[uuid(0x0c15d503, 0xd017, 0x47ce, 0x90, 0x16, 0x7b, 0x3f, 0x97, 0x87, 0x21, 0xcc)]
+class PortableDeviceValues;}
+DEFINE_GUID!{CLSID_PortableDeviceKeyCollection,
+ 0xde2d022d, 0x2480, 0x43be, 0x97, 0xf0, 0xd1, 0xfa, 0x2c, 0xf9, 0x8f, 0x4f}
+RIDL!{#[uuid(0xde2d022d, 0x2480, 0x43be, 0x97, 0xf0, 0xd1, 0xfa, 0x2c, 0xf9, 0x8f, 0x4f)]
+class PortableDeviceKeyCollection;}
+DEFINE_GUID!{CLSID_PortableDevicePropVariantCollection,
+ 0x08a99e2f, 0x6d6d, 0x4b80, 0xaf, 0x5a, 0xba, 0xf2, 0xbc, 0xbe, 0x4c, 0xb9}
+RIDL!{#[uuid(0x08a99e2f, 0x6d6d, 0x4b80, 0xaf, 0x5a, 0xba, 0xf2, 0xbc, 0xbe, 0x4c, 0xb9)]
+class PortableDevicePropVariantCollection;}
+DEFINE_GUID!{CLSID_PortableDeviceValuesCollection,
+ 0x3882134d, 0x14cf, 0x4220, 0x9c, 0xb4, 0x43, 0x5f, 0x86, 0xd8, 0x3f, 0x60}
+RIDL!{#[uuid(0x3882134d, 0x14cf, 0x4220, 0x9c, 0xb4, 0x43, 0x5f, 0x86, 0xd8, 0x3f, 0x60)]
+class PortableDeviceValuesCollection;}
diff --git a/vendor/winapi/src/um/powerbase.rs b/vendor/winapi/src/um/powerbase.rs
new file mode 100644
index 000000000..f856fddf8
--- /dev/null
+++ b/vendor/winapi/src/um/powerbase.rs
@@ -0,0 +1,35 @@
+// 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::minwindef::{DWORD, ULONG};
+use um::winnt::{
+ BOOLEAN, HANDLE, LONG, POWER_INFORMATION_LEVEL, POWER_PLATFORM_ROLE,
+ PSYSTEM_POWER_CAPABILITIES, PVOID,
+};
+use um::winuser::{HPOWERNOTIFY, PHPOWERNOTIFY};
+pub type NTSTATUS = LONG;
+extern "system" {
+ pub fn CallNtPowerInformation(
+ InformationLevel: POWER_INFORMATION_LEVEL,
+ InputBuffer: PVOID,
+ InputBufferLength: ULONG,
+ OutputBuffer: PVOID,
+ OutputBufferLength: ULONG,
+ ) -> NTSTATUS;
+ pub fn GetPwrCapabilities(
+ lpspc: PSYSTEM_POWER_CAPABILITIES,
+ ) -> BOOLEAN;
+ pub fn PowerDeterminePlatformRoleEx(
+ Version: ULONG,
+ ) -> POWER_PLATFORM_ROLE;
+ pub fn PowerRegisterSuspendResumeNotification(
+ Flags: DWORD,
+ Recipient: HANDLE,
+ RegistrationHandle: PHPOWERNOTIFY,
+ ) -> DWORD;
+ pub fn PowerUnregisterSuspendResumeNotification(
+ RegistrationHandle: HPOWERNOTIFY,
+ ) -> DWORD;
+}
diff --git a/vendor/winapi/src/um/powersetting.rs b/vendor/winapi/src/um/powersetting.rs
new file mode 100644
index 000000000..88b0c6fa6
--- /dev/null
+++ b/vendor/winapi/src/um/powersetting.rs
@@ -0,0 +1,60 @@
+// 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::guiddef::{GUID, LPCGUID};
+use shared::minwindef::{DWORD, HKEY, LPBYTE, LPDWORD, PUCHAR, PULONG};
+use um::winnt::HANDLE;
+use um::winuser::{HPOWERNOTIFY, PHPOWERNOTIFY};
+extern "system" {
+ pub fn PowerReadACValue(
+ RootPowerKey: HKEY,
+ SchemeGuid: *const GUID,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ Type: PULONG,
+ Buffer: LPBYTE,
+ BufferSize: LPDWORD,
+ ) -> DWORD;
+ pub fn PowerReadDCValue(
+ RootPowerKey: HKEY,
+ SchemeGuid: *const GUID,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ Type: PULONG,
+ Buffer: PUCHAR,
+ BufferSize: LPDWORD,
+ ) -> DWORD;
+ pub fn PowerWriteACValueIndex(
+ RootPowerKey: HKEY,
+ SchemeGuid: *const GUID,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ AcValueIndex: DWORD,
+ ) -> DWORD;
+ pub fn PowerWriteDCValueIndex(
+ RootPowerKey: HKEY,
+ SchemeGuid: *const GUID,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ DcValueIndex: DWORD,
+ ) -> DWORD;
+ pub fn PowerGetActiveScheme(
+ UserRootPowerKey: HKEY,
+ ActivePolicyGuid: *mut *mut GUID,
+ ) -> DWORD;
+ pub fn PowerSetActiveScheme(
+ UserRootPowerKey: HKEY,
+ SchemeGuid: *const GUID,
+ ) -> DWORD;
+ pub fn PowerSettingRegisterNotification(
+ SettingGuid: LPCGUID,
+ Flags: DWORD,
+ Recipient: HANDLE,
+ RegistrationHandle: PHPOWERNOTIFY,
+ ) -> DWORD;
+ pub fn PowerSettingUnregisterNotification(
+ RegistrationHandle: HPOWERNOTIFY,
+ ) -> DWORD;
+}
diff --git a/vendor/winapi/src/um/powrprof.rs b/vendor/winapi/src/um/powrprof.rs
new file mode 100644
index 000000000..d2d365f87
--- /dev/null
+++ b/vendor/winapi/src/um/powrprof.rs
@@ -0,0 +1,550 @@
+// 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.
+//! Interface for powrprof.dll, the power policy applicator
+use shared::guiddef::GUID;
+use shared::minwindef::{
+ BOOL, DWORD, HKEY, LPARAM, LPDWORD, PBYTE, PUCHAR, PUINT, PULONG, UCHAR, UINT, ULONG,
+};
+use um::winnt::{
+ BOOLEAN, LPCWSTR, LPWSTR, NUM_DISCHARGE_POLICIES, PADMINISTRATOR_POWER_POLICY,
+ POWER_ACTION_POLICY, POWER_PLATFORM_ROLE, PROCESSOR_POWER_POLICY, PVOID, SYSTEM_POWER_LEVEL,
+ SYSTEM_POWER_STATE,
+};
+use um::winreg::REGSAM;
+STRUCT!{struct GLOBAL_MACHINE_POWER_POLICY {
+ Revision: ULONG,
+ LidOpenWakeAc: SYSTEM_POWER_STATE,
+ LidOpenWakeDc: SYSTEM_POWER_STATE,
+ BroadcastCapacityResolution: ULONG,
+}}
+pub type PGLOBAL_MACHINE_POWER_POLICY = *mut GLOBAL_MACHINE_POWER_POLICY;
+STRUCT!{struct GLOBAL_USER_POWER_POLICY {
+ Revision: ULONG,
+ PowerButtonAc: POWER_ACTION_POLICY,
+ PowerButtonDc: POWER_ACTION_POLICY,
+ SleepButtonAc: POWER_ACTION_POLICY,
+ SleepButtonDc: POWER_ACTION_POLICY,
+ LidCloseAc: POWER_ACTION_POLICY,
+ LidCloseDc: POWER_ACTION_POLICY,
+ DischargePolicy: [SYSTEM_POWER_LEVEL; NUM_DISCHARGE_POLICIES],
+ GlobalFlags: ULONG,
+}}
+pub type PGLOBAL_USER_POWER_POLICY = *mut GLOBAL_USER_POWER_POLICY;
+STRUCT!{struct GLOBAL_POWER_POLICY {
+ user: GLOBAL_USER_POWER_POLICY,
+ mach: GLOBAL_MACHINE_POWER_POLICY,
+}}
+pub type PGLOBAL_POWER_POLICY = *mut GLOBAL_POWER_POLICY;
+STRUCT!{struct MACHINE_POWER_POLICY {
+ Revision: ULONG,
+ MinSleepAc: SYSTEM_POWER_STATE,
+ MinSleepDc: SYSTEM_POWER_STATE,
+ ReducedLatencySleepAc: SYSTEM_POWER_STATE,
+ ReducedLatencySleepDc: SYSTEM_POWER_STATE,
+ DozeTimeoutAc: ULONG,
+ DozeTimeoutDc: ULONG,
+ DozeS4TimeoutAc: ULONG,
+ DozeS4TimeoutDc: ULONG,
+ MinThrottleAc: UCHAR,
+ MinThrottleDc: UCHAR,
+ pad1: [UCHAR; 2],
+ OverThrottledAc: POWER_ACTION_POLICY,
+ OverThrottledDc: POWER_ACTION_POLICY,
+}}
+pub type PMACHINE_POWER_POLICY = *mut MACHINE_POWER_POLICY;
+STRUCT!{struct MACHINE_PROCESSOR_POWER_POLICY {
+ Revision: ULONG,
+ ProcessorPolicyAc: PROCESSOR_POWER_POLICY,
+ ProcessorPolicyDc: PROCESSOR_POWER_POLICY,
+}}
+pub type PMACHINE_PROCESSOR_POWER_POLICY = *mut MACHINE_PROCESSOR_POWER_POLICY;
+STRUCT!{struct USER_POWER_POLICY {
+ Revision: ULONG,
+ IdleAc: POWER_ACTION_POLICY,
+ IdleDc: POWER_ACTION_POLICY,
+ IdleTimeoutAc: ULONG,
+ IdleTimeoutDc: ULONG,
+ IdleSensitivityAc: UCHAR,
+ IdleSensitivityDc: UCHAR,
+ ThrottlePolicyAc: UCHAR,
+ ThrottlePolicyDc: UCHAR,
+ MaxSleepAc: SYSTEM_POWER_STATE,
+ MaxSleepDc: SYSTEM_POWER_STATE,
+ Reserved: [ULONG; 2],
+ VideoTimeoutAc: ULONG,
+ VideoTimeoutDc: ULONG,
+ SpindownTimeoutAc: ULONG,
+ SpindownTimeoutDc: ULONG,
+ OptimizeForPowerAc: BOOLEAN,
+ OptimizeForPowerDc: BOOLEAN,
+ FanThrottleToleranceAc: UCHAR,
+ FanThrottleToleranceDc: UCHAR,
+ ForcedThrottleAc: UCHAR,
+ ForcedThrottleDc: UCHAR,
+}}
+pub type PUSER_POWER_POLICY = *mut USER_POWER_POLICY;
+STRUCT!{struct POWER_POLICY {
+ user: USER_POWER_POLICY,
+ mach: MACHINE_POWER_POLICY,
+}}
+pub type PPOWER_POLICY = *mut POWER_POLICY;
+pub const EnableSysTrayBatteryMeter: ULONG = 0x01;
+pub const EnableMultiBatteryDisplay: ULONG = 0x02;
+pub const EnablePasswordLogon: ULONG = 0x04;
+pub const EnableWakeOnRing: ULONG = 0x08;
+pub const EnableVideoDimDisplay: ULONG = 0x10;
+pub const POWER_ATTRIBUTE_HIDE: ULONG = 0x00000001;
+pub const POWER_ATTRIBUTE_SHOW_AOAC: ULONG = 0x00000002;
+pub const NEWSCHEME: UINT = -1i32 as u32;
+FN!{stdcall PWRSCHEMESENUMPROC_V1(
+ Index: UINT,
+ NameSize: DWORD,
+ Name: LPWSTR,
+ DescriptionSize: DWORD,
+ Description: LPWSTR,
+ Policy: PPOWER_POLICY,
+ Context: LPARAM,
+) -> BOOLEAN}
+FN!{stdcall PWRSCHEMESENUMPROC_V2(
+ Index: UINT,
+ NameSize: DWORD,
+ Name: LPWSTR,
+ DescriptionSize: DWORD,
+ Description: LPWSTR,
+ Policy: PPOWER_POLICY,
+ Context: LPARAM,
+) -> BOOLEAN}
+pub type PWRSCHEMESENUMPROC = *mut PWRSCHEMESENUMPROC_V2;
+extern "system" {
+ pub fn GetPwrDiskSpindownRange(
+ puiMax: PUINT,
+ puiMin: PUINT,
+ ) -> BOOLEAN;
+ pub fn EnumPwrSchemes(
+ lpfn: PWRSCHEMESENUMPROC,
+ lParam: LPARAM,
+ ) -> BOOLEAN;
+ pub fn ReadGlobalPwrPolicy(
+ pGlobalPowerPolicy: PGLOBAL_POWER_POLICY,
+ ) -> BOOLEAN;
+ pub fn ReadPwrScheme(
+ uiID: UINT,
+ pPowerPolicy: PPOWER_POLICY,
+ ) -> BOOLEAN;
+ pub fn WritePwrScheme(
+ puiID: PUINT,
+ lpszSchemeName: LPCWSTR,
+ lpszDescription: LPCWSTR,
+ lpScheme: PPOWER_POLICY,
+ ) -> BOOLEAN;
+ pub fn WriteGlobalPwrPolicy(
+ pGlobalPowerPolicy: PGLOBAL_POWER_POLICY,
+ ) -> BOOLEAN;
+ pub fn DeletePwrScheme(
+ uiID: UINT,
+ ) -> BOOLEAN;
+ pub fn GetActivePwrScheme(
+ puiID: PUINT,
+ ) -> BOOLEAN;
+ pub fn SetActivePwrScheme(
+ uiID: UINT,
+ pGlobalPowerPolicy: PGLOBAL_POWER_POLICY,
+ pPowerPolicy: PPOWER_POLICY,
+ ) -> BOOLEAN;
+ pub fn IsPwrSuspendAllowed() -> BOOLEAN;
+ pub fn IsPwrHibernateAllowed() -> BOOLEAN;
+ pub fn IsPwrShutdownAllowed() -> BOOLEAN;
+ pub fn IsAdminOverrideActive(
+ papp: PADMINISTRATOR_POWER_POLICY,
+ ) -> BOOLEAN;
+ pub fn SetSuspendState(
+ bHibernate: BOOLEAN,
+ bForce: BOOLEAN,
+ bWakeupEventsDisabled: BOOLEAN,
+ ) -> BOOLEAN;
+ pub fn GetCurrentPowerPolicies(
+ pGlobalPowerPolicy: PGLOBAL_POWER_POLICY,
+ pPowerPolicy: PPOWER_POLICY,
+ ) -> BOOLEAN;
+ pub fn CanUserWritePwrScheme() -> BOOLEAN;
+ pub fn ReadProcessorPwrScheme(
+ uiID: UINT,
+ pMachineProcessorPowerPolicy: PMACHINE_PROCESSOR_POWER_POLICY,
+ ) -> BOOLEAN;
+ pub fn WriteProcessorPwrScheme(
+ uiID: UINT,
+ pMachineProcessorPowerPolicy: PMACHINE_PROCESSOR_POWER_POLICY,
+ ) -> BOOLEAN;
+ pub fn ValidatePowerPolicies(
+ pGlobalPowerPolicy: PGLOBAL_POWER_POLICY,
+ pPowerPolicy: PPOWER_POLICY,
+ ) -> BOOLEAN;
+}
+ENUM!{enum POWER_DATA_ACCESSOR {
+ ACCESS_AC_POWER_SETTING_INDEX = 0,
+ ACCESS_DC_POWER_SETTING_INDEX,
+ ACCESS_FRIENDLY_NAME,
+ ACCESS_DESCRIPTION,
+ ACCESS_POSSIBLE_POWER_SETTING,
+ ACCESS_POSSIBLE_POWER_SETTING_FRIENDLY_NAME,
+ ACCESS_POSSIBLE_POWER_SETTING_DESCRIPTION,
+ ACCESS_DEFAULT_AC_POWER_SETTING,
+ ACCESS_DEFAULT_DC_POWER_SETTING,
+ ACCESS_POSSIBLE_VALUE_MIN,
+ ACCESS_POSSIBLE_VALUE_MAX,
+ ACCESS_POSSIBLE_VALUE_INCREMENT,
+ ACCESS_POSSIBLE_VALUE_UNITS,
+ ACCESS_ICON_RESOURCE,
+ ACCESS_DEFAULT_SECURITY_DESCRIPTOR,
+ ACCESS_ATTRIBUTES,
+ ACCESS_SCHEME,
+ ACCESS_SUBGROUP,
+ ACCESS_INDIVIDUAL_SETTING,
+ ACCESS_ACTIVE_SCHEME,
+ ACCESS_CREATE_SCHEME,
+ ACCESS_AC_POWER_SETTING_MAX,
+ ACCESS_DC_POWER_SETTING_MAX,
+ ACCESS_AC_POWER_SETTING_MIN,
+ ACCESS_DC_POWER_SETTING_MIN,
+ ACCESS_PROFILE,
+ ACCESS_OVERLAY_SCHEME,
+ ACCESS_ACTIVE_OVERLAY_SCHEME,
+}}
+pub type PPOWER_DATA_ACCESSOR = *mut POWER_DATA_ACCESSOR;
+pub const DEVICE_NOTIFY_CALLBACK: ULONG = 2;
+FN!{stdcall DEVICE_NOTIFY_CALLBACK_ROUTINE(
+ Context: PVOID,
+ Type: ULONG,
+ Setting: PVOID,
+) -> ULONG}
+pub type PDEVICE_NOTIFY_CALLBACK_ROUTINE = *mut DEVICE_NOTIFY_CALLBACK_ROUTINE;
+STRUCT!{struct DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS {
+ Callback: PDEVICE_NOTIFY_CALLBACK_ROUTINE,
+ Context: PVOID,
+}}
+pub type PDEVICE_NOTIFY_SUBSCRIBE_PARAMETERS = *mut DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS;
+extern "system" {
+ pub fn PowerIsSettingRangeDefined(
+ SubKeyGuid: *const GUID,
+ SettingGuid: *const GUID,
+ ) -> BOOLEAN;
+ pub fn PowerSettingAccessCheckEx(
+ AccessFlags: POWER_DATA_ACCESSOR,
+ PowerGuid: *const GUID,
+ AccessType: REGSAM,
+ ) -> DWORD;
+ pub fn PowerSettingAccessCheck(
+ AccessFlags: POWER_DATA_ACCESSOR,
+ PowerGuid: *const GUID,
+ ) -> DWORD;
+ pub fn PowerReadACValueIndex(
+ RootPowerKey: HKEY,
+ SchemeGuid: *const GUID,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ AcValueIndex: LPDWORD,
+ ) -> DWORD;
+ pub fn PowerReadDCValueIndex(
+ RootPowerKey: HKEY,
+ SchemeGuid: *const GUID,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ DcValueIndex: LPDWORD,
+ ) -> DWORD;
+ pub fn PowerReadFriendlyName(
+ RootPowerKey: HKEY,
+ SchemeGuid: *const GUID,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ Buffer: PUCHAR,
+ BufferSize: LPDWORD,
+ ) -> DWORD;
+ pub fn PowerReadDescription(
+ RootPowerKey: HKEY,
+ SchemeGuid: *const GUID,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ Buffer: PUCHAR,
+ BufferSize: LPDWORD,
+ ) -> DWORD;
+ pub fn PowerReadPossibleValue(
+ RootPowerKey: HKEY,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ Type: PULONG,
+ PossibleSettingIndex: ULONG,
+ Buffer: PUCHAR,
+ BufferSize: LPDWORD,
+ ) -> DWORD;
+ pub fn PowerReadPossibleFriendlyName(
+ RootPowerKey: HKEY,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ PossibleSettingIndex: ULONG,
+ Buffer: PUCHAR,
+ BufferSize: LPDWORD,
+ ) -> DWORD;
+ pub fn PowerReadPossibleDescription(
+ RootPowerKey: HKEY,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ PossibleSettingIndex: ULONG,
+ Buffer: PUCHAR,
+ BufferSize: LPDWORD,
+ ) -> DWORD;
+ pub fn PowerReadValueMin(
+ RootPowerKey: HKEY,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ ValueMinimum: LPDWORD,
+ ) -> DWORD;
+ pub fn PowerReadValueMax(
+ RootPowerKey: HKEY,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ ValueMaximum: LPDWORD,
+ ) -> DWORD;
+ pub fn PowerReadValueIncrement(
+ RootPowerKey: HKEY,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ ValueIncrement: LPDWORD,
+ ) -> DWORD;
+ pub fn PowerReadValueUnitsSpecifier(
+ RootPowerKey: HKEY,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ Buffer: *mut UCHAR,
+ BufferSize: LPDWORD,
+ ) -> DWORD;
+ pub fn PowerReadACDefaultIndex(
+ RootPowerKey: HKEY,
+ SchemeGuid: *const GUID,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ AcDefaultIndex: LPDWORD,
+ ) -> DWORD;
+ pub fn PowerReadDCDefaultIndex(
+ RootPowerKey: HKEY,
+ SchemeGuid: *const GUID,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ DcDefaultIndex: LPDWORD,
+ ) -> DWORD;
+ pub fn PowerReadIconResourceSpecifier(
+ RootPowerKey: HKEY,
+ SchemeGuid: *const GUID,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ Buffer: PUCHAR,
+ BufferSize: LPDWORD,
+ ) -> DWORD;
+ pub fn PowerReadSettingAttributes(
+ SubGroupGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ ) -> DWORD;
+ pub fn PowerWriteFriendlyName(
+ RootPowerKey: HKEY,
+ SchemeGuid: *const GUID,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ Buffer: *mut UCHAR,
+ BufferSize: DWORD,
+ ) -> DWORD;
+ pub fn PowerWriteDescription(
+ RootPowerKey: HKEY,
+ SchemeGuid: *const GUID,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ Buffer: *mut UCHAR,
+ BufferSize: DWORD,
+ ) -> DWORD;
+ pub fn PowerWritePossibleValue(
+ RootPowerKey: HKEY,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ Type: ULONG,
+ PossibleSettingIndex: ULONG,
+ Buffer: *mut UCHAR,
+ BufferSize: DWORD,
+ ) -> DWORD;
+ pub fn PowerWritePossibleFriendlyName(
+ RootPowerKey: HKEY,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ PossibleSettingIndex: ULONG,
+ Buffer: *mut UCHAR,
+ BufferSize: DWORD,
+ ) -> DWORD;
+ pub fn PowerWritePossibleDescription(
+ RootPowerKey: HKEY,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ PossibleSettingIndex: ULONG,
+ Buffer: *mut UCHAR,
+ BufferSize: DWORD,
+ ) -> DWORD;
+ pub fn PowerWriteValueMin(
+ RootPowerKey: HKEY,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ ValueMinimum: DWORD,
+ ) -> DWORD;
+ pub fn PowerWriteValueMax(
+ RootPowerKey: HKEY,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ ValueMaximum: DWORD,
+ ) -> DWORD;
+ pub fn PowerWriteValueIncrement(
+ RootPowerKey: HKEY,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ ValueIncrement: DWORD,
+ ) -> DWORD;
+ pub fn PowerWriteValueUnitsSpecifier(
+ RootPowerKey: HKEY,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ Buffer: *mut UCHAR,
+ BufferSize: DWORD,
+ ) -> DWORD;
+ pub fn PowerWriteACDefaultIndex(
+ RootSystemPowerKey: HKEY,
+ SchemePersonalityGuid: *const GUID,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ DefaultAcIndex: DWORD,
+ ) -> DWORD;
+ pub fn PowerWriteDCDefaultIndex(
+ RootSystemPowerKey: HKEY,
+ SchemePersonalityGuid: *const GUID,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ DefaultDcIndex: DWORD,
+ ) -> DWORD;
+ pub fn PowerWriteIconResourceSpecifier(
+ RootPowerKey: HKEY,
+ SchemeGuid: *const GUID,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ Buffer: *mut UCHAR,
+ BufferSize: DWORD,
+ ) -> DWORD;
+ pub fn PowerWriteSettingAttributes(
+ SubGroupGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ Attributes: DWORD,
+ ) -> DWORD;
+ pub fn PowerDuplicateScheme(
+ RootPowerKey: HKEY,
+ SourceSchemeGuid: *const GUID,
+ DestinationSchemeGuid: *mut *mut GUID,
+ ) -> DWORD;
+ pub fn PowerImportPowerScheme(
+ RootPowerKey: HKEY,
+ ImportFileNamePath: LPCWSTR,
+ DestinationSchemeGuid: *mut *mut GUID,
+ ) -> DWORD;
+ pub fn PowerDeleteScheme(
+ RootPowerKey: HKEY,
+ SchemeGuid: *mut GUID,
+ ) -> DWORD;
+ pub fn PowerRemovePowerSetting(
+ PowerSettingSubKeyGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ ) -> DWORD;
+ pub fn PowerCreateSetting(
+ RootPowerKey: HKEY,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ ) -> DWORD;
+ pub fn PowerCreatePossibleSetting(
+ RootPowerKey: HKEY,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ PowerSettingGuid: *const GUID,
+ PossibleSettingIndex: ULONG,
+ ) -> DWORD;
+ pub fn PowerEnumerate(
+ RootPowerKey: HKEY,
+ SchemeGuid: *const GUID,
+ SubGroupOfPowerSettingsGuid: *const GUID,
+ AccessFlags: POWER_DATA_ACCESSOR,
+ Index: ULONG,
+ Buffer: *mut UCHAR,
+ BufferSize: *mut DWORD,
+ ) -> DWORD;
+ pub fn PowerOpenUserPowerKey(
+ phUserPowerKey: *mut HKEY,
+ Access: REGSAM,
+ OpenExisting: BOOL,
+ ) -> DWORD;
+ pub fn PowerOpenSystemPowerKey(
+ phSystemPowerKey: *mut HKEY,
+ Access: REGSAM,
+ OpenExisting: BOOL,
+ ) -> DWORD;
+ pub fn PowerCanRestoreIndividualDefaultPowerScheme(
+ SchemeGuid: *const GUID,
+ ) -> DWORD;
+ pub fn PowerRestoreIndividualDefaultPowerScheme(
+ SchemeGuid: *const GUID,
+ ) -> DWORD;
+ pub fn PowerRestoreDefaultPowerSchemes() -> DWORD;
+ pub fn PowerReplaceDefaultPowerSchemes() -> DWORD;
+ pub fn PowerDeterminePlatformRole() -> POWER_PLATFORM_ROLE;
+}
+pub const DEVICEPOWER_HARDWAREID: ULONG = 0x80000000;
+pub const DEVICEPOWER_AND_OPERATION: ULONG = 0x40000000;
+pub const DEVICEPOWER_FILTER_DEVICES_PRESENT: ULONG = 0x20000000;
+pub const DEVICEPOWER_FILTER_HARDWARE: ULONG = 0x10000000;
+pub const DEVICEPOWER_FILTER_WAKEENABLED: ULONG = 0x08000000;
+pub const DEVICEPOWER_FILTER_WAKEPROGRAMMABLE: ULONG = 0x04000000;
+pub const DEVICEPOWER_FILTER_ON_NAME: ULONG = 0x02000000;
+pub const DEVICEPOWER_SET_WAKEENABLED: ULONG = 0x00000001;
+pub const DEVICEPOWER_CLEAR_WAKEENABLED: ULONG = 0x00000002;
+pub const PDCAP_S0_SUPPORTED: ULONG = 0x00010000;
+pub const PDCAP_S1_SUPPORTED: ULONG = 0x00020000;
+pub const PDCAP_S2_SUPPORTED: ULONG = 0x00040000;
+pub const PDCAP_S3_SUPPORTED: ULONG = 0x00080000;
+pub const PDCAP_WAKE_FROM_S0_SUPPORTED: ULONG = 0x00100000;
+pub const PDCAP_WAKE_FROM_S1_SUPPORTED: ULONG = 0x00200000;
+pub const PDCAP_WAKE_FROM_S2_SUPPORTED: ULONG = 0x00400000;
+pub const PDCAP_WAKE_FROM_S3_SUPPORTED: ULONG = 0x00800000;
+pub const PDCAP_S4_SUPPORTED: ULONG = 0x01000000;
+pub const PDCAP_S5_SUPPORTED: ULONG = 0x02000000;
+extern "system" {
+ pub fn DevicePowerEnumDevices(
+ QueryIndex: ULONG,
+ QueryInterpretationFlags: ULONG,
+ QueryFlags: ULONG,
+ pReturnBuffer: PBYTE,
+ pBufferSize: PULONG,
+ ) -> BOOLEAN;
+ pub fn DevicePowerSetDeviceState(
+ DeviceDescription: LPCWSTR,
+ SetFlags: ULONG,
+ SetData: PVOID,
+ ) -> DWORD;
+ pub fn DevicePowerOpen(
+ DebugMask: ULONG,
+ ) -> BOOLEAN;
+ pub fn DevicePowerClose() -> BOOLEAN;
+}
+STRUCT!{struct THERMAL_EVENT {
+ Version: ULONG,
+ Size: ULONG,
+ Type: ULONG,
+ Temperature: ULONG,
+ TripPointTemperature: ULONG,
+ Initiator: LPWSTR,
+}}
+pub type PTHERMAL_EVENT = *mut THERMAL_EVENT;
+extern "system" {
+ pub fn PowerReportThermalEvent(
+ Event: PTHERMAL_EVENT,
+ ) -> DWORD;
+}
diff --git a/vendor/winapi/src/um/processenv.rs b/vendor/winapi/src/um/processenv.rs
new file mode 100644
index 000000000..8ecb5e0e9
--- /dev/null
+++ b/vendor/winapi/src/um/processenv.rs
@@ -0,0 +1,98 @@
+// 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::minwindef::{BOOL, DWORD};
+use um::winnt::{HANDLE, LPCH, LPCSTR, LPCWSTR, LPSTR, LPWCH, LPWSTR, PHANDLE};
+extern "system" {
+ pub fn GetEnvironmentStrings() -> LPCH;
+ pub fn GetEnvironmentStringsW() -> LPWCH;
+ pub fn SetEnvironmentStringsW(
+ NewEnvironment: LPWCH,
+ ) -> BOOL;
+ pub fn FreeEnvironmentStringsA(
+ penv: LPCH,
+ ) -> BOOL;
+ pub fn FreeEnvironmentStringsW(
+ penv: LPWCH,
+ ) -> BOOL;
+ pub fn GetStdHandle(
+ nStdHandle: DWORD,
+ ) -> HANDLE;
+ pub fn SetStdHandle(
+ nStdHandle: DWORD,
+ hHandle: HANDLE,
+ ) -> BOOL;
+ pub fn SetStdHandleEx(
+ nStdHandle: DWORD,
+ hHandle: HANDLE,
+ phPrevValue: PHANDLE,
+ ) -> BOOL;
+ pub fn GetCommandLineA() -> LPSTR;
+ pub fn GetCommandLineW() -> LPWSTR;
+ pub fn GetEnvironmentVariableA(
+ lpName: LPCSTR,
+ lpBuffer: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetEnvironmentVariableW(
+ lpName: LPCWSTR,
+ lpBuffer: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn SetEnvironmentVariableA(
+ lpName: LPCSTR,
+ lpValue: LPCSTR,
+ ) -> BOOL;
+ pub fn SetEnvironmentVariableW(
+ lpName: LPCWSTR,
+ lpValue: LPCWSTR,
+ ) -> BOOL;
+ pub fn ExpandEnvironmentStringsA(
+ lpSrc: LPCSTR,
+ lpDst: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn ExpandEnvironmentStringsW(
+ lpSrc: LPCWSTR,
+ lpDst: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn SetCurrentDirectoryA(
+ lpPathName: LPCSTR,
+ ) -> BOOL;
+ pub fn SetCurrentDirectoryW(
+ lpPathName: LPCWSTR,
+ ) -> BOOL;
+ pub fn GetCurrentDirectoryA(
+ nBufferLength: DWORD,
+ lpBuffer: LPSTR,
+ ) -> DWORD;
+ pub fn GetCurrentDirectoryW(
+ nBufferLength: DWORD,
+ lpBuffer: LPWSTR,
+ ) -> DWORD;
+ pub fn SearchPathW(
+ lpPath: LPCWSTR,
+ lpFileName: LPCWSTR,
+ lpExtension: LPCWSTR,
+ nBufferLength: DWORD,
+ lpBuffer: LPWSTR,
+ lpFilePart: *mut LPWSTR,
+ ) -> DWORD;
+ pub fn SearchPathA(
+ lpPath: LPCSTR,
+ lpFileName: LPCSTR,
+ lpExtension: LPCSTR,
+ nBufferLength: DWORD,
+ lpBuffer: LPSTR,
+ lpFilePart: *mut LPSTR,
+ ) -> DWORD;
+ pub fn NeedCurrentDirectoryForExePathA(
+ ExeName: LPCSTR,
+ ) -> BOOL;
+ pub fn NeedCurrentDirectoryForExePathW(
+ ExeName: LPCWSTR,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/processsnapshot.rs b/vendor/winapi/src/um/processsnapshot.rs
new file mode 100644
index 000000000..c49aac6a9
--- /dev/null
+++ b/vendor/winapi/src/um/processsnapshot.rs
@@ -0,0 +1,120 @@
+// 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.
+//! Defines the process snapshot API
+use ctypes::c_void;
+use shared::basetsd::ULONG_PTR;
+use shared::minwindef::DWORD;
+use um::winnt::HANDLE;
+ENUM!{enum PSS_CAPTURE_FLAGS {
+ PSS_CAPTURE_NONE = 0x00000000,
+ PSS_CAPTURE_VA_CLONE = 0x00000001,
+ PSS_CAPTURE_RESERVED_00000002 = 0x00000002,
+ PSS_CAPTURE_HANDLES = 0x00000004,
+ PSS_CAPTURE_HANDLE_NAME_INFORMATION = 0x00000008,
+ PSS_CAPTURE_HANDLE_BASIC_INFORMATION = 0x00000010,
+ PSS_CAPTURE_HANDLE_TYPE_SPECIFIC_INFORMATION = 0x00000020,
+ PSS_CAPTURE_HANDLE_TRACE = 0x00000040,
+ PSS_CAPTURE_THREADS = 0x00000080,
+ PSS_CAPTURE_THREAD_CONTEXT = 0x00000100,
+ PSS_CAPTURE_THREAD_CONTEXT_EXTENDED = 0x00000200,
+ PSS_CAPTURE_RESERVED_00000400 = 0x00000400,
+ PSS_CAPTURE_VA_SPACE = 0x00000800,
+ PSS_CAPTURE_VA_SPACE_SECTION_INFORMATION = 0x00001000,
+ PSS_CREATE_BREAKAWAY_OPTIONAL = 0x04000000,
+ PSS_CREATE_BREAKAWAY = 0x08000000,
+ PSS_CREATE_FORCE_BREAKAWAY = 0x10000000,
+ PSS_CREATE_USE_VM_ALLOCATIONS = 0x20000000,
+ PSS_CREATE_MEASURE_PERFORMANCE = 0x40000000,
+ PSS_CREATE_RELEASE_SECTION = 0x80000000,
+}}
+ENUM!{enum PSS_QUERY_INFORMATION_CLASS {
+ PSS_QUERY_PROCESS_INFORMATION = 0,
+ PSS_QUERY_VA_CLONE_INFORMATION = 1,
+ PSS_QUERY_AUXILIARY_PAGES_INFORMATION = 2,
+ PSS_QUERY_VA_SPACE_INFORMATION = 3,
+ PSS_QUERY_HANDLE_INFORMATION = 4,
+ PSS_QUERY_THREAD_INFORMATION = 5,
+ PSS_QUERY_HANDLE_TRACE_INFORMATION = 6,
+ PSS_QUERY_PERFORMANCE_COUNTERS = 7,
+}}
+ENUM!{enum PSS_WALK_INFORMATION_CLASS {
+ PSS_WALK_AUXILIARY_PAGES = 0,
+ PSS_WALK_VA_SPACE = 1,
+ PSS_WALK_HANDLES = 2,
+ PSS_WALK_THREADS = 3,
+}}
+ENUM!{enum PSS_DUPLICATE_FLAGS {
+ PSS_DUPLICATE_NONE = 0x00,
+ PSS_DUPLICATE_CLOSE_SOURCE = 0x01,
+}}
+DECLARE_HANDLE!{HPSS, HPSS__}
+DECLARE_HANDLE!{HPSSWALK, HPSSWALK__}
+FN!{stdcall pAllocRoutine(
+ Context: *mut c_void,
+ Size: DWORD,
+) -> *mut c_void}
+FN!{stdcall pFreeRoutine(
+ Context: *mut c_void,
+ Address: *mut c_void,
+) -> ()}
+STRUCT!{struct PSS_ALLOCATOR {
+ Context: *mut c_void,
+ AllocRoutine: pAllocRoutine,
+ FreeRoutine: pFreeRoutine,
+}}
+extern "system" {
+ pub fn PssCaptureSnapshot(
+ ProcessHandle: HANDLE,
+ CaptureFlags: PSS_CAPTURE_FLAGS,
+ ThreadContextFlags: DWORD,
+ SnapshotHandle: *mut HPSS,
+ ) -> DWORD;
+ pub fn PssDuplicateSnapshot(
+ SourceProcessHandle: HANDLE,
+ SnapshotHandle: HPSS,
+ TargetProcessHandle: HANDLE,
+ TargetSnapshotHandle: *mut HPSS,
+ Flags: PSS_DUPLICATE_FLAGS,
+ ) -> DWORD;
+ pub fn PssFreeSnapshot(
+ ProcessHandle: HANDLE,
+ SnapshotHandle: HPSS,
+ ) -> DWORD;
+ pub fn PssQuerySnapshot(
+ SnapshotHandle: HPSS,
+ InformationClass: PSS_QUERY_INFORMATION_CLASS,
+ Buffer: *mut c_void,
+ BufferLength: DWORD,
+ ) -> DWORD;
+ pub fn PssWalkMarkerCreate(
+ Allocator: *const PSS_ALLOCATOR,
+ WalkMarkerHandle: *mut HPSSWALK,
+ ) -> DWORD;
+ pub fn PssWalkMarkerFree(
+ WalkMarkerHandle: HPSSWALK,
+ ) -> DWORD;
+ pub fn PssWalkMarkerGetPosition(
+ WalkMarkerHandle: HPSSWALK,
+ Position: *mut ULONG_PTR,
+ ) -> DWORD;
+ // pub fn PssWalkMarkerRewind();
+ // pub fn PssWalkMarkerSeek();
+ pub fn PssWalkMarkerSeekToBeginning(
+ WalkMarkerHandle: HPSS,
+ ) -> DWORD;
+ pub fn PssWalkMarkerSetPosition(
+ WalkMarkerHandle: HPSSWALK,
+ Position: ULONG_PTR,
+ ) -> DWORD;
+ // pub fn PssWalkMarkerTell();
+ pub fn PssWalkSnapshot(
+ SnapshotHandle: HPSS,
+ InformationClass: PSS_WALK_INFORMATION_CLASS,
+ WalkMarkerHandle: HPSSWALK,
+ Buffer: *mut c_void,
+ BufferLength: DWORD,
+ ) -> DWORD;
+}
diff --git a/vendor/winapi/src/um/processthreadsapi.rs b/vendor/winapi/src/um/processthreadsapi.rs
new file mode 100644
index 000000000..9629ee865
--- /dev/null
+++ b/vendor/winapi/src/um/processthreadsapi.rs
@@ -0,0 +1,441 @@
+// 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
+//! ApiSet Contract for api-ms-win-core-processthreads-l1
+use ctypes::{c_int, c_void};
+use shared::basetsd::{DWORD_PTR, PSIZE_T, PULONG_PTR, SIZE_T, ULONG_PTR};
+use shared::guiddef::LPCGUID;
+use shared::minwindef::{
+ BOOL, DWORD, LPBYTE, LPCVOID, LPDWORD, LPFILETIME, LPVOID, PBOOL, PDWORD, PULONG, UINT, WORD
+};
+use um::minwinbase::{LPCONTEXT, LPSECURITY_ATTRIBUTES, LPTHREAD_START_ROUTINE};
+use um::winnt::{
+ CONTEXT, HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PAPCFUNC, PHANDLE, PPROCESSOR_NUMBER,
+ PROCESS_MITIGATION_POLICY, PVOID
+};
+STRUCT!{struct PROCESS_INFORMATION {
+ hProcess: HANDLE,
+ hThread: HANDLE,
+ dwProcessId: DWORD,
+ dwThreadId: DWORD,
+}}
+pub type PPROCESS_INFORMATION = *mut PROCESS_INFORMATION;
+pub type LPPROCESS_INFORMATION = *mut PROCESS_INFORMATION;
+STRUCT!{struct STARTUPINFOA {
+ cb: DWORD,
+ lpReserved: LPSTR,
+ lpDesktop: LPSTR,
+ lpTitle: LPSTR,
+ dwX: DWORD,
+ dwY: DWORD,
+ dwXSize: DWORD,
+ dwYSize: DWORD,
+ dwXCountChars: DWORD,
+ dwYCountChars: DWORD,
+ dwFillAttribute: DWORD,
+ dwFlags: DWORD,
+ wShowWindow: WORD,
+ cbReserved2: WORD,
+ lpReserved2: LPBYTE,
+ hStdInput: HANDLE,
+ hStdOutput: HANDLE,
+ hStdError: HANDLE,
+}}
+pub type LPSTARTUPINFOA = *mut STARTUPINFOA;
+STRUCT!{struct STARTUPINFOW {
+ cb: DWORD,
+ lpReserved: LPWSTR,
+ lpDesktop: LPWSTR,
+ lpTitle: LPWSTR,
+ dwX: DWORD,
+ dwY: DWORD,
+ dwXSize: DWORD,
+ dwYSize: DWORD,
+ dwXCountChars: DWORD,
+ dwYCountChars: DWORD,
+ dwFillAttribute: DWORD,
+ dwFlags: DWORD,
+ wShowWindow: WORD,
+ cbReserved2: WORD,
+ lpReserved2: LPBYTE,
+ hStdInput: HANDLE,
+ hStdOutput: HANDLE,
+ hStdError: HANDLE,
+}}
+pub type LPSTARTUPINFOW = *mut STARTUPINFOW;
+extern "system" {
+ pub fn QueueUserAPC(
+ pfnAPC: PAPCFUNC,
+ hThread: HANDLE,
+ dwData: ULONG_PTR,
+ ) -> DWORD;
+ pub fn GetProcessTimes(
+ hProcess: HANDLE,
+ lpCreationTime: LPFILETIME,
+ lpExitTime: LPFILETIME,
+ lpKernelTime: LPFILETIME,
+ lpUserTime: LPFILETIME,
+ ) -> BOOL;
+ pub fn GetCurrentProcess() -> HANDLE;
+ pub fn GetCurrentProcessId() -> DWORD;
+ pub fn ExitProcess(
+ uExitCode: UINT,
+ );
+ pub fn TerminateProcess(
+ hProcess: HANDLE,
+ uExitCode: UINT,
+ ) -> BOOL;
+ pub fn GetExitCodeProcess(
+ hProcess: HANDLE,
+ lpExitCode: LPDWORD,
+ ) -> BOOL;
+ pub fn SwitchToThread() -> BOOL;
+ pub fn CreateThread(
+ lpThreadAttributes: LPSECURITY_ATTRIBUTES,
+ dwStackSize: SIZE_T,
+ lpStartAddress: LPTHREAD_START_ROUTINE,
+ lpParameter: LPVOID,
+ dwCreationFlags: DWORD,
+ lpThreadId: LPDWORD,
+ ) -> HANDLE;
+ pub fn CreateRemoteThread(
+ hProcess: HANDLE,
+ lpThreadAttributes: LPSECURITY_ATTRIBUTES,
+ dwStackSize: SIZE_T,
+ lpStartAddress: LPTHREAD_START_ROUTINE,
+ lpParameter: LPVOID,
+ dwCreationFlags: DWORD,
+ lpThreadId: LPDWORD,
+ ) -> HANDLE;
+ pub fn GetCurrentThread() -> HANDLE;
+ pub fn GetCurrentThreadId() -> DWORD;
+ pub fn OpenThread(
+ dwDesiredAccess: DWORD,
+ bInheritHandle: BOOL,
+ dwThreadId: DWORD,
+ ) -> HANDLE;
+ pub fn SetThreadPriority(
+ hThread: HANDLE,
+ nPriority: c_int,
+ ) -> BOOL;
+ pub fn SetThreadPriorityBoost(
+ hThread: HANDLE,
+ bDisablePriorityBoost: BOOL,
+ ) -> BOOL;
+ pub fn GetThreadPriorityBoost(
+ hThread: HANDLE,
+ pDisablePriorityBoost: PBOOL,
+ ) -> BOOL;
+ pub fn GetThreadPriority(
+ hThread: HANDLE,
+ ) -> c_int;
+ pub fn ExitThread(
+ dwExitCode: DWORD,
+ );
+ pub fn TerminateThread(
+ hThread: HANDLE,
+ dwExitCode: DWORD,
+ ) -> BOOL;
+ pub fn GetExitCodeThread(
+ hThread: HANDLE,
+ lpExitCode: LPDWORD,
+ ) -> BOOL;
+ pub fn SuspendThread(
+ hThread: HANDLE,
+ ) -> DWORD;
+ pub fn ResumeThread(
+ hThread: HANDLE,
+ ) -> DWORD;
+}
+pub const TLS_OUT_OF_INDEXES: DWORD = 0xFFFFFFFF;
+extern "system" {
+ pub fn TlsAlloc() -> DWORD;
+ pub fn TlsGetValue(
+ dwTlsIndex: DWORD,
+ ) -> LPVOID;
+ pub fn TlsSetValue(
+ dwTlsIndex: DWORD,
+ lpTlsValue: LPVOID,
+ ) -> BOOL;
+ pub fn TlsFree(
+ dwTlsIndex: DWORD,
+ ) -> BOOL;
+ pub fn CreateProcessA(
+ lpApplicationName: LPCSTR,
+ lpCommandLine: LPSTR,
+ lpProcessAttributes: LPSECURITY_ATTRIBUTES,
+ lpThreadAttributes: LPSECURITY_ATTRIBUTES,
+ bInheritHandles: BOOL,
+ dwCreationFlags: DWORD,
+ lpEnvironment: LPVOID,
+ lpCurrentDirectory: LPCSTR,
+ lpStartupInfo: LPSTARTUPINFOA,
+ lpProcessInformation: LPPROCESS_INFORMATION,
+ ) -> BOOL;
+ pub fn CreateProcessW(
+ lpApplicationName: LPCWSTR,
+ lpCommandLine: LPWSTR,
+ lpProcessAttributes: LPSECURITY_ATTRIBUTES,
+ lpThreadAttributes: LPSECURITY_ATTRIBUTES,
+ bInheritHandles: BOOL,
+ dwCreationFlags: DWORD,
+ lpEnvironment: LPVOID,
+ lpCurrentDirectory: LPCWSTR,
+ lpStartupInfo: LPSTARTUPINFOW,
+ lpProcessInformation: LPPROCESS_INFORMATION,
+ ) -> BOOL;
+ pub fn SetProcessShutdownParameters(
+ dwLevel: DWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn GetProcessVersion(
+ ProcessId: DWORD,
+ ) -> DWORD;
+ pub fn GetStartupInfoW(
+ lpStartupInfo: LPSTARTUPINFOW,
+ );
+ pub fn CreateProcessAsUserW(
+ hToken: HANDLE,
+ lpApplicationName: LPCWSTR,
+ lpCommandLine: LPWSTR,
+ lpProcessAttributes: LPSECURITY_ATTRIBUTES,
+ lpThreadAttributes: LPSECURITY_ATTRIBUTES,
+ bInheritHandles: BOOL,
+ dwCreationFlags: DWORD,
+ lpEnvironment: LPVOID,
+ lpCurrentDirectory: LPCWSTR,
+ lpStartupInfo: LPSTARTUPINFOW,
+ lpProcessInformation: LPPROCESS_INFORMATION,
+ ) -> BOOL;
+ // pub fn GetCurrentProcessToken();
+ // pub fn GetCurrentThreadToken();
+ // pub fn GetCurrentThreadEffectiveToken();
+ pub fn SetThreadToken(
+ Thread: PHANDLE,
+ Token: HANDLE,
+ ) -> BOOL;
+ pub fn OpenProcessToken(
+ ProcessHandle: HANDLE,
+ DesiredAccess: DWORD,
+ TokenHandle: PHANDLE,
+ ) -> BOOL;
+ pub fn OpenThreadToken(
+ ThreadHandle: HANDLE,
+ DesiredAccess: DWORD,
+ OpenAsSelf: BOOL,
+ TokenHandle: PHANDLE,
+ ) -> BOOL;
+ pub fn SetPriorityClass(
+ hProcess: HANDLE,
+ dwPriorityClass: DWORD,
+ ) -> BOOL;
+ pub fn SetThreadStackGuarantee(
+ StackSizeInBytes: PULONG,
+ ) -> BOOL;
+ pub fn GetPriorityClass(
+ hProcess: HANDLE,
+ ) -> DWORD;
+ pub fn ProcessIdToSessionId(
+ dwProcessId: DWORD,
+ pSessionId: *mut DWORD,
+ ) -> BOOL;
+ pub fn GetProcessId(
+ Process: HANDLE,
+ ) -> DWORD;
+}
+STRUCT!{struct PROC_THREAD_ATTRIBUTE_LIST {
+ dummy: *mut c_void,
+}}
+pub type PPROC_THREAD_ATTRIBUTE_LIST = *mut PROC_THREAD_ATTRIBUTE_LIST;
+pub type LPPROC_THREAD_ATTRIBUTE_LIST = *mut PROC_THREAD_ATTRIBUTE_LIST;
+extern "system" {
+ pub fn GetThreadId(
+ Thread: HANDLE,
+ ) -> DWORD;
+ pub fn FlushProcessWriteBuffers();
+ pub fn GetProcessIdOfThread(
+ Thread: HANDLE,
+ ) -> DWORD;
+ pub fn InitializeProcThreadAttributeList(
+ lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST,
+ dwAttributeCount: DWORD,
+ dwFlags: DWORD,
+ lpSize: PSIZE_T,
+ ) -> BOOL;
+ pub fn DeleteProcThreadAttributeList(
+ lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST,
+ );
+ pub fn SetProcessAffinityUpdateMode(
+ hProcess: HANDLE,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn QueryProcessAffinityUpdateMode(
+ hProcess: HANDLE,
+ lpdwFlags: LPDWORD,
+ ) -> BOOL;
+ pub fn UpdateProcThreadAttribute(
+ lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST,
+ dwFlags: DWORD,
+ Attribute: DWORD_PTR,
+ lpValue: PVOID,
+ cbSize: SIZE_T,
+ lpPreviousValue: PVOID,
+ lpReturnSize: PSIZE_T,
+ ) -> BOOL;
+ pub fn CreateRemoteThreadEx(
+ hProcess: HANDLE,
+ lpThreadAttributes: LPSECURITY_ATTRIBUTES,
+ dwStackSize: SIZE_T,
+ lpStartAddress: LPTHREAD_START_ROUTINE,
+ lpParameter: LPVOID,
+ dwCreationFlags: DWORD,
+ lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST,
+ lpThreadId: LPDWORD,
+ ) -> HANDLE;
+ pub fn GetCurrentThreadStackLimits(
+ LowLimit: PULONG_PTR,
+ HighLimit: PULONG_PTR,
+ );
+ pub fn GetThreadContext(
+ hThread: HANDLE,
+ lpContext: LPCONTEXT,
+ ) -> BOOL;
+ pub fn SetThreadContext(
+ hThread: HANDLE,
+ lpContext: *const CONTEXT,
+ ) -> BOOL;
+ pub fn SetProcessMitigationPolicy(
+ MitigationPolicy: PROCESS_MITIGATION_POLICY,
+ lpBuffer: PVOID,
+ dwLength: SIZE_T,
+ ) -> BOOL;
+ pub fn GetProcessMitigationPolicy(
+ hProcess: HANDLE,
+ MitigationPolicy: PROCESS_MITIGATION_POLICY,
+ lpBuffer: PVOID,
+ dwLength: SIZE_T,
+ ) -> BOOL;
+ pub fn FlushInstructionCache(
+ hProcess: HANDLE,
+ lpBaseAddress: LPCVOID,
+ dwSize: SIZE_T,
+ ) -> BOOL;
+ pub fn GetThreadTimes(
+ hThread: HANDLE,
+ lpCreationTime: LPFILETIME,
+ lpExitTime: LPFILETIME,
+ lpKernelTime: LPFILETIME,
+ lpUserTime: LPFILETIME,
+ ) -> BOOL;
+ pub fn OpenProcess(
+ dwDesiredAccess: DWORD,
+ bInheritHandle: BOOL,
+ dwProcessId: DWORD,
+ ) -> HANDLE;
+ pub fn IsProcessorFeaturePresent(
+ ProcessorFeature: DWORD,
+ ) -> BOOL;
+ pub fn GetProcessHandleCount(
+ hProcess: HANDLE,
+ pdwHandleCount: PDWORD,
+ ) -> BOOL;
+ pub fn GetCurrentProcessorNumber() -> DWORD;
+ pub fn SetThreadIdealProcessorEx(
+ hThread: HANDLE,
+ lpIdealProcessor: PPROCESSOR_NUMBER,
+ lpPreviousIdealProcessor: PPROCESSOR_NUMBER,
+ ) -> BOOL;
+ pub fn GetThreadIdealProcessorEx(
+ hThread: HANDLE,
+ lpIdealProcessor: PPROCESSOR_NUMBER,
+ ) -> BOOL;
+ pub fn GetCurrentProcessorNumberEx(
+ ProcNumber: PPROCESSOR_NUMBER,
+ );
+ pub fn GetProcessPriorityBoost(
+ hProcess: HANDLE,
+ pDisablePriorityBoost: PBOOL,
+ ) -> BOOL;
+ pub fn SetProcessPriorityBoost(
+ hProcess: HANDLE,
+ bDisablePriorityBoost: BOOL,
+ ) -> BOOL;
+ pub fn GetThreadIOPendingFlag(
+ hThread: HANDLE,
+ lpIOIsPending: PBOOL,
+ ) -> BOOL;
+ pub fn GetSystemTimes(
+ lpIdleTime: LPFILETIME,
+ lpKernelTime: LPFILETIME,
+ lpUserTime: LPFILETIME,
+ ) -> BOOL;
+}
+ENUM!{enum THREAD_INFORMATION_CLASS {
+ ThreadMemoryPriority,
+ ThreadAbsoluteCpuPriority,
+ ThreadInformationClassMax,
+}}
+// MEMORY_PRIORITY_INFORMATION
+extern "system" {
+ pub fn GetThreadInformation(
+ hThread: HANDLE,
+ ThreadInformationClass: THREAD_INFORMATION_CLASS,
+ ThreadInformation: LPVOID,
+ ThreadInformationSize: DWORD,
+ ) -> BOOL;
+ pub fn SetThreadInformation(
+ hThread: HANDLE,
+ ThreadInformationClass: THREAD_INFORMATION_CLASS,
+ ThreadInformation: LPVOID,
+ ThreadInformationSize: DWORD,
+ ) -> BOOL;
+ pub fn IsProcessCritical(
+ hProcess: HANDLE,
+ Critical: PBOOL,
+ ) -> BOOL;
+ pub fn SetProtectedPolicy(
+ PolicyGuid: LPCGUID,
+ PolicyValue: ULONG_PTR,
+ OldPolicyValue: PULONG_PTR,
+ ) -> BOOL;
+ pub fn QueryProtectedPolicy(
+ PolicyGuid: LPCGUID,
+ PolicyValue: PULONG_PTR,
+ ) -> BOOL;
+ pub fn SetThreadIdealProcessor(
+ hThread: HANDLE,
+ dwIdealProcessor: DWORD,
+ ) -> DWORD;
+}
+ENUM!{enum PROCESS_INFORMATION_CLASS {
+ ProcessMemoryPriority,
+ ProcessInformationClassMax,
+}}
+extern "system" {
+ pub fn SetProcessInformation(
+ hProcess: HANDLE,
+ ProcessInformationClass: PROCESS_INFORMATION_CLASS,
+ ProcessInformation: LPVOID,
+ ProcessInformationSize: DWORD,
+ ) -> BOOL;
+ pub fn GetProcessInformation(
+ hProcess: HANDLE,
+ ProcessInformationClass: PROCESS_INFORMATION_CLASS,
+ ProcessInformation: LPVOID,
+ ProcessInformationSize: DWORD,
+ ) -> BOOL;
+ // pub fn GetSystemCpuSetInformation();
+ // pub fn GetProcessDefaultCpuSets();
+ // pub fn SetProcessDefaultCpuSets();
+ // pub fn GetThreadSelectedCpuSets();
+ // pub fn SetThreadSelectedCpuSets();
+ // pub fn CreateProcessAsUserA();
+ pub fn GetProcessShutdownParameters(
+ lpdwLevel: LPDWORD,
+ lpdwFlags: LPDWORD,
+ ) -> BOOL;
+ // pub fn SetThreadDescription();
+ // pub fn GetThreadDescription();
+}
diff --git a/vendor/winapi/src/um/processtopologyapi.rs b/vendor/winapi/src/um/processtopologyapi.rs
new file mode 100644
index 000000000..694f0762a
--- /dev/null
+++ b/vendor/winapi/src/um/processtopologyapi.rs
@@ -0,0 +1,23 @@
+// 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::minwindef::{BOOL, PUSHORT};
+use um::winnt::{GROUP_AFFINITY, HANDLE, PGROUP_AFFINITY};
+extern "system" {
+ pub fn GetProcessGroupAffinity(
+ hProcess: HANDLE,
+ GroupCount: PUSHORT,
+ GroupArray: PUSHORT,
+ ) -> BOOL;
+ pub fn GetThreadGroupAffinity(
+ hThread: HANDLE,
+ GroupAffinity: PGROUP_AFFINITY,
+ ) -> BOOL;
+ pub fn SetThreadGroupAffinity(
+ hThread: HANDLE,
+ GroupAffinity: *const GROUP_AFFINITY,
+ PreviousGroupAffinity: PGROUP_AFFINITY,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/profileapi.rs b/vendor/winapi/src/um/profileapi.rs
new file mode 100644
index 000000000..908457592
--- /dev/null
+++ b/vendor/winapi/src/um/profileapi.rs
@@ -0,0 +1,15 @@
+// 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::minwindef::BOOL;
+use um::winnt::LARGE_INTEGER;
+extern "system" {
+ pub fn QueryPerformanceCounter(
+ lpPerformanceCount: *mut LARGE_INTEGER,
+ ) -> BOOL;
+ pub fn QueryPerformanceFrequency(
+ lpFrequency: *mut LARGE_INTEGER,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/propidl.rs b/vendor/winapi/src/um/propidl.rs
new file mode 100644
index 000000000..fd25abb03
--- /dev/null
+++ b/vendor/winapi/src/um/propidl.rs
@@ -0,0 +1,392 @@
+// 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::guiddef::{CLSID, FMTID, GUID, REFCLSID, REFFMTID};
+use shared::minwindef::{
+ BYTE, DWORD, FILETIME, FLOAT, HIBYTE, HIWORD, INT, LOBYTE, LOWORD, UINT, WORD
+};
+use shared::ntdef::{
+ BOOLEAN, CHAR, HRESULT, LARGE_INTEGER, LONG, LPSTR, LPWSTR, PVOID, SHORT,
+ UCHAR, ULARGE_INTEGER, ULONG, USHORT
+};
+use shared::wtypes::{
+ BSTR, BSTRBLOB, CLIPDATA, CY, DATE, DECIMAL, PROPID, VARIANT_BOOL, VARTYPE
+};
+use shared::wtypesbase::{BLOB, DOUBLE, LPOLESTR, SCODE};
+use um::oaidl::{IDispatch, LPSAFEARRAY};
+use um::objidlbase::IStream;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+pub const PROPSETFLAG_DEFAULT: DWORD = 0;
+pub const PROPSETFLAG_NONSIMPLE: DWORD = 1;
+pub const PROPSETFLAG_ANSI: DWORD = 2;
+pub const PROPSETFLAG_UNBUFFERED: DWORD = 4;
+pub const PROPSET_BEHAVIOR_CASE_SENSITIVE: DWORD = 1;
+STRUCT!{struct VERSIONEDSTREAM {
+ guidVersion: GUID,
+ pStream: *mut IStream,
+}}
+pub type LPVERSIONEDSTREAM = *mut VERSIONEDSTREAM;
+macro_rules! TYPEDEF_CA {
+ ($type_:ty, $name:ident) => { STRUCT!{struct $name {
+ cElems: $crate::shared::ntdef::ULONG,
+ pElems: *mut $type_,
+ }}}
+}
+TYPEDEF_CA!(CHAR, CAC);
+TYPEDEF_CA!(UCHAR, CAUB);
+TYPEDEF_CA!(SHORT, CAI);
+TYPEDEF_CA!(USHORT, CAUI);
+TYPEDEF_CA!(LONG, CAL);
+TYPEDEF_CA!(ULONG, CAUL);
+TYPEDEF_CA!(FLOAT, CAFLT);
+TYPEDEF_CA!(DOUBLE, CADBL);
+TYPEDEF_CA!(CY, CACY);
+TYPEDEF_CA!(DATE, CADATE);
+TYPEDEF_CA!(BSTR, CABSTR);
+TYPEDEF_CA!(BSTRBLOB, CABSTRBLOB);
+TYPEDEF_CA!(VARIANT_BOOL, CABOOL);
+TYPEDEF_CA!(SCODE, CASCODE);
+TYPEDEF_CA!(PROPVARIANT, CAPROPVARIANT);
+TYPEDEF_CA!(LARGE_INTEGER, CAH);
+TYPEDEF_CA!(ULARGE_INTEGER, CAUH);
+TYPEDEF_CA!(LPSTR, CALPSTR);
+TYPEDEF_CA!(LPWSTR, CALPWSTR);
+TYPEDEF_CA!(FILETIME, CAFILETIME);
+TYPEDEF_CA!(CLIPDATA, CACLIPDATA);
+TYPEDEF_CA!(CLSID, CACLSID);
+UNION!{union PROPVARIANT_data {
+ [u64; 1] [u64; 2],
+ cVal cVal_mut: CHAR,
+ bVal bVal_mut: UCHAR,
+ iVal iVal_mut: SHORT,
+ uiVal uiVal_mut: USHORT,
+ lVal lVal_mut: LONG,
+ ulVal ulVal_mut: ULONG,
+ intVal intVal_mut: INT,
+ uintVal uintVal_mut: UINT,
+ hVal hVal_mut: LARGE_INTEGER,
+ uhVal uhVal_mut: ULARGE_INTEGER,
+ fltVal fltVal_mut: FLOAT,
+ dblVal dblVal_mut: DOUBLE,
+ boolVal boolVal_mut: VARIANT_BOOL,
+ scode scode_mut: SCODE,
+ cyVal cyVal_mut: CY,
+ date date_mut: DATE,
+ filetime filetime_mut: FILETIME,
+ puuid puuid_mut: *mut CLSID,
+ pclipdata pclipdata_mut: *mut CLIPDATA,
+ bstrVal bstrVal_mut: BSTR,
+ bstrblobVal bstrblobVal_mut: BSTRBLOB,
+ blob blob_mut: BLOB,
+ pszVal pszVal_mut: LPSTR,
+ pwszVal pwszVal_mut: LPWSTR,
+ punkVal punkVal_mut: *mut IUnknown,
+ pdispVal pdisp_mut: *mut IDispatch,
+ pStream pStream_mut: *mut IStream,
+ // pStorage pStorage_mut: *mut IStorage,
+ pVersionedStream pVersionedStream_mut: LPVERSIONEDSTREAM,
+ parray parray_mut: LPSAFEARRAY,
+ cac cac_mut: CAC,
+ caub caub_mut: CAUB,
+ cai cai_mut: CAI,
+ caui caui_mut: CAUI,
+ cal cal_mut: CAL,
+ caul caul_mut: CAUL,
+ cah cah_mut: CAH,
+ cauh cauh_mut: CAUH,
+ caflt caflt_mut: CAFLT,
+ cadbl cadbl_mut: CADBL,
+ cabool cabool_mut: CABOOL,
+ cascode cascode_mut: CASCODE,
+ cacy cacy_mut: CACY,
+ cadate cadate_mut: CADATE,
+ cafiletime cafiletime_mut: CAFILETIME,
+ cauuid cauuid_mut: CACLSID,
+ caclipdata caclipdata_mut: CACLIPDATA,
+ cabstr cabstr_mut: CABSTR,
+ cabstrblob cabstrblob_mut: CABSTRBLOB,
+ calpstr calpstr_mut: CALPSTR,
+ calpwstr calpwstr_mut: CALPWSTR,
+ capropvar capropvar_mut: CAPROPVARIANT,
+ pcVal pcVal_mut: *mut CHAR,
+ pbVal pbVal_mut: *mut UCHAR,
+ piVal piVal_mut: *mut SHORT,
+ puiVal puiVal_mut: *mut USHORT,
+ plVal plVal_mut: *mut LONG,
+ pulVal pulVal_mut: *mut ULONG,
+ pintVal pintVal_mut: *mut INT,
+ puintVal puintVal_mut: *mut UINT,
+ pfltVal pfltVal_mut: *mut FLOAT,
+ pdblVal pdblVal_mut: *mut DOUBLE,
+ pboolVal pboolVal_mut: *mut VARIANT_BOOL,
+ pdecVal pdecVal_mut: *mut DECIMAL,
+ pscode pscode_mut: *mut SCODE,
+ pcyVal pcyVal_mut: *mut CY,
+ pdate pdate_mut: *mut DATE,
+ ppunkVal ppunkVal_mut: *mut *mut IUnknown,
+ ppdispVal ppdispVal_mut: *mut *mut IDispatch,
+ ppStream ppStream_mut: *mut *mut IStream,
+ // ppStorage ppStorage_mut: *mut *mut IStorage,
+}}
+// This is actually defined as a union between this struct
+// and DECIMAL. I don't this we need to do that.
+STRUCT!{struct PROPVARIANT {
+ vt: VARTYPE,
+ wReserved1: WORD,
+ wReserved2: WORD,
+ wReserved3: WORD,
+ data: PROPVARIANT_data,
+}}
+pub type LPPROPVARIANT = *mut PROPVARIANT;
+pub type REFPROPVARIANT = *const PROPVARIANT;
+pub const PID_DICTIONARY: DWORD = 0;
+pub const PID_CODEPAGE: DWORD = 0x1;
+pub const PID_FIRST_USABLE: DWORD = 0x2;
+pub const PID_FIRST_NAME_DEFAULT: DWORD = 0xfff;
+pub const PID_LOCALE: DWORD = 0x80000000;
+pub const PID_MODIFY_TIME: DWORD = 0x80000001;
+pub const PID_SECURITY: DWORD = 0x80000002;
+pub const PID_BEHAVIOR: DWORD = 0x80000003;
+pub const PID_ILLEGAL: DWORD = 0xffffffff;
+pub const PID_MIN_READONLY: DWORD = 0x80000000;
+pub const PID_MAX_READONLY: DWORD = 0xbfffffff;
+pub const PRSPEC_INVALID: ULONG = 0xffffffff;
+pub const PRSPEC_LPWSTR: ULONG = 0;
+pub const PRSPEC_PROPID: ULONG = 1;
+UNION!{union PROPSPEC_u {
+ [u32; 1] [u64; 1],
+ propid propid_mut: PROPID,
+ lpwstr lpwstr_mut: LPOLESTR,
+}}
+STRUCT!{struct PROPSPEC {
+ ulKind: ULONG,
+ u: PROPSPEC_u,
+}}
+STRUCT!{struct STATPROPSTG {
+ lpwstrName: LPOLESTR,
+ propid: PROPID,
+ vt: VARTYPE,
+}}
+#[inline]
+pub fn PROPSETHDR_OSVER_KIND(dwOSVer: DWORD) -> WORD {
+ HIWORD(dwOSVer)
+}
+#[inline]
+pub fn PROPSETHDR_OSVER_MAJOR(dwOSVer: DWORD) -> BYTE {
+ LOBYTE(LOWORD(dwOSVer))
+}
+#[inline]
+pub fn PROPSETHDR_OSVER_MINOR(dwOSVer: DWORD) -> BYTE {
+ HIBYTE(LOWORD(dwOSVer))
+}
+pub const PROPSETHDR_OSVERSION_UNKNOWN: DWORD = 0xFFFFFFFF;
+STRUCT!{struct STATPROPSETSTG {
+ fmtid: FMTID,
+ clsid: CLSID,
+ grfFlags: DWORD,
+ mtime: FILETIME,
+ ctime: FILETIME,
+ atime: FILETIME,
+ dwOSVersion: DWORD,
+}}
+RIDL!{#[uuid(0x00000138, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IPropertyStorage(IPropertyStorageVtbl): IUnknown(IUnknownVtbl) {
+ fn ReadMultiple(
+ cpspec: ULONG,
+ rgpspec: *const PROPSPEC,
+ rgpropvar: *mut PROPVARIANT,
+ ) -> HRESULT,
+ fn WriteMultiple(
+ cpspec: ULONG,
+ rgpspec: *const PROPSPEC,
+ rgpropvar: *const PROPVARIANT,
+ ) -> HRESULT,
+ fn DeleteMultiple(
+ cpspec: ULONG,
+ rgpspec: *const PROPSPEC,
+ ) -> HRESULT,
+ fn ReadPropertyNames(
+ cppropid: ULONG,
+ rgpropid: *const PROPID,
+ rglpwstrName: *mut LPOLESTR,
+ ) -> HRESULT,
+ fn WritePropertyNames(
+ cppropid: ULONG,
+ rgpropid: *const PROPID,
+ rglpwstrName: *const LPOLESTR,
+ ) -> HRESULT,
+ fn DeletePropertyNames(
+ cppropid: ULONG,
+ rgpropid: *const PROPID,
+ ) -> HRESULT,
+ fn Commit(
+ grfCommitFlags: DWORD,
+ ) -> HRESULT,
+ fn Revert() -> HRESULT,
+ fn Enum(
+ ppenum: *mut *mut IEnumSTATPROPSTG,
+ ) -> HRESULT,
+ fn SetTimes(
+ pctime: *const FILETIME,
+ patime: *const FILETIME,
+ pmtime: *const FILETIME,
+ ) -> HRESULT,
+ fn SetClass(
+ clsid: REFCLSID,
+ ) -> HRESULT,
+ fn Stat(
+ pstatpsstg: *mut STATPROPSETSTG,
+ ) -> HRESULT,
+}}
+pub type LPPROPERTYSETSTORAGE = *mut IPropertySetStorage;
+RIDL!{#[uuid(0x0000013A, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IPropertySetStorage(IPropertySetStorageVtbl): IUnknown(IUnknownVtbl) {
+ fn Create(
+ rfmtid: REFFMTID,
+ pclsid: *const CLSID,
+ grfFlags: DWORD,
+ grfMode: DWORD,
+ ppprstg: *mut *mut IPropertyStorage,
+ ) -> HRESULT,
+ fn Open(
+ rfmtid: REFFMTID,
+ grfMode: DWORD,
+ ppprstg: *mut *mut IPropertyStorage,
+ ) -> HRESULT,
+ fn Delete(
+ rfmtid: REFFMTID,
+ ) -> HRESULT,
+ fn Enum(
+ ppenum: *mut *mut IEnumSTATPROPSTG,
+ ) -> HRESULT,
+}}
+pub type LPENUMSTATPROPSTG = *mut IEnumSTATPROPSTG;
+RIDL!{#[uuid(0x00000139, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IEnumSTATPROPSTG(IEnumSTATPROPSTGVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ celt: ULONG,
+ rgelt: *mut STATPROPSTG,
+ pceltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ celt: ULONG,
+ ) -> HRESULT,
+ fn Revert() -> HRESULT,
+ fn Clone(
+ ppenum: *mut *mut IEnumSTATPROPSTG,
+ ) -> HRESULT,
+}}
+pub type LPENUMSTATPROPSETSTG = *mut IEnumSTATPROPSETSTG;
+RIDL!{#[uuid(0x0000013B, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IEnumSTATPROPSETSTG(IEnumSTATPROPSETSTGVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ celt: ULONG,
+ rgelt: *mut STATPROPSETSTG,
+ pceltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ celt: ULONG,
+ ) -> HRESULT,
+ fn Revert() -> HRESULT,
+ fn Clone(
+ ppenum: *mut *mut IEnumSTATPROPSETSTG,
+ ) -> HRESULT,
+}}
+pub type LPPROPERTYSTORAGE = *mut IPropertyStorage;
+pub const PIDDI_THUMBNAIL: DWORD = 0x00000002;
+pub const PIDSI_TITLE: DWORD = 0x00000002;
+pub const PIDSI_SUBJECT: DWORD = 0x00000003;
+pub const PIDSI_AUTHOR: DWORD = 0x00000004;
+pub const PIDSI_KEYWORDS: DWORD = 0x00000005;
+pub const PIDSI_COMMENTS: DWORD = 0x00000006;
+pub const PIDSI_TEMPLATE: DWORD = 0x00000007;
+pub const PIDSI_LASTAUTHOR: DWORD = 0x00000008;
+pub const PIDSI_REVNUMBER: DWORD = 0x00000009;
+pub const PIDSI_EDITTIME: DWORD = 0x0000000a;
+pub const PIDSI_LASTPRINTED: DWORD = 0x0000000b;
+pub const PIDSI_CREATE_DTM: DWORD = 0x0000000c;
+pub const PIDSI_LASTSAVE_DTM: DWORD = 0x0000000d;
+pub const PIDSI_PAGECOUNT: DWORD = 0x0000000e;
+pub const PIDSI_WORDCOUNT: DWORD = 0x0000000f;
+pub const PIDSI_CHARCOUNT: DWORD = 0x00000010;
+pub const PIDSI_THUMBNAIL: DWORD = 0x00000011;
+pub const PIDSI_APPNAME: DWORD = 0x00000012;
+pub const PIDSI_DOC_SECURITY: DWORD = 0x00000013;
+pub const PIDDSI_CATEGORY: DWORD = 0x00000002;
+pub const PIDDSI_PRESFORMAT: DWORD = 0x00000003;
+pub const PIDDSI_BYTECOUNT: DWORD = 0x00000004;
+pub const PIDDSI_LINECOUNT: DWORD = 0x00000005;
+pub const PIDDSI_PARCOUNT: DWORD = 0x00000006;
+pub const PIDDSI_SLIDECOUNT: DWORD = 0x00000007;
+pub const PIDDSI_NOTECOUNT: DWORD = 0x00000008;
+pub const PIDDSI_HIDDENCOUNT: DWORD = 0x00000009;
+pub const PIDDSI_MMCLIPCOUNT: DWORD = 0x0000000A;
+pub const PIDDSI_SCALE: DWORD = 0x0000000B;
+pub const PIDDSI_HEADINGPAIR: DWORD = 0x0000000C;
+pub const PIDDSI_DOCPARTS: DWORD = 0x0000000D;
+pub const PIDDSI_MANAGER: DWORD = 0x0000000E;
+pub const PIDDSI_COMPANY: DWORD = 0x0000000F;
+pub const PIDDSI_LINKSDIRTY: DWORD = 0x00000010;
+pub const PIDMSI_EDITOR: DWORD = 0x00000002;
+pub const PIDMSI_SUPPLIER: DWORD = 0x00000003;
+pub const PIDMSI_SOURCE: DWORD = 0x00000004;
+pub const PIDMSI_SEQUENCE_NO: DWORD = 0x00000005;
+pub const PIDMSI_PROJECT: DWORD = 0x00000006;
+pub const PIDMSI_STATUS: DWORD = 0x00000007;
+pub const PIDMSI_OWNER: DWORD = 0x00000008;
+pub const PIDMSI_RATING: DWORD = 0x00000009;
+pub const PIDMSI_PRODUCTION: DWORD = 0x0000000A;
+pub const PIDMSI_COPYRIGHT: DWORD = 0x0000000B;
+ENUM!{enum PIDMSI_STATUS_VALUE {
+ PIDMSI_STATUS_NORMAL = 0,
+ PIDMSI_STATUS_NEW,
+ PIDMSI_STATUS_PRELIM,
+ PIDMSI_STATUS_DRAFT,
+ PIDMSI_STATUS_INPROGRESS,
+ PIDMSI_STATUS_EDIT,
+ PIDMSI_STATUS_REVIEW,
+ PIDMSI_STATUS_PROOF,
+ PIDMSI_STATUS_FINAL,
+ PIDMSI_STATUS_OTHER = 0x7fff,
+}}
+extern "system" {
+ pub fn PropVariantCopy(
+ pvarDest: *mut PROPVARIANT,
+ pvarSrc: *const PROPVARIANT,
+ ) -> HRESULT;
+ pub fn PropVariantClear(
+ pvar: *mut PROPVARIANT,
+ ) -> HRESULT;
+ pub fn FreePropVariantArray(
+ cVariants: ULONG,
+ rgvars: *mut PROPVARIANT,
+ ) -> HRESULT;
+}
+// #[inline]
+// pub fn PropVariantInit(pvar: *mut PROPVARIANT) {
+// memset(pvar, 0, sizeof(PROPVARIANT))
+// }
+STRUCT!{struct SERIALIZEDPROPERTYVALUE {
+ dwType: DWORD,
+ rgb: *mut BYTE,
+}}
+pub type PMemoryAllocator = PVOID;
+extern "system" {
+ pub fn StgConvertVariantToProperty(
+ pvar: *const PROPVARIANT,
+ CodePage: USHORT,
+ pprop: *mut SERIALIZEDPROPERTYVALUE,
+ pcb: *mut ULONG,
+ pid: PROPID,
+ fReserved: BOOLEAN,
+ pcIndirect: *mut ULONG,
+ ) -> *mut SERIALIZEDPROPERTYVALUE;
+ pub fn StgConvertPropertyToVariant(
+ pprop: *const SERIALIZEDPROPERTYVALUE,
+ CodePage: USHORT,
+ pvar: *mut PROPVARIANT,
+ pma: *mut PMemoryAllocator
+ ) -> BOOLEAN;
+}
diff --git a/vendor/winapi/src/um/propkey.rs b/vendor/winapi/src/um/propkey.rs
new file mode 100644
index 000000000..bfa7d095b
--- /dev/null
+++ b/vendor/winapi/src/um/propkey.rs
@@ -0,0 +1,2300 @@
+// 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::minwindef::DWORD;
+use shared::ntdef::{DOUBLE, LONG};
+use shared::wtypes::PROPERTYKEY;
+DEFINE_PROPERTYKEY!{PKEY_Audio_ChannelCount,
+ 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 7}
+pub const AUDIO_CHANNELCOUNT_MONO: DWORD = 1;
+pub const AUDIO_CHANNELCOUNT_STEREO: DWORD = 2;
+DEFINE_PROPERTYKEY!{PKEY_Audio_Compression,
+ 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 10}
+DEFINE_PROPERTYKEY!{PKEY_Audio_EncodingBitrate,
+ 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 4}
+DEFINE_PROPERTYKEY!{PKEY_Audio_Format,
+ 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 2}
+DEFINE_PROPERTYKEY!{PKEY_Audio_IsVariableBitRate,
+ 0xE6822FEE, 0x8C17, 0x4D62, 0x82, 0x3C, 0x8E, 0x9C, 0xFC, 0xBD, 0x1D, 0x5C, 100}
+DEFINE_PROPERTYKEY!{PKEY_Audio_PeakValue,
+ 0x2579E5D0, 0x1116, 0x4084, 0xBD, 0x9A, 0x9B, 0x4F, 0x7C, 0xB4, 0xDF, 0x5E, 100}
+DEFINE_PROPERTYKEY!{PKEY_Audio_SampleRate,
+ 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 5}
+DEFINE_PROPERTYKEY!{PKEY_Audio_SampleSize,
+ 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 6}
+DEFINE_PROPERTYKEY!{PKEY_Audio_StreamName,
+ 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 9}
+DEFINE_PROPERTYKEY!{PKEY_Audio_StreamNumber,
+ 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 8}
+DEFINE_PROPERTYKEY!{PKEY_Calendar_Duration,
+ 0x293CA35A, 0x09AA, 0x4DD2, 0xB1, 0x80, 0x1F, 0xE2, 0x45, 0x72, 0x8A, 0x52, 100}
+DEFINE_PROPERTYKEY!{PKEY_Calendar_IsOnline,
+ 0xBFEE9149, 0xE3E2, 0x49A7, 0xA8, 0x62, 0xC0, 0x59, 0x88, 0x14, 0x5C, 0xEC, 100}
+DEFINE_PROPERTYKEY!{PKEY_Calendar_IsRecurring,
+ 0x315B9C8D, 0x80A9, 0x4EF9, 0xAE, 0x16, 0x8E, 0x74, 0x6D, 0xA5, 0x1D, 0x70, 100}
+DEFINE_PROPERTYKEY!{PKEY_Calendar_Location,
+ 0xF6272D18, 0xCECC, 0x40B1, 0xB2, 0x6A, 0x39, 0x11, 0x71, 0x7A, 0xA7, 0xBD, 100}
+DEFINE_PROPERTYKEY!{PKEY_Calendar_OptionalAttendeeAddresses,
+ 0xD55BAE5A, 0x3892, 0x417A, 0xA6, 0x49, 0xC6, 0xAC, 0x5A, 0xAA, 0xEA, 0xB3, 100}
+DEFINE_PROPERTYKEY!{PKEY_Calendar_OptionalAttendeeNames,
+ 0x09429607, 0x582D, 0x437F, 0x84, 0xC3, 0xDE, 0x93, 0xA2, 0xB2, 0x4C, 0x3C, 100}
+DEFINE_PROPERTYKEY!{PKEY_Calendar_OrganizerAddress,
+ 0x744C8242, 0x4DF5, 0x456C, 0xAB, 0x9E, 0x01, 0x4E, 0xFB, 0x90, 0x21, 0xE3, 100}
+DEFINE_PROPERTYKEY!{PKEY_Calendar_OrganizerName,
+ 0xAAA660F9, 0x9865, 0x458E, 0xB4, 0x84, 0x01, 0xBC, 0x7F, 0xE3, 0x97, 0x3E, 100}
+DEFINE_PROPERTYKEY!{PKEY_Calendar_ReminderTime,
+ 0x72FC5BA4, 0x24F9, 0x4011, 0x9F, 0x3F, 0xAD, 0xD2, 0x7A, 0xFA, 0xD8, 0x18, 100}
+DEFINE_PROPERTYKEY!{PKEY_Calendar_RequiredAttendeeAddresses,
+ 0x0BA7D6C3, 0x568D, 0x4159, 0xAB, 0x91, 0x78, 0x1A, 0x91, 0xFB, 0x71, 0xE5, 100}
+DEFINE_PROPERTYKEY!{PKEY_Calendar_RequiredAttendeeNames,
+ 0xB33AF30B, 0xF552, 0x4584, 0x93, 0x6C, 0xCB, 0x93, 0xE5, 0xCD, 0xA2, 0x9F, 100}
+DEFINE_PROPERTYKEY!{PKEY_Calendar_Resources,
+ 0x00F58A38, 0xC54B, 0x4C40, 0x86, 0x96, 0x97, 0x23, 0x59, 0x80, 0xEA, 0xE1, 100}
+DEFINE_PROPERTYKEY!{PKEY_Calendar_ResponseStatus,
+ 0x188C1F91, 0x3C40, 0x4132, 0x9E, 0xC5, 0xD8, 0xB0, 0x3B, 0x72, 0xA8, 0xA2, 100}
+pub const CALENDAR_RESPONSESTATUS_NONE: DWORD = 0;
+pub const CALENDAR_RESPONSESTATUS_ORGANIZED: DWORD = 1;
+pub const CALENDAR_RESPONSESTATUS_TENTATIVE: DWORD = 2;
+pub const CALENDAR_RESPONSESTATUS_ACCEPTED: DWORD = 3;
+pub const CALENDAR_RESPONSESTATUS_DECLINED: DWORD = 4;
+pub const CALENDAR_RESPONSESTATUS_NOTRESPONDED: DWORD = 5;
+DEFINE_PROPERTYKEY!{PKEY_Calendar_ShowTimeAs,
+ 0x5BF396D4, 0x5EB2, 0x466F, 0xBD, 0xE9, 0x2F, 0xB3, 0xF2, 0x36, 0x1D, 0x6E, 100}
+pub const CALENDAR_SHOWTIMEAS_FREE: DWORD = 0;
+pub const CALENDAR_SHOWTIMEAS_TENTATIVE: DWORD = 1;
+pub const CALENDAR_SHOWTIMEAS_BUSY: DWORD = 2;
+pub const CALENDAR_SHOWTIMEAS_OOF: DWORD = 3;
+DEFINE_PROPERTYKEY!{PKEY_Calendar_ShowTimeAsText,
+ 0x53DA57CF, 0x62C0, 0x45C4, 0x81, 0xDE, 0x76, 0x10, 0xBC, 0xEF, 0xD7, 0xF5, 100}
+DEFINE_PROPERTYKEY!{PKEY_Communication_AccountName,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 9}
+DEFINE_PROPERTYKEY!{PKEY_Communication_DateItemExpires,
+ 0x428040AC, 0xA177, 0x4C8A, 0x97, 0x60, 0xF6, 0xF7, 0x61, 0x22, 0x7F, 0x9A, 100}
+DEFINE_PROPERTYKEY!{PKEY_Communication_Direction,
+ 0x8E531030, 0xB960, 0x4346, 0xAE, 0x0D, 0x66, 0xBC, 0x9A, 0x86, 0xFB, 0x94, 100}
+pub const COMMUNICATION_DIRECTION_UNKNOWN: DWORD = 0;
+pub const COMMUNICATION_DIRECTION_INCOMING: DWORD = 1;
+pub const COMMUNICATION_DIRECTION_OUTGOING: DWORD = 2;
+DEFINE_PROPERTYKEY!{PKEY_Communication_FollowupIconIndex,
+ 0x83A6347E, 0x6FE4, 0x4F40, 0xBA, 0x9C, 0xC4, 0x86, 0x52, 0x40, 0xD1, 0xF4, 100}
+DEFINE_PROPERTYKEY!{PKEY_Communication_HeaderItem,
+ 0xC9C34F84, 0x2241, 0x4401, 0xB6, 0x07, 0xBD, 0x20, 0xED, 0x75, 0xAE, 0x7F, 100}
+DEFINE_PROPERTYKEY!{PKEY_Communication_PolicyTag,
+ 0xEC0B4191, 0xAB0B, 0x4C66, 0x90, 0xB6, 0xC6, 0x63, 0x7C, 0xDE, 0xBB, 0xAB, 100}
+DEFINE_PROPERTYKEY!{PKEY_Communication_SecurityFlags,
+ 0x8619A4B6, 0x9F4D, 0x4429, 0x8C, 0x0F, 0xB9, 0x96, 0xCA, 0x59, 0xE3, 0x35, 100}
+DEFINE_PROPERTYKEY!{PKEY_Communication_Suffix,
+ 0x807B653A, 0x9E91, 0x43EF, 0x8F, 0x97, 0x11, 0xCE, 0x04, 0xEE, 0x20, 0xC5, 100}
+DEFINE_PROPERTYKEY!{PKEY_Communication_TaskStatus,
+ 0xBE1A72C6, 0x9A1D, 0x46B7, 0xAF, 0xE7, 0xAF, 0xAF, 0x8C, 0xEF, 0x49, 0x99, 100}
+pub const TASKSTATUS_NOTSTARTED: DWORD = 0;
+pub const TASKSTATUS_INPROGRESS: DWORD = 1;
+pub const TASKSTATUS_COMPLETE: DWORD = 2;
+pub const TASKSTATUS_WAITING: DWORD = 3;
+pub const TASKSTATUS_DEFERRED: DWORD = 4;
+DEFINE_PROPERTYKEY!{PKEY_Communication_TaskStatusText,
+ 0xA6744477, 0xC237, 0x475B, 0xA0, 0x75, 0x54, 0xF3, 0x44, 0x98, 0x29, 0x2A, 100}
+DEFINE_PROPERTYKEY!{PKEY_Computer_DecoratedFreeSpace,
+ 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 7}
+DEFINE_PROPERTYKEY!{PKEY_Contact_AccountPictureDynamicVideo,
+ 0x0B8BB018, 0x2725, 0x4B44, 0x92, 0xBA, 0x79, 0x33, 0xAE, 0xB2, 0xDD, 0xE7, 2}
+DEFINE_PROPERTYKEY!{PKEY_Contact_AccountPictureLarge,
+ 0x0B8BB018, 0x2725, 0x4B44, 0x92, 0xBA, 0x79, 0x33, 0xAE, 0xB2, 0xDD, 0xE7, 3}
+DEFINE_PROPERTYKEY!{PKEY_Contact_AccountPictureSmall,
+ 0x0B8BB018, 0x2725, 0x4B44, 0x92, 0xBA, 0x79, 0x33, 0xAE, 0xB2, 0xDD, 0xE7, 4}
+DEFINE_PROPERTYKEY!{PKEY_Contact_Anniversary,
+ 0x9AD5BADB, 0xCEA7, 0x4470, 0xA0, 0x3D, 0xB8, 0x4E, 0x51, 0xB9, 0x94, 0x9E, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_AssistantName,
+ 0xCD102C9C, 0x5540, 0x4A88, 0xA6, 0xF6, 0x64, 0xE4, 0x98, 0x1C, 0x8C, 0xD1, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_AssistantTelephone,
+ 0x9A93244D, 0xA7AD, 0x4FF8, 0x9B, 0x99, 0x45, 0xEE, 0x4C, 0xC0, 0x9A, 0xF6, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_Birthday,
+ 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 47}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddress,
+ 0x730FB6DD, 0xCF7C, 0x426B, 0xA0, 0x3F, 0xBD, 0x16, 0x6C, 0xC9, 0xEE, 0x24, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddress1Country,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 119}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddress1Locality,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 117}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddress1PostalCode,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 120}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddress1Region,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 118}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddress1Street,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 116}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddress2Country,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 124}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddress2Locality,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 122}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddress2PostalCode,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 125}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddress2Region,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 123}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddress2Street,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 121}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddress3Country,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 129}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddress3Locality,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 127}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddress3PostalCode,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 130}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddress3Region,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 128}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddress3Street,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 126}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddressCity,
+ 0x402B5934, 0xEC5A, 0x48C3, 0x93, 0xE6, 0x85, 0xE8, 0x6A, 0x2D, 0x93, 0x4E, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddressCountry,
+ 0xB0B87314, 0xFCF6, 0x4FEB, 0x8D, 0xFF, 0xA5, 0x0D, 0xA6, 0xAF, 0x56, 0x1C, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddressPostalCode,
+ 0xE1D4A09E, 0xD758, 0x4CD1, 0xB6, 0xEC, 0x34, 0xA8, 0xB5, 0xA7, 0x3F, 0x80, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddressPostOfficeBox,
+ 0xBC4E71CE, 0x17F9, 0x48D5, 0xBE, 0xE9, 0x02, 0x1D, 0xF0, 0xEA, 0x54, 0x09, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddressState,
+ 0x446F787F, 0x10C4, 0x41CB, 0xA6, 0xC4, 0x4D, 0x03, 0x43, 0x55, 0x15, 0x97, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessAddressStreet,
+ 0xDDD1460F, 0xC0BF, 0x4553, 0x8C, 0xE4, 0x10, 0x43, 0x3C, 0x90, 0x8F, 0xB0, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessEmailAddresses,
+ 0xF271C659, 0x7E5E, 0x471F, 0xBA, 0x25, 0x7F, 0x77, 0xB2, 0x86, 0xF8, 0x36, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessFaxNumber,
+ 0x91EFF6F3, 0x2E27, 0x42CA, 0x93, 0x3E, 0x7C, 0x99, 0x9F, 0xBE, 0x31, 0x0B, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessHomePage,
+ 0x56310920, 0x2491, 0x4919, 0x99, 0xCE, 0xEA, 0xDB, 0x06, 0xFA, 0xFD, 0xB2, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_BusinessTelephone,
+ 0x6A15E5A0, 0x0A1E, 0x4CD7, 0xBB, 0x8C, 0xD2, 0xF1, 0xB0, 0xC9, 0x29, 0xBC, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_CallbackTelephone,
+ 0xBF53D1C3, 0x49E0, 0x4F7F, 0x85, 0x67, 0x5A, 0x82, 0x1D, 0x8A, 0xC5, 0x42, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_CarTelephone,
+ 0x8FDC6DEA, 0xB929, 0x412B, 0xBA, 0x90, 0x39, 0x7A, 0x25, 0x74, 0x65, 0xFE, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_Children,
+ 0xD4729704, 0x8EF1, 0x43EF, 0x90, 0x24, 0x2B, 0xD3, 0x81, 0x18, 0x7F, 0xD5, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_CompanyMainTelephone,
+ 0x8589E481, 0x6040, 0x473D, 0xB1, 0x71, 0x7F, 0xA8, 0x9C, 0x27, 0x08, 0xED, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_ConnectedServiceDisplayName,
+ 0x39B77F4F, 0xA104, 0x4863, 0xB3, 0x95, 0x2D, 0xB2, 0xAD, 0x8F, 0x7B, 0xC1, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_ConnectedServiceIdentities,
+ 0x80F41EB8, 0xAFC4, 0x4208, 0xAA, 0x5F, 0xCC, 0xE2, 0x1A, 0x62, 0x72, 0x81, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_ConnectedServiceName,
+ 0xB5C84C9E, 0x5927, 0x46B5, 0xA3, 0xCC, 0x93, 0x3C, 0x21, 0xB7, 0x84, 0x69, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_ConnectedServiceSupportedActions,
+ 0xA19FB7A9, 0x024B, 0x4371, 0xA8, 0xBF, 0x4D, 0x29, 0xC3, 0xE4, 0xE9, 0xC9, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_DataSuppliers,
+ 0x9660C283, 0xFC3A, 0x4A08, 0xA0, 0x96, 0xEE, 0xD3, 0xAA, 0xC4, 0x6D, 0xA2, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_Department,
+ 0xFC9F7306, 0xFF8F, 0x4D49, 0x9F, 0xB6, 0x3F, 0xFE, 0x5C, 0x09, 0x51, 0xEC, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_DisplayBusinessPhoneNumbers,
+ 0x364028DA, 0xD895, 0x41FE, 0xA5, 0x84, 0x30, 0x2B, 0x1B, 0xB7, 0x0A, 0x76, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_DisplayHomePhoneNumbers,
+ 0x5068BCDF, 0xD697, 0x4D85, 0x8C, 0x53, 0x1F, 0x1C, 0xDA, 0xB0, 0x17, 0x63, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_DisplayMobilePhoneNumbers,
+ 0x9CB0C358, 0x9D7A, 0x46B1, 0xB4, 0x66, 0xDC, 0xC6, 0xF1, 0xA3, 0xD9, 0x3D, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_DisplayOtherPhoneNumbers,
+ 0x03089873, 0x8EE8, 0x4191, 0xBD, 0x60, 0xD3, 0x1F, 0x72, 0xB7, 0x90, 0x0B, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_EmailAddress,
+ 0xF8FA7FA3, 0xD12B, 0x4785, 0x8A, 0x4E, 0x69, 0x1A, 0x94, 0xF7, 0xA3, 0xE7, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_EmailAddress2,
+ 0x38965063, 0xEDC8, 0x4268, 0x84, 0x91, 0xB7, 0x72, 0x31, 0x72, 0xCF, 0x29, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_EmailAddress3,
+ 0x644D37B4, 0xE1B3, 0x4BAD, 0xB0, 0x99, 0x7E, 0x7C, 0x04, 0x96, 0x6A, 0xCA, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_EmailAddresses,
+ 0x84D8F337, 0x981D, 0x44B3, 0x96, 0x15, 0xC7, 0x59, 0x6D, 0xBA, 0x17, 0xE3, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_EmailName,
+ 0xCC6F4F24, 0x6083, 0x4BD4, 0x87, 0x54, 0x67, 0x4D, 0x0D, 0xE8, 0x7A, 0xB8, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_FileAsName,
+ 0xF1A24AA7, 0x9CA7, 0x40F6, 0x89, 0xEC, 0x97, 0xDE, 0xF9, 0xFF, 0xE8, 0xDB, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_FirstName,
+ 0x14977844, 0x6B49, 0x4AAD, 0xA7, 0x14, 0xA4, 0x51, 0x3B, 0xF6, 0x04, 0x60, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_FullName,
+ 0x635E9051, 0x50A5, 0x4BA2, 0xB9, 0xDB, 0x4E, 0xD0, 0x56, 0xC7, 0x72, 0x96, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_Gender,
+ 0x3C8CEE58, 0xD4F0, 0x4CF9, 0xB7, 0x56, 0x4E, 0x5D, 0x24, 0x44, 0x7B, 0xCD, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_GenderValue,
+ 0x3C8CEE58, 0xD4F0, 0x4CF9, 0xB7, 0x56, 0x4E, 0x5D, 0x24, 0x44, 0x7B, 0xCD, 101}
+pub const GENDERVALUE_UNSPECIFIED: DWORD = 0;
+pub const GENDERVALUE_FEMALE: DWORD = 1;
+pub const GENDERVALUE_MALE: DWORD = 2;
+DEFINE_PROPERTYKEY!{PKEY_Contact_Hobbies,
+ 0x5DC2253F, 0x5E11, 0x4ADF, 0x9C, 0xFE, 0x91, 0x0D, 0xD0, 0x1E, 0x3E, 0x70, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddress,
+ 0x98F98354, 0x617A, 0x46B8, 0x85, 0x60, 0x5B, 0x1B, 0x64, 0xBF, 0x1F, 0x89, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddress1Country,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 104}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddress1Locality,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 102}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddress1PostalCode,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 105}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddress1Region,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 103}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddress1Street,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 101}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddress2Country,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 109}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddress2Locality,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 107}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddress2PostalCode,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 110}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddress2Region,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 108}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddress2Street,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 106}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddress3Country,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 114}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddress3Locality,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 112}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddress3PostalCode,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 115}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddress3Region,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 113}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddress3Street,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 111}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddressCity,
+ 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 65}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddressCountry,
+ 0x08A65AA1, 0xF4C9, 0x43DD, 0x9D, 0xDF, 0xA3, 0x3D, 0x8E, 0x7E, 0xAD, 0x85, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddressPostalCode,
+ 0x8AFCC170, 0x8A46, 0x4B53, 0x9E, 0xEE, 0x90, 0xBA, 0xE7, 0x15, 0x1E, 0x62, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddressPostOfficeBox,
+ 0x7B9F6399, 0x0A3F, 0x4B12, 0x89, 0xBD, 0x4A, 0xDC, 0x51, 0xC9, 0x18, 0xAF, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddressState,
+ 0xC89A23D0, 0x7D6D, 0x4EB8, 0x87, 0xD4, 0x77, 0x6A, 0x82, 0xD4, 0x93, 0xE5, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeAddressStreet,
+ 0x0ADEF160, 0xDB3F, 0x4308, 0x9A, 0x21, 0x06, 0x23, 0x7B, 0x16, 0xFA, 0x2A, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeEmailAddresses,
+ 0x56C90E9D, 0x9D46, 0x4963, 0x88, 0x6F, 0x2E, 0x1C, 0xD9, 0xA6, 0x94, 0xEF, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeFaxNumber,
+ 0x660E04D6, 0x81AB, 0x4977, 0xA0, 0x9F, 0x82, 0x31, 0x31, 0x13, 0xAB, 0x26, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_HomeTelephone,
+ 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 20}
+DEFINE_PROPERTYKEY!{PKEY_Contact_IMAddress,
+ 0xD68DBD8A, 0x3374, 0x4B81, 0x99, 0x72, 0x3E, 0xC3, 0x06, 0x82, 0xDB, 0x3D, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_Initials,
+ 0xF3D8F40D, 0x50CB, 0x44A2, 0x97, 0x18, 0x40, 0xCB, 0x91, 0x19, 0x49, 0x5D, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JA_CompanyNamePhonetic,
+ 0x897B3694, 0xFE9E, 0x43E6, 0x80, 0x66, 0x26, 0x0F, 0x59, 0x0C, 0x01, 0x00, 2}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JA_FirstNamePhonetic,
+ 0x897B3694, 0xFE9E, 0x43E6, 0x80, 0x66, 0x26, 0x0F, 0x59, 0x0C, 0x01, 0x00, 3}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JA_LastNamePhonetic,
+ 0x897B3694, 0xFE9E, 0x43E6, 0x80, 0x66, 0x26, 0x0F, 0x59, 0x0C, 0x01, 0x00, 4}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo1CompanyAddress,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 120}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo1CompanyName,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 102}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo1Department,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 106}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo1Manager,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 105}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo1OfficeLocation,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 104}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo1Title,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 103}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo1YomiCompanyName,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 101}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo2CompanyAddress,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 121}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo2CompanyName,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 108}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo2Department,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 113}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo2Manager,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 112}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo2OfficeLocation,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 110}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo2Title,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 109}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo2YomiCompanyName,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 107}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo3CompanyAddress,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 123}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo3CompanyName,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 115}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo3Department,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 119}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo3Manager,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 118}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo3OfficeLocation,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 117}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo3Title,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 116}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobInfo3YomiCompanyName,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 114}
+DEFINE_PROPERTYKEY!{PKEY_Contact_JobTitle,
+ 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 6}
+DEFINE_PROPERTYKEY!{PKEY_Contact_Label,
+ 0x97B0AD89, 0xDF49, 0x49CC, 0x83, 0x4E, 0x66, 0x09, 0x74, 0xFD, 0x75, 0x5B, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_LastName,
+ 0x8F367200, 0xC270, 0x457C, 0xB1, 0xD4, 0xE0, 0x7C, 0x5B, 0xCD, 0x90, 0xC7, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_MailingAddress,
+ 0xC0AC206A, 0x827E, 0x4650, 0x95, 0xAE, 0x77, 0xE2, 0xBB, 0x74, 0xFC, 0xC9, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_MiddleName,
+ 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 71}
+DEFINE_PROPERTYKEY!{PKEY_Contact_MobileTelephone,
+ 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 35}
+DEFINE_PROPERTYKEY!{PKEY_Contact_NickName,
+ 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 74}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OfficeLocation,
+ 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 7}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddress,
+ 0x508161FA, 0x313B, 0x43D5, 0x83, 0xA1, 0xC1, 0xAC, 0xCF, 0x68, 0x62, 0x2C, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddress1Country,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 134}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddress1Locality,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 132}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddress1PostalCode,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 135}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddress1Region,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 133}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddress1Street,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 131}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddress2Country,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 139}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddress2Locality,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 137}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddress2PostalCode,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 140}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddress2Region,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 138}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddress2Street,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 136}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddress3Country,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 144}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddress3Locality,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 142}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddress3PostalCode,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 145}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddress3Region,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 143}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddress3Street,
+ 0xA7B6F596, 0xD678, 0x4BC1, 0xB0, 0x5F, 0x02, 0x03, 0xD2, 0x7E, 0x8A, 0xA1, 141}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddressCity,
+ 0x6E682923, 0x7F7B, 0x4F0C, 0xA3, 0x37, 0xCF, 0xCA, 0x29, 0x66, 0x87, 0xBF, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddressCountry,
+ 0x8F167568, 0x0AAE, 0x4322, 0x8E, 0xD9, 0x60, 0x55, 0xB7, 0xB0, 0xE3, 0x98, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddressPostalCode,
+ 0x95C656C1, 0x2ABF, 0x4148, 0x9E, 0xD3, 0x9E, 0xC6, 0x02, 0xE3, 0xB7, 0xCD, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddressPostOfficeBox,
+ 0x8B26EA41, 0x058F, 0x43F6, 0xAE, 0xCC, 0x40, 0x35, 0x68, 0x1C, 0xE9, 0x77, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddressState,
+ 0x71B377D6, 0xE570, 0x425F, 0xA1, 0x70, 0x80, 0x9F, 0xAE, 0x73, 0xE5, 0x4E, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherAddressStreet,
+ 0xFF962609, 0xB7D6, 0x4999, 0x86, 0x2D, 0x95, 0x18, 0x0D, 0x52, 0x9A, 0xEA, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_OtherEmailAddresses,
+ 0x11D6336B, 0x38C4, 0x4EC9, 0x84, 0xD6, 0xEB, 0x38, 0xD0, 0xB1, 0x50, 0xAF, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_PagerTelephone,
+ 0xD6304E01, 0xF8F5, 0x4F45, 0x8B, 0x15, 0xD0, 0x24, 0xA6, 0x29, 0x67, 0x89, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_PersonalTitle,
+ 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 69}
+DEFINE_PROPERTYKEY!{PKEY_Contact_PhoneNumbersCanonical,
+ 0xD042D2A1, 0x927E, 0x40B5, 0xA5, 0x03, 0x6E, 0xDB, 0xD4, 0x2A, 0x51, 0x7E, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_Prefix,
+ 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 75}
+DEFINE_PROPERTYKEY!{PKEY_Contact_PrimaryAddressCity,
+ 0xC8EA94F0, 0xA9E3, 0x4969, 0xA9, 0x4B, 0x9C, 0x62, 0xA9, 0x53, 0x24, 0xE0, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_PrimaryAddressCountry,
+ 0xE53D799D, 0x0F3F, 0x466E, 0xB2, 0xFF, 0x74, 0x63, 0x4A, 0x3C, 0xB7, 0xA4, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_PrimaryAddressPostalCode,
+ 0x18BBD425, 0xECFD, 0x46EF, 0xB6, 0x12, 0x7B, 0x4A, 0x60, 0x34, 0xED, 0xA0, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_PrimaryAddressPostOfficeBox,
+ 0xDE5EF3C7, 0x46E1, 0x484E, 0x99, 0x99, 0x62, 0xC5, 0x30, 0x83, 0x94, 0xC1, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_PrimaryAddressState,
+ 0xF1176DFE, 0x7138, 0x4640, 0x8B, 0x4C, 0xAE, 0x37, 0x5D, 0xC7, 0x0A, 0x6D, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_PrimaryAddressStreet,
+ 0x63C25B20, 0x96BE, 0x488F, 0x87, 0x88, 0xC0, 0x9C, 0x40, 0x7A, 0xD8, 0x12, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_PrimaryEmailAddress,
+ 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 48}
+DEFINE_PROPERTYKEY!{PKEY_Contact_PrimaryTelephone,
+ 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 25}
+DEFINE_PROPERTYKEY!{PKEY_Contact_Profession,
+ 0x7268AF55, 0x1CE4, 0x4F6E, 0xA4, 0x1F, 0xB6, 0xE4, 0xEF, 0x10, 0xE4, 0xA9, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_SpouseName,
+ 0x9D2408B6, 0x3167, 0x422B, 0x82, 0xB0, 0xF5, 0x83, 0xB7, 0xA7, 0xCF, 0xE3, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_Suffix,
+ 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 73}
+DEFINE_PROPERTYKEY!{PKEY_Contact_TelexNumber,
+ 0xC554493C, 0xC1F7, 0x40C1, 0xA7, 0x6C, 0xEF, 0x8C, 0x06, 0x14, 0x00, 0x3E, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_TTYTDDTelephone,
+ 0xAAF16BAC, 0x2B55, 0x45E6, 0x9F, 0x6D, 0x41, 0x5E, 0xB9, 0x49, 0x10, 0xDF, 100}
+DEFINE_PROPERTYKEY!{PKEY_Contact_WebPage,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 18}
+DEFINE_PROPERTYKEY!{PKEY_Contact_Webpage2,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 124}
+DEFINE_PROPERTYKEY!{PKEY_Contact_Webpage3,
+ 0x00F63DD8, 0x22BD, 0x4A5D, 0xBA, 0x34, 0x5C, 0xB0, 0xB9, 0xBD, 0xCB, 0x03, 125}
+DEFINE_PROPERTYKEY!{PKEY_AcquisitionID,
+ 0x65A98875, 0x3C80, 0x40AB, 0xAB, 0xBC, 0xEF, 0xDA, 0xF7, 0x7D, 0xBE, 0xE2, 100}
+DEFINE_PROPERTYKEY!{PKEY_ApplicationDefinedProperties,
+ 0xCDBFC167, 0x337E, 0x41D8, 0xAF, 0x7C, 0x8C, 0x09, 0x20, 0x54, 0x29, 0xC7, 100}
+DEFINE_PROPERTYKEY!{PKEY_ApplicationName,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 18}
+DEFINE_PROPERTYKEY!{PKEY_AppZoneIdentifier,
+ 0x502CFEAB, 0x47EB, 0x459C, 0xB9, 0x60, 0xE6, 0xD8, 0x72, 0x8F, 0x77, 0x01, 102}
+DEFINE_PROPERTYKEY!{PKEY_Author,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 4}
+DEFINE_PROPERTYKEY!{PKEY_CachedFileUpdaterContentIdForConflictResolution,
+ 0xFCEFF153, 0xE839, 0x4CF3, 0xA9, 0xE7, 0xEA, 0x22, 0x83, 0x20, 0x94, 0xB8, 114}
+DEFINE_PROPERTYKEY!{PKEY_CachedFileUpdaterContentIdForStream,
+ 0xFCEFF153, 0xE839, 0x4CF3, 0xA9, 0xE7, 0xEA, 0x22, 0x83, 0x20, 0x94, 0xB8, 113}
+DEFINE_PROPERTYKEY!{PKEY_Capacity,
+ 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 3}
+DEFINE_PROPERTYKEY!{PKEY_Category,
+ 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 2}
+DEFINE_PROPERTYKEY!{PKEY_Comment,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 6}
+DEFINE_PROPERTYKEY!{PKEY_Company,
+ 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 15}
+DEFINE_PROPERTYKEY!{PKEY_ComputerName,
+ 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 5}
+DEFINE_PROPERTYKEY!{PKEY_ContainedItems,
+ 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 29}
+DEFINE_PROPERTYKEY!{PKEY_ContentStatus,
+ 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 27}
+DEFINE_PROPERTYKEY!{PKEY_ContentType,
+ 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 26}
+DEFINE_PROPERTYKEY!{PKEY_Copyright,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 11}
+DEFINE_PROPERTYKEY!{PKEY_CreatorAppId,
+ 0xC2EA046E, 0x033C, 0x4E91, 0xBD, 0x5B, 0xD4, 0x94, 0x2F, 0x6B, 0xBE, 0x49, 2}
+DEFINE_PROPERTYKEY!{PKEY_CreatorOpenWithUIOptions,
+ 0xC2EA046E, 0x033C, 0x4E91, 0xBD, 0x5B, 0xD4, 0x94, 0x2F, 0x6B, 0xBE, 0x49, 3}
+pub const CREATOROPENWITHUIOPTION_HIDDEN: DWORD = 0;
+pub const CREATOROPENWITHUIOPTION_VISIBLE: DWORD = 1;
+DEFINE_PROPERTYKEY!{PKEY_DataObjectFormat,
+ 0x1E81A3F8, 0xA30F, 0x4247, 0xB9, 0xEE, 0x1D, 0x03, 0x68, 0xA9, 0x42, 0x5C, 2}
+DEFINE_PROPERTYKEY!{PKEY_DateAccessed,
+ 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 16}
+DEFINE_PROPERTYKEY!{PKEY_DateAcquired,
+ 0x2CBAA8F5, 0xD81F, 0x47CA, 0xB1, 0x7A, 0xF8, 0xD8, 0x22, 0x30, 0x01, 0x31, 100}
+DEFINE_PROPERTYKEY!{PKEY_DateArchived,
+ 0x43F8D7B7, 0xA444, 0x4F87, 0x93, 0x83, 0x52, 0x27, 0x1C, 0x9B, 0x91, 0x5C, 100}
+DEFINE_PROPERTYKEY!{PKEY_DateCompleted,
+ 0x72FAB781, 0xACDA, 0x43E5, 0xB1, 0x55, 0xB2, 0x43, 0x4F, 0x85, 0xE6, 0x78, 100}
+DEFINE_PROPERTYKEY!{PKEY_DateCreated,
+ 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 15}
+DEFINE_PROPERTYKEY!{PKEY_DateImported,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 18258}
+DEFINE_PROPERTYKEY!{PKEY_DateModified,
+ 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 14}
+DEFINE_PROPERTYKEY!{PKEY_DefaultSaveLocationDisplay,
+ 0x5D76B67F, 0x9B3D, 0x44BB, 0xB6, 0xAE, 0x25, 0xDA, 0x4F, 0x63, 0x8A, 0x67, 10}
+pub const ISDEFAULTSAVE_NONE: DWORD = 0;
+pub const ISDEFAULTSAVE_OWNER: DWORD = 1;
+pub const ISDEFAULTSAVE_NONOWNER: DWORD = 2;
+pub const ISDEFAULTSAVE_BOTH: DWORD = 3;
+DEFINE_PROPERTYKEY!{PKEY_DueDate,
+ 0x3F8472B5, 0xE0AF, 0x4DB2, 0x80, 0x71, 0xC5, 0x3F, 0xE7, 0x6A, 0xE7, 0xCE, 100}
+DEFINE_PROPERTYKEY!{PKEY_EndDate,
+ 0xC75FAA05, 0x96FD, 0x49E7, 0x9C, 0xB4, 0x9F, 0x60, 0x10, 0x82, 0xD5, 0x53, 100}
+DEFINE_PROPERTYKEY!{PKEY_ExpandoProperties,
+ 0x6FA20DE6, 0xD11C, 0x4D9D, 0xA1, 0x54, 0x64, 0x31, 0x76, 0x28, 0xC1, 0x2D, 100}
+DEFINE_PROPERTYKEY!{PKEY_FileAllocationSize,
+ 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 18}
+DEFINE_PROPERTYKEY!{PKEY_FileAttributes,
+ 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 13}
+DEFINE_PROPERTYKEY!{PKEY_FileCount,
+ 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 12}
+DEFINE_PROPERTYKEY!{PKEY_FileDescription,
+ 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 3}
+DEFINE_PROPERTYKEY!{PKEY_FileExtension,
+ 0xE4F10A3C, 0x49E6, 0x405D, 0x82, 0x88, 0xA2, 0x3B, 0xD4, 0xEE, 0xAA, 0x6C, 100}
+DEFINE_PROPERTYKEY!{PKEY_FileFRN,
+ 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 21}
+DEFINE_PROPERTYKEY!{PKEY_FileName,
+ 0x41CF5AE0, 0xF75A, 0x4806, 0xBD, 0x87, 0x59, 0xC7, 0xD9, 0x24, 0x8E, 0xB9, 100}
+DEFINE_PROPERTYKEY!{PKEY_FileOfflineAvailabilityStatus,
+ 0xFCEFF153, 0xE839, 0x4CF3, 0xA9, 0xE7, 0xEA, 0x22, 0x83, 0x20, 0x94, 0xB8, 100}
+pub const FILEOFFLINEAVAILABILITYSTATUS_PROP_NOTAVAILABLEOFFLINE: DWORD = 0;
+pub const FILEOFFLINEAVAILABILITYSTATUS_PROP_PARTIALLYAVAILABLEOFFLINE: DWORD = 1;
+DEFINE_PROPERTYKEY!{PKEY_FileOwner,
+ 0x9B174B34, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 4}
+DEFINE_PROPERTYKEY!{PKEY_FilePlaceholderStatus,
+ 0xB2F9B9D6, 0xFEC4, 0x4DD5, 0x94, 0xD7, 0x89, 0x57, 0x48, 0x8C, 0x80, 0x7B, 2}
+DEFINE_PROPERTYKEY!{PKEY_FileVersion,
+ 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 4}
+DEFINE_PROPERTYKEY!{PKEY_FindData,
+ 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 0}
+DEFINE_PROPERTYKEY!{PKEY_FlagColor,
+ 0x67DF94DE, 0x0CA7, 0x4D6F, 0xB7, 0x92, 0x05, 0x3A, 0x3E, 0x4F, 0x03, 0xCF, 100}
+pub const FLAGCOLOR_PURPLE: DWORD = 1;
+pub const FLAGCOLOR_ORANGE: DWORD = 2;
+pub const FLAGCOLOR_GREEN: DWORD = 3;
+pub const FLAGCOLOR_YELLOW: DWORD = 4;
+pub const FLAGCOLOR_BLUE: DWORD = 5;
+pub const FLAGCOLOR_RED: DWORD = 6;
+DEFINE_PROPERTYKEY!{PKEY_FlagColorText,
+ 0x45EAE747, 0x8E2A, 0x40AE, 0x8C, 0xBF, 0xCA, 0x52, 0xAB, 0xA6, 0x15, 0x2A, 100}
+DEFINE_PROPERTYKEY!{PKEY_FlagStatus,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 12}
+pub const FLAGSTATUS_NOTFLAGGED: LONG = 0;
+pub const FLAGSTATUS_COMPLETED: LONG = 1;
+pub const FLAGSTATUS_FOLLOWUP: LONG = 2;
+DEFINE_PROPERTYKEY!{PKEY_FlagStatusText,
+ 0xDC54FD2E, 0x189D, 0x4871, 0xAA, 0x01, 0x08, 0xC2, 0xF5, 0x7A, 0x4A, 0xBC, 100}
+DEFINE_PROPERTYKEY!{PKEY_FolderKind,
+ 0xFCEFF153, 0xE839, 0x4CF3, 0xA9, 0xE7, 0xEA, 0x22, 0x83, 0x20, 0x94, 0xB8, 101}
+DEFINE_PROPERTYKEY!{PKEY_FolderNameDisplay,
+ 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 25}
+DEFINE_PROPERTYKEY!{PKEY_FreeSpace,
+ 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 2}
+DEFINE_PROPERTYKEY!{PKEY_FullText,
+ 0x1E3EE840, 0xBC2B, 0x476C, 0x82, 0x37, 0x2A, 0xCD, 0x1A, 0x83, 0x9B, 0x22, 6}
+DEFINE_PROPERTYKEY!{PKEY_HighKeywords,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 24}
+DEFINE_PROPERTYKEY!{PKEY_Identity,
+ 0xA26F4AFC, 0x7346, 0x4299, 0xBE, 0x47, 0xEB, 0x1A, 0xE6, 0x13, 0x13, 0x9F, 100}
+DEFINE_PROPERTYKEY!{PKEY_Identity_Blob,
+ 0x8C3B93A4, 0xBAED, 0x1A83, 0x9A, 0x32, 0x10, 0x2E, 0xE3, 0x13, 0xF6, 0xEB, 100}
+DEFINE_PROPERTYKEY!{PKEY_Identity_DisplayName,
+ 0x7D683FC9, 0xD155, 0x45A8, 0xBB, 0x1F, 0x89, 0xD1, 0x9B, 0xCB, 0x79, 0x2F, 100}
+DEFINE_PROPERTYKEY!{PKEY_Identity_InternetSid,
+ 0x6D6D5D49, 0x265D, 0x4688, 0x9F, 0x4E, 0x1F, 0xDD, 0x33, 0xE7, 0xCC, 0x83, 100}
+DEFINE_PROPERTYKEY!{PKEY_Identity_IsMeIdentity,
+ 0xA4108708, 0x09DF, 0x4377, 0x9D, 0xFC, 0x6D, 0x99, 0x98, 0x6D, 0x5A, 0x67, 100}
+DEFINE_PROPERTYKEY!{PKEY_Identity_KeyProviderContext,
+ 0xA26F4AFC, 0x7346, 0x4299, 0xBE, 0x47, 0xEB, 0x1A, 0xE6, 0x13, 0x13, 0x9F, 17}
+DEFINE_PROPERTYKEY!{PKEY_Identity_KeyProviderName,
+ 0xA26F4AFC, 0x7346, 0x4299, 0xBE, 0x47, 0xEB, 0x1A, 0xE6, 0x13, 0x13, 0x9F, 16}
+DEFINE_PROPERTYKEY!{PKEY_Identity_LogonStatusString,
+ 0xF18DEDF3, 0x337F, 0x42C0, 0x9E, 0x03, 0xCE, 0xE0, 0x87, 0x08, 0xA8, 0xC3, 100}
+DEFINE_PROPERTYKEY!{PKEY_Identity_PrimaryEmailAddress,
+ 0xFCC16823, 0xBAED, 0x4F24, 0x9B, 0x32, 0xA0, 0x98, 0x21, 0x17, 0xF7, 0xFA, 100}
+DEFINE_PROPERTYKEY!{PKEY_Identity_PrimarySid,
+ 0x2B1B801E, 0xC0C1, 0x4987, 0x9E, 0xC5, 0x72, 0xFA, 0x89, 0x81, 0x47, 0x87, 100}
+DEFINE_PROPERTYKEY!{PKEY_Identity_ProviderData,
+ 0xA8A74B92, 0x361B, 0x4E9A, 0xB7, 0x22, 0x7C, 0x4A, 0x73, 0x30, 0xA3, 0x12, 100}
+DEFINE_PROPERTYKEY!{PKEY_Identity_ProviderID,
+ 0x74A7DE49, 0xFA11, 0x4D3D, 0xA0, 0x06, 0xDB, 0x7E, 0x08, 0x67, 0x59, 0x16, 100}
+DEFINE_PROPERTYKEY!{PKEY_Identity_QualifiedUserName,
+ 0xDA520E51, 0xF4E9, 0x4739, 0xAC, 0x82, 0x02, 0xE0, 0xA9, 0x5C, 0x90, 0x30, 100}
+DEFINE_PROPERTYKEY!{PKEY_Identity_UniqueID,
+ 0xE55FC3B0, 0x2B60, 0x4220, 0x91, 0x8E, 0xB2, 0x1E, 0x8B, 0xF1, 0x60, 0x16, 100}
+DEFINE_PROPERTYKEY!{PKEY_Identity_UserName,
+ 0xC4322503, 0x78CA, 0x49C6, 0x9A, 0xCC, 0xA6, 0x8E, 0x2A, 0xFD, 0x7B, 0x6B, 100}
+DEFINE_PROPERTYKEY!{PKEY_IdentityProvider_Name,
+ 0xB96EFF7B, 0x35CA, 0x4A35, 0x86, 0x07, 0x29, 0xE3, 0xA5, 0x4C, 0x46, 0xEA, 100}
+DEFINE_PROPERTYKEY!{PKEY_IdentityProvider_Picture,
+ 0x2425166F, 0x5642, 0x4864, 0x99, 0x2F, 0x98, 0xFD, 0x98, 0xF2, 0x94, 0xC3, 100}
+DEFINE_PROPERTYKEY!{PKEY_ImageParsingName,
+ 0xD7750EE0, 0xC6A4, 0x48EC, 0xB5, 0x3E, 0xB8, 0x7B, 0x52, 0xE6, 0xD0, 0x73, 100}
+DEFINE_PROPERTYKEY!{PKEY_Importance,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 11}
+pub const IMPORTANCE_LOW_MIN: LONG = 0;
+pub const IMPORTANCE_LOW_SET: LONG = 1;
+pub const IMPORTANCE_LOW_MAX: LONG = 1;
+pub const IMPORTANCE_NORMAL_MIN: LONG = 2;
+pub const IMPORTANCE_NORMAL_SET: LONG = 3;
+pub const IMPORTANCE_NORMAL_MAX: LONG = 4;
+pub const IMPORTANCE_HIGH_MIN: LONG = 5;
+pub const IMPORTANCE_HIGH_SET: LONG = 5;
+pub const IMPORTANCE_HIGH_MAX: LONG = 5;
+DEFINE_PROPERTYKEY!{PKEY_ImportanceText,
+ 0xA3B29791, 0x7713, 0x4E1D, 0xBB, 0x40, 0x17, 0xDB, 0x85, 0xF0, 0x18, 0x31, 100}
+DEFINE_PROPERTYKEY!{PKEY_IsAttachment,
+ 0xF23F425C, 0x71A1, 0x4FA8, 0x92, 0x2F, 0x67, 0x8E, 0xA4, 0xA6, 0x04, 0x08, 100}
+DEFINE_PROPERTYKEY!{PKEY_IsDefaultNonOwnerSaveLocation,
+ 0x5D76B67F, 0x9B3D, 0x44BB, 0xB6, 0xAE, 0x25, 0xDA, 0x4F, 0x63, 0x8A, 0x67, 5}
+DEFINE_PROPERTYKEY!{PKEY_IsDefaultSaveLocation,
+ 0x5D76B67F, 0x9B3D, 0x44BB, 0xB6, 0xAE, 0x25, 0xDA, 0x4F, 0x63, 0x8A, 0x67, 3}
+DEFINE_PROPERTYKEY!{PKEY_IsDeleted,
+ 0x5CDA5FC8, 0x33EE, 0x4FF3, 0x90, 0x94, 0xAE, 0x7B, 0xD8, 0x86, 0x8C, 0x4D, 100}
+DEFINE_PROPERTYKEY!{PKEY_IsEncrypted,
+ 0x90E5E14E, 0x648B, 0x4826, 0xB2, 0xAA, 0xAC, 0xAF, 0x79, 0x0E, 0x35, 0x13, 10}
+DEFINE_PROPERTYKEY!{PKEY_IsFlagged,
+ 0x5DA84765, 0xE3FF, 0x4278, 0x86, 0xB0, 0xA2, 0x79, 0x67, 0xFB, 0xDD, 0x03, 100}
+DEFINE_PROPERTYKEY!{PKEY_IsFlaggedComplete,
+ 0xA6F360D2, 0x55F9, 0x48DE, 0xB9, 0x09, 0x62, 0x0E, 0x09, 0x0A, 0x64, 0x7C, 100}
+DEFINE_PROPERTYKEY!{PKEY_IsIncomplete,
+ 0x346C8BD1, 0x2E6A, 0x4C45, 0x89, 0xA4, 0x61, 0xB7, 0x8E, 0x8E, 0x70, 0x0F, 100}
+DEFINE_PROPERTYKEY!{PKEY_IsLocationSupported,
+ 0x5D76B67F, 0x9B3D, 0x44BB, 0xB6, 0xAE, 0x25, 0xDA, 0x4F, 0x63, 0x8A, 0x67, 8}
+DEFINE_PROPERTYKEY!{PKEY_IsPinnedToNameSpaceTree,
+ 0x5D76B67F, 0x9B3D, 0x44BB, 0xB6, 0xAE, 0x25, 0xDA, 0x4F, 0x63, 0x8A, 0x67, 2}
+DEFINE_PROPERTYKEY!{PKEY_IsRead,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 10}
+DEFINE_PROPERTYKEY!{PKEY_IsSearchOnlyItem,
+ 0x5D76B67F, 0x9B3D, 0x44BB, 0xB6, 0xAE, 0x25, 0xDA, 0x4F, 0x63, 0x8A, 0x67, 4}
+DEFINE_PROPERTYKEY!{PKEY_IsSendToTarget,
+ 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 33}
+DEFINE_PROPERTYKEY!{PKEY_IsShared,
+ 0xEF884C5B, 0x2BFE, 0x41BB, 0xAA, 0xE5, 0x76, 0xEE, 0xDF, 0x4F, 0x99, 0x02, 100}
+DEFINE_PROPERTYKEY!{PKEY_ItemAuthors,
+ 0xD0A04F0A, 0x462A, 0x48A4, 0xBB, 0x2F, 0x37, 0x06, 0xE8, 0x8D, 0xBD, 0x7D, 100}
+DEFINE_PROPERTYKEY!{PKEY_ItemClassType,
+ 0x048658AD, 0x2DB8, 0x41A4, 0xBB, 0xB6, 0xAC, 0x1E, 0xF1, 0x20, 0x7E, 0xB1, 100}
+DEFINE_PROPERTYKEY!{PKEY_ItemDate,
+ 0xF7DB74B4, 0x4287, 0x4103, 0xAF, 0xBA, 0xF1, 0xB1, 0x3D, 0xCD, 0x75, 0xCF, 100}
+DEFINE_PROPERTYKEY!{PKEY_ItemFolderNameDisplay,
+ 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 2}
+DEFINE_PROPERTYKEY!{PKEY_ItemFolderPathDisplay,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 6}
+DEFINE_PROPERTYKEY!{PKEY_ItemFolderPathDisplayNarrow,
+ 0xDABD30ED, 0x0043, 0x4789, 0xA7, 0xF8, 0xD0, 0x13, 0xA4, 0x73, 0x66, 0x22, 100}
+DEFINE_PROPERTYKEY!{PKEY_ItemName,
+ 0x6B8DA074, 0x3B5C, 0x43BC, 0x88, 0x6F, 0x0A, 0x2C, 0xDC, 0xE0, 0x0B, 0x6F, 100}
+DEFINE_PROPERTYKEY!{PKEY_ItemNameDisplay,
+ 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 10}
+DEFINE_PROPERTYKEY!{PKEY_ItemNameDisplayWithoutExtension,
+ 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 24}
+DEFINE_PROPERTYKEY!{PKEY_ItemNamePrefix,
+ 0xD7313FF1, 0xA77A, 0x401C, 0x8C, 0x99, 0x3D, 0xBD, 0xD6, 0x8A, 0xDD, 0x36, 100}
+DEFINE_PROPERTYKEY!{PKEY_ItemNameSortOverride,
+ 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 23}
+DEFINE_PROPERTYKEY!{PKEY_ItemParticipants,
+ 0xD4D0AA16, 0x9948, 0x41A4, 0xAA, 0x85, 0xD9, 0x7F, 0xF9, 0x64, 0x69, 0x93, 100}
+DEFINE_PROPERTYKEY!{PKEY_ItemPathDisplay,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 7}
+DEFINE_PROPERTYKEY!{PKEY_ItemPathDisplayNarrow,
+ 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 8}
+DEFINE_PROPERTYKEY!{PKEY_ItemSubType,
+ 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 37}
+DEFINE_PROPERTYKEY!{PKEY_ItemType,
+ 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 11}
+DEFINE_PROPERTYKEY!{PKEY_ItemTypeText,
+ 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 4}
+DEFINE_PROPERTYKEY!{PKEY_ItemUrl,
+ 0x49691C90, 0x7E17, 0x101A, 0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9, 9}
+DEFINE_PROPERTYKEY!{PKEY_Keywords,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 5}
+DEFINE_PROPERTYKEY!{PKEY_Kind,
+ 0x1E3EE840, 0xBC2B, 0x476C, 0x82, 0x37, 0x2A, 0xCD, 0x1A, 0x83, 0x9B, 0x22, 3}
+pub const KIND_CALENDAR: &'static str = "calendar";
+pub const KIND_COMMUNICATION: &'static str = "communication";
+pub const KIND_CONTACT: &'static str = "contact";
+pub const KIND_DOCUMENT: &'static str = "document";
+pub const KIND_EMAIL: &'static str = "email";
+pub const KIND_FEED: &'static str = "feed";
+pub const KIND_FOLDER: &'static str = "folder";
+pub const KIND_GAME: &'static str = "game";
+pub const KIND_INSTANTMESSAGE: &'static str = "instantmessage";
+pub const KIND_JOURNAL: &'static str = "journal";
+pub const KIND_LINK: &'static str = "link";
+pub const KIND_MOVIE: &'static str = "movie";
+pub const KIND_MUSIC: &'static str = "music";
+pub const KIND_NOTE: &'static str = "note";
+pub const KIND_PICTURE: &'static str = "picture";
+pub const KIND_PLAYLIST: &'static str = "playlist";
+pub const KIND_PROGRAM: &'static str = "program";
+pub const KIND_RECORDEDTV: &'static str = "recordedtv";
+pub const KIND_SEARCHFOLDER: &'static str = "searchfolder";
+pub const KIND_TASK: &'static str = "task";
+pub const KIND_VIDEO: &'static str = "video";
+pub const KIND_WEBHISTORY: &'static str = "webhistory";
+pub const KIND_UNKNOWN: &'static str = "unknown";
+DEFINE_PROPERTYKEY!{PKEY_KindText,
+ 0xF04BEF95, 0xC585, 0x4197, 0xA2, 0xB7, 0xDF, 0x46, 0xFD, 0xC9, 0xEE, 0x6D, 100}
+DEFINE_PROPERTYKEY!{PKEY_Language,
+ 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 28}
+DEFINE_PROPERTYKEY!{PKEY_LastSyncError,
+ 0xFCEFF153, 0xE839, 0x4CF3, 0xA9, 0xE7, 0xEA, 0x22, 0x83, 0x20, 0x94, 0xB8, 107}
+DEFINE_PROPERTYKEY!{PKEY_LastWriterPackageFamilyName,
+ 0x502CFEAB, 0x47EB, 0x459C, 0xB9, 0x60, 0xE6, 0xD8, 0x72, 0x8F, 0x77, 0x01, 101}
+DEFINE_PROPERTYKEY!{PKEY_LowKeywords,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 25}
+DEFINE_PROPERTYKEY!{PKEY_MediumKeywords,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 26}
+DEFINE_PROPERTYKEY!{PKEY_MileageInformation,
+ 0xFDF84370, 0x031A, 0x4ADD, 0x9E, 0x91, 0x0D, 0x77, 0x5F, 0x1C, 0x66, 0x05, 100}
+DEFINE_PROPERTYKEY!{PKEY_MIMEType,
+ 0x0B63E350, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 5}
+DEFINE_PROPERTYKEY!{PKEY_Null,
+ 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0}
+DEFINE_PROPERTYKEY!{PKEY_OfflineAvailability,
+ 0xA94688B6, 0x7D9F, 0x4570, 0xA6, 0x48, 0xE3, 0xDF, 0xC0, 0xAB, 0x2B, 0x3F, 100}
+pub const OFFLINEAVAILABILITY_NOT_AVAILABLE: DWORD = 0;
+pub const OFFLINEAVAILABILITY_AVAILABLE: DWORD = 1;
+pub const OFFLINEAVAILABILITY_ALWAYS_AVAILABLE: DWORD = 2;
+DEFINE_PROPERTYKEY!{PKEY_OfflineStatus,
+ 0x6D24888F, 0x4718, 0x4BDA, 0xAF, 0xED, 0xEA, 0x0F, 0xB4, 0x38, 0x6C, 0xD8, 100}
+pub const OFFLINESTATUS_ONLINE: DWORD = 0;
+pub const OFFLINESTATUS_OFFLINE: DWORD = 1;
+pub const OFFLINESTATUS_OFFLINE_FORCED: DWORD = 2;
+pub const OFFLINESTATUS_OFFLINE_SLOW: DWORD = 3;
+pub const OFFLINESTATUS_OFFLINE_ERROR: DWORD = 4;
+pub const OFFLINESTATUS_OFFLINE_ITEM_VERSION_CONFLICT: DWORD = 5;
+pub const OFFLINESTATUS_OFFLINE_SUSPENDED: DWORD = 6;
+DEFINE_PROPERTYKEY!{PKEY_OriginalFileName,
+ 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 6}
+DEFINE_PROPERTYKEY!{PKEY_OwnerSID,
+ 0x5D76B67F, 0x9B3D, 0x44BB, 0xB6, 0xAE, 0x25, 0xDA, 0x4F, 0x63, 0x8A, 0x67, 6}
+DEFINE_PROPERTYKEY!{PKEY_ParentalRating,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 21}
+DEFINE_PROPERTYKEY!{PKEY_ParentalRatingReason,
+ 0x10984E0A, 0xF9F2, 0x4321, 0xB7, 0xEF, 0xBA, 0xF1, 0x95, 0xAF, 0x43, 0x19, 100}
+DEFINE_PROPERTYKEY!{PKEY_ParentalRatingsOrganization,
+ 0xA7FE0840, 0x1344, 0x46F0, 0x8D, 0x37, 0x52, 0xED, 0x71, 0x2A, 0x4B, 0xF9, 100}
+DEFINE_PROPERTYKEY!{PKEY_ParsingBindContext,
+ 0xDFB9A04D, 0x362F, 0x4CA3, 0xB3, 0x0B, 0x02, 0x54, 0xB1, 0x7B, 0x5B, 0x84, 100}
+DEFINE_PROPERTYKEY!{PKEY_ParsingName,
+ 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 24}
+DEFINE_PROPERTYKEY!{PKEY_ParsingPath,
+ 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 30}
+DEFINE_PROPERTYKEY!{PKEY_PerceivedType,
+ 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 9}
+DEFINE_PROPERTYKEY!{PKEY_PercentFull,
+ 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 5}
+DEFINE_PROPERTYKEY!{PKEY_Priority,
+ 0x9C1FCF74, 0x2D97, 0x41BA, 0xB4, 0xAE, 0xCB, 0x2E, 0x36, 0x61, 0xA6, 0xE4, 5}
+pub const PRIORITY_PROP_LOW: DWORD = 0;
+pub const PRIORITY_PROP_NORMAL: DWORD = 1;
+pub const PRIORITY_PROP_HIGH: DWORD = 2;
+DEFINE_PROPERTYKEY!{PKEY_PriorityText,
+ 0xD98BE98B, 0xB86B, 0x4095, 0xBF, 0x52, 0x9D, 0x23, 0xB2, 0xE0, 0xA7, 0x52, 100}
+DEFINE_PROPERTYKEY!{PKEY_Project,
+ 0x39A7F922, 0x477C, 0x48DE, 0x8B, 0xC8, 0xB2, 0x84, 0x41, 0xE3, 0x42, 0xE3, 100}
+DEFINE_PROPERTYKEY!{PKEY_ProviderItemID,
+ 0xF21D9941, 0x81F0, 0x471A, 0xAD, 0xEE, 0x4E, 0x74, 0xB4, 0x92, 0x17, 0xED, 100}
+DEFINE_PROPERTYKEY!{PKEY_Rating,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 9}
+pub const RATING_ONE_STAR_MIN: DWORD = 1;
+pub const RATING_ONE_STAR_SET: DWORD = 1;
+pub const RATING_ONE_STAR_MAX: DWORD = 12;
+pub const RATING_TWO_STARS_MIN: DWORD = 13;
+pub const RATING_TWO_STARS_SET: DWORD = 25;
+pub const RATING_TWO_STARS_MAX: DWORD = 37;
+pub const RATING_THREE_STARS_MIN: DWORD = 38;
+pub const RATING_THREE_STARS_SET: DWORD = 50;
+pub const RATING_THREE_STARS_MAX: DWORD = 62;
+pub const RATING_FOUR_STARS_MIN: DWORD = 63;
+pub const RATING_FOUR_STARS_SET: DWORD = 75;
+pub const RATING_FOUR_STARS_MAX: DWORD = 87;
+pub const RATING_FIVE_STARS_MIN: DWORD = 88;
+pub const RATING_FIVE_STARS_SET: DWORD = 99;
+pub const RATING_FIVE_STARS_MAX: DWORD = 99;
+DEFINE_PROPERTYKEY!{PKEY_RatingText,
+ 0x90197CA7, 0xFD8F, 0x4E8C, 0x9D, 0xA3, 0xB5, 0x7E, 0x1E, 0x60, 0x92, 0x95, 100}
+DEFINE_PROPERTYKEY!{PKEY_RemoteConflictingFile,
+ 0xFCEFF153, 0xE839, 0x4CF3, 0xA9, 0xE7, 0xEA, 0x22, 0x83, 0x20, 0x94, 0xB8, 115}
+DEFINE_PROPERTYKEY!{PKEY_Security_AllowedEnterpriseDataProtectionIdentities,
+ 0x38D43380, 0xD418, 0x4830, 0x84, 0xD5, 0x46, 0x93, 0x5A, 0x81, 0xC5, 0xC6, 32}
+DEFINE_PROPERTYKEY!{PKEY_Security_EncryptionOwners,
+ 0x5F5AFF6A, 0x37E5, 0x4780, 0x97, 0xEA, 0x80, 0xC7, 0x56, 0x5C, 0xF5, 0x35, 34}
+DEFINE_PROPERTYKEY!{PKEY_Security_EncryptionOwnersDisplay,
+ 0xDE621B8F, 0xE125, 0x43A3, 0xA3, 0x2D, 0x56, 0x65, 0x44, 0x6D, 0x63, 0x2A, 25}
+DEFINE_PROPERTYKEY!{PKEY_Sensitivity,
+ 0xF8D3F6AC, 0x4874, 0x42CB, 0xBE, 0x59, 0xAB, 0x45, 0x4B, 0x30, 0x71, 0x6A, 100}
+pub const SENSITIVITY_PROP_NORMAL: DWORD = 0;
+pub const SENSITIVITY_PROP_PERSONAL: DWORD = 1;
+pub const SENSITIVITY_PROP_PRIVATE: DWORD = 2;
+pub const SENSITIVITY_PROP_CONFIDENTIAL: DWORD = 3;
+DEFINE_PROPERTYKEY!{PKEY_SensitivityText,
+ 0xD0C7F054, 0x3F72, 0x4725, 0x85, 0x27, 0x12, 0x9A, 0x57, 0x7C, 0xB2, 0x69, 100}
+DEFINE_PROPERTYKEY!{PKEY_SFGAOFlags,
+ 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 25}
+DEFINE_PROPERTYKEY!{PKEY_SharedWith,
+ 0xEF884C5B, 0x2BFE, 0x41BB, 0xAA, 0xE5, 0x76, 0xEE, 0xDF, 0x4F, 0x99, 0x02, 200}
+DEFINE_PROPERTYKEY!{PKEY_ShareUserRating,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 12}
+DEFINE_PROPERTYKEY!{PKEY_SharingStatus,
+ 0xEF884C5B, 0x2BFE, 0x41BB, 0xAA, 0xE5, 0x76, 0xEE, 0xDF, 0x4F, 0x99, 0x02, 300}
+pub const SHARINGSTATUS_NOTSHARED: DWORD = 0;
+pub const SHARINGSTATUS_SHARED: DWORD = 1;
+pub const SHARINGSTATUS_PRIVATE: DWORD = 2;
+DEFINE_PROPERTYKEY!{PKEY_Shell_OmitFromView,
+ 0xDE35258C, 0xC695, 0x4CBC, 0xB9, 0x82, 0x38, 0xB0, 0xAD, 0x24, 0xCE, 0xD0, 2}
+DEFINE_PROPERTYKEY!{PKEY_SimpleRating,
+ 0xA09F084E, 0xAD41, 0x489F, 0x80, 0x76, 0xAA, 0x5B, 0xE3, 0x08, 0x2B, 0xCA, 100}
+DEFINE_PROPERTYKEY!{PKEY_Size,
+ 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 12}
+DEFINE_PROPERTYKEY!{PKEY_SoftwareUsed,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 305}
+DEFINE_PROPERTYKEY!{PKEY_SourceItem,
+ 0x668CDFA5, 0x7A1B, 0x4323, 0xAE, 0x4B, 0xE5, 0x27, 0x39, 0x3A, 0x1D, 0x81, 100}
+DEFINE_PROPERTYKEY!{PKEY_SourcePackageFamilyName,
+ 0xFFAE9DB7, 0x1C8D, 0x43FF, 0x81, 0x8C, 0x84, 0x40, 0x3A, 0xA3, 0x73, 0x2D, 100}
+DEFINE_PROPERTYKEY!{PKEY_StartDate,
+ 0x48FD6EC8, 0x8A12, 0x4CDF, 0xA0, 0x3E, 0x4E, 0xC5, 0xA5, 0x11, 0xED, 0xDE, 100}
+DEFINE_PROPERTYKEY!{PKEY_Status,
+ 0x000214A1, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 9}
+DEFINE_PROPERTYKEY!{PKEY_StorageProviderCallerVersionInformation,
+ 0xB2F9B9D6, 0xFEC4, 0x4DD5, 0x94, 0xD7, 0x89, 0x57, 0x48, 0x8C, 0x80, 0x7B, 7}
+DEFINE_PROPERTYKEY!{PKEY_StorageProviderError,
+ 0xFCEFF153, 0xE839, 0x4CF3, 0xA9, 0xE7, 0xEA, 0x22, 0x83, 0x20, 0x94, 0xB8, 109}
+DEFINE_PROPERTYKEY!{PKEY_StorageProviderFileChecksum,
+ 0xB2F9B9D6, 0xFEC4, 0x4DD5, 0x94, 0xD7, 0x89, 0x57, 0x48, 0x8C, 0x80, 0x7B, 5}
+DEFINE_PROPERTYKEY!{PKEY_StorageProviderFileIdentifier,
+ 0xB2F9B9D6, 0xFEC4, 0x4DD5, 0x94, 0xD7, 0x89, 0x57, 0x48, 0x8C, 0x80, 0x7B, 3}
+DEFINE_PROPERTYKEY!{PKEY_StorageProviderFileRemoteUri,
+ 0xFCEFF153, 0xE839, 0x4CF3, 0xA9, 0xE7, 0xEA, 0x22, 0x83, 0x20, 0x94, 0xB8, 112}
+DEFINE_PROPERTYKEY!{PKEY_StorageProviderFileVersion,
+ 0xB2F9B9D6, 0xFEC4, 0x4DD5, 0x94, 0xD7, 0x89, 0x57, 0x48, 0x8C, 0x80, 0x7B, 4}
+DEFINE_PROPERTYKEY!{PKEY_StorageProviderFileVersionWaterline,
+ 0xB2F9B9D6, 0xFEC4, 0x4DD5, 0x94, 0xD7, 0x89, 0x57, 0x48, 0x8C, 0x80, 0x7B, 6}
+DEFINE_PROPERTYKEY!{PKEY_StorageProviderId,
+ 0xFCEFF153, 0xE839, 0x4CF3, 0xA9, 0xE7, 0xEA, 0x22, 0x83, 0x20, 0x94, 0xB8, 108}
+DEFINE_PROPERTYKEY!{PKEY_StorageProviderShareStatuses,
+ 0xFCEFF153, 0xE839, 0x4CF3, 0xA9, 0xE7, 0xEA, 0x22, 0x83, 0x20, 0x94, 0xB8, 111}
+pub const STORAGE_PROVIDER_SHARE_STATUS_PRIVATE: &'static str = "Private";
+pub const STORAGE_PROVIDER_SHARE_STATUS_SHARED: &'static str = "Shared";
+pub const STORAGE_PROVIDER_SHARE_STATUS_PUBLIC: &'static str = "Public";
+pub const STORAGE_PROVIDER_SHARE_STATUS_GROUP: &'static str = "Group";
+pub const STORAGE_PROVIDER_SHARE_STATUS_OWNER: &'static str = "Owner";
+DEFINE_PROPERTYKEY!{PKEY_StorageProviderSharingStatus,
+ 0xFCEFF153, 0xE839, 0x4CF3, 0xA9, 0xE7, 0xEA, 0x22, 0x83, 0x20, 0x94, 0xB8, 117}
+pub const STORAGE_PROVIDER_SHARINGSTATUS_NOTSHARED: DWORD = 0;
+pub const STORAGE_PROVIDER_SHARINGSTATUS_SHARED: DWORD = 1;
+pub const STORAGE_PROVIDER_SHARINGSTATUS_PRIVATE: DWORD = 2;
+pub const STORAGE_PROVIDER_SHARINGSTATUS_PUBLIC: DWORD = 3;
+pub const STORAGE_PROVIDER_SHARINGSTATUS_SHARED_OWNED: DWORD = 4;
+pub const STORAGE_PROVIDER_SHARINGSTATUS_SHARED_COOWNED: DWORD = 5;
+pub const STORAGE_PROVIDER_SHARINGSTATUS_PUBLIC_OWNED: DWORD = 6;
+pub const STORAGE_PROVIDER_SHARINGSTATUS_PUBLIC_COOWNED: DWORD = 7;
+DEFINE_PROPERTYKEY!{PKEY_StorageProviderStatus,
+ 0xFCEFF153, 0xE839, 0x4CF3, 0xA9, 0xE7, 0xEA, 0x22, 0x83, 0x20, 0x94, 0xB8, 110}
+DEFINE_PROPERTYKEY!{PKEY_Subject,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 3}
+DEFINE_PROPERTYKEY!{PKEY_SyncTransferStatus,
+ 0xFCEFF153, 0xE839, 0x4CF3, 0xA9, 0xE7, 0xEA, 0x22, 0x83, 0x20, 0x94, 0xB8, 103}
+DEFINE_PROPERTYKEY!{PKEY_Thumbnail,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 17}
+DEFINE_PROPERTYKEY!{PKEY_ThumbnailCacheId,
+ 0x446D16B1, 0x8DAD, 0x4870, 0xA7, 0x48, 0x40, 0x2E, 0xA4, 0x3D, 0x78, 0x8C, 100}
+DEFINE_PROPERTYKEY!{PKEY_ThumbnailStream,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 27}
+DEFINE_PROPERTYKEY!{PKEY_Title,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 2}
+DEFINE_PROPERTYKEY!{PKEY_TitleSortOverride,
+ 0xF0F7984D, 0x222E, 0x4AD2, 0x82, 0xAB, 0x1D, 0xD8, 0xEA, 0x40, 0xE5, 0x7E, 300}
+DEFINE_PROPERTYKEY!{PKEY_TotalFileSize,
+ 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 14}
+DEFINE_PROPERTYKEY!{PKEY_Trademarks,
+ 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 9}
+DEFINE_PROPERTYKEY!{PKEY_TransferOrder,
+ 0xFCEFF153, 0xE839, 0x4CF3, 0xA9, 0xE7, 0xEA, 0x22, 0x83, 0x20, 0x94, 0xB8, 106}
+DEFINE_PROPERTYKEY!{PKEY_TransferPosition,
+ 0xFCEFF153, 0xE839, 0x4CF3, 0xA9, 0xE7, 0xEA, 0x22, 0x83, 0x20, 0x94, 0xB8, 104}
+DEFINE_PROPERTYKEY!{PKEY_TransferSize,
+ 0xFCEFF153, 0xE839, 0x4CF3, 0xA9, 0xE7, 0xEA, 0x22, 0x83, 0x20, 0x94, 0xB8, 105}
+DEFINE_PROPERTYKEY!{PKEY_VolumeId,
+ 0x446D16B1, 0x8DAD, 0x4870, 0xA7, 0x48, 0x40, 0x2E, 0xA4, 0x3D, 0x78, 0x8C, 104}
+DEFINE_PROPERTYKEY!{PKEY_ZoneIdentifier,
+ 0x502CFEAB, 0x47EB, 0x459C, 0xB9, 0x60, 0xE6, 0xD8, 0x72, 0x8F, 0x77, 0x01, 100}
+DEFINE_PROPERTYKEY!{PKEY_Device_PrinterURL,
+ 0x0B48F35A, 0xBE6E, 0x4F17, 0xB1, 0x08, 0x3C, 0x40, 0x73, 0xD1, 0x66, 0x9A, 15}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Bluetooth_DeviceAddress,
+ 0x2BD67D8B, 0x8BEB, 0x48D5, 0x87, 0xE0, 0x6C, 0xDA, 0x34, 0x28, 0x04, 0x0A, 1}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Bluetooth_Flags,
+ 0x2BD67D8B, 0x8BEB, 0x48D5, 0x87, 0xE0, 0x6C, 0xDA, 0x34, 0x28, 0x04, 0x0A, 3}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Bluetooth_LastConnectedTime,
+ 0x2BD67D8B, 0x8BEB, 0x48D5, 0x87, 0xE0, 0x6C, 0xDA, 0x34, 0x28, 0x04, 0x0A, 11}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Bluetooth_Manufacturer,
+ 0x2BD67D8B, 0x8BEB, 0x48D5, 0x87, 0xE0, 0x6C, 0xDA, 0x34, 0x28, 0x04, 0x0A, 4}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Bluetooth_ModelNumber,
+ 0x2BD67D8B, 0x8BEB, 0x48D5, 0x87, 0xE0, 0x6C, 0xDA, 0x34, 0x28, 0x04, 0x0A, 5}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Bluetooth_ProductId,
+ 0x2BD67D8B, 0x8BEB, 0x48D5, 0x87, 0xE0, 0x6C, 0xDA, 0x34, 0x28, 0x04, 0x0A, 8}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Bluetooth_ProductVersion,
+ 0x2BD67D8B, 0x8BEB, 0x48D5, 0x87, 0xE0, 0x6C, 0xDA, 0x34, 0x28, 0x04, 0x0A, 9}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Bluetooth_ServiceGuid,
+ 0x2BD67D8B, 0x8BEB, 0x48D5, 0x87, 0xE0, 0x6C, 0xDA, 0x34, 0x28, 0x04, 0x0A, 2}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Bluetooth_VendorId,
+ 0x2BD67D8B, 0x8BEB, 0x48D5, 0x87, 0xE0, 0x6C, 0xDA, 0x34, 0x28, 0x04, 0x0A, 7}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Bluetooth_VendorIdSource,
+ 0x2BD67D8B, 0x8BEB, 0x48D5, 0x87, 0xE0, 0x6C, 0xDA, 0x34, 0x28, 0x04, 0x0A, 6}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Hid_IsReadOnly,
+ 0xCBF38310, 0x4A17, 0x4310, 0xA1, 0xEB, 0x24, 0x7F, 0x0B, 0x67, 0x59, 0x3B, 4}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Hid_ProductId,
+ 0xCBF38310, 0x4A17, 0x4310, 0xA1, 0xEB, 0x24, 0x7F, 0x0B, 0x67, 0x59, 0x3B, 6}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Hid_UsageId,
+ 0xCBF38310, 0x4A17, 0x4310, 0xA1, 0xEB, 0x24, 0x7F, 0x0B, 0x67, 0x59, 0x3B, 3}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Hid_UsagePage,
+ 0xCBF38310, 0x4A17, 0x4310, 0xA1, 0xEB, 0x24, 0x7F, 0x0B, 0x67, 0x59, 0x3B, 2}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Hid_VendorId,
+ 0xCBF38310, 0x4A17, 0x4310, 0xA1, 0xEB, 0x24, 0x7F, 0x0B, 0x67, 0x59, 0x3B, 5}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Hid_VersionNumber,
+ 0xCBF38310, 0x4A17, 0x4310, 0xA1, 0xEB, 0x24, 0x7F, 0x0B, 0x67, 0x59, 0x3B, 7}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_PrinterDriverDirectory,
+ 0x847C66DE, 0xB8D6, 0x4AF9, 0xAB, 0xC3, 0x6F, 0x4F, 0x92, 0x6B, 0xC0, 0x39, 14}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_PrinterDriverName,
+ 0xAFC47170, 0x14F5, 0x498C, 0x8F, 0x30, 0xB0, 0xD1, 0x9B, 0xE4, 0x49, 0xC6, 11}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_PrinterEnumerationFlag,
+ 0xA00742A1, 0xCD8C, 0x4B37, 0x95, 0xAB, 0x70, 0x75, 0x55, 0x87, 0x76, 0x7A, 3}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_PrinterName,
+ 0x0A7B84EF, 0x0C27, 0x463F, 0x84, 0xEF, 0x06, 0xC5, 0x07, 0x00, 0x01, 0xBE, 10}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_PrinterPortName,
+ 0xEEC7B761, 0x6F94, 0x41B1, 0x94, 0x9F, 0xC7, 0x29, 0x72, 0x0D, 0xD1, 0x3C, 12}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Proximity_SupportsNfc,
+ 0xFB3842CD, 0x9E2A, 0x4F83, 0x8F, 0xCC, 0x4B, 0x07, 0x61, 0x13, 0x9A, 0xE9, 2}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Serial_PortName,
+ 0x4C6BF15C, 0x4C03, 0x4AAC, 0x91, 0xF5, 0x64, 0xC0, 0xF8, 0x52, 0xBC, 0xF4, 4}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Serial_UsbProductId,
+ 0x4C6BF15C, 0x4C03, 0x4AAC, 0x91, 0xF5, 0x64, 0xC0, 0xF8, 0x52, 0xBC, 0xF4, 3}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_Serial_UsbVendorId,
+ 0x4C6BF15C, 0x4C03, 0x4AAC, 0x91, 0xF5, 0x64, 0xC0, 0xF8, 0x52, 0xBC, 0xF4, 2}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_WinUsb_DeviceInterfaceClasses,
+ 0x95E127B5, 0x79CC, 0x4E83, 0x9C, 0x9E, 0x84, 0x22, 0x18, 0x7B, 0x3E, 0x0E, 7}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_WinUsb_UsbClass,
+ 0x95E127B5, 0x79CC, 0x4E83, 0x9C, 0x9E, 0x84, 0x22, 0x18, 0x7B, 0x3E, 0x0E, 4}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_WinUsb_UsbProductId,
+ 0x95E127B5, 0x79CC, 0x4E83, 0x9C, 0x9E, 0x84, 0x22, 0x18, 0x7B, 0x3E, 0x0E, 3}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_WinUsb_UsbProtocol,
+ 0x95E127B5, 0x79CC, 0x4E83, 0x9C, 0x9E, 0x84, 0x22, 0x18, 0x7B, 0x3E, 0x0E, 6}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_WinUsb_UsbSubClass,
+ 0x95E127B5, 0x79CC, 0x4E83, 0x9C, 0x9E, 0x84, 0x22, 0x18, 0x7B, 0x3E, 0x0E, 5}
+DEFINE_PROPERTYKEY!{PKEY_DeviceInterface_WinUsb_UsbVendorId,
+ 0x95E127B5, 0x79CC, 0x4E83, 0x9C, 0x9E, 0x84, 0x22, 0x18, 0x7B, 0x3E, 0x0E, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_AepId,
+ 0x3B2CE006, 0x5E61, 0x4FDE, 0xBA, 0xB8, 0x9B, 0x8A, 0xAC, 0x9B, 0x26, 0xDF, 8}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Bluetooth_Cod_Major,
+ 0x5FBD34CD, 0x561A, 0x412E, 0xBA, 0x98, 0x47, 0x8A, 0x6B, 0x0F, 0xEF, 0x1D, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Bluetooth_Cod_Minor,
+ 0x5FBD34CD, 0x561A, 0x412E, 0xBA, 0x98, 0x47, 0x8A, 0x6B, 0x0F, 0xEF, 0x1D, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Bluetooth_Cod_Services_Audio,
+ 0x5FBD34CD, 0x561A, 0x412E, 0xBA, 0x98, 0x47, 0x8A, 0x6B, 0x0F, 0xEF, 0x1D, 10}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Bluetooth_Cod_Services_Capturing,
+ 0x5FBD34CD, 0x561A, 0x412E, 0xBA, 0x98, 0x47, 0x8A, 0x6B, 0x0F, 0xEF, 0x1D, 8}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Bluetooth_Cod_Services_Information,
+ 0x5FBD34CD, 0x561A, 0x412E, 0xBA, 0x98, 0x47, 0x8A, 0x6B, 0x0F, 0xEF, 0x1D, 12}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Bluetooth_Cod_Services_LimitedDiscovery,
+ 0x5FBD34CD, 0x561A, 0x412E, 0xBA, 0x98, 0x47, 0x8A, 0x6B, 0x0F, 0xEF, 0x1D, 4}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Bluetooth_Cod_Services_Networking,
+ 0x5FBD34CD, 0x561A, 0x412E, 0xBA, 0x98, 0x47, 0x8A, 0x6B, 0x0F, 0xEF, 0x1D, 6}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Bluetooth_Cod_Services_ObjectXfer,
+ 0x5FBD34CD, 0x561A, 0x412E, 0xBA, 0x98, 0x47, 0x8A, 0x6B, 0x0F, 0xEF, 0x1D, 9}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Bluetooth_Cod_Services_Positioning,
+ 0x5FBD34CD, 0x561A, 0x412E, 0xBA, 0x98, 0x47, 0x8A, 0x6B, 0x0F, 0xEF, 0x1D, 5}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Bluetooth_Cod_Services_Rendering,
+ 0x5FBD34CD, 0x561A, 0x412E, 0xBA, 0x98, 0x47, 0x8A, 0x6B, 0x0F, 0xEF, 0x1D, 7}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Bluetooth_Cod_Services_Telephony,
+ 0x5FBD34CD, 0x561A, 0x412E, 0xBA, 0x98, 0x47, 0x8A, 0x6B, 0x0F, 0xEF, 0x1D, 11}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Bluetooth_Le_AddressType,
+ 0x995EF0B0, 0x7EB3, 0x4A8B, 0xB9, 0xCE, 0x06, 0x8B, 0xB3, 0xF4, 0xAF, 0x69, 4}
+pub const BLUETOOTH_ADDRESS_TYPE_PUBLIC: LONG = 0;
+pub const BLUETOOTH_ADDRESS_TYPE_RANDOM: LONG = 1;
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Bluetooth_Le_Appearance,
+ 0x995EF0B0, 0x7EB3, 0x4A8B, 0xB9, 0xCE, 0x06, 0x8B, 0xB3, 0xF4, 0xAF, 0x69, 1}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Bluetooth_Le_Appearance_Category,
+ 0x995EF0B0, 0x7EB3, 0x4A8B, 0xB9, 0xCE, 0x06, 0x8B, 0xB3, 0xF4, 0xAF, 0x69, 5}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Bluetooth_Le_Appearance_Subcategory,
+ 0x995EF0B0, 0x7EB3, 0x4A8B, 0xB9, 0xCE, 0x06, 0x8B, 0xB3, 0xF4, 0xAF, 0x69, 6}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Bluetooth_Le_IsConnectable,
+ 0x995EF0B0, 0x7EB3, 0x4A8B, 0xB9, 0xCE, 0x06, 0x8B, 0xB3, 0xF4, 0xAF, 0x69, 8}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_CanPair,
+ 0xE7C3FB29, 0xCAA7, 0x4F47, 0x8C, 0x8B, 0xBE, 0x59, 0xB3, 0x30, 0xD4, 0xC5, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Category,
+ 0xA35996AB, 0x11CF, 0x4935, 0x8B, 0x61, 0xA6, 0x76, 0x10, 0x81, 0xEC, 0xDF, 17}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_ContainerId,
+ 0xE7C3FB29, 0xCAA7, 0x4F47, 0x8C, 0x8B, 0xBE, 0x59, 0xB3, 0x30, 0xD4, 0xC5, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_DeviceAddress,
+ 0xA35996AB, 0x11CF, 0x4935, 0x8B, 0x61, 0xA6, 0x76, 0x10, 0x81, 0xEC, 0xDF, 12}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_IsConnected,
+ 0xA35996AB, 0x11CF, 0x4935, 0x8B, 0x61, 0xA6, 0x76, 0x10, 0x81, 0xEC, 0xDF, 7}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_IsPaired,
+ 0xA35996AB, 0x11CF, 0x4935, 0x8B, 0x61, 0xA6, 0x76, 0x10, 0x81, 0xEC, 0xDF, 16}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_IsPresent,
+ 0xA35996AB, 0x11CF, 0x4935, 0x8B, 0x61, 0xA6, 0x76, 0x10, 0x81, 0xEC, 0xDF, 9}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_Manufacturer,
+ 0xA35996AB, 0x11CF, 0x4935, 0x8B, 0x61, 0xA6, 0x76, 0x10, 0x81, 0xEC, 0xDF, 5}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_ModelId,
+ 0xA35996AB, 0x11CF, 0x4935, 0x8B, 0x61, 0xA6, 0x76, 0x10, 0x81, 0xEC, 0xDF, 4}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_ModelName,
+ 0xA35996AB, 0x11CF, 0x4935, 0x8B, 0x61, 0xA6, 0x76, 0x10, 0x81, 0xEC, 0xDF, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_PointOfService_ConnectionTypes,
+ 0xD4BF61B3, 0x442E, 0x4ADA, 0x88, 0x2D, 0xFA, 0x7B, 0x70, 0xC8, 0x32, 0xD9, 6}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_ProtocolId,
+ 0x3B2CE006, 0x5E61, 0x4FDE, 0xBA, 0xB8, 0x9B, 0x8A, 0xAC, 0x9B, 0x26, 0xDF, 5}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Aep_SignalStrength,
+ 0xA35996AB, 0x11CF, 0x4935, 0x8B, 0x61, 0xA6, 0x76, 0x10, 0x81, 0xEC, 0xDF, 6}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_CanPair,
+ 0x0BBA1EDE, 0x7566, 0x4F47, 0x90, 0xEC, 0x25, 0xFC, 0x56, 0x7C, 0xED, 0x2A, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_Categories,
+ 0x0BBA1EDE, 0x7566, 0x4F47, 0x90, 0xEC, 0x25, 0xFC, 0x56, 0x7C, 0xED, 0x2A, 9}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_Children,
+ 0x0BBA1EDE, 0x7566, 0x4F47, 0x90, 0xEC, 0x25, 0xFC, 0x56, 0x7C, 0xED, 0x2A, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_ContainerId,
+ 0x0BBA1EDE, 0x7566, 0x4F47, 0x90, 0xEC, 0x25, 0xFC, 0x56, 0x7C, 0xED, 0x2A, 12}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_DialProtocol_InstalledApplications,
+ 0x6AF55D45, 0x38DB, 0x4495, 0xAC, 0xB0, 0xD4, 0x72, 0x8A, 0x3B, 0x83, 0x14, 6}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_IsPaired,
+ 0x0BBA1EDE, 0x7566, 0x4F47, 0x90, 0xEC, 0x25, 0xFC, 0x56, 0x7C, 0xED, 0x2A, 4}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_IsPresent,
+ 0x0BBA1EDE, 0x7566, 0x4F47, 0x90, 0xEC, 0x25, 0xFC, 0x56, 0x7C, 0xED, 0x2A, 11}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_Manufacturer,
+ 0x0BBA1EDE, 0x7566, 0x4F47, 0x90, 0xEC, 0x25, 0xFC, 0x56, 0x7C, 0xED, 0x2A, 6}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_ModelIds,
+ 0x0BBA1EDE, 0x7566, 0x4F47, 0x90, 0xEC, 0x25, 0xFC, 0x56, 0x7C, 0xED, 0x2A, 8}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_ModelName,
+ 0x0BBA1EDE, 0x7566, 0x4F47, 0x90, 0xEC, 0x25, 0xFC, 0x56, 0x7C, 0xED, 0x2A, 7}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_ProtocolIds,
+ 0x0BBA1EDE, 0x7566, 0x4F47, 0x90, 0xEC, 0x25, 0xFC, 0x56, 0x7C, 0xED, 0x2A, 13}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_SupportedUriSchemes,
+ 0x6AF55D45, 0x38DB, 0x4495, 0xAC, 0xB0, 0xD4, 0x72, 0x8A, 0x3B, 0x83, 0x14, 5}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_SupportsAudio,
+ 0x6AF55D45, 0x38DB, 0x4495, 0xAC, 0xB0, 0xD4, 0x72, 0x8A, 0x3B, 0x83, 0x14, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_SupportsCapturing,
+ 0x6AF55D45, 0x38DB, 0x4495, 0xAC, 0xB0, 0xD4, 0x72, 0x8A, 0x3B, 0x83, 0x14, 11}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_SupportsImages,
+ 0x6AF55D45, 0x38DB, 0x4495, 0xAC, 0xB0, 0xD4, 0x72, 0x8A, 0x3B, 0x83, 0x14, 4}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_SupportsInformation,
+ 0x6AF55D45, 0x38DB, 0x4495, 0xAC, 0xB0, 0xD4, 0x72, 0x8A, 0x3B, 0x83, 0x14, 14}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_SupportsLimitedDiscovery,
+ 0x6AF55D45, 0x38DB, 0x4495, 0xAC, 0xB0, 0xD4, 0x72, 0x8A, 0x3B, 0x83, 0x14, 7}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_SupportsNetworking,
+ 0x6AF55D45, 0x38DB, 0x4495, 0xAC, 0xB0, 0xD4, 0x72, 0x8A, 0x3B, 0x83, 0x14, 9}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_SupportsObjectTransfer,
+ 0x6AF55D45, 0x38DB, 0x4495, 0xAC, 0xB0, 0xD4, 0x72, 0x8A, 0x3B, 0x83, 0x14, 12}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_SupportsPositioning,
+ 0x6AF55D45, 0x38DB, 0x4495, 0xAC, 0xB0, 0xD4, 0x72, 0x8A, 0x3B, 0x83, 0x14, 8}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_SupportsRendering,
+ 0x6AF55D45, 0x38DB, 0x4495, 0xAC, 0xB0, 0xD4, 0x72, 0x8A, 0x3B, 0x83, 0x14, 10}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_SupportsTelephony,
+ 0x6AF55D45, 0x38DB, 0x4495, 0xAC, 0xB0, 0xD4, 0x72, 0x8A, 0x3B, 0x83, 0x14, 13}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepContainer_SupportsVideo,
+ 0x6AF55D45, 0x38DB, 0x4495, 0xAC, 0xB0, 0xD4, 0x72, 0x8A, 0x3B, 0x83, 0x14, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepService_AepId,
+ 0xC9C141A9, 0x1B4C, 0x4F17, 0xA9, 0xD1, 0xF2, 0x98, 0x53, 0x8C, 0xAD, 0xB8, 6}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepService_Bluetooth_CacheMode,
+ 0x9744311E, 0x7951, 0x4B2E, 0xB6, 0xF0, 0xEC, 0xB2, 0x93, 0xCA, 0xC1, 0x19, 5}
+pub const BLUETOOTH_CACHE_MODE_CACHED: LONG = 0;
+pub const BLUETOOTH_CACHED_MODE_UNCACHED: LONG = 1;
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepService_Bluetooth_ServiceGuid,
+ 0xA399AAC7, 0xC265, 0x474E, 0xB0, 0x73, 0xFF, 0xCE, 0x57, 0x72, 0x17, 0x16, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepService_Bluetooth_TargetDevice,
+ 0x9744311E, 0x7951, 0x4B2E, 0xB6, 0xF0, 0xEC, 0xB2, 0x93, 0xCA, 0xC1, 0x19, 6}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepService_ContainerId,
+ 0x71724756, 0x3E74, 0x4432, 0x9B, 0x59, 0xE7, 0xB2, 0xF6, 0x68, 0xA5, 0x93, 4}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepService_FriendlyName,
+ 0x71724756, 0x3E74, 0x4432, 0x9B, 0x59, 0xE7, 0xB2, 0xF6, 0x68, 0xA5, 0x93, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepService_IoT_ServiceInterfaces,
+ 0x79D94E82, 0x4D79, 0x45AA, 0x82, 0x1A, 0x74, 0x85, 0x8B, 0x4E, 0x4C, 0xA6, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepService_ParentAepIsPaired,
+ 0xC9C141A9, 0x1B4C, 0x4F17, 0xA9, 0xD1, 0xF2, 0x98, 0x53, 0x8C, 0xAD, 0xB8, 7}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepService_ProtocolId,
+ 0xC9C141A9, 0x1B4C, 0x4F17, 0xA9, 0xD1, 0xF2, 0x98, 0x53, 0x8C, 0xAD, 0xB8, 5}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepService_ServiceClassId,
+ 0x71724756, 0x3E74, 0x4432, 0x9B, 0x59, 0xE7, 0xB2, 0xF6, 0x68, 0xA5, 0x93, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AepService_ServiceId,
+ 0xC9C141A9, 0x1B4C, 0x4F17, 0xA9, 0xD1, 0xF2, 0x98, 0x53, 0x8C, 0xAD, 0xB8, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AppPackageFamilyName,
+ 0x51236583, 0x0C4A, 0x4FE8, 0xB8, 0x1F, 0x16, 0x6A, 0xEC, 0x13, 0xF5, 0x10, 100}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AudioDevice_Microphone_SensitivityInDbfs,
+ 0x8943B373, 0x388C, 0x4395, 0xB5, 0x57, 0xBC, 0x6D, 0xBA, 0xFF, 0xAF, 0xDB, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AudioDevice_Microphone_SignalToNoiseRatioInDb,
+ 0x8943B373, 0x388C, 0x4395, 0xB5, 0x57, 0xBC, 0x6D, 0xBA, 0xFF, 0xAF, 0xDB, 4}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AudioDevice_RawProcessingSupported,
+ 0x8943B373, 0x388C, 0x4395, 0xB5, 0x57, 0xBC, 0x6D, 0xBA, 0xFF, 0xAF, 0xDB, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_AudioDevice_SpeechProcessingSupported,
+ 0xFB1DE864, 0xE06D, 0x47F4, 0x82, 0xA6, 0x8A, 0x0A, 0xEF, 0x44, 0x49, 0x3C, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_BatteryLife,
+ 0x49CD1F76, 0x5626, 0x4B17, 0xA4, 0xE8, 0x18, 0xB4, 0xAA, 0x1A, 0x22, 0x13, 10}
+DEFINE_PROPERTYKEY!{PKEY_Devices_BatteryPlusCharging,
+ 0x49CD1F76, 0x5626, 0x4B17, 0xA4, 0xE8, 0x18, 0xB4, 0xAA, 0x1A, 0x22, 0x13, 22}
+DEFINE_PROPERTYKEY!{PKEY_Devices_BatteryPlusChargingText,
+ 0x49CD1F76, 0x5626, 0x4B17, 0xA4, 0xE8, 0x18, 0xB4, 0xAA, 0x1A, 0x22, 0x13, 23}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Category,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 91}
+DEFINE_PROPERTYKEY!{PKEY_Devices_CategoryGroup,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 94}
+DEFINE_PROPERTYKEY!{PKEY_Devices_CategoryIds,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 90}
+DEFINE_PROPERTYKEY!{PKEY_Devices_CategoryPlural,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 92}
+DEFINE_PROPERTYKEY!{PKEY_Devices_ChargingState,
+ 0x49CD1F76, 0x5626, 0x4B17, 0xA4, 0xE8, 0x18, 0xB4, 0xAA, 0x1A, 0x22, 0x13, 11}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Children,
+ 0x4340A6C5, 0x93FA, 0x4706, 0x97, 0x2C, 0x7B, 0x64, 0x80, 0x08, 0xA5, 0xA7, 9}
+DEFINE_PROPERTYKEY!{PKEY_Devices_ClassGuid,
+ 0xA45C254E, 0xDF1C, 0x4EFD, 0x80, 0x20, 0x67, 0xD1, 0x46, 0xA8, 0x50, 0xE0, 10}
+DEFINE_PROPERTYKEY!{PKEY_Devices_CompatibleIds,
+ 0xA45C254E, 0xDF1C, 0x4EFD, 0x80, 0x20, 0x67, 0xD1, 0x46, 0xA8, 0x50, 0xE0, 4}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Connected,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 55}
+DEFINE_PROPERTYKEY!{PKEY_Devices_ContainerId,
+ 0x8C7ED206, 0x3F8A, 0x4827, 0xB3, 0xAB, 0xAE, 0x9E, 0x1F, 0xAE, 0xFC, 0x6C, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_DefaultTooltip,
+ 0x880F70A2, 0x6082, 0x47AC, 0x8A, 0xAB, 0xA7, 0x39, 0xD1, 0xA3, 0x00, 0xC3, 153}
+DEFINE_PROPERTYKEY!{PKEY_Devices_DeviceCapabilities,
+ 0xA45C254E, 0xDF1C, 0x4EFD, 0x80, 0x20, 0x67, 0xD1, 0x46, 0xA8, 0x50, 0xE0, 17}
+DEFINE_PROPERTYKEY!{PKEY_Devices_DeviceCharacteristics,
+ 0xA45C254E, 0xDF1C, 0x4EFD, 0x80, 0x20, 0x67, 0xD1, 0x46, 0xA8, 0x50, 0xE0, 29}
+DEFINE_PROPERTYKEY!{PKEY_Devices_DeviceDescription1,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 81}
+DEFINE_PROPERTYKEY!{PKEY_Devices_DeviceDescription2,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 82}
+DEFINE_PROPERTYKEY!{PKEY_Devices_DeviceHasProblem,
+ 0x540B947E, 0x8B40, 0x45BC, 0xA8, 0xA2, 0x6A, 0x0B, 0x89, 0x4C, 0xBD, 0xA2, 6}
+DEFINE_PROPERTYKEY!{PKEY_Devices_DeviceInstanceId,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 256}
+DEFINE_PROPERTYKEY!{PKEY_Devices_DeviceManufacturer,
+ 0xA45C254E, 0xDF1C, 0x4EFD, 0x80, 0x20, 0x67, 0xD1, 0x46, 0xA8, 0x50, 0xE0, 13}
+DEFINE_PROPERTYKEY!{PKEY_Devices_DevObjectType,
+ 0x13673F42, 0xA3D6, 0x49F6, 0xB4, 0xDA, 0xAE, 0x46, 0xE0, 0xC5, 0x23, 0x7C, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_DialProtocol_InstalledApplications,
+ 0x6845CC72, 0x1B71, 0x48C3, 0xAF, 0x86, 0xB0, 0x91, 0x71, 0xA1, 0x9B, 0x14, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_DiscoveryMethod,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 52}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Dnssd_Domain,
+ 0xBF79C0AB, 0xBB74, 0x4CEE, 0xB0, 0x70, 0x47, 0x0B, 0x5A, 0xE2, 0x02, 0xEA, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Dnssd_FullName,
+ 0xBF79C0AB, 0xBB74, 0x4CEE, 0xB0, 0x70, 0x47, 0x0B, 0x5A, 0xE2, 0x02, 0xEA, 5}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Dnssd_HostName,
+ 0xBF79C0AB, 0xBB74, 0x4CEE, 0xB0, 0x70, 0x47, 0x0B, 0x5A, 0xE2, 0x02, 0xEA, 7}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Dnssd_InstanceName,
+ 0xBF79C0AB, 0xBB74, 0x4CEE, 0xB0, 0x70, 0x47, 0x0B, 0x5A, 0xE2, 0x02, 0xEA, 4}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Dnssd_NetworkAdapterId,
+ 0xBF79C0AB, 0xBB74, 0x4CEE, 0xB0, 0x70, 0x47, 0x0B, 0x5A, 0xE2, 0x02, 0xEA, 11}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Dnssd_PortNumber,
+ 0xBF79C0AB, 0xBB74, 0x4CEE, 0xB0, 0x70, 0x47, 0x0B, 0x5A, 0xE2, 0x02, 0xEA, 12}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Dnssd_Priority,
+ 0xBF79C0AB, 0xBB74, 0x4CEE, 0xB0, 0x70, 0x47, 0x0B, 0x5A, 0xE2, 0x02, 0xEA, 9}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Dnssd_ServiceName,
+ 0xBF79C0AB, 0xBB74, 0x4CEE, 0xB0, 0x70, 0x47, 0x0B, 0x5A, 0xE2, 0x02, 0xEA, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Dnssd_TextAttributes,
+ 0xBF79C0AB, 0xBB74, 0x4CEE, 0xB0, 0x70, 0x47, 0x0B, 0x5A, 0xE2, 0x02, 0xEA, 6}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Dnssd_Ttl,
+ 0xBF79C0AB, 0xBB74, 0x4CEE, 0xB0, 0x70, 0x47, 0x0B, 0x5A, 0xE2, 0x02, 0xEA, 10}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Dnssd_Weight,
+ 0xBF79C0AB, 0xBB74, 0x4CEE, 0xB0, 0x70, 0x47, 0x0B, 0x5A, 0xE2, 0x02, 0xEA, 8}
+DEFINE_PROPERTYKEY!{PKEY_Devices_FriendlyName,
+ 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 12288}
+DEFINE_PROPERTYKEY!{PKEY_Devices_FunctionPaths,
+ 0xD08DD4C0, 0x3A9E, 0x462E, 0x82, 0x90, 0x7B, 0x63, 0x6B, 0x25, 0x76, 0xB9, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_GlyphIcon,
+ 0x51236583, 0x0C4A, 0x4FE8, 0xB8, 0x1F, 0x16, 0x6A, 0xEC, 0x13, 0xF5, 0x10, 123}
+DEFINE_PROPERTYKEY!{PKEY_Devices_HardwareIds,
+ 0xA45C254E, 0xDF1C, 0x4EFD, 0x80, 0x20, 0x67, 0xD1, 0x46, 0xA8, 0x50, 0xE0, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Icon,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 57}
+DEFINE_PROPERTYKEY!{PKEY_Devices_InLocalMachineContainer,
+ 0x8C7ED206, 0x3F8A, 0x4827, 0xB3, 0xAB, 0xAE, 0x9E, 0x1F, 0xAE, 0xFC, 0x6C, 4}
+DEFINE_PROPERTYKEY!{PKEY_Devices_InterfaceClassGuid,
+ 0x026E516E, 0xB814, 0x414B, 0x83, 0xCD, 0x85, 0x6D, 0x6F, 0xEF, 0x48, 0x22, 4}
+DEFINE_PROPERTYKEY!{PKEY_Devices_InterfaceEnabled,
+ 0x026E516E, 0xB814, 0x414B, 0x83, 0xCD, 0x85, 0x6D, 0x6F, 0xEF, 0x48, 0x22, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_InterfacePaths,
+ 0xD08DD4C0, 0x3A9E, 0x462E, 0x82, 0x90, 0x7B, 0x63, 0x6B, 0x25, 0x76, 0xB9, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_IpAddress,
+ 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 12297}
+DEFINE_PROPERTYKEY!{PKEY_Devices_IsDefault,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 86}
+DEFINE_PROPERTYKEY!{PKEY_Devices_IsNetworkConnected,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 85}
+DEFINE_PROPERTYKEY!{PKEY_Devices_IsShared,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 84}
+DEFINE_PROPERTYKEY!{PKEY_Devices_IsSoftwareInstalling,
+ 0x83DA6326, 0x97A6, 0x4088, 0x94, 0x53, 0xA1, 0x92, 0x3F, 0x57, 0x3B, 0x29, 9}
+DEFINE_PROPERTYKEY!{PKEY_Devices_LaunchDeviceStageFromExplorer,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 77}
+DEFINE_PROPERTYKEY!{PKEY_Devices_LocalMachine,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 70}
+DEFINE_PROPERTYKEY!{PKEY_Devices_LocationPaths,
+ 0xA45C254E, 0xDF1C, 0x4EFD, 0x80, 0x20, 0x67, 0xD1, 0x46, 0xA8, 0x50, 0xE0, 37}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Manufacturer,
+ 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 8192}
+DEFINE_PROPERTYKEY!{PKEY_Devices_MetadataPath,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 71}
+DEFINE_PROPERTYKEY!{PKEY_Devices_MicrophoneArray_Geometry,
+ 0xA1829EA2, 0x27EB, 0x459E, 0x93, 0x5D, 0xB2, 0xFA, 0xD7, 0xB0, 0x77, 0x62, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_MissedCalls,
+ 0x49CD1F76, 0x5626, 0x4B17, 0xA4, 0xE8, 0x18, 0xB4, 0xAA, 0x1A, 0x22, 0x13, 5}
+DEFINE_PROPERTYKEY!{PKEY_Devices_ModelId,
+ 0x80D81EA6, 0x7473, 0x4B0C, 0x82, 0x16, 0xEF, 0xC1, 0x1A, 0x2C, 0x4C, 0x8B, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_ModelName,
+ 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 8194}
+DEFINE_PROPERTYKEY!{PKEY_Devices_ModelNumber,
+ 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 8195}
+DEFINE_PROPERTYKEY!{PKEY_Devices_NetworkedTooltip,
+ 0x880F70A2, 0x6082, 0x47AC, 0x8A, 0xAB, 0xA7, 0x39, 0xD1, 0xA3, 0x00, 0xC3, 152}
+DEFINE_PROPERTYKEY!{PKEY_Devices_NetworkName,
+ 0x49CD1F76, 0x5626, 0x4B17, 0xA4, 0xE8, 0x18, 0xB4, 0xAA, 0x1A, 0x22, 0x13, 7}
+DEFINE_PROPERTYKEY!{PKEY_Devices_NetworkType,
+ 0x49CD1F76, 0x5626, 0x4B17, 0xA4, 0xE8, 0x18, 0xB4, 0xAA, 0x1A, 0x22, 0x13, 8}
+DEFINE_PROPERTYKEY!{PKEY_Devices_NewPictures,
+ 0x49CD1F76, 0x5626, 0x4B17, 0xA4, 0xE8, 0x18, 0xB4, 0xAA, 0x1A, 0x22, 0x13, 4}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Notification,
+ 0x06704B0C, 0xE830, 0x4C81, 0x91, 0x78, 0x91, 0xE4, 0xE9, 0x5A, 0x80, 0xA0, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Notifications_LowBattery,
+ 0xC4C07F2B, 0x8524, 0x4E66, 0xAE, 0x3A, 0xA6, 0x23, 0x5F, 0x10, 0x3B, 0xEB, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Notifications_MissedCall,
+ 0x6614EF48, 0x4EFE, 0x4424, 0x9E, 0xDA, 0xC7, 0x9F, 0x40, 0x4E, 0xDF, 0x3E, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Notifications_NewMessage,
+ 0x2BE9260A, 0x2012, 0x4742, 0xA5, 0x55, 0xF4, 0x1B, 0x63, 0x8B, 0x7D, 0xCB, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Notifications_NewVoicemail,
+ 0x59569556, 0x0A08, 0x4212, 0x95, 0xB9, 0xFA, 0xE2, 0xAD, 0x64, 0x13, 0xDB, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Notifications_StorageFull,
+ 0xA0E00EE1, 0xF0C7, 0x4D41, 0xB8, 0xE7, 0x26, 0xA7, 0xBD, 0x8D, 0x38, 0xB0, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Notifications_StorageFullLinkText,
+ 0xA0E00EE1, 0xF0C7, 0x4D41, 0xB8, 0xE7, 0x26, 0xA7, 0xBD, 0x8D, 0x38, 0xB0, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_NotificationStore,
+ 0x06704B0C, 0xE830, 0x4C81, 0x91, 0x78, 0x91, 0xE4, 0xE9, 0x5A, 0x80, 0xA0, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_NotWorkingProperly,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 83}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Paired,
+ 0x78C34FC8, 0x104A, 0x4ACA, 0x9E, 0xA4, 0x52, 0x4D, 0x52, 0x99, 0x6E, 0x57, 56}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Parent,
+ 0x4340A6C5, 0x93FA, 0x4706, 0x97, 0x2C, 0x7B, 0x64, 0x80, 0x08, 0xA5, 0xA7, 8}
+DEFINE_PROPERTYKEY!{PKEY_Devices_PhysicalDeviceLocation,
+ 0x540B947E, 0x8B40, 0x45BC, 0xA8, 0xA2, 0x6A, 0x0B, 0x89, 0x4C, 0xBD, 0xA2, 9}
+DEFINE_PROPERTYKEY!{PKEY_Devices_PlaybackPositionPercent,
+ 0x3633DE59, 0x6825, 0x4381, 0xA4, 0x9B, 0x9F, 0x6B, 0xA1, 0x3A, 0x14, 0x71, 5}
+DEFINE_PROPERTYKEY!{PKEY_Devices_PlaybackState,
+ 0x3633DE59, 0x6825, 0x4381, 0xA4, 0x9B, 0x9F, 0x6B, 0xA1, 0x3A, 0x14, 0x71, 2}
+pub const PLAYBACKSTATE_UNKNOWN: LONG = 0;
+pub const PLAYBACKSTATE_STOPPED: LONG = 1;
+pub const PLAYBACKSTATE_PLAYING: LONG = 2;
+pub const PLAYBACKSTATE_TRANSITIONING: LONG = 3;
+pub const PLAYBACKSTATE_PAUSED: LONG = 4;
+pub const PLAYBACKSTATE_RECORDINGPAUSED: LONG = 5;
+pub const PLAYBACKSTATE_RECORDING: LONG = 6;
+pub const PLAYBACKSTATE_NOMEDIA: LONG = 7;
+DEFINE_PROPERTYKEY!{PKEY_Devices_PlaybackTitle,
+ 0x3633DE59, 0x6825, 0x4381, 0xA4, 0x9B, 0x9F, 0x6B, 0xA1, 0x3A, 0x14, 0x71, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Present,
+ 0x540B947E, 0x8B40, 0x45BC, 0xA8, 0xA2, 0x6A, 0x0B, 0x89, 0x4C, 0xBD, 0xA2, 5}
+DEFINE_PROPERTYKEY!{PKEY_Devices_PresentationUrl,
+ 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 8198}
+DEFINE_PROPERTYKEY!{PKEY_Devices_PrimaryCategory,
+ 0xD08DD4C0, 0x3A9E, 0x462E, 0x82, 0x90, 0x7B, 0x63, 0x6B, 0x25, 0x76, 0xB9, 10}
+DEFINE_PROPERTYKEY!{PKEY_Devices_RemainingDuration,
+ 0x3633DE59, 0x6825, 0x4381, 0xA4, 0x9B, 0x9F, 0x6B, 0xA1, 0x3A, 0x14, 0x71, 4}
+DEFINE_PROPERTYKEY!{PKEY_Devices_RestrictedInterface,
+ 0x026E516E, 0xB814, 0x414B, 0x83, 0xCD, 0x85, 0x6D, 0x6F, 0xEF, 0x48, 0x22, 6}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Roaming,
+ 0x49CD1F76, 0x5626, 0x4B17, 0xA4, 0xE8, 0x18, 0xB4, 0xAA, 0x1A, 0x22, 0x13, 9}
+DEFINE_PROPERTYKEY!{PKEY_Devices_SafeRemovalRequired,
+ 0xAFD97640, 0x86A3, 0x4210, 0xB6, 0x7C, 0x28, 0x9C, 0x41, 0xAA, 0xBE, 0x55, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_ServiceAddress,
+ 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 16384}
+DEFINE_PROPERTYKEY!{PKEY_Devices_ServiceId,
+ 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 16385}
+DEFINE_PROPERTYKEY!{PKEY_Devices_SharedTooltip,
+ 0x880F70A2, 0x6082, 0x47AC, 0x8A, 0xAB, 0xA7, 0x39, 0xD1, 0xA3, 0x00, 0xC3, 151}
+DEFINE_PROPERTYKEY!{PKEY_Devices_SignalStrength,
+ 0x49CD1F76, 0x5626, 0x4B17, 0xA4, 0xE8, 0x18, 0xB4, 0xAA, 0x1A, 0x22, 0x13, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_SmartCards_ReaderKind,
+ 0xD6B5B883, 0x18BD, 0x4B4D, 0xB2, 0xEC, 0x9E, 0x38, 0xAF, 0xFE, 0xDA, 0x82, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Status,
+ 0xD08DD4C0, 0x3A9E, 0x462E, 0x82, 0x90, 0x7B, 0x63, 0x6B, 0x25, 0x76, 0xB9, 259}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Status1,
+ 0xD08DD4C0, 0x3A9E, 0x462E, 0x82, 0x90, 0x7B, 0x63, 0x6B, 0x25, 0x76, 0xB9, 257}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Status2,
+ 0xD08DD4C0, 0x3A9E, 0x462E, 0x82, 0x90, 0x7B, 0x63, 0x6B, 0x25, 0x76, 0xB9, 258}
+DEFINE_PROPERTYKEY!{PKEY_Devices_StorageCapacity,
+ 0x49CD1F76, 0x5626, 0x4B17, 0xA4, 0xE8, 0x18, 0xB4, 0xAA, 0x1A, 0x22, 0x13, 12}
+DEFINE_PROPERTYKEY!{PKEY_Devices_StorageFreeSpace,
+ 0x49CD1F76, 0x5626, 0x4B17, 0xA4, 0xE8, 0x18, 0xB4, 0xAA, 0x1A, 0x22, 0x13, 13}
+DEFINE_PROPERTYKEY!{PKEY_Devices_StorageFreeSpacePercent,
+ 0x49CD1F76, 0x5626, 0x4B17, 0xA4, 0xE8, 0x18, 0xB4, 0xAA, 0x1A, 0x22, 0x13, 14}
+DEFINE_PROPERTYKEY!{PKEY_Devices_TextMessages,
+ 0x49CD1F76, 0x5626, 0x4B17, 0xA4, 0xE8, 0x18, 0xB4, 0xAA, 0x1A, 0x22, 0x13, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Voicemail,
+ 0x49CD1F76, 0x5626, 0x4B17, 0xA4, 0xE8, 0x18, 0xB4, 0xAA, 0x1A, 0x22, 0x13, 6}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiaDeviceType,
+ 0x6BDD1FC6, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFi_InterfaceGuid,
+ 0xEF1167EB, 0xCBFC, 0x4341, 0xA5, 0x68, 0xA7, 0xC9, 0x1A, 0x68, 0x98, 0x2C, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirect_DeviceAddress,
+ 0x1506935D, 0xE3E7, 0x450F, 0x86, 0x37, 0x82, 0x23, 0x3E, 0xBE, 0x5F, 0x6E, 13}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirect_GroupId,
+ 0x1506935D, 0xE3E7, 0x450F, 0x86, 0x37, 0x82, 0x23, 0x3E, 0xBE, 0x5F, 0x6E, 4}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirect_InformationElements,
+ 0x1506935D, 0xE3E7, 0x450F, 0x86, 0x37, 0x82, 0x23, 0x3E, 0xBE, 0x5F, 0x6E, 12}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirect_InterfaceAddress,
+ 0x1506935D, 0xE3E7, 0x450F, 0x86, 0x37, 0x82, 0x23, 0x3E, 0xBE, 0x5F, 0x6E, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirect_InterfaceGuid,
+ 0x1506935D, 0xE3E7, 0x450F, 0x86, 0x37, 0x82, 0x23, 0x3E, 0xBE, 0x5F, 0x6E, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirect_IsConnected,
+ 0x1506935D, 0xE3E7, 0x450F, 0x86, 0x37, 0x82, 0x23, 0x3E, 0xBE, 0x5F, 0x6E, 5}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirect_IsLegacyDevice,
+ 0x1506935D, 0xE3E7, 0x450F, 0x86, 0x37, 0x82, 0x23, 0x3E, 0xBE, 0x5F, 0x6E, 7}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirect_IsMiracastLcpSupported,
+ 0x1506935D, 0xE3E7, 0x450F, 0x86, 0x37, 0x82, 0x23, 0x3E, 0xBE, 0x5F, 0x6E, 9}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirect_IsVisible,
+ 0x1506935D, 0xE3E7, 0x450F, 0x86, 0x37, 0x82, 0x23, 0x3E, 0xBE, 0x5F, 0x6E, 6}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirect_MiracastVersion,
+ 0x1506935D, 0xE3E7, 0x450F, 0x86, 0x37, 0x82, 0x23, 0x3E, 0xBE, 0x5F, 0x6E, 8}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirect_Services,
+ 0x1506935D, 0xE3E7, 0x450F, 0x86, 0x37, 0x82, 0x23, 0x3E, 0xBE, 0x5F, 0x6E, 10}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirect_SupportedChannelList,
+ 0x1506935D, 0xE3E7, 0x450F, 0x86, 0x37, 0x82, 0x23, 0x3E, 0xBE, 0x5F, 0x6E, 11}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirectServices_AdvertisementId,
+ 0x31B37743, 0x7C5E, 0x4005, 0x93, 0xE6, 0xE9, 0x53, 0xF9, 0x2B, 0x82, 0xE9, 5}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirectServices_RequestServiceInformation,
+ 0x31B37743, 0x7C5E, 0x4005, 0x93, 0xE6, 0xE9, 0x53, 0xF9, 0x2B, 0x82, 0xE9, 7}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirectServices_ServiceAddress,
+ 0x31B37743, 0x7C5E, 0x4005, 0x93, 0xE6, 0xE9, 0x53, 0xF9, 0x2B, 0x82, 0xE9, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirectServices_ServiceConfigMethods,
+ 0x31B37743, 0x7C5E, 0x4005, 0x93, 0xE6, 0xE9, 0x53, 0xF9, 0x2B, 0x82, 0xE9, 6}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirectServices_ServiceInformation,
+ 0x31B37743, 0x7C5E, 0x4005, 0x93, 0xE6, 0xE9, 0x53, 0xF9, 0x2B, 0x82, 0xE9, 4}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WiFiDirectServices_ServiceName,
+ 0x31B37743, 0x7C5E, 0x4005, 0x93, 0xE6, 0xE9, 0x53, 0xF9, 0x2B, 0x82, 0xE9, 3}
+DEFINE_PROPERTYKEY!{PKEY_Devices_WinPhone8CameraFlags,
+ 0xB7B4D61C, 0x5A64, 0x4187, 0xA5, 0x2E, 0xB1, 0x53, 0x9F, 0x35, 0x90, 0x99, 2}
+DEFINE_PROPERTYKEY!{PKEY_Devices_Wwan_InterfaceGuid,
+ 0xFF1167EB, 0xCBFC, 0x4341, 0xA5, 0x68, 0xA7, 0xC9, 0x1A, 0x68, 0x98, 0x2C, 2}
+DEFINE_PROPERTYKEY!{PKEY_Storage_Portable,
+ 0x4D1EBEE8, 0x0803, 0x4774, 0x98, 0x42, 0xB7, 0x7D, 0xB5, 0x02, 0x65, 0xE9, 2}
+DEFINE_PROPERTYKEY!{PKEY_Storage_RemovableMedia,
+ 0x4D1EBEE8, 0x0803, 0x4774, 0x98, 0x42, 0xB7, 0x7D, 0xB5, 0x02, 0x65, 0xE9, 3}
+DEFINE_PROPERTYKEY!{PKEY_Storage_SystemCritical,
+ 0x4D1EBEE8, 0x0803, 0x4774, 0x98, 0x42, 0xB7, 0x7D, 0xB5, 0x02, 0x65, 0xE9, 4}
+DEFINE_PROPERTYKEY!{PKEY_Document_ByteCount,
+ 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 4}
+DEFINE_PROPERTYKEY!{PKEY_Document_CharacterCount,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 16}
+DEFINE_PROPERTYKEY!{PKEY_Document_ClientID,
+ 0x276D7BB0, 0x5B34, 0x4FB0, 0xAA, 0x4B, 0x15, 0x8E, 0xD1, 0x2A, 0x18, 0x09, 100}
+DEFINE_PROPERTYKEY!{PKEY_Document_Contributor,
+ 0xF334115E, 0xDA1B, 0x4509, 0x9B, 0x3D, 0x11, 0x95, 0x04, 0xDC, 0x7A, 0xBB, 100}
+DEFINE_PROPERTYKEY!{PKEY_Document_DateCreated,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 12}
+DEFINE_PROPERTYKEY!{PKEY_Document_DatePrinted,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 11}
+DEFINE_PROPERTYKEY!{PKEY_Document_DateSaved,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 13}
+DEFINE_PROPERTYKEY!{PKEY_Document_Division,
+ 0x1E005EE6, 0xBF27, 0x428B, 0xB0, 0x1C, 0x79, 0x67, 0x6A, 0xCD, 0x28, 0x70, 100}
+DEFINE_PROPERTYKEY!{PKEY_Document_DocumentID,
+ 0xE08805C8, 0xE395, 0x40DF, 0x80, 0xD2, 0x54, 0xF0, 0xD6, 0xC4, 0x31, 0x54, 100}
+DEFINE_PROPERTYKEY!{PKEY_Document_HiddenSlideCount,
+ 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 9}
+DEFINE_PROPERTYKEY!{PKEY_Document_LastAuthor,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 8}
+DEFINE_PROPERTYKEY!{PKEY_Document_LineCount,
+ 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 5}
+DEFINE_PROPERTYKEY!{PKEY_Document_Manager,
+ 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 14}
+DEFINE_PROPERTYKEY!{PKEY_Document_MultimediaClipCount,
+ 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 10}
+DEFINE_PROPERTYKEY!{PKEY_Document_NoteCount,
+ 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 8}
+DEFINE_PROPERTYKEY!{PKEY_Document_PageCount,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 14}
+DEFINE_PROPERTYKEY!{PKEY_Document_ParagraphCount,
+ 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 6}
+DEFINE_PROPERTYKEY!{PKEY_Document_PresentationFormat,
+ 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 3}
+DEFINE_PROPERTYKEY!{PKEY_Document_RevisionNumber,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 9}
+DEFINE_PROPERTYKEY!{PKEY_Document_Security,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 19}
+DEFINE_PROPERTYKEY!{PKEY_Document_SlideCount,
+ 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 7}
+DEFINE_PROPERTYKEY!{PKEY_Document_Template,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 7}
+DEFINE_PROPERTYKEY!{PKEY_Document_TotalEditingTime,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 10}
+DEFINE_PROPERTYKEY!{PKEY_Document_Version,
+ 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 29}
+DEFINE_PROPERTYKEY!{PKEY_Document_WordCount,
+ 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 15}
+DEFINE_PROPERTYKEY!{PKEY_DRM_DatePlayExpires,
+ 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 6}
+DEFINE_PROPERTYKEY!{PKEY_DRM_DatePlayStarts,
+ 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 5}
+DEFINE_PROPERTYKEY!{PKEY_DRM_Description,
+ 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 3}
+DEFINE_PROPERTYKEY!{PKEY_DRM_IsDisabled,
+ 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 7}
+DEFINE_PROPERTYKEY!{PKEY_DRM_IsProtected,
+ 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 2}
+DEFINE_PROPERTYKEY!{PKEY_DRM_PlayCount,
+ 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 4}
+DEFINE_PROPERTYKEY!{PKEY_GPS_Altitude,
+ 0x827EDB4F, 0x5B73, 0x44A7, 0x89, 0x1D, 0xFD, 0xFF, 0xAB, 0xEA, 0x35, 0xCA, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_AltitudeDenominator,
+ 0x78342DCB, 0xE358, 0x4145, 0xAE, 0x9A, 0x6B, 0xFE, 0x4E, 0x0F, 0x9F, 0x51, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_AltitudeNumerator,
+ 0x2DAD1EB7, 0x816D, 0x40D3, 0x9E, 0xC3, 0xC9, 0x77, 0x3B, 0xE2, 0xAA, 0xDE, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_AltitudeRef,
+ 0x46AC629D, 0x75EA, 0x4515, 0x86, 0x7F, 0x6D, 0xC4, 0x32, 0x1C, 0x58, 0x44, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_AreaInformation,
+ 0x972E333E, 0xAC7E, 0x49F1, 0x8A, 0xDF, 0xA7, 0x0D, 0x07, 0xA9, 0xBC, 0xAB, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_Date,
+ 0x3602C812, 0x0F3B, 0x45F0, 0x85, 0xAD, 0x60, 0x34, 0x68, 0xD6, 0x94, 0x23, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DestBearing,
+ 0xC66D4B3C, 0xE888, 0x47CC, 0xB9, 0x9F, 0x9D, 0xCA, 0x3E, 0xE3, 0x4D, 0xEA, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DestBearingDenominator,
+ 0x7ABCF4F8, 0x7C3F, 0x4988, 0xAC, 0x91, 0x8D, 0x2C, 0x2E, 0x97, 0xEC, 0xA5, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DestBearingNumerator,
+ 0xBA3B1DA9, 0x86EE, 0x4B5D, 0xA2, 0xA4, 0xA2, 0x71, 0xA4, 0x29, 0xF0, 0xCF, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DestBearingRef,
+ 0x9AB84393, 0x2A0F, 0x4B75, 0xBB, 0x22, 0x72, 0x79, 0x78, 0x69, 0x77, 0xCB, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DestDistance,
+ 0xA93EAE04, 0x6804, 0x4F24, 0xAC, 0x81, 0x09, 0xB2, 0x66, 0x45, 0x21, 0x18, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DestDistanceDenominator,
+ 0x9BC2C99B, 0xAC71, 0x4127, 0x9D, 0x1C, 0x25, 0x96, 0xD0, 0xD7, 0xDC, 0xB7, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DestDistanceNumerator,
+ 0x2BDA47DA, 0x08C6, 0x4FE1, 0x80, 0xBC, 0xA7, 0x2F, 0xC5, 0x17, 0xC5, 0xD0, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DestDistanceRef,
+ 0xED4DF2D3, 0x8695, 0x450B, 0x85, 0x6F, 0xF5, 0xC1, 0xC5, 0x3A, 0xCB, 0x66, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DestLatitude,
+ 0x9D1D7CC5, 0x5C39, 0x451C, 0x86, 0xB3, 0x92, 0x8E, 0x2D, 0x18, 0xCC, 0x47, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DestLatitudeDenominator,
+ 0x3A372292, 0x7FCA, 0x49A7, 0x99, 0xD5, 0xE4, 0x7B, 0xB2, 0xD4, 0xE7, 0xAB, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DestLatitudeNumerator,
+ 0xECF4B6F6, 0xD5A6, 0x433C, 0xBB, 0x92, 0x40, 0x76, 0x65, 0x0F, 0xC8, 0x90, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DestLatitudeRef,
+ 0xCEA820B9, 0xCE61, 0x4885, 0xA1, 0x28, 0x00, 0x5D, 0x90, 0x87, 0xC1, 0x92, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DestLongitude,
+ 0x47A96261, 0xCB4C, 0x4807, 0x8A, 0xD3, 0x40, 0xB9, 0xD9, 0xDB, 0xC6, 0xBC, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DestLongitudeDenominator,
+ 0x425D69E5, 0x48AD, 0x4900, 0x8D, 0x80, 0x6E, 0xB6, 0xB8, 0xD0, 0xAC, 0x86, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DestLongitudeNumerator,
+ 0xA3250282, 0xFB6D, 0x48D5, 0x9A, 0x89, 0xDB, 0xCA, 0xCE, 0x75, 0xCC, 0xCF, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DestLongitudeRef,
+ 0x182C1EA6, 0x7C1C, 0x4083, 0xAB, 0x4B, 0xAC, 0x6C, 0x9F, 0x4E, 0xD1, 0x28, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_Differential,
+ 0xAAF4EE25, 0xBD3B, 0x4DD7, 0xBF, 0xC4, 0x47, 0xF7, 0x7B, 0xB0, 0x0F, 0x6D, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DOP,
+ 0x0CF8FB02, 0x1837, 0x42F1, 0xA6, 0x97, 0xA7, 0x01, 0x7A, 0xA2, 0x89, 0xB9, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DOPDenominator,
+ 0xA0BE94C5, 0x50BA, 0x487B, 0xBD, 0x35, 0x06, 0x54, 0xBE, 0x88, 0x81, 0xED, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_DOPNumerator,
+ 0x47166B16, 0x364F, 0x4AA0, 0x9F, 0x31, 0xE2, 0xAB, 0x3D, 0xF4, 0x49, 0xC3, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_ImgDirection,
+ 0x16473C91, 0xD017, 0x4ED9, 0xBA, 0x4D, 0xB6, 0xBA, 0xA5, 0x5D, 0xBC, 0xF8, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_ImgDirectionDenominator,
+ 0x10B24595, 0x41A2, 0x4E20, 0x93, 0xC2, 0x57, 0x61, 0xC1, 0x39, 0x5F, 0x32, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_ImgDirectionNumerator,
+ 0xDC5877C7, 0x225F, 0x45F7, 0xBA, 0xC7, 0xE8, 0x13, 0x34, 0xB6, 0x13, 0x0A, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_ImgDirectionRef,
+ 0xA4AAA5B7, 0x1AD0, 0x445F, 0x81, 0x1A, 0x0F, 0x8F, 0x6E, 0x67, 0xF6, 0xB5, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_Latitude,
+ 0x8727CFFF, 0x4868, 0x4EC6, 0xAD, 0x5B, 0x81, 0xB9, 0x85, 0x21, 0xD1, 0xAB, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_LatitudeDecimal,
+ 0x0F55CDE2, 0x4F49, 0x450D, 0x92, 0xC1, 0xDC, 0xD1, 0x63, 0x01, 0xB1, 0xB7, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_LatitudeDenominator,
+ 0x16E634EE, 0x2BFF, 0x497B, 0xBD, 0x8A, 0x43, 0x41, 0xAD, 0x39, 0xEE, 0xB9, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_LatitudeNumerator,
+ 0x7DDAAAD1, 0xCCC8, 0x41AE, 0xB7, 0x50, 0xB2, 0xCB, 0x80, 0x31, 0xAE, 0xA2, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_LatitudeRef,
+ 0x029C0252, 0x5B86, 0x46C7, 0xAC, 0xA0, 0x27, 0x69, 0xFF, 0xC8, 0xE3, 0xD4, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_Longitude,
+ 0xC4C4DBB2, 0xB593, 0x466B, 0xBB, 0xDA, 0xD0, 0x3D, 0x27, 0xD5, 0xE4, 0x3A, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_LongitudeDecimal,
+ 0x4679C1B5, 0x844D, 0x4590, 0xBA, 0xF5, 0xF3, 0x22, 0x23, 0x1F, 0x1B, 0x81, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_LongitudeDenominator,
+ 0xBE6E176C, 0x4534, 0x4D2C, 0xAC, 0xE5, 0x31, 0xDE, 0xDA, 0xC1, 0x60, 0x6B, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_LongitudeNumerator,
+ 0x02B0F689, 0xA914, 0x4E45, 0x82, 0x1D, 0x1D, 0xDA, 0x45, 0x2E, 0xD2, 0xC4, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_LongitudeRef,
+ 0x33DCF22B, 0x28D5, 0x464C, 0x80, 0x35, 0x1E, 0xE9, 0xEF, 0xD2, 0x52, 0x78, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_MapDatum,
+ 0x2CA2DAE6, 0xEDDC, 0x407D, 0xBE, 0xF1, 0x77, 0x39, 0x42, 0xAB, 0xFA, 0x95, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_MeasureMode,
+ 0xA015ED5D, 0xAAEA, 0x4D58, 0x8A, 0x86, 0x3C, 0x58, 0x69, 0x20, 0xEA, 0x0B, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_ProcessingMethod,
+ 0x59D49E61, 0x840F, 0x4AA9, 0xA9, 0x39, 0xE2, 0x09, 0x9B, 0x7F, 0x63, 0x99, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_Satellites,
+ 0x467EE575, 0x1F25, 0x4557, 0xAD, 0x4E, 0xB8, 0xB5, 0x8B, 0x0D, 0x9C, 0x15, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_Speed,
+ 0xDA5D0862, 0x6E76, 0x4E1B, 0xBA, 0xBD, 0x70, 0x02, 0x1B, 0xD2, 0x54, 0x94, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_SpeedDenominator,
+ 0x7D122D5A, 0xAE5E, 0x4335, 0x88, 0x41, 0xD7, 0x1E, 0x7C, 0xE7, 0x2F, 0x53, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_SpeedNumerator,
+ 0xACC9CE3D, 0xC213, 0x4942, 0x8B, 0x48, 0x6D, 0x08, 0x20, 0xF2, 0x1C, 0x6D, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_SpeedRef,
+ 0xECF7F4C9, 0x544F, 0x4D6D, 0x9D, 0x98, 0x8A, 0xD7, 0x9A, 0xDA, 0xF4, 0x53, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_Status,
+ 0x125491F4, 0x818F, 0x46B2, 0x91, 0xB5, 0xD5, 0x37, 0x75, 0x36, 0x17, 0xB2, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_Track,
+ 0x76C09943, 0x7C33, 0x49E3, 0x9E, 0x7E, 0xCD, 0xBA, 0x87, 0x2C, 0xFA, 0xDA, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_TrackDenominator,
+ 0xC8D1920C, 0x01F6, 0x40C0, 0xAC, 0x86, 0x2F, 0x3A, 0x4A, 0xD0, 0x07, 0x70, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_TrackNumerator,
+ 0x702926F4, 0x44A6, 0x43E1, 0xAE, 0x71, 0x45, 0x62, 0x71, 0x16, 0x89, 0x3B, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_TrackRef,
+ 0x35DBE6FE, 0x44C3, 0x4400, 0xAA, 0xAE, 0xD2, 0xC7, 0x99, 0xC4, 0x07, 0xE8, 100}
+DEFINE_PROPERTYKEY!{PKEY_GPS_VersionID,
+ 0x22704DA4, 0xC6B2, 0x4A99, 0x8E, 0x56, 0xF1, 0x6D, 0xF8, 0xC9, 0x25, 0x99, 100}
+DEFINE_PROPERTYKEY!{PKEY_History_VisitCount,
+ 0x5CBF2787, 0x48CF, 0x4208, 0xB9, 0x0E, 0xEE, 0x5E, 0x5D, 0x42, 0x02, 0x94, 7}
+DEFINE_PROPERTYKEY!{PKEY_Image_BitDepth,
+ 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 7}
+DEFINE_PROPERTYKEY!{PKEY_Image_ColorSpace,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 40961}
+pub const IMAGE_COLORSPACE_SRGB: DWORD = 1;
+pub const IMAGE_COLORSPACE_UNCALIBRATED: DWORD = 0xFFFF;
+DEFINE_PROPERTYKEY!{PKEY_Image_CompressedBitsPerPixel,
+ 0x364B6FA9, 0x37AB, 0x482A, 0xBE, 0x2B, 0xAE, 0x02, 0xF6, 0x0D, 0x43, 0x18, 100}
+DEFINE_PROPERTYKEY!{PKEY_Image_CompressedBitsPerPixelDenominator,
+ 0x1F8844E1, 0x24AD, 0x4508, 0x9D, 0xFD, 0x53, 0x26, 0xA4, 0x15, 0xCE, 0x02, 100}
+DEFINE_PROPERTYKEY!{PKEY_Image_CompressedBitsPerPixelNumerator,
+ 0xD21A7148, 0xD32C, 0x4624, 0x89, 0x00, 0x27, 0x72, 0x10, 0xF7, 0x9C, 0x0F, 100}
+DEFINE_PROPERTYKEY!{PKEY_Image_Compression,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 259}
+pub const IMAGE_COMPRESSION_UNCOMPRESSED: DWORD = 1;
+pub const IMAGE_COMPRESSION_CCITT_T3: DWORD = 2;
+pub const IMAGE_COMPRESSION_CCITT_T4: DWORD = 3;
+pub const IMAGE_COMPRESSION_CCITT_T6: DWORD = 4;
+pub const IMAGE_COMPRESSION_LZW: DWORD = 5;
+pub const IMAGE_COMPRESSION_JPEG: DWORD = 6;
+pub const IMAGE_COMPRESSION_PACKBITS: DWORD = 32773;
+DEFINE_PROPERTYKEY!{PKEY_Image_CompressionText,
+ 0x3F08E66F, 0x2F44, 0x4BB9, 0xA6, 0x82, 0xAC, 0x35, 0xD2, 0x56, 0x23, 0x22, 100}
+DEFINE_PROPERTYKEY!{PKEY_Image_Dimensions,
+ 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 13}
+DEFINE_PROPERTYKEY!{PKEY_Image_HorizontalResolution,
+ 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 5}
+DEFINE_PROPERTYKEY!{PKEY_Image_HorizontalSize,
+ 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 3}
+DEFINE_PROPERTYKEY!{PKEY_Image_ImageID,
+ 0x10DABE05, 0x32AA, 0x4C29, 0xBF, 0x1A, 0x63, 0xE2, 0xD2, 0x20, 0x58, 0x7F, 100}
+DEFINE_PROPERTYKEY!{PKEY_Image_ResolutionUnit,
+ 0x19B51FA6, 0x1F92, 0x4A5C, 0xAB, 0x48, 0x7D, 0xF0, 0xAB, 0xD6, 0x74, 0x44, 100}
+DEFINE_PROPERTYKEY!{PKEY_Image_VerticalResolution,
+ 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 6}
+DEFINE_PROPERTYKEY!{PKEY_Image_VerticalSize,
+ 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 4}
+DEFINE_PROPERTYKEY!{PKEY_Journal_Contacts,
+ 0xDEA7C82C, 0x1D89, 0x4A66, 0x94, 0x27, 0xA4, 0xE3, 0xDE, 0xBA, 0xBC, 0xB1, 100}
+DEFINE_PROPERTYKEY!{PKEY_Journal_EntryType,
+ 0x95BEB1FC, 0x326D, 0x4644, 0xB3, 0x96, 0xCD, 0x3E, 0xD9, 0x0E, 0x6D, 0xDF, 100}
+DEFINE_PROPERTYKEY!{PKEY_LayoutPattern_ContentViewModeForBrowse,
+ 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 500}
+pub const LAYOUTPATTERN_CVMFB_ALPHA: &'static str = "alpha";
+pub const LAYOUTPATTERN_CVMFB_BETA: &'static str = "beta";
+pub const LAYOUTPATTERN_CVMFB_GAMMA: &'static str = "gamma";
+pub const LAYOUTPATTERN_CVMFB_DELTA: &'static str = "delta";
+DEFINE_PROPERTYKEY!{PKEY_LayoutPattern_ContentViewModeForSearch,
+ 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 501}
+pub const LAYOUTPATTERN_CVMFS_ALPHA: &'static str = "alpha";
+pub const LAYOUTPATTERN_CVMFS_BETA: &'static str = "beta";
+pub const LAYOUTPATTERN_CVMFS_GAMMA: &'static str = "gamma";
+pub const LAYOUTPATTERN_CVMFS_DELTA: &'static str = "delta";
+DEFINE_PROPERTYKEY!{PKEY_History_SelectionCount,
+ 0x1CE0D6BC, 0x536C, 0x4600, 0xB0, 0xDD, 0x7E, 0x0C, 0x66, 0xB3, 0x50, 0xD5, 8}
+DEFINE_PROPERTYKEY!{PKEY_History_TargetUrlHostName,
+ 0x1CE0D6BC, 0x536C, 0x4600, 0xB0, 0xDD, 0x7E, 0x0C, 0x66, 0xB3, 0x50, 0xD5, 9}
+DEFINE_PROPERTYKEY!{PKEY_Link_Arguments,
+ 0x436F2667, 0x14E2, 0x4FEB, 0xB3, 0x0A, 0x14, 0x6C, 0x53, 0xB5, 0xB6, 0x74, 100}
+DEFINE_PROPERTYKEY!{PKEY_Link_Comment,
+ 0xB9B4B3FC, 0x2B51, 0x4A42, 0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25, 5}
+DEFINE_PROPERTYKEY!{PKEY_Link_DateVisited,
+ 0x5CBF2787, 0x48CF, 0x4208, 0xB9, 0x0E, 0xEE, 0x5E, 0x5D, 0x42, 0x02, 0x94, 23}
+DEFINE_PROPERTYKEY!{PKEY_Link_Description,
+ 0x5CBF2787, 0x48CF, 0x4208, 0xB9, 0x0E, 0xEE, 0x5E, 0x5D, 0x42, 0x02, 0x94, 21}
+DEFINE_PROPERTYKEY!{PKEY_Link_FeedItemLocalId,
+ 0x8A2F99F9, 0x3C37, 0x465D, 0xA8, 0xD7, 0x69, 0x77, 0x7A, 0x24, 0x6D, 0x0C, 2}
+DEFINE_PROPERTYKEY!{PKEY_Link_Status,
+ 0xB9B4B3FC, 0x2B51, 0x4A42, 0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25, 3}
+pub const LINK_STATUS_RESOLVED: LONG = 1;
+pub const LINK_STATUS_BROKEN: LONG = 2;
+DEFINE_PROPERTYKEY!{PKEY_Link_TargetExtension,
+ 0x7A7D76F4, 0xB630, 0x4BD7, 0x95, 0xFF, 0x37, 0xCC, 0x51, 0xA9, 0x75, 0xC9, 2}
+DEFINE_PROPERTYKEY!{PKEY_Link_TargetParsingPath,
+ 0xB9B4B3FC, 0x2B51, 0x4A42, 0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25, 2}
+DEFINE_PROPERTYKEY!{PKEY_Link_TargetSFGAOFlags,
+ 0xB9B4B3FC, 0x2B51, 0x4A42, 0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25, 8}
+DEFINE_PROPERTYKEY!{PKEY_Link_TargetUrlHostName,
+ 0x8A2F99F9, 0x3C37, 0x465D, 0xA8, 0xD7, 0x69, 0x77, 0x7A, 0x24, 0x6D, 0x0C, 5}
+DEFINE_PROPERTYKEY!{PKEY_Link_TargetUrlPath,
+ 0x8A2F99F9, 0x3C37, 0x465D, 0xA8, 0xD7, 0x69, 0x77, 0x7A, 0x24, 0x6D, 0x0C, 6}
+DEFINE_PROPERTYKEY!{PKEY_Media_AuthorUrl,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 32}
+DEFINE_PROPERTYKEY!{PKEY_Media_AverageLevel,
+ 0x09EDD5B6, 0xB301, 0x43C5, 0x99, 0x90, 0xD0, 0x03, 0x02, 0xEF, 0xFD, 0x46, 100}
+DEFINE_PROPERTYKEY!{PKEY_Media_ClassPrimaryID,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 13}
+DEFINE_PROPERTYKEY!{PKEY_Media_ClassSecondaryID,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 14}
+DEFINE_PROPERTYKEY!{PKEY_Media_CollectionGroupID,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 24}
+DEFINE_PROPERTYKEY!{PKEY_Media_CollectionID,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 25}
+DEFINE_PROPERTYKEY!{PKEY_Media_ContentDistributor,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 18}
+DEFINE_PROPERTYKEY!{PKEY_Media_ContentID,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 26}
+DEFINE_PROPERTYKEY!{PKEY_Media_CreatorApplication,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 27}
+DEFINE_PROPERTYKEY!{PKEY_Media_CreatorApplicationVersion,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 28}
+DEFINE_PROPERTYKEY!{PKEY_Media_DateEncoded,
+ 0x2E4B640D, 0x5019, 0x46D8, 0x88, 0x81, 0x55, 0x41, 0x4C, 0xC5, 0xCA, 0xA0, 100}
+DEFINE_PROPERTYKEY!{PKEY_Media_DateReleased,
+ 0xDE41CC29, 0x6971, 0x4290, 0xB4, 0x72, 0xF5, 0x9F, 0x2E, 0x2F, 0x31, 0xE2, 100}
+DEFINE_PROPERTYKEY!{PKEY_Media_DlnaProfileID,
+ 0xCFA31B45, 0x525D, 0x4998, 0xBB, 0x44, 0x3F, 0x7D, 0x81, 0x54, 0x2F, 0xA4, 100}
+DEFINE_PROPERTYKEY!{PKEY_Media_Duration,
+ 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 3}
+DEFINE_PROPERTYKEY!{PKEY_Media_DVDID,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 15}
+DEFINE_PROPERTYKEY!{PKEY_Media_EncodedBy,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 36}
+DEFINE_PROPERTYKEY!{PKEY_Media_EncodingSettings,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 37}
+DEFINE_PROPERTYKEY!{PKEY_Media_EpisodeNumber,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 100}
+DEFINE_PROPERTYKEY!{PKEY_Media_FrameCount,
+ 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 12}
+DEFINE_PROPERTYKEY!{PKEY_Media_MCDI,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 16}
+DEFINE_PROPERTYKEY!{PKEY_Media_MetadataContentProvider,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 17}
+DEFINE_PROPERTYKEY!{PKEY_Media_Producer,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 22}
+DEFINE_PROPERTYKEY!{PKEY_Media_PromotionUrl,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 33}
+DEFINE_PROPERTYKEY!{PKEY_Media_ProtectionType,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 38}
+DEFINE_PROPERTYKEY!{PKEY_Media_ProviderRating,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 39}
+DEFINE_PROPERTYKEY!{PKEY_Media_ProviderStyle,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 40}
+DEFINE_PROPERTYKEY!{PKEY_Media_Publisher,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 30}
+DEFINE_PROPERTYKEY!{PKEY_Media_SeasonNumber,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 101}
+DEFINE_PROPERTYKEY!{PKEY_Media_SeriesName,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 42}
+DEFINE_PROPERTYKEY!{PKEY_Media_SubscriptionContentId,
+ 0x9AEBAE7A, 0x9644, 0x487D, 0xA9, 0x2C, 0x65, 0x75, 0x85, 0xED, 0x75, 0x1A, 100}
+DEFINE_PROPERTYKEY!{PKEY_Media_SubTitle,
+ 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 38}
+DEFINE_PROPERTYKEY!{PKEY_Media_ThumbnailLargePath,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 47}
+DEFINE_PROPERTYKEY!{PKEY_Media_ThumbnailLargeUri,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 48}
+DEFINE_PROPERTYKEY!{PKEY_Media_ThumbnailSmallPath,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 49}
+DEFINE_PROPERTYKEY!{PKEY_Media_ThumbnailSmallUri,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 50}
+DEFINE_PROPERTYKEY!{PKEY_Media_UniqueFileIdentifier,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 35}
+DEFINE_PROPERTYKEY!{PKEY_Media_UserNoAutoInfo,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 41}
+DEFINE_PROPERTYKEY!{PKEY_Media_UserWebUrl,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 34}
+DEFINE_PROPERTYKEY!{PKEY_Media_Writer,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 23}
+DEFINE_PROPERTYKEY!{PKEY_Media_Year,
+ 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 5}
+DEFINE_PROPERTYKEY!{PKEY_Message_AttachmentContents,
+ 0x3143BF7C, 0x80A8, 0x4854, 0x88, 0x80, 0xE2, 0xE4, 0x01, 0x89, 0xBD, 0xD0, 100}
+DEFINE_PROPERTYKEY!{PKEY_Message_AttachmentNames,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 21}
+DEFINE_PROPERTYKEY!{PKEY_Message_BccAddress,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 2}
+DEFINE_PROPERTYKEY!{PKEY_Message_BccName,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 3}
+DEFINE_PROPERTYKEY!{PKEY_Message_CcAddress,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 4}
+DEFINE_PROPERTYKEY!{PKEY_Message_CcName,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 5}
+DEFINE_PROPERTYKEY!{PKEY_Message_ConversationID,
+ 0xDC8F80BD, 0xAF1E, 0x4289, 0x85, 0xB6, 0x3D, 0xFC, 0x1B, 0x49, 0x39, 0x92, 100}
+DEFINE_PROPERTYKEY!{PKEY_Message_ConversationIndex,
+ 0xDC8F80BD, 0xAF1E, 0x4289, 0x85, 0xB6, 0x3D, 0xFC, 0x1B, 0x49, 0x39, 0x92, 101}
+DEFINE_PROPERTYKEY!{PKEY_Message_DateReceived,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 20}
+DEFINE_PROPERTYKEY!{PKEY_Message_DateSent,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 19}
+DEFINE_PROPERTYKEY!{PKEY_Message_Flags,
+ 0xA82D9EE7, 0xCA67, 0x4312, 0x96, 0x5E, 0x22, 0x6B, 0xCE, 0xA8, 0x50, 0x23, 100}
+DEFINE_PROPERTYKEY!{PKEY_Message_FromAddress,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 13}
+DEFINE_PROPERTYKEY!{PKEY_Message_FromName,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 14}
+DEFINE_PROPERTYKEY!{PKEY_Message_HasAttachments,
+ 0x9C1FCF74, 0x2D97, 0x41BA, 0xB4, 0xAE, 0xCB, 0x2E, 0x36, 0x61, 0xA6, 0xE4, 8}
+DEFINE_PROPERTYKEY!{PKEY_Message_IsFwdOrReply,
+ 0x9A9BC088, 0x4F6D, 0x469E, 0x99, 0x19, 0xE7, 0x05, 0x41, 0x20, 0x40, 0xF9, 100}
+DEFINE_PROPERTYKEY!{PKEY_Message_MessageClass,
+ 0xCD9ED458, 0x08CE, 0x418F, 0xA7, 0x0E, 0xF9, 0x12, 0xC7, 0xBB, 0x9C, 0x5C, 103}
+DEFINE_PROPERTYKEY!{PKEY_Message_Participants,
+ 0x1A9BA605, 0x8E7C, 0x4D11, 0xAD, 0x7D, 0xA5, 0x0A, 0xDA, 0x18, 0xBA, 0x1B, 2}
+DEFINE_PROPERTYKEY!{PKEY_Message_ProofInProgress,
+ 0x9098F33C, 0x9A7D, 0x48A8, 0x8D, 0xE5, 0x2E, 0x12, 0x27, 0xA6, 0x4E, 0x91, 100}
+DEFINE_PROPERTYKEY!{PKEY_Message_SenderAddress,
+ 0x0BE1C8E7, 0x1981, 0x4676, 0xAE, 0x14, 0xFD, 0xD7, 0x8F, 0x05, 0xA6, 0xE7, 100}
+DEFINE_PROPERTYKEY!{PKEY_Message_SenderName,
+ 0x0DA41CFA, 0xD224, 0x4A18, 0xAE, 0x2F, 0x59, 0x61, 0x58, 0xDB, 0x4B, 0x3A, 100}
+DEFINE_PROPERTYKEY!{PKEY_Message_Store,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 15}
+DEFINE_PROPERTYKEY!{PKEY_Message_ToAddress,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 16}
+DEFINE_PROPERTYKEY!{PKEY_Message_ToDoFlags,
+ 0x1F856A9F, 0x6900, 0x4ABA, 0x95, 0x05, 0x2D, 0x5F, 0x1B, 0x4D, 0x66, 0xCB, 100}
+DEFINE_PROPERTYKEY!{PKEY_Message_ToDoTitle,
+ 0xBCCC8A3C, 0x8CEF, 0x42E5, 0x9B, 0x1C, 0xC6, 0x90, 0x79, 0x39, 0x8B, 0xC7, 100}
+DEFINE_PROPERTYKEY!{PKEY_Message_ToName,
+ 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 17}
+DEFINE_PROPERTYKEY!{PKEY_Music_AlbumArtist,
+ 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 13}
+DEFINE_PROPERTYKEY!{PKEY_Music_AlbumArtistSortOverride,
+ 0xF1FDB4AF, 0xF78C, 0x466C, 0xBB, 0x05, 0x56, 0xE9, 0x2D, 0xB0, 0xB8, 0xEC, 103}
+DEFINE_PROPERTYKEY!{PKEY_Music_AlbumID,
+ 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 100}
+DEFINE_PROPERTYKEY!{PKEY_Music_AlbumTitle,
+ 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 4}
+DEFINE_PROPERTYKEY!{PKEY_Music_AlbumTitleSortOverride,
+ 0x13EB7FFC, 0xEC89, 0x4346, 0xB1, 0x9D, 0xCC, 0xC6, 0xF1, 0x78, 0x42, 0x23, 101}
+DEFINE_PROPERTYKEY!{PKEY_Music_Artist,
+ 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 2}
+DEFINE_PROPERTYKEY!{PKEY_Music_ArtistSortOverride,
+ 0xDEEB2DB5, 0x0696, 0x4CE0, 0x94, 0xFE, 0xA0, 0x1F, 0x77, 0xA4, 0x5F, 0xB5, 102}
+DEFINE_PROPERTYKEY!{PKEY_Music_BeatsPerMinute,
+ 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 35}
+DEFINE_PROPERTYKEY!{PKEY_Music_Composer,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 19}
+DEFINE_PROPERTYKEY!{PKEY_Music_ComposerSortOverride,
+ 0x00BC20A3, 0xBD48, 0x4085, 0x87, 0x2C, 0xA8, 0x8D, 0x77, 0xF5, 0x09, 0x7E, 105}
+DEFINE_PROPERTYKEY!{PKEY_Music_Conductor,
+ 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 36}
+DEFINE_PROPERTYKEY!{PKEY_Music_ContentGroupDescription,
+ 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 33}
+DEFINE_PROPERTYKEY!{PKEY_Music_DiscNumber,
+ 0x6AFE7437, 0x9BCD, 0x49C7, 0x80, 0xFE, 0x4A, 0x5C, 0x65, 0xFA, 0x58, 0x74, 104}
+DEFINE_PROPERTYKEY!{PKEY_Music_DisplayArtist,
+ 0xFD122953, 0xFA93, 0x4EF7, 0x92, 0xC3, 0x04, 0xC9, 0x46, 0xB2, 0xF7, 0xC8, 100}
+DEFINE_PROPERTYKEY!{PKEY_Music_Genre,
+ 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 11}
+DEFINE_PROPERTYKEY!{PKEY_Music_InitialKey,
+ 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 34}
+DEFINE_PROPERTYKEY!{PKEY_Music_IsCompilation,
+ 0xC449D5CB, 0x9EA4, 0x4809, 0x82, 0xE8, 0xAF, 0x9D, 0x59, 0xDE, 0xD6, 0xD1, 100}
+DEFINE_PROPERTYKEY!{PKEY_Music_Lyrics,
+ 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 12}
+DEFINE_PROPERTYKEY!{PKEY_Music_Mood,
+ 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 39}
+DEFINE_PROPERTYKEY!{PKEY_Music_PartOfSet,
+ 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 37}
+DEFINE_PROPERTYKEY!{PKEY_Music_Period,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 31}
+DEFINE_PROPERTYKEY!{PKEY_Music_SynchronizedLyrics,
+ 0x6B223B6A, 0x162E, 0x4AA9, 0xB3, 0x9F, 0x05, 0xD6, 0x78, 0xFC, 0x6D, 0x77, 100}
+DEFINE_PROPERTYKEY!{PKEY_Music_TrackNumber,
+ 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 7}
+DEFINE_PROPERTYKEY!{PKEY_Note_Color,
+ 0x4776CAFA, 0xBCE4, 0x4CB1, 0xA2, 0x3E, 0x26, 0x5E, 0x76, 0xD8, 0xEB, 0x11, 100}
+pub const NOTE_COLOR_BLUE: DWORD = 0;
+pub const NOTE_COLOR_GREEN: DWORD = 1;
+pub const NOTE_COLOR_PINK: DWORD = 2;
+pub const NOTE_COLOR_YELLOW: DWORD = 3;
+pub const NOTE_COLOR_WHITE: DWORD = 4;
+pub const NOTE_COLOR_LIGHTGREEN: DWORD = 5;
+DEFINE_PROPERTYKEY!{PKEY_Note_ColorText,
+ 0x46B4E8DE, 0xCDB2, 0x440D, 0x88, 0x5C, 0x16, 0x58, 0xEB, 0x65, 0xB9, 0x14, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_Aperture,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37378}
+DEFINE_PROPERTYKEY!{PKEY_Photo_ApertureDenominator,
+ 0xE1A9A38B, 0x6685, 0x46BD, 0x87, 0x5E, 0x57, 0x0D, 0xC7, 0xAD, 0x73, 0x20, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_ApertureNumerator,
+ 0x0337ECEC, 0x39FB, 0x4581, 0xA0, 0xBD, 0x4C, 0x4C, 0xC5, 0x1E, 0x99, 0x14, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_Brightness,
+ 0x1A701BF6, 0x478C, 0x4361, 0x83, 0xAB, 0x37, 0x01, 0xBB, 0x05, 0x3C, 0x58, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_BrightnessDenominator,
+ 0x6EBE6946, 0x2321, 0x440A, 0x90, 0xF0, 0xC0, 0x43, 0xEF, 0xD3, 0x24, 0x76, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_BrightnessNumerator,
+ 0x9E7D118F, 0xB314, 0x45A0, 0x8C, 0xFB, 0xD6, 0x54, 0xB9, 0x17, 0xC9, 0xE9, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_CameraManufacturer,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 271}
+DEFINE_PROPERTYKEY!{PKEY_Photo_CameraModel,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 272}
+DEFINE_PROPERTYKEY!{PKEY_Photo_CameraSerialNumber,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 273}
+DEFINE_PROPERTYKEY!{PKEY_Photo_Contrast,
+ 0x2A785BA9, 0x8D23, 0x4DED, 0x82, 0xE6, 0x60, 0xA3, 0x50, 0xC8, 0x6A, 0x10, 100}
+pub const PHOTO_CONTRAST_NORMAL: DWORD = 0;
+pub const PHOTO_CONTRAST_SOFT: DWORD = 1;
+pub const PHOTO_CONTRAST_HARD: DWORD = 2;
+DEFINE_PROPERTYKEY!{PKEY_Photo_ContrastText,
+ 0x59DDE9F2, 0x5253, 0x40EA, 0x9A, 0x8B, 0x47, 0x9E, 0x96, 0xC6, 0x24, 0x9A, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_DateTaken,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 36867}
+DEFINE_PROPERTYKEY!{PKEY_Photo_DigitalZoom,
+ 0xF85BF840, 0xA925, 0x4BC2, 0xB0, 0xC4, 0x8E, 0x36, 0xB5, 0x98, 0x67, 0x9E, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_DigitalZoomDenominator,
+ 0x745BAF0E, 0xE5C1, 0x4CFB, 0x8A, 0x1B, 0xD0, 0x31, 0xA0, 0xA5, 0x23, 0x93, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_DigitalZoomNumerator,
+ 0x16CBB924, 0x6500, 0x473B, 0xA5, 0xBE, 0xF1, 0x59, 0x9B, 0xCB, 0xE4, 0x13, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_Event,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 18248}
+DEFINE_PROPERTYKEY!{PKEY_Photo_EXIFVersion,
+ 0xD35F743A, 0xEB2E, 0x47F2, 0xA2, 0x86, 0x84, 0x41, 0x32, 0xCB, 0x14, 0x27, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_ExposureBias,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37380}
+DEFINE_PROPERTYKEY!{PKEY_Photo_ExposureBiasDenominator,
+ 0xAB205E50, 0x04B7, 0x461C, 0xA1, 0x8C, 0x2F, 0x23, 0x38, 0x36, 0xE6, 0x27, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_ExposureBiasNumerator,
+ 0x738BF284, 0x1D87, 0x420B, 0x92, 0xCF, 0x58, 0x34, 0xBF, 0x6E, 0xF9, 0xED, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_ExposureIndex,
+ 0x967B5AF8, 0x995A, 0x46ED, 0x9E, 0x11, 0x35, 0xB3, 0xC5, 0xB9, 0x78, 0x2D, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_ExposureIndexDenominator,
+ 0x93112F89, 0xC28B, 0x492F, 0x8A, 0x9D, 0x4B, 0xE2, 0x06, 0x2C, 0xEE, 0x8A, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_ExposureIndexNumerator,
+ 0xCDEDCF30, 0x8919, 0x44DF, 0x8F, 0x4C, 0x4E, 0xB2, 0xFF, 0xDB, 0x8D, 0x89, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_ExposureProgram,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 34850}
+pub const PHOTO_EXPOSUREPROGRAM_UNKNOWN: DWORD = 0;
+pub const PHOTO_EXPOSUREPROGRAM_MANUAL: DWORD = 1;
+pub const PHOTO_EXPOSUREPROGRAM_NORMAL: DWORD = 2;
+pub const PHOTO_EXPOSUREPROGRAM_APERTURE: DWORD = 3;
+pub const PHOTO_EXPOSUREPROGRAM_SHUTTER: DWORD = 4;
+pub const PHOTO_EXPOSUREPROGRAM_CREATIVE: DWORD = 5;
+pub const PHOTO_EXPOSUREPROGRAM_ACTION: DWORD = 6;
+pub const PHOTO_EXPOSUREPROGRAM_PORTRAIT: DWORD = 7;
+pub const PHOTO_EXPOSUREPROGRAM_LANDSCAPE: DWORD = 8;
+DEFINE_PROPERTYKEY!{PKEY_Photo_ExposureProgramText,
+ 0xFEC690B7, 0x5F30, 0x4646, 0xAE, 0x47, 0x4C, 0xAA, 0xFB, 0xA8, 0x84, 0xA3, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_ExposureTime,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 33434}
+DEFINE_PROPERTYKEY!{PKEY_Photo_ExposureTimeDenominator,
+ 0x55E98597, 0xAD16, 0x42E0, 0xB6, 0x24, 0x21, 0x59, 0x9A, 0x19, 0x98, 0x38, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_ExposureTimeNumerator,
+ 0x257E44E2, 0x9031, 0x4323, 0xAC, 0x38, 0x85, 0xC5, 0x52, 0x87, 0x1B, 0x2E, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_Flash,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37385}
+pub const PHOTO_FLASH_NONE: LONG = 0;
+pub const PHOTO_FLASH_FLASH: LONG = 1;
+pub const PHOTO_FLASH_WITHOUTSTROBE: LONG = 5;
+pub const PHOTO_FLASH_WITHSTROBE: LONG = 7;
+pub const PHOTO_FLASH_FLASH_COMPULSORY: LONG = 9;
+pub const PHOTO_FLASH_FLASH_COMPULSORY_NORETURNLIGHT: LONG = 13;
+pub const PHOTO_FLASH_FLASH_COMPULSORY_RETURNLIGHT: LONG = 15;
+pub const PHOTO_FLASH_NONE_COMPULSORY: LONG = 16;
+pub const PHOTO_FLASH_NONE_AUTO: LONG = 24;
+pub const PHOTO_FLASH_FLASH_AUTO: LONG = 25;
+pub const PHOTO_FLASH_FLASH_AUTO_NORETURNLIGHT: LONG = 29;
+pub const PHOTO_FLASH_FLASH_AUTO_RETURNLIGHT: LONG = 31;
+pub const PHOTO_FLASH_NOFUNCTION: LONG = 32;
+pub const PHOTO_FLASH_FLASH_REDEYE: LONG = 65;
+pub const PHOTO_FLASH_FLASH_REDEYE_NORETURNLIGHT: LONG = 69;
+pub const PHOTO_FLASH_FLASH_REDEYE_RETURNLIGHT: LONG = 71;
+pub const PHOTO_FLASH_FLASH_COMPULSORY_REDEYE: LONG = 73;
+pub const PHOTO_FLASH_FLASH_COMPULSORY_REDEYE_NORETURNLIGHT: LONG = 77;
+pub const PHOTO_FLASH_FLASH_COMPULSORY_REDEYE_RETURNLIGHT: LONG = 79;
+pub const PHOTO_FLASH_FLASH_AUTO_REDEYE: LONG = 89;
+pub const PHOTO_FLASH_FLASH_AUTO_REDEYE_NORETURNLIGHT: LONG = 93;
+pub const PHOTO_FLASH_FLASH_AUTO_REDEYE_RETURNLIGHT: LONG = 95;
+DEFINE_PROPERTYKEY!{PKEY_Photo_FlashEnergy,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 41483}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FlashEnergyDenominator,
+ 0xD7B61C70, 0x6323, 0x49CD, 0xA5, 0xFC, 0xC8, 0x42, 0x77, 0x16, 0x2C, 0x97, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FlashEnergyNumerator,
+ 0xFCAD3D3D, 0x0858, 0x400F, 0xAA, 0xA3, 0x2F, 0x66, 0xCC, 0xE2, 0xA6, 0xBC, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FlashManufacturer,
+ 0xAABAF6C9, 0xE0C5, 0x4719, 0x85, 0x85, 0x57, 0xB1, 0x03, 0xE5, 0x84, 0xFE, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FlashModel,
+ 0xFE83BB35, 0x4D1A, 0x42E2, 0x91, 0x6B, 0x06, 0xF3, 0xE1, 0xAF, 0x71, 0x9E, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FlashText,
+ 0x6B8B68F6, 0x200B, 0x47EA, 0x8D, 0x25, 0xD8, 0x05, 0x0F, 0x57, 0x33, 0x9F, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FNumber,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 33437}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FNumberDenominator,
+ 0xE92A2496, 0x223B, 0x4463, 0xA4, 0xE3, 0x30, 0xEA, 0xBB, 0xA7, 0x9D, 0x80, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FNumberNumerator,
+ 0x1B97738A, 0xFDFC, 0x462F, 0x9D, 0x93, 0x19, 0x57, 0xE0, 0x8B, 0xE9, 0x0C, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FocalLength,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37386}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FocalLengthDenominator,
+ 0x305BC615, 0xDCA1, 0x44A5, 0x9F, 0xD4, 0x10, 0xC0, 0xBA, 0x79, 0x41, 0x2E, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FocalLengthInFilm,
+ 0xA0E74609, 0xB84D, 0x4F49, 0xB8, 0x60, 0x46, 0x2B, 0xD9, 0x97, 0x1F, 0x98, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FocalLengthNumerator,
+ 0x776B6B3B, 0x1E3D, 0x4B0C, 0x9A, 0x0E, 0x8F, 0xBA, 0xF2, 0xA8, 0x49, 0x2A, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FocalPlaneXResolution,
+ 0xCFC08D97, 0xC6F7, 0x4484, 0x89, 0xDD, 0xEB, 0xEF, 0x43, 0x56, 0xFE, 0x76, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FocalPlaneXResolutionDenominator,
+ 0x0933F3F5, 0x4786, 0x4F46, 0xA8, 0xE8, 0xD6, 0x4D, 0xD3, 0x7F, 0xA5, 0x21, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FocalPlaneXResolutionNumerator,
+ 0xDCCB10AF, 0xB4E2, 0x4B88, 0x95, 0xF9, 0x03, 0x1B, 0x4D, 0x5A, 0xB4, 0x90, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FocalPlaneYResolution,
+ 0x4FFFE4D0, 0x914F, 0x4AC4, 0x8D, 0x6F, 0xC9, 0xC6, 0x1D, 0xE1, 0x69, 0xB1, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FocalPlaneYResolutionDenominator,
+ 0x1D6179A6, 0xA876, 0x4031, 0xB0, 0x13, 0x33, 0x47, 0xB2, 0xB6, 0x4D, 0xC8, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_FocalPlaneYResolutionNumerator,
+ 0xA2E541C5, 0x4440, 0x4BA8, 0x86, 0x7E, 0x75, 0xCF, 0xC0, 0x68, 0x28, 0xCD, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_GainControl,
+ 0xFA304789, 0x00C7, 0x4D80, 0x90, 0x4A, 0x1E, 0x4D, 0xCC, 0x72, 0x65, 0xAA, 100}
+pub const PHOTO_GAINCONTROL_NONE: DOUBLE = 0.0;
+pub const PHOTO_GAINCONTROL_LOWGAINUP: DOUBLE = 1.0;
+pub const PHOTO_GAINCONTROL_HIGHGAINUP: DOUBLE = 2.0;
+pub const PHOTO_GAINCONTROL_LOWGAINDOWN: DOUBLE = 3.0;
+pub const PHOTO_GAINCONTROL_HIGHGAINDOWN: DOUBLE = 4.0;
+DEFINE_PROPERTYKEY!{PKEY_Photo_GainControlDenominator,
+ 0x42864DFD, 0x9DA4, 0x4F77, 0xBD, 0xED, 0x4A, 0xAD, 0x7B, 0x25, 0x67, 0x35, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_GainControlNumerator,
+ 0x8E8ECF7C, 0xB7B8, 0x4EB8, 0xA6, 0x3F, 0x0E, 0xE7, 0x15, 0xC9, 0x6F, 0x9E, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_GainControlText,
+ 0xC06238B2, 0x0BF9, 0x4279, 0xA7, 0x23, 0x25, 0x85, 0x67, 0x15, 0xCB, 0x9D, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_ISOSpeed,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 34855}
+DEFINE_PROPERTYKEY!{PKEY_Photo_LensManufacturer,
+ 0xE6DDCAF7, 0x29C5, 0x4F0A, 0x9A, 0x68, 0xD1, 0x94, 0x12, 0xEC, 0x70, 0x90, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_LensModel,
+ 0xE1277516, 0x2B5F, 0x4869, 0x89, 0xB1, 0x2E, 0x58, 0x5B, 0xD3, 0x8B, 0x7A, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_LightSource,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37384}
+pub const PHOTO_LIGHTSOURCE_UNKNOWN: DWORD = 0;
+pub const PHOTO_LIGHTSOURCE_DAYLIGHT: DWORD = 1;
+pub const PHOTO_LIGHTSOURCE_FLUORESCENT: DWORD = 2;
+pub const PHOTO_LIGHTSOURCE_TUNGSTEN: DWORD = 3;
+pub const PHOTO_LIGHTSOURCE_STANDARD_A: DWORD = 17;
+pub const PHOTO_LIGHTSOURCE_STANDARD_B: DWORD = 18;
+pub const PHOTO_LIGHTSOURCE_STANDARD_C: DWORD = 19;
+pub const PHOTO_LIGHTSOURCE_D55: DWORD = 20;
+pub const PHOTO_LIGHTSOURCE_D65: DWORD = 21;
+pub const PHOTO_LIGHTSOURCE_D75: DWORD = 22;
+DEFINE_PROPERTYKEY!{PKEY_Photo_MakerNote,
+ 0xFA303353, 0xB659, 0x4052, 0x85, 0xE9, 0xBC, 0xAC, 0x79, 0x54, 0x9B, 0x84, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_MakerNoteOffset,
+ 0x813F4124, 0x34E6, 0x4D17, 0xAB, 0x3E, 0x6B, 0x1F, 0x3C, 0x22, 0x47, 0xA1, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_MaxAperture,
+ 0x08F6D7C2, 0xE3F2, 0x44FC, 0xAF, 0x1E, 0x5A, 0xA5, 0xC8, 0x1A, 0x2D, 0x3E, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_MaxApertureDenominator,
+ 0xC77724D4, 0x601F, 0x46C5, 0x9B, 0x89, 0xC5, 0x3F, 0x93, 0xBC, 0xEB, 0x77, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_MaxApertureNumerator,
+ 0xC107E191, 0xA459, 0x44C5, 0x9A, 0xE6, 0xB9, 0x52, 0xAD, 0x4B, 0x90, 0x6D, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_MeteringMode,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37383}
+pub const PHOTO_METERINGMODE_UNKNOWN: DWORD = 0;
+pub const PHOTO_METERINGMODE_AVERAGE: DWORD = 1;
+pub const PHOTO_METERINGMODE_CENTER: DWORD = 2;
+pub const PHOTO_METERINGMODE_SPOT: DWORD = 3;
+pub const PHOTO_METERINGMODE_MULTISPOT: DWORD = 4;
+pub const PHOTO_METERINGMODE_PATTERN: DWORD = 5;
+pub const PHOTO_METERINGMODE_PARTIAL: DWORD = 6;
+DEFINE_PROPERTYKEY!{PKEY_Photo_MeteringModeText,
+ 0xF628FD8C, 0x7BA8, 0x465A, 0xA6, 0x5B, 0xC5, 0xAA, 0x79, 0x26, 0x3A, 0x9E, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_Orientation,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 274}
+pub const PHOTO_ORIENTATION_NORMAL: DWORD = 1;
+pub const PHOTO_ORIENTATION_FLIPHORIZONTAL: DWORD = 2;
+pub const PHOTO_ORIENTATION_ROTATE180: DWORD = 3;
+pub const PHOTO_ORIENTATION_FLIPVERTICAL: DWORD = 4;
+pub const PHOTO_ORIENTATION_TRANSPOSE: DWORD = 5;
+pub const PHOTO_ORIENTATION_ROTATE270: DWORD = 6;
+pub const PHOTO_ORIENTATION_TRANSVERSE: DWORD = 7;
+pub const PHOTO_ORIENTATION_ROTATE90: DWORD = 8;
+DEFINE_PROPERTYKEY!{PKEY_Photo_OrientationText,
+ 0xA9EA193C, 0xC511, 0x498A, 0xA0, 0x6B, 0x58, 0xE2, 0x77, 0x6D, 0xCC, 0x28, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_PeopleNames,
+ 0xE8309B6E, 0x084C, 0x49B4, 0xB1, 0xFC, 0x90, 0xA8, 0x03, 0x31, 0xB6, 0x38, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_PhotometricInterpretation,
+ 0x341796F1, 0x1DF9, 0x4B1C, 0xA5, 0x64, 0x91, 0xBD, 0xEF, 0xA4, 0x38, 0x77, 100}
+pub const PHOTO_PHOTOMETRIC_RGB: DWORD = 2;
+pub const PHOTO_PHOTOMETRIC_YCBCR: DWORD = 6;
+DEFINE_PROPERTYKEY!{PKEY_Photo_PhotometricInterpretationText,
+ 0x821437D6, 0x9EAB, 0x4765, 0xA5, 0x89, 0x3B, 0x1C, 0xBB, 0xD2, 0x2A, 0x61, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_ProgramMode,
+ 0x6D217F6D, 0x3F6A, 0x4825, 0xB4, 0x70, 0x5F, 0x03, 0xCA, 0x2F, 0xBE, 0x9B, 100}
+pub const PHOTO_PROGRAMMODE_NOTDEFINED: DWORD = 0;
+pub const PHOTO_PROGRAMMODE_MANUAL: DWORD = 1;
+pub const PHOTO_PROGRAMMODE_NORMAL: DWORD = 2;
+pub const PHOTO_PROGRAMMODE_APERTURE: DWORD = 3;
+pub const PHOTO_PROGRAMMODE_SHUTTER: DWORD = 4;
+pub const PHOTO_PROGRAMMODE_CREATIVE: DWORD = 5;
+pub const PHOTO_PROGRAMMODE_ACTION: DWORD = 6;
+pub const PHOTO_PROGRAMMODE_PORTRAIT: DWORD = 7;
+pub const PHOTO_PROGRAMMODE_LANDSCAPE: DWORD = 8;
+DEFINE_PROPERTYKEY!{PKEY_Photo_ProgramModeText,
+ 0x7FE3AA27, 0x2648, 0x42F3, 0x89, 0xB0, 0x45, 0x4E, 0x5C, 0xB1, 0x50, 0xC3, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_RelatedSoundFile,
+ 0x318A6B45, 0x087F, 0x4DC2, 0xB8, 0xCC, 0x05, 0x35, 0x95, 0x51, 0xFC, 0x9E, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_Saturation,
+ 0x49237325, 0xA95A, 0x4F67, 0xB2, 0x11, 0x81, 0x6B, 0x2D, 0x45, 0xD2, 0xE0, 100}
+pub const PHOTO_SATURATION_NORMAL: DWORD = 0;
+pub const PHOTO_SATURATION_LOW: DWORD = 1;
+pub const PHOTO_SATURATION_HIGH: DWORD = 2;
+DEFINE_PROPERTYKEY!{PKEY_Photo_SaturationText,
+ 0x61478C08, 0xB600, 0x4A84, 0xBB, 0xE4, 0xE9, 0x9C, 0x45, 0xF0, 0xA0, 0x72, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_Sharpness,
+ 0xFC6976DB, 0x8349, 0x4970, 0xAE, 0x97, 0xB3, 0xC5, 0x31, 0x6A, 0x08, 0xF0, 100}
+pub const PHOTO_SHARPNESS_NORMAL: DWORD = 0;
+pub const PHOTO_SHARPNESS_SOFT: DWORD = 1;
+pub const PHOTO_SHARPNESS_HARD: DWORD = 2;
+DEFINE_PROPERTYKEY!{PKEY_Photo_SharpnessText,
+ 0x51EC3F47, 0xDD50, 0x421D, 0x87, 0x69, 0x33, 0x4F, 0x50, 0x42, 0x4B, 0x1E, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_ShutterSpeed,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37377}
+DEFINE_PROPERTYKEY!{PKEY_Photo_ShutterSpeedDenominator,
+ 0xE13D8975, 0x81C7, 0x4948, 0xAE, 0x3F, 0x37, 0xCA, 0xE1, 0x1E, 0x8F, 0xF7, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_ShutterSpeedNumerator,
+ 0x16EA4042, 0xD6F4, 0x4BCA, 0x83, 0x49, 0x7C, 0x78, 0xD3, 0x0F, 0xB3, 0x33, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_SubjectDistance,
+ 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37382}
+DEFINE_PROPERTYKEY!{PKEY_Photo_SubjectDistanceDenominator,
+ 0x0C840A88, 0xB043, 0x466D, 0x97, 0x66, 0xD4, 0xB2, 0x6D, 0xA3, 0xFA, 0x77, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_SubjectDistanceNumerator,
+ 0x8AF4961C, 0xF526, 0x43E5, 0xAA, 0x81, 0xDB, 0x76, 0x82, 0x19, 0x17, 0x8D, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_TagViewAggregate,
+ 0xB812F15D, 0xC2D8, 0x4BBF, 0xBA, 0xCD, 0x79, 0x74, 0x43, 0x46, 0x11, 0x3F, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_TranscodedForSync,
+ 0x9A8EBB75, 0x6458, 0x4E82, 0xBA, 0xCB, 0x35, 0xC0, 0x09, 0x5B, 0x03, 0xBB, 100}
+DEFINE_PROPERTYKEY!{PKEY_Photo_WhiteBalance,
+ 0xEE3D3D8A, 0x5381, 0x4CFA, 0xB1, 0x3B, 0xAA, 0xF6, 0x6B, 0x5F, 0x4E, 0xC9, 100}
+pub const PHOTO_WHITEBALANCE_AUTO: DWORD = 0;
+pub const PHOTO_WHITEBALANCE_MANUAL: DWORD = 1;
+DEFINE_PROPERTYKEY!{PKEY_Photo_WhiteBalanceText,
+ 0x6336B95E, 0xC7A7, 0x426D, 0x86, 0xFD, 0x7A, 0xE3, 0xD3, 0x9C, 0x84, 0xB4, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_Advanced,
+ 0x900A403B, 0x097B, 0x4B95, 0x8A, 0xE2, 0x07, 0x1F, 0xDA, 0xEE, 0xB1, 0x18, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_Audio,
+ 0x2804D469, 0x788F, 0x48AA, 0x85, 0x70, 0x71, 0xB9, 0xC1, 0x87, 0xE1, 0x38, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_Calendar,
+ 0x9973D2B5, 0xBFD8, 0x438A, 0xBA, 0x94, 0x53, 0x49, 0xB2, 0x93, 0x18, 0x1A, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_Camera,
+ 0xDE00DE32, 0x547E, 0x4981, 0xAD, 0x4B, 0x54, 0x2F, 0x2E, 0x90, 0x07, 0xD8, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_Contact,
+ 0xDF975FD3, 0x250A, 0x4004, 0x85, 0x8F, 0x34, 0xE2, 0x9A, 0x3E, 0x37, 0xAA, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_Content,
+ 0xD0DAB0BA, 0x368A, 0x4050, 0xA8, 0x82, 0x6C, 0x01, 0x0F, 0xD1, 0x9A, 0x4F, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_Description,
+ 0x8969B275, 0x9475, 0x4E00, 0xA8, 0x87, 0xFF, 0x93, 0xB8, 0xB4, 0x1E, 0x44, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_FileSystem,
+ 0xE3A7D2C1, 0x80FC, 0x4B40, 0x8F, 0x34, 0x30, 0xEA, 0x11, 0x1B, 0xDC, 0x2E, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_General,
+ 0xCC301630, 0xB192, 0x4C22, 0xB3, 0x72, 0x9F, 0x4C, 0x6D, 0x33, 0x8E, 0x07, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_GPS,
+ 0xF3713ADA, 0x90E3, 0x4E11, 0xAA, 0xE5, 0xFD, 0xC1, 0x76, 0x85, 0xB9, 0xBE, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_Image,
+ 0xE3690A87, 0x0FA8, 0x4A2A, 0x9A, 0x9F, 0xFC, 0xE8, 0x82, 0x70, 0x55, 0xAC, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_Media,
+ 0x61872CF7, 0x6B5E, 0x4B4B, 0xAC, 0x2D, 0x59, 0xDA, 0x84, 0x45, 0x92, 0x48, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_MediaAdvanced,
+ 0x8859A284, 0xDE7E, 0x4642, 0x99, 0xBA, 0xD4, 0x31, 0xD0, 0x44, 0xB1, 0xEC, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_Message,
+ 0x7FD7259D, 0x16B4, 0x4135, 0x9F, 0x97, 0x7C, 0x96, 0xEC, 0xD2, 0xFA, 0x9E, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_Music,
+ 0x68DD6094, 0x7216, 0x40F1, 0xA0, 0x29, 0x43, 0xFE, 0x71, 0x27, 0x04, 0x3F, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_Origin,
+ 0x2598D2FB, 0x5569, 0x4367, 0x95, 0xDF, 0x5C, 0xD3, 0xA1, 0x77, 0xE1, 0xA5, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_PhotoAdvanced,
+ 0x0CB2BF5A, 0x9EE7, 0x4A86, 0x82, 0x22, 0xF0, 0x1E, 0x07, 0xFD, 0xAD, 0xAF, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_RecordedTV,
+ 0xE7B33238, 0x6584, 0x4170, 0xA5, 0xC0, 0xAC, 0x25, 0xEF, 0xD9, 0xDA, 0x56, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropGroup_Video,
+ 0xBEBE0920, 0x7671, 0x4C54, 0xA3, 0xEB, 0x49, 0xFD, 0xDF, 0xC1, 0x91, 0xEE, 100}
+DEFINE_PROPERTYKEY!{PKEY_InfoTipText,
+ 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 17}
+DEFINE_PROPERTYKEY!{PKEY_PropList_ConflictPrompt,
+ 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 11}
+DEFINE_PROPERTYKEY!{PKEY_PropList_ContentViewModeForBrowse,
+ 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 13}
+DEFINE_PROPERTYKEY!{PKEY_PropList_ContentViewModeForSearch,
+ 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 14}
+DEFINE_PROPERTYKEY!{PKEY_PropList_ExtendedTileInfo,
+ 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 9}
+DEFINE_PROPERTYKEY!{PKEY_PropList_FileOperationPrompt,
+ 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 10}
+DEFINE_PROPERTYKEY!{PKEY_PropList_FullDetails,
+ 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 2}
+DEFINE_PROPERTYKEY!{PKEY_PropList_InfoTip,
+ 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 4}
+DEFINE_PROPERTYKEY!{PKEY_PropList_NonPersonal,
+ 0x49D1091F, 0x082E, 0x493F, 0xB2, 0x3F, 0xD2, 0x30, 0x8A, 0xA9, 0x66, 0x8C, 100}
+DEFINE_PROPERTYKEY!{PKEY_PropList_PreviewDetails,
+ 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 8}
+DEFINE_PROPERTYKEY!{PKEY_PropList_PreviewTitle,
+ 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 6}
+DEFINE_PROPERTYKEY!{PKEY_PropList_QuickTip,
+ 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 5}
+DEFINE_PROPERTYKEY!{PKEY_PropList_TileInfo,
+ 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 3}
+DEFINE_PROPERTYKEY!{PKEY_PropList_XPDetailsPanel,
+ 0xF2275480, 0xF782, 0x4291, 0xBD, 0x94, 0xF1, 0x36, 0x93, 0x51, 0x3A, 0xEC, 0}
+DEFINE_PROPERTYKEY!{PKEY_RecordedTV_ChannelNumber,
+ 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 7}
+DEFINE_PROPERTYKEY!{PKEY_RecordedTV_Credits,
+ 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 4}
+DEFINE_PROPERTYKEY!{PKEY_RecordedTV_DateContentExpires,
+ 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 15}
+DEFINE_PROPERTYKEY!{PKEY_RecordedTV_EpisodeName,
+ 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 2}
+DEFINE_PROPERTYKEY!{PKEY_RecordedTV_IsATSCContent,
+ 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 16}
+DEFINE_PROPERTYKEY!{PKEY_RecordedTV_IsClosedCaptioningAvailable,
+ 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 12}
+DEFINE_PROPERTYKEY!{PKEY_RecordedTV_IsDTVContent,
+ 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 17}
+DEFINE_PROPERTYKEY!{PKEY_RecordedTV_IsHDContent,
+ 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 18}
+DEFINE_PROPERTYKEY!{PKEY_RecordedTV_IsRepeatBroadcast,
+ 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 13}
+DEFINE_PROPERTYKEY!{PKEY_RecordedTV_IsSAP,
+ 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 14}
+DEFINE_PROPERTYKEY!{PKEY_RecordedTV_NetworkAffiliation,
+ 0x2C53C813, 0xFB63, 0x4E22, 0xA1, 0xAB, 0x0B, 0x33, 0x1C, 0xA1, 0xE2, 0x73, 100}
+DEFINE_PROPERTYKEY!{PKEY_RecordedTV_OriginalBroadcastDate,
+ 0x4684FE97, 0x8765, 0x4842, 0x9C, 0x13, 0xF0, 0x06, 0x44, 0x7B, 0x17, 0x8C, 100}
+DEFINE_PROPERTYKEY!{PKEY_RecordedTV_ProgramDescription,
+ 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 3}
+DEFINE_PROPERTYKEY!{PKEY_RecordedTV_RecordingTime,
+ 0xA5477F61, 0x7A82, 0x4ECA, 0x9D, 0xDE, 0x98, 0xB6, 0x9B, 0x24, 0x79, 0xB3, 100}
+DEFINE_PROPERTYKEY!{PKEY_RecordedTV_StationCallSign,
+ 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 5}
+DEFINE_PROPERTYKEY!{PKEY_RecordedTV_StationName,
+ 0x1B5439E7, 0xEBA1, 0x4AF8, 0xBD, 0xD7, 0x7A, 0xF1, 0xD4, 0x54, 0x94, 0x93, 100}
+DEFINE_PROPERTYKEY!{PKEY_Search_AutoSummary,
+ 0x560C36C0, 0x503A, 0x11CF, 0xBA, 0xA1, 0x00, 0x00, 0x4C, 0x75, 0x2A, 0x9A, 2}
+DEFINE_PROPERTYKEY!{PKEY_Search_ContainerHash,
+ 0xBCEEE283, 0x35DF, 0x4D53, 0x82, 0x6A, 0xF3, 0x6A, 0x3E, 0xEF, 0xC6, 0xBE, 100}
+DEFINE_PROPERTYKEY!{PKEY_Search_Contents,
+ 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 19}
+DEFINE_PROPERTYKEY!{PKEY_Search_EntryID,
+ 0x49691C90, 0x7E17, 0x101A, 0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9, 5}
+DEFINE_PROPERTYKEY!{PKEY_Search_ExtendedProperties,
+ 0x7B03B546, 0xFA4F, 0x4A52, 0xA2, 0xFE, 0x03, 0xD5, 0x31, 0x1E, 0x58, 0x65, 100}
+DEFINE_PROPERTYKEY!{PKEY_Search_GatherTime,
+ 0x0B63E350, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 8}
+DEFINE_PROPERTYKEY!{PKEY_Search_HitCount,
+ 0x49691C90, 0x7E17, 0x101A, 0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9, 4}
+DEFINE_PROPERTYKEY!{PKEY_Search_IsClosedDirectory,
+ 0x0B63E343, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 23}
+DEFINE_PROPERTYKEY!{PKEY_Search_IsFullyContained,
+ 0x0B63E343, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 24}
+DEFINE_PROPERTYKEY!{PKEY_Search_QueryFocusedSummary,
+ 0x560C36C0, 0x503A, 0x11CF, 0xBA, 0xA1, 0x00, 0x00, 0x4C, 0x75, 0x2A, 0x9A, 3}
+DEFINE_PROPERTYKEY!{PKEY_Search_QueryFocusedSummaryWithFallback,
+ 0x560C36C0, 0x503A, 0x11CF, 0xBA, 0xA1, 0x00, 0x00, 0x4C, 0x75, 0x2A, 0x9A, 4}
+DEFINE_PROPERTYKEY!{PKEY_Search_QueryPropertyHits,
+ 0x49691C90, 0x7E17, 0x101A, 0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9, 21}
+DEFINE_PROPERTYKEY!{PKEY_Search_Rank,
+ 0x49691C90, 0x7E17, 0x101A, 0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9, 3}
+DEFINE_PROPERTYKEY!{PKEY_Search_Store,
+ 0xA06992B3, 0x8CAF, 0x4ED7, 0xA5, 0x47, 0xB2, 0x59, 0xE3, 0x2A, 0xC9, 0xFC, 100}
+DEFINE_PROPERTYKEY!{PKEY_Search_UrlToIndex,
+ 0x0B63E343, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 2}
+DEFINE_PROPERTYKEY!{PKEY_Search_UrlToIndexWithModificationTime,
+ 0x0B63E343, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 12}
+DEFINE_PROPERTYKEY!{PKEY_Supplemental_AlbumID,
+ 0x0C73B141, 0x39D6, 0x4653, 0xA6, 0x83, 0xCA, 0xB2, 0x91, 0xEA, 0xF9, 0x5B, 2}
+DEFINE_PROPERTYKEY!{PKEY_Supplemental_ResourceId,
+ 0x0C73B141, 0x39D6, 0x4653, 0xA6, 0x83, 0xCA, 0xB2, 0x91, 0xEA, 0xF9, 0x5B, 3}
+DEFINE_PROPERTYKEY!{PKEY_DescriptionID,
+ 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 2}
+DEFINE_PROPERTYKEY!{PKEY_InternalName,
+ 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 5}
+DEFINE_PROPERTYKEY!{PKEY_LibraryLocationsCount,
+ 0x908696C7, 0x8F87, 0x44F2, 0x80, 0xED, 0xA8, 0xC1, 0xC6, 0x89, 0x45, 0x75, 2}
+DEFINE_PROPERTYKEY!{PKEY_Link_TargetSFGAOFlagsStrings,
+ 0xD6942081, 0xD53B, 0x443D, 0xAD, 0x47, 0x5E, 0x05, 0x9D, 0x9C, 0xD2, 0x7A, 3}
+DEFINE_PROPERTYKEY!{PKEY_Link_TargetUrl,
+ 0x5CBF2787, 0x48CF, 0x4208, 0xB9, 0x0E, 0xEE, 0x5E, 0x5D, 0x42, 0x02, 0x94, 2}
+DEFINE_PROPERTYKEY!{PKEY_NamespaceCLSID,
+ 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 6}
+DEFINE_PROPERTYKEY!{PKEY_Shell_SFGAOFlagsStrings,
+ 0xD6942081, 0xD53B, 0x443D, 0xAD, 0x47, 0x5E, 0x05, 0x9D, 0x9C, 0xD2, 0x7A, 2}
+pub const SFGAOSTR_FILESYS: &'static str = "filesys";
+pub const SFGAOSTR_FILEANC: &'static str = "fileanc";
+pub const SFGAOSTR_STORAGEANC: &'static str = "storageanc";
+pub const SFGAOSTR_STREAM: &'static str = "stream";
+pub const SFGAOSTR_LINK: &'static str = "link";
+pub const SFGAOSTR_HIDDEN: &'static str = "hidden";
+pub const SFGAOSTR_SUPERHIDDEN: &'static str = "superhidden";
+pub const SFGAOSTR_FOLDER: &'static str = "folder";
+pub const SFGAOSTR_NONENUM: &'static str = "nonenum";
+pub const SFGAOSTR_BROWSABLE: &'static str = "browsable";
+pub const SFGAOSTR_SYSTEM: &'static str = "system";
+DEFINE_PROPERTYKEY!{PKEY_StatusBarSelectedItemCount,
+ 0x26DC287C, 0x6E3D, 0x4BD3, 0xB2, 0xB0, 0x6A, 0x26, 0xBA, 0x2E, 0x34, 0x6D, 3}
+DEFINE_PROPERTYKEY!{PKEY_StatusBarViewItemCount,
+ 0x26DC287C, 0x6E3D, 0x4BD3, 0xB2, 0xB0, 0x6A, 0x26, 0xBA, 0x2E, 0x34, 0x6D, 2}
+DEFINE_PROPERTYKEY!{PKEY_AppUserModel_ExcludeFromShowInNewInstall,
+ 0x9F4C2855, 0x9F79, 0x4B39, 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3, 8}
+DEFINE_PROPERTYKEY!{PKEY_AppUserModel_ID,
+ 0x9F4C2855, 0x9F79, 0x4B39, 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3, 5}
+DEFINE_PROPERTYKEY!{PKEY_AppUserModel_IsDestListSeparator,
+ 0x9F4C2855, 0x9F79, 0x4B39, 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3, 6}
+DEFINE_PROPERTYKEY!{PKEY_AppUserModel_IsDualMode,
+ 0x9F4C2855, 0x9F79, 0x4B39, 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3, 11}
+DEFINE_PROPERTYKEY!{PKEY_AppUserModel_PreventPinning,
+ 0x9F4C2855, 0x9F79, 0x4B39, 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3, 9}
+DEFINE_PROPERTYKEY!{PKEY_AppUserModel_RelaunchCommand,
+ 0x9F4C2855, 0x9F79, 0x4B39, 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3, 2}
+DEFINE_PROPERTYKEY!{PKEY_AppUserModel_RelaunchDisplayNameResource,
+ 0x9F4C2855, 0x9F79, 0x4B39, 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3, 4}
+DEFINE_PROPERTYKEY!{PKEY_AppUserModel_RelaunchIconResource,
+ 0x9F4C2855, 0x9F79, 0x4B39, 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3, 3}
+DEFINE_PROPERTYKEY!{PKEY_AppUserModel_StartPinOption,
+ 0x9F4C2855, 0x9F79, 0x4B39, 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3, 12}
+pub const APPUSERMODEL_STARTPINOPTION_DEFAULT: DWORD = 0;
+pub const APPUSERMODEL_STARTPINOPTION_NOPINONINSTALL: DWORD = 1;
+pub const APPUSERMODEL_STARTPINOPTION_USERPINNED: DWORD = 2;
+DEFINE_PROPERTYKEY!{PKEY_AppUserModel_ToastActivatorCLSID,
+ 0x9F4C2855, 0x9F79, 0x4B39, 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3, 26}
+DEFINE_PROPERTYKEY!{PKEY_EdgeGesture_DisableTouchWhenFullscreen,
+ 0x32CE38B2, 0x2C9A, 0x41B1, 0x9B, 0xC5, 0xB3, 0x78, 0x43, 0x94, 0xAA, 0x44, 2}
+DEFINE_PROPERTYKEY!{PKEY_Software_DateLastUsed,
+ 0x841E4F90, 0xFF59, 0x4D16, 0x89, 0x47, 0xE8, 0x1B, 0xBF, 0xFA, 0xB3, 0x6D, 16}
+DEFINE_PROPERTYKEY!{PKEY_Software_ProductName,
+ 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 7}
+DEFINE_PROPERTYKEY!{PKEY_Sync_Comments,
+ 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 13}
+DEFINE_PROPERTYKEY!{PKEY_Sync_ConflictDescription,
+ 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 4}
+DEFINE_PROPERTYKEY!{PKEY_Sync_ConflictFirstLocation,
+ 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 6}
+DEFINE_PROPERTYKEY!{PKEY_Sync_ConflictSecondLocation,
+ 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 7}
+DEFINE_PROPERTYKEY!{PKEY_Sync_HandlerCollectionID,
+ 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 2}
+DEFINE_PROPERTYKEY!{PKEY_Sync_HandlerID,
+ 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 3}
+DEFINE_PROPERTYKEY!{PKEY_Sync_HandlerName,
+ 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 2}
+DEFINE_PROPERTYKEY!{PKEY_Sync_HandlerType,
+ 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 8}
+pub const SYNC_HANDLERTYPE_OTHER: DWORD = 0;
+pub const SYNC_HANDLERTYPE_PROGRAMS: DWORD = 1;
+pub const SYNC_HANDLERTYPE_DEVICES: DWORD = 2;
+pub const SYNC_HANDLERTYPE_FOLDERS: DWORD = 3;
+pub const SYNC_HANDLERTYPE_WEBSERVICES: DWORD = 4;
+pub const SYNC_HANDLERTYPE_COMPUTERS: DWORD = 5;
+DEFINE_PROPERTYKEY!{PKEY_Sync_HandlerTypeLabel,
+ 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 9}
+DEFINE_PROPERTYKEY!{PKEY_Sync_ItemID,
+ 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 6}
+DEFINE_PROPERTYKEY!{PKEY_Sync_ItemName,
+ 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 3}
+DEFINE_PROPERTYKEY!{PKEY_Sync_ProgressPercentage,
+ 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 23}
+DEFINE_PROPERTYKEY!{PKEY_Sync_State,
+ 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 24}
+pub const SYNC_STATE_NOTSETUP: DWORD = 0;
+pub const SYNC_STATE_SYNCNOTRUN: DWORD = 1;
+pub const SYNC_STATE_IDLE: DWORD = 2;
+pub const SYNC_STATE_ERROR: DWORD = 3;
+pub const SYNC_STATE_PENDING: DWORD = 4;
+pub const SYNC_STATE_SYNCING: DWORD = 5;
+DEFINE_PROPERTYKEY!{PKEY_Sync_Status,
+ 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 10}
+DEFINE_PROPERTYKEY!{PKEY_Task_BillingInformation,
+ 0xD37D52C6, 0x261C, 0x4303, 0x82, 0xB3, 0x08, 0xB9, 0x26, 0xAC, 0x6F, 0x12, 100}
+DEFINE_PROPERTYKEY!{PKEY_Task_CompletionStatus,
+ 0x084D8A0A, 0xE6D5, 0x40DE, 0xBF, 0x1F, 0xC8, 0x82, 0x0E, 0x7C, 0x87, 0x7C, 100}
+DEFINE_PROPERTYKEY!{PKEY_Task_Owner,
+ 0x08C7CC5F, 0x60F2, 0x4494, 0xAD, 0x75, 0x55, 0xE3, 0xE0, 0xB5, 0xAD, 0xD0, 100}
+DEFINE_PROPERTYKEY!{PKEY_Video_Compression,
+ 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 10}
+DEFINE_PROPERTYKEY!{PKEY_Video_Director,
+ 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 20}
+DEFINE_PROPERTYKEY!{PKEY_Video_EncodingBitrate,
+ 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 8}
+DEFINE_PROPERTYKEY!{PKEY_Video_FourCC,
+ 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 44}
+DEFINE_PROPERTYKEY!{PKEY_Video_FrameHeight,
+ 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 4}
+DEFINE_PROPERTYKEY!{PKEY_Video_FrameRate,
+ 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 6}
+DEFINE_PROPERTYKEY!{PKEY_Video_FrameWidth,
+ 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 3}
+DEFINE_PROPERTYKEY!{PKEY_Video_HorizontalAspectRatio,
+ 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 42}
+DEFINE_PROPERTYKEY!{PKEY_Video_IsSpherical,
+ 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 100}
+DEFINE_PROPERTYKEY!{PKEY_Video_IsStereo,
+ 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 98}
+DEFINE_PROPERTYKEY!{PKEY_Video_Orientation,
+ 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 99}
+DEFINE_PROPERTYKEY!{PKEY_Video_SampleSize,
+ 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 9}
+DEFINE_PROPERTYKEY!{PKEY_Video_StreamName,
+ 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 2}
+DEFINE_PROPERTYKEY!{PKEY_Video_StreamNumber,
+ 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 11}
+DEFINE_PROPERTYKEY!{PKEY_Video_TotalBitrate,
+ 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 43}
+DEFINE_PROPERTYKEY!{PKEY_Video_TranscodedForSync,
+ 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 46}
+DEFINE_PROPERTYKEY!{PKEY_Video_VerticalAspectRatio,
+ 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 45}
+DEFINE_PROPERTYKEY!{PKEY_Volume_FileSystem,
+ 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 4}
+DEFINE_PROPERTYKEY!{PKEY_Volume_IsMappedDrive,
+ 0x149C0B69, 0x2C2D, 0x48FC, 0x80, 0x8F, 0xD3, 0x18, 0xD7, 0x8C, 0x46, 0x36, 2}
+DEFINE_PROPERTYKEY!{PKEY_Volume_IsRoot,
+ 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 10}
diff --git a/vendor/winapi/src/um/propkeydef.rs b/vendor/winapi/src/um/propkeydef.rs
new file mode 100644
index 000000000..bc0924c76
--- /dev/null
+++ b/vendor/winapi/src/um/propkeydef.rs
@@ -0,0 +1,13 @@
+// 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::guiddef::IsEqualIID;
+use shared::wtypes::{PROPERTYKEY, PROPID};
+pub const PID_FIRST_USABLE: PROPID = 2;
+pub type REFPROPERTYKEY = *const PROPERTYKEY;
+#[inline]
+pub fn IsEqualPropertyKey(a: &PROPERTYKEY, b: &PROPERTYKEY) -> bool {
+ (a.pid == b.pid) && IsEqualIID(&a.fmtid, &b.fmtid)
+}
diff --git a/vendor/winapi/src/um/propsys.rs b/vendor/winapi/src/um/propsys.rs
new file mode 100644
index 000000000..9a4f6a0ff
--- /dev/null
+++ b/vendor/winapi/src/um/propsys.rs
@@ -0,0 +1,46 @@
+// 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::minwindef::DWORD;
+use shared::wtypes::PROPERTYKEY;
+use um::propidl::{PROPVARIANT, REFPROPVARIANT};
+use um::propkeydef::REFPROPERTYKEY;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::HRESULT;
+pub type IPropertyDescriptionList = IUnknown; // TODO
+RIDL!{#[uuid(0x886d8eeb, 0x8cf2, 0x4446, 0x8d, 0x02, 0xcd, 0xba, 0x1d, 0xbd, 0xcf, 0x99)]
+interface IPropertyStore(IPropertyStoreVtbl): IUnknown(IUnknownVtbl) {
+ fn GetCount(
+ cProps: *mut DWORD,
+ ) -> HRESULT,
+ fn GetAt(
+ iProp: DWORD,
+ pkey: *mut PROPERTYKEY,
+ ) -> HRESULT,
+ fn GetValue(
+ key: REFPROPERTYKEY,
+ pv: *mut PROPVARIANT,
+ ) -> HRESULT,
+ fn SetValue(
+ key: REFPROPERTYKEY,
+ propvar: REFPROPVARIANT,
+ ) -> HRESULT,
+ fn Commit() -> HRESULT,
+}}
+ENUM!{enum GETPROPERTYSTOREFLAGS {
+ GPS_DEFAULT = 0,
+ GPS_HANDLERPROPERTIESONLY = 0x1,
+ GPS_READWRITE = 0x2,
+ GPS_TEMPORARY = 0x4,
+ GPS_FASTPROPERTIESONLY = 0x8,
+ GPS_OPENSLOWITEM = 0x10,
+ GPS_DELAYCREATION = 0x20,
+ GPS_BESTEFFORT = 0x40,
+ GPS_NO_OPLOCK = 0x80,
+ GPS_PREFERQUERYPROPERTIES = 0x100,
+ GPS_EXTRINSICPROPERTIES = 0x200,
+ GPS_EXTRINSICPROPERTIESONLY = 0x400,
+ GPS_MASK_VALID = 0x7ff,
+}}
diff --git a/vendor/winapi/src/um/prsht.rs b/vendor/winapi/src/um/prsht.rs
new file mode 100644
index 000000000..25cb9262d
--- /dev/null
+++ b/vendor/winapi/src/um/prsht.rs
@@ -0,0 +1,361 @@
+// 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.
+//! Interface for the Windows Property Sheet Pages
+use ctypes::{c_int, c_short};
+use shared::basetsd::INT_PTR;
+use shared::minwindef::{BOOL, DWORD, HINSTANCE, LPARAM, LPVOID, LRESULT, UINT, WPARAM};
+use shared::windef::{HBITMAP, HICON, HPALETTE, HWND};
+use um::winnt::{HANDLE, LPCSTR, LPCWSTR};
+use um::winuser::{DLGPROC, LPCDLGTEMPLATEA, NMHDR, WM_USER};
+pub enum PSP {}
+pub type HPROPSHEETPAGE = *mut PSP;
+FN!{stdcall LPFNPSPCALLBACKA(
+ hwnd: HWND,
+ uMsg: UINT,
+ ppsp: *mut PROPSHEETPAGEA,
+) -> UINT}
+FN!{stdcall LPFNPSPCALLBACKW(
+ hwnd: HWND,
+ uMsg: UINT,
+ ppsp: *mut PROPSHEETPAGEW,
+) -> UINT}
+pub const PSP_DEFAULT: DWORD = 0x00000000;
+pub const PSP_DLGINDIRECT: DWORD = 0x00000001;
+pub const PSP_USEHICON: DWORD = 0x00000002;
+pub const PSP_USEICONID: DWORD = 0x00000004;
+pub const PSP_USETITLE: DWORD = 0x00000008;
+pub const PSP_RTLREADING: DWORD = 0x00000010;
+pub const PSP_HASHELP: DWORD = 0x00000020;
+pub const PSP_USEREFPARENT: DWORD = 0x00000040;
+pub const PSP_USECALLBACK: DWORD = 0x00000080;
+pub const PSP_PREMATURE: DWORD = 0x00000400;
+pub const PSP_HIDEHEADER: DWORD = 0x00000800;
+pub const PSP_USEHEADERTITLE: DWORD = 0x00001000;
+pub const PSP_USEHEADERSUBTITLE: DWORD = 0x00002000;
+pub const PSP_USEFUSIONCONTEXT: DWORD = 0x00004000;
+pub const PSPCB_ADDREF: UINT = 0;
+pub const PSPCB_RELEASE: UINT = 1;
+pub const PSPCB_CREATE: UINT = 2;
+pub type PROPSHEETPAGE_RESOURCE = LPCDLGTEMPLATEA;
+UNION!{union PROPSHEETPAGEA_V1_u1 {
+ [usize; 1],
+ pszTemplate pszTemplate_mut: LPCSTR,
+ pResource pResource_mut: PROPSHEETPAGE_RESOURCE,
+}}
+UNION!{union PROPSHEETPAGEA_V1_u2 {
+ [usize; 1],
+ hIcon hIcon_mut: HICON,
+ pszIcon pszIcon_mut: LPCSTR,
+}}
+UNION!{union PROPSHEETPAGEA_V4_u3 {
+ [usize; 1],
+ hbmHeader hbmHeader_mut: HBITMAP,
+ pszbmHeader pszbmHeader_mut: LPCSTR,
+}}
+STRUCT!{struct PROPSHEETPAGEA_V4 {
+ dwSize: DWORD,
+ dwFlags: DWORD,
+ hInstance: HINSTANCE,
+ u1: PROPSHEETPAGEA_V1_u1,
+ u2: PROPSHEETPAGEA_V1_u2,
+ pszTitle: LPCSTR,
+ pfnDlgProc: DLGPROC,
+ lParam: LPARAM,
+ pfnCallback: LPFNPSPCALLBACKA,
+ pcRefParent: *mut UINT,
+ pszHeaderTitle: LPCSTR,
+ pszHeaderSubTitle: LPCSTR,
+ hActCtx: HANDLE,
+ u3: PROPSHEETPAGEA_V4_u3,
+}}
+pub type LPPROPSHEETPAGEA_V4 = *mut PROPSHEETPAGEA_V4;
+pub type LPCPROPSHEETPAGEA_V4 = *const PROPSHEETPAGEA_V4;
+UNION!{union PROPSHEETPAGEW_V1_u1 {
+ [usize; 1],
+ pszTemplate pszTemplate_mut: LPCWSTR,
+ pResource pResource_mut: PROPSHEETPAGE_RESOURCE,
+}}
+UNION!{union PROPSHEETPAGEW_V1_u2 {
+ [usize; 1],
+ hIcon hIcon_mut: HICON,
+ pszIcon pszIcon_mut: LPCWSTR,
+}}
+UNION!{union PROPSHEETPAGEW_V4_u3 {
+ [usize; 1],
+ hbmHeader hbmHeader_mut: HBITMAP,
+ pszbmHeader pszbmHeader_mut: LPCWSTR,
+}}
+STRUCT!{struct PROPSHEETPAGEW_V4 {
+ dwSize: DWORD,
+ dwFlags: DWORD,
+ hInstance: HINSTANCE,
+ u1: PROPSHEETPAGEW_V1_u1,
+ u2: PROPSHEETPAGEW_V1_u2,
+ pszTitle: LPCWSTR,
+ pfnDlgProc: DLGPROC,
+ lParam: LPARAM,
+ pfnCallback: LPFNPSPCALLBACKW,
+ pcRefParent: *mut UINT,
+ pszHeaderTitle: LPCWSTR,
+ pszHeaderSubTitle: LPCWSTR,
+ hActCtx: HANDLE,
+ u3: PROPSHEETPAGEW_V4_u3,
+}}
+pub type LPPROPSHEETPAGEW_V4 = *mut PROPSHEETPAGEW_V4;
+pub type LPCPROPSHEETPAGEW_V4 = *const PROPSHEETPAGEW_V4;
+pub type PROPSHEETPAGEA_LATEST = PROPSHEETPAGEA_V4;
+pub type PROPSHEETPAGEW_LATEST = PROPSHEETPAGEW_V4;
+pub type LPPROPSHEETPAGEA_LATEST = LPPROPSHEETPAGEA_V4;
+pub type LPPROPSHEETPAGEW_LATEST = LPPROPSHEETPAGEW_V4;
+pub type LPCPROPSHEETPAGEA_LATEST = LPCPROPSHEETPAGEA_V4;
+pub type LPCPROPSHEETPAGEW_LATEST = LPCPROPSHEETPAGEW_V4;
+pub type PROPSHEETPAGEA = PROPSHEETPAGEA_V4;
+pub type PROPSHEETPAGEW = PROPSHEETPAGEW_V4;
+pub type LPPROPSHEETPAGEA = LPPROPSHEETPAGEA_V4;
+pub type LPPROPSHEETPAGEW = LPPROPSHEETPAGEW_V4;
+pub type LPCPROPSHEETPAGEA = LPCPROPSHEETPAGEA_V4;
+pub type LPCPROPSHEETPAGEW = LPCPROPSHEETPAGEW_V4;
+pub const PSH_DEFAULT: DWORD = 0x00000000;
+pub const PSH_PROPTITLE: DWORD = 0x00000001;
+pub const PSH_USEHICON: DWORD = 0x00000002;
+pub const PSH_USEICONID: DWORD = 0x00000004;
+pub const PSH_PROPSHEETPAGE: DWORD = 0x00000008;
+pub const PSH_WIZARDHASFINISH: DWORD = 0x00000010;
+pub const PSH_WIZARD: DWORD = 0x00000020;
+pub const PSH_USEPSTARTPAGE: DWORD = 0x00000040;
+pub const PSH_NOAPPLYNOW: DWORD = 0x00000080;
+pub const PSH_USECALLBACK: DWORD = 0x00000100;
+pub const PSH_HASHELP: DWORD = 0x00000200;
+pub const PSH_MODELESS: DWORD = 0x00000400;
+pub const PSH_RTLREADING: DWORD = 0x00000800;
+pub const PSH_WIZARDCONTEXTHELP: DWORD = 0x00001000;
+pub const PSH_WIZARD97: DWORD = 0x01000000;
+pub const PSH_WATERMARK: DWORD = 0x00008000;
+pub const PSH_USEHBMWATERMARK: DWORD = 0x00010000;
+pub const PSH_USEHPLWATERMARK: DWORD = 0x00020000;
+pub const PSH_STRETCHWATERMARK: DWORD = 0x00040000;
+pub const PSH_HEADER: DWORD = 0x00080000;
+pub const PSH_USEHBMHEADER: DWORD = 0x00100000;
+pub const PSH_USEPAGELANG: DWORD = 0x00200000;
+pub const PSH_WIZARD_LITE: DWORD = 0x00400000;
+pub const PSH_NOCONTEXTHELP: DWORD = 0x02000000;
+pub const PSH_AEROWIZARD: DWORD = 0x00004000;
+pub const PSH_RESIZABLE: DWORD = 0x04000000;
+pub const PSH_HEADERBITMAP: DWORD = 0x08000000;
+pub const PSH_NOMARGIN: DWORD = 0x10000000;
+FN!{stdcall PFNPROPSHEETCALLBACK(
+ HWND,
+ UINT,
+ LPARAM,
+) -> c_int}
+UNION!{union PROPSHEETHEADERA_V1_u1 {
+ [usize; 1],
+ hIcon hIcon_mut: HICON,
+ pszIcon pszIcon_mut: LPCSTR,
+}}
+UNION!{union PROPSHEETHEADERA_V1_u2 {
+ [usize; 1],
+ nStartPage nStartPage_mut: UINT,
+ pStartPage pStartPage_mut: LPCSTR,
+}}
+UNION!{union PROPSHEETHEADERA_V1_u3 {
+ [usize; 1],
+ ppsp ppsp_mut: LPCPROPSHEETPAGEA,
+ phpage phpage_mut: *mut HPROPSHEETPAGE,
+}}
+UNION!{union PROPSHEETHEADERA_V2_u4 {
+ [usize; 1],
+ hbmWatermark hbmWatermark_mut: HBITMAP,
+ pszbmWatermark pszbmWatermark_mut: LPCSTR,
+}}
+UNION!{union PROPSHEETHEADERA_V2_u5 {
+ [usize; 1],
+ hbmHeader hbmHeader_mut: HBITMAP,
+ pszbmHeader pszbmHeader_mut: LPCSTR,
+}}
+STRUCT!{struct PROPSHEETHEADERA_V2 {
+ dwSize: DWORD,
+ dwFlags: DWORD,
+ hwndParent: HWND,
+ hInstance: HINSTANCE,
+ u1: PROPSHEETHEADERA_V1_u1,
+ pszCaption: LPCSTR,
+ nPages: UINT,
+ u2: PROPSHEETHEADERA_V1_u2,
+ u3: PROPSHEETHEADERA_V1_u3,
+ pfnCallback: PFNPROPSHEETCALLBACK,
+ u4: PROPSHEETHEADERA_V2_u4,
+ hplWatermark: HPALETTE,
+ u5: PROPSHEETHEADERA_V2_u5,
+}}
+pub type LPPROPSHEETHEADERA_V2 = *mut PROPSHEETHEADERA_V2;
+pub type LPCPROPSHEETHEADERA_V2 = *const PROPSHEETHEADERA_V2;
+UNION!{union PROPSHEETHEADERW_V1_u1 {
+ [usize; 1],
+ hIcon hIcon_mut: HICON,
+ pszIcon pszIcon_mut: LPCWSTR,
+}}
+UNION!{union PROPSHEETHEADERW_V1_u2 {
+ [usize; 1],
+ nStartPage nStartPage_mut: UINT,
+ pStartPage pStartPage_mut: LPCWSTR,
+}}
+UNION!{union PROPSHEETHEADERW_V1_u3 {
+ [usize; 1],
+ ppsp ppsp_mut: LPCPROPSHEETPAGEW,
+ phpage phpage_mut: *mut HPROPSHEETPAGE,
+}}
+UNION!{union PROPSHEETHEADERW_V2_u4 {
+ [usize; 1],
+ hbmWatermark hbmWatermark_mut: HBITMAP,
+ pszbmWatermark pszbmWatermark_mut: LPCWSTR,
+}}
+UNION!{union PROPSHEETHEADERW_V2_u5 {
+ [usize; 1],
+ hbmHeader hbmHeader_mut: HBITMAP,
+ pszbmHeader pszbmHeader_mut: LPCWSTR,
+}}
+STRUCT!{struct PROPSHEETHEADERW_V2 {
+ dwSize: DWORD,
+ dwFlags: DWORD,
+ hwndParent: HWND,
+ hInstance: HINSTANCE,
+ u1: PROPSHEETHEADERW_V1_u1,
+ pszCaption: LPCWSTR,
+ nPages: UINT,
+ u2: PROPSHEETHEADERW_V1_u2,
+ u3: PROPSHEETHEADERW_V1_u3,
+ pfnCallback: PFNPROPSHEETCALLBACK,
+ u4: PROPSHEETHEADERW_V2_u4,
+ hplWatermark: HPALETTE,
+ u5: PROPSHEETHEADERW_V2_u5,
+}}
+pub type LPPROPSHEETHEADERW_V2 = *mut PROPSHEETHEADERW_V2;
+pub type LPCPROPSHEETHEADERW_V2 = *const PROPSHEETHEADERW_V2;
+pub type PROPSHEETHEADERA = PROPSHEETHEADERA_V2;
+pub type PROPSHEETHEADERW = PROPSHEETHEADERW_V2;
+pub type LPPROPSHEETHEADERA = LPPROPSHEETHEADERA_V2;
+pub type LPPROPSHEETHEADERW = LPPROPSHEETHEADERW_V2;
+pub type LPCPROPSHEETHEADERA = LPCPROPSHEETHEADERA_V2;
+pub type LPCPROPSHEETHEADERW = LPCPROPSHEETHEADERW_V2;
+pub const PSCB_INITIALIZED: UINT = 1;
+pub const PSCB_PRECREATE: UINT = 2;
+pub const PSCB_BUTTONPRESSED: UINT = 3;
+extern "system" {
+ pub fn CreatePropertySheetPageA(
+ constPropSheetPagePointer: LPCPROPSHEETPAGEA,
+ ) -> HPROPSHEETPAGE;
+ pub fn CreatePropertySheetPageW(
+ constPropSheetPagePointer: LPCPROPSHEETPAGEW,
+ ) -> HPROPSHEETPAGE;
+ pub fn DestroyPropertySheetPage(
+ hPSPage: HPROPSHEETPAGE,
+ ) -> BOOL;
+ pub fn PropertySheetA(
+ lppsph: LPCPROPSHEETHEADERA,
+ ) -> INT_PTR;
+ pub fn PropertySheetW(
+ lppsph: LPCPROPSHEETHEADERW,
+ ) -> INT_PTR;
+}
+FN!{stdcall LPFNADDPROPSHEETPAGE(
+ HPROPSHEETPAGE,
+ LPARAM,
+) -> BOOL}
+FN!{stdcall LPFNADDPROPSHEETPAGES(
+ LPVOID,
+ LPFNADDPROPSHEETPAGE,
+ LPARAM,
+) -> BOOL}
+STRUCT!{struct PSHNOTIFY {
+ hdr: NMHDR,
+ lParam: LPARAM,
+}}
+pub type LPPSHNOTIFY = *mut PSHNOTIFY;
+pub const PSN_FIRST: UINT = -200i32 as u32;
+pub const PSN_LAST: UINT = -299i32 as u32;
+pub const PSN_SETACTIVE: UINT = PSN_FIRST - 0;
+pub const PSN_KILLACTIVE: UINT = PSN_FIRST - 1;
+pub const PSN_APPLY: UINT = PSN_FIRST - 2;
+pub const PSN_RESET: UINT = PSN_FIRST - 3;
+pub const PSN_HELP: UINT = PSN_FIRST - 5;
+pub const PSN_WIZBACK: UINT = PSN_FIRST - 6;
+pub const PSN_WIZNEXT: UINT = PSN_FIRST - 7;
+pub const PSN_WIZFINISH: UINT = PSN_FIRST - 8;
+pub const PSN_QUERYCANCEL: UINT = PSN_FIRST - 9;
+pub const PSN_GETOBJECT: UINT = PSN_FIRST - 10;
+pub const PSN_TRANSLATEACCELERATOR: UINT = PSN_FIRST - 12;
+pub const PSN_QUERYINITIALFOCUS: UINT = PSN_FIRST - 13;
+pub const PSNRET_NOERROR: LRESULT = 0;
+pub const PSNRET_INVALID: LRESULT = 1;
+pub const PSNRET_INVALID_NOCHANGEPAGE: LRESULT = 2;
+pub const PSNRET_MESSAGEHANDLED: LRESULT = 3;
+pub const PSM_SETCURSEL: UINT = WM_USER + 101;
+pub const PSM_REMOVEPAGE: UINT = WM_USER + 102;
+pub const PSM_ADDPAGE: UINT = WM_USER + 103;
+pub const PSM_CHANGED: UINT = WM_USER + 104;
+pub const PSM_RESTARTWINDOWS: UINT = WM_USER + 105;
+pub const PSM_REBOOTSYSTEM: UINT = WM_USER + 106;
+pub const PSM_CANCELTOCLOSE: UINT = WM_USER + 107;
+pub const PSM_QUERYSIBLINGS: UINT = WM_USER + 108;
+pub const PSM_UNCHANGED: UINT = WM_USER + 109;
+pub const PSM_APPLY: UINT = WM_USER + 110;
+pub const PSM_SETTITLEA: UINT = WM_USER + 111;
+pub const PSM_SETTITLEW: UINT = WM_USER + 120;
+pub const PSM_SETWIZBUTTONS: UINT = WM_USER + 112;
+pub const PSWIZB_BACK: DWORD = 0x00000001;
+pub const PSWIZB_NEXT: DWORD = 0x00000002;
+pub const PSWIZB_FINISH: DWORD = 0x00000004;
+pub const PSWIZB_DISABLEDFINISH: DWORD = 0x00000008;
+pub const PSWIZBF_ELEVATIONREQUIRED: WPARAM = 0x00000001;
+pub const PSWIZB_CANCEL: DWORD = 0x00000010;
+pub const PSM_PRESSBUTTON: UINT = WM_USER + 113;
+pub const PSBTN_BACK: c_int = 0;
+pub const PSBTN_NEXT: c_int = 1;
+pub const PSBTN_FINISH: c_int = 2;
+pub const PSBTN_OK: c_int = 3;
+pub const PSBTN_APPLYNOW: c_int = 4;
+pub const PSBTN_CANCEL: c_int = 5;
+pub const PSBTN_HELP: c_int = 6;
+pub const PSBTN_MAX: c_int = 6;
+pub const PSM_SETCURSELID: UINT = WM_USER + 114;
+pub const PSM_SETFINISHTEXTA: UINT = WM_USER + 115;
+pub const PSM_SETFINISHTEXTW: UINT = WM_USER + 121;
+pub const PSM_GETTABCONTROL: UINT = WM_USER + 116;
+pub const PSM_ISDIALOGMESSAGE: UINT = WM_USER + 117;
+pub const PSM_GETCURRENTPAGEHWND: UINT = WM_USER + 118;
+pub const PSM_INSERTPAGE: UINT = WM_USER + 119;
+pub const PSM_SETHEADERTITLEA: UINT = WM_USER + 125;
+pub const PSM_SETHEADERTITLEW: UINT = WM_USER + 126;
+pub const PSWIZF_SETCOLOR: UINT = -1i32 as u32;
+pub const PSM_SETHEADERSUBTITLEA: UINT = WM_USER + 127;
+pub const PSM_SETHEADERSUBTITLEW: UINT = WM_USER + 128;
+pub const PSM_HWNDTOINDEX: UINT = WM_USER + 129;
+pub const PSM_INDEXTOHWND: UINT = WM_USER + 130;
+pub const PSM_PAGETOINDEX: UINT = WM_USER + 131;
+pub const PSM_INDEXTOPAGE: UINT = WM_USER + 132;
+pub const PSM_IDTOINDEX: UINT = WM_USER + 133;
+pub const PSM_INDEXTOID: UINT = WM_USER + 134;
+pub const PSM_GETRESULT: UINT = WM_USER + 135;
+pub const PSM_RECALCPAGESIZES: UINT = WM_USER + 136;
+pub const PSM_SETNEXTTEXTW: UINT = WM_USER + 137;
+pub const PSM_SHOWWIZBUTTONS: UINT = WM_USER + 138;
+pub const PSM_ENABLEWIZBUTTONS: UINT = WM_USER + 139;
+pub const PSM_SETBUTTONTEXTW: UINT = WM_USER + 140;
+pub const PSM_SETBUTTONTEXT: UINT = PSM_SETBUTTONTEXTW;
+pub const ID_PSRESTARTWINDOWS: INT_PTR = 0x2;
+pub const ID_PSREBOOTSYSTEM: INT_PTR = ID_PSRESTARTWINDOWS | 0x1;
+pub const WIZ_CXDLG: DWORD = 276;
+pub const WIZ_CYDLG: DWORD = 140;
+pub const WIZ_CXBMP: DWORD = 80;
+pub const WIZ_BODYX: DWORD = 92;
+pub const WIZ_BODYCX: DWORD = 184;
+pub const PROP_SM_CXDLG: c_short = 212;
+pub const PROP_SM_CYDLG: c_short = 188;
+pub const PROP_MED_CXDLG: c_short = 227;
+pub const PROP_MED_CYDLG: c_short = 215;
+pub const PROP_LG_CXDLG: c_short = 252;
+pub const PROP_LG_CYDLG: c_short = 218;
diff --git a/vendor/winapi/src/um/psapi.rs b/vendor/winapi/src/um/psapi.rs
new file mode 100644
index 000000000..eb1adb803
--- /dev/null
+++ b/vendor/winapi/src/um/psapi.rs
@@ -0,0 +1,422 @@
+// 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.
+//! FFI bindings to psapi.
+use shared::basetsd::{SIZE_T, ULONG_PTR};
+use shared::minwindef::{BOOL, DWORD, HMODULE, LPDWORD, LPVOID, PDWORD};
+use um::winnt::{HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PVOID};
+pub const LIST_MODULES_DEFAULT: DWORD = 0x0;
+pub const LIST_MODULES_32BIT: DWORD = 0x01;
+pub const LIST_MODULES_64BIT: DWORD = 0x02;
+pub const LIST_MODULES_ALL: DWORD = LIST_MODULES_32BIT | LIST_MODULES_64BIT;
+extern "system" {
+ pub fn K32EnumProcesses(
+ lpidProcess: *mut DWORD,
+ cb: DWORD,
+ lpcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn K32EnumProcessModules(
+ hProcess: HANDLE,
+ lphModule: *mut HMODULE,
+ cb: DWORD,
+ lpcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn K32EnumProcessModulesEx(
+ hProcess: HANDLE,
+ lphModule: *mut HMODULE,
+ cb: DWORD,
+ lpcbNeeded: LPDWORD,
+ dwFilterFlag: DWORD,
+ ) -> BOOL;
+ pub fn K32GetModuleBaseNameA(
+ hProcess: HANDLE,
+ hModule: HMODULE,
+ lpBaseName: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn K32GetModuleBaseNameW(
+ hProcess: HANDLE,
+ hModule: HMODULE,
+ lpBaseName: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn K32GetModuleFileNameExA(
+ hProcess: HANDLE,
+ hModule: HMODULE,
+ lpFilename: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn K32GetModuleFileNameExW(
+ hProcess: HANDLE,
+ hModule: HMODULE,
+ lpFilename: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn K32EmptyWorkingSet(
+ hProcess: HANDLE,
+ ) -> BOOL;
+ pub fn K32QueryWorkingSet(
+ hProcess: HANDLE,
+ pv: PVOID,
+ cb: DWORD,
+ ) -> BOOL;
+ pub fn K32QueryWorkingSetEx(
+ hProcess: HANDLE,
+ pv: PVOID,
+ cb: DWORD,
+ ) -> BOOL;
+ pub fn K32InitializeProcessForWsWatch(
+ hProcess: HANDLE,
+ ) -> BOOL;
+ pub fn K32GetWsChanges(
+ hProcess: HANDLE,
+ lpWatchInfo: PPSAPI_WS_WATCH_INFORMATION,
+ cb: DWORD,
+ ) -> BOOL;
+ pub fn K32GetWsChangesEx(
+ hProcess: HANDLE,
+ lpWatchInfoEx: PPSAPI_WS_WATCH_INFORMATION_EX,
+ cb: PDWORD,
+ ) -> BOOL;
+ pub fn K32GetMappedFileNameW(
+ hProcess: HANDLE,
+ lpv: LPVOID,
+ lpFilename: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn K32GetMappedFileNameA(
+ hProcess: HANDLE,
+ lpv: LPVOID,
+ lpFilename: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn K32EnumDeviceDrivers(
+ lpImageBase: *mut LPVOID,
+ cb: DWORD,
+ lpcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn K32GetDeviceDriverBaseNameA(
+ ImageBase: LPVOID,
+ lpFilename: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn K32GetDeviceDriverBaseNameW(
+ ImageBase: LPVOID,
+ lpFilename: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn K32GetDeviceDriverFileNameA(
+ ImageBase: LPVOID,
+ lpFilename: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn K32GetDeviceDriverFileNameW(
+ ImageBase: LPVOID,
+ lpFilename: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn K32GetPerformanceInfo(
+ pPerformanceInformation: PPERFORMANCE_INFORMATION,
+ cb: DWORD,
+ ) -> BOOL;
+ pub fn K32EnumPageFilesW(
+ pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKW,
+ pContext: LPVOID,
+ ) -> BOOL;
+ pub fn K32EnumPageFilesA(
+ pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKA,
+ pContext: LPVOID,
+ ) -> BOOL;
+ pub fn K32GetProcessImageFileNameA(
+ hProcess: HANDLE,
+ lpImageFileName: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn K32GetProcessImageFileNameW(
+ hProcess: HANDLE,
+ lpImageFileName: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn EnumProcesses(
+ lpidProcess: *mut DWORD,
+ cb: DWORD,
+ lpcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn K32GetProcessMemoryInfo(
+ Process: HANDLE,
+ ppsmemCounters: PPROCESS_MEMORY_COUNTERS,
+ cb: DWORD,
+ ) -> BOOL;
+ pub fn K32GetModuleInformation(
+ hProcess: HANDLE,
+ hModule: HMODULE,
+ lpmodinfo: LPMODULEINFO,
+ cb: DWORD,
+ ) -> BOOL;
+}
+pub type LPMODULEINFO = *mut MODULEINFO;
+pub type PPSAPI_WORKING_SET_INFORMATION = *mut PSAPI_WORKING_SET_INFORMATION;
+pub type PPSAPI_WORKING_SET_EX_INFORMATION = *mut PSAPI_WORKING_SET_EX_INFORMATION;
+pub type PPSAPI_WS_WATCH_INFORMATION = *mut PSAPI_WS_WATCH_INFORMATION;
+pub type PPSAPI_WS_WATCH_INFORMATION_EX = *mut PSAPI_WS_WATCH_INFORMATION_EX;
+pub type PENUM_PAGE_FILE_INFORMATION = *mut ENUM_PAGE_FILE_INFORMATION;
+pub type PPERFORMANCE_INFORMATION = *mut PERFORMANCE_INFORMATION;
+pub type PPROCESS_MEMORY_COUNTERS = *mut PROCESS_MEMORY_COUNTERS;
+pub type PPROCESS_MEMORY_COUNTERS_EX = *mut PROCESS_MEMORY_COUNTERS_EX;
+FN!{stdcall PENUM_PAGE_FILE_CALLBACKA(
+ pContext: LPVOID,
+ pPageFileInfo: PENUM_PAGE_FILE_INFORMATION,
+ lpFilename: LPCSTR,
+) -> BOOL}
+FN!{stdcall PENUM_PAGE_FILE_CALLBACKW(
+ pContext: LPVOID,
+ pPageFileInfo: PENUM_PAGE_FILE_INFORMATION,
+ lpFilename: LPCWSTR,
+) -> BOOL}
+STRUCT!{struct MODULEINFO {
+ lpBaseOfDll: LPVOID,
+ SizeOfImage: DWORD,
+ EntryPoint: LPVOID,
+}}
+STRUCT!{struct ENUM_PAGE_FILE_INFORMATION {
+ cb: DWORD,
+ Reserved: DWORD,
+ TotalSize: SIZE_T,
+ TotalInUse: SIZE_T,
+ PeakUsage: SIZE_T,
+}}
+STRUCT!{struct PERFORMANCE_INFORMATION {
+ cb: DWORD,
+ CommitTotal: SIZE_T,
+ CommitLimit: SIZE_T,
+ CommitPeak: SIZE_T,
+ PhysicalTotal: SIZE_T,
+ PhysicalAvailable: SIZE_T,
+ SystemCache: SIZE_T,
+ KernelTotal: SIZE_T,
+ KernelPaged: SIZE_T,
+ KernelNonpaged: SIZE_T,
+ PageSize: SIZE_T,
+ HandleCount: DWORD,
+ ProcessCount: DWORD,
+ ThreadCount: DWORD,
+}}
+STRUCT!{struct PROCESS_MEMORY_COUNTERS {
+ cb: DWORD,
+ PageFaultCount: DWORD,
+ PeakWorkingSetSize: SIZE_T,
+ WorkingSetSize: SIZE_T,
+ QuotaPeakPagedPoolUsage: SIZE_T,
+ QuotaPagedPoolUsage: SIZE_T,
+ QuotaPeakNonPagedPoolUsage: SIZE_T,
+ QuotaNonPagedPoolUsage: SIZE_T,
+ PagefileUsage: SIZE_T,
+ PeakPagefileUsage: SIZE_T,
+}}
+STRUCT!{struct PROCESS_MEMORY_COUNTERS_EX {
+ cb: DWORD,
+ PageFaultCount: DWORD,
+ PeakWorkingSetSize: SIZE_T,
+ WorkingSetSize: SIZE_T,
+ QuotaPeakPagedPoolUsage: SIZE_T,
+ QuotaPagedPoolUsage: SIZE_T,
+ QuotaPeakNonPagedPoolUsage: SIZE_T,
+ QuotaNonPagedPoolUsage: SIZE_T,
+ PagefileUsage: SIZE_T,
+ PeakPagefileUsage: SIZE_T,
+ PrivateUsage: SIZE_T,
+}}
+STRUCT!{struct PSAPI_WORKING_SET_BLOCK {
+ Flags: ULONG_PTR,
+}}
+BITFIELD!{PSAPI_WORKING_SET_BLOCK Flags: ULONG_PTR [
+ Protection set_Protection[0..5],
+ ShareCount set_ShareCount[5..8],
+ Shared set_Shared[8..9],
+ Reserved set_Reserved[9..12],
+ VirtualPage set_VirtualPage[12..32],
+]}
+pub type PPSAPI_WORKING_SET_BLOCK = *mut PSAPI_WORKING_SET_BLOCK;
+STRUCT!{struct PSAPI_WORKING_SET_EX_BLOCK {
+ Flags: ULONG_PTR,
+}}
+#[cfg(not(target_arch="x86_64"))]
+BITFIELD!{PSAPI_WORKING_SET_EX_BLOCK Flags: ULONG_PTR [
+ Valid set_Valid[0..1],
+ ShareCount set_ShareCount[1..4],
+ Win32Protection set_Win32Protection[4..15],
+ Shared set_Shared[15..16],
+ Node set_Node[16..22],
+ Locked set_Locked[22..23],
+ LargePage set_LargePage[23..24],
+ Reserved set_Reserved[24..31],
+ Bad set_Bad[31..32],
+]}
+#[cfg(target_arch="x86_64")]
+BITFIELD!{PSAPI_WORKING_SET_EX_BLOCK Flags: ULONG_PTR [
+ Valid set_Valid[0..1],
+ ShareCount set_ShareCount[1..4],
+ Win32Protection set_Win32Protection[4..15],
+ Shared set_Shared[15..16],
+ Node set_Node[16..22],
+ Locked set_Locked[22..23],
+ LargePage set_LargePage[23..24],
+ Reserved set_Reserved[24..31],
+ Bad set_Bad[31..32],
+ ReservedUlong set_ReservedULong[32..64],
+]}
+pub type PPSAPI_WORKING_SET_EX_BLOCK = *mut PSAPI_WORKING_SET_EX_BLOCK;
+STRUCT!{struct PSAPI_WORKING_SET_INFORMATION {
+ NumberOfEntries: ULONG_PTR,
+ WorkingSetInfo: [PSAPI_WORKING_SET_BLOCK; 1],
+}}
+STRUCT!{struct PSAPI_WORKING_SET_EX_INFORMATION {
+ VirtualAddress: PVOID,
+ VirtualAttributes: PSAPI_WORKING_SET_EX_BLOCK,
+}}
+STRUCT!{struct PSAPI_WS_WATCH_INFORMATION {
+ FaultingPc: LPVOID,
+ FaultingVa: LPVOID,
+}}
+STRUCT!{struct PSAPI_WS_WATCH_INFORMATION_EX {
+ BasicInfo: PSAPI_WS_WATCH_INFORMATION,
+ FaultingThreadId: ULONG_PTR,
+ Flags: ULONG_PTR,
+}}
+extern "system" {
+ pub fn EmptyWorkingSet(
+ hProcess: HANDLE,
+ ) -> BOOL;
+ pub fn EnumDeviceDrivers(
+ lpImageBase: *mut LPVOID,
+ cb: DWORD,
+ lpcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn EnumPageFilesA(
+ pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKA,
+ pContext: LPVOID,
+ ) -> BOOL;
+ pub fn EnumPageFilesW(
+ pCallBackRoutine: PENUM_PAGE_FILE_CALLBACKW,
+ pContext: LPVOID,
+ ) -> BOOL;
+ pub fn EnumProcessModules(
+ hProcess: HANDLE,
+ lphModule: *mut HMODULE,
+ cb: DWORD,
+ lpcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn EnumProcessModulesEx(
+ hProcess: HANDLE,
+ lphModule: *mut HMODULE,
+ cb: DWORD,
+ lpcbNeeded: LPDWORD,
+ dwFilterFlag: DWORD,
+ ) -> BOOL;
+ pub fn GetDeviceDriverBaseNameA(
+ ImageBase: LPVOID,
+ lpFilename: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetDeviceDriverBaseNameW(
+ ImageBase: LPVOID,
+ lpFilename: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetDeviceDriverFileNameA(
+ ImageBase: LPVOID,
+ lpFilename: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetDeviceDriverFileNameW(
+ ImageBase: LPVOID,
+ lpFilename: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetMappedFileNameA(
+ hProcess: HANDLE,
+ lpv: LPVOID,
+ lpFilename: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetMappedFileNameW(
+ hProcess: HANDLE,
+ lpv: LPVOID,
+ lpFilename: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetModuleBaseNameA(
+ hProcess: HANDLE,
+ hModule: HMODULE,
+ lpBaseName: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetModuleBaseNameW(
+ hProcess: HANDLE,
+ hModule: HMODULE,
+ lpBaseName: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetModuleFileNameExA(
+ hProcess: HANDLE,
+ hModule: HMODULE,
+ lpFilename: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetModuleFileNameExW(
+ hProcess: HANDLE,
+ hModule: HMODULE,
+ lpFilename: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetModuleInformation(
+ hProcess: HANDLE,
+ hModule: HMODULE,
+ lpmodinfo: LPMODULEINFO,
+ cb: DWORD,
+ ) -> BOOL;
+ pub fn GetPerformanceInfo(
+ pPerformanceInformation: PPERFORMANCE_INFORMATION,
+ cb: DWORD,
+ ) -> BOOL;
+ pub fn GetProcessImageFileNameA(
+ hProcess: HANDLE,
+ lpImageFileName: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetProcessImageFileNameW(
+ hProcess: HANDLE,
+ lpImageFileName: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetProcessMemoryInfo(
+ hProcess: HANDLE,
+ ppsmemCounters: PPROCESS_MEMORY_COUNTERS,
+ cb: DWORD,
+ ) -> BOOL;
+ pub fn GetWsChanges(
+ hProcess: HANDLE,
+ lpWatchInfo: PPSAPI_WS_WATCH_INFORMATION,
+ cb: DWORD,
+ ) -> BOOL;
+ pub fn GetWsChangesEx(
+ hProcess: HANDLE,
+ lpWatchInfoEx: PPSAPI_WS_WATCH_INFORMATION_EX,
+ cb: PDWORD,
+ ) -> BOOL;
+ pub fn InitializeProcessForWsWatch(
+ hProcess: HANDLE,
+ ) -> BOOL;
+ pub fn QueryWorkingSet(
+ hProcess: HANDLE,
+ pv: PVOID,
+ cb: DWORD,
+ ) -> BOOL;
+ pub fn QueryWorkingSetEx(
+ hProcess: HANDLE,
+ pv: PVOID,
+ cb: DWORD,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/realtimeapiset.rs b/vendor/winapi/src/um/realtimeapiset.rs
new file mode 100644
index 000000000..5f63dbe19
--- /dev/null
+++ b/vendor/winapi/src/um/realtimeapiset.rs
@@ -0,0 +1,30 @@
+// 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::PULONG64;
+use shared::minwindef::{BOOL, PULONG, USHORT};
+use um::winnt::{HANDLE, PULONGLONG};
+extern "system" {
+ pub fn QueryThreadCycleTime(
+ ThreadHandle: HANDLE,
+ CycleTime: PULONG64,
+ ) -> BOOL;
+ pub fn QueryProcessCycleTime(
+ ProcessHandle: HANDLE,
+ CycleTime: PULONG64,
+ ) -> BOOL;
+ pub fn QueryIdleProcessorCycleTime(
+ BufferLength: PULONG,
+ ProcessorIdleCycleTime: PULONG64,
+ ) -> BOOL;
+ pub fn QueryIdleProcessorCycleTimeEx(
+ Group: USHORT,
+ BufferLength: PULONG,
+ ProcessorIdleCycleTime: PULONG64,
+ ) -> BOOL;
+ pub fn QueryUnbiasedInterruptTime(
+ UnbiasedTime: PULONGLONG,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/reason.rs b/vendor/winapi/src/um/reason.rs
new file mode 100644
index 000000000..609c295a5
--- /dev/null
+++ b/vendor/winapi/src/um/reason.rs
@@ -0,0 +1,60 @@
+// 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::minwindef::DWORD;
+pub const SHTDN_REASON_FLAG_COMMENT_REQUIRED: DWORD = 0x01000000;
+pub const SHTDN_REASON_FLAG_DIRTY_PROBLEM_ID_REQUIRED: DWORD = 0x02000000;
+pub const SHTDN_REASON_FLAG_CLEAN_UI: DWORD = 0x04000000;
+pub const SHTDN_REASON_FLAG_DIRTY_UI: DWORD = 0x08000000;
+pub const SHTDN_REASON_FLAG_USER_DEFINED: DWORD = 0x40000000;
+pub const SHTDN_REASON_FLAG_PLANNED: DWORD = 0x80000000;
+pub const SHTDN_REASON_MAJOR_OTHER: DWORD = 0x00000000;
+pub const SHTDN_REASON_MAJOR_NONE: DWORD = 0x00000000;
+pub const SHTDN_REASON_MAJOR_HARDWARE: DWORD = 0x00010000;
+pub const SHTDN_REASON_MAJOR_OPERATINGSYSTEM: DWORD = 0x00020000;
+pub const SHTDN_REASON_MAJOR_SOFTWARE: DWORD = 0x00030000;
+pub const SHTDN_REASON_MAJOR_APPLICATION: DWORD = 0x00040000;
+pub const SHTDN_REASON_MAJOR_SYSTEM: DWORD = 0x00050000;
+pub const SHTDN_REASON_MAJOR_POWER: DWORD = 0x00060000;
+pub const SHTDN_REASON_MAJOR_LEGACY_API: DWORD = 0x00070000;
+pub const SHTDN_REASON_MINOR_OTHER: DWORD = 0x00000000;
+pub const SHTDN_REASON_MINOR_NONE: DWORD = 0x000000ff;
+pub const SHTDN_REASON_MINOR_MAINTENANCE: DWORD = 0x00000001;
+pub const SHTDN_REASON_MINOR_INSTALLATION: DWORD = 0x00000002;
+pub const SHTDN_REASON_MINOR_UPGRADE: DWORD = 0x00000003;
+pub const SHTDN_REASON_MINOR_RECONFIG: DWORD = 0x00000004;
+pub const SHTDN_REASON_MINOR_HUNG: DWORD = 0x00000005;
+pub const SHTDN_REASON_MINOR_UNSTABLE: DWORD = 0x00000006;
+pub const SHTDN_REASON_MINOR_DISK: DWORD = 0x00000007;
+pub const SHTDN_REASON_MINOR_PROCESSOR: DWORD = 0x00000008;
+pub const SHTDN_REASON_MINOR_NETWORKCARD: DWORD = 0x00000009;
+pub const SHTDN_REASON_MINOR_POWER_SUPPLY: DWORD = 0x0000000a;
+pub const SHTDN_REASON_MINOR_CORDUNPLUGGED: DWORD = 0x0000000b;
+pub const SHTDN_REASON_MINOR_ENVIRONMENT: DWORD = 0x0000000c;
+pub const SHTDN_REASON_MINOR_HARDWARE_DRIVER: DWORD = 0x0000000d;
+pub const SHTDN_REASON_MINOR_OTHERDRIVER: DWORD = 0x0000000e;
+pub const SHTDN_REASON_MINOR_BLUESCREEN: DWORD = 0x0000000F;
+pub const SHTDN_REASON_MINOR_SERVICEPACK: DWORD = 0x00000010;
+pub const SHTDN_REASON_MINOR_HOTFIX: DWORD = 0x00000011;
+pub const SHTDN_REASON_MINOR_SECURITYFIX: DWORD = 0x00000012;
+pub const SHTDN_REASON_MINOR_SECURITY: DWORD = 0x00000013;
+pub const SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY: DWORD = 0x00000014;
+pub const SHTDN_REASON_MINOR_WMI: DWORD = 0x00000015;
+pub const SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL: DWORD = 0x00000016;
+pub const SHTDN_REASON_MINOR_HOTFIX_UNINSTALL: DWORD = 0x00000017;
+pub const SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL: DWORD = 0x00000018;
+pub const SHTDN_REASON_MINOR_MMC: DWORD = 0x00000019;
+pub const SHTDN_REASON_MINOR_SYSTEMRESTORE: DWORD = 0x0000001a;
+pub const SHTDN_REASON_MINOR_TERMSRV: DWORD = 0x00000020;
+pub const SHTDN_REASON_MINOR_DC_PROMOTION: DWORD = 0x00000021;
+pub const SHTDN_REASON_MINOR_DC_DEMOTION: DWORD = 0x00000022;
+pub const SHTDN_REASON_UNKNOWN: DWORD = SHTDN_REASON_MINOR_NONE;
+pub const SHTDN_REASON_LEGACY_API: DWORD = SHTDN_REASON_MAJOR_LEGACY_API
+ | SHTDN_REASON_FLAG_PLANNED;
+pub const SHTDN_REASON_VALID_BIT_MASK: DWORD = 0xc0ffffff;
+pub const PCLEANUI: DWORD = SHTDN_REASON_FLAG_PLANNED | SHTDN_REASON_FLAG_CLEAN_UI;
+pub const UCLEANUI: DWORD = SHTDN_REASON_FLAG_CLEAN_UI;
+pub const PDIRTYUI: DWORD = SHTDN_REASON_FLAG_PLANNED | SHTDN_REASON_FLAG_DIRTY_UI;
+pub const UDIRTYUI: DWORD = SHTDN_REASON_FLAG_DIRTY_UI;
diff --git a/vendor/winapi/src/um/restartmanager.rs b/vendor/winapi/src/um/restartmanager.rs
new file mode 100644
index 000000000..3f4af64f5
--- /dev/null
+++ b/vendor/winapi/src/um/restartmanager.rs
@@ -0,0 +1,150 @@
+// 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.
+//! RestartManager include file
+use shared::minwindef::{BOOL, DWORD, FILETIME, LPDWORD, PBYTE, UINT, ULONG};
+use um::winnt::{LPCWSTR, LPWSTR, WCHAR};
+pub const RM_SESSION_KEY_LEN: usize = 16; // mem::size_of::<GUID>()
+pub const CCH_RM_SESSION_KEY: usize = RM_SESSION_KEY_LEN * 2;
+pub const CCH_RM_MAX_APP_NAME: usize = 255;
+pub const CCH_RM_MAX_SVC_NAME: usize = 63;
+pub const RM_INVALID_TS_SESSION: DWORD = -1i32 as u32;
+pub const RM_INVALID_PROCESS: DWORD = -1i32 as u32;
+ENUM!{enum RM_APP_TYPE {
+ RmUnknownApp = 0,
+ RmMainWindow = 1,
+ RmOtherWindow = 2,
+ RmService = 3,
+ RmExplorer = 4,
+ RmConsole = 5,
+ RmCritical = 1000,
+}}
+ENUM!{enum RM_SHUTDOWN_TYPE {
+ RmForceShutdown = 0x1,
+ RmShutdownOnlyRegistered = 0x10,
+}}
+ENUM!{enum RM_APP_STATUS {
+ RmStatusUnknown = 0x0,
+ RmStatusRunning = 0x1,
+ RmStatusStopped = 0x2,
+ RmStatusStoppedOther = 0x4,
+ RmStatusRestarted = 0x8,
+ RmStatusErrorOnStop = 0x10,
+ RmStatusErrorOnRestart = 0x20,
+ RmStatusShutdownMasked = 0x40,
+ RmStatusRestartMasked = 0x80,
+}}
+ENUM!{enum RM_REBOOT_REASON {
+ RmRebootReasonNone = 0x0,
+ RmRebootReasonPermissionDenied = 0x1,
+ RmRebootReasonSessionMismatch = 0x2,
+ RmRebootReasonCriticalProcess = 0x4,
+ RmRebootReasonCriticalService = 0x8,
+ RmRebootReasonDetectedSelf = 0x10,
+}}
+STRUCT!{struct RM_UNIQUE_PROCESS {
+ dwProcessId: DWORD,
+ ProcessStartTime: FILETIME,
+}}
+pub type PRM_UNIQUE_PROCESS = *mut RM_UNIQUE_PROCESS;
+STRUCT!{struct RM_PROCESS_INFO {
+ Process: RM_UNIQUE_PROCESS,
+ strAppName: [WCHAR; CCH_RM_MAX_APP_NAME + 1],
+ strServiceShortName: [WCHAR; CCH_RM_MAX_SVC_NAME + 1],
+ ApplicationType: RM_APP_TYPE,
+ AppStatus: ULONG,
+ TSSessionId: DWORD,
+ bRestartable: BOOL,
+}}
+pub type PRM_PROCESS_INFO = *mut RM_PROCESS_INFO;
+ENUM!{enum RM_FILTER_TRIGGER {
+ RmFilterTriggerInvalid = 0,
+ RmFilterTriggerFile,
+ RmFilterTriggerProcess,
+ RmFilterTriggerService,
+}}
+ENUM!{enum RM_FILTER_ACTION {
+ RmInvalidFilterAction = 0,
+ RmNoRestart = 1,
+ RmNoShutdown = 2,
+}}
+UNION!{union RM_FILTER_INFO_u {
+ [u32; 3] [u64; 2],
+ strFilename strFilename_mut: LPWSTR,
+ Process Process_mut: RM_UNIQUE_PROCESS,
+ strServiceShortName strServiceShortName_mut: LPWSTR,
+}}
+STRUCT!{struct RM_FILTER_INFO {
+ FilterAction: RM_FILTER_ACTION,
+ FilterTrigger: RM_FILTER_TRIGGER,
+ cbNextOffset: DWORD,
+ u: RM_FILTER_INFO_u,
+}}
+pub type PRM_FILTER_INFO = *mut RM_FILTER_INFO;
+FN!{cdecl RM_WRITE_STATUS_CALLBACK(
+ nPercentComplete: u32,
+) -> ()}
+extern "system" {
+ pub fn RmStartSession(
+ pSessionHandle: *mut DWORD,
+ dwSessionFlags: DWORD,
+ strSessionKey: *mut WCHAR,
+ ) -> DWORD;
+ pub fn RmJoinSession(
+ pSessionHandle: *mut DWORD,
+ strSessionKey: *const WCHAR,
+ ) -> DWORD;
+ pub fn RmEndSession(
+ dwSessionHandle: DWORD,
+ ) -> DWORD;
+ pub fn RmRegisterResources(
+ dwSessionHandle: DWORD,
+ nFiles: UINT,
+ rgsFileNames: *mut LPCWSTR,
+ nApplications: UINT,
+ rgApplications: *mut RM_UNIQUE_PROCESS,
+ nServices: UINT,
+ rgsServiceNames: *mut LPCWSTR,
+ ) -> DWORD;
+ pub fn RmGetList(
+ dwSessionHandle: DWORD,
+ pnProcInfoNeeded: *mut UINT,
+ pnProcInfo: *mut UINT,
+ rgAffectedApps: *mut RM_PROCESS_INFO,
+ lpdwRebootReasons: LPDWORD,
+ ) -> DWORD;
+ pub fn RmShutdown(
+ dwSessionHandle: DWORD,
+ lActionFlags: ULONG,
+ fnStatus: RM_WRITE_STATUS_CALLBACK,
+ ) -> DWORD;
+ pub fn RmRestart(
+ dwSessionHandle: DWORD,
+ dwRestartFlags: DWORD,
+ fnStatus: RM_WRITE_STATUS_CALLBACK,
+ ) -> DWORD;
+ pub fn RmCancelCurrentTask(
+ dwSessionHandle: DWORD,
+ ) -> DWORD;
+ pub fn RmAddFilter(
+ dwSessionHandle: DWORD,
+ strModuleName: LPCWSTR,
+ pProcess: *mut RM_UNIQUE_PROCESS,
+ strServiceShortName: LPCWSTR,
+ FilterAction: RM_FILTER_ACTION,
+ ) -> DWORD;
+ pub fn RmRemoveFilter(
+ dwSessionHandle: DWORD,
+ strModuleName: LPCWSTR,
+ pProcess: *mut RM_UNIQUE_PROCESS,
+ strServiceShortName: LPCWSTR,
+ ) -> DWORD;
+ pub fn RmGetFilterList(
+ dwSessionHandle: DWORD,
+ pbFilterBuf: PBYTE,
+ cbFilterBuf: DWORD,
+ cbFilterBufNeeded: LPDWORD,
+ ) -> DWORD;
+}
diff --git a/vendor/winapi/src/um/restrictederrorinfo.rs b/vendor/winapi/src/um/restrictederrorinfo.rs
new file mode 100644
index 000000000..9c5db989b
--- /dev/null
+++ b/vendor/winapi/src/um/restrictederrorinfo.rs
@@ -0,0 +1,20 @@
+// 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::wtypes::BSTR;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::HRESULT;
+RIDL!{#[uuid(0x82ba7092, 0x4c88, 0x427d, 0xa7, 0xbc, 0x16, 0xdd, 0x93, 0xfe, 0xb6, 0x7e)]
+interface IRestrictedErrorInfo(IRestrictedErrorInfoVtbl): IUnknown(IUnknownVtbl) {
+ fn GetErrorDetails(
+ description: *mut BSTR,
+ error: *mut HRESULT,
+ restrictedDescription: *mut BSTR,
+ capabilitySid: *mut BSTR,
+ ) -> HRESULT,
+ fn GetReference(
+ reference: *mut BSTR,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/rmxfguid.rs b/vendor/winapi/src/um/rmxfguid.rs
new file mode 100644
index 000000000..97c3814c1
--- /dev/null
+++ b/vendor/winapi/src/um/rmxfguid.rs
@@ -0,0 +1,67 @@
+// 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.
+DEFINE_GUID!{TID_D3DRMInfo,
+ 0x2b957100, 0x9e9a, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33}
+DEFINE_GUID!{TID_D3DRMMesh,
+ 0x3d82ab44, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33}
+DEFINE_GUID!{TID_D3DRMVector,
+ 0x3d82ab5e, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33}
+DEFINE_GUID!{TID_D3DRMMeshFace,
+ 0x3d82ab5f, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33}
+DEFINE_GUID!{TID_D3DRMMaterial,
+ 0x3d82ab4d, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33}
+DEFINE_GUID!{TID_D3DRMMaterialArray,
+ 0x35ff44e1, 0x6c7c, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMFrame,
+ 0x3d82ab46, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33}
+DEFINE_GUID!{TID_D3DRMFrameTransformMatrix,
+ 0xf6f23f41, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMMeshMaterialList,
+ 0xf6f23f42, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMMeshTextureCoords,
+ 0xf6f23f40, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMMeshNormals,
+ 0xf6f23f43, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMCoords2d,
+ 0xf6f23f44, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMMatrix4x4,
+ 0xf6f23f45, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMAnimation,
+ 0x3d82ab4f, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33}
+DEFINE_GUID!{TID_D3DRMAnimationSet,
+ 0x3d82ab50, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33}
+DEFINE_GUID!{TID_D3DRMAnimationKey,
+ 0x10dd46a8, 0x775b, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMFloatKeys,
+ 0x10dd46a9, 0x775b, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMMaterialAmbientColor,
+ 0x01411840, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMMaterialDiffuseColor,
+ 0x01411841, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMMaterialSpecularColor,
+ 0x01411842, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMMaterialEmissiveColor,
+ 0xd3e16e80, 0x7835, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMMaterialPower,
+ 0x01411843, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMColorRGBA,
+ 0x35ff44e0, 0x6c7c, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMColorRGB,
+ 0xd3e16e81, 0x7835, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMGuid,
+ 0xa42790e0, 0x7810, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMTextureFilename,
+ 0xa42790e1, 0x7810, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMTextureReference,
+ 0xa42790e2, 0x7810, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMIndexedColor,
+ 0x1630b820, 0x7842, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMMeshVertexColors,
+ 0x1630b821, 0x7842, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMMaterialWrap,
+ 0x4885ae60, 0x78e8, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3}
+DEFINE_GUID!{TID_D3DRMBoolean,
+ 0x537da6a0, 0xca37, 0x11d0, 0x94, 0x1c, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b}
diff --git a/vendor/winapi/src/um/rtinfo.rs b/vendor/winapi/src/um/rtinfo.rs
new file mode 100644
index 000000000..7dd6aeb4b
--- /dev/null
+++ b/vendor/winapi/src/um/rtinfo.rs
@@ -0,0 +1,7 @@
+// 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::DWORD_PTR;
+pub const ALIGN_SIZE: DWORD_PTR = 0x00000008;
diff --git a/vendor/winapi/src/um/sapi.rs b/vendor/winapi/src/um/sapi.rs
new file mode 100644
index 000000000..2a2cf375a
--- /dev/null
+++ b/vendor/winapi/src/um/sapi.rs
@@ -0,0 +1,1388 @@
+// 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.
+//! SAPI 5.4 definitions
+use shared::guiddef::GUID;
+use shared::minwindef::{BYTE, ULONG, WORD};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPWSTR, ULONGLONG};
+pub use um::sapi53::{
+ SPDATAKEYLOCATION,
+ SPDKL_DefaultLocation,
+ SPDKL_CurrentUser,
+ SPDKL_LocalMachine,
+ SPDKL_CurrentConfig,
+ SPDUI_EngineProperties,
+ SPDUI_AddRemoveWord,
+ SPDUI_UserTraining,
+ SPDUI_MicTraining,
+ SPDUI_RecoProfileProperties,
+ SPDUI_AudioProperties,
+ SPDUI_AudioVolume,
+ SPDUI_UserEnrollment,
+ SPDUI_ShareData,
+ SPDUI_Tutorial,
+ SPSTREAMFORMAT,
+ SPSF_Default,
+ SPSF_NoAssignedFormat,
+ SPSF_Text,
+ SPSF_NonStandardFormat,
+ SPSF_ExtendedAudioFormat,
+ SPSF_8kHz8BitMono,
+ SPSF_8kHz8BitStereo,
+ SPSF_8kHz16BitMono,
+ SPSF_8kHz16BitStereo,
+ SPSF_11kHz8BitMono,
+ SPSF_11kHz8BitStereo,
+ SPSF_11kHz16BitMono,
+ SPSF_11kHz16BitStereo,
+ SPSF_12kHz8BitMono,
+ SPSF_12kHz8BitStereo,
+ SPSF_12kHz16BitMono,
+ SPSF_12kHz16BitStereo,
+ SPSF_16kHz8BitMono,
+ SPSF_16kHz8BitStereo,
+ SPSF_16kHz16BitMono,
+ SPSF_16kHz16BitStereo,
+ SPSF_22kHz8BitMono,
+ SPSF_22kHz8BitStereo,
+ SPSF_22kHz16BitMono,
+ SPSF_22kHz16BitStereo,
+ SPSF_24kHz8BitMono,
+ SPSF_24kHz8BitStereo,
+ SPSF_24kHz16BitMono,
+ SPSF_24kHz16BitStereo,
+ SPSF_32kHz8BitMono,
+ SPSF_32kHz8BitStereo,
+ SPSF_32kHz16BitMono,
+ SPSF_32kHz16BitStereo,
+ SPSF_44kHz8BitMono,
+ SPSF_44kHz8BitStereo,
+ SPSF_44kHz16BitMono,
+ SPSF_44kHz16BitStereo,
+ SPSF_48kHz8BitMono,
+ SPSF_48kHz8BitStereo,
+ SPSF_48kHz16BitMono,
+ SPSF_48kHz16BitStereo,
+ SPSF_TrueSpeech_8kHz1BitMono,
+ SPSF_CCITT_ALaw_8kHzMono,
+ SPSF_CCITT_ALaw_8kHzStereo,
+ SPSF_CCITT_ALaw_11kHzMono,
+ SPSF_CCITT_ALaw_11kHzStereo,
+ SPSF_CCITT_ALaw_22kHzMono,
+ SPSF_CCITT_ALaw_22kHzStereo,
+ SPSF_CCITT_ALaw_44kHzMono,
+ SPSF_CCITT_ALaw_44kHzStereo,
+ SPSF_CCITT_uLaw_8kHzMono,
+ SPSF_CCITT_uLaw_8kHzStereo,
+ SPSF_CCITT_uLaw_11kHzMono,
+ SPSF_CCITT_uLaw_11kHzStereo,
+ SPSF_CCITT_uLaw_22kHzMono,
+ SPSF_CCITT_uLaw_22kHzStereo,
+ SPSF_CCITT_uLaw_44kHzMono,
+ SPSF_CCITT_uLaw_44kHzStereo,
+ SPSF_ADPCM_8kHzMono,
+ SPSF_ADPCM_8kHzStereo,
+ SPSF_ADPCM_11kHzMono,
+ SPSF_ADPCM_11kHzStereo,
+ SPSF_ADPCM_22kHzMono,
+ SPSF_ADPCM_22kHzStereo,
+ SPSF_ADPCM_44kHzMono,
+ SPSF_ADPCM_44kHzStereo,
+ SPSF_GSM610_8kHzMono,
+ SPSF_GSM610_11kHzMono,
+ SPSF_GSM610_22kHzMono,
+ SPSF_GSM610_44kHzMono,
+ SPSF_NUM_FORMATS,
+ SPDFID_Text,
+ SPDFID_WaveFormatEx,
+ SPREG_USER_ROOT,
+ SPREG_LOCAL_MACHINE_ROOT,
+ SPCAT_AUDIOOUT,
+ SPCAT_AUDIOIN,
+ SPCAT_VOICES,
+ SPCAT_RECOGNIZERS,
+ SPCAT_APPLEXICONS,
+ SPCAT_PHONECONVERTERS,
+ SPCAT_TEXTNORMALIZERS,
+ SPCAT_RECOPROFILES,
+ SPMMSYS_AUDIO_IN_TOKEN_ID,
+ SPMMSYS_AUDIO_OUT_TOKEN_ID,
+ SPCURRENT_USER_LEXICON_TOKEN_ID,
+ SPTOKENVALUE_CLSID,
+ SPTOKENKEY_FILES,
+ SPTOKENKEY_UI,
+ SPTOKENKEY_ATTRIBUTES,
+ SPTOKENKEY_RETAINEDAUDIO,
+ SPTOKENKEY_AUDIO_LATENCY_WARNING,
+ SPTOKENKEY_AUDIO_LATENCY_TRUNCATE,
+ SPTOKENKEY_AUDIO_LATENCY_UPDATE_INTERVAL,
+ SPVOICECATEGORY_TTSRATE,
+ SPPROP_RESOURCE_USAGE,
+ SPPROP_HIGH_CONFIDENCE_THRESHOLD,
+ SPPROP_NORMAL_CONFIDENCE_THRESHOLD,
+ SPPROP_LOW_CONFIDENCE_THRESHOLD,
+ SPPROP_RESPONSE_SPEED,
+ SPPROP_COMPLEX_RESPONSE_SPEED,
+ SPPROP_ADAPTATION_ON,
+ SPPROP_PERSISTED_BACKGROUND_ADAPTATION,
+ SPPROP_PERSISTED_LANGUAGE_MODEL_ADAPTATION,
+ SPPROP_UX_IS_LISTENING,
+ SPTOPIC_SPELLING,
+ SPWILDCARD,
+ SPDICTATION,
+ SPREG_SAFE_USER_TOKENS,
+ SPINFDICTATION,
+ SP_LOW_CONFIDENCE,
+ SP_NORMAL_CONFIDENCE,
+ SP_HIGH_CONFIDENCE,
+ DEFAULT_WEIGHT,
+ SP_MAX_WORD_LENGTH,
+ SP_MAX_PRON_LENGTH,
+ SP_EMULATE_RESULT,
+ ISpNotifyCallback,
+ SPNOTIFYCALLBACK,
+ ISpNotifySource, ISpNotifySourceVtbl,
+ ISpNotifySink, ISpNotifySinkVtbl,
+ ISpNotifyTranslator, ISpNotifyTranslatorVtbl,
+ ISpDataKey, ISpDataKeyVtbl,
+ ISpRegDataKey, ISpRegDataKeyVtbl,
+ ISpObjectTokenCategory, ISpObjectTokenCategoryVtbl,
+ ISpObjectToken, ISpObjectTokenVtbl,
+ ISpObjectTokenInit, ISpObjectTokenInitVtbl,
+ IEnumSpObjectTokens, IEnumSpObjectTokensVtbl,
+ ISpObjectWithToken, ISpObjectWithTokenVtbl,
+ ISpResourceManager, ISpResourceManagerVtbl,
+ SPEVENTLPARAMTYPE,
+ SPET_LPARAM_IS_UNDEFINED,
+ SPET_LPARAM_IS_TOKEN,
+ SPET_LPARAM_IS_OBJECT,
+ SPET_LPARAM_IS_POINTER,
+ SPET_LPARAM_IS_STRING,
+ SPEVENTENUM,
+ SPEI_UNDEFINED,
+ SPEI_START_INPUT_STREAM,
+ SPEI_END_INPUT_STREAM,
+ SPEI_VOICE_CHANGE,
+ SPEI_TTS_BOOKMARK,
+ SPEI_WORD_BOUNDARY,
+ SPEI_PHONEME,
+ SPEI_SENTENCE_BOUNDARY,
+ SPEI_VISEME,
+ SPEI_TTS_AUDIO_LEVEL,
+ SPEI_TTS_PRIVATE,
+ SPEI_MIN_TTS,
+ SPEI_MAX_TTS,
+ SPEI_END_SR_STREAM,
+ SPEI_SOUND_START,
+ SPEI_SOUND_END,
+ SPEI_PHRASE_START,
+ SPEI_RECOGNITION,
+ SPEI_HYPOTHESIS,
+ SPEI_SR_BOOKMARK,
+ SPEI_PROPERTY_NUM_CHANGE,
+ SPEI_PROPERTY_STRING_CHANGE,
+ SPEI_FALSE_RECOGNITION,
+ SPEI_INTERFERENCE,
+ SPEI_REQUEST_UI,
+ SPEI_RECO_STATE_CHANGE,
+ SPEI_ADAPTATION,
+ SPEI_START_SR_STREAM,
+ SPEI_RECO_OTHER_CONTEXT,
+ SPEI_SR_AUDIO_LEVEL,
+ SPEI_SR_RETAINEDAUDIO,
+ SPEI_SR_PRIVATE,
+};
+pub const ACTIVE_CATEGORY_CHANGED: SPEVENTENUM = 53;
+pub use um::sapi53::{
+ SPEI_RESERVED5,
+ SPEI_RESERVED6,
+ SPEI_MIN_SR,
+ SPEI_MAX_SR,
+ SPEI_RESERVED1,
+ SPEI_RESERVED2,
+ SPEI_RESERVED3,
+ SPFEI_FLAGCHECK,
+ SPFEI_ALL_TTS_EVENTS,
+ SPFEI_ALL_SR_EVENTS,
+ SPFEI_ALL_EVENTS,
+ SPFEI,
+ SPEVENT,
+ SPSERIALIZEDEVENT,
+ SPSERIALIZEDEVENT64,
+ SPEVENTEX,
+ SPINTERFERENCE,
+ SPINTERFERENCE_NONE,
+ SPINTERFERENCE_NOISE,
+ SPINTERFERENCE_NOSIGNAL,
+ SPINTERFERENCE_TOOLOUD,
+ SPINTERFERENCE_TOOQUIET,
+ SPINTERFERENCE_TOOFAST,
+ SPINTERFERENCE_TOOSLOW,
+ SPINTERFERENCE_LATENCY_WARNING,
+ SPINTERFERENCE_LATENCY_TRUNCATE_BEGIN,
+ SPINTERFERENCE_LATENCY_TRUNCATE_END,
+ SPENDSRSTREAMFLAGS,
+ SPESF_NONE,
+ SPESF_STREAM_RELEASED,
+ SPESF_EMULATED,
+ SPVFEATURE,
+ SPVFEATURE_STRESSED,
+ SPVFEATURE_EMPHASIS,
+ SPVISEMES,
+ SP_VISEME_0,
+ SP_VISEME_1,
+ SP_VISEME_2,
+ SP_VISEME_3,
+ SP_VISEME_4,
+ SP_VISEME_5,
+ SP_VISEME_6,
+ SP_VISEME_7,
+ SP_VISEME_8,
+ SP_VISEME_9,
+ SP_VISEME_10,
+ SP_VISEME_11,
+ SP_VISEME_12,
+ SP_VISEME_13,
+ SP_VISEME_14,
+ SP_VISEME_15,
+ SP_VISEME_16,
+ SP_VISEME_17,
+ SP_VISEME_18,
+ SP_VISEME_19,
+ SP_VISEME_20,
+ SP_VISEME_21,
+ SPEVENTSOURCEINFO,
+ ISpEventSource, ISpEventSourceVtbl,
+ ISpEventSource2, ISpEventSource2Vtbl,
+ ISpEventSink, ISpEventSinkVtbl,
+ ISpStreamFormat, ISpStreamFormatVtbl,
+ SPFILEMODE,
+ SPFM_OPEN_READONLY,
+ SPFM_OPEN_READWRITE,
+ SPFM_CREATE,
+ SPFM_CREATE_ALWAYS,
+ SPFM_NUM_MODES,
+ ISpStream, ISpStreamVtbl,
+ ISpStreamFormatConverter, ISpStreamFormatConverterVtbl,
+ SPAUDIOSTATE,
+ SPAS_CLOSED,
+ SPAS_STOP,
+ SPAS_PAUSE,
+ SPAS_RUN,
+ SPAUDIOSTATUS,
+ SPAUDIOBUFFERINFO,
+ ISpAudio, ISpAudioVtbl,
+ ISpMMSysAudio, ISpMMSysAudioVtbl,
+ ISpTranscript, ISpTranscriptVtbl,
+ SPDISPLAYATTRIBUTES,
+ SPAF_ONE_TRAILING_SPACE,
+ SPAF_TWO_TRAILING_SPACES,
+ SPAF_CONSUME_LEADING_SPACES,
+ SPAF_BUFFER_POSITION,
+ SPAF_ALL,
+ SPAF_USER_SPECIFIED,
+ SPPHONEID,
+ PSPPHONEID,
+ PCSPPHONEID,
+ SPPHRASEELEMENT,
+ SPPHRASERULE,
+ SPPHRASEPROPERTYUNIONTYPE,
+ SPPPUT_UNUSED,
+ SPPPUT_ARRAY_INDEX,
+ SPPHRASEPROPERTY,
+ SPPHRASEREPLACEMENT,
+ SPSEMANTICERRORINFO,
+ SPSEMANTICFORMAT,
+ SPPHRASE_50,
+// SPPHRASESIZE_500,
+};
+pub use um::sapi53::SPPHRASE as SPPHRASE_53;
+STRUCT!{struct SPPHRASE {
+ cbSize: ULONG,
+ LangID: WORD,
+ wHomophoneGroupId: WORD,
+ ullGrammarID: ULONGLONG,
+ ftStartTime: ULONGLONG,
+ ullAudioStreamPosition: ULONGLONG,
+ ulAudioSizeBytes: ULONG,
+ ulRetainedSizeBytes: ULONG,
+ ulAudioSizeTime: ULONG,
+ Rule: SPPHRASERULE,
+ pProperties: *const SPPHRASEPROPERTY,
+ pElements: *const SPPHRASEELEMENT,
+ cReplacements: ULONG,
+ pReplacements: *const SPPHRASEREPLACEMENT,
+ SREngineID: GUID,
+ ulSREnginePrivateDataSize: ULONG,
+ pSREnginePrivateData: *const BYTE,
+ pSML: LPWSTR,
+ pSemanticErrorInfo: *mut SPSEMANTICERRORINFO,
+ SemanticTagFormat: SPSEMANTICFORMAT,
+}}
+pub use um::sapi53::{
+ SPSERIALIZEDPHRASE,
+ SPRULE,
+ SPVALUETYPE,
+ SPDF_PROPERTY,
+ SPDF_REPLACEMENT,
+ SPDF_RULE,
+ SPDF_DISPLAYTEXT,
+ SPDF_LEXICALFORM ,
+ SPDF_PRONUNCIATION,
+ SPDF_AUDIO,
+ SPDF_ALTERNATES,
+ SPDF_ALL,
+ SPBINARYGRAMMAR,
+ SPPHRASERNG,
+ SPPR_ALL_ELEMENTS,
+ SP_GETWHOLEPHRASE,
+ SPRR_ALL_ELEMENTS,
+ SPSTATEHANDLE,
+ SPRECOEVENTFLAGS,
+ SPREF_AutoPause,
+ SPREF_Emulated,
+ SPREF_SMLTimeout,
+ SPREF_ExtendableParse,
+ SPREF_ReSent,
+ SPREF_Hypothesis,
+ SPREF_FalseRecognition,
+ SPPARTOFSPEECH,
+ SPPS_NotOverriden,
+ SPPS_Unknown,
+ SPPS_Noun,
+ SPPS_Verb,
+ SPPS_Modifier,
+ SPPS_Function,
+ SPPS_Interjection,
+ SPPS_Noncontent,
+ SPPS_LMA,
+ SPPS_SuppressWord,
+ SPLEXICONTYPE,
+ eLEXTYPE_USER,
+ eLEXTYPE_APP,
+ eLEXTYPE_VENDORLEXICON,
+ eLEXTYPE_LETTERTOSOUND,
+ eLEXTYPE_MORPHOLOGY,
+ eLEXTYPE_RESERVED4,
+ eLEXTYPE_USER_SHORTCUT,
+ eLEXTYPE_RESERVED6,
+ eLEXTYPE_RESERVED7,
+ eLEXTYPE_RESERVED8,
+ eLEXTYPE_RESERVED9,
+ eLEXTYPE_RESERVED10,
+ eLEXTYPE_PRIVATE1,
+ eLEXTYPE_PRIVATE2,
+ eLEXTYPE_PRIVATE3,
+ eLEXTYPE_PRIVATE4,
+ eLEXTYPE_PRIVATE5,
+ eLEXTYPE_PRIVATE6,
+ eLEXTYPE_PRIVATE7,
+ eLEXTYPE_PRIVATE8,
+ eLEXTYPE_PRIVATE9,
+ eLEXTYPE_PRIVATE10,
+ eLEXTYPE_PRIVATE11,
+ eLEXTYPE_PRIVATE12,
+ eLEXTYPE_PRIVATE13,
+ eLEXTYPE_PRIVATE14,
+ eLEXTYPE_PRIVATE15,
+ eLEXTYPE_PRIVATE16,
+ eLEXTYPE_PRIVATE17,
+ eLEXTYPE_PRIVATE18,
+ eLEXTYPE_PRIVATE19,
+ eLEXTYPE_PRIVATE20,
+ SPWORDTYPE,
+ eWORDTYPE_ADDED,
+ eWORDTYPE_DELETED,
+ SPPRONUNCIATIONFLAGS,
+ ePRONFLAG_USED,
+ SPWORDPRONUNCIATION,
+ SPWORDPRONUNCIATIONLIST,
+ SPWORD,
+ SPWORDLIST,
+ ISpLexicon, ISpLexiconVtbl,
+ ISpContainerLexicon, ISpContainerLexiconVtbl,
+ SPSHORTCUTTYPE,
+ SPSHT_NotOverriden,
+ SPSHT_Unknown,
+ SPSHT_EMAIL,
+ SPSHT_OTHER,
+ SPPS_RESERVED1,
+ SPPS_RESERVED2,
+ SPPS_RESERVED3,
+ SPPS_RESERVED4,
+ SPSHORTCUTPAIR,
+ SPSHORTCUTPAIRLIST,
+ ISpShortcut, ISpShortcutVtbl,
+ ISpPhoneConverter, ISpPhoneConverterVtbl,
+ ISpPhoneticAlphabetConverter, ISpPhoneticAlphabetConverterVtbl,
+ ISpPhoneticAlphabetSelection, ISpPhoneticAlphabetSelectionVtbl,
+ SPVPITCH,
+ SPVACTIONS,
+ SPVA_Speak,
+ SPVA_Silence,
+ SPVA_Pronounce,
+ SPVA_Bookmark,
+ SPVA_SpellOut,
+ SPVA_Section,
+ SPVA_ParseUnknownTag,
+ SPVCONTEXT,
+ SPVSTATE,
+ SPRUNSTATE,
+ SPRS_DONE,
+ SPRS_IS_SPEAKING,
+ SPVLIMITS,
+ SPMIN_VOLUME,
+ SPMAX_VOLUME,
+ SPMIN_RATE,
+ SPMAX_RATE,
+ SPVPRIORITY,
+ SPVPRI_NORMAL,
+ SPVPRI_ALERT,
+ SPVPRI_OVER,
+ SPVOICESTATUS,
+ SPEAKFLAGS,
+ SPF_DEFAULT,
+ SPF_ASYNC,
+ SPF_PURGEBEFORESPEAK,
+ SPF_IS_FILENAME,
+ SPF_IS_XML,
+ SPF_IS_NOT_XML,
+ SPF_PERSIST_XML,
+ SPF_NLP_SPEAK_PUNC,
+ SPF_PARSE_SAPI,
+ SPF_PARSE_SSML,
+ SPF_PARSE_AUTODETECT,
+ SPF_NLP_MASK,
+ SPF_PARSE_MASK,
+ SPF_VOICE_MASK,
+ SPF_UNUSED_FLAGS,
+ ISpVoice, ISpVoiceVtbl,
+ ISpPhrase, ISpPhraseVtbl,
+ ISpPhraseAlt, ISpPhraseAltVtbl,
+ SPXMLRESULTOPTIONS,
+ SPXRO_SML,
+ SPXRO_Alternates_SML,
+ ISpPhrase2, ISpPhrase2Vtbl,
+ SPRECORESULTTIMES,
+ SPSERIALIZEDRESULT,
+ ISpRecoResult, ISpRecoResultVtbl,
+ SPCOMMITFLAGS,
+ SPCF_NONE,
+ SPCF_ADD_TO_USER_LEXICON,
+ SPCF_DEFINITE_CORRECTION,
+ ISpRecoResult2, ISpRecoResult2Vtbl,
+ ISpXMLRecoResult, ISpXMLRecoResultVtbl,
+ SPTEXTSELECTIONINFO,
+ SPWORDPRONOUNCEABLE,
+ SPWP_UNKNOWN_WORD_UNPRONOUNCEABLE,
+ SPWP_UNKNOWN_WORD_PRONOUNCEABLE,
+ SPWP_KNOWN_WORD_PRONOUNCEABLE,
+ SPGRAMMARSTATE,
+ SPGS_DISABLED,
+ SPGS_ENABLED,
+ SPGS_EXCLUSIVE,
+ SPCONTEXTSTATE,
+ SPCS_DISABLED,
+ SPCS_ENABLED,
+ SPRULESTATE,
+ SPRS_INACTIVE,
+ SPRS_ACTIVE,
+ SPRS_ACTIVE_WITH_AUTO_PAUSE,
+ SPWT_LEXICAL_NO_SPECIAL_CHARS,
+ SPPROPERTYINFO,
+ SPCFGRULEATTRIBUTES,
+ SPRAF_TopLevel,
+ SPRAF_Active,
+ SPRAF_Export,
+ SPRAF_Import,
+ SPRAF_Interpreter,
+ SPRAF_Dynamic,
+ SPRAF_Root,
+ SPRAF_AutoPause,
+ SPRAF_UserDelimited,
+ ISpGrammarBuilder, ISpGrammarBuilderVtbl,
+ SPLOADOPTIONS,
+ SPLO_STATIC,
+ SPLO_DYNAMIC,
+ ISpRecoGrammar, ISpRecoGrammarVtbl,
+ SPMATCHINGMODE,
+ AllWords,
+ Subsequence,
+ OrderedSubset,
+ SubsequenceContentRequired,
+ OrderedSubsetContentRequired,
+ PHONETICALPHABET,
+ PA_Ipa,
+ PA_Ups,
+ PA_Sapi,
+ ISpGrammarBuilder2, ISpGrammarBuilder2Vtbl,
+ SPRP_NORMAL,
+ ISpRecoGrammar2, ISpRecoGrammar2Vtbl,
+ ISpeechResourceLoader, ISpeechResourceLoaderVtbl,
+ SPRECOCONTEXTSTATUS,
+ SPBOOKMARKOPTIONS,
+ SPBO_NONE,
+ SPBO_PAUSE,
+ SPBO_AHEAD,
+ SPBO_TIME_UNITS,
+ SPAUDIOOPTIONS,
+ SPAO_NONE,
+ SPAO_RETAIN_AUDIO,
+ ISpRecoContext, ISpRecoContextVtbl,
+ SPGRAMMAROPTIONS,
+ SPGO_SAPI,
+ SPGO_SRGS,
+ SPGO_UPS,
+ SPGO_SRGS_MS_SCRIPT,
+ SPGO_SRGS_W3C_SCRIPT,
+ SPGO_SRGS_STG_SCRIPT,
+ SPGO_SRGS_SCRIPT,
+ SPGO_FILE,
+ SPGO_HTTP,
+ SPGO_RES,
+ SPGO_OBJECT,
+ SPGO_DEFAULT,
+ SPGO_ALL,
+ SPADAPTATIONSETTINGS,
+ SPADS_Default,
+ SPADS_CurrentRecognizer,
+ SPADS_RecoProfile,
+ SPADS_Immediate,
+ SPADS_Reset,
+ SPADS_HighVolumeDataSource,
+ SPADAPTATIONRELEVANCE,
+ SPAR_Unknown,
+ SPAR_Low,
+ SPAR_Medium,
+ SPAR_High,
+ ISpRecoContext2, ISpRecoContext2Vtbl,
+ ISpProperties, ISpPropertiesVtbl,
+ SP_MAX_LANGIDS,
+ SPRECOGNIZERSTATUS,
+ SPWAVEFORMATTYPE,
+ SPWF_INPUT,
+ SPWF_SRENGINE,
+ SPSTREAMFORMATTYPE,
+ SPRECOSTATE,
+ SPRST_INACTIVE,
+ SPRST_ACTIVE,
+ SPRST_ACTIVE_ALWAYS,
+ SPRST_INACTIVE_WITH_PURGE,
+ SPRST_NUM_STATES,
+ ISpRecognizer, ISpRecognizerVtbl,
+ ISpSerializeState, ISpSerializeStateVtbl,
+ ISpRecognizer2, ISpRecognizer2Vtbl,
+};
+ENUM!{enum SPCATEGORYTYPE {
+ SPCT_COMMAND,
+ SPCT_DICTATION,
+ SPCT_SLEEP,
+ SPCT_SUB_COMMAND,
+ SPCT_SUB_DICTATION,
+}}
+RIDL!{#[uuid(0xda0cd0f9, 0x14a2, 0x4f09, 0x8c, 0x2a, 0x85, 0xcc, 0x48, 0x97, 0x93, 0x45)]
+interface ISpRecoCategory(ISpRecoCategoryVtbl): IUnknown(IUnknownVtbl) {
+ fn GetType(
+ peCategoryType: *mut SPCATEGORYTYPE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xdf1b943c, 0x5838, 0x4aa2, 0x87, 0x06, 0xd7, 0xcd, 0x5b, 0x33, 0x34, 0x99)]
+interface ISpRecognizer3(ISpRecognizer3Vtbl): IUnknown(IUnknownVtbl) {
+ fn GetCategory(
+ categoryType: SPCATEGORYTYPE,
+ ppCategory: *mut *mut ISpRecoCategory,
+ ) -> HRESULT,
+ fn SetActiveCategory(
+ pCategory: *mut ISpRecoCategory,
+ ) -> HRESULT,
+ fn GetActiveCategory(
+ ppCategory: *mut *mut ISpRecoCategory,
+ ) -> HRESULT,
+}}
+pub use um::sapi53::{
+ SPNORMALIZATIONLIST,
+ ISpEnginePronunciation, ISpEnginePronunciationVtbl,
+ SPDISPLAYTOKEN,
+ SPDISPLAYPHRASE,
+ ISpDisplayAlternates, ISpDisplayAlternatesVtbl,
+ SpeechLanguageId,
+ DISPID_SpeechDataKey,
+ DISPID_SDKSetBinaryValue,
+ DISPID_SDKGetBinaryValue,
+ DISPID_SDKSetStringValue,
+ DISPID_SDKGetStringValue,
+ DISPID_SDKSetLongValue,
+ DISPID_SDKGetlongValue,
+ DISPID_SDKOpenKey,
+ DISPID_SDKCreateKey,
+ DISPID_SDKDeleteKey,
+ DISPID_SDKDeleteValue,
+ DISPID_SDKEnumKeys,
+ DISPID_SDKEnumValues,
+ DISPID_SpeechObjectToken,
+ DISPID_SOTId,
+ DISPID_SOTDataKey,
+ DISPID_SOTCategory,
+ DISPID_SOTGetDescription,
+ DISPID_SOTSetId,
+ DISPID_SOTGetAttribute,
+ DISPID_SOTCreateInstance,
+ DISPID_SOTRemove,
+ DISPID_SOTGetStorageFileName,
+ DISPID_SOTRemoveStorageFileName,
+ DISPID_SOTIsUISupported,
+ DISPID_SOTDisplayUI,
+ DISPID_SOTMatchesAttributes,
+ SpeechDataKeyLocation,
+ SDKLDefaultLocation,
+ SDKLCurrentUser,
+ SDKLLocalMachine,
+ SDKLCurrentConfig,
+ SpeechTokenContext,
+ STCInprocServer,
+ STCInprocHandler ,
+ STCLocalServer,
+ STCRemoteServer,
+ STCAll,
+ SpeechTokenShellFolder,
+ STSF_AppData,
+ STSF_LocalAppData,
+ STSF_CommonAppData,
+ STSF_FlagCreate,
+ DISPID_SpeechObjectTokens,
+ DISPID_SOTsCount,
+ DISPID_SOTsItem,
+ DISPID_SOTs_NewEnum,
+ DISPID_SpeechObjectTokenCategory,
+ DISPID_SOTCId,
+ DISPID_SOTCDefault,
+ DISPID_SOTCSetId,
+ DISPID_SOTCGetDataKey,
+ DISPID_SOTCEnumerateTokens,
+ SpeechAudioFormatType,
+ SAFTDefault,
+ SAFTNoAssignedFormat,
+ SAFTText,
+ SAFTNonStandardFormat,
+ SAFTExtendedAudioFormat,
+ SAFT8kHz8BitMono,
+ SAFT8kHz8BitStereo,
+ SAFT8kHz16BitMono,
+ SAFT8kHz16BitStereo,
+ SAFT11kHz8BitMono,
+ SAFT11kHz8BitStereo,
+ SAFT11kHz16BitMono,
+ SAFT11kHz16BitStereo,
+ SAFT12kHz8BitMono,
+ SAFT12kHz8BitStereo,
+ SAFT12kHz16BitMono,
+ SAFT12kHz16BitStereo,
+ SAFT16kHz8BitMono,
+ SAFT16kHz8BitStereo,
+ SAFT16kHz16BitMono,
+ SAFT16kHz16BitStereo,
+ SAFT22kHz8BitMono,
+ SAFT22kHz8BitStereo,
+ SAFT22kHz16BitMono,
+ SAFT22kHz16BitStereo,
+ SAFT24kHz8BitMono,
+ SAFT24kHz8BitStereo,
+ SAFT24kHz16BitMono,
+ SAFT24kHz16BitStereo,
+ SAFT32kHz8BitMono,
+ SAFT32kHz8BitStereo,
+ SAFT32kHz16BitMono,
+ SAFT32kHz16BitStereo,
+ SAFT44kHz8BitMono,
+ SAFT44kHz8BitStereo,
+ SAFT44kHz16BitMono,
+ SAFT44kHz16BitStereo,
+ SAFT48kHz8BitMono,
+ SAFT48kHz8BitStereo,
+ SAFT48kHz16BitMono,
+ SAFT48kHz16BitStereo,
+ SAFTTrueSpeech_8kHz1BitMono,
+ SAFTCCITT_ALaw_8kHzMono,
+ SAFTCCITT_ALaw_8kHzStereo,
+ SAFTCCITT_ALaw_11kHzMono,
+ SAFTCCITT_ALaw_11kHzStereo,
+ SAFTCCITT_ALaw_22kHzMono,
+ SAFTCCITT_ALaw_22kHzStereo,
+ SAFTCCITT_ALaw_44kHzMono,
+ SAFTCCITT_ALaw_44kHzStereo,
+ SAFTCCITT_uLaw_8kHzMono,
+ SAFTCCITT_uLaw_8kHzStereo,
+ SAFTCCITT_uLaw_11kHzMono,
+ SAFTCCITT_uLaw_11kHzStereo,
+ SAFTCCITT_uLaw_22kHzMono,
+ SAFTCCITT_uLaw_22kHzStereo,
+ SAFTCCITT_uLaw_44kHzMono,
+ SAFTCCITT_uLaw_44kHzStereo,
+ SAFTADPCM_8kHzMono,
+ SAFTADPCM_8kHzStereo,
+ SAFTADPCM_11kHzMono,
+ SAFTADPCM_11kHzStereo,
+ SAFTADPCM_22kHzMono,
+ SAFTADPCM_22kHzStereo,
+ SAFTADPCM_44kHzMono,
+ SAFTADPCM_44kHzStereo,
+ SAFTGSM610_8kHzMono,
+ SAFTGSM610_11kHzMono,
+ SAFTGSM610_22kHzMono,
+ SAFTGSM610_44kHzMono,
+ DISPID_SpeechAudioFormat,
+ DISPID_SAFType,
+ DISPID_SAFGuid,
+ DISPID_SAFGetWaveFormatEx,
+ DISPID_SAFSetWaveFormatEx,
+ DISPID_SpeechBaseStream,
+ DISPID_SBSFormat,
+ DISPID_SBSRead,
+ DISPID_SBSWrite,
+ DISPID_SBSSeek,
+ SpeechStreamSeekPositionType,
+ SSSPTRelativeToStart,
+ SSSPTRelativeToCurrentPosition,
+ SSSPTRelativeToEnd,
+ DISPID_SpeechAudio,
+ DISPID_SAStatus,
+ DISPID_SABufferInfo,
+ DISPID_SADefaultFormat,
+ DISPID_SAVolume,
+ DISPID_SABufferNotifySize,
+ DISPID_SAEventHandle,
+ DISPID_SASetState,
+ SpeechAudioState,
+ SASClosed,
+ SASStop,
+ SASPause,
+ SASRun,
+ DISPID_SpeechMMSysAudio,
+ DISPID_SMSADeviceId,
+ DISPID_SMSALineId,
+ DISPID_SMSAMMHandle,
+ DISPID_SpeechFileStream,
+ DISPID_SFSOpen,
+ DISPID_SFSClose,
+ SpeechStreamFileMode,
+ SSFMOpenForRead,
+ SSFMOpenReadWrite,
+ SSFMCreate,
+ SSFMCreateForWrite,
+ DISPID_SpeechCustomStream,
+ DISPID_SCSBaseStream,
+ DISPID_SpeechMemoryStream,
+ DISPID_SMSSetData,
+ DISPID_SMSGetData,
+ DISPID_SpeechAudioStatus,
+ DISPID_SASFreeBufferSpace,
+ DISPID_SASNonBlockingIO,
+ DISPID_SASState,
+ DISPID_SASCurrentSeekPosition,
+ DISPID_SASCurrentDevicePosition,
+ DISPID_SpeechAudioBufferInfo,
+ DISPID_SABIMinNotification,
+ DISPID_SABIBufferSize,
+ DISPID_SABIEventBias,
+ DISPID_SpeechWaveFormatEx,
+ DISPID_SWFEFormatTag,
+ DISPID_SWFEChannels,
+ DISPID_SWFESamplesPerSec,
+ DISPID_SWFEAvgBytesPerSec,
+ DISPID_SWFEBlockAlign,
+ DISPID_SWFEBitsPerSample,
+ DISPID_SWFEExtraData,
+ DISPID_SpeechVoice,
+ DISPID_SVStatus,
+ DISPID_SVVoice,
+ DISPID_SVAudioOutput,
+ DISPID_SVAudioOutputStream,
+ DISPID_SVRate,
+ DISPID_SVVolume,
+ DISPID_SVAllowAudioOuputFormatChangesOnNextSet,
+ DISPID_SVEventInterests,
+ DISPID_SVPriority,
+ DISPID_SVAlertBoundary,
+ DISPID_SVSyncronousSpeakTimeout,
+ DISPID_SVSpeak,
+ DISPID_SVSpeakStream,
+ DISPID_SVPause,
+ DISPID_SVResume,
+ DISPID_SVSkip,
+ DISPID_SVGetVoices,
+ DISPID_SVGetAudioOutputs,
+ DISPID_SVWaitUntilDone,
+ DISPID_SVSpeakCompleteEvent,
+ DISPID_SVIsUISupported,
+ DISPID_SVDisplayUI,
+ SpeechVoicePriority,
+ SVPNormal,
+ SVPAlert,
+ SVPOver,
+ SpeechVoiceSpeakFlags,
+ SVSFDefault,
+ SVSFlagsAsync,
+ SVSFPurgeBeforeSpeak,
+ SVSFIsFilename,
+ SVSFIsXML,
+ SVSFIsNotXML,
+ SVSFPersistXML,
+ SVSFNLPSpeakPunc,
+ SVSFParseSapi,
+ SVSFParseSsml,
+ SVSFParseAutodetect,
+ SVSFNLPMask,
+ SVSFParseMask,
+ SVSFVoiceMask,
+ SVSFUnusedFlags,
+ SpeechVoiceEvents,
+ SVEStartInputStream,
+ SVEEndInputStream,
+ SVEVoiceChange,
+ SVEBookmark,
+ SVEWordBoundary,
+ SVEPhoneme,
+ SVESentenceBoundary,
+ SVEViseme,
+ SVEAudioLevel,
+ SVEPrivate,
+ SVEAllEvents,
+ DISPID_SpeechVoiceStatus,
+ DISPID_SVSCurrentStreamNumber,
+ DISPID_SVSLastStreamNumberQueued,
+ DISPID_SVSLastResult,
+ DISPID_SVSRunningState,
+ DISPID_SVSInputWordPosition,
+ DISPID_SVSInputWordLength,
+ DISPID_SVSInputSentencePosition,
+ DISPID_SVSInputSentenceLength,
+ DISPID_SVSLastBookmark,
+ DISPID_SVSLastBookmarkId,
+ DISPID_SVSPhonemeId,
+ DISPID_SVSVisemeId,
+ SpeechRunState,
+ SRSEDone,
+ SRSEIsSpeaking,
+ SpeechVisemeType,
+ SVP_0,
+ SVP_1,
+ SVP_2,
+ SVP_3,
+ SVP_4,
+ SVP_5,
+ SVP_6,
+ SVP_7,
+ SVP_8,
+ SVP_9,
+ SVP_10,
+ SVP_11,
+ SVP_12,
+ SVP_13,
+ SVP_14,
+ SVP_15,
+ SVP_16,
+ SVP_17,
+ SVP_18,
+ SVP_19,
+ SVP_20,
+ SVP_21,
+ SpeechVisemeFeature,
+ SVF_None,
+ SVF_Stressed,
+ SVF_Emphasis,
+ DISPID_SpeechVoiceEvent,
+ DISPID_SVEStreamStart,
+ DISPID_SVEStreamEnd,
+ DISPID_SVEVoiceChange,
+ DISPID_SVEBookmark,
+ DISPID_SVEWord,
+ DISPID_SVEPhoneme,
+ DISPID_SVESentenceBoundary,
+ DISPID_SVEViseme,
+ DISPID_SVEAudioLevel,
+ DISPID_SVEEnginePrivate,
+ DISPID_SpeechRecognizer,
+ DISPID_SRRecognizer,
+ DISPID_SRAllowAudioInputFormatChangesOnNextSet,
+ DISPID_SRAudioInput,
+ DISPID_SRAudioInputStream,
+ DISPID_SRIsShared,
+ DISPID_SRState,
+ DISPID_SRStatus,
+ DISPID_SRProfile,
+ DISPID_SREmulateRecognition,
+ DISPID_SRCreateRecoContext,
+ DISPID_SRGetFormat,
+ DISPID_SRSetPropertyNumber,
+ DISPID_SRGetPropertyNumber,
+ DISPID_SRSetPropertyString,
+ DISPID_SRGetPropertyString,
+ DISPID_SRIsUISupported,
+ DISPID_SRDisplayUI,
+ DISPID_SRGetRecognizers,
+ DISPID_SVGetAudioInputs,
+ DISPID_SVGetProfiles,
+ SpeechRecognizerState,
+ SRSInactive,
+ SRSActive,
+ SRSActiveAlways,
+ SRSInactiveWithPurge,
+ SpeechDisplayAttributes,
+ SDA_No_Trailing_Space,
+ SDA_One_Trailing_Space,
+ SDA_Two_Trailing_Spaces,
+ SDA_Consume_Leading_Spaces,
+ SpeechFormatType,
+ SFTInput,
+ SFTSREngine,
+ SpeechEmulationCompareFlags,
+ SECFIgnoreCase,
+ SECFIgnoreKanaType,
+ SECFIgnoreWidth,
+ SECFNoSpecialChars,
+ SECFEmulateResult,
+ SECFDefault,
+ DISPID_SpeechRecognizerStatus,
+ DISPID_SRSAudioStatus,
+ DISPID_SRSCurrentStreamPosition,
+ DISPID_SRSCurrentStreamNumber,
+ DISPID_SRSNumberOfActiveRules,
+ DISPID_SRSClsidEngine,
+ DISPID_SRSSupportedLanguages,
+ DISPID_SpeechRecoContext,
+ DISPID_SRCRecognizer,
+ DISPID_SRCAudioInInterferenceStatus,
+ DISPID_SRCRequestedUIType,
+ DISPID_SRCVoice,
+ DISPID_SRAllowVoiceFormatMatchingOnNextSet,
+ DISPID_SRCVoicePurgeEvent,
+ DISPID_SRCEventInterests,
+ DISPID_SRCCmdMaxAlternates,
+ DISPID_SRCState,
+ DISPID_SRCRetainedAudio,
+ DISPID_SRCRetainedAudioFormat,
+ DISPID_SRCPause,
+ DISPID_SRCResume,
+ DISPID_SRCCreateGrammar,
+ DISPID_SRCCreateResultFromMemory,
+ DISPID_SRCBookmark,
+ DISPID_SRCSetAdaptationData,
+ SpeechRetainedAudioOptions,
+ SRAONone,
+ SRAORetainAudio,
+ SpeechBookmarkOptions,
+ SBONone,
+ SBOPause,
+ SpeechInterference,
+ SINone,
+ SINoise,
+ SINoSignal,
+ SITooLoud,
+ SITooQuiet,
+ SITooFast,
+ SITooSlow,
+ SpeechRecoEvents,
+ SREStreamEnd,
+ SRESoundStart,
+ SRESoundEnd,
+ SREPhraseStart,
+ SRERecognition,
+ SREHypothesis,
+ SREBookmark,
+ SREPropertyNumChange,
+ SREPropertyStringChange,
+ SREFalseRecognition,
+ SREInterference,
+ SRERequestUI,
+ SREStateChange,
+ SREAdaptation,
+ SREStreamStart,
+ SRERecoOtherContext,
+ SREAudioLevel,
+ SREPrivate,
+ SREAllEvents,
+ SpeechRecoContextState,
+ SRCS_Disabled,
+ SRCS_Enabled,
+ DISPIDSPRG,
+ DISPID_SRGId,
+ DISPID_SRGRecoContext,
+ DISPID_SRGState,
+ DISPID_SRGRules,
+ DISPID_SRGReset,
+ DISPID_SRGCommit,
+ DISPID_SRGCmdLoadFromFile,
+ DISPID_SRGCmdLoadFromObject,
+ DISPID_SRGCmdLoadFromResource,
+ DISPID_SRGCmdLoadFromMemory,
+ DISPID_SRGCmdLoadFromProprietaryGrammar,
+ DISPID_SRGCmdSetRuleState,
+ DISPID_SRGCmdSetRuleIdState,
+ DISPID_SRGDictationLoad,
+ DISPID_SRGDictationUnload,
+ DISPID_SRGDictationSetState,
+ DISPID_SRGSetWordSequenceData,
+ DISPID_SRGSetTextSelection,
+ DISPID_SRGIsPronounceable,
+ SpeechLoadOption,
+ SLOStatic,
+ SLODynamic,
+ SpeechWordPronounceable,
+ SWPUnknownWordUnpronounceable,
+ SWPUnknownWordPronounceable,
+ SWPKnownWordPronounceable,
+ SpeechGrammarState,
+ SGSEnabled,
+ SGSDisabled,
+ SGSExclusive,
+ SpeechRuleState,
+ SGDSInactive,
+ SGDSActive,
+ SGDSActiveWithAutoPause,
+ SGDSActiveUserDelimited,
+ SpeechRuleAttributes,
+ SRATopLevel,
+ SRADefaultToActive,
+ SRAExport,
+ SRAImport,
+ SRAInterpreter,
+ SRADynamic,
+ SRARoot,
+ SpeechGrammarWordType,
+ SGDisplay,
+ SGLexical,
+ SGPronounciation,
+ SGLexicalNoSpecialChars,
+ DISPID_SpeechRecoContextEvents,
+ DISPID_SRCEStartStream,
+ DISPID_SRCEEndStream,
+ DISPID_SRCEBookmark,
+ DISPID_SRCESoundStart,
+ DISPID_SRCESoundEnd,
+ DISPID_SRCEPhraseStart,
+ DISPID_SRCERecognition,
+ DISPID_SRCEHypothesis,
+ DISPID_SRCEPropertyNumberChange,
+ DISPID_SRCEPropertyStringChange,
+ DISPID_SRCEFalseRecognition,
+ DISPID_SRCEInterference,
+ DISPID_SRCERequestUI,
+ DISPID_SRCERecognizerStateChange,
+ DISPID_SRCEAdaptation,
+ DISPID_SRCERecognitionForOtherContext,
+ DISPID_SRCEAudioLevel,
+ DISPID_SRCEEnginePrivate,
+ SpeechRecognitionType,
+ SRTStandard,
+ SRTAutopause,
+ SRTEmulated,
+ SRTSMLTimeout,
+ SRTExtendableParse,
+ SRTReSent,
+ DISPID_SpeechGrammarRule,
+ DISPID_SGRAttributes,
+ DISPID_SGRInitialState,
+ DISPID_SGRName,
+ DISPID_SGRId,
+ DISPID_SGRClear,
+ DISPID_SGRAddResource,
+ DISPID_SGRAddState,
+ DISPID_SpeechGrammarRules,
+ DISPID_SGRsCount,
+ DISPID_SGRsDynamic,
+ DISPID_SGRsAdd,
+ DISPID_SGRsCommit,
+ DISPID_SGRsCommitAndSave,
+ DISPID_SGRsFindRule,
+ DISPID_SGRsItem,
+ DISPID_SGRs_NewEnum,
+ DISPID_SpeechGrammarRuleState,
+ DISPID_SGRSRule,
+ DISPID_SGRSTransitions,
+ DISPID_SGRSAddWordTransition,
+ DISPID_SGRSAddRuleTransition,
+ DISPID_SGRSAddSpecialTransition,
+ SpeechSpecialTransitionType,
+ SSTTWildcard,
+ SSTTDictation,
+ SSTTTextBuffer,
+ DISPID_SpeechGrammarRuleStateTransitions,
+ DISPID_SGRSTsCount,
+ DISPID_SGRSTsItem,
+ DISPID_SGRSTs_NewEnum,
+ DISPID_SpeechGrammarRuleStateTransition,
+ DISPID_SGRSTType,
+ DISPID_SGRSTText,
+ DISPID_SGRSTRule,
+ DISPID_SGRSTWeight,
+ DISPID_SGRSTPropertyName,
+ DISPID_SGRSTPropertyId,
+ DISPID_SGRSTPropertyValue,
+ DISPID_SGRSTNextState,
+ SpeechGrammarRuleStateTransitionType,
+ SGRSTTEpsilon,
+ SGRSTTWord,
+ SGRSTTRule,
+ SGRSTTDictation,
+ SGRSTTWildcard,
+ SGRSTTTextBuffer,
+ DISPIDSPTSI,
+ DISPIDSPTSI_ActiveOffset,
+ DISPIDSPTSI_ActiveLength,
+ DISPIDSPTSI_SelectionOffset,
+ DISPIDSPTSI_SelectionLength,
+ DISPID_SpeechRecoResult,
+ DISPID_SRRRecoContext,
+ DISPID_SRRTimes,
+ DISPID_SRRAudioFormat,
+ DISPID_SRRPhraseInfo,
+ DISPID_SRRAlternates,
+ DISPID_SRRAudio,
+ DISPID_SRRSpeakAudio,
+ DISPID_SRRSaveToMemory,
+ DISPID_SRRDiscardResultInfo,
+ SpeechDiscardType,
+ SDTProperty,
+ SDTReplacement,
+ SDTRule,
+ SDTDisplayText,
+ SDTLexicalForm,
+ SDTPronunciation,
+ SDTAudio,
+ SDTAlternates,
+ SDTAll,
+ DISPID_SpeechXMLRecoResult,
+ DISPID_SRRGetXMLResult,
+ DISPID_SRRGetXMLErrorInfo,
+ DISPID_SpeechRecoResult2,
+ DISPID_SRRSetTextFeedback,
+ DISPID_SpeechPhraseBuilder,
+ DISPID_SPPBRestorePhraseFromMemory,
+ DISPID_SpeechRecoResultTimes,
+ DISPID_SRRTStreamTime,
+ DISPID_SRRTLength,
+ DISPID_SRRTTickCount,
+ DISPID_SRRTOffsetFromStart,
+ DISPID_SpeechPhraseAlternate,
+ DISPID_SPARecoResult,
+ DISPID_SPAStartElementInResult,
+ DISPID_SPANumberOfElementsInResult,
+ DISPID_SPAPhraseInfo,
+ DISPID_SPACommit,
+ DISPID_SpeechPhraseAlternates,
+ DISPID_SPAsCount,
+ DISPID_SPAsItem,
+ DISPID_SPAs_NewEnum,
+ DISPID_SpeechPhraseInfo,
+ DISPID_SPILanguageId,
+ DISPID_SPIGrammarId,
+ DISPID_SPIStartTime,
+ DISPID_SPIAudioStreamPosition,
+ DISPID_SPIAudioSizeBytes,
+ DISPID_SPIRetainedSizeBytes,
+ DISPID_SPIAudioSizeTime,
+ DISPID_SPIRule,
+ DISPID_SPIProperties,
+ DISPID_SPIElements,
+ DISPID_SPIReplacements,
+ DISPID_SPIEngineId,
+ DISPID_SPIEnginePrivateData,
+ DISPID_SPISaveToMemory,
+ DISPID_SPIGetText,
+ DISPID_SPIGetDisplayAttributes,
+ DISPID_SpeechPhraseElement,
+ DISPID_SPEAudioTimeOffset,
+ DISPID_SPEAudioSizeTime,
+ DISPID_SPEAudioStreamOffset,
+ DISPID_SPEAudioSizeBytes,
+ DISPID_SPERetainedStreamOffset,
+ DISPID_SPERetainedSizeBytes,
+ DISPID_SPEDisplayText,
+ DISPID_SPELexicalForm,
+ DISPID_SPEPronunciation,
+ DISPID_SPEDisplayAttributes,
+ DISPID_SPERequiredConfidence,
+ DISPID_SPEActualConfidence,
+ DISPID_SPEEngineConfidence,
+ SpeechEngineConfidence,
+ SECLowConfidence,
+ SECNormalConfidence,
+ SECHighConfidence,
+ DISPID_SpeechPhraseElements,
+ DISPID_SPEsCount,
+ DISPID_SPEsItem,
+ DISPID_SPEs_NewEnum,
+ DISPID_SpeechPhraseReplacement,
+ DISPID_SPRDisplayAttributes,
+ DISPID_SPRText,
+ DISPID_SPRFirstElement,
+ DISPID_SPRNumberOfElements,
+ DISPID_SpeechPhraseReplacements,
+ DISPID_SPRsCount,
+ DISPID_SPRsItem,
+ DISPID_SPRs_NewEnum,
+ DISPID_SpeechPhraseProperty,
+ DISPID_SPPName,
+ DISPID_SPPId,
+ DISPID_SPPValue,
+ DISPID_SPPFirstElement,
+ DISPID_SPPNumberOfElements,
+ DISPID_SPPEngineConfidence,
+ DISPID_SPPConfidence,
+ DISPID_SPPParent,
+ DISPID_SPPChildren,
+ DISPID_SpeechPhraseProperties,
+ DISPID_SPPsCount,
+ DISPID_SPPsItem,
+ DISPID_SPPs_NewEnum,
+ DISPID_SpeechPhraseRule,
+ DISPID_SPRuleName,
+ DISPID_SPRuleId,
+ DISPID_SPRuleFirstElement,
+ DISPID_SPRuleNumberOfElements,
+ DISPID_SPRuleParent,
+ DISPID_SPRuleChildren,
+ DISPID_SPRuleConfidence,
+ DISPID_SPRuleEngineConfidence,
+ DISPID_SpeechPhraseRules,
+ DISPID_SPRulesCount,
+ DISPID_SPRulesItem,
+ DISPID_SPRules_NewEnum,
+ DISPID_SpeechLexicon,
+ DISPID_SLGenerationId,
+ DISPID_SLGetWords,
+ DISPID_SLAddPronunciation,
+ DISPID_SLAddPronunciationByPhoneIds,
+ DISPID_SLRemovePronunciation,
+ DISPID_SLRemovePronunciationByPhoneIds,
+ DISPID_SLGetPronunciations,
+ DISPID_SLGetGenerationChange,
+ SpeechLexiconType,
+ SLTUser,
+ SLTApp,
+ SpeechPartOfSpeech,
+ SPSNotOverriden,
+ SPSUnknown,
+ SPSNoun,
+ SPSVerb,
+ SPSModifier,
+ SPSFunction,
+ SPSInterjection,
+ SPSLMA,
+ SPSSuppressWord,
+ DISPID_SpeechLexiconWords,
+ DISPID_SLWsCount,
+ DISPID_SLWsItem,
+ DISPID_SLWs_NewEnum,
+ SpeechWordType,
+ SWTAdded,
+ SWTDeleted,
+ DISPID_SpeechLexiconWord,
+ DISPID_SLWLangId,
+ DISPID_SLWType,
+ DISPID_SLWWord,
+ DISPID_SLWPronunciations,
+ DISPID_SpeechLexiconProns,
+ DISPID_SLPsCount,
+ DISPID_SLPsItem,
+ DISPID_SLPs_NewEnum,
+ DISPID_SpeechLexiconPronunciation,
+ DISPID_SLPType,
+ DISPID_SLPLangId,
+ DISPID_SLPPartOfSpeech,
+ DISPID_SLPPhoneIds,
+ DISPID_SLPSymbolic,
+ DISPID_SpeechPhoneConverter,
+ DISPID_SPCLangId,
+ DISPID_SPCPhoneToId,
+ DISPID_SPCIdToPhone,
+ LIBID_SpeechLib,
+ ISpeechDataKey, ISpeechDataKeyVtbl,
+ ISpeechObjectToken, ISpeechObjectTokenVtbl,
+ ISpeechObjectTokens, ISpeechObjectTokensVtbl,
+ ISpeechObjectTokenCategory, ISpeechObjectTokenCategoryVtbl,
+ ISpeechAudioBufferInfo, ISpeechAudioBufferInfoVtbl,
+ ISpeechAudioStatus, ISpeechAudioStatusVtbl,
+ ISpeechAudioFormat, ISpeechAudioFormatVtbl,
+ ISpeechWaveFormatEx, ISpeechWaveFormatExVtbl,
+ ISpeechBaseStream, ISpeechBaseStreamVtbl,
+ ISpeechFileStream, ISpeechFileStreamVtbl,
+ ISpeechMemoryStream, ISpeechMemoryStreamVtbl,
+ ISpeechCustomStream, ISpeechCustomStreamVtbl,
+ ISpeechAudio, ISpeechAudioVtbl,
+ ISpeechMMSysAudio, ISpeechMMSysAudioVtbl,
+ ISpeechVoice, ISpeechVoiceVtbl,
+ ISpeechVoiceStatus, ISpeechVoiceStatusVtbl,
+ _ISpeechVoiceEvents, _ISpeechVoiceEventsVtbl,
+ ISpeechRecognizer, ISpeechRecognizerVtbl,
+ ISpeechRecognizerStatus, ISpeechRecognizerStatusVtbl,
+ ISpeechRecoContext, ISpeechRecoContextVtbl,
+ ISpeechRecoGrammar, ISpeechRecoGrammarVtbl,
+ _ISpeechRecoContextEvents, _ISpeechRecoContextEventsVtbl,
+ ISpeechGrammarRule, ISpeechGrammarRuleVtbl,
+ ISpeechGrammarRules, ISpeechGrammarRulesVtbl,
+ ISpeechGrammarRuleState, ISpeechGrammarRuleStateVtbl,
+ ISpeechGrammarRuleStateTransition, ISpeechGrammarRuleStateTransitionVtbl,
+ ISpeechGrammarRuleStateTransitions, ISpeechGrammarRuleStateTransitionsVtbl,
+ ISpeechTextSelectionInformation, ISpeechTextSelectionInformationVtbl,
+ ISpeechRecoResult, ISpeechRecoResultVtbl,
+ ISpeechRecoResult2, ISpeechRecoResult2Vtbl,
+ ISpeechRecoResultTimes, ISpeechRecoResultTimesVtbl,
+ ISpeechPhraseAlternate, ISpeechPhraseAlternateVtbl,
+ ISpeechPhraseAlternates, ISpeechPhraseAlternatesVtbl,
+ ISpeechPhraseInfo, ISpeechPhraseInfoVtbl,
+ ISpeechPhraseElement, ISpeechPhraseElementVtbl,
+ ISpeechPhraseElements, ISpeechPhraseElementsVtbl,
+ ISpeechPhraseReplacement, ISpeechPhraseReplacementVtbl,
+ ISpeechPhraseReplacements, ISpeechPhraseReplacementsVtbl,
+ ISpeechPhraseProperty, ISpeechPhrasePropertyVtbl,
+ ISpeechPhraseProperties, ISpeechPhrasePropertiesVtbl,
+ ISpeechPhraseRule, ISpeechPhraseRuleVtbl,
+ ISpeechPhraseRules, ISpeechPhraseRulesVtbl,
+ ISpeechLexicon, ISpeechLexiconVtbl,
+ ISpeechLexiconWords, ISpeechLexiconWordsVtbl,
+ ISpeechLexiconWord, ISpeechLexiconWordVtbl,
+ ISpeechLexiconPronunciations, ISpeechLexiconPronunciationsVtbl,
+ ISpeechLexiconPronunciation, ISpeechLexiconPronunciationVtbl,
+ Speech_Default_Weight,
+ Speech_Max_Word_Length,
+ Speech_Max_Pron_Length,
+ Speech_StreamPos_Asap,
+ Speech_StreamPos_RealTime,
+ SpeechAllElements,
+ ISpeechXMLRecoResult, ISpeechXMLRecoResultVtbl,
+ ISpeechRecoResultDispatch, ISpeechRecoResultDispatchVtbl,
+ ISpeechPhraseInfoBuilder, ISpeechPhraseInfoBuilderVtbl,
+ ISpeechPhoneConverter, ISpeechPhoneConverterVtbl,
+ CLSID_SpNotifyTranslator,
+ CLSID_SpObjectTokenCategory,
+ CLSID_SpObjectToken,
+ CLSID_SpResourceManager,
+ CLSID_SpStreamFormatConverter,
+ CLSID_SpMMAudioEnum,
+ CLSID_SpMMAudioIn,
+ CLSID_SpMMAudioOut,
+ CLSID_SpStream,
+ CLSID_SpVoice,
+ CLSID_SpSharedRecoContext,
+ CLSID_SpInprocRecognizer,
+ CLSID_SpSharedRecognizer,
+ CLSID_SpLexicon,
+ CLSID_SpUnCompressedLexicon,
+ CLSID_SpCompressedLexicon,
+ CLSID_SpShortcut,
+ CLSID_SpPhoneConverter,
+ CLSID_SpPhoneticAlphabetConverter,
+ CLSID_SpNullPhoneConverter,
+ CLSID_SpTextSelectionInformation,
+ CLSID_SpPhraseInfoBuilder,
+ CLSID_SpAudioFormat,
+ CLSID_SpWaveFormatEx,
+ CLSID_SpInProcRecoContext,
+ CLSID_SpCustomStream,
+ CLSID_SpFileStream,
+ CLSID_SpMemoryStream,
+};
diff --git a/vendor/winapi/src/um/sapi51.rs b/vendor/winapi/src/um/sapi51.rs
new file mode 100644
index 000000000..db1d46438
--- /dev/null
+++ b/vendor/winapi/src/um/sapi51.rs
@@ -0,0 +1,3726 @@
+// 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.
+//! SAPI 5.1 definitions
+use ctypes::{c_char, c_float, c_long, c_short, c_ushort, c_void};
+use shared::guiddef::{CLSID, GUID, IID, REFCLSID, REFGUID, REFIID};
+use shared::minwindef::{
+ BOOL, BYTE, DWORD, FILETIME, HKEY, HMODULE, LPARAM, UINT, ULONG, USHORT, WORD, WPARAM
+};
+use shared::mmreg::WAVEFORMATEX;
+use shared::rpcndr::byte;
+use shared::windef::HWND;
+use shared::wtypes::{BSTR, VARIANT_BOOL};
+use shared::wtypesbase::{
+ CLSCTX_INPROC_HANDLER, CLSCTX_INPROC_SERVER, CLSCTX_LOCAL_SERVER, CLSCTX_REMOTE_SERVER
+};
+use um::oaidl::{DISPID_NEWENUM, DISPID_VALUE, IDispatch, IDispatchVtbl, VARIANT};
+use um::objidlbase::{IStream, IStreamVtbl, STREAM_SEEK_CUR, STREAM_SEEK_END, STREAM_SEEK_SET};
+use um::servprov::{IServiceProvider, IServiceProviderVtbl};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HANDLE, HRESULT, LONG, LONGLONG, LPCWSTR, LPWSTR, ULONGLONG, WCHAR};
+ENUM!{enum SPDATAKEYLOCATION {
+ SPDKL_DefaultLocation = 0,
+ SPDKL_CurrentUser = 1,
+ SPDKL_LocalMachine = 2,
+ SPDKL_CurrentConfig = 5,
+}}
+pub const SPDUI_EngineProperties: &'static str = "EngineProperties";
+pub const SPDUI_AddRemoveWord: &'static str = "AddRemoveWord";
+pub const SPDUI_UserTraining: &'static str = "UserTraining";
+pub const SPDUI_MicTraining: &'static str = "MicTraining";
+pub const SPDUI_RecoProfileProperties: &'static str = "RecoProfileProperties";
+pub const SPDUI_AudioProperties: &'static str = "AudioProperties";
+pub const SPDUI_AudioVolume: &'static str = "AudioVolume";
+pub const SPDUI_UserEnrollment: &'static str = "UserEnrollment";
+pub const SPDUI_ShareData: &'static str = "ShareData";
+pub const SPDUI_Tutorial: &'static str = "Tutorial";
+ENUM!{enum SPSTREAMFORMAT {
+ SPSF_Default = -1i32 as u32,
+ SPSF_NoAssignedFormat = 0,
+ SPSF_Text = 1,
+ SPSF_NonStandardFormat = 2,
+ SPSF_ExtendedAudioFormat = 3,
+ SPSF_8kHz8BitMono = 4,
+ SPSF_8kHz8BitStereo = 5,
+ SPSF_8kHz16BitMono = 6,
+ SPSF_8kHz16BitStereo = 7,
+ SPSF_11kHz8BitMono = 8,
+ SPSF_11kHz8BitStereo = 9,
+ SPSF_11kHz16BitMono = 10,
+ SPSF_11kHz16BitStereo = 11,
+ SPSF_12kHz8BitMono = 12,
+ SPSF_12kHz8BitStereo = 13,
+ SPSF_12kHz16BitMono = 14,
+ SPSF_12kHz16BitStereo = 15,
+ SPSF_16kHz8BitMono = 16,
+ SPSF_16kHz8BitStereo = 17,
+ SPSF_16kHz16BitMono = 18,
+ SPSF_16kHz16BitStereo = 19,
+ SPSF_22kHz8BitMono = 20,
+ SPSF_22kHz8BitStereo = 21,
+ SPSF_22kHz16BitMono = 22,
+ SPSF_22kHz16BitStereo = 23,
+ SPSF_24kHz8BitMono = 24,
+ SPSF_24kHz8BitStereo = 25,
+ SPSF_24kHz16BitMono = 26,
+ SPSF_24kHz16BitStereo = 27,
+ SPSF_32kHz8BitMono = 28,
+ SPSF_32kHz8BitStereo = 29,
+ SPSF_32kHz16BitMono = 30,
+ SPSF_32kHz16BitStereo = 31,
+ SPSF_44kHz8BitMono = 32,
+ SPSF_44kHz8BitStereo = 33,
+ SPSF_44kHz16BitMono = 34,
+ SPSF_44kHz16BitStereo = 35,
+ SPSF_48kHz8BitMono = 36,
+ SPSF_48kHz8BitStereo = 37,
+ SPSF_48kHz16BitMono = 38,
+ SPSF_48kHz16BitStereo = 39,
+ SPSF_TrueSpeech_8kHz1BitMono = 40,
+ SPSF_CCITT_ALaw_8kHzMono = 41,
+ SPSF_CCITT_ALaw_8kHzStereo = 42,
+ SPSF_CCITT_ALaw_11kHzMono = 43,
+ SPSF_CCITT_ALaw_11kHzStereo = 44,
+ SPSF_CCITT_ALaw_22kHzMono = 45,
+ SPSF_CCITT_ALaw_22kHzStereo = 46,
+ SPSF_CCITT_ALaw_44kHzMono = 47,
+ SPSF_CCITT_ALaw_44kHzStereo = 48,
+ SPSF_CCITT_uLaw_8kHzMono = 49,
+ SPSF_CCITT_uLaw_8kHzStereo = 50,
+ SPSF_CCITT_uLaw_11kHzMono = 51,
+ SPSF_CCITT_uLaw_11kHzStereo = 52,
+ SPSF_CCITT_uLaw_22kHzMono = 53,
+ SPSF_CCITT_uLaw_22kHzStereo = 54,
+ SPSF_CCITT_uLaw_44kHzMono = 55,
+ SPSF_CCITT_uLaw_44kHzStereo = 56,
+ SPSF_ADPCM_8kHzMono = 57,
+ SPSF_ADPCM_8kHzStereo = 58,
+ SPSF_ADPCM_11kHzMono = 59,
+ SPSF_ADPCM_11kHzStereo = 60,
+ SPSF_ADPCM_22kHzMono = 61,
+ SPSF_ADPCM_22kHzStereo = 62,
+ SPSF_ADPCM_44kHzMono = 63,
+ SPSF_ADPCM_44kHzStereo = 64,
+ SPSF_GSM610_8kHzMono = 65,
+ SPSF_GSM610_11kHzMono = 66,
+ SPSF_GSM610_22kHzMono = 67,
+ SPSF_GSM610_44kHzMono = 68,
+ SPSF_NUM_FORMATS = 69,
+}}
+extern {
+ pub static SPDFID_Text: GUID;
+ pub static SPDFID_WaveFormatEx: GUID;
+}
+pub const SPREG_USER_ROOT: &'static str = "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Speech";
+pub const SPREG_LOCAL_MACHINE_ROOT: &'static str
+ = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech";
+pub const SPCAT_AUDIOOUT: &'static str
+ = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AudioOutput";
+pub const SPCAT_AUDIOIN: &'static str
+ = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AudioInput";
+pub const SPCAT_VOICES: &'static str = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices";
+pub const SPCAT_RECOGNIZERS: &'static str
+ = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Recognizers";
+pub const SPCAT_APPLEXICONS: &'static str
+ = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AppLexicons";
+pub const SPCAT_PHONECONVERTERS: &'static str
+ = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\PhoneConverters";
+pub const SPCAT_TEXTNORMALIZERS: &'static str
+ = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\TextNormalizers";
+pub const SPCAT_RECOPROFILES: &'static str
+ = "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Speech\\RecoProfiles";
+pub const SPMMSYS_AUDIO_IN_TOKEN_ID: &'static str
+ = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AudioInput\\TokenEnums\\MMAudioIn\\";
+pub const SPMMSYS_AUDIO_OUT_TOKEN_ID: &'static str
+ = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AudioOutput\\TokenEnums\\MMAudioOut\\";
+pub const SPCURRENT_USER_LEXICON_TOKEN_ID: &'static str
+ = "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Speech\\CurrentUserLexicon";
+pub const SPCURRENT_USER_SHORTCUT_TOKEN_ID: &'static str
+ = "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Speech\\CurrentUserShortcut";
+pub const SPTOKENVALUE_CLSID: &'static str = "CLSID";
+pub const SPTOKENKEY_FILES: &'static str = "Files";
+pub const SPTOKENKEY_UI: &'static str = "UI";
+pub const SPTOKENKEY_ATTRIBUTES: &'static str = "Attributes";
+pub const SPVOICECATEGORY_TTSRATE: &'static str = "DefaultTTSRate";
+pub const SPPROP_RESOURCE_USAGE: &'static str = "ResourceUsage";
+pub const SPPROP_HIGH_CONFIDENCE_THRESHOLD: &'static str = "HighConfidenceThreshold";
+pub const SPPROP_NORMAL_CONFIDENCE_THRESHOLD: &'static str = "NormalConfidenceThreshold";
+pub const SPPROP_LOW_CONFIDENCE_THRESHOLD: &'static str = "LowConfidenceThreshold";
+pub const SPPROP_RESPONSE_SPEED: &'static str = "ResponseSpeed";
+pub const SPPROP_COMPLEX_RESPONSE_SPEED: &'static str = "ComplexResponseSpeed";
+pub const SPPROP_ADAPTATION_ON: &'static str = "AdaptationOn";
+pub const SPPROP_PERSISTED_BACKGROUND_ADAPTATION: &'static str = "PersistedBackgroundAdaptation";
+pub const SPPROP_PERSISTED_LANGUAGE_MODEL_ADAPTATION: &'static str
+ = "PersistedLanguageModelAdaptation";
+pub const SPPROP_UX_IS_LISTENING: &'static str = "UXIsListening";
+pub const SPTOPIC_SPELLING: &'static str = "Spelling";
+pub const SPWILDCARD: &'static str = "...";
+pub const SPDICTATION: &'static str = "*";
+pub const SPINFDICTATION: &'static str = "*+";
+pub const SP_LOW_CONFIDENCE: c_char = -1;
+pub const SP_NORMAL_CONFIDENCE: c_char = 0;
+pub const SP_HIGH_CONFIDENCE: c_char = 1;
+pub const DEFAULT_WEIGHT: c_float = 1.0;
+pub const SP_MAX_WORD_LENGTH: ULONG = 128;
+pub const SP_MAX_PRON_LENGTH: ULONG = 384;
+RIDL!{#[uuid(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)]
+interface ISpNotifyCallback(ISpNotifyCallbackVtbl) {
+ fn NotifyCallback(
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> HRESULT,
+}}
+FN!{stdcall SPNOTIFYCALLBACK(
+ wParam: WPARAM,
+ lParam: LPARAM,
+) -> ()}
+RIDL!{#[uuid(0x5eff4aef, 0x8487, 0x11d2, 0x96, 0x1c, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0x28)]
+interface ISpNotifySource(ISpNotifySourceVtbl): IUnknown(IUnknownVtbl) {
+ fn SetNotifySink(
+ pNotifySink: *mut ISpNotifySink,
+ ) -> HRESULT,
+ fn SetNotifyWindowMessage(
+ hWnd: HWND,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> HRESULT,
+ fn SetNotifyCallbackFunction(
+ pfnCallback: SPNOTIFYCALLBACK,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> HRESULT,
+ fn SetNotifyCallbackInterface(
+ pSpCallback: *mut ISpNotifyCallback,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> HRESULT,
+ fn SetNotifyWin32Event() -> HRESULT,
+ fn WaitForNotifyEvent(
+ dwMilliseconds: DWORD,
+ ) -> HRESULT,
+ fn GetNotifyEventHandle() -> HANDLE,
+}}
+RIDL!{#[uuid(0x259684dc, 0x37c3, 0x11d2, 0x96, 0x03, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0x28)]
+interface ISpNotifySink(ISpNotifySinkVtbl): IUnknown(IUnknownVtbl) {
+ fn Notify() -> HRESULT,
+}}
+RIDL!{#[uuid(0xaca16614, 0x5d3d, 0x11d2, 0x96, 0x0e, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0x28)]
+interface ISpNotifyTranslator(ISpNotifyTranslatorVtbl): ISpNotifySink(ISpNotifySinkVtbl) {
+ fn InitWindowMessage(
+ hWnd: HWND,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> HRESULT,
+ fn InitCallback(
+ pfnCallback: SPNOTIFYCALLBACK,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> HRESULT,
+ fn InitSpNotifyCallback(
+ pSpCallback: *mut ISpNotifyCallback,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> HRESULT,
+ fn InitWin32Event(
+ hEvent: HANDLE,
+ fCloseHandleOnRelease: BOOL,
+ ) -> HRESULT,
+ fn Wait(
+ dwMilliseconds: DWORD,
+ ) -> HRESULT,
+ fn GetEventHandle() -> HANDLE,
+}}
+RIDL!{#[uuid(0x14056581, 0xe16c, 0x11d2, 0xbb, 0x90, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0xc0)]
+interface ISpDataKey(ISpDataKeyVtbl): IUnknown(IUnknownVtbl) {
+ fn SetData(
+ pszValueName: LPCWSTR,
+ cbData: ULONG,
+ pData: *const BYTE,
+ ) -> HRESULT,
+ fn GetData(
+ pszValueName: LPCWSTR,
+ pcbData: *mut ULONG,
+ pData: *mut BYTE,
+ ) -> HRESULT,
+ fn SetStringValue(
+ pszValueName: LPCWSTR,
+ pszValue: LPCWSTR,
+ ) -> HRESULT,
+ fn GetStringValue(
+ pszValueName: LPCWSTR,
+ ppszValue: *mut LPWSTR,
+ ) -> HRESULT,
+ fn SetDWORD(
+ pszValueName: LPCWSTR,
+ dwValue: DWORD,
+ ) -> HRESULT,
+ fn GetDWORD(
+ pszValueName: LPCWSTR,
+ pdwValue: *mut DWORD,
+ ) -> HRESULT,
+ fn OpenKey(
+ pszSubKeyName: LPCWSTR,
+ ppSubKey: *mut *mut ISpDataKey,
+ ) -> HRESULT,
+ fn CreateKey(
+ pszSubKey: LPCWSTR,
+ ppSubKey: *mut *mut ISpDataKey,
+ ) -> HRESULT,
+ fn DeleteKey(
+ pszSubKey: LPCWSTR,
+ ) -> HRESULT,
+ fn DeleteValue(
+ pszValueName: LPCWSTR,
+ ) -> HRESULT,
+ fn EnumKeys(
+ Index: ULONG,
+ ppszSubKeyName: *mut LPWSTR,
+ ) -> HRESULT,
+ fn EnumValues(
+ Index: ULONG,
+ ppszValueName: *mut LPWSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x92a66e2b, 0xc830, 0x4149, 0x83, 0xdf, 0x6f, 0xc2, 0xba, 0x1e, 0x7a, 0x5b)]
+interface ISpRegDataKey(ISpRegDataKeyVtbl): ISpDataKey(ISpDataKeyVtbl) {
+ fn SetKey(
+ hkey: HKEY,
+ fReadOnly: BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x2d3d3845, 0x39af, 0x4850, 0xbb, 0xf9, 0x40, 0xb4, 0x97, 0x80, 0x01, 0x1d)]
+interface ISpObjectTokenCategory(ISpObjectTokenCategoryVtbl): ISpDataKey(ISpDataKeyVtbl) {
+ fn SetId(
+ pszCategoryId: LPCWSTR,
+ fCreateIfNotExist: BOOL,
+ ) -> HRESULT,
+ fn GetId(
+ ppszCoMemCategoryId: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetDataKey(
+ spdkl: SPDATAKEYLOCATION,
+ pppDataKey: *mut *mut ISpDataKey,
+ ) -> HRESULT,
+ fn EnumTokens(
+ pzsReqAttribs: LPCWSTR,
+ pszOptAttribs: LPCWSTR,
+ ppEnum: *mut *mut IEnumSpObjectTokens,
+ ) -> HRESULT,
+ fn SetDefaultTokenId(
+ pszTokenId: LPCWSTR,
+ ) -> HRESULT,
+ fn GetDefaultTokenId(
+ ppszCoMemTokenId: *mut LPWSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x14056589, 0xe16c, 0x11d2, 0xbb, 0x90, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0xc0)]
+interface ISpObjectToken(ISpObjectTokenVtbl): ISpDataKey(ISpDataKeyVtbl) {
+ fn SetId(
+ pszCategoryId: LPCWSTR,
+ pszTokenId: LPCWSTR,
+ fCreateIfNotExist: BOOL,
+ ) -> HRESULT,
+ fn GetId(
+ ppszCoMemTokenId: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetCategory(
+ ppTokenCategory: *mut *mut ISpObjectTokenCategory,
+ ) -> HRESULT,
+ fn CreateInstance(
+ pUnkOuter: *mut IUnknown,
+ dwClsContext: DWORD,
+ riid: REFIID,
+ ppvObject: *mut *mut c_void,
+ ) -> HRESULT,
+ fn GetStorageFileName(
+ clsidCaller: REFCLSID,
+ pszValueName: LPCWSTR,
+ pszFileNameSpecifier: LPCWSTR,
+ nFolder: ULONG,
+ ppszFilePath: *mut LPWSTR,
+ ) -> HRESULT,
+ fn RemoveStorageFileName(
+ pszKeyName: LPCWSTR,
+ fDeleteFile: BOOL,
+ ) -> HRESULT,
+ fn Remove(
+ pclsidCaller: *const CLSID,
+ ) -> HRESULT,
+ fn IsUISupported(
+ pszTypeOfUI: LPCWSTR,
+ pvExtraData: *mut c_void,
+ cbExtraData: ULONG,
+ punkObject: *mut IUnknown,
+ pfSupported: *mut BOOL,
+ ) -> HRESULT,
+ fn DisplayUI(
+ hwndParent: HWND,
+ pszTitle: LPCWSTR,
+ pszTypeOfUI: LPCWSTR,
+ pvExtraData: *mut c_void,
+ cbExtraData: ULONG,
+ punkObject: *mut IUnknown,
+ ) -> HRESULT,
+ fn MatchesAttributes(
+ pszAttributes: LPCWSTR,
+ pfMatches: *mut BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xb8aab0cf, 0x346f, 0x49d8, 0x94, 0x99, 0xc8, 0xb0, 0x3f, 0x16, 0x1d, 0x51)]
+interface ISpObjectTokenInit(ISpObjectTokenInitVtbl): ISpObjectToken(ISpObjectTokenVtbl) {
+ fn InitFromDataKey(
+ pszCategoryId: LPCWSTR,
+ pszTokenId: LPCWSTR,
+ pDataKey: *mut ISpDataKey,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x06b64f9e, 0x7fda, 0x11d2, 0xb4, 0xf2, 0x00, 0xc0, 0x4f, 0x79, 0x73, 0x96)]
+interface IEnumSpObjectTokens(IEnumSpObjectTokensVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ celt: ULONG,
+ pelt: *mut *mut ISpObjectToken,
+ pceltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ celt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppEnum: *mut *mut IEnumSpObjectTokens,
+ ) -> HRESULT,
+ fn Item(
+ Index: ULONG,
+ ppToken: *mut *mut ISpObjectToken,
+ ) -> HRESULT,
+ fn GetCount(
+ pCount: *mut ULONG,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x5b559f40, 0xe952, 0x11d2, 0xbb, 0x91, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0xc0)]
+interface ISpObjectWithToken(ISpObjectWithTokenVtbl): IUnknown(IUnknownVtbl) {
+ fn SetObjectToken(
+ pToken: *mut ISpObjectToken,
+ ) -> HRESULT,
+ fn GetObjectToken(
+ ppToken: *mut *mut ISpObjectToken,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x93384e18, 0x5014, 0x43d5, 0xad, 0xbb, 0xa7, 0x8e, 0x05, 0x59, 0x26, 0xbd)]
+interface ISpResourceManager(ISpResourceManagerVtbl): IServiceProvider(IServiceProviderVtbl) {
+ fn SetObject(
+ guidServiceId: REFGUID,
+ pUnkObject: *mut IUnknown,
+ ) -> HRESULT,
+ fn GetObject(
+ guidServiceId: REFGUID,
+ ObjectCLSID: REFCLSID,
+ ObjectIID: REFIID,
+ fReleaseWhenLastExternalRefReleased: BOOL,
+ ppObject: *mut *mut c_void,
+ ) -> HRESULT,
+}}
+ENUM!{enum SPEVENTLPARAMTYPE {
+ SPET_LPARAM_IS_UNDEFINED = 0,
+ SPET_LPARAM_IS_TOKEN,
+ SPET_LPARAM_IS_OBJECT,
+ SPET_LPARAM_IS_POINTER,
+ SPET_LPARAM_IS_STRING,
+}}
+ENUM!{enum SPEVENTENUM {
+ SPEI_UNDEFINED = 0,
+ SPEI_START_INPUT_STREAM = 1,
+ SPEI_END_INPUT_STREAM = 2,
+ SPEI_VOICE_CHANGE = 3,
+ SPEI_TTS_BOOKMARK = 4,
+ SPEI_WORD_BOUNDARY = 5,
+ SPEI_PHONEME = 6,
+ SPEI_SENTENCE_BOUNDARY = 7,
+ SPEI_VISEME = 8,
+ SPEI_TTS_AUDIO_LEVEL = 9,
+ SPEI_TTS_PRIVATE = 15,
+ SPEI_MIN_TTS = 1,
+ SPEI_MAX_TTS = 15,
+ SPEI_END_SR_STREAM = 34,
+ SPEI_SOUND_START = 35,
+ SPEI_SOUND_END = 36,
+ SPEI_PHRASE_START = 37,
+ SPEI_RECOGNITION = 38,
+ SPEI_HYPOTHESIS = 39,
+ SPEI_SR_BOOKMARK = 40,
+ SPEI_PROPERTY_NUM_CHANGE = 41,
+ SPEI_PROPERTY_STRING_CHANGE = 42,
+ SPEI_FALSE_RECOGNITION = 43,
+ SPEI_INTERFERENCE = 44,
+ SPEI_REQUEST_UI = 45,
+ SPEI_RECO_STATE_CHANGE = 46,
+ SPEI_ADAPTATION = 47,
+ SPEI_START_SR_STREAM = 48,
+ SPEI_RECO_OTHER_CONTEXT = 49,
+ SPEI_SR_AUDIO_LEVEL = 50,
+ SPEI_SR_PRIVATE = 52,
+ SPEI_MIN_SR = 34,
+ SPEI_MAX_SR = 52,
+ SPEI_RESERVED1 = 30,
+ SPEI_RESERVED2 = 33,
+ SPEI_RESERVED3 = 63,
+}}
+pub const SPFEI_FLAGCHECK: ULONGLONG = (1 << SPEI_RESERVED1) | (1 << SPEI_RESERVED2);
+pub const SPFEI_ALL_TTS_EVENTS: ULONGLONG = 0x000000000000FFFE | SPFEI_FLAGCHECK;
+pub const SPFEI_ALL_SR_EVENTS: ULONGLONG = 0x003FFFFC00000000 | SPFEI_FLAGCHECK;
+pub const SPFEI_ALL_EVENTS: ULONGLONG = 0xEFFFFFFFFFFFFFFF;
+#[inline]
+pub fn SPFEI(
+ SPEI_ord: SPEVENTENUM,
+ ) -> ULONGLONG {
+ (1 << SPEI_ord) | SPFEI_FLAGCHECK
+}
+STRUCT!{struct SPEVENT {
+ bitfields: DWORD,
+ ulStreamNum: ULONG,
+ ullAudioStreamOffset: ULONGLONG,
+ wParam: WPARAM,
+ lParam: LPARAM,
+}}
+BITFIELD!{SPEVENT bitfields: SPEVENTENUM [ eEventId set_eEventId[0..16], ]}
+BITFIELD!{SPEVENT bitfields: SPEVENTLPARAMTYPE [ elParamType set_elParamType[16..32], ]}
+STRUCT!{struct SPSERIALIZEDEVENT {
+ bitfields: DWORD,
+ ulStreamNum: ULONG,
+ ullAudioStreamOffset: ULONGLONG,
+ SerializedwParam: ULONG,
+ SerializedlParam: LONG,
+}}
+BITFIELD!{SPSERIALIZEDEVENT bitfields: SPEVENTENUM [ eEventId set_eEventId[0..16], ]}
+BITFIELD!{SPSERIALIZEDEVENT bitfields: SPEVENTLPARAMTYPE [ elParamType set_elParamType[16..32], ]}
+STRUCT!{struct SPSERIALIZEDEVENT64 {
+ bitfields: DWORD,
+ ulStreamNum: ULONG,
+ ullAudioStreamOffset: ULONGLONG,
+ SerializedwParam: ULONGLONG,
+ SerializedlParam: LONGLONG,
+}}
+BITFIELD!{SPSERIALIZEDEVENT64 bitfields: SPEVENTENUM [
+ eEventId set_eEventId[0..16],
+]}
+BITFIELD!{SPSERIALIZEDEVENT64 bitfields: SPEVENTLPARAMTYPE [
+ elParamType set_elParamType[16..32],
+]}
+ENUM!{enum SPINTERFERENCE {
+ SPINTERFERENCE_NONE = 0,
+ SPINTERFERENCE_NOISE,
+ SPINTERFERENCE_NOSIGNAL,
+ SPINTERFERENCE_TOOLOUD,
+ SPINTERFERENCE_TOOQUIET,
+ SPINTERFERENCE_TOOFAST,
+ SPINTERFERENCE_TOOSLOW,
+ SPINTERFERENCE_LATENCY_WARNING,
+ SPINTERFERENCE_LATENCY_TRUNCATE_BEGIN ,
+ SPINTERFERENCE_LATENCY_TRUNCATE_END,
+}}
+ENUM!{enum SPENDSRSTREAMFLAGS {
+ SPESF_NONE = 0,
+ SPESF_STREAM_RELEASED = 1 << 0,
+ SPESF_EMULATED = 1 << 1,
+}}
+ENUM!{enum SPVFEATURE {
+ SPVFEATURE_STRESSED = 1 << 0,
+ SPVFEATURE_EMPHASIS = 1 << 1,
+}}
+ENUM!{enum SPVISEMES {
+ SP_VISEME_0 = 0,
+ SP_VISEME_1,
+ SP_VISEME_2,
+ SP_VISEME_3,
+ SP_VISEME_4,
+ SP_VISEME_5,
+ SP_VISEME_6,
+ SP_VISEME_7,
+ SP_VISEME_8,
+ SP_VISEME_9,
+ SP_VISEME_10,
+ SP_VISEME_11,
+ SP_VISEME_12,
+ SP_VISEME_13,
+ SP_VISEME_14,
+ SP_VISEME_15,
+ SP_VISEME_16,
+ SP_VISEME_17,
+ SP_VISEME_18,
+ SP_VISEME_19,
+ SP_VISEME_20,
+ SP_VISEME_21,
+}}
+STRUCT!{struct SPEVENTSOURCEINFO {
+ ullEventInterest: ULONGLONG,
+ ullQueuedInterest: ULONGLONG,
+ ulCount: ULONG,
+}}
+RIDL!{#[uuid(0xbe7a9cce, 0x5f9e, 0x11d2, 0x96, 0x0f, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0x28)]
+interface ISpEventSource(ISpEventSourceVtbl): ISpNotifySource(ISpNotifySourceVtbl) {
+ fn SetInterest(
+ ullEventInterest: ULONGLONG,
+ ullQueuedInterest: ULONGLONG,
+ ) -> HRESULT,
+ fn GetEvents(
+ ulCount: ULONG,
+ pEventArray: *mut SPEVENT,
+ pulFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn GetInfo(
+ pInfo: *mut SPEVENTSOURCEINFO,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xbe7a9cc9, 0x5f9e, 0x11d2, 0x96, 0x0f, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0x28)]
+interface ISpEventSink(ISpEventSinkVtbl): IUnknown(IUnknownVtbl) {
+ fn AddEvents(
+ pEventArray: *const SPEVENT,
+ ulCount: ULONG,
+ ) -> HRESULT,
+ fn GetEventInterest(
+ pullEventInterest: *mut ULONGLONG,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xbed530be, 0x2606, 0x4f4d, 0xa1, 0xc0, 0x54, 0xc5, 0xcd, 0xa5, 0x56, 0x6f)]
+interface ISpStreamFormat(ISpStreamFormatVtbl): IStream(IStreamVtbl) {
+ fn GetFormat(
+ pguidFormatId: *mut GUID,
+ ppCoMemWaveFormatEx: *mut *mut WAVEFORMATEX,
+ ) -> HRESULT,
+}}
+ENUM!{enum SPFILEMODE {
+ SPFM_OPEN_READONLY,
+ SPFM_OPEN_READWRITE,
+ SPFM_CREATE,
+ SPFM_CREATE_ALWAYS,
+ SPFM_NUM_MODES,
+}}
+RIDL!{#[uuid(0x12e3cca9, 0x7518, 0x44c5, 0xa5, 0xe7, 0xba, 0x5a, 0x79, 0xcb, 0x92, 0x9e)]
+interface ISpStream(ISpStreamVtbl): ISpStreamFormat(ISpStreamFormatVtbl) {
+ fn SetBaseStream(
+ pStream: *mut IStream,
+ rguidFormat: REFGUID,
+ pWaveFormatEx: *const WAVEFORMATEX,
+ ) -> HRESULT,
+ fn GetBaseStream(
+ ppStream: *mut *mut IStream,
+ ) -> HRESULT,
+ fn BindToFile(
+ pszFileName: LPCWSTR,
+ eMode: SPFILEMODE,
+ pFormatId: *const GUID,
+ pWaveFormatEx: *const WAVEFORMATEX,
+ ullEventInterest: ULONGLONG,
+ ) -> HRESULT,
+ fn Close() -> HRESULT,
+}}
+RIDL!{#[uuid(0x678a932c, 0xea71, 0x4446, 0x9b, 0x41, 0x78, 0xfd, 0xa6, 0x28, 0x0a, 0x29)]
+interface ISpStreamFormatConverter(ISpStreamFormatConverterVtbl):
+ ISpStreamFormat(ISpStreamFormatVtbl) {
+ fn SetBaseStream(
+ pStream: *mut ISpStreamFormat,
+ fSetFormatToBaseStreamFormat: BOOL,
+ fWriteToBaseStream: BOOL,
+ ) -> HRESULT,
+ fn GetBaseStream(
+ ppStream: *mut *mut ISpStreamFormat,
+ ) -> HRESULT,
+ fn SetFormat(
+ rguidFormatIdOfConvertedStream: REFGUID,
+ pWaveFormatExOfConvertedStream: *const WAVEFORMATEX,
+ ) -> HRESULT,
+ fn ResetSeekPosition() -> HRESULT,
+ fn ScaleConvertedToBaseOffset(
+ ullOffsetConvertedStream: ULONGLONG,
+ pullOffsetBaseStream: *mut ULONGLONG,
+ ) -> HRESULT,
+ fn ScaleBaseToConvertedOffset(
+ ullOffsetBaseStream: ULONGLONG,
+ pullOffsetConvertedStream: *mut ULONGLONG,
+ ) -> HRESULT,
+}}
+ENUM!{enum SPAUDIOSTATE {
+ SPAS_CLOSED,
+ SPAS_STOP,
+ SPAS_PAUSE,
+ SPAS_RUN,
+}}
+STRUCT!{struct SPAUDIOSTATUS {
+ cbFreeBuffSpace: c_long,
+ cbNonBlockingIO: ULONG,
+ State: SPAUDIOSTATE,
+ CurSeekPos: ULONGLONG,
+ CurDevicePos: ULONGLONG,
+ dwAudioLevel: DWORD,
+ dwReserved2: DWORD,
+}}
+STRUCT!{struct SPAUDIOBUFFERINFO {
+ ulMsMinNotification: ULONG,
+ ulMsBufferSize: ULONG,
+ ulMsEventBias: ULONG,
+}}
+RIDL!{#[uuid(0xc05c768f, 0xfae8, 0x4ec2, 0x8e, 0x07, 0x33, 0x83, 0x21, 0xc1, 0x24, 0x52)]
+interface ISpAudio(ISpAudioVtbl): ISpStreamFormat(ISpStreamFormatVtbl) {
+ fn SetState(
+ NewState: SPAUDIOSTATE,
+ ullReserved: ULONGLONG,
+ ) -> HRESULT,
+ fn SetFormat(
+ rguidFmtId: REFGUID,
+ pWaveFormatEx: *const WAVEFORMATEX,
+ ) -> HRESULT,
+ fn GetStatus(
+ pStatus: *mut SPAUDIOSTATUS,
+ ) -> HRESULT,
+ fn SetBufferInfo(
+ pBuffInfo: *const SPAUDIOBUFFERINFO,
+ ) -> HRESULT,
+ fn GetBufferInfo(
+ pBuffInfo: *mut SPAUDIOBUFFERINFO,
+ ) -> HRESULT,
+ fn GetDefaultFormat(
+ pFormatId: *mut GUID,
+ ppCoMemWaveFormatEx: *mut *mut WAVEFORMATEX,
+ ) -> HRESULT,
+ fn EventHandle() -> HANDLE,
+ fn GetVolumeLevel(
+ pLevel: *mut ULONG,
+ ) -> HRESULT,
+ fn SetVolumeLevel(
+ Level: ULONG,
+ ) -> HRESULT,
+ fn GetBufferNotifySize(
+ pcbSize: *mut ULONG,
+ ) -> HRESULT,
+ fn SetBufferNotifySize(
+ cbSize: ULONG,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x15806f6e, 0x1d70, 0x4b48, 0x98, 0xe6, 0x3b, 0x1a, 0x00, 0x75, 0x09, 0xab)]
+interface ISpMMSysAudio(ISpMMSysAudioVtbl): ISpAudio(ISpAudioVtbl) {
+ fn GetDeviceId(
+ puDeviceId: *mut UINT,
+ ) -> HRESULT,
+ fn SetDeviceId(
+ uDeviceId: UINT,
+ ) -> HRESULT,
+ fn GetMMHandle(
+ pHandle: *mut *mut c_void,
+ ) -> HRESULT,
+ fn GetLineId(
+ puLineId: *mut UINT,
+ ) -> HRESULT,
+ fn SetLineId(
+ uLineId: UINT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x10f63bce, 0x201a, 0x11d3, 0xac, 0x70, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0xc0)]
+interface ISpTranscript(ISpTranscriptVtbl): IUnknown(IUnknownVtbl) {
+ fn GetTranscript(
+ ppszTranscript: *mut LPWSTR,
+ ) -> HRESULT,
+ fn AppendTranscript(
+ pszTranscript: LPCWSTR,
+ ) -> HRESULT,
+}}
+ENUM!{enum SPDISPLAYATTRIBUTES {
+ SPAF_ONE_TRAILING_SPACE = 0x2,
+ SPAF_TWO_TRAILING_SPACES = 0x4,
+ SPAF_CONSUME_LEADING_SPACES = 0x8,
+ SPAF_ALL = 0xf,
+}}
+pub type SPPHONEID = WCHAR;
+pub type PSPPHONEID = LPWSTR;
+pub type PCSPPHONEID = LPCWSTR;
+STRUCT!{struct SPPHRASEELEMENT {
+ ulAudioTimeOffset: ULONG,
+ ulAudioSizeTime: ULONG,
+ ulAudioStreamOffset: ULONG,
+ ulAudioSizeBytes: ULONG,
+ ulRetainedStreamOffset: ULONG,
+ ulRetainedSizeBytes: ULONG,
+ pszDisplayText: LPCWSTR,
+ pszLexicalForm: LPCWSTR,
+ pszPronunciation: *const SPPHONEID,
+ bDisplayAttributes: BYTE,
+ RequiredConfidence: c_char,
+ ActualConfidence: c_char,
+ Reserved: BYTE,
+ SREngineConfidence: c_float,
+}}
+STRUCT!{struct SPPHRASERULE {
+ pszName: LPCWSTR,
+ ulId: ULONG,
+ ulFirstElement: ULONG,
+ ulCountOfElements: ULONG,
+ pNextSibling: *const SPPHRASERULE,
+ pFirstChild: *const SPPHRASERULE,
+ SREngineConfidence: c_float,
+ Confidence: c_char,
+}}
+ENUM!{enum SPPHRASEPROPERTYUNIONTYPE {
+ SPPPUT_UNUSED = 0,
+ SPPPUT_ARRAY_INDEX,
+}}
+STRUCT!{struct SPPHRASEPROPERTY_u_s {
+ bType: byte,
+ bReserved: byte,
+ usArrayIndex: c_ushort,
+}}
+UNION!{union SPPHRASEPROPERTY_u {
+ [u32; 1],
+ ulId ulId_mut: ULONG,
+ s s_mut: SPPHRASEPROPERTY_u_s,
+}}
+STRUCT!{struct SPPHRASEPROPERTY {
+ pszName: LPCWSTR,
+ u: SPPHRASEPROPERTY_u_s,
+ pszValue: LPCWSTR,
+ vValue: VARIANT,
+ ulFirstElement: ULONG,
+ ulCountOfElements: ULONG,
+ pNextSibling: *const SPPHRASEPROPERTY,
+ pFirstChild: *const SPPHRASEPROPERTY,
+ SREngineConfidence: c_float,
+ Confidence: c_char,
+}}
+STRUCT!{struct SPPHRASEREPLACEMENT {
+ bDisplayAttributes: BYTE,
+ pszReplacementText: LPCWSTR,
+ ulFirstElement: ULONG,
+ ulCountOfElements: ULONG,
+}}
+STRUCT!{struct SPPHRASE {
+ cbSize: ULONG,
+ LangID: WORD,
+ wHomophoneGroupId: WORD,
+ ullGrammarID: ULONGLONG,
+ ftStartTime: ULONGLONG,
+ ullAudioStreamPosition: ULONGLONG,
+ ulAudioSizeBytes: ULONG,
+ ulRetainedSizeBytes: ULONG,
+ ulAudioSizeTime: ULONG,
+ Rule: SPPHRASERULE,
+ pProperties: *const SPPHRASEPROPERTY,
+ pElements: *const SPPHRASEELEMENT,
+ cReplacements: ULONG,
+ pReplacements: *const SPPHRASEREPLACEMENT,
+ SREngineID: GUID,
+ ulSREnginePrivateDataSize: ULONG,
+ pSREnginePrivateData: *const BYTE,
+}}
+STRUCT!{struct SPSERIALIZEDPHRASE {
+ ulSerializedSize: ULONG,
+}}
+ENUM!{enum SPVALUETYPE {
+ SPDF_PROPERTY = 0x1,
+ SPDF_REPLACEMENT = 0x2,
+ SPDF_RULE = 0x4,
+ SPDF_DISPLAYTEXT = 0x8,
+ SPDF_LEXICALFORM = 0x10,
+ SPDF_PRONUNCIATION = 0x20,
+ SPDF_AUDIO = 0x40,
+ SPDF_ALTERNATES = 0x80,
+ SPDF_ALL = 0xff,
+}}
+STRUCT!{struct SPBINARYGRAMMAR {
+ ulTotalSerializedSize: ULONG,
+}}
+ENUM!{enum SPPHRASERNG {
+ SPPR_ALL_ELEMENTS = -1i32 as u32,
+}}
+pub const SP_GETWHOLEPHRASE: SPPHRASERNG = SPPR_ALL_ELEMENTS;
+pub const SPRR_ALL_ELEMENTS: SPPHRASERNG = SPPR_ALL_ELEMENTS;
+DECLARE_HANDLE!{SPSTATEHANDLE, SPSTATEHANDLE__}
+ENUM!{enum SPRECOEVENTFLAGS {
+ SPREF_AutoPause = 1 << 0,
+ SPREF_Emulated = 1 << 1,
+}}
+ENUM!{enum SPPARTOFSPEECH {
+ SPPS_NotOverriden = -1i32 as u32,
+ SPPS_Unknown = 0,
+ SPPS_Noun = 0x1000,
+ SPPS_Verb = 0x2000,
+ SPPS_Modifier = 0x3000,
+ SPPS_Function = 0x4000,
+ SPPS_Interjection = 0x5000,
+}}
+ENUM!{enum SPLEXICONTYPE {
+ eLEXTYPE_USER = 1 << 0,
+ eLEXTYPE_APP = 1 << 1,
+ eLEXTYPE_VENDORLEXICON = 1 << 2,
+ eLEXTYPE_LETTERTOSOUND = 1 << 3,
+ eLEXTYPE_MORPHOLOGY = 1 << 4,
+ eLEXTYPE_RESERVED4 = 1 << 5,
+ eLEXTYPE_USER_SHORTCUT = 1 << 6,
+ eLEXTYPE_RESERVED6 = 1 << 7,
+ eLEXTYPE_RESERVED7 = 1 << 8,
+ eLEXTYPE_RESERVED8 = 1 << 9,
+ eLEXTYPE_RESERVED9 = 1 << 10,
+ eLEXTYPE_RESERVED10 = 1 << 11,
+ eLEXTYPE_PRIVATE1 = 1 << 12,
+ eLEXTYPE_PRIVATE2 = 1 << 13,
+ eLEXTYPE_PRIVATE3 = 1 << 14,
+ eLEXTYPE_PRIVATE4 = 1 << 15,
+ eLEXTYPE_PRIVATE5 = 1 << 16,
+ eLEXTYPE_PRIVATE6 = 1 << 17,
+ eLEXTYPE_PRIVATE7 = 1 << 18,
+ eLEXTYPE_PRIVATE8 = 1 << 19,
+ eLEXTYPE_PRIVATE9 = 1 << 20,
+ eLEXTYPE_PRIVATE10 = 1 << 21,
+ eLEXTYPE_PRIVATE11 = 1 << 22,
+ eLEXTYPE_PRIVATE12 = 1 << 23,
+ eLEXTYPE_PRIVATE13 = 1 << 24,
+ eLEXTYPE_PRIVATE14 = 1 << 25,
+ eLEXTYPE_PRIVATE15 = 1 << 26,
+ eLEXTYPE_PRIVATE16 = 1 << 27,
+ eLEXTYPE_PRIVATE17 = 1 << 28,
+ eLEXTYPE_PRIVATE18 = 1 << 29,
+ eLEXTYPE_PRIVATE19 = 1 << 30,
+ eLEXTYPE_PRIVATE20 = 1 << 31,
+}}
+ENUM!{enum SPWORDTYPE {
+ eWORDTYPE_ADDED = 1 << 0,
+ eWORDTYPE_DELETED = 1 << 1,
+}}
+STRUCT!{struct SPWORDPRONUNCIATION {
+ pNextWordPronunciation: *mut SPWORDPRONUNCIATION,
+ eLexiconType: SPLEXICONTYPE,
+ LangID: WORD,
+ wPronunciationFlags: WORD,
+ ePartOfSpeech: SPPARTOFSPEECH,
+ szPronunciation: [SPPHONEID; 1],
+}}
+STRUCT!{struct SPWORDPRONUNCIATIONLIST {
+ ulSize: ULONG,
+ pvBuffer: *mut BYTE,
+ pFirstWordPronunciation: *mut SPWORDPRONUNCIATION,
+}}
+STRUCT!{struct SPWORD {
+ pNextWord: *mut SPWORD,
+ LangID: WORD,
+ wReserved: WORD,
+ eWordType: SPWORDTYPE,
+ pszWord: LPWSTR,
+ pFirstWordPronunciation: *mut SPWORDPRONUNCIATION,
+}}
+STRUCT!{struct SPWORDLIST {
+ ulSize: ULONG,
+ pvBuffer: *mut BYTE,
+ pFirstWord: *mut SPWORD,
+}}
+RIDL!{#[uuid(0xda41a7c2, 0x5383, 0x4db2, 0x91, 0x6b, 0x6c, 0x17, 0x19, 0xe3, 0xdb, 0x58)]
+interface ISpLexicon(ISpLexiconVtbl): IUnknown(IUnknownVtbl) {
+ fn GetPronunciations(
+ pszWord: LPCWSTR,
+ LangID: WORD,
+ dwFlags: DWORD,
+ pWordPronunciationList: *mut SPWORDPRONUNCIATIONLIST,
+ ) -> HRESULT,
+ fn AddPronunciation(
+ pszWord: LPCWSTR,
+ LangID: WORD,
+ ePartOfSpeech: SPPARTOFSPEECH,
+ pszPronunciation: PCSPPHONEID,
+ ) -> HRESULT,
+ fn RemovePronunciation(
+ pszWord: LPCWSTR,
+ LangID: WORD,
+ ePartOfSpeech: SPPARTOFSPEECH,
+ pszPronunciation: PCSPPHONEID,
+ ) -> HRESULT,
+ fn GetGeneration(
+ pdwGeneration: *mut DWORD,
+ ) -> HRESULT,
+ fn GetGenerationChange(
+ dwFlags: DWORD,
+ pdwGeneration: *mut DWORD,
+ pWordList: *mut SPWORDLIST,
+ ) -> HRESULT,
+ fn GetWords(
+ dwFlags: DWORD,
+ pdwGeneration: *mut DWORD,
+ pdwCookie: *mut DWORD,
+ pWordList: *mut SPWORDLIST,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8565572f, 0xc094, 0x41cc, 0xb5, 0x6e, 0x10, 0xbd, 0x9c, 0x3f, 0xf0, 0x44)]
+interface ISpContainerLexicon(ISpContainerLexiconVtbl): ISpLexicon(ISpLexiconVtbl) {
+ fn AddLexicon(
+ pAddLexicon: *mut ISpLexicon,
+ dwFlags: DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8445c581, 0x0cac, 0x4a38, 0xab, 0xfe, 0x9b, 0x2c, 0xe2, 0x82, 0x64, 0x55)]
+interface ISpPhoneConverter(ISpPhoneConverterVtbl): ISpObjectWithToken(ISpObjectWithTokenVtbl) {
+ fn PhoneToId(
+ pszPhone: LPCWSTR,
+ pId: *mut SPPHONEID,
+ ) -> HRESULT,
+ fn IdToPhone(
+ pId: PCSPPHONEID,
+ pszPhone: *mut WCHAR,
+ ) -> HRESULT,
+}}
+STRUCT!{struct SPVPITCH {
+ MiddleAdj: c_long,
+ RangeAdj: c_long,
+}}
+ENUM!{enum SPVACTIONS {
+ SPVA_Speak = 0,
+ SPVA_Silence,
+ SPVA_Pronounce,
+ SPVA_Bookmark,
+ SPVA_SpellOut,
+ SPVA_Section,
+ SPVA_ParseUnknownTag,
+}}
+STRUCT!{struct SPVCONTEXT {
+ pCategory: LPCWSTR,
+ pBefore: LPCWSTR,
+ pAfter: LPCWSTR,
+}}
+STRUCT!{struct SPVSTATE {
+ eAction: SPVACTIONS,
+ LangID: WORD,
+ wReserved: WORD,
+ EmphAdj: c_long,
+ RateAdj: c_long,
+ Volume: ULONG,
+ PitchAdj: SPVPITCH,
+ SilenceMSecs: ULONG,
+ pPhoneIds: *mut SPPHONEID,
+ ePartOfSpeech: SPPARTOFSPEECH,
+ Context: SPVCONTEXT,
+}}
+ENUM!{enum SPRUNSTATE {
+ SPRS_DONE = 1 << 0,
+ SPRS_IS_SPEAKING = 1 << 1,
+}}
+ENUM!{enum SPVLIMITS {
+ SPMIN_VOLUME = 0,
+ SPMAX_VOLUME = 100,
+ SPMIN_RATE = -10i32 as u32,
+ SPMAX_RATE = 10,
+}}
+ENUM!{enum SPVPRIORITY {
+ SPVPRI_NORMAL = 0,
+ SPVPRI_ALERT = 1 << 0,
+ SPVPRI_OVER = 1 << 1,
+}}
+STRUCT!{struct SPVOICESTATUS {
+ ulCurrentStream: ULONG,
+ ulLastStreamQueued: ULONG,
+ hrLastResult: HRESULT,
+ dwRunningState: DWORD,
+ ulInputWordPos: ULONG,
+ ulInputWordLen: ULONG,
+ ulInputSentPos: ULONG,
+ ulInputSentLen: ULONG,
+ lBookmarkId: LONG,
+ PhonemeId: SPPHONEID,
+ VisemeId: SPVISEMES,
+ dwReserved1: DWORD,
+ dwReserved2: DWORD,
+}}
+ENUM!{enum SPEAKFLAGS {
+ SPF_DEFAULT = 0,
+ SPF_ASYNC = 1 << 0,
+ SPF_PURGEBEFORESPEAK = 1 << 1,
+ SPF_IS_FILENAME = 1 << 2,
+ SPF_IS_XML = 1 << 3,
+ SPF_IS_NOT_XML = 1 << 4,
+ SPF_PERSIST_XML = 1 << 5,
+ SPF_NLP_SPEAK_PUNC = 1 << 6,
+ SPF_NLP_MASK = SPF_NLP_SPEAK_PUNC,
+ SPF_VOICE_MASK = SPF_ASYNC | SPF_PURGEBEFORESPEAK
+ | SPF_IS_FILENAME | SPF_IS_XML | SPF_IS_NOT_XML
+ | SPF_NLP_MASK | SPF_PERSIST_XML,
+ SPF_UNUSED_FLAGS = !SPF_VOICE_MASK,
+}}
+RIDL!{#[uuid(0x6c44df74, 0x72b9, 0x4992, 0xa1, 0xec, 0xef, 0x99, 0x6e, 0x04, 0x22, 0xd4)]
+interface ISpVoice(ISpVoiceVtbl): ISpEventSource(ISpEventSourceVtbl) {
+ fn SetOutput(
+ pUnkOutput: *mut IUnknown,
+ fAllowFormatChanges: BOOL,
+ ) -> HRESULT,
+ fn GetOutputObjectToken(
+ ppObjectToken: *mut *mut ISpObjectToken,
+ ) -> HRESULT,
+ fn GetOutputStream(
+ ppStream: *mut *mut ISpStreamFormat,
+ ) -> HRESULT,
+ fn Pause() -> HRESULT,
+ fn Resume() -> HRESULT,
+ fn SetVoice(
+ pToken: *mut ISpObjectToken,
+ ) -> HRESULT,
+ fn GetVoice(
+ ppToken: *mut *mut ISpObjectToken,
+ ) -> HRESULT,
+ fn Speak(
+ pwcs: LPCWSTR,
+ dwFlags: DWORD,
+ pulStreamNumber: *mut ULONG,
+ ) -> HRESULT,
+ fn SpeakStream(
+ pStream: *mut IStream,
+ dwFlags: DWORD,
+ pulStreamNumber: *mut ULONG,
+ ) -> HRESULT,
+ fn GetStatus(
+ pStatus: *mut SPVOICESTATUS,
+ ppszLastBookmark: *mut LPWSTR,
+ ) -> HRESULT,
+ fn Skip(
+ pItemType: LPCWSTR,
+ lNumItems: c_long,
+ pulNumSkipped: *mut ULONG,
+ ) -> HRESULT,
+ fn SetPriority(
+ ePriority: SPVPRIORITY,
+ ) -> HRESULT,
+ fn GetPriority(
+ pePriority: *mut SPVPRIORITY,
+ ) -> HRESULT,
+ fn SetAlertBoundary(
+ eBoundary: SPEVENTENUM,
+ ) -> HRESULT,
+ fn GetAlertBoundary(
+ peBoundary: *mut SPEVENTENUM,
+ ) -> HRESULT,
+ fn SetRate(
+ RateAdjust: c_long,
+ ) -> HRESULT,
+ fn GetRate(
+ pRateAdjust: *mut c_long,
+ ) -> HRESULT,
+ fn SetVolume(
+ usVolume: USHORT,
+ ) -> HRESULT,
+ fn GetVolume(
+ pusVolume: *mut USHORT,
+ ) -> HRESULT,
+ fn WaitUntilDone(
+ msTimeout: ULONG,
+ ) -> HRESULT,
+ fn SetSyncSpeakTimeout(
+ msTimeout: ULONG,
+ ) -> HRESULT,
+ fn GetSyncSpeakTimeout(
+ pmsTimeout: *mut ULONG,
+ ) -> HRESULT,
+ fn SpeakCompleteEvent() -> HANDLE,
+ fn IsUISupported(
+ pszTypeOfUI: LPCWSTR,
+ pvExtraData: *mut c_void,
+ cbExtraData: ULONG,
+ pfSupported: *mut BOOL,
+ ) -> HRESULT,
+ fn DisplayUI(
+ hwndParent: HWND,
+ pszTitle: LPCWSTR,
+ pszTypeOfUI: LPCWSTR,
+ pvExtraData: *mut c_void,
+ cbExtraData: ULONG,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x1a5c0354, 0xb621, 0x4b5a, 0x87, 0x91, 0xd3, 0x06, 0xed, 0x37, 0x9e, 0x53)]
+interface ISpPhrase(ISpPhraseVtbl): IUnknown(IUnknownVtbl) {
+ fn GetPhrase(
+ ppCoMemPhrase: *mut *mut SPPHRASE,
+ ) -> HRESULT,
+ fn GetSerializedPhrase(
+ ppCoMemPhrase: *mut *mut SPSERIALIZEDPHRASE,
+ ) -> HRESULT,
+ fn GetText(
+ ulStart: ULONG,
+ ulCount: ULONG,
+ fUseTextReplacements: BOOL,
+ ppszCoMemText: *mut LPWSTR,
+ pbDisplayAttributes: *mut BYTE,
+ ) -> HRESULT,
+ fn Discard(
+ dwValueTypes: DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8fcebc98, 0x4e49, 0x4067, 0x9c, 0x6c, 0xd8, 0x6a, 0x0e, 0x09, 0x2e, 0x3d)]
+interface ISpPhraseAlt(ISpPhraseAltVtbl): ISpPhrase(ISpPhraseVtbl) {
+ fn GetAltInfo(
+ pParent: *mut *mut ISpPhrase,
+ pulStartElementInParent: *mut ULONG,
+ pcElementsInParent: *mut ULONG,
+ pcElementsInAlt: *mut ULONG,
+ ) -> HRESULT,
+ fn Commit() -> HRESULT,
+}}
+STRUCT!{struct SPRECORESULTTIMES {
+ ftStreamTime: FILETIME,
+ ullLength: ULONGLONG,
+ dwTickCount: DWORD,
+ ullStart: ULONGLONG,
+}}
+STRUCT!{struct SPSERIALIZEDRESULT {
+ ulSerializedSize: ULONG,
+}}
+RIDL!{#[uuid(0x20b053be, 0xe235, 0x43cd, 0x9a, 0x2a, 0x8d, 0x17, 0xa4, 0x8b, 0x78, 0x42)]
+interface ISpRecoResult(ISpRecoResultVtbl): ISpPhrase(ISpPhraseVtbl) {
+ fn GetResultTimes(
+ pTimes: *mut SPRECORESULTTIMES,
+ ) -> HRESULT,
+ fn GetAlternates(
+ ulStartElement: ULONG,
+ cElements: ULONG,
+ ulRequestCount: ULONG,
+ ppPhrases: *mut *mut ISpPhraseAlt,
+ pcPhrasesReturned: *mut ULONG,
+ ) -> HRESULT,
+ fn GetAudio(
+ ulStartElement: ULONG,
+ cElements: ULONG,
+ ppStream: *mut *mut ISpStreamFormat,
+ ) -> HRESULT,
+ fn SpeakAudio(
+ ulStartElement: ULONG,
+ cElements: ULONG,
+ dwFlags: DWORD,
+ pulStreamNumber: *mut ULONG,
+ ) -> HRESULT,
+ fn Serialize(
+ ppCoMemSerializedResult: *mut *mut SPSERIALIZEDRESULT,
+ ) -> HRESULT,
+ fn ScaleAudio(
+ pAudioFormatId: *const GUID,
+ pWaveFormatEx: *const WAVEFORMATEX,
+ ) -> HRESULT,
+ fn GetRecoContext(
+ ppRecoContext: *mut *mut ISpRecoContext,
+ ) -> HRESULT,
+}}
+STRUCT!{struct SPTEXTSELECTIONINFO {
+ ulStartActiveOffset: ULONG,
+ cchActiveChars: ULONG,
+ ulStartSelection: ULONG,
+ cchSelection: ULONG,
+}}
+ENUM!{enum SPWORDPRONOUNCEABLE {
+ SPWP_UNKNOWN_WORD_UNPRONOUNCEABLE = 0,
+ SPWP_UNKNOWN_WORD_PRONOUNCEABLE = 1,
+ SPWP_KNOWN_WORD_PRONOUNCEABLE = 2,
+}}
+ENUM!{enum SPGRAMMARSTATE {
+ SPGS_DISABLED = 0,
+ SPGS_ENABLED = 1,
+ SPGS_EXCLUSIVE = 3,
+}}
+ENUM!{enum SPCONTEXTSTATE {
+ SPCS_DISABLED = 0,
+ SPCS_ENABLED = 1,
+}}
+ENUM!{enum SPRULESTATE {
+ SPRS_INACTIVE = 0,
+ SPRS_ACTIVE = 1,
+ SPRS_ACTIVE_WITH_AUTO_PAUSE = 3,
+}}
+pub const SP_STREAMPOS_ASAP: ULONGLONG = 0;
+pub const SP_STREAMPOS_REALTIME: ULONGLONG = -1i64 as u64;
+pub const SPRULETRANS_TEXTBUFFER: SPSTATEHANDLE = -1isize as SPSTATEHANDLE;
+pub const SPRULETRANS_WILDCARD: SPSTATEHANDLE = -2isize as SPSTATEHANDLE;
+pub const SPRULETRANS_DICTATION: SPSTATEHANDLE = -3isize as SPSTATEHANDLE;
+ENUM!{enum SPGRAMMARWORDTYPE {
+ SPWT_DISPLAY,
+ SPWT_LEXICAL,
+ SPWT_PRONUNCIATION,
+ SPWT_LEXICAL_NO_SPECIAL_CHARS,
+}}
+STRUCT!{struct SPPROPERTYINFO {
+ pszName: LPCWSTR,
+ ulId: ULONG,
+ pszValue: LPCWSTR,
+ vValue: VARIANT,
+}}
+ENUM!{enum SPCFGRULEATTRIBUTES {
+ SPRAF_TopLevel = 1 << 0,
+ SPRAF_Active = 1 << 1,
+ SPRAF_Export = 1 << 2,
+ SPRAF_Import = 1 << 3,
+ SPRAF_Interpreter = 1 << 4,
+ SPRAF_Dynamic = 1 << 5,
+ SPRAF_AutoPause = 1 << 16,
+}}
+RIDL!{#[uuid(0x8137828f, 0x591a, 0x4a42, 0xbe, 0x58, 0x49, 0xea, 0x7e, 0xba, 0xac, 0x68)]
+interface ISpGrammarBuilder(ISpGrammarBuilderVtbl): IUnknown(IUnknownVtbl) {
+ fn ResetGrammar(
+ NewLanguage: WORD,
+ ) -> HRESULT,
+ fn GetRule(
+ pszRuleName: LPCWSTR,
+ dwRuleId: DWORD,
+ dwAttributes: DWORD,
+ fCreateIfNotExist: BOOL,
+ phInitialState: *mut SPSTATEHANDLE,
+ ) -> HRESULT,
+ fn ClearRule(
+ hState: SPSTATEHANDLE,
+ ) -> HRESULT,
+ fn CreateNewState(
+ hState: SPSTATEHANDLE,
+ phState: *mut SPSTATEHANDLE,
+ ) -> HRESULT,
+ fn AddWordTransition(
+ hFromState: SPSTATEHANDLE,
+ hToState: SPSTATEHANDLE,
+ psz: LPCWSTR,
+ pszSeparators: LPCWSTR,
+ eWordType: SPGRAMMARWORDTYPE,
+ Weight: c_float,
+ pPropInfo: *const SPPROPERTYINFO,
+ ) -> HRESULT,
+ fn AddRuleTransition(
+ hFromState: SPSTATEHANDLE,
+ hToState: SPSTATEHANDLE,
+ hRule: SPSTATEHANDLE,
+ Weight: c_float,
+ pPropInfo: *const SPPROPERTYINFO,
+ ) -> HRESULT,
+ fn AddResource(
+ hRuleState: SPSTATEHANDLE,
+ pszResourceName: LPCWSTR,
+ pszResourceValue: LPCWSTR,
+ ) -> HRESULT,
+ fn Commit(
+ dwReserved: DWORD,
+ ) -> HRESULT,
+}}
+ENUM!{enum SPLOADOPTIONS {
+ SPLO_STATIC = 0,
+ SPLO_DYNAMIC = 1,
+}}
+RIDL!{#[uuid(0x2177db29, 0x7f45, 0x47d0, 0x85, 0x54, 0x06, 0x7e, 0x91, 0xc8, 0x05, 0x02)]
+interface ISpRecoGrammar(ISpRecoGrammarVtbl): ISpGrammarBuilder(ISpGrammarBuilderVtbl) {
+ fn GetGrammarId(
+ pullGrammarId: *mut ULONGLONG,
+ ) -> HRESULT,
+ fn GetRecoContext(
+ ppRecoCtxt: *mut *mut ISpRecoContext,
+ ) -> HRESULT,
+ fn LoadCmdFromFile(
+ pszFileName: LPCWSTR,
+ Options: SPLOADOPTIONS,
+ ) -> HRESULT,
+ fn LoadCmdFromObject(
+ rcid: REFCLSID,
+ pszGrammarName: LPCWSTR,
+ Options: SPLOADOPTIONS,
+ ) -> HRESULT,
+ fn LoadCmdFromResource(
+ hModule: HMODULE,
+ pszResourceName: LPCWSTR,
+ pszResourceType: LPCWSTR,
+ wLanguage: WORD,
+ Options: SPLOADOPTIONS,
+ ) -> HRESULT,
+ fn LoadCmdFromMemory(
+ pGrammar: *const SPBINARYGRAMMAR,
+ Options: SPLOADOPTIONS,
+ ) -> HRESULT,
+ fn LoadCmdFromProprietaryGrammar(
+ rguidParam: REFGUID,
+ pszStringParam: LPCWSTR,
+ pvDataPrarm: *const c_void,
+ cbDataSize: ULONG,
+ Options: SPLOADOPTIONS,
+ ) -> HRESULT,
+ fn SetRuleState(
+ pszName: LPCWSTR,
+ pReserved: *mut c_void,
+ NewState: SPRULESTATE,
+ ) -> HRESULT,
+ fn SetRuleIdState(
+ ulRuleId: ULONG,
+ NewState: SPRULESTATE,
+ ) -> HRESULT,
+ fn LoadDictation(
+ pszTopicName: LPCWSTR,
+ Options: SPLOADOPTIONS,
+ ) -> HRESULT,
+ fn UnloadDictation() -> HRESULT,
+ fn SetDictationState(
+ NewState: SPRULESTATE,
+ ) -> HRESULT,
+ fn SetWordSequenceData(
+ pText: *const WCHAR,
+ cchText: ULONG,
+ pInfo: *const SPTEXTSELECTIONINFO,
+ ) -> HRESULT,
+ fn SetTextSelection(
+ pInfo: *const SPTEXTSELECTIONINFO,
+ ) -> HRESULT,
+ fn IsPronounceable(
+ pszWord: LPCWSTR,
+ pWordPronounceable: *mut SPWORDPRONOUNCEABLE,
+ ) -> HRESULT,
+ fn SetGrammarState(
+ eGrammarState: SPGRAMMARSTATE,
+ ) -> HRESULT,
+ fn SaveCmd(
+ pStream: *mut IStream,
+ ppszCoMemErrorText: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetGrammarState(
+ peGrammarState: *mut SPGRAMMARSTATE,
+ ) -> HRESULT,
+}}
+STRUCT!{struct SPRECOCONTEXTSTATUS {
+ eInterference: SPINTERFERENCE,
+ szRequestTypeOfUI: [WCHAR; 255],
+ dwReserved1: DWORD,
+ dwReserved2: DWORD,
+}}
+ENUM!{enum SPBOOKMARKOPTIONS {
+ SPBO_NONE = 0,
+ SPBO_PAUSE = 1 << 0,
+}}
+ENUM!{enum SPAUDIOOPTIONS {
+ SPAO_NONE = 0,
+ SPAO_RETAIN_AUDIO = 1 << 0,
+}}
+RIDL!{#[uuid(0xf740a62f, 0x7c15, 0x489e, 0x82, 0x34, 0x94, 0x0a, 0x33, 0xd9, 0x27, 0x2d)]
+interface ISpRecoContext(ISpRecoContextVtbl): ISpEventSource(ISpEventSourceVtbl) {
+ fn GetRecognizer(
+ ppRecognizer: *mut *mut ISpRecognizer,
+ ) -> HRESULT,
+ fn CreateGrammer(
+ ullGrammarId: ULONGLONG,
+ ppGrammar: *mut *mut ISpRecoGrammar,
+ ) -> HRESULT,
+ fn GetStatus(
+ pState: *mut SPRECOCONTEXTSTATUS,
+ ) -> HRESULT,
+ fn GetMaxAlternates(
+ pcAlternates: *mut ULONG,
+ ) -> HRESULT,
+ fn SetMaxAlternates(
+ cAlternates: ULONG,
+ ) -> HRESULT,
+ fn SetAudioOptions(
+ Options: SPAUDIOOPTIONS,
+ pAudioFormatId: *const GUID,
+ pWaveFormatEx: *const WAVEFORMATEX,
+ ) -> HRESULT,
+ fn GetAudioOptions(
+ pOptions: *mut SPAUDIOOPTIONS,
+ pAudioFormatId: *mut GUID,
+ ppCoMemWFEX: *mut *mut WAVEFORMATEX,
+ ) -> HRESULT,
+ fn DeserializeResult(
+ pSerializedResult: *const SPSERIALIZEDRESULT,
+ ppResult: *mut *mut ISpRecoResult,
+ ) -> HRESULT,
+ fn Bookmark(
+ Options: SPBOOKMARKOPTIONS,
+ ullStreamPosition: ULONGLONG,
+ lparamEvent: LPARAM,
+ ) -> HRESULT,
+ fn SetAdaptionData(
+ pAdaptionData: LPCWSTR,
+ cch: ULONG,
+ ) -> HRESULT,
+ fn Pause(
+ dwReserved: DWORD,
+ ) -> HRESULT,
+ fn Resume(
+ dwReserved: DWORD,
+ ) -> HRESULT,
+ fn SetVoice(
+ pVoice: *mut ISpVoice,
+ fAllowFormatChanges: BOOL,
+ ) -> HRESULT,
+ fn GetVoice(
+ ppVoice: *mut *mut ISpVoice,
+ ) -> HRESULT,
+ fn SetVoicePurgeEvent(
+ ullEventIntereset: ULONGLONG,
+ ) -> HRESULT,
+ fn GetVoicePurgeEvent(
+ pullEventIntereset: *mut ULONGLONG,
+ ) -> HRESULT,
+ fn SetContextState(
+ eContextState: SPCONTEXTSTATE,
+ ) -> HRESULT,
+ fn GetContextState(
+ peContextState: *mut SPCONTEXTSTATE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x5b4fb971, 0xb115, 0x4de1, 0xad, 0x97, 0xe4, 0x82, 0xe3, 0xbf, 0x6e, 0xe4)]
+interface ISpProperties(ISpPropertiesVtbl): IUnknown(IUnknownVtbl) {
+ fn SetPropertyNum(
+ pName: LPCWSTR,
+ lValue: LONG,
+ ) -> HRESULT,
+ fn GetPropertyNum(
+ pName: LPCWSTR,
+ plValue: *mut LONG,
+ ) -> HRESULT,
+ fn SetPropertyString(
+ pName: LPCWSTR,
+ pValue: LPCWSTR,
+ ) -> HRESULT,
+ fn GetPropertyString(
+ pName: LPCWSTR,
+ ppCoMemValue: *mut LPWSTR,
+ ) -> HRESULT,
+}}
+pub const SP_MAX_LANGIDS: usize = 20;
+STRUCT!{struct SPRECOGNIZERSTATUS {
+ AudioStatus: SPAUDIOSTATUS,
+ ullRecognitionStreamPos: ULONGLONG,
+ ulStreamNumber: ULONG,
+ ulNumActive: ULONG,
+ clsidEngine: CLSID,
+ cLangIDs: ULONG,
+ aLangID: [WORD; SP_MAX_LANGIDS],
+ ullRecognitionStreamTime: ULONGLONG,
+}}
+ENUM!{enum SPWAVEFORMATTYPE {
+ SPWF_INPUT,
+ SPWF_SRENGINE,
+}}
+pub type SPSTREAMFORMATTYPE = SPWAVEFORMATTYPE;
+ENUM!{enum SPRECOSTATE {
+ SPRST_INACTIVE,
+ SPRST_ACTIVE,
+ SPRST_ACTIVE_ALWAYS,
+ SPRST_INACTIVE_WITH_PURGE,
+ SPRST_NUM_STATES,
+}}
+RIDL!{#[uuid(0xc2b5f241, 0xdaa0, 0x4507, 0x9e, 0x16, 0x5a, 0x1e, 0xaa, 0x2b, 0x7a, 0x5c)]
+interface ISpRecognizer(ISpRecognizerVtbl): ISpProperties(ISpPropertiesVtbl) {
+ fn SetRecognizer(
+ pRecognizer: *mut ISpObjectToken,
+ ) -> HRESULT,
+ fn GetRecognizer(
+ ppRecognizer: *mut *mut ISpObjectToken,
+ ) -> HRESULT,
+ fn SetInput(
+ pUnkInput: *mut IUnknown,
+ fAllowFormatChanges: BOOL,
+ ) -> HRESULT,
+ fn GetInputObjectToken(
+ ppToken: *mut *mut ISpObjectToken,
+ ) -> HRESULT,
+ fn GetInputStream(
+ ppStream: *mut *mut ISpStreamFormat,
+ ) -> HRESULT,
+ fn CreateRecoContext(
+ ppNewCtxt: *mut *mut ISpRecoContext,
+ ) -> HRESULT,
+ fn GetRecoProfile(
+ ppToken: *mut *mut ISpObjectToken,
+ ) -> HRESULT,
+ fn SetRecoProfile(
+ pToken: *mut ISpObjectToken,
+ ) -> HRESULT,
+ fn IsSharedInstance() -> HRESULT,
+ fn GetRecoState(
+ pState: *mut SPRECOSTATE,
+ ) -> HRESULT,
+ fn SetRecoState(
+ NewState: SPRECOSTATE,
+ ) -> HRESULT,
+ fn GetStatus(
+ pStatus: *mut SPRECOGNIZERSTATUS,
+ ) -> HRESULT,
+ fn GetFormat(
+ WaveFormatType: SPSTREAMFORMATTYPE,
+ pFormatId: *mut GUID,
+ ppCoMemWFEX: *mut WAVEFORMATEX,
+ ) -> HRESULT,
+ fn IsUISupported(
+ pszTypeOfUI: LPCWSTR,
+ pvExtraData: *mut c_void,
+ cbExtraData: ULONG,
+ pfSupported: *mut BOOL,
+ ) -> HRESULT,
+ fn DisplayUI(
+ hwndParent: HWND,
+ pszTitle: LPCWSTR,
+ pszTypeOfUI: LPCWSTR,
+ pvExtraData: *mut c_void,
+ cbExtraData: ULONG,
+ ) -> HRESULT,
+ fn EmulateRecognition(
+ pPhrase: *mut ISpPhrase,
+ ) -> HRESULT,
+}}
+pub type SpeechLanguageId = c_long;
+ENUM!{enum DISPID_SpeechDataKey {
+ DISPID_SDKSetBinaryValue = 1,
+ DISPID_SDKGetBinaryValue,
+ DISPID_SDKSetStringValue,
+ DISPID_SDKGetStringValue,
+ DISPID_SDKSetLongValue,
+ DISPID_SDKGetlongValue,
+ DISPID_SDKOpenKey,
+ DISPID_SDKCreateKey,
+ DISPID_SDKDeleteKey,
+ DISPID_SDKDeleteValue,
+ DISPID_SDKEnumKeys,
+ DISPID_SDKEnumValues,
+}}
+ENUM!{enum DISPID_SpeechObjectToken {
+ DISPID_SOTId = 1,
+ DISPID_SOTDataKey,
+ DISPID_SOTCategory,
+ DISPID_SOTGetDescription,
+ DISPID_SOTSetId,
+ DISPID_SOTGetAttribute,
+ DISPID_SOTCreateInstance,
+ DISPID_SOTRemove,
+ DISPID_SOTGetStorageFileName,
+ DISPID_SOTRemoveStorageFileName,
+ DISPID_SOTIsUISupported,
+ DISPID_SOTDisplayUI,
+ DISPID_SOTMatchesAttributes,
+}}
+ENUM!{enum SpeechDataKeyLocation {
+ SDKLDefaultLocation = SPDKL_DefaultLocation,
+ SDKLCurrentUser = SPDKL_CurrentUser,
+ SDKLLocalMachine = SPDKL_LocalMachine,
+ SDKLCurrentConfig = SPDKL_CurrentConfig,
+}}
+ENUM!{enum SpeechTokenContext {
+ STCInprocServer = CLSCTX_INPROC_SERVER,
+ STCInprocHandler = CLSCTX_INPROC_HANDLER,
+ STCLocalServer = CLSCTX_LOCAL_SERVER,
+ STCRemoteServer = CLSCTX_REMOTE_SERVER,
+ STCAll = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER
+ | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER,
+}}
+ENUM!{enum SpeechTokenShellFolder {
+ STSF_AppData = 0x1a,
+ STSF_LocalAppData = 0x1c,
+ STSF_CommonAppData = 0x23,
+ STSF_FlagCreate = 0x8000,
+}}
+ENUM!{enum DISPID_SpeechObjectTokens {
+ DISPID_SOTsCount = 1,
+ DISPID_SOTsItem = DISPID_VALUE as u32,
+ DISPID_SOTs_NewEnum = DISPID_NEWENUM as u32,
+}}
+ENUM!{enum DISPID_SpeechObjectTokenCategory {
+ DISPID_SOTCId = 1,
+ DISPID_SOTCDefault,
+ DISPID_SOTCSetId,
+ DISPID_SOTCGetDataKey,
+ DISPID_SOTCEnumerateTokens,
+}}
+ENUM!{enum SpeechAudioFormatType {
+ SAFTDefault = -1i32 as u32,
+ SAFTNoAssignedFormat = 0,
+ SAFTText = 1,
+ SAFTNonStandardFormat = 2,
+ SAFTExtendedAudioFormat = 3,
+ SAFT8kHz8BitMono = 4,
+ SAFT8kHz8BitStereo = 5,
+ SAFT8kHz16BitMono = 6,
+ SAFT8kHz16BitStereo = 7,
+ SAFT11kHz8BitMono = 8,
+ SAFT11kHz8BitStereo = 9,
+ SAFT11kHz16BitMono = 10,
+ SAFT11kHz16BitStereo = 11,
+ SAFT12kHz8BitMono = 12,
+ SAFT12kHz8BitStereo = 13,
+ SAFT12kHz16BitMono = 14,
+ SAFT12kHz16BitStereo = 15,
+ SAFT16kHz8BitMono = 16,
+ SAFT16kHz8BitStereo = 17,
+ SAFT16kHz16BitMono = 18,
+ SAFT16kHz16BitStereo = 19,
+ SAFT22kHz8BitMono = 20,
+ SAFT22kHz8BitStereo = 21,
+ SAFT22kHz16BitMono = 22,
+ SAFT22kHz16BitStereo = 23,
+ SAFT24kHz8BitMono = 24,
+ SAFT24kHz8BitStereo = 25,
+ SAFT24kHz16BitMono = 26,
+ SAFT24kHz16BitStereo = 27,
+ SAFT32kHz8BitMono = 28,
+ SAFT32kHz8BitStereo = 29,
+ SAFT32kHz16BitMono = 30,
+ SAFT32kHz16BitStereo = 31,
+ SAFT44kHz8BitMono = 32,
+ SAFT44kHz8BitStereo = 33,
+ SAFT44kHz16BitMono = 34,
+ SAFT44kHz16BitStereo = 35,
+ SAFT48kHz8BitMono = 36,
+ SAFT48kHz8BitStereo = 37,
+ SAFT48kHz16BitMono = 38,
+ SAFT48kHz16BitStereo = 39,
+ SAFTTrueSpeech_8kHz1BitMono = 40,
+ SAFTCCITT_ALaw_8kHzMono = 41,
+ SAFTCCITT_ALaw_8kHzStereo = 42,
+ SAFTCCITT_ALaw_11kHzMono = 43,
+ SAFTCCITT_ALaw_11kHzStereo = 44,
+ SAFTCCITT_ALaw_22kHzMono = 45,
+ SAFTCCITT_ALaw_22kHzStereo = 46,
+ SAFTCCITT_ALaw_44kHzMono = 47,
+ SAFTCCITT_ALaw_44kHzStereo = 48,
+ SAFTCCITT_uLaw_8kHzMono = 49,
+ SAFTCCITT_uLaw_8kHzStereo = 50,
+ SAFTCCITT_uLaw_11kHzMono = 51,
+ SAFTCCITT_uLaw_11kHzStereo = 52,
+ SAFTCCITT_uLaw_22kHzMono = 53,
+ SAFTCCITT_uLaw_22kHzStereo = 54,
+ SAFTCCITT_uLaw_44kHzMono = 55,
+ SAFTCCITT_uLaw_44kHzStereo = 56,
+ SAFTADPCM_8kHzMono = 57,
+ SAFTADPCM_8kHzStereo = 58,
+ SAFTADPCM_11kHzMono = 59,
+ SAFTADPCM_11kHzStereo = 60,
+ SAFTADPCM_22kHzMono = 61,
+ SAFTADPCM_22kHzStereo = 62,
+ SAFTADPCM_44kHzMono = 63,
+ SAFTADPCM_44kHzStereo = 64,
+ SAFTGSM610_8kHzMono = 65,
+ SAFTGSM610_11kHzMono = 66,
+ SAFTGSM610_22kHzMono = 67,
+ SAFTGSM610_44kHzMono = 68,
+}}
+ENUM!{enum DISPID_SpeechAudioFormat {
+ DISPID_SAFType = 1,
+ DISPID_SAFGuid,
+ DISPID_SAFGetWaveFormatEx,
+ DISPID_SAFSetWaveFormatEx,
+}}
+ENUM!{enum DISPID_SpeechBaseStream {
+ DISPID_SBSFormat = 1,
+ DISPID_SBSRead,
+ DISPID_SBSWrite,
+ DISPID_SBSSeek,
+}}
+ENUM!{enum SpeechStreamSeekPositionType {
+ SSSPTRelativeToStart = STREAM_SEEK_SET,
+ SSSPTRelativeToCurrentPosition = STREAM_SEEK_CUR,
+ SSSPTRelativeToEnd = STREAM_SEEK_END,
+}}
+ENUM!{enum DISPID_SpeechAudio {
+ DISPID_SAStatus = 200,
+ DISPID_SABufferInfo,
+ DISPID_SADefaultFormat,
+ DISPID_SAVolume,
+ DISPID_SABufferNotifySize,
+ DISPID_SAEventHandle,
+ DISPID_SASetState,
+}}
+ENUM!{enum SpeechAudioState {
+ SASClosed = SPAS_CLOSED,
+ SASStop = SPAS_STOP,
+ SASPause = SPAS_PAUSE,
+ SASRun = SPAS_RUN,
+}}
+ENUM!{enum DISPID_SpeechMMSysAudio {
+ DISPID_SMSADeviceId = 300,
+ DISPID_SMSALineId,
+ DISPID_SMSAMMHandle,
+}}
+ENUM!{enum DISPID_SpeechFileStream {
+ DISPID_SFSOpen = 100,
+ DISPID_SFSClose,
+}}
+ENUM!{enum SpeechStreamFileMode {
+ SSFMOpenForRead = SPFM_OPEN_READONLY,
+ SSFMOpenReadWrite = SPFM_OPEN_READWRITE,
+ SSFMCreate = SPFM_CREATE,
+ SSFMCreateForWrite = SPFM_CREATE_ALWAYS,
+}}
+ENUM!{enum DISPID_SpeechCustomStream {
+ DISPID_SCSBaseStream = 100,
+}}
+ENUM!{enum DISPID_SpeechMemoryStream {
+ DISPID_SMSSetData = 100,
+ DISPID_SMSGetData,
+}}
+ENUM!{enum DISPID_SpeechAudioStatus {
+ DISPID_SASFreeBufferSpace = 1,
+ DISPID_SASNonBlockingIO,
+ DISPID_SASState,
+ DISPID_SASCurrentSeekPosition,
+ DISPID_SASCurrentDevicePosition,
+}}
+ENUM!{enum DISPID_SpeechAudioBufferInfo {
+ DISPID_SABIMinNotification = 1,
+ DISPID_SABIBufferSize,
+ DISPID_SABIEventBias,
+}}
+ENUM!{enum DISPID_SpeechWaveFormatEx {
+ DISPID_SWFEFormatTag = 1,
+ DISPID_SWFEChannels,
+ DISPID_SWFESamplesPerSec,
+ DISPID_SWFEAvgBytesPerSec,
+ DISPID_SWFEBlockAlign,
+ DISPID_SWFEBitsPerSample,
+ DISPID_SWFEExtraData,
+}}
+ENUM!{enum DISPID_SpeechVoice {
+ DISPID_SVStatus = 1,
+ DISPID_SVVoice,
+ DISPID_SVAudioOutput,
+ DISPID_SVAudioOutputStream,
+ DISPID_SVRate,
+ DISPID_SVVolume,
+ DISPID_SVAllowAudioOuputFormatChangesOnNextSet,
+ DISPID_SVEventInterests,
+ DISPID_SVPriority,
+ DISPID_SVAlertBoundary,
+ DISPID_SVSyncronousSpeakTimeout,
+ DISPID_SVSpeak,
+ DISPID_SVSpeakStream,
+ DISPID_SVPause,
+ DISPID_SVResume,
+ DISPID_SVSkip,
+ DISPID_SVGetVoices,
+ DISPID_SVGetAudioOutputs,
+ DISPID_SVWaitUntilDone,
+ DISPID_SVSpeakCompleteEvent,
+ DISPID_SVIsUISupported,
+ DISPID_SVDisplayUI,
+}}
+ENUM!{enum SpeechVoicePriority {
+ SVPNormal = SPVPRI_NORMAL,
+ SVPAlert = SPVPRI_ALERT,
+ SVPOver = SPVPRI_OVER,
+}}
+ENUM!{enum SpeechVoiceSpeakFlags {
+ SVSFDefault = SPF_DEFAULT,
+ SVSFlagsAsync = SPF_ASYNC,
+ SVSFPurgeBeforeSpeak = SPF_PURGEBEFORESPEAK,
+ SVSFIsFilename = SPF_IS_FILENAME,
+ SVSFIsXML = SPF_IS_XML,
+ SVSFIsNotXML = SPF_IS_NOT_XML,
+ SVSFPersistXML = SPF_PERSIST_XML,
+ SVSFNLPSpeakPunc = SPF_NLP_SPEAK_PUNC,
+ SVSFNLPMask = SPF_NLP_MASK,
+ SVSFVoiceMask = SPF_VOICE_MASK as u32,
+ SVSFUnusedFlags = SPF_UNUSED_FLAGS as u32,
+}}
+ENUM!{enum SpeechVoiceEvents {
+ SVEStartInputStream = 1 << 1,
+ SVEEndInputStream = 1 << 2,
+ SVEVoiceChange = 1 << 3,
+ SVEBookmark = 1 << 4,
+ SVEWordBoundary = 1 << 5,
+ SVEPhoneme = 1 << 6,
+ SVESentenceBoundary = 1 << 7,
+ SVEViseme = 1 << 8,
+ SVEAudioLevel = 1 << 9,
+ SVEPrivate = 1 << 15,
+ SVEAllEvents = 0x83fe,
+}}
+ENUM!{enum DISPID_SpeechVoiceStatus {
+ DISPID_SVSCurrentStreamNumber = 1,
+ DISPID_SVSLastStreamNumberQueued,
+ DISPID_SVSLastResult,
+ DISPID_SVSRunningState,
+ DISPID_SVSInputWordPosition,
+ DISPID_SVSInputWordLength,
+ DISPID_SVSInputSentencePosition,
+ DISPID_SVSInputSentenceLength,
+ DISPID_SVSLastBookmark,
+ DISPID_SVSLastBookmarkId,
+ DISPID_SVSPhonemeId,
+ DISPID_SVSVisemeId,
+}}
+ENUM!{enum SpeechRunState {
+ SRSEDone = SPRS_DONE,
+ SRSEIsSpeaking = SPRS_IS_SPEAKING,
+}}
+ENUM!{enum SpeechVisemeType {
+ SVP_0 = 0,
+ SVP_1,
+ SVP_2,
+ SVP_3,
+ SVP_4,
+ SVP_5,
+ SVP_6,
+ SVP_7,
+ SVP_8,
+ SVP_9,
+ SVP_10,
+ SVP_11,
+ SVP_12,
+ SVP_13,
+ SVP_14,
+ SVP_15,
+ SVP_16,
+ SVP_17,
+ SVP_18,
+ SVP_19,
+ SVP_20,
+ SVP_21,
+}}
+ENUM!{enum SpeechVisemeFeature {
+ SVF_None = 0,
+ SVF_Stressed = SPVFEATURE_STRESSED,
+ SVF_Emphasis = SPVFEATURE_EMPHASIS,
+}}
+ENUM!{enum DISPID_SpeechVoiceEvent {
+ DISPID_SVEStreamStart = 1,
+ DISPID_SVEStreamEnd,
+ DISPID_SVEVoiceChange,
+ DISPID_SVEBookmark,
+ DISPID_SVEWord,
+ DISPID_SVEPhoneme,
+ DISPID_SVESentenceBoundary,
+ DISPID_SVEViseme,
+ DISPID_SVEAudioLevel,
+ DISPID_SVEEnginePrivate,
+}}
+ENUM!{enum DISPID_SpeechRecognizer {
+ DISPID_SRRecognizer = 1,
+ DISPID_SRAllowAudioInputFormatChangesOnNextSet,
+ DISPID_SRAudioInput,
+ DISPID_SRAudioInputStream,
+ DISPID_SRIsShared,
+ DISPID_SRState,
+ DISPID_SRStatus,
+ DISPID_SRProfile,
+ DISPID_SREmulateRecognition,
+ DISPID_SRCreateRecoContext,
+ DISPID_SRGetFormat,
+ DISPID_SRSetPropertyNumber,
+ DISPID_SRGetPropertyNumber,
+ DISPID_SRSetPropertyString,
+ DISPID_SRGetPropertyString,
+ DISPID_SRIsUISupported,
+ DISPID_SRDisplayUI,
+ DISPID_SRGetRecognizers,
+ DISPID_SVGetAudioInputs,
+ DISPID_SVGetProfiles,
+}}
+ENUM!{enum SpeechRecognizerState {
+ SRSInactive = SPRST_INACTIVE,
+ SRSActive = SPRST_ACTIVE,
+ SRSActiveAlways = SPRST_ACTIVE_ALWAYS,
+ SRSInactiveWithPurge = SPRST_INACTIVE_WITH_PURGE,
+}}
+ENUM!{enum SpeechDisplayAttributes {
+ SDA_No_Trailing_Space = 0,
+ SDA_One_Trailing_Space = SPAF_ONE_TRAILING_SPACE,
+ SDA_Two_Trailing_Spaces = SPAF_TWO_TRAILING_SPACES,
+ SDA_Consume_Leading_Spaces = SPAF_CONSUME_LEADING_SPACES,
+}}
+ENUM!{enum SpeechFormatType {
+ SFTInput = SPWF_INPUT,
+ SFTSREngine = SPWF_SRENGINE,
+}}
+ENUM!{enum DISPID_SpeechRecognizerStatus {
+ DISPID_SRSAudioStatus = 1,
+ DISPID_SRSCurrentStreamPosition,
+ DISPID_SRSCurrentStreamNumber,
+ DISPID_SRSNumberOfActiveRules,
+ DISPID_SRSClsidEngine,
+ DISPID_SRSSupportedLanguages,
+}}
+ENUM!{enum DISPID_SpeechRecoContext {
+ DISPID_SRCRecognizer = 1,
+ DISPID_SRCAudioInInterferenceStatus,
+ DISPID_SRCRequestedUIType,
+ DISPID_SRCVoice,
+ DISPID_SRAllowVoiceFormatMatchingOnNextSet,
+ DISPID_SRCVoicePurgeEvent,
+ DISPID_SRCEventInterests,
+ DISPID_SRCCmdMaxAlternates,
+ DISPID_SRCState,
+ DISPID_SRCRetainedAudio,
+ DISPID_SRCRetainedAudioFormat,
+ DISPID_SRCPause,
+ DISPID_SRCResume,
+ DISPID_SRCCreateGrammar,
+ DISPID_SRCCreateResultFromMemory,
+ DISPID_SRCBookmark,
+ DISPID_SRCSetAdaptationData,
+}}
+ENUM!{enum SpeechRetainedAudioOptions {
+ SRAONone = SPAO_NONE,
+ SRAORetainAudio = SPAO_RETAIN_AUDIO,
+}}
+ENUM!{enum SpeechBookmarkOptions {
+ SBONone = SPBO_NONE,
+ SBOPause = SPBO_PAUSE,
+}}
+ENUM!{enum SpeechInterference {
+ SINone = SPINTERFERENCE_NONE,
+ SINoise = SPINTERFERENCE_NOISE,
+ SINoSignal = SPINTERFERENCE_NOSIGNAL,
+ SITooLoud = SPINTERFERENCE_TOOLOUD,
+ SITooQuiet = SPINTERFERENCE_TOOQUIET,
+ SITooFast = SPINTERFERENCE_TOOFAST,
+ SITooSlow = SPINTERFERENCE_TOOSLOW,
+}}
+ENUM!{enum SpeechRecoEvents {
+ SREStreamEnd = 1 << 0,
+ SRESoundStart = 1 << 1,
+ SRESoundEnd = 1 << 2,
+ SREPhraseStart = 1 << 3,
+ SRERecognition = 1 << 4,
+ SREHypothesis = 1 << 5,
+ SREBookmark = 1 << 6,
+ SREPropertyNumChange = 1 << 7,
+ SREPropertyStringChange = 1 << 8,
+ SREFalseRecognition = 1 << 9,
+ SREInterference = 1 << 10,
+ SRERequestUI = 1 << 11,
+ SREStateChange = 1 << 12,
+ SREAdaptation = 1 << 13,
+ SREStreamStart = 1 << 14,
+ SRERecoOtherContext = 1 << 15,
+ SREAudioLevel = 1 << 16,
+ SREPrivate = 1 << 18,
+ SREAllEvents = 0x5ffff,
+}}
+ENUM!{enum SpeechRecoContextState {
+ SRCS_Disabled = SPCS_DISABLED,
+ SRCS_Enabled = SPCS_ENABLED,
+}}
+ENUM!{enum DISPIDSPRG {
+ DISPID_SRGId = 1,
+ DISPID_SRGRecoContext,
+ DISPID_SRGState,
+ DISPID_SRGRules,
+ DISPID_SRGReset,
+ DISPID_SRGCommit,
+ DISPID_SRGCmdLoadFromFile,
+ DISPID_SRGCmdLoadFromObject,
+ DISPID_SRGCmdLoadFromResource,
+ DISPID_SRGCmdLoadFromMemory,
+ DISPID_SRGCmdLoadFromProprietaryGrammar,
+ DISPID_SRGCmdSetRuleState,
+ DISPID_SRGCmdSetRuleIdState,
+ DISPID_SRGDictationLoad,
+ DISPID_SRGDictationUnload,
+ DISPID_SRGDictationSetState,
+ DISPID_SRGSetWordSequenceData,
+ DISPID_SRGSetTextSelection,
+ DISPID_SRGIsPronounceable,
+}}
+ENUM!{enum SpeechLoadOption {
+ SLOStatic = SPLO_STATIC,
+ SLODynamic = SPLO_DYNAMIC,
+}}
+ENUM!{enum SpeechWordPronounceable {
+ SWPUnknownWordUnpronounceable = SPWP_UNKNOWN_WORD_UNPRONOUNCEABLE,
+ SWPUnknownWordPronounceable = SPWP_UNKNOWN_WORD_PRONOUNCEABLE,
+ SWPKnownWordPronounceable = SPWP_KNOWN_WORD_PRONOUNCEABLE,
+}}
+ENUM!{enum SpeechGrammarState {
+ SGSEnabled = SPGS_ENABLED,
+ SGSDisabled = SPGS_DISABLED,
+ SGSExclusive = SPGS_EXCLUSIVE,
+}}
+ENUM!{enum SpeechRuleState {
+ SGDSInactive = SPRS_INACTIVE,
+ SGDSActive = SPRS_ACTIVE,
+ SGDSActiveWithAutoPause = SPRS_ACTIVE_WITH_AUTO_PAUSE,
+}}
+ENUM!{enum SpeechRuleAttributes {
+ SRATopLevel = SPRAF_TopLevel,
+ SRADefaultToActive = SPRAF_Active,
+ SRAExport = SPRAF_Export,
+ SRAImport = SPRAF_Import,
+ SRAInterpreter = SPRAF_Interpreter,
+ SRADynamic = SPRAF_Dynamic,
+}}
+ENUM!{enum SpeechGrammarWordType {
+ SGDisplay = SPWT_DISPLAY,
+ SGLexical = SPWT_LEXICAL,
+ SGPronounciation = SPWT_PRONUNCIATION,
+}}
+ENUM!{enum DISPID_SpeechRecoContextEvents {
+ DISPID_SRCEStartStream = 1,
+ DISPID_SRCEEndStream,
+ DISPID_SRCEBookmark,
+ DISPID_SRCESoundStart,
+ DISPID_SRCESoundEnd,
+ DISPID_SRCEPhraseStart,
+ DISPID_SRCERecognition,
+ DISPID_SRCEHypothesis,
+ DISPID_SRCEPropertyNumberChange,
+ DISPID_SRCEPropertyStringChange,
+ DISPID_SRCEFalseRecognition,
+ DISPID_SRCEInterference,
+ DISPID_SRCERequestUI,
+ DISPID_SRCERecognizerStateChange,
+ DISPID_SRCEAdaptation,
+ DISPID_SRCERecognitionForOtherContext,
+ DISPID_SRCEAudioLevel,
+ DISPID_SRCEEnginePrivate,
+}}
+ENUM!{enum SpeechRecognitionType {
+ SRTStandard = 0,
+ SRTAutopause = SPREF_AutoPause,
+ SRTEmulated = SPREF_Emulated,
+}}
+ENUM!{enum DISPID_SpeechGrammarRule {
+ DISPID_SGRAttributes = 1,
+ DISPID_SGRInitialState,
+ DISPID_SGRName,
+ DISPID_SGRId,
+ DISPID_SGRClear,
+ DISPID_SGRAddResource,
+ DISPID_SGRAddState,
+}}
+ENUM!{enum DISPID_SpeechGrammarRules {
+ DISPID_SGRsCount = 1,
+ DISPID_SGRsDynamic,
+ DISPID_SGRsAdd,
+ DISPID_SGRsCommit,
+ DISPID_SGRsCommitAndSave,
+ DISPID_SGRsFindRule,
+ DISPID_SGRsItem = DISPID_VALUE as u32,
+ DISPID_SGRs_NewEnum = DISPID_NEWENUM as u32,
+}}
+ENUM!{enum DISPID_SpeechGrammarRuleState {
+ DISPID_SGRSRule = 1,
+ DISPID_SGRSTransitions,
+ DISPID_SGRSAddWordTransition,
+ DISPID_SGRSAddRuleTransition,
+ DISPID_SGRSAddSpecialTransition,
+}}
+ENUM!{enum SpeechSpecialTransitionType {
+ SSTTWildcard = 1,
+ SSTTDictation,
+ SSTTTextBuffer,
+}}
+ENUM!{enum DISPID_SpeechGrammarRuleStateTransitions {
+ DISPID_SGRSTsCount = 1,
+ DISPID_SGRSTsItem = DISPID_VALUE as u32,
+ DISPID_SGRSTs_NewEnum = DISPID_NEWENUM as u32,
+}}
+ENUM!{enum DISPID_SpeechGrammarRuleStateTransition {
+ DISPID_SGRSTType = 1,
+ DISPID_SGRSTText,
+ DISPID_SGRSTRule,
+ DISPID_SGRSTWeight,
+ DISPID_SGRSTPropertyName,
+ DISPID_SGRSTPropertyId,
+ DISPID_SGRSTPropertyValue,
+ DISPID_SGRSTNextState,
+}}
+ENUM!{enum SpeechGrammarRuleStateTransitionType {
+ SGRSTTEpsilon = 0,
+ SGRSTTWord,
+ SGRSTTRule,
+ SGRSTTDictation,
+ SGRSTTWildcard,
+ SGRSTTTextBuffer,
+}}
+ENUM!{enum DISPIDSPTSI {
+ DISPIDSPTSI_ActiveOffset = 1,
+ DISPIDSPTSI_ActiveLength,
+ DISPIDSPTSI_SelectionOffset,
+ DISPIDSPTSI_SelectionLength,
+}}
+ENUM!{enum DISPID_SpeechRecoResult {
+ DISPID_SRRRecoContext = 1,
+ DISPID_SRRTimes,
+ DISPID_SRRAudioFormat,
+ DISPID_SRRPhraseInfo,
+ DISPID_SRRAlternates,
+ DISPID_SRRAudio,
+ DISPID_SRRSpeakAudio,
+ DISPID_SRRSaveToMemory,
+ DISPID_SRRDiscardResultInfo,
+}}
+ENUM!{enum SpeechDiscardType {
+ SDTProperty = SPDF_PROPERTY,
+ SDTReplacement = SPDF_REPLACEMENT,
+ SDTRule = SPDF_RULE,
+ SDTDisplayText = SPDF_DISPLAYTEXT,
+ SDTLexicalForm = SPDF_LEXICALFORM,
+ SDTPronunciation = SPDF_PRONUNCIATION,
+ SDTAudio = SPDF_AUDIO,
+ SDTAlternates = SPDF_ALTERNATES,
+ SDTAll = SPDF_ALL,
+}}
+ENUM!{enum DISPID_SpeechPhraseBuilder {
+ DISPID_SPPBRestorePhraseFromMemory = 1,
+}}
+ENUM!{enum DISPID_SpeechRecoResultTimes {
+ DISPID_SRRTStreamTime = 1,
+ DISPID_SRRTLength,
+ DISPID_SRRTTickCount,
+ DISPID_SRRTOffsetFromStart,
+}}
+ENUM!{enum DISPID_SpeechPhraseAlternate {
+ DISPID_SPARecoResult = 1,
+ DISPID_SPAStartElementInResult,
+ DISPID_SPANumberOfElementsInResult,
+ DISPID_SPAPhraseInfo,
+ DISPID_SPACommit,
+}}
+ENUM!{enum DISPID_SpeechPhraseAlternates {
+ DISPID_SPAsCount = 1,
+ DISPID_SPAsItem = DISPID_VALUE as u32,
+ DISPID_SPAs_NewEnum = DISPID_NEWENUM as u32,
+}}
+ENUM!{enum DISPID_SpeechPhraseInfo {
+ DISPID_SPILanguageId = 1,
+ DISPID_SPIGrammarId,
+ DISPID_SPIStartTime,
+ DISPID_SPIAudioStreamPosition,
+ DISPID_SPIAudioSizeBytes,
+ DISPID_SPIRetainedSizeBytes,
+ DISPID_SPIAudioSizeTime,
+ DISPID_SPIRule,
+ DISPID_SPIProperties,
+ DISPID_SPIElements,
+ DISPID_SPIReplacements,
+ DISPID_SPIEngineId,
+ DISPID_SPIEnginePrivateData,
+ DISPID_SPISaveToMemory,
+ DISPID_SPIGetText,
+ DISPID_SPIGetDisplayAttributes,
+}}
+ENUM!{enum DISPID_SpeechPhraseElement {
+ DISPID_SPEAudioTimeOffset = 1,
+ DISPID_SPEAudioSizeTime,
+ DISPID_SPEAudioStreamOffset,
+ DISPID_SPEAudioSizeBytes,
+ DISPID_SPERetainedStreamOffset,
+ DISPID_SPERetainedSizeBytes,
+ DISPID_SPEDisplayText,
+ DISPID_SPELexicalForm,
+ DISPID_SPEPronunciation,
+ DISPID_SPEDisplayAttributes,
+ DISPID_SPERequiredConfidence,
+ DISPID_SPEActualConfidence,
+ DISPID_SPEEngineConfidence,
+}}
+ENUM!{enum SpeechEngineConfidence {
+ SECLowConfidence = -1i32 as u32,
+ SECNormalConfidence = 0,
+ SECHighConfidence = 1,
+}}
+ENUM!{enum DISPID_SpeechPhraseElements {
+ DISPID_SPEsCount = 1,
+ DISPID_SPEsItem = DISPID_VALUE as u32,
+ DISPID_SPEs_NewEnum = DISPID_NEWENUM as u32,
+}}
+ENUM!{enum DISPID_SpeechPhraseReplacement {
+ DISPID_SPRDisplayAttributes = 1,
+ DISPID_SPRText,
+ DISPID_SPRFirstElement,
+ DISPID_SPRNumberOfElements,
+}}
+ENUM!{enum DISPID_SpeechPhraseReplacements {
+ DISPID_SPRsCount = 1,
+ DISPID_SPRsItem = DISPID_VALUE as u32,
+ DISPID_SPRs_NewEnum = DISPID_NEWENUM as u32,
+}}
+ENUM!{enum DISPID_SpeechPhraseProperty {
+ DISPID_SPPName = 1,
+ DISPID_SPPId,
+ DISPID_SPPValue,
+ DISPID_SPPFirstElement,
+ DISPID_SPPNumberOfElements,
+ DISPID_SPPEngineConfidence,
+ DISPID_SPPConfidence,
+ DISPID_SPPParent,
+ DISPID_SPPChildren,
+}}
+ENUM!{enum DISPID_SpeechPhraseProperties {
+ DISPID_SPPsCount = 1,
+ DISPID_SPPsItem = DISPID_VALUE as u32,
+ DISPID_SPPs_NewEnum = DISPID_NEWENUM as u32,
+}}
+ENUM!{enum DISPID_SpeechPhraseRule {
+ DISPID_SPRuleName = 1,
+ DISPID_SPRuleId,
+ DISPID_SPRuleFirstElement,
+ DISPID_SPRuleNumberOfElements,
+ DISPID_SPRuleParent,
+ DISPID_SPRuleChildren,
+ DISPID_SPRuleConfidence,
+ DISPID_SPRuleEngineConfidence,
+}}
+ENUM!{enum DISPID_SpeechPhraseRules {
+ DISPID_SPRulesCount = 1,
+ DISPID_SPRulesItem = DISPID_VALUE as u32,
+ DISPID_SPRules_NewEnum = DISPID_NEWENUM as u32,
+}}
+ENUM!{enum DISPID_SpeechLexicon {
+ DISPID_SLGenerationId = 1,
+ DISPID_SLGetWords,
+ DISPID_SLAddPronunciation,
+ DISPID_SLAddPronunciationByPhoneIds,
+ DISPID_SLRemovePronunciation,
+ DISPID_SLRemovePronunciationByPhoneIds,
+ DISPID_SLGetPronunciations,
+ DISPID_SLGetGenerationChange,
+}}
+ENUM!{enum SpeechLexiconType {
+ SLTUser = eLEXTYPE_USER,
+ SLTApp = eLEXTYPE_APP,
+}}
+ENUM!{enum SpeechPartOfSpeech {
+ SPSNotOverriden = SPPS_NotOverriden,
+ SPSUnknown = SPPS_Unknown,
+ SPSNoun = SPPS_Noun,
+ SPSVerb = SPPS_Verb,
+ SPSModifier = SPPS_Modifier,
+ SPSFunction = SPPS_Function,
+ SPSInterjection = SPPS_Interjection,
+}}
+ENUM!{enum DISPID_SpeechLexiconWords {
+ DISPID_SLWsCount = 1,
+ DISPID_SLWsItem = DISPID_VALUE as u32,
+ DISPID_SLWs_NewEnum = DISPID_NEWENUM as u32,
+}}
+ENUM!{enum SpeechWordType {
+ SWTAdded = eWORDTYPE_ADDED,
+ SWTDeleted = eWORDTYPE_DELETED,
+}}
+ENUM!{enum DISPID_SpeechLexiconWord {
+ DISPID_SLWLangId = 1,
+ DISPID_SLWType,
+ DISPID_SLWWord,
+ DISPID_SLWPronunciations,
+}}
+ENUM!{enum DISPID_SpeechLexiconProns {
+ DISPID_SLPsCount = 1,
+ DISPID_SLPsItem = DISPID_VALUE as u32,
+ DISPID_SLPs_NewEnum = DISPID_NEWENUM as u32,
+}}
+ENUM!{enum DISPID_SpeechLexiconPronunciation {
+ DISPID_SLPType = 1,
+ DISPID_SLPLangId,
+ DISPID_SLPPartOfSpeech,
+ DISPID_SLPPhoneIds,
+ DISPID_SLPSymbolic,
+}}
+ENUM!{enum DISPID_SpeechPhoneConverter {
+ DISPID_SPCLangId = 1,
+ DISPID_SPCPhoneToId,
+ DISPID_SPCIdToPhone,
+}}
+extern {
+ pub static LIBID_SpeechLib: IID;
+}
+RIDL!{#[uuid(0xce17c09b, 0x4efa, 0x44d5, 0xa4, 0xc9, 0x59, 0xd9, 0x58, 0x5a, 0xb0, 0xcd)]
+interface ISpeechDataKey(ISpeechDataKeyVtbl): IDispatch(IDispatchVtbl) {
+ fn SetBinaryValue(
+ ValueName: BSTR,
+ Value: VARIANT,
+ ) -> HRESULT,
+ fn GetBinaryValue(
+ ValueName: BSTR,
+ Value: *mut VARIANT,
+ ) -> HRESULT,
+ fn SetStringValue(
+ ValueName: BSTR,
+ Value: BSTR,
+ ) -> HRESULT,
+ fn GetStringValue(
+ ValueName: BSTR,
+ Value: *mut BSTR,
+ ) -> HRESULT,
+ fn SetLongValue(
+ ValueName: BSTR,
+ Value: c_long,
+ ) -> HRESULT,
+ fn GetLongValue(
+ ValueName: BSTR,
+ Value: *mut c_long,
+ ) -> HRESULT,
+ fn OpenKey(
+ SubKeyName: BSTR,
+ SubKey: *mut *mut ISpeechDataKey,
+ ) -> HRESULT,
+ fn CreateKey(
+ SubKeyName: BSTR,
+ SubKey: *mut *mut ISpeechDataKey,
+ ) -> HRESULT,
+ fn DeleteKey(
+ SubKeyName: BSTR,
+ ) -> HRESULT,
+ fn DeleteValue(
+ ValueName: BSTR,
+ ) -> HRESULT,
+ fn EnumKeys(
+ Index: c_long,
+ SubKeyName: *mut BSTR,
+ ) -> HRESULT,
+ fn EnumValues(
+ Index: c_long,
+ ValueName: *mut BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xc74a3adc, 0xb727, 0x4500, 0xa8, 0x4a, 0xb5, 0x26, 0x72, 0x1c, 0x8b, 0x8c)]
+interface ISpeechObjectToken(ISpeechObjectTokenVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Id(
+ ObjectId: *mut BSTR,
+ ) -> HRESULT,
+ fn get_DataKey(
+ DataKey: *mut *mut ISpeechDataKey,
+ ) -> HRESULT,
+ fn get_Category(
+ Category: *mut *mut ISpeechObjectTokenCategory,
+ ) -> HRESULT,
+ fn GetDescription(
+ Locale: c_long,
+ Description: *mut BSTR,
+ ) -> HRESULT,
+ fn SetId(
+ Id: BSTR,
+ CategoryId: BSTR,
+ CreateIfNotExist: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn GetAttribute(
+ AttributeName: BSTR,
+ AttributeValue: *mut BSTR,
+ ) -> HRESULT,
+ fn CreateInstance(
+ pUnkOuter: *mut IUnknown,
+ ClsContext: SpeechTokenContext,
+ Object: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn Remove(
+ ObjectStorageCLSID: BSTR,
+ ) -> HRESULT,
+ fn GetStorageFileName(
+ ObjectStorageCLSID: BSTR,
+ KeyName: BSTR,
+ FileName: BSTR,
+ Folder: BSTR,
+ FilePath: *mut BSTR,
+ ) -> HRESULT,
+ fn RemoveStorageFileName(
+ ObjectStorageCLSID: BSTR,
+ KeyName: BSTR,
+ DeleteFile: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn IsUISupported(
+ TypeOfUI: BSTR,
+ ExtraData: *const VARIANT,
+ Object: *mut IUnknown,
+ Supported: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn DisplayUI(
+ hWnd: c_long,
+ Title: BSTR,
+ TypeOfUI: BSTR,
+ ExtraData: *const VARIANT,
+ Object: *mut IUnknown,
+ ) -> HRESULT,
+ fn MatchesAttributes(
+ Attributes: BSTR,
+ Matches: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x9285b776, 0x2e7b, 0x4bc0, 0xb5, 0x3e, 0x58, 0x0e, 0xb6, 0xfa, 0x96, 0x7f)]
+interface ISpeechObjectTokens(ISpeechObjectTokensVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Count(
+ Count: *mut c_long,
+ ) -> HRESULT,
+ fn Item(
+ Index: c_long,
+ Token: *mut *mut ISpeechObjectToken,
+ ) -> HRESULT,
+ fn get__NewEnum(
+ ppEnumVARIANT: *mut *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xca7eac50, 0x2d01, 0x4145, 0x86, 0xd4, 0x5a, 0xe7, 0xd7, 0x0f, 0x44, 0x69)]
+interface ISpeechObjectTokenCategory(ISpeechObjectTokenCategoryVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Id(
+ Id: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Default(
+ TokenId: BSTR,
+ ) -> HRESULT,
+ fn get_Default(
+ TokenId: *mut BSTR,
+ ) -> HRESULT,
+ fn SetId(
+ Id: BSTR,
+ CreateIfNotExist: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn GetDataKey(
+ Location: SpeechDataKeyLocation,
+ DataKey: *mut *mut ISpeechDataKey,
+ ) -> HRESULT,
+ fn EnumerateTokens(
+ RequiredAttributes: BSTR,
+ OptionalAttributes: BSTR,
+ Tokens: *mut *mut ISpeechObjectTokens,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x11b103d8, 0x1142, 0x4edf, 0xa0, 0x93, 0x82, 0xfb, 0x39, 0x15, 0xf8, 0xcc)]
+interface ISpeechAudioBufferInfo(ISpeechAudioBufferInfoVtbl): IDispatch(IDispatchVtbl) {
+ fn get_MinNotification(
+ MinNotification: *mut c_long,
+ ) -> HRESULT,
+ fn put_MinNotification(
+ MinNotification: c_long,
+ ) -> HRESULT,
+ fn get_BufferSize(
+ BufferSize: *mut c_long,
+ ) -> HRESULT,
+ fn put_BufferSize(
+ BufferSize: c_long,
+ ) -> HRESULT,
+ fn get_EventBias(
+ EventBias: *mut c_long,
+ ) -> HRESULT,
+ fn put_EventBias(
+ EventBias: c_long,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xc62d9c91, 0x7458, 0x47f6, 0x86, 0x2d, 0x1e, 0xf8, 0x6f, 0xb0, 0xb2, 0x78)]
+interface ISpeechAudioStatus(ISpeechAudioStatusVtbl): IDispatch(IDispatchVtbl) {
+ fn get_FreeBufferSpace(
+ FreeBufferSpace: *mut c_long,
+ ) -> HRESULT,
+ fn get_NonBlockingIO(
+ NonBlockingIO: *mut c_long,
+ ) -> HRESULT,
+ fn get_State(
+ State: *mut SpeechAudioState,
+ ) -> HRESULT,
+ fn get_CurrentSeekPosition(
+ CurrentSeekPosition: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_CurrentDevicePosition(
+ CurrentDevicePosition: *mut VARIANT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xe6e9c590, 0x3e18, 0x40e3, 0x82, 0x99, 0x06, 0x1f, 0x98, 0xbd, 0xe7, 0xc7)]
+interface ISpeechAudioFormat(ISpeechAudioFormatVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Type(
+ AudioFormat: *mut SpeechAudioFormatType,
+ ) -> HRESULT,
+ fn put_Type(
+ AudioFormat: SpeechAudioFormatType,
+ ) -> HRESULT,
+ fn get_Guid(
+ Guid: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Guid(
+ Guid: BSTR,
+ ) -> HRESULT,
+ fn GetWaveFormatEx(
+ SpeechWaveFormatEx: *mut *mut ISpeechWaveFormatEx,
+ ) -> HRESULT,
+ fn SetWaveFormatEx(
+ SpeechWaveFormatEx: *mut ISpeechWaveFormatEx,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x7a1ef0d5, 0x1581, 0x4741, 0x88, 0xe4, 0x20, 0x9a, 0x49, 0xf1, 0x1a, 0x10)]
+interface ISpeechWaveFormatEx(ISpeechWaveFormatExVtbl): IDispatch(IDispatchVtbl) {
+ fn get_FormatTag(
+ FormatTag: *mut c_short,
+ ) -> HRESULT,
+ fn put_FormatTag(
+ FormatTag: c_short,
+ ) -> HRESULT,
+ fn get_Channels(
+ Channels: *mut c_short,
+ ) -> HRESULT,
+ fn put_Channels(
+ Channels: c_short,
+ ) -> HRESULT,
+ fn get_SamplesPerSec(
+ SamplesPerSec: *mut c_long,
+ ) -> HRESULT,
+ fn put_SamplesPerSec(
+ SamplesPerSec: c_long,
+ ) -> HRESULT,
+ fn get_AvgBytesPerSec(
+ AvgBytesPerSec: *mut c_long,
+ ) -> HRESULT,
+ fn put_AvgBytesPerSec(
+ AvgBytesPerSec: c_long,
+ ) -> HRESULT,
+ fn get_BlockAlign(
+ BlockAlign: *mut c_short,
+ ) -> HRESULT,
+ fn put_BlockAlign(
+ BlockAlign: c_short,
+ ) -> HRESULT,
+ fn get_BitsPerSample(
+ BitsPerSample: *mut c_short,
+ ) -> HRESULT,
+ fn put_BitsPerSample(
+ BitsPerSample: c_short,
+ ) -> HRESULT,
+ fn get_ExtraData(
+ ExtraData: *mut VARIANT,
+ ) -> HRESULT,
+ fn put_ExtraData(
+ ExtraData: VARIANT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x6450336f, 0x7d49, 0x4ced, 0x80, 0x97, 0x49, 0xd6, 0xde, 0xe3, 0x72, 0x94)]
+interface ISpeechBaseStream(ISpeechBaseStreamVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Format(
+ AudioFormat: *mut *mut ISpeechAudioFormat,
+ ) -> HRESULT,
+ fn putref_Format(
+ AudioFormat: *mut ISpeechAudioFormat,
+ ) -> HRESULT,
+ fn Read(
+ Buffer: *mut VARIANT,
+ NumberOfBytes: c_long,
+ BytesRead: *mut c_long,
+ ) -> HRESULT,
+ fn Write(
+ Buffer: VARIANT,
+ BytesWritten: *mut c_long,
+ ) -> HRESULT,
+ fn Seek(
+ Position: VARIANT,
+ Origin: SpeechStreamSeekPositionType,
+ NewPosition: *mut VARIANT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xaf67f125, 0xab39, 0x4e93, 0xb4, 0xa2, 0xcc, 0x2e, 0x66, 0xe1, 0x82, 0xa7)]
+interface ISpeechFileStream(ISpeechFileStreamVtbl): ISpeechBaseStream(ISpeechBaseStreamVtbl) {
+ fn Open(
+ FileName: BSTR,
+ FileMode: SpeechStreamFileMode,
+ DoEvents: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn Close() -> HRESULT,
+}}
+RIDL!{#[uuid(0xeeb14b68, 0x808b, 0x4abe, 0xa5, 0xea, 0xb5, 0x1d, 0xa7, 0x58, 0x80, 0x08)]
+interface ISpeechMemoryStream(ISpeechMemoryStreamVtbl): ISpeechBaseStream(ISpeechBaseStreamVtbl) {
+ fn SetData(
+ Data: VARIANT,
+ ) -> HRESULT,
+ fn GetData(
+ pData: *mut VARIANT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x1a9e9f4f, 0x104f, 0x4db8, 0xa1, 0x15, 0xef, 0xd7, 0xfd, 0x0c, 0x97, 0xae)]
+interface ISpeechCustomStream(ISpeechCustomStreamVtbl): ISpeechBaseStream(ISpeechBaseStreamVtbl) {
+ fn get_BaseStream(
+ ppUnkStream: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn putref_BaseStream(
+ pUnkStream: *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xcff8e175, 0x019e, 0x11d3, 0xa0, 0x8e, 0x00, 0xc0, 0x4f, 0x8e, 0xf9, 0xb5)]
+interface ISpeechAudio(ISpeechAudioVtbl): ISpeechBaseStream(ISpeechBaseStreamVtbl) {
+ fn get_Status(
+ Status: *mut *mut ISpeechAudioStatus,
+ ) -> HRESULT,
+ fn get_BufferInfo(
+ BufferInfo: *mut *mut ISpeechAudioBufferInfo,
+ ) -> HRESULT,
+ fn get_DefaultFormat(
+ StreamFormat: *mut *mut ISpeechAudioFormat,
+ ) -> HRESULT,
+ fn get_Volume(
+ Volume: *mut c_long,
+ ) -> HRESULT,
+ fn put_Volume(
+ Volume: c_long,
+ ) -> HRESULT,
+ fn get_BufferNotifySize(
+ BufferNotifySize: *mut c_long,
+ ) -> HRESULT,
+ fn put_BufferNotifySize(
+ BufferNotifySize: c_long,
+ ) -> HRESULT,
+ fn get_EventHandle(
+ EventHandle: *mut c_long,
+ ) -> HRESULT,
+ fn SetState(
+ State: SpeechAudioState,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3c76af6d, 0x1fd7, 0x4831, 0x81, 0xd1, 0x3b, 0x71, 0xd5, 0xa1, 0x3c, 0x44)]
+interface ISpeechMMSysAudio(ISpeechMMSysAudioVtbl): ISpeechAudio(ISpeechAudioVtbl) {
+ fn get_DeviceId(
+ DeviceId: *mut c_long,
+ ) -> HRESULT,
+ fn put_DeviceId(
+ DeviceId: c_long,
+ ) -> HRESULT,
+ fn get_LineId(
+ LineId: *mut c_long,
+ ) -> HRESULT,
+ fn put_LineId(
+ LineId: c_long,
+ ) -> HRESULT,
+ fn get_MMHandle(
+ Handle: *mut c_long,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x269316d8, 0x57bd, 0x11d2, 0x9e, 0xee, 0x00, 0xc0, 0x4f, 0x79, 0x73, 0x96)]
+interface ISpeechVoice(ISpeechVoiceVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Status(
+ Status: *mut *mut ISpeechVoiceStatus,
+ ) -> HRESULT,
+ fn get_Voice(
+ Voice: *mut *mut ISpeechObjectToken,
+ ) -> HRESULT,
+ fn putref_Voice(
+ Voice: *mut ISpeechObjectToken,
+ ) -> HRESULT,
+ fn get_AudioOutput(
+ AudioOutput: *mut *mut ISpeechObjectToken,
+ ) -> HRESULT,
+ fn putref_AudioOutput(
+ AudioOutput: *mut ISpeechObjectToken,
+ ) -> HRESULT,
+ fn get_AudioOutputStream(
+ AudioOutputStream: *mut *mut ISpeechBaseStream,
+ ) -> HRESULT,
+ fn putref_AudioOutputStream(
+ AudioOutputStream: *mut ISpeechBaseStream,
+ ) -> HRESULT,
+ fn get_Rate(
+ Rate: *mut c_long,
+ ) -> HRESULT,
+ fn put_Rate(
+ Rate: c_long,
+ ) -> HRESULT,
+ fn get_Volume(
+ Volume: *mut c_long,
+ ) -> HRESULT,
+ fn put_Volume(
+ Volume: c_long,
+ ) -> HRESULT,
+ fn put_AllowAudioOutputFormatChangesOnNextSet(
+ Allow: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_AllowAudioOutputFormatChangesOnNextSet(
+ Allow: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_EventInterests(
+ EventInterestFlags: *mut SpeechVoiceEvents,
+ ) -> HRESULT,
+ fn put_EventInterests(
+ EventInterestFlags: SpeechVoiceEvents,
+ ) -> HRESULT,
+ fn put_Priority(
+ Priority: SpeechVoicePriority,
+ ) -> HRESULT,
+ fn get_Priority(
+ Priority: *mut SpeechVoicePriority,
+ ) -> HRESULT,
+ fn put_AlertBoundary(
+ Boundary: SpeechVoiceEvents,
+ ) -> HRESULT,
+ fn get_AlertBoundary(
+ Boundary: *mut SpeechVoiceEvents,
+ ) -> HRESULT,
+ fn put_SynchronousSpeakTimeout(
+ msTimeout: c_long,
+ ) -> HRESULT,
+ fn get_SynchronousSpeakTimeout(
+ msTimeOut: *mut c_long,
+ ) -> HRESULT,
+ fn Speak(
+ Text: BSTR,
+ Flags: SpeechVoiceSpeakFlags,
+ StreamNumber: *mut c_long,
+ ) -> HRESULT,
+ fn SpeakStream(
+ Stream: *mut ISpeechBaseStream,
+ Flags: SpeechVoiceSpeakFlags,
+ StreamNumber: *mut c_long,
+ ) -> HRESULT,
+ fn Pause() -> HRESULT,
+ fn Resume() -> HRESULT,
+ fn Skip(
+ Type: BSTR,
+ NumItems: c_long,
+ NumSkipped: c_long,
+ ) -> HRESULT,
+ fn GetVoices(
+ RequiredAttributes: BSTR,
+ OptionalAttributes: BSTR,
+ ObjectTokens: *mut *mut ISpeechObjectTokens,
+ ) -> HRESULT,
+ fn GetAudioOutputs(
+ RequiredAttributes: BSTR,
+ OptionalAttributes: BSTR,
+ ObjectTokens: *mut *mut ISpeechObjectTokens,
+ ) -> HRESULT,
+ fn WaitUntilDone(
+ msTimeout: c_long,
+ Done: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn SpeakCompleteEvent(
+ Handle: *mut c_long,
+ ) -> HRESULT,
+ fn IsUISupported(
+ TypeOfUI: BSTR,
+ ExtraData: *const VARIANT,
+ Supported: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn DisplayUI(
+ hWndParent: c_long,
+ Title: BSTR,
+ TypeOfUI: BSTR,
+ ExtraData: *const VARIANT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8be47b07, 0x57f6, 0x11d2, 0x9e, 0xee, 0x00, 0xc0, 0x4f, 0x79, 0x73, 0x96)]
+interface ISpeechVoiceStatus(ISpeechVoiceStatusVtbl): IDispatch(IDispatchVtbl) {
+ fn get_CurrentStreamNumber(
+ StreamNumber: *mut c_long,
+ ) -> HRESULT,
+ fn get_LastStreamNumberQueued(
+ StreamNumber: *mut c_long,
+ ) -> HRESULT,
+ fn get_LastHResult(
+ HResult: *mut c_long,
+ ) -> HRESULT,
+ fn get_RunningState(
+ State: *mut SpeechRunState,
+ ) -> HRESULT,
+ fn get_InputWordPosition(
+ Position: *mut c_long,
+ ) -> HRESULT,
+ fn get_InputWordLength(
+ Length: *mut c_long,
+ ) -> HRESULT,
+ fn get_InputSentencePosition(
+ Position: *mut c_long,
+ ) -> HRESULT,
+ fn get_InputSentenceLength(
+ Length: *mut c_long,
+ ) -> HRESULT,
+ fn get_LastBookmark(
+ Bookmark: *mut BSTR,
+ ) -> HRESULT,
+ fn get_LastBookmarkId(
+ BookmarkId: *mut c_long,
+ ) -> HRESULT,
+ fn get_PhonemeId(
+ PhoneId: *mut c_short,
+ ) -> HRESULT,
+ fn get_VisemeId(
+ VisemeId: *mut c_short,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa372acd1, 0x3bef, 0x4bbd, 0x8f, 0xfb, 0xcb, 0x3e, 0x2b, 0x41, 0x6a, 0xf8)]
+interface _ISpeechVoiceEvents(_ISpeechVoiceEventsVtbl): IDispatch(IDispatchVtbl) {}}
+RIDL!{#[uuid(0x2d5f1c0c, 0xbd75, 0x4b08, 0x94, 0x78, 0x3b, 0x11, 0xfe, 0xa2, 0x58, 0x6c)]
+interface ISpeechRecognizer(ISpeechRecognizerVtbl): IDispatch(IDispatchVtbl) {
+ fn putref_Recognizer(
+ Recognizer: *mut ISpeechObjectToken,
+ ) -> HRESULT,
+ fn get_Recognizer(
+ Recognizer: *mut *mut ISpeechObjectToken,
+ ) -> HRESULT,
+ fn put_AllowAudioInputFormatChangesOnNextSet(
+ Allow: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_AllowAudioInputFormatChangesOnNextSet(
+ Allow: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn putref_AudioInput(
+ AudioInput: *mut ISpeechObjectToken,
+ ) -> HRESULT,
+ fn get_AudioInput(
+ AudioInput: *mut *mut ISpeechObjectToken,
+ ) -> HRESULT,
+ fn putref_AudioInputStream(
+ AudioInputStream: *mut ISpeechBaseStream,
+ ) -> HRESULT,
+ fn get_AudioInputStream(
+ AudioInputStream: *mut *mut ISpeechBaseStream,
+ ) -> HRESULT,
+ fn get_IsShared(
+ Shared: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_State(
+ State: SpeechRecognizerState,
+ ) -> HRESULT,
+ fn get_State(
+ State: *mut SpeechRecognizerState,
+ ) -> HRESULT,
+ fn get_Status(
+ Status: *mut *mut ISpeechRecognizerStatus,
+ ) -> HRESULT,
+ fn putref_Profile(
+ Profile: *mut ISpeechObjectToken,
+ ) -> HRESULT,
+ fn get_Profile(
+ Profile: *mut *mut ISpeechObjectToken,
+ ) -> HRESULT,
+ fn EmulateRecognition(
+ TextElements: VARIANT,
+ ElementDisplayAttributes: *mut VARIANT,
+ LanguageId: c_long,
+ ) -> HRESULT,
+ fn CreateRecoContext(
+ NewContext: *mut *mut ISpeechRecoContext,
+ ) -> HRESULT,
+ fn GetFormat(
+ Type: SpeechFormatType,
+ Format: *mut *mut ISpeechAudioFormat,
+ ) -> HRESULT,
+ fn SetPropertyNumber(
+ Name: BSTR,
+ Value: c_long,
+ Supported: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn GetPropertyNumber(
+ Name: BSTR,
+ Value: *mut c_long,
+ Supported: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn SetPropertyString(
+ Name: BSTR,
+ Value: BSTR,
+ Supported: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn GetPropertyString(
+ Name: BSTR,
+ Value: *mut BSTR,
+ Supported: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn IsUISupported(
+ TypeOfUI: BSTR,
+ ExtraData: *const VARIANT,
+ Supported: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn DisplayUI(
+ hWndParent: c_long,
+ Title: BSTR,
+ TypeOfUI: BSTR,
+ ExtraData: *const VARIANT,
+ ) -> HRESULT,
+ fn GetRecognizers(
+ RequiredAttributes: BSTR,
+ OptionalAttributes: BSTR,
+ ObjectTokens: *mut *mut ISpeechObjectTokens,
+ ) -> HRESULT,
+ fn GetAudioInputs(
+ RequiredAttributes: BSTR,
+ OptionalAttributes: BSTR,
+ ObjectTokens: *mut *mut ISpeechObjectTokens,
+ ) -> HRESULT,
+ fn GetProfiles(
+ RequiredAttributes: BSTR,
+ OptionalAttributes: BSTR,
+ ObjectTokens: *mut *mut ISpeechObjectTokens,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xbff9e781, 0x53ec, 0x484e, 0xbb, 0x8a, 0x0e, 0x1b, 0x55, 0x51, 0xe3, 0x5c)]
+interface ISpeechRecognizerStatus(ISpeechRecognizerStatusVtbl): IDispatch(IDispatchVtbl) {
+ fn get_AudioStatus(
+ AudioStatus: *mut *mut ISpeechAudioStatus,
+ ) -> HRESULT,
+ fn get_CurrentStreamPosition(
+ pCurrentStreamPos: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_CurrentStreamNumber(
+ StreamNumber: *mut c_long,
+ ) -> HRESULT,
+ fn get_NumberOfActiveRules(
+ NumberOfActiveRules: *mut c_long,
+ ) -> HRESULT,
+ fn get_ClsidEngine(
+ ClsidEngine: *mut BSTR,
+ ) -> HRESULT,
+ fn get_SupportedLanguages(
+ SupportedLanguages: *mut VARIANT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x580aa49d, 0x7e1e, 0x4809, 0xb8, 0xe2, 0x57, 0xda, 0x80, 0x61, 0x04, 0xb8)]
+interface ISpeechRecoContext(ISpeechRecoContextVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Recognizer(
+ Recognizer: *mut *mut ISpeechRecognizer,
+ ) -> HRESULT,
+ fn get_AudioInputInterferenceStatus(
+ Interference: *mut SpeechInterference,
+ ) -> HRESULT,
+ fn get_RequestedUIType(
+ UIType: *mut BSTR,
+ ) -> HRESULT,
+ fn putref_Voice(
+ Voice: *mut ISpeechVoice,
+ ) -> HRESULT,
+ fn get_Voice(
+ Voice: *mut *mut ISpeechVoice,
+ ) -> HRESULT,
+ fn put_AllowVoiceFormatMatchingOnNextSet(
+ Allow: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_AllowVoiceFormatMatchingOnNextSet(
+ Allow: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_VoicePurgeEvent(
+ EventInterest: SpeechRecoEvents,
+ ) -> HRESULT,
+ fn get_VoicePurgeEvent(
+ EventInterest: *mut SpeechRecoEvents,
+ ) -> HRESULT,
+ fn put_EventInterests(
+ EventInterest: SpeechRecoEvents,
+ ) -> HRESULT,
+ fn get_EventInterests(
+ EventInterest: *mut SpeechRecoEvents,
+ ) -> HRESULT,
+ fn put_CmdMaxAlternates(
+ MaxAlternates: c_long,
+ ) -> HRESULT,
+ fn get_CmdMaxAlternates(
+ MaxAlternates: *mut c_long,
+ ) -> HRESULT,
+ fn put_State(
+ State: SpeechRecoContextState,
+ ) -> HRESULT,
+ fn get_State(
+ State: *mut SpeechRecoContextState,
+ ) -> HRESULT,
+ fn put_RetainedAudio(
+ Option: SpeechRetainedAudioOptions,
+ ) -> HRESULT,
+ fn get_RetainedAudio(
+ Option: *mut SpeechRetainedAudioOptions,
+ ) -> HRESULT,
+ fn putref_RetainedAudioFormat(
+ Format: *mut ISpeechAudioFormat,
+ ) -> HRESULT,
+ fn get_RetainedAudioFormat(
+ Format: *mut *mut ISpeechAudioFormat,
+ ) -> HRESULT,
+ fn Pause() -> HRESULT,
+ fn Resume() -> HRESULT,
+ fn CreateGrammar(
+ GrammarId: VARIANT,
+ Grammar: *mut *mut ISpeechRecoGrammar,
+ ) -> HRESULT,
+ fn CreateResultFromMemory(
+ ResultBlock: *mut VARIANT,
+ Result: *mut *mut ISpeechRecoResult,
+ ) -> HRESULT,
+ fn Bookmark(
+ Options: SpeechBookmarkOptions,
+ StreamPos: VARIANT,
+ BookmarkId: VARIANT,
+ ) -> HRESULT,
+ fn SetAdaptationData(
+ AdaptationString: BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xb6d6f79f, 0x2158, 0x4e50, 0xb5, 0xbc, 0x9a, 0x9c, 0xcd, 0x85, 0x2a, 0x09)]
+interface ISpeechRecoGrammar(ISpeechRecoGrammarVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Id(
+ Id: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_RecoContext(
+ RecoContext: *mut *mut ISpeechRecoContext,
+ ) -> HRESULT,
+ fn put_State(
+ State: SpeechGrammarState,
+ ) -> HRESULT,
+ fn get_State(
+ State: *mut SpeechGrammarState,
+ ) -> HRESULT,
+ fn get_Rules(
+ Rules: *mut *mut ISpeechGrammarRules,
+ ) -> HRESULT,
+ fn Reset(
+ NewLanguage: SpeechLanguageId,
+ ) -> HRESULT,
+ fn CmdLoadFromFile(
+ FileName: BSTR,
+ LoadOption: SpeechLoadOption,
+ ) -> HRESULT,
+ fn CmdLoadFromObject(
+ ClassId: BSTR,
+ GrammarName: BSTR,
+ LoadOption: SpeechLoadOption,
+ ) -> HRESULT,
+ fn CmdLoadFromResource(
+ hModule: c_long,
+ ResourceName: VARIANT,
+ ResourceType: VARIANT,
+ LanguageId: SpeechLanguageId,
+ LoadOption: SpeechLoadOption,
+ ) -> HRESULT,
+ fn CmdLoadFromMemory(
+ GrammarData: VARIANT,
+ LoadOption: SpeechLoadOption,
+ ) -> HRESULT,
+ fn CmdLoadFromProprietaryGrammar(
+ ProprietaryGuid: BSTR,
+ PriorietaryString: BSTR,
+ ProprietaryData: VARIANT,
+ LoadOption: SpeechLoadOption,
+ ) -> HRESULT,
+ fn CmdSetRuleState(
+ Name: BSTR,
+ State: SpeechRuleState,
+ ) -> HRESULT,
+ fn CmdSetRuleIdState(
+ RuleId: c_long,
+ State: SpeechRuleState,
+ ) -> HRESULT,
+ fn DictationLoad(
+ TopicName: BSTR,
+ LoadOption: SpeechLoadOption,
+ ) -> HRESULT,
+ fn DictationUnload() -> HRESULT,
+ fn DictationSetState(
+ State: SpeechRuleState,
+ ) -> HRESULT,
+ fn SetWordSequenceData(
+ Text: BSTR,
+ TextLength: c_long,
+ Info: *mut ISpeechTextSelectionInformation,
+ ) -> HRESULT,
+ fn SetTextSelection(
+ Info: *mut ISpeechTextSelectionInformation,
+ ) -> HRESULT,
+ fn IsPronounceable(
+ Word: BSTR,
+ WordPronounceable: *mut SpeechWordPronounceable,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x7b8fcb42, 0x0e9d, 0x4f00, 0xa0, 0x48, 0x7b, 0x04, 0xd6, 0x17, 0x9d, 0x3d)]
+interface _ISpeechRecoContextEvents(_ISpeechRecoContextEventsVtbl): IDispatch(IDispatchVtbl) {}}
+RIDL!{#[uuid(0xafe719cf, 0x5dd1, 0x44f2, 0x99, 0x9c, 0x7a, 0x39, 0x9f, 0x1c, 0xfc, 0xcc)]
+interface ISpeechGrammarRule(ISpeechGrammarRuleVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Attributes(
+ Attributes: *mut SpeechRuleAttributes,
+ ) -> HRESULT,
+ fn get_InitialState(
+ State: *mut *mut ISpeechGrammarRuleState,
+ ) -> HRESULT,
+ fn get_Name(
+ Name: *mut BSTR,
+ ) -> HRESULT,
+ fn get_Id(
+ Id: *mut c_long,
+ ) -> HRESULT,
+ fn Clear() -> HRESULT,
+ fn AddResource(
+ ResourceName: BSTR,
+ ResourceValue: BSTR,
+ ) -> HRESULT,
+ fn AddState(
+ State: *mut *mut ISpeechGrammarRuleState,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x6ffa3b44, 0xfc2d, 0x40d1, 0x8a, 0xfc, 0x32, 0x91, 0x1c, 0x7f, 0x1a, 0xd1)]
+interface ISpeechGrammarRules(ISpeechGrammarRulesVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Count(
+ Count: *mut c_long,
+ ) -> HRESULT,
+ fn FindRule(
+ RuleNameOrId: VARIANT,
+ Rule: *mut *mut ISpeechGrammarRule,
+ ) -> HRESULT,
+ fn Item(
+ Index: c_long,
+ Rule: *mut *mut ISpeechGrammarRule,
+ ) -> HRESULT,
+ fn get__NewEnum(
+ EnumVARIANT: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn get_Dynamic(
+ Dynamic: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn Add(
+ RuleName: BSTR,
+ Attributes: SpeechRuleAttributes,
+ RuleId: c_long,
+ Rule: *mut *mut ISpeechGrammarRule,
+ ) -> HRESULT,
+ fn Commit() -> HRESULT,
+ fn CommitAndSave(
+ ErrorText: *mut BSTR,
+ SaveStream: *mut VARIANT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xd4286f2c, 0xee67, 0x45ae, 0xb9, 0x28, 0x28, 0xd6, 0x95, 0x36, 0x2e, 0xda)]
+interface ISpeechGrammarRuleState(ISpeechGrammarRuleStateVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Rule(
+ Rule: *mut *mut ISpeechGrammarRule,
+ ) -> HRESULT,
+ fn get_Transitions(
+ Transitions: *mut *mut ISpeechGrammarRuleStateTransitions,
+ ) -> HRESULT,
+ fn AddWordTransition(
+ DestState: *mut ISpeechGrammarRuleState,
+ Words: BSTR,
+ Separators: BSTR,
+ Type: SpeechGrammarWordType,
+ PropertyName: BSTR,
+ PropertyId: c_long,
+ PropertyValue: *mut VARIANT,
+ Weight: c_float,
+ ) -> HRESULT,
+ fn AddRuleTransition(
+ DestinationState: *mut ISpeechGrammarRuleState,
+ Rule: *mut ISpeechGrammarRule,
+ PropertyName: BSTR,
+ PropertyId: c_long,
+ PropertyValue: *mut VARIANT,
+ Weight: c_float,
+ ) -> HRESULT,
+ fn AddSpecialTransition(
+ DestinationState: *mut ISpeechGrammarRuleState,
+ Type: SpeechSpecialTransitionType,
+ PropertyName: BSTR,
+ PropertyId: c_long,
+ PropertyValue: *mut VARIANT,
+ Weight: c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xcafd1db1, 0x41d1, 0x4a06, 0x98, 0x63, 0xe2, 0xe8, 0x1d, 0xa1, 0x7a, 0x9a)]
+interface ISpeechGrammarRuleStateTransition(ISpeechGrammarRuleStateTransitionVtbl):
+ IDispatch(IDispatchVtbl) {
+ fn get_Type(
+ Type: *mut SpeechGrammarRuleStateTransitionType,
+ ) -> HRESULT,
+ fn get_Text(
+ Text: *mut BSTR,
+ ) -> HRESULT,
+ fn get_Rule(
+ Rule: *mut *mut ISpeechGrammarRule,
+ ) -> HRESULT,
+ fn get_Weight(
+ Weight: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_PropertyName(
+ PropertyName: *mut BSTR,
+ ) -> HRESULT,
+ fn get_PropertyId(
+ PropertyId: *mut c_long,
+ ) -> HRESULT,
+ fn get_PropertyValue(
+ PropertyValue: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_NextState(
+ NextState: *mut *mut ISpeechGrammarRuleState,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xeabce657, 0x75bc, 0x44a2, 0xaa, 0x7f, 0xc5, 0x64, 0x76, 0x74, 0x29, 0x63)]
+interface ISpeechGrammarRuleStateTransitions(ISpeechGrammarRuleStateTransitionsVtbl):
+ IDispatch(IDispatchVtbl) {
+ fn get_Count(
+ Count: *mut c_long,
+ ) -> HRESULT,
+ fn Item(
+ Index: c_long,
+ Transition: *mut *mut ISpeechGrammarRuleStateTransition,
+ ) -> HRESULT,
+ fn get__NewEnum(
+ EnumVARIANT: *mut *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3b9c7e7a, 0x6eee, 0x4ded, 0x90, 0x92, 0x11, 0x65, 0x72, 0x79, 0xad, 0xbe)]
+interface ISpeechTextSelectionInformation(ISpeechTextSelectionInformationVtbl):
+ IDispatch(IDispatchVtbl) {
+ fn put_ActiveOffset(
+ ActiveOffset: c_long,
+ ) -> HRESULT,
+ fn get_ActiveOffset(
+ ActiveOffset: *mut c_long,
+ ) -> HRESULT,
+ fn put_ActiveLength(
+ ActiveLength: c_long,
+ ) -> HRESULT,
+ fn get_ActiveLength(
+ ActiveLength: *mut c_long,
+ ) -> HRESULT,
+ fn put_SelectionOffset(
+ SelectionOffset: c_long,
+ ) -> HRESULT,
+ fn get_SelectionOffset(
+ SelectionOffset: *mut c_long,
+ ) -> HRESULT,
+ fn put_SelectionLength(
+ SelectionLength: c_long,
+ ) -> HRESULT,
+ fn get_SelectionLength(
+ SelectionLength: *mut c_long,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xed2879cf, 0xced9, 0x4ee6, 0xa5, 0x34, 0xde, 0x01, 0x91, 0xd5, 0x46, 0x8d)]
+interface ISpeechRecoResult(ISpeechRecoResultVtbl): IDispatch(IDispatchVtbl) {
+ fn get_RecoContext(
+ RecoContext: *mut *mut ISpeechRecoContext,
+ ) -> HRESULT,
+ fn get_Times(
+ Times: *mut *mut ISpeechRecoResultTimes,
+ ) -> HRESULT,
+ fn putref_AudioFormat(
+ Format: *mut ISpeechAudioFormat,
+ ) -> HRESULT,
+ fn get_AudioFormat(
+ Format: *mut *mut ISpeechAudioFormat,
+ ) -> HRESULT,
+ fn get_PhraseInfo(
+ PhraseInfo: *mut *mut ISpeechPhraseInfo,
+ ) -> HRESULT,
+ fn Alternates(
+ RequestCount: c_long,
+ StartElement: c_long,
+ Elements: c_long,
+ Alternates: *mut *mut ISpeechPhraseAlternates,
+ ) -> HRESULT,
+ fn Audio(
+ StartElement: c_long,
+ Elements: c_long,
+ Stream: *mut *mut ISpeechMemoryStream,
+ ) -> HRESULT,
+ fn SpeakAudio(
+ StartElement: c_long,
+ Elements: c_long,
+ Flags: SpeechVoiceSpeakFlags,
+ StreamNumber: *mut c_long,
+ ) -> HRESULT,
+ fn SaveToMemory(
+ ResultBlock: *mut VARIANT,
+ ) -> HRESULT,
+ fn DiscardResultInfo(
+ ValueTypes: SpeechDiscardType,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x62b3b8fb, 0xf6e7, 0x41be, 0xbd, 0xcb, 0x05, 0x6b, 0x1c, 0x29, 0xef, 0xc0)]
+interface ISpeechRecoResultTimes(ISpeechRecoResultTimesVtbl): IDispatch(IDispatchVtbl) {
+ fn get_StreamTime(
+ Time: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_Length(
+ Length: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_TickCount(
+ TickCount: *mut c_long,
+ ) -> HRESULT,
+ fn get_OffsetFromStart(
+ OffsetFromStart: *mut VARIANT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x27864a2a, 0x2b9f, 0x4cb8, 0x92, 0xd3, 0x0d, 0x27, 0x22, 0xfd, 0x1e, 0x73)]
+interface ISpeechPhraseAlternate(ISpeechPhraseAlternateVtbl): IDispatch(IDispatchVtbl) {
+ fn get_RecoResult(
+ RecoResult: *mut *mut ISpeechRecoResult,
+ ) -> HRESULT,
+ fn get_StartElementInResult(
+ StartElement: *mut c_long,
+ ) -> HRESULT,
+ fn get_NumberOfElementsInResult(
+ NumberOfElements: *mut c_long,
+ ) -> HRESULT,
+ fn get_PhraseInfo(
+ PhraseInfo: *mut *mut ISpeechPhraseInfo,
+ ) -> HRESULT,
+ fn Commit() -> HRESULT,
+}}
+RIDL!{#[uuid(0xb238b6d5, 0xf276, 0x4c3d, 0xa6, 0xc1, 0x29, 0x74, 0x80, 0x1c, 0x3c, 0xc2)]
+interface ISpeechPhraseAlternates(ISpeechPhraseAlternatesVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Count(
+ Count: *mut c_long,
+ ) -> HRESULT,
+ fn Item(
+ Index: c_long,
+ PhraseAlternate: *mut *mut ISpeechPhraseAlternate,
+ ) -> HRESULT,
+ fn get__NewEnum(
+ EnumVARIANT: *mut *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x961559cf, 0x4e67, 0x4662, 0x8b, 0xf0, 0xd9, 0x3f, 0x1f, 0xcd, 0x61, 0xb3)]
+interface ISpeechPhraseInfo(ISpeechPhraseInfoVtbl): IDispatch(IDispatchVtbl) {
+ fn get_LanguageId(
+ LanguageId: *mut c_long,
+ ) -> HRESULT,
+ fn get_GrammarId(
+ GrammarId: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_StartTime(
+ StartTime: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_AudioStreamPosition(
+ AudioStreamPosition: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_AudioSizeBytes(
+ pAudioSizeBytes: *mut c_long,
+ ) -> HRESULT,
+ fn get_RetainedSizeBytes(
+ RetainedSizeBytes: *mut c_long,
+ ) -> HRESULT,
+ fn get_AudioSizeTime(
+ AudioSizeTime: *mut c_long,
+ ) -> HRESULT,
+ fn get_Rule(
+ Rule: *mut *mut ISpeechPhraseRule,
+ ) -> HRESULT,
+ fn get_Properties(
+ Properties: *mut *mut ISpeechPhraseProperties,
+ ) -> HRESULT,
+ fn get_Elements(
+ Elements: *mut *mut ISpeechPhraseElements,
+ ) -> HRESULT,
+ fn get_Replacements(
+ Replacements: *mut *mut ISpeechPhraseReplacements,
+ ) -> HRESULT,
+ fn get_EngineId(
+ EngineIdGuid: *mut BSTR,
+ ) -> HRESULT,
+ fn get_EnginePrivateData(
+ PrivateData: *mut VARIANT,
+ ) -> HRESULT,
+ fn SaveToMemory(
+ PhraseBlock: *mut VARIANT,
+ ) -> HRESULT,
+ fn GetText(
+ StartElement: c_long,
+ Elements: c_long,
+ UseReplacements: VARIANT_BOOL,
+ Text: *mut BSTR,
+ ) -> HRESULT,
+ fn GetDisplayAttributes(
+ StartElement: c_long,
+ Elements: c_long,
+ UseReplacements: VARIANT_BOOL,
+ DisplayAttributes: *mut SpeechDisplayAttributes,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xe6176f96, 0xe373, 0x4801, 0xb2, 0x23, 0x3b, 0x62, 0xc0, 0x68, 0xc0, 0xb4)]
+interface ISpeechPhraseElement(ISpeechPhraseElementVtbl): IDispatch(IDispatchVtbl) {
+ fn get_AudioTimeOffset(
+ AudioTimeOffset: *mut c_long,
+ ) -> HRESULT,
+ fn get_AudioSizeTime(
+ AudioSizeTime: *mut c_long,
+ ) -> HRESULT,
+ fn get_AudioStreamOffset(
+ AudioStreamOffset: *mut c_long,
+ ) -> HRESULT,
+ fn get_AudioSizeBytes(
+ AudioSizeBytes: *mut c_long,
+ ) -> HRESULT,
+ fn get_RetainedStreamOffset(
+ RetainedStreamOffset: *mut c_long,
+ ) -> HRESULT,
+ fn get_RetainedSizeBytes(
+ RetainedSizeBytes: *mut c_long,
+ ) -> HRESULT,
+ fn get_DisplayText(
+ DisplayText: *mut BSTR,
+ ) -> HRESULT,
+ fn get_LexicalForm(
+ LexicalForm: *mut BSTR,
+ ) -> HRESULT,
+ fn get_Pronunciation(
+ Pronunciation: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_DisplayAttributes(
+ DisplayAttributes: *mut SpeechDisplayAttributes,
+ ) -> HRESULT,
+ fn get_RequiredConfidence(
+ RequiredConfidence: *mut SpeechEngineConfidence,
+ ) -> HRESULT,
+ fn get_ActualConfidence(
+ ActualConfidence: *mut SpeechEngineConfidence,
+ ) -> HRESULT,
+ fn get_EngineConfidence(
+ EngineConfident: *mut c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x0626b328, 0x3478, 0x467d, 0xa0, 0xb3, 0xd0, 0x85, 0x3b, 0x93, 0xdd, 0xa3)]
+interface ISpeechPhraseElements(ISpeechPhraseElementsVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Count(
+ Count: *mut c_long,
+ ) -> HRESULT,
+ fn Item(
+ Index: c_long,
+ Element: *mut *mut ISpeechPhraseElement,
+ ) -> HRESULT,
+ fn get__NewEnum(
+ EnumVARIANT: *mut *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x2890a410, 0x53a7, 0x4fb5, 0x94, 0xec, 0x06, 0xd4, 0x99, 0x8e, 0x3d, 0x02)]
+interface ISpeechPhraseReplacement(ISpeechPhraseReplacementVtbl): IDispatch(IDispatchVtbl) {
+ fn get_DisplayAttributes(
+ DisplayAttributes: *mut SpeechDisplayAttributes,
+ ) -> HRESULT,
+ fn get_Text(
+ Text: *mut BSTR,
+ ) -> HRESULT,
+ fn get_FirstElement(
+ FirstElement: *mut c_long,
+ ) -> HRESULT,
+ fn get_NumberOfElements(
+ NumberOfElements: *mut c_long,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x38bc662f, 0x2257, 0x4525, 0x95, 0x9e, 0x20, 0x69, 0xd2, 0x59, 0x6c, 0x05)]
+interface ISpeechPhraseReplacements(ISpeechPhraseReplacementsVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Count(
+ Count: *mut c_long,
+ ) -> HRESULT,
+ fn Item(
+ Index: c_long,
+ Reps: *mut *mut ISpeechPhraseReplacement,
+ ) -> HRESULT,
+ fn get__NewEnum(
+ EnumVARIANT: *mut *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xce563d48, 0x961e, 0x4732, 0xa2, 0xe1, 0x37, 0x8a, 0x42, 0xb4, 0x30, 0xbe)]
+interface ISpeechPhraseProperty(ISpeechPhrasePropertyVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Name(
+ Name: *mut BSTR,
+ ) -> HRESULT,
+ fn get_Id(
+ Id: *mut c_long,
+ ) -> HRESULT,
+ fn get_Value(
+ Value: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_FirstElement(
+ FirstElement: *mut c_long,
+ ) -> HRESULT,
+ fn get_NumberOfElements(
+ NumberOfElements: *mut c_long,
+ ) -> HRESULT,
+ fn get_EngineConfidence(
+ Confidence: *mut c_float,
+ ) -> HRESULT,
+ fn get_Confidence(
+ Confidence: *mut SpeechEngineConfidence,
+ ) -> HRESULT,
+ fn get_Parent(
+ ParentProperty: *mut *mut ISpeechPhraseProperty,
+ ) -> HRESULT,
+ fn get_Children(
+ Children: *mut *mut ISpeechPhraseProperties,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x08166b47, 0x102e, 0x4b23, 0xa5, 0x99, 0xbd, 0xb9, 0x8d, 0xbf, 0xd1, 0xf4)]
+interface ISpeechPhraseProperties(ISpeechPhrasePropertiesVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Count(
+ Count: *mut c_long,
+ ) -> HRESULT,
+ fn Item(
+ Index: c_long,
+ Property: *mut *mut ISpeechPhraseProperty,
+ ) -> HRESULT,
+ fn get__NewEnum(
+ EnumVARIANT: *mut *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa7bfe112, 0xa4a0, 0x48d9, 0xb6, 0x02, 0xc3, 0x13, 0x84, 0x3f, 0x69, 0x64)]
+interface ISpeechPhraseRule(ISpeechPhraseRuleVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Name(
+ Name: *mut BSTR,
+ ) -> HRESULT,
+ fn get_Id(
+ Id: *mut c_long,
+ ) -> HRESULT,
+ fn get_FirstElement(
+ FirstElement: *mut c_long,
+ ) -> HRESULT,
+ fn get_NumberOfElements(
+ NumberOfElements: *mut c_long,
+ ) -> HRESULT,
+ fn get_Parent(
+ Parent: *mut *mut ISpeechPhraseRule,
+ ) -> HRESULT,
+ fn get_Children(
+ Children: *mut *mut ISpeechPhraseRules,
+ ) -> HRESULT,
+ fn get_Confidence(
+ ActualConfidence: *mut SpeechEngineConfidence,
+ ) -> HRESULT,
+ fn get_EngineConfidence(
+ Confidence: *mut c_float,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x9047d593, 0x01dd, 0x4b72, 0x81, 0xa3, 0xe4, 0xa0, 0xca, 0x69, 0xf4, 0x07)]
+interface ISpeechPhraseRules(ISpeechPhraseRulesVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Count(
+ Count: *mut c_long,
+ ) -> HRESULT,
+ fn Item(
+ Index: c_long,
+ Rule: *mut *mut ISpeechPhraseRule,
+ ) -> HRESULT,
+ fn get__NewEnum(
+ EnumVARIANT: *mut *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3da7627a, 0xc7ae, 0x4b23, 0x87, 0x08, 0x63, 0x8c, 0x50, 0x36, 0x2c, 0x25)]
+interface ISpeechLexicon(ISpeechLexiconVtbl): IDispatch(IDispatchVtbl) {
+ fn get_GenerationId(
+ GenerationId: *mut c_long,
+ ) -> HRESULT,
+ fn GetWords(
+ Flags: SpeechLexiconType,
+ GenerationID: *mut c_long,
+ Words: *mut *mut ISpeechLexiconWords,
+ ) -> HRESULT,
+ fn AddPronunciation(
+ bstrWord: BSTR,
+ LangId: SpeechLanguageId,
+ PartOfSpeech: SpeechPartOfSpeech,
+ bstrPronunciation: BSTR,
+ ) -> HRESULT,
+ fn AddPronunciationByPhoneIds(
+ bstrWord: BSTR,
+ LangId: SpeechLanguageId,
+ PartOfSpeech: SpeechPartOfSpeech,
+ PhoneIds: *mut VARIANT,
+ ) -> HRESULT,
+ fn RemovePronunciation(
+ bstrWord: BSTR,
+ LangId: SpeechLanguageId,
+ PartOfSpeech: SpeechPartOfSpeech,
+ bstrPronunciation: BSTR,
+ ) -> HRESULT,
+ fn RemovePronunciationByPhoneIds(
+ bstrWord: BSTR,
+ LangId: SpeechLanguageId,
+ PartOfSpeech: SpeechPartOfSpeech,
+ PhoneIds: *mut VARIANT,
+ ) -> HRESULT,
+ fn GetPronunciations(
+ bstrWord: BSTR,
+ LangId: SpeechLanguageId,
+ TypeFlags: SpeechLexiconType,
+ ppPronunciations: *mut *mut ISpeechLexiconPronunciations,
+ ) -> HRESULT,
+ fn GetGenerationChange(
+ GenerationID: *mut c_long,
+ ppWords: *mut *mut ISpeechLexiconWords,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8d199862, 0x415e, 0x47d5, 0xac, 0x4f, 0xfa, 0xa6, 0x08, 0xb4, 0x24, 0xe6)]
+interface ISpeechLexiconWords(ISpeechLexiconWordsVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Count(
+ Count: *mut c_long,
+ ) -> HRESULT,
+ fn Item(
+ Index: c_long,
+ Word: *mut *mut ISpeechLexiconWord,
+ ) -> HRESULT,
+ fn get__NewEnum(
+ EnumVARIANT: *mut *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x4e5b933c, 0xc9be, 0x48ed, 0x88, 0x42, 0x1e, 0xe5, 0x1b, 0xb1, 0xd4, 0xff)]
+interface ISpeechLexiconWord(ISpeechLexiconWordVtbl): IDispatch(IDispatchVtbl) {
+ fn get_LangId(
+ LangId: *mut SpeechLanguageId,
+ ) -> HRESULT,
+ fn get_Type(
+ WordType: *mut SpeechWordType,
+ ) -> HRESULT,
+ fn get_Word(
+ Word: *mut BSTR,
+ ) -> HRESULT,
+ fn get_Pronunciations(
+ Pronunciations: *mut *mut ISpeechLexiconPronunciations,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x72829128, 0x5682, 0x4704, 0xa0, 0xd4, 0x3e, 0x2b, 0xb6, 0xf2, 0xea, 0xd3)]
+interface ISpeechLexiconPronunciations(ISpeechLexiconPronunciationsVtbl):
+ IDispatch(IDispatchVtbl) {
+ fn get_Count(
+ Count: *mut c_long,
+ ) -> HRESULT,
+ fn Item(
+ Index: c_long,
+ Pronunciation: *mut *mut ISpeechLexiconPronunciation,
+ ) -> HRESULT,
+ fn get__NewEnum(
+ EnumVARIANT: *mut *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x95252c5d, 0x9e43, 0x4f4a, 0x98, 0x99, 0x48, 0xee, 0x73, 0x35, 0x2f, 0x9f)]
+interface ISpeechLexiconPronunciation(ISpeechLexiconPronunciationVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Type(
+ LexiconType: *mut SpeechLexiconType,
+ ) -> HRESULT,
+ fn get_LangId(
+ LangId: *mut SpeechLanguageId,
+ ) -> HRESULT,
+ fn get_PartOfSpeech(
+ PartOfSpeech: *mut SpeechPartOfSpeech,
+ ) -> HRESULT,
+ fn get_PhoneIds(
+ PhoneIds: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_Symbolic(
+ Symbolic: *mut BSTR,
+ ) -> HRESULT,
+}}
+pub const Speech_Default_Weight: c_float = DEFAULT_WEIGHT;
+pub const Speech_Max_Word_Length: LONG = SP_MAX_WORD_LENGTH as i32;
+pub const Speech_Max_Pron_Length: LONG = SP_MAX_PRON_LENGTH as i32;
+pub const Speech_StreamPos_Asap: LONG = SP_STREAMPOS_ASAP as i32;
+pub const Speech_StreamPos_RealTime: LONG = SP_STREAMPOS_REALTIME as i32;
+pub const SpeechAllElements: LONG = SPPR_ALL_ELEMENTS as i32;
+RIDL!{#[uuid(0x3b151836, 0xdf3a, 0x4e0a, 0x84, 0x6c, 0xd2, 0xad, 0xc9, 0x33, 0x43, 0x33)]
+interface ISpeechPhraseInfoBuilder(ISpeechPhraseInfoBuilderVtbl): IDispatch(IDispatchVtbl) {
+ fn RestorePhraseFromMemory(
+ PhraseInMemory: *mut VARIANT,
+ PhraseInfo: *mut *mut ISpeechPhraseInfo,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xc3e4f353, 0x433f, 0x43d6, 0x89, 0xa1, 0x6a, 0x62, 0xa7, 0x05, 0x4c, 0x3d)]
+interface ISpeechPhoneConverter(ISpeechPhoneConverterVtbl): IDispatch(IDispatchVtbl) {
+ fn get_LanguageId(
+ LanguageId: *mut SpeechLanguageId,
+ ) -> HRESULT,
+ fn put_LanguageId(
+ LanguageId: SpeechLanguageId,
+ ) -> HRESULT,
+ fn PhoneToId(
+ Phonemes: BSTR,
+ IdArray: *mut VARIANT,
+ ) -> HRESULT,
+ fn IdToPhone(
+ IdArray: VARIANT,
+ Phonemes: *mut BSTR,
+ ) -> HRESULT,
+}}
+extern {
+ pub static CLSID_SpNotifyTranslator: CLSID;
+ pub static CLSID_SpObjectTokenCategory: CLSID;
+ pub static CLSID_SpObjectToken: CLSID;
+ pub static CLSID_SpResourceManager: CLSID;
+ pub static CLSID_SpStreamFormatConverter: CLSID;
+ pub static CLSID_SpMMAudioEnum: CLSID;
+ pub static CLSID_SpMMAudioIn: CLSID;
+ pub static CLSID_SpMMAudioOut: CLSID;
+ pub static CLSID_SpStream: CLSID;
+ pub static CLSID_SpVoice: CLSID;
+ pub static CLSID_SpSharedRecoContext: CLSID;
+ pub static CLSID_SpInprocRecognizer: CLSID;
+ pub static CLSID_SpSharedRecognizer: CLSID;
+ pub static CLSID_SpLexicon: CLSID;
+ pub static CLSID_SpUnCompressedLexicon: CLSID;
+ pub static CLSID_SpCompressedLexicon: CLSID;
+ pub static CLSID_SpPhoneConverter: CLSID;
+ pub static CLSID_SpNullPhoneConverter: CLSID;
+ pub static CLSID_SpTextSelectionInformation: CLSID;
+ pub static CLSID_SpPhraseInfoBuilder: CLSID;
+ pub static CLSID_SpAudioFormat: CLSID;
+ pub static CLSID_SpWaveFormatEx: CLSID;
+ pub static CLSID_SpInProcRecoContext: CLSID;
+ pub static CLSID_SpCustomStream: CLSID;
+ pub static CLSID_SpFileStream: CLSID;
+ pub static CLSID_SpMemoryStream: CLSID;
+}
diff --git a/vendor/winapi/src/um/sapi53.rs b/vendor/winapi/src/um/sapi53.rs
new file mode 100644
index 000000000..7121191d8
--- /dev/null
+++ b/vendor/winapi/src/um/sapi53.rs
@@ -0,0 +1,1823 @@
+// 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.
+//! SAPI 5.3 definitions
+use ctypes::{c_float, c_int, c_long};
+use shared::guiddef::{CLSID, GUID};
+use shared::minwindef::{BOOL, BYTE, DWORD, LPARAM, UINT, ULONG, WORD, WPARAM};
+use shared::wtypes::{BSTR, VARIANT_BOOL};
+use um::oaidl::{IDispatch, IDispatchVtbl, VARIANT};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::urlmon::IInternetSecurityManager;
+use um::winnt::{HRESULT, LPCWSTR, LPWSTR, ULONGLONG, WCHAR};
+pub use um::sapi51::{
+ SPDATAKEYLOCATION,
+ SPDKL_DefaultLocation,
+ SPDKL_CurrentUser,
+ SPDKL_LocalMachine,
+ SPDKL_CurrentConfig,
+ SPDUI_EngineProperties,
+ SPDUI_AddRemoveWord,
+ SPDUI_UserTraining,
+ SPDUI_MicTraining,
+ SPDUI_RecoProfileProperties,
+ SPDUI_AudioProperties,
+ SPDUI_AudioVolume,
+ SPDUI_UserEnrollment,
+ SPDUI_ShareData,
+ SPDUI_Tutorial,
+ SPSTREAMFORMAT,
+ SPSF_Default,
+ SPSF_NoAssignedFormat,
+ SPSF_Text,
+ SPSF_NonStandardFormat,
+ SPSF_ExtendedAudioFormat,
+ SPSF_8kHz8BitMono,
+ SPSF_8kHz8BitStereo,
+ SPSF_8kHz16BitMono,
+ SPSF_8kHz16BitStereo,
+ SPSF_11kHz8BitMono,
+ SPSF_11kHz8BitStereo,
+ SPSF_11kHz16BitMono,
+ SPSF_11kHz16BitStereo,
+ SPSF_12kHz8BitMono,
+ SPSF_12kHz8BitStereo,
+ SPSF_12kHz16BitMono,
+ SPSF_12kHz16BitStereo,
+ SPSF_16kHz8BitMono,
+ SPSF_16kHz8BitStereo,
+ SPSF_16kHz16BitMono,
+ SPSF_16kHz16BitStereo,
+ SPSF_22kHz8BitMono,
+ SPSF_22kHz8BitStereo,
+ SPSF_22kHz16BitMono,
+ SPSF_22kHz16BitStereo,
+ SPSF_24kHz8BitMono,
+ SPSF_24kHz8BitStereo,
+ SPSF_24kHz16BitMono,
+ SPSF_24kHz16BitStereo,
+ SPSF_32kHz8BitMono,
+ SPSF_32kHz8BitStereo,
+ SPSF_32kHz16BitMono,
+ SPSF_32kHz16BitStereo,
+ SPSF_44kHz8BitMono,
+ SPSF_44kHz8BitStereo,
+ SPSF_44kHz16BitMono,
+ SPSF_44kHz16BitStereo,
+ SPSF_48kHz8BitMono,
+ SPSF_48kHz8BitStereo,
+ SPSF_48kHz16BitMono,
+ SPSF_48kHz16BitStereo,
+ SPSF_TrueSpeech_8kHz1BitMono,
+ SPSF_CCITT_ALaw_8kHzMono,
+ SPSF_CCITT_ALaw_8kHzStereo,
+ SPSF_CCITT_ALaw_11kHzMono,
+ SPSF_CCITT_ALaw_11kHzStereo,
+ SPSF_CCITT_ALaw_22kHzMono,
+ SPSF_CCITT_ALaw_22kHzStereo,
+ SPSF_CCITT_ALaw_44kHzMono,
+ SPSF_CCITT_ALaw_44kHzStereo,
+ SPSF_CCITT_uLaw_8kHzMono,
+ SPSF_CCITT_uLaw_8kHzStereo,
+ SPSF_CCITT_uLaw_11kHzMono,
+ SPSF_CCITT_uLaw_11kHzStereo,
+ SPSF_CCITT_uLaw_22kHzMono,
+ SPSF_CCITT_uLaw_22kHzStereo,
+ SPSF_CCITT_uLaw_44kHzMono,
+ SPSF_CCITT_uLaw_44kHzStereo,
+ SPSF_ADPCM_8kHzMono,
+ SPSF_ADPCM_8kHzStereo,
+ SPSF_ADPCM_11kHzMono,
+ SPSF_ADPCM_11kHzStereo,
+ SPSF_ADPCM_22kHzMono,
+ SPSF_ADPCM_22kHzStereo,
+ SPSF_ADPCM_44kHzMono,
+ SPSF_ADPCM_44kHzStereo,
+ SPSF_GSM610_8kHzMono,
+ SPSF_GSM610_11kHzMono,
+ SPSF_GSM610_22kHzMono,
+ SPSF_GSM610_44kHzMono,
+ SPSF_NUM_FORMATS,
+ SPDFID_Text,
+ SPDFID_WaveFormatEx,
+ SPREG_USER_ROOT,
+ SPREG_LOCAL_MACHINE_ROOT,
+ SPCAT_AUDIOOUT,
+ SPCAT_AUDIOIN,
+ SPCAT_VOICES,
+ SPCAT_RECOGNIZERS,
+ SPCAT_APPLEXICONS,
+ SPCAT_PHONECONVERTERS,
+ SPCAT_TEXTNORMALIZERS,
+ SPCAT_RECOPROFILES,
+ SPMMSYS_AUDIO_IN_TOKEN_ID,
+ SPMMSYS_AUDIO_OUT_TOKEN_ID,
+ SPCURRENT_USER_LEXICON_TOKEN_ID,
+ SPTOKENVALUE_CLSID,
+ SPTOKENKEY_FILES,
+ SPTOKENKEY_UI,
+ SPTOKENKEY_ATTRIBUTES
+};
+pub const SPTOKENKEY_RETAINEDAUDIO: &'static str = "SecondsPerRetainedAudioEvent";
+pub const SPTOKENKEY_AUDIO_LATENCY_WARNING: &'static str = "LatencyWarningThreshold";
+pub const SPTOKENKEY_AUDIO_LATENCY_TRUNCATE: &'static str = "LatencyTruncateThreshold";
+pub const SPTOKENKEY_AUDIO_LATENCY_UPDATE_INTERVAL: &'static str = "LatencyUpdateInterval";
+pub use um::sapi51::{
+ SPVOICECATEGORY_TTSRATE,
+ SPPROP_RESOURCE_USAGE,
+ SPPROP_HIGH_CONFIDENCE_THRESHOLD,
+ SPPROP_NORMAL_CONFIDENCE_THRESHOLD,
+ SPPROP_LOW_CONFIDENCE_THRESHOLD,
+ SPPROP_RESPONSE_SPEED,
+ SPPROP_COMPLEX_RESPONSE_SPEED,
+ SPPROP_ADAPTATION_ON,
+ SPPROP_PERSISTED_BACKGROUND_ADAPTATION,
+ SPPROP_PERSISTED_LANGUAGE_MODEL_ADAPTATION,
+ SPPROP_UX_IS_LISTENING,
+ SPTOPIC_SPELLING,
+ SPWILDCARD,
+ SPDICTATION
+};
+pub const SPREG_SAFE_USER_TOKENS: &'static str
+ = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\UserTokens";
+pub use um::sapi51::{
+ SPINFDICTATION,
+ SP_LOW_CONFIDENCE,
+ SP_NORMAL_CONFIDENCE,
+ SP_HIGH_CONFIDENCE,
+ DEFAULT_WEIGHT,
+ SP_MAX_WORD_LENGTH,
+ SP_MAX_PRON_LENGTH
+};
+pub const SP_EMULATE_RESULT: ULONG = 0x40000000;
+pub use um::sapi51::{
+ ISpNotifyCallback,
+ SPNOTIFYCALLBACK,
+ ISpNotifySource, ISpNotifySourceVtbl,
+ ISpNotifySink, ISpNotifySinkVtbl,
+ ISpNotifyTranslator, ISpNotifyTranslatorVtbl,
+ ISpDataKey, ISpDataKeyVtbl,
+ ISpRegDataKey, ISpRegDataKeyVtbl,
+ ISpObjectTokenCategory, ISpObjectTokenCategoryVtbl,
+ ISpObjectToken, ISpObjectTokenVtbl,
+ ISpObjectTokenInit, ISpObjectTokenInitVtbl,
+ IEnumSpObjectTokens, IEnumSpObjectTokensVtbl,
+ ISpObjectWithToken, ISpObjectWithTokenVtbl,
+ ISpResourceManager, ISpResourceManagerVtbl,
+ SPEVENTLPARAMTYPE,
+ SPET_LPARAM_IS_UNDEFINED,
+ SPET_LPARAM_IS_TOKEN,
+ SPET_LPARAM_IS_OBJECT,
+ SPET_LPARAM_IS_POINTER,
+ SPET_LPARAM_IS_STRING,
+ SPEVENTENUM,
+ SPEI_UNDEFINED,
+ SPEI_START_INPUT_STREAM,
+ SPEI_END_INPUT_STREAM,
+ SPEI_VOICE_CHANGE,
+ SPEI_TTS_BOOKMARK,
+ SPEI_WORD_BOUNDARY,
+ SPEI_PHONEME,
+ SPEI_SENTENCE_BOUNDARY,
+ SPEI_VISEME,
+ SPEI_TTS_AUDIO_LEVEL,
+ SPEI_TTS_PRIVATE,
+ SPEI_MIN_TTS,
+ SPEI_MAX_TTS,
+ SPEI_END_SR_STREAM,
+ SPEI_SOUND_START,
+ SPEI_SOUND_END,
+ SPEI_PHRASE_START,
+ SPEI_RECOGNITION,
+ SPEI_HYPOTHESIS,
+ SPEI_SR_BOOKMARK,
+ SPEI_PROPERTY_NUM_CHANGE,
+ SPEI_PROPERTY_STRING_CHANGE,
+ SPEI_FALSE_RECOGNITION,
+ SPEI_INTERFERENCE,
+ SPEI_REQUEST_UI,
+ SPEI_RECO_STATE_CHANGE,
+ SPEI_ADAPTATION,
+ SPEI_START_SR_STREAM,
+ SPEI_RECO_OTHER_CONTEXT,
+ SPEI_SR_AUDIO_LEVEL
+};
+pub const SPEI_SR_RETAINEDAUDIO: SPEVENTENUM = 51;
+pub use um::sapi51::SPEI_SR_PRIVATE;
+pub const SPEI_RESERVED4: SPEVENTENUM = 53;
+pub const SPEI_RESERVED5: SPEVENTENUM = 54;
+pub const SPEI_RESERVED6: SPEVENTENUM = 55;
+pub use um::sapi51::SPEI_MIN_SR;
+pub const SPEI_MAX_SR: SPEVENTENUM = 55;
+pub use um::sapi51::{
+ SPEI_RESERVED1,
+ SPEI_RESERVED2,
+ SPEI_RESERVED3,
+ SPFEI_FLAGCHECK,
+ SPFEI_ALL_TTS_EVENTS,
+ SPFEI_ALL_SR_EVENTS,
+ SPFEI_ALL_EVENTS,
+ SPFEI,
+ SPEVENT,
+ SPSERIALIZEDEVENT,
+ SPSERIALIZEDEVENT64
+};
+STRUCT!{struct SPEVENTEX {
+ eEventId: WORD,
+ elParamType: WORD,
+ ulStreamNum: ULONG,
+ ullAudioStreamOffset: ULONGLONG,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ullAudioTimeOffset: ULONGLONG,
+}}
+pub use um::sapi51::{
+ SPINTERFERENCE,
+ SPINTERFERENCE_NONE,
+ SPINTERFERENCE_NOISE,
+ SPINTERFERENCE_NOSIGNAL,
+ SPINTERFERENCE_TOOLOUD,
+ SPINTERFERENCE_TOOQUIET,
+ SPINTERFERENCE_TOOFAST,
+ SPINTERFERENCE_TOOSLOW,
+ SPINTERFERENCE_LATENCY_WARNING,
+ SPINTERFERENCE_LATENCY_TRUNCATE_BEGIN,
+ SPINTERFERENCE_LATENCY_TRUNCATE_END,
+ SPENDSRSTREAMFLAGS,
+ SPESF_NONE,
+ SPESF_STREAM_RELEASED
+};
+pub const SPESF_EMULATED: SPENDSRSTREAMFLAGS = 1 << 1;
+pub use um::sapi51::{
+ SPVFEATURE,
+ SPVFEATURE_STRESSED,
+ SPVFEATURE_EMPHASIS,
+ SPVISEMES,
+ SP_VISEME_0,
+ SP_VISEME_1,
+ SP_VISEME_2,
+ SP_VISEME_3,
+ SP_VISEME_4,
+ SP_VISEME_5,
+ SP_VISEME_6,
+ SP_VISEME_7,
+ SP_VISEME_8,
+ SP_VISEME_9,
+ SP_VISEME_10,
+ SP_VISEME_11,
+ SP_VISEME_12,
+ SP_VISEME_13,
+ SP_VISEME_14,
+ SP_VISEME_15,
+ SP_VISEME_16,
+ SP_VISEME_17,
+ SP_VISEME_18,
+ SP_VISEME_19,
+ SP_VISEME_20,
+ SP_VISEME_21,
+ SPEVENTSOURCEINFO,
+ ISpEventSource, ISpEventSourceVtbl,
+};
+RIDL!{#[uuid(0x2373a435, 0x6a4b, 0x429e, 0xa6, 0xac, 0xd4, 0x23, 0x1a, 0x61, 0x97, 0x5b)]
+interface ISpEventSource2(ISpEventSource2Vtbl): ISpEventSource(ISpEventSourceVtbl) {
+ fn GetEventsEx(
+ ulCount: ULONG,
+ pEventArray: *mut SPEVENTEX,
+ pulFetched: *mut ULONG,
+ ) -> HRESULT,
+}}
+pub use um::sapi51::{
+ ISpEventSink, ISpEventSinkVtbl,
+ ISpStreamFormat, ISpStreamFormatVtbl,
+ SPFILEMODE,
+ SPFM_OPEN_READONLY,
+ SPFM_OPEN_READWRITE,
+ SPFM_CREATE,
+ SPFM_CREATE_ALWAYS,
+ SPFM_NUM_MODES,
+ ISpStream, ISpStreamVtbl,
+ ISpStreamFormatConverter, ISpStreamFormatConverterVtbl,
+ SPAUDIOSTATE,
+ SPAS_CLOSED,
+ SPAS_STOP,
+ SPAS_PAUSE,
+ SPAS_RUN,
+ SPAUDIOSTATUS,
+ SPAUDIOBUFFERINFO,
+ ISpAudio, ISpAudioVtbl,
+ ISpMMSysAudio, ISpMMSysAudioVtbl,
+ ISpTranscript, ISpTranscriptVtbl,
+ SPDISPLAYATTRIBUTES,
+ SPAF_ONE_TRAILING_SPACE,
+ SPAF_TWO_TRAILING_SPACES,
+ SPAF_CONSUME_LEADING_SPACES
+};
+pub const SPAF_BUFFER_POSITION: SPDISPLAYATTRIBUTES = 0x10;
+pub const SPAF_ALL: SPDISPLAYATTRIBUTES = 0x1f;
+pub const SPAF_USER_SPECIFIED: SPDISPLAYATTRIBUTES = 0x80;
+pub use um::sapi51::{
+ SPPHONEID,
+ PSPPHONEID,
+ PCSPPHONEID,
+ SPPHRASEELEMENT,
+ SPPHRASERULE,
+ SPPHRASEPROPERTYUNIONTYPE,
+ SPPPUT_UNUSED,
+ SPPPUT_ARRAY_INDEX,
+ SPPHRASEPROPERTY,
+ SPPHRASEREPLACEMENT
+};
+STRUCT!{struct SPSEMANTICERRORINFO {
+ ulLineNumber: ULONG,
+ pszScriptLine: LPWSTR,
+ pszSource: LPWSTR,
+ pszDescription: LPWSTR,
+ hrResultCode: HRESULT,
+}}
+ENUM!{enum SPSEMANTICFORMAT {
+ SPSMF_SAPI_PROPERTIES = 0,
+ SPSMF_SRGS_SEMANTICINTERPRETATION_MS = 1,
+ SPSMF_SRGS_SAPIPROPERTIES = 2,
+ SPSMF_UPS = 4,
+ SPSMF_SRGS_SEMANTICINTERPRETATION_W3C = 8,
+}}
+pub use um::sapi51::SPPHRASE as SPPHRASE_50;
+// TODO: pub const SP_SPPHRASESIZE_500: usize = mem::size_of::<SPPHRASE_50>();
+STRUCT!{struct SPPHRASE {
+ cbSize: ULONG,
+ LangID: WORD,
+ wHomophoneGroupId: WORD,
+ ullGrammarID: ULONGLONG,
+ ftStartTime: ULONGLONG,
+ ullAudioStreamPosition: ULONGLONG,
+ ulAudioSizeBytes: ULONG,
+ ulRetainedSizeBytes: ULONG,
+ ulAudioSizeTime: ULONG,
+ Rule: SPPHRASERULE,
+ pProperties: *const SPPHRASEPROPERTY,
+ pElements: *const SPPHRASEELEMENT,
+ cReplacements: ULONG,
+ pReplacements: *const SPPHRASEREPLACEMENT,
+ SREngineID: GUID,
+ ulSREnginePrivateDataSize: ULONG,
+ pSREnginePrivateData: *const BYTE,
+ pSML: LPWSTR,
+ pSemanticErrorInfo: *mut SPSEMANTICERRORINFO,
+}}
+pub use um::sapi51::SPSERIALIZEDPHRASE;
+STRUCT!{struct SPRULE {
+ pszRuleName: LPCWSTR,
+ ulRuleId: ULONG,
+ dwAttributes: DWORD,
+}}
+pub use um::sapi51::{
+ SPVALUETYPE,
+ SPDF_PROPERTY,
+ SPDF_REPLACEMENT,
+ SPDF_RULE,
+ SPDF_DISPLAYTEXT,
+ SPDF_LEXICALFORM ,
+ SPDF_PRONUNCIATION,
+ SPDF_AUDIO,
+ SPDF_ALTERNATES,
+ SPDF_ALL,
+ SPBINARYGRAMMAR,
+ SPPHRASERNG,
+ SPPR_ALL_ELEMENTS,
+ SP_GETWHOLEPHRASE,
+ SPRR_ALL_ELEMENTS,
+ SPSTATEHANDLE,
+ SPRECOEVENTFLAGS,
+ SPREF_AutoPause,
+ SPREF_Emulated
+};
+pub const SPREF_SMLTimeout: SPRECOEVENTFLAGS = 1 << 2;
+pub const SPREF_ExtendableParse: SPRECOEVENTFLAGS = 1 << 3;
+pub const SPREF_ReSent: SPRECOEVENTFLAGS = 1 << 4;
+pub const SPREF_Hypothesis: SPRECOEVENTFLAGS = 1 << 5;
+pub const SPREF_FalseRecognition: SPRECOEVENTFLAGS = 1 << 6;
+pub use um::sapi51::{
+ SPPARTOFSPEECH,
+ SPPS_NotOverriden,
+ SPPS_Unknown,
+ SPPS_Noun,
+ SPPS_Verb,
+ SPPS_Modifier,
+ SPPS_Function,
+ SPPS_Interjection
+};
+pub const SPPS_Noncontent: SPPARTOFSPEECH = 0x6000;
+pub const SPPS_LMA: SPPARTOFSPEECH = 0x7000;
+pub const SPPS_SuppressWord: SPPARTOFSPEECH = 0xf000;
+pub use um::sapi51::{
+ SPLEXICONTYPE,
+ eLEXTYPE_USER,
+ eLEXTYPE_APP,
+ eLEXTYPE_VENDORLEXICON,
+ eLEXTYPE_LETTERTOSOUND,
+ eLEXTYPE_MORPHOLOGY,
+ eLEXTYPE_RESERVED4,
+ eLEXTYPE_USER_SHORTCUT,
+ eLEXTYPE_RESERVED6,
+ eLEXTYPE_RESERVED7,
+ eLEXTYPE_RESERVED8,
+ eLEXTYPE_RESERVED9,
+ eLEXTYPE_RESERVED10,
+ eLEXTYPE_PRIVATE1,
+ eLEXTYPE_PRIVATE2,
+ eLEXTYPE_PRIVATE3,
+ eLEXTYPE_PRIVATE4,
+ eLEXTYPE_PRIVATE5,
+ eLEXTYPE_PRIVATE6,
+ eLEXTYPE_PRIVATE7,
+ eLEXTYPE_PRIVATE8,
+ eLEXTYPE_PRIVATE9,
+ eLEXTYPE_PRIVATE10,
+ eLEXTYPE_PRIVATE11,
+ eLEXTYPE_PRIVATE12,
+ eLEXTYPE_PRIVATE13,
+ eLEXTYPE_PRIVATE14,
+ eLEXTYPE_PRIVATE15,
+ eLEXTYPE_PRIVATE16,
+ eLEXTYPE_PRIVATE17,
+ eLEXTYPE_PRIVATE18,
+ eLEXTYPE_PRIVATE19,
+ eLEXTYPE_PRIVATE20,
+ SPWORDTYPE,
+ eWORDTYPE_ADDED,
+ eWORDTYPE_DELETED
+};
+ENUM!{enum SPPRONUNCIATIONFLAGS {
+ ePRONFLAG_USED = 1 << 0,
+}}
+pub use um::sapi51::{
+ SPWORDPRONUNCIATION,
+ SPWORDPRONUNCIATIONLIST,
+ SPWORD,
+ SPWORDLIST,
+ ISpLexicon, ISpLexiconVtbl,
+ ISpContainerLexicon, ISpContainerLexiconVtbl,
+};
+ENUM!{enum SPSHORTCUTTYPE {
+ SPSHT_NotOverriden = -1i32 as u32,
+ SPSHT_Unknown = 0,
+ SPSHT_EMAIL = 0x1000,
+ SPSHT_OTHER = 0x2000,
+ SPPS_RESERVED1 = 0x3000,
+ SPPS_RESERVED2 = 0x4000,
+ SPPS_RESERVED3 = 0x5000,
+ SPPS_RESERVED4 = 0xf000,
+}}
+STRUCT!{struct SPSHORTCUTPAIR {
+ pNextSHORTCUTPAIR: *mut SPSHORTCUTPAIR,
+ LangID: WORD,
+ shType: SPSHORTCUTTYPE,
+ pszDisplay: LPWSTR,
+ pszSpoken: LPWSTR,
+}}
+STRUCT!{struct SPSHORTCUTPAIRLIST {
+ ulSize: ULONG,
+ pvBuffer: *mut BYTE,
+ pFirstShortcutPair: *mut SPSHORTCUTPAIR,
+}}
+RIDL!{#[uuid(0x3df681e2, 0xea56, 0x11d9, 0x8b, 0xde, 0xf6, 0x6b, 0xad, 0x1e, 0x3f, 0x3a)]
+interface ISpShortcut(ISpShortcutVtbl): IUnknown(IUnknownVtbl) {
+ fn AddShortcut(
+ pszDisplay: LPCWSTR,
+ LangID: WORD,
+ pszSpoken: LPCWSTR,
+ shType: SPSHORTCUTTYPE,
+ ) -> HRESULT,
+ fn RemoveShortcut(
+ pszDisplay: LPCWSTR,
+ LangID: WORD,
+ pszSpoken: LPCWSTR,
+ shType: SPSHORTCUTTYPE,
+ ) -> HRESULT,
+ fn GetShortcuts(
+ LangId: WORD,
+ pShortcutpairList: *mut SPSHORTCUTPAIRLIST,
+ ) -> HRESULT,
+ fn GetGeneration(
+ pdwGeneration: *mut DWORD,
+ ) -> HRESULT,
+ fn GetWordsFromGenerationChange(
+ pdwGeneration: *mut DWORD,
+ pWordList: *mut SPWORDLIST,
+ ) -> HRESULT,
+ fn GetWords(
+ pdwGeneration: *mut DWORD,
+ pdwCookie: *mut DWORD,
+ pWordList: *mut SPWORDLIST,
+ ) -> HRESULT,
+ fn GetShortcutsForGeneration(
+ pdwGeneration: *mut DWORD,
+ pdwCookie: *mut DWORD,
+ pShortcutpairList: *mut SPSHORTCUTPAIRLIST,
+ ) -> HRESULT,
+ fn GetGenerationChange(
+ pdwGeneration: *mut DWORD,
+ pShortcutpairList: *mut SPSHORTCUTPAIRLIST,
+ ) -> HRESULT,
+}}
+pub use um::sapi51::{ISpPhoneConverter, ISpPhoneConverterVtbl};
+RIDL!{#[uuid(0x133adcd4, 0x19b4, 0x4020, 0x9f, 0xdc, 0x84, 0x2e, 0x78, 0x25, 0x3b, 0x17)]
+interface ISpPhoneticAlphabetConverter(ISpPhoneticAlphabetConverterVtbl): IUnknown(IUnknownVtbl) {
+ fn GetLangId(
+ pLangID: *mut WORD,
+ ) -> HRESULT,
+ fn SetLangId(
+ LangID: WORD,
+ ) -> HRESULT,
+ fn SAPI2UPS(
+ pszSAPIId: *const SPPHONEID,
+ pszUPSId: *mut SPPHONEID,
+ cMaxLength: DWORD,
+ ) -> HRESULT,
+ fn UPS2SAPI(
+ pszUPSId: *const SPPHONEID,
+ pszSAPIId: *mut SPPHONEID,
+ cMaxLength: DWORD,
+ ) -> HRESULT,
+ fn GetMaxConvertLength(
+ cSrcLength: DWORD,
+ bSAPI2UPS: BOOL,
+ pcMaxDestLength: *mut DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xb2745efd, 0x42ce, 0x48ca, 0x81, 0xf1, 0xa9, 0x6e, 0x02, 0x53, 0x8a, 0x90)]
+interface ISpPhoneticAlphabetSelection(ISpPhoneticAlphabetSelectionVtbl): IUnknown(IUnknownVtbl) {
+ fn IsAlphabetUPS(
+ pfIsUPS: *mut BOOL,
+ ) -> HRESULT,
+ fn SetAlphabetToUPS(
+ fForceUPS: BOOL,
+ ) -> HRESULT,
+}}
+pub use um::sapi51::{
+ SPVPITCH,
+ SPVACTIONS,
+ SPVA_Speak,
+ SPVA_Silence,
+ SPVA_Pronounce,
+ SPVA_Bookmark,
+ SPVA_SpellOut,
+ SPVA_Section,
+ SPVA_ParseUnknownTag,
+ SPVCONTEXT,
+ SPVSTATE,
+ SPRUNSTATE,
+ SPRS_DONE,
+ SPRS_IS_SPEAKING,
+ SPVLIMITS,
+ SPMIN_VOLUME,
+ SPMAX_VOLUME,
+ SPMIN_RATE,
+ SPMAX_RATE,
+ SPVPRIORITY,
+ SPVPRI_NORMAL,
+ SPVPRI_ALERT,
+ SPVPRI_OVER,
+ SPVOICESTATUS,
+ SPEAKFLAGS,
+ SPF_DEFAULT,
+ SPF_ASYNC,
+ SPF_PURGEBEFORESPEAK,
+ SPF_IS_FILENAME,
+ SPF_IS_XML,
+ SPF_IS_NOT_XML,
+ SPF_PERSIST_XML,
+ SPF_NLP_SPEAK_PUNC,
+};
+pub const SPF_PARSE_SAPI: SPEAKFLAGS = 1 << 7;
+pub const SPF_PARSE_SSML: SPEAKFLAGS = 1 << 8;
+pub const SPF_PARSE_AUTODETECT: SPEAKFLAGS = 0;
+pub use um::sapi51::SPF_NLP_MASK;
+pub const SPF_PARSE_MASK: SPEAKFLAGS = SPF_PARSE_SAPI | SPF_PARSE_SSML;
+pub const SPF_VOICE_MASK: SPEAKFLAGS = ::um::sapi51::SPF_VOICE_MASK | SPF_PARSE_MASK;
+pub const SPF_UNUSED_FLAGS: SPEAKFLAGS = !SPF_VOICE_MASK;
+pub use um::sapi51::{
+ ISpVoice, ISpVoiceVtbl,
+ ISpPhrase, ISpPhraseVtbl,
+ ISpPhraseAlt, ISpPhraseAltVtbl,
+};
+ENUM!{enum SPXMLRESULTOPTIONS {
+ SPXRO_SML = 0,
+ SPXRO_Alternates_SML = 1,
+}}
+RIDL!{#[uuid(0xf264da52, 0xe457, 0x4696, 0xb8, 0x56, 0xa7, 0x37, 0xb7, 0x17, 0xaf, 0x79)]
+interface ISpPhrase2(ISpPhrase2Vtbl): ISpPhrase(ISpPhraseVtbl) {
+ fn GetXMLResult(
+ ppszCoMemXMLResult: *mut LPWSTR,
+ Options: SPXMLRESULTOPTIONS,
+ ) -> HRESULT,
+ fn GetXMLErrorInfo(
+ pSemanticErrorInfo: *mut SPSEMANTICERRORINFO,
+ ) -> HRESULT,
+ fn GetAudio(
+ ulStartElement: ULONG,
+ cElements: ULONG,
+ ppStream: *mut *mut ISpStreamFormat,
+ ) -> HRESULT,
+}}
+pub use um::sapi51::{
+ SPRECORESULTTIMES,
+ SPSERIALIZEDRESULT,
+ ISpRecoResult, ISpRecoResultVtbl,
+};
+ENUM!{enum SPCOMMITFLAGS {
+ SPCF_NONE = 0,
+ SPCF_ADD_TO_USER_LEXICON = 1 << 0,
+ SPCF_DEFINITE_CORRECTION = 1 << 1,
+}}
+RIDL!{#[uuid(0x27cac6c4, 0x88f2, 0x41f2, 0x88, 0x17, 0x0c, 0x95, 0xe5, 0x9f, 0x1e, 0x6e)]
+interface ISpRecoResult2(ISpRecoResult2Vtbl): ISpRecoResult(ISpRecoResultVtbl) {
+ fn CommitAlternate(
+ pPhraseAlt: *mut ISpPhraseAlt,
+ ppNewResult: *mut *mut ISpRecoResult,
+ ) -> HRESULT,
+ fn CommitText(
+ ulStartElement: ULONG,
+ cElements: ULONG,
+ pszCorrectedData: LPCWSTR,
+ eCommitFlags: DWORD,
+ ) -> HRESULT,
+ fn SetTextFeedback(
+ pszFeedback: LPCWSTR,
+ fSuccessful: BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xae39362b, 0x45a8, 0x4074, 0x9b, 0x9e, 0xcc, 0xf4, 0x9a, 0xa2, 0xd0, 0xb6)]
+interface ISpXMLRecoResult(ISpXMLRecoResultVtbl): ISpRecoResult(ISpRecoResultVtbl) {
+ fn GetXMLResult(
+ ppszCoMemXMLResult: *mut LPWSTR,
+ Options: SPXMLRESULTOPTIONS,
+ ) -> HRESULT,
+ fn GetXMLErrorInfo(
+ pSemanticErrorInfo: *mut SPSEMANTICERRORINFO,
+ ) -> HRESULT,
+}}
+pub use um::sapi51::{
+ SPTEXTSELECTIONINFO,
+ SPWORDPRONOUNCEABLE,
+ SPWP_UNKNOWN_WORD_UNPRONOUNCEABLE,
+ SPWP_UNKNOWN_WORD_PRONOUNCEABLE,
+ SPWP_KNOWN_WORD_PRONOUNCEABLE,
+ SPGRAMMARSTATE,
+ SPGS_DISABLED,
+ SPGS_ENABLED,
+ SPGS_EXCLUSIVE,
+ SPCONTEXTSTATE,
+ SPCS_DISABLED,
+ SPCS_ENABLED,
+ SPRULESTATE,
+ SPRS_INACTIVE,
+ SPRS_ACTIVE,
+ SPRS_ACTIVE_WITH_AUTO_PAUSE,
+};
+pub const SPRS_ACTIVE_USER_DELIMITED: SPRULESTATE = 4;
+pub use um::sapi51::{
+ SP_STREAMPOS_ASAP,
+ SP_STREAMPOS_REALTIME,
+ SPRULETRANS_TEXTBUFFER,
+ SPRULETRANS_WILDCARD,
+ SPRULETRANS_DICTATION,
+ SPGRAMMARWORDTYPE,
+ SPWT_DISPLAY,
+ SPWT_LEXICAL,
+ SPWT_PRONUNCIATION,
+};
+pub const SPWT_LEXICAL_NO_SPECIAL_CHARS: SPGRAMMARWORDTYPE = SPWT_PRONUNCIATION + 1;
+pub use um::sapi51::{
+ SPPROPERTYINFO,
+ SPCFGRULEATTRIBUTES,
+ SPRAF_TopLevel,
+ SPRAF_Active,
+ SPRAF_Export,
+ SPRAF_Import,
+ SPRAF_Interpreter,
+ SPRAF_Dynamic,
+};
+pub const SPRAF_Root: SPCFGRULEATTRIBUTES = 1 << 6;
+pub use um::sapi51::SPRAF_AutoPause;
+pub const SPRAF_UserDelimited: SPCFGRULEATTRIBUTES = 1 << 17;
+pub use um::sapi51::{
+ ISpGrammarBuilder, ISpGrammarBuilderVtbl,
+ SPLOADOPTIONS,
+ SPLO_STATIC,
+ SPLO_DYNAMIC,
+ ISpRecoGrammar, ISpRecoGrammarVtbl,
+};
+ENUM!{enum SPMATCHINGMODE {
+ AllWords = 0,
+ Subsequence = 1,
+ OrderedSubset = 3,
+ SubsequenceContentRequired = 5,
+ OrderedSubsetContentRequired = 7,
+}}
+ENUM!{enum PHONETICALPHABET {
+ PA_Ipa = 0,
+ PA_Ups = 1,
+ PA_Sapi = 2,
+}}
+RIDL!{#[uuid(0x8ab10026, 0x20cc, 0x4b20, 0x8c, 0x22, 0xa4, 0x9c, 0x9b, 0xa7, 0x8f, 0x60)]
+interface ISpGrammarBuilder2(ISpGrammarBuilder2Vtbl): IUnknown(IUnknownVtbl) {
+ fn AddTextSubset(
+ hFromState: SPSTATEHANDLE,
+ hToState: SPSTATEHANDLE,
+ psz: LPCWSTR,
+ eMatchMode: SPMATCHINGMODE,
+ ) -> HRESULT,
+ fn SetPhoneticAlphabet(
+ phoneticALphabet: PHONETICALPHABET,
+ ) -> HRESULT,
+}}
+pub const SPRP_NORMAL: i32 = 0; // TODO: Unknown purpose and type
+RIDL!{#[uuid(0x4b37bc9e, 0x9ed6, 0x44a3, 0x93, 0xd3, 0x18, 0xf0, 0x22, 0xb7, 0x9e, 0xc3)]
+interface ISpRecoGrammar2(ISpRecoGrammar2Vtbl): IUnknown(IUnknownVtbl) {
+ fn GetRules(
+ ppCoMemRules: *mut *mut SPRULE,
+ puNumRules: *mut UINT,
+ ) -> HRESULT,
+ fn LoadCmdFromFile2(
+ pszFileName: LPCWSTR,
+ Options: SPLOADOPTIONS,
+ pszSharingUri: LPCWSTR,
+ pszBaseUri: LPCWSTR,
+ ) -> HRESULT,
+ fn LoadCmdFromMemory2(
+ pGrammar: *const SPBINARYGRAMMAR,
+ Options: SPLOADOPTIONS,
+ pszSharingUri: LPCWSTR,
+ pszBaseUri: LPCWSTR,
+ ) -> HRESULT,
+ fn SetRulePriority(
+ pszRuleName: LPCWSTR,
+ ulRuleId: ULONG,
+ nRulePriority: c_int,
+ ) -> HRESULT,
+ fn SetRuleWeight(
+ pszRuleName: LPCWSTR,
+ ulRuleId: ULONG,
+ flWeight: c_float,
+ ) -> HRESULT,
+ fn SetDictationWeight(
+ flWeight: c_float,
+ ) -> HRESULT,
+ fn SetGrammarLoader(
+ pLoader: *mut ISpeechResourceLoader,
+ ) -> HRESULT,
+ fn SetSMLSecurityManager(
+ pSMLSecurityManager: *mut IInternetSecurityManager,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xb9ac5783, 0xfcd0, 0x4b21, 0xb1, 0x19, 0xb4, 0xf8, 0xda, 0x8f, 0xd2, 0xc3)]
+interface ISpeechResourceLoader(ISpeechResourceLoaderVtbl): IDispatch(IDispatchVtbl) {
+ fn LoadResource(
+ bstrResourceUri: BSTR,
+ fAlwaysReload: VARIANT_BOOL,
+ pStream: *mut *mut IUnknown,
+ pbstrMIMEType: *mut BSTR,
+ pfModified: *mut VARIANT_BOOL,
+ pbstrRedirectUrl: *mut BSTR,
+ ) -> HRESULT,
+ fn GetLocalCopy(
+ bstrResourceUri: BSTR,
+ pbstrLocalPath: *mut BSTR,
+ pbstrMIMEType: *mut BSTR,
+ pbstrRedirectUrl: *mut BSTR,
+ ) -> HRESULT,
+ fn ReleaseLocalCopy(
+ pbstrLocalPath: BSTR,
+ ) -> HRESULT,
+}}
+pub use um::sapi51::{
+ SPRECOCONTEXTSTATUS,
+ SPBOOKMARKOPTIONS,
+ SPBO_NONE,
+ SPBO_PAUSE,
+};
+pub const SPBO_AHEAD: SPBOOKMARKOPTIONS = 1 << 1;
+pub const SPBO_TIME_UNITS: SPBOOKMARKOPTIONS = 1 << 2;
+pub use um::sapi51::{
+ SPAUDIOOPTIONS,
+ SPAO_NONE,
+ SPAO_RETAIN_AUDIO,
+ ISpRecoContext, ISpRecoContextVtbl,
+};
+ENUM!{enum SPGRAMMAROPTIONS {
+ SPGO_SAPI = 0x1,
+ SPGO_SRGS = 0x2,
+ SPGO_UPS = 0x4,
+ SPGO_SRGS_MS_SCRIPT = 0x8,
+ SPGO_SRGS_W3C_SCRIPT = 0x100,
+ SPGO_SRGS_STG_SCRIPT = 0x200,
+ SPGO_SRGS_SCRIPT = SPGO_SRGS | SPGO_SRGS_MS_SCRIPT
+ | SPGO_SRGS_W3C_SCRIPT | SPGO_SRGS_STG_SCRIPT,
+ SPGO_FILE = 0x10,
+ SPGO_HTTP = 0x20,
+ SPGO_RES = 0x40,
+ SPGO_OBJECT = 0x80,
+ SPGO_DEFAULT = 0x3fb,
+ SPGO_ALL = 0x3ff,
+}}
+ENUM!{enum SPADAPTATIONSETTINGS {
+ SPADS_Default = 0,
+ SPADS_CurrentRecognizer = 0x1,
+ SPADS_RecoProfile = 0x2,
+ SPADS_Immediate = 0x4,
+ SPADS_Reset = 0x8,
+ SPADS_HighVolumeDataSource = 0x10,
+}}
+ENUM!{enum SPADAPTATIONRELEVANCE {
+ SPAR_Unknown = 0,
+ SPAR_Low = 1,
+ SPAR_Medium = 2,
+ SPAR_High = 3,
+}}
+RIDL!{#[uuid(0xbead311c, 0x52ff, 0x437f, 0x94, 0x64, 0x6b, 0x21, 0x05, 0x4c, 0xa7, 0x3d)]
+interface ISpRecoContext2(ISpRecoContext2Vtbl): IUnknown(IUnknownVtbl) {
+ fn SetGrammarOptions(
+ eGrammarOptions: DWORD,
+ ) -> HRESULT,
+ fn GetGrammarOptions(
+ peGrammarOptions: *mut DWORD,
+ ) -> HRESULT,
+ fn SetAdaptationData2(
+ pAdaptationData: LPCWSTR,
+ cch: ULONG,
+ pTopicName: LPCWSTR,
+ eAdaptationSettings: DWORD,
+ eRelevance: SPADAPTATIONRELEVANCE,
+ ) -> HRESULT,
+}}
+pub use um::sapi51::{
+ ISpProperties, ISpPropertiesVtbl,
+ SP_MAX_LANGIDS,
+ SPRECOGNIZERSTATUS,
+ SPWAVEFORMATTYPE,
+ SPWF_INPUT,
+ SPWF_SRENGINE,
+ SPSTREAMFORMATTYPE,
+ SPRECOSTATE,
+ SPRST_INACTIVE,
+ SPRST_ACTIVE,
+ SPRST_ACTIVE_ALWAYS,
+ SPRST_INACTIVE_WITH_PURGE,
+ SPRST_NUM_STATES,
+ ISpRecognizer, ISpRecognizerVtbl,
+};
+RIDL!{#[uuid(0x21b501a0, 0x0ec7, 0x46c9, 0x92, 0xc3, 0xa2, 0xbc, 0x78, 0x4c, 0x54, 0xb9)]
+interface ISpSerializeState(ISpSerializeStateVtbl): IUnknown(IUnknownVtbl) {
+ fn GetSerializedState(
+ ppbData: *mut *mut BYTE,
+ pulSize: *mut ULONG,
+ dwReserved: DWORD,
+ ) -> HRESULT,
+ fn SetSerializedState(
+ pbData: *mut BYTE,
+ ulSize: ULONG,
+ dwReserved: DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8fc6d974, 0xc81e, 0x4098, 0x93, 0xc5, 0x01, 0x47, 0xf6, 0x1e, 0xd4, 0xd3)]
+interface ISpRecognizer2(ISpRecognizer2Vtbl): IUnknown(IUnknownVtbl) {
+ fn EmulateRecognitionEx(
+ pPhrase: *mut ISpPhrase,
+ dwCompareFlags: DWORD,
+ ) -> HRESULT,
+ fn SetTrainingState(
+ fDoingTraining: BOOL,
+ fAdaptFromTrainingData: BOOL,
+ ) -> HRESULT,
+ fn ResetAcousticModelAdaptation() -> HRESULT,
+}}
+STRUCT!{struct SPNORMALIZATIONLIST {
+ ulSize: ULONG,
+ ppszzNormalizedList: *mut *mut WCHAR,
+}}
+RIDL!{#[uuid(0xc360ce4b, 0x76d1, 0x4214, 0xad, 0x68, 0x52, 0x65, 0x7d, 0x50, 0x83, 0xda)]
+interface ISpEnginePronunciation(ISpEnginePronunciationVtbl): IUnknown(IUnknownVtbl) {
+ fn Normalize(
+ pszWord: LPCWSTR,
+ pszLeftContext: LPCWSTR,
+ pszRightContext: LPCWSTR,
+ LangID: WORD,
+ pNormalizationList: *mut SPNORMALIZATIONLIST,
+ ) -> HRESULT,
+ fn GetPronunciations(
+ pszWord: LPCWSTR,
+ pszLeftContext: LPCWSTR,
+ pszRightContext: LPCWSTR,
+ LangID: WORD,
+ pEnginePronunciationList: *mut SPWORDPRONUNCIATIONLIST,
+ ) -> HRESULT,
+}}
+STRUCT!{struct SPDISPLAYTOKEN {
+ pszLexical: *const WCHAR,
+ pszDisplay: *const WCHAR,
+ bDisplayAttributes: BYTE,
+}}
+STRUCT!{struct SPDISPLAYPHRASE {
+ ulNumTokens: ULONG,
+ pTokens: *mut SPDISPLAYTOKEN,
+}}
+RIDL!{#[uuid(0xc8d7c7e2, 0x0dde, 0x44b7, 0xaf, 0xe3, 0xb0, 0xc9, 0x91, 0xfb, 0xeb, 0x5e)]
+interface ISpDisplayAlternates(ISpDisplayAlternatesVtbl): IUnknown(IUnknownVtbl) {
+ fn GetDisplayAlternates(
+ pPhrase: *const SPDISPLAYPHRASE,
+ cRequestCount: ULONG,
+ ppCoMemPhrases: *mut *mut SPDISPLAYPHRASE,
+ pcPhrasesReturned: *mut ULONG,
+ ) -> HRESULT,
+ fn SetFullStopTrailSpace(
+ ulTrailSpace: ULONG,
+ ) -> HRESULT,
+}}
+pub use um::sapi51::{
+ SpeechLanguageId,
+ DISPID_SpeechDataKey,
+ DISPID_SDKSetBinaryValue,
+ DISPID_SDKGetBinaryValue,
+ DISPID_SDKSetStringValue,
+ DISPID_SDKGetStringValue,
+ DISPID_SDKSetLongValue,
+ DISPID_SDKGetlongValue,
+ DISPID_SDKOpenKey,
+ DISPID_SDKCreateKey,
+ DISPID_SDKDeleteKey,
+ DISPID_SDKDeleteValue,
+ DISPID_SDKEnumKeys,
+ DISPID_SDKEnumValues,
+ DISPID_SpeechObjectToken,
+ DISPID_SOTId,
+ DISPID_SOTDataKey,
+ DISPID_SOTCategory,
+ DISPID_SOTGetDescription,
+ DISPID_SOTSetId,
+ DISPID_SOTGetAttribute,
+ DISPID_SOTCreateInstance,
+ DISPID_SOTRemove,
+ DISPID_SOTGetStorageFileName,
+ DISPID_SOTRemoveStorageFileName,
+ DISPID_SOTIsUISupported,
+ DISPID_SOTDisplayUI,
+ DISPID_SOTMatchesAttributes,
+ SpeechDataKeyLocation,
+ SDKLDefaultLocation,
+ SDKLCurrentUser,
+ SDKLLocalMachine,
+ SDKLCurrentConfig,
+ SpeechTokenContext,
+ STCInprocServer,
+ STCInprocHandler ,
+ STCLocalServer,
+ STCRemoteServer,
+ STCAll,
+ SpeechTokenShellFolder,
+ STSF_AppData,
+ STSF_LocalAppData,
+ STSF_CommonAppData,
+ STSF_FlagCreate,
+ DISPID_SpeechObjectTokens,
+ DISPID_SOTsCount,
+ DISPID_SOTsItem,
+ DISPID_SOTs_NewEnum,
+ DISPID_SpeechObjectTokenCategory,
+ DISPID_SOTCId,
+ DISPID_SOTCDefault,
+ DISPID_SOTCSetId,
+ DISPID_SOTCGetDataKey,
+ DISPID_SOTCEnumerateTokens,
+ SpeechAudioFormatType,
+ SAFTDefault,
+ SAFTNoAssignedFormat,
+ SAFTText,
+ SAFTNonStandardFormat,
+ SAFTExtendedAudioFormat,
+ SAFT8kHz8BitMono,
+ SAFT8kHz8BitStereo,
+ SAFT8kHz16BitMono,
+ SAFT8kHz16BitStereo,
+ SAFT11kHz8BitMono,
+ SAFT11kHz8BitStereo,
+ SAFT11kHz16BitMono,
+ SAFT11kHz16BitStereo,
+ SAFT12kHz8BitMono,
+ SAFT12kHz8BitStereo,
+ SAFT12kHz16BitMono,
+ SAFT12kHz16BitStereo,
+ SAFT16kHz8BitMono,
+ SAFT16kHz8BitStereo,
+ SAFT16kHz16BitMono,
+ SAFT16kHz16BitStereo,
+ SAFT22kHz8BitMono,
+ SAFT22kHz8BitStereo,
+ SAFT22kHz16BitMono,
+ SAFT22kHz16BitStereo,
+ SAFT24kHz8BitMono,
+ SAFT24kHz8BitStereo,
+ SAFT24kHz16BitMono,
+ SAFT24kHz16BitStereo,
+ SAFT32kHz8BitMono,
+ SAFT32kHz8BitStereo,
+ SAFT32kHz16BitMono,
+ SAFT32kHz16BitStereo,
+ SAFT44kHz8BitMono,
+ SAFT44kHz8BitStereo,
+ SAFT44kHz16BitMono,
+ SAFT44kHz16BitStereo,
+ SAFT48kHz8BitMono,
+ SAFT48kHz8BitStereo,
+ SAFT48kHz16BitMono,
+ SAFT48kHz16BitStereo,
+ SAFTTrueSpeech_8kHz1BitMono,
+ SAFTCCITT_ALaw_8kHzMono,
+ SAFTCCITT_ALaw_8kHzStereo,
+ SAFTCCITT_ALaw_11kHzMono,
+ SAFTCCITT_ALaw_11kHzStereo,
+ SAFTCCITT_ALaw_22kHzMono,
+ SAFTCCITT_ALaw_22kHzStereo,
+ SAFTCCITT_ALaw_44kHzMono,
+ SAFTCCITT_ALaw_44kHzStereo,
+ SAFTCCITT_uLaw_8kHzMono,
+ SAFTCCITT_uLaw_8kHzStereo,
+ SAFTCCITT_uLaw_11kHzMono,
+ SAFTCCITT_uLaw_11kHzStereo,
+ SAFTCCITT_uLaw_22kHzMono,
+ SAFTCCITT_uLaw_22kHzStereo,
+ SAFTCCITT_uLaw_44kHzMono,
+ SAFTCCITT_uLaw_44kHzStereo,
+ SAFTADPCM_8kHzMono,
+ SAFTADPCM_8kHzStereo,
+ SAFTADPCM_11kHzMono,
+ SAFTADPCM_11kHzStereo,
+ SAFTADPCM_22kHzMono,
+ SAFTADPCM_22kHzStereo,
+ SAFTADPCM_44kHzMono,
+ SAFTADPCM_44kHzStereo,
+ SAFTGSM610_8kHzMono,
+ SAFTGSM610_11kHzMono,
+ SAFTGSM610_22kHzMono,
+ SAFTGSM610_44kHzMono,
+ DISPID_SpeechAudioFormat,
+ DISPID_SAFType,
+ DISPID_SAFGuid,
+ DISPID_SAFGetWaveFormatEx,
+ DISPID_SAFSetWaveFormatEx,
+ DISPID_SpeechBaseStream,
+ DISPID_SBSFormat,
+ DISPID_SBSRead,
+ DISPID_SBSWrite,
+ DISPID_SBSSeek,
+ SpeechStreamSeekPositionType,
+ SSSPTRelativeToStart,
+ SSSPTRelativeToCurrentPosition,
+ SSSPTRelativeToEnd,
+ DISPID_SpeechAudio,
+ DISPID_SAStatus,
+ DISPID_SABufferInfo,
+ DISPID_SADefaultFormat,
+ DISPID_SAVolume,
+ DISPID_SABufferNotifySize,
+ DISPID_SAEventHandle,
+ DISPID_SASetState,
+ SpeechAudioState,
+ SASClosed,
+ SASStop,
+ SASPause,
+ SASRun,
+ DISPID_SpeechMMSysAudio,
+ DISPID_SMSADeviceId,
+ DISPID_SMSALineId,
+ DISPID_SMSAMMHandle,
+ DISPID_SpeechFileStream,
+ DISPID_SFSOpen,
+ DISPID_SFSClose,
+ SpeechStreamFileMode,
+ SSFMOpenForRead,
+ SSFMOpenReadWrite,
+ SSFMCreate,
+ SSFMCreateForWrite,
+ DISPID_SpeechCustomStream,
+ DISPID_SCSBaseStream,
+ DISPID_SpeechMemoryStream,
+ DISPID_SMSSetData,
+ DISPID_SMSGetData,
+ DISPID_SpeechAudioStatus,
+ DISPID_SASFreeBufferSpace,
+ DISPID_SASNonBlockingIO,
+ DISPID_SASState,
+ DISPID_SASCurrentSeekPosition,
+ DISPID_SASCurrentDevicePosition,
+ DISPID_SpeechAudioBufferInfo,
+ DISPID_SABIMinNotification,
+ DISPID_SABIBufferSize,
+ DISPID_SABIEventBias,
+ DISPID_SpeechWaveFormatEx,
+ DISPID_SWFEFormatTag,
+ DISPID_SWFEChannels,
+ DISPID_SWFESamplesPerSec,
+ DISPID_SWFEAvgBytesPerSec,
+ DISPID_SWFEBlockAlign,
+ DISPID_SWFEBitsPerSample,
+ DISPID_SWFEExtraData,
+ DISPID_SpeechVoice,
+ DISPID_SVStatus,
+ DISPID_SVVoice,
+ DISPID_SVAudioOutput,
+ DISPID_SVAudioOutputStream,
+ DISPID_SVRate,
+ DISPID_SVVolume,
+ DISPID_SVAllowAudioOuputFormatChangesOnNextSet,
+ DISPID_SVEventInterests,
+ DISPID_SVPriority,
+ DISPID_SVAlertBoundary,
+ DISPID_SVSyncronousSpeakTimeout,
+ DISPID_SVSpeak,
+ DISPID_SVSpeakStream,
+ DISPID_SVPause,
+ DISPID_SVResume,
+ DISPID_SVSkip,
+ DISPID_SVGetVoices,
+ DISPID_SVGetAudioOutputs,
+ DISPID_SVWaitUntilDone,
+ DISPID_SVSpeakCompleteEvent,
+ DISPID_SVIsUISupported,
+ DISPID_SVDisplayUI,
+ SpeechVoicePriority,
+ SVPNormal,
+ SVPAlert,
+ SVPOver,
+ SpeechVoiceSpeakFlags,
+ SVSFDefault,
+ SVSFlagsAsync,
+ SVSFPurgeBeforeSpeak,
+ SVSFIsFilename,
+ SVSFIsXML,
+ SVSFIsNotXML,
+ SVSFPersistXML,
+ SVSFNLPSpeakPunc,
+};
+pub const SVSFParseSapi: SpeechVoiceSpeakFlags = SPF_PARSE_SAPI;
+pub const SVSFParseSsml: SpeechVoiceSpeakFlags = SPF_PARSE_SSML;
+pub const SVSFParseAutodetect: SpeechVoiceSpeakFlags = SPF_PARSE_AUTODETECT;
+pub use um::sapi51::SVSFNLPMask;
+pub const SVSFParseMask: SpeechVoiceSpeakFlags = SPF_PARSE_MASK as u32;
+pub use um::sapi51::{
+ SVSFVoiceMask,
+ SVSFUnusedFlags,
+ SpeechVoiceEvents,
+ SVEStartInputStream,
+ SVEEndInputStream,
+ SVEVoiceChange,
+ SVEBookmark,
+ SVEWordBoundary,
+ SVEPhoneme,
+ SVESentenceBoundary,
+ SVEViseme,
+ SVEAudioLevel,
+ SVEPrivate,
+ SVEAllEvents,
+ DISPID_SpeechVoiceStatus,
+ DISPID_SVSCurrentStreamNumber,
+ DISPID_SVSLastStreamNumberQueued,
+ DISPID_SVSLastResult,
+ DISPID_SVSRunningState,
+ DISPID_SVSInputWordPosition,
+ DISPID_SVSInputWordLength,
+ DISPID_SVSInputSentencePosition,
+ DISPID_SVSInputSentenceLength,
+ DISPID_SVSLastBookmark,
+ DISPID_SVSLastBookmarkId,
+ DISPID_SVSPhonemeId,
+ DISPID_SVSVisemeId,
+ SpeechRunState,
+ SRSEDone,
+ SRSEIsSpeaking,
+ SpeechVisemeType,
+ SVP_0,
+ SVP_1,
+ SVP_2,
+ SVP_3,
+ SVP_4,
+ SVP_5,
+ SVP_6,
+ SVP_7,
+ SVP_8,
+ SVP_9,
+ SVP_10,
+ SVP_11,
+ SVP_12,
+ SVP_13,
+ SVP_14,
+ SVP_15,
+ SVP_16,
+ SVP_17,
+ SVP_18,
+ SVP_19,
+ SVP_20,
+ SVP_21,
+ SpeechVisemeFeature,
+ SVF_None,
+ SVF_Stressed,
+ SVF_Emphasis,
+ DISPID_SpeechVoiceEvent,
+ DISPID_SVEStreamStart,
+ DISPID_SVEStreamEnd,
+ DISPID_SVEVoiceChange,
+ DISPID_SVEBookmark,
+ DISPID_SVEWord,
+ DISPID_SVEPhoneme,
+ DISPID_SVESentenceBoundary,
+ DISPID_SVEViseme,
+ DISPID_SVEAudioLevel,
+ DISPID_SVEEnginePrivate,
+ DISPID_SpeechRecognizer,
+ DISPID_SRRecognizer,
+ DISPID_SRAllowAudioInputFormatChangesOnNextSet,
+ DISPID_SRAudioInput,
+ DISPID_SRAudioInputStream,
+ DISPID_SRIsShared,
+ DISPID_SRState,
+ DISPID_SRStatus,
+ DISPID_SRProfile,
+ DISPID_SREmulateRecognition,
+ DISPID_SRCreateRecoContext,
+ DISPID_SRGetFormat,
+ DISPID_SRSetPropertyNumber,
+ DISPID_SRGetPropertyNumber,
+ DISPID_SRSetPropertyString,
+ DISPID_SRGetPropertyString,
+ DISPID_SRIsUISupported,
+ DISPID_SRDisplayUI,
+ DISPID_SRGetRecognizers,
+ DISPID_SVGetAudioInputs,
+ DISPID_SVGetProfiles,
+ SpeechRecognizerState,
+ SRSInactive,
+ SRSActive,
+ SRSActiveAlways,
+ SRSInactiveWithPurge,
+ SpeechDisplayAttributes,
+ SDA_No_Trailing_Space,
+ SDA_One_Trailing_Space,
+ SDA_Two_Trailing_Spaces,
+ SDA_Consume_Leading_Spaces,
+ SpeechFormatType,
+ SFTInput,
+ SFTSREngine,
+};
+ENUM!{enum SpeechEmulationCompareFlags {
+ SECFIgnoreCase = 0x1,
+ SECFIgnoreKanaType = 0x10000,
+ SECFIgnoreWidth = 0x20000,
+ SECFNoSpecialChars = 0x20000000,
+ SECFEmulateResult = 0x40000000,
+ SECFDefault = SECFIgnoreCase | SECFIgnoreKanaType | SECFIgnoreWidth,
+}}
+pub use um::sapi51::{
+ DISPID_SpeechRecognizerStatus,
+ DISPID_SRSAudioStatus,
+ DISPID_SRSCurrentStreamPosition,
+ DISPID_SRSCurrentStreamNumber,
+ DISPID_SRSNumberOfActiveRules,
+ DISPID_SRSClsidEngine,
+ DISPID_SRSSupportedLanguages,
+ DISPID_SpeechRecoContext,
+ DISPID_SRCRecognizer,
+ DISPID_SRCAudioInInterferenceStatus,
+ DISPID_SRCRequestedUIType,
+ DISPID_SRCVoice,
+ DISPID_SRAllowVoiceFormatMatchingOnNextSet,
+ DISPID_SRCVoicePurgeEvent,
+ DISPID_SRCEventInterests,
+ DISPID_SRCCmdMaxAlternates,
+ DISPID_SRCState,
+ DISPID_SRCRetainedAudio,
+ DISPID_SRCRetainedAudioFormat,
+ DISPID_SRCPause,
+ DISPID_SRCResume,
+ DISPID_SRCCreateGrammar,
+ DISPID_SRCCreateResultFromMemory,
+ DISPID_SRCBookmark,
+ DISPID_SRCSetAdaptationData,
+ SpeechRetainedAudioOptions,
+ SRAONone,
+ SRAORetainAudio,
+ SpeechBookmarkOptions,
+ SBONone,
+ SBOPause,
+ SpeechInterference,
+ SINone,
+ SINoise,
+ SINoSignal,
+ SITooLoud,
+ SITooQuiet,
+ SITooFast,
+ SITooSlow,
+ SpeechRecoEvents,
+ SREStreamEnd,
+ SRESoundStart,
+ SRESoundEnd,
+ SREPhraseStart,
+ SRERecognition,
+ SREHypothesis,
+ SREBookmark,
+ SREPropertyNumChange,
+ SREPropertyStringChange,
+ SREFalseRecognition,
+ SREInterference,
+ SRERequestUI,
+ SREStateChange,
+ SREAdaptation,
+ SREStreamStart,
+ SRERecoOtherContext,
+ SREAudioLevel,
+ SREPrivate,
+ SREAllEvents,
+ SpeechRecoContextState,
+ SRCS_Disabled,
+ SRCS_Enabled,
+ DISPIDSPRG,
+ DISPID_SRGId,
+ DISPID_SRGRecoContext,
+ DISPID_SRGState,
+ DISPID_SRGRules,
+ DISPID_SRGReset,
+ DISPID_SRGCommit,
+ DISPID_SRGCmdLoadFromFile,
+ DISPID_SRGCmdLoadFromObject,
+ DISPID_SRGCmdLoadFromResource,
+ DISPID_SRGCmdLoadFromMemory,
+ DISPID_SRGCmdLoadFromProprietaryGrammar,
+ DISPID_SRGCmdSetRuleState,
+ DISPID_SRGCmdSetRuleIdState,
+ DISPID_SRGDictationLoad,
+ DISPID_SRGDictationUnload,
+ DISPID_SRGDictationSetState,
+ DISPID_SRGSetWordSequenceData,
+ DISPID_SRGSetTextSelection,
+ DISPID_SRGIsPronounceable,
+ SpeechLoadOption,
+ SLOStatic,
+ SLODynamic,
+ SpeechWordPronounceable,
+ SWPUnknownWordUnpronounceable,
+ SWPUnknownWordPronounceable,
+ SWPKnownWordPronounceable,
+ SpeechGrammarState,
+ SGSEnabled,
+ SGSDisabled,
+ SGSExclusive,
+ SpeechRuleState,
+ SGDSInactive,
+ SGDSActive,
+ SGDSActiveWithAutoPause,
+};
+pub const SGDSActiveUserDelimited: SpeechRuleState = SPRS_ACTIVE_USER_DELIMITED;
+pub use um::sapi51::{
+ SpeechRuleAttributes,
+ SRATopLevel,
+ SRADefaultToActive,
+ SRAExport,
+ SRAImport,
+ SRAInterpreter,
+ SRADynamic,
+};
+pub const SRARoot: SpeechRuleAttributes = SPRAF_Root;
+pub use um::sapi51::{
+ SpeechGrammarWordType,
+ SGDisplay,
+ SGLexical,
+ SGPronounciation,
+};
+pub const SGLexicalNoSpecialChars: SpeechGrammarWordType = SPWT_LEXICAL_NO_SPECIAL_CHARS;
+pub use um::sapi51::{
+ DISPID_SpeechRecoContextEvents,
+ DISPID_SRCEStartStream,
+ DISPID_SRCEEndStream,
+ DISPID_SRCEBookmark,
+ DISPID_SRCESoundStart,
+ DISPID_SRCESoundEnd,
+ DISPID_SRCEPhraseStart,
+ DISPID_SRCERecognition,
+ DISPID_SRCEHypothesis,
+ DISPID_SRCEPropertyNumberChange,
+ DISPID_SRCEPropertyStringChange,
+ DISPID_SRCEFalseRecognition,
+ DISPID_SRCEInterference,
+ DISPID_SRCERequestUI,
+ DISPID_SRCERecognizerStateChange,
+ DISPID_SRCEAdaptation,
+ DISPID_SRCERecognitionForOtherContext,
+ DISPID_SRCEAudioLevel,
+ DISPID_SRCEEnginePrivate,
+ SpeechRecognitionType,
+ SRTStandard,
+ SRTAutopause,
+ SRTEmulated,
+};
+pub const SRTSMLTimeout: SpeechRecognitionType = SPREF_SMLTimeout;
+pub const SRTExtendableParse: SpeechRecognitionType = SPREF_ExtendableParse;
+pub const SRTReSent: SpeechRecognitionType = SPREF_ReSent;
+pub use um::sapi51::{
+ DISPID_SpeechGrammarRule,
+ DISPID_SGRAttributes,
+ DISPID_SGRInitialState,
+ DISPID_SGRName,
+ DISPID_SGRId,
+ DISPID_SGRClear,
+ DISPID_SGRAddResource,
+ DISPID_SGRAddState,
+ DISPID_SpeechGrammarRules,
+ DISPID_SGRsCount,
+ DISPID_SGRsDynamic,
+ DISPID_SGRsAdd,
+ DISPID_SGRsCommit,
+ DISPID_SGRsCommitAndSave,
+ DISPID_SGRsFindRule,
+ DISPID_SGRsItem,
+ DISPID_SGRs_NewEnum,
+ DISPID_SpeechGrammarRuleState,
+ DISPID_SGRSRule,
+ DISPID_SGRSTransitions,
+ DISPID_SGRSAddWordTransition,
+ DISPID_SGRSAddRuleTransition,
+ DISPID_SGRSAddSpecialTransition,
+ SpeechSpecialTransitionType,
+ SSTTWildcard,
+ SSTTDictation,
+ SSTTTextBuffer,
+ DISPID_SpeechGrammarRuleStateTransitions,
+ DISPID_SGRSTsCount,
+ DISPID_SGRSTsItem,
+ DISPID_SGRSTs_NewEnum,
+ DISPID_SpeechGrammarRuleStateTransition,
+ DISPID_SGRSTType,
+ DISPID_SGRSTText,
+ DISPID_SGRSTRule,
+ DISPID_SGRSTWeight,
+ DISPID_SGRSTPropertyName,
+ DISPID_SGRSTPropertyId,
+ DISPID_SGRSTPropertyValue,
+ DISPID_SGRSTNextState,
+ SpeechGrammarRuleStateTransitionType,
+ SGRSTTEpsilon,
+ SGRSTTWord,
+ SGRSTTRule,
+ SGRSTTDictation,
+ SGRSTTWildcard,
+ SGRSTTTextBuffer,
+ DISPIDSPTSI,
+ DISPIDSPTSI_ActiveOffset,
+ DISPIDSPTSI_ActiveLength,
+ DISPIDSPTSI_SelectionOffset,
+ DISPIDSPTSI_SelectionLength,
+ DISPID_SpeechRecoResult,
+ DISPID_SRRRecoContext,
+ DISPID_SRRTimes,
+ DISPID_SRRAudioFormat,
+ DISPID_SRRPhraseInfo,
+ DISPID_SRRAlternates,
+ DISPID_SRRAudio,
+ DISPID_SRRSpeakAudio,
+ DISPID_SRRSaveToMemory,
+ DISPID_SRRDiscardResultInfo,
+ SpeechDiscardType,
+ SDTProperty,
+ SDTReplacement,
+ SDTRule,
+ SDTDisplayText,
+ SDTLexicalForm,
+ SDTPronunciation,
+ SDTAudio,
+ SDTAlternates,
+ SDTAll,
+};
+ENUM!{enum DISPID_SpeechXMLRecoResult {
+ DISPID_SRRGetXMLResult,
+ DISPID_SRRGetXMLErrorInfo,
+}}
+ENUM!{enum DISPID_SpeechRecoResult2 {
+ DISPID_SRRSetTextFeedback,
+}}
+pub use um::sapi51::{
+ DISPID_SpeechPhraseBuilder,
+ DISPID_SPPBRestorePhraseFromMemory,
+ DISPID_SpeechRecoResultTimes,
+ DISPID_SRRTStreamTime,
+ DISPID_SRRTLength,
+ DISPID_SRRTTickCount,
+ DISPID_SRRTOffsetFromStart,
+ DISPID_SpeechPhraseAlternate,
+ DISPID_SPARecoResult,
+ DISPID_SPAStartElementInResult,
+ DISPID_SPANumberOfElementsInResult,
+ DISPID_SPAPhraseInfo,
+ DISPID_SPACommit,
+ DISPID_SpeechPhraseAlternates,
+ DISPID_SPAsCount,
+ DISPID_SPAsItem,
+ DISPID_SPAs_NewEnum,
+ DISPID_SpeechPhraseInfo,
+ DISPID_SPILanguageId,
+ DISPID_SPIGrammarId,
+ DISPID_SPIStartTime,
+ DISPID_SPIAudioStreamPosition,
+ DISPID_SPIAudioSizeBytes,
+ DISPID_SPIRetainedSizeBytes,
+ DISPID_SPIAudioSizeTime,
+ DISPID_SPIRule,
+ DISPID_SPIProperties,
+ DISPID_SPIElements,
+ DISPID_SPIReplacements,
+ DISPID_SPIEngineId,
+ DISPID_SPIEnginePrivateData,
+ DISPID_SPISaveToMemory,
+ DISPID_SPIGetText,
+ DISPID_SPIGetDisplayAttributes,
+ DISPID_SpeechPhraseElement,
+ DISPID_SPEAudioTimeOffset,
+ DISPID_SPEAudioSizeTime,
+ DISPID_SPEAudioStreamOffset,
+ DISPID_SPEAudioSizeBytes,
+ DISPID_SPERetainedStreamOffset,
+ DISPID_SPERetainedSizeBytes,
+ DISPID_SPEDisplayText,
+ DISPID_SPELexicalForm,
+ DISPID_SPEPronunciation,
+ DISPID_SPEDisplayAttributes,
+ DISPID_SPERequiredConfidence,
+ DISPID_SPEActualConfidence,
+ DISPID_SPEEngineConfidence,
+ SpeechEngineConfidence,
+ SECLowConfidence,
+ SECNormalConfidence,
+ SECHighConfidence,
+ DISPID_SpeechPhraseElements,
+ DISPID_SPEsCount,
+ DISPID_SPEsItem,
+ DISPID_SPEs_NewEnum,
+ DISPID_SpeechPhraseReplacement,
+ DISPID_SPRDisplayAttributes,
+ DISPID_SPRText,
+ DISPID_SPRFirstElement,
+ DISPID_SPRNumberOfElements,
+ DISPID_SpeechPhraseReplacements,
+ DISPID_SPRsCount,
+ DISPID_SPRsItem,
+ DISPID_SPRs_NewEnum,
+ DISPID_SpeechPhraseProperty,
+ DISPID_SPPName,
+ DISPID_SPPId,
+ DISPID_SPPValue,
+ DISPID_SPPFirstElement,
+ DISPID_SPPNumberOfElements,
+ DISPID_SPPEngineConfidence,
+ DISPID_SPPConfidence,
+ DISPID_SPPParent,
+ DISPID_SPPChildren,
+ DISPID_SpeechPhraseProperties,
+ DISPID_SPPsCount,
+ DISPID_SPPsItem,
+ DISPID_SPPs_NewEnum,
+ DISPID_SpeechPhraseRule,
+ DISPID_SPRuleName,
+ DISPID_SPRuleId,
+ DISPID_SPRuleFirstElement,
+ DISPID_SPRuleNumberOfElements,
+ DISPID_SPRuleParent,
+ DISPID_SPRuleChildren,
+ DISPID_SPRuleConfidence,
+ DISPID_SPRuleEngineConfidence,
+ DISPID_SpeechPhraseRules,
+ DISPID_SPRulesCount,
+ DISPID_SPRulesItem,
+ DISPID_SPRules_NewEnum,
+ DISPID_SpeechLexicon,
+ DISPID_SLGenerationId,
+ DISPID_SLGetWords,
+ DISPID_SLAddPronunciation,
+ DISPID_SLAddPronunciationByPhoneIds,
+ DISPID_SLRemovePronunciation,
+ DISPID_SLRemovePronunciationByPhoneIds,
+ DISPID_SLGetPronunciations,
+ DISPID_SLGetGenerationChange,
+ SpeechLexiconType,
+ SLTUser,
+ SLTApp,
+ SpeechPartOfSpeech,
+ SPSNotOverriden,
+ SPSUnknown,
+ SPSNoun,
+ SPSVerb,
+ SPSModifier,
+ SPSFunction,
+ SPSInterjection,
+};
+pub const SPSLMA: SpeechPartOfSpeech = SPPS_LMA;
+pub const SPSSuppressWord: SpeechPartOfSpeech = SPPS_SuppressWord;
+pub use um::sapi51::{
+ DISPID_SpeechLexiconWords,
+ DISPID_SLWsCount,
+ DISPID_SLWsItem,
+ DISPID_SLWs_NewEnum,
+ SpeechWordType,
+ SWTAdded,
+ SWTDeleted,
+ DISPID_SpeechLexiconWord,
+ DISPID_SLWLangId,
+ DISPID_SLWType,
+ DISPID_SLWWord,
+ DISPID_SLWPronunciations,
+ DISPID_SpeechLexiconProns,
+ DISPID_SLPsCount,
+ DISPID_SLPsItem,
+ DISPID_SLPs_NewEnum,
+ DISPID_SpeechLexiconPronunciation,
+ DISPID_SLPType,
+ DISPID_SLPLangId,
+ DISPID_SLPPartOfSpeech,
+ DISPID_SLPPhoneIds,
+ DISPID_SLPSymbolic,
+ DISPID_SpeechPhoneConverter,
+ DISPID_SPCLangId,
+ DISPID_SPCPhoneToId,
+ DISPID_SPCIdToPhone,
+ LIBID_SpeechLib,
+ ISpeechDataKey, ISpeechDataKeyVtbl,
+ ISpeechObjectToken, ISpeechObjectTokenVtbl,
+ ISpeechObjectTokens, ISpeechObjectTokensVtbl,
+ ISpeechObjectTokenCategory, ISpeechObjectTokenCategoryVtbl,
+ ISpeechAudioBufferInfo, ISpeechAudioBufferInfoVtbl,
+ ISpeechAudioStatus, ISpeechAudioStatusVtbl,
+ ISpeechAudioFormat, ISpeechAudioFormatVtbl,
+ ISpeechWaveFormatEx, ISpeechWaveFormatExVtbl,
+ ISpeechBaseStream, ISpeechBaseStreamVtbl,
+ ISpeechFileStream, ISpeechFileStreamVtbl,
+ ISpeechMemoryStream, ISpeechMemoryStreamVtbl,
+ ISpeechCustomStream, ISpeechCustomStreamVtbl,
+ ISpeechAudio, ISpeechAudioVtbl,
+ ISpeechMMSysAudio, ISpeechMMSysAudioVtbl,
+ ISpeechVoice, ISpeechVoiceVtbl,
+ ISpeechVoiceStatus, ISpeechVoiceStatusVtbl,
+ _ISpeechVoiceEvents, _ISpeechVoiceEventsVtbl,
+ ISpeechRecognizer, ISpeechRecognizerVtbl,
+ ISpeechRecognizerStatus, ISpeechRecognizerStatusVtbl,
+ ISpeechRecoContext, ISpeechRecoContextVtbl,
+ ISpeechRecoGrammar, ISpeechRecoGrammarVtbl,
+ _ISpeechRecoContextEvents, _ISpeechRecoContextEventsVtbl,
+ ISpeechGrammarRule, ISpeechGrammarRuleVtbl,
+ ISpeechGrammarRules, ISpeechGrammarRulesVtbl,
+ ISpeechGrammarRuleState, ISpeechGrammarRuleStateVtbl,
+ ISpeechGrammarRuleStateTransition, ISpeechGrammarRuleStateTransitionVtbl,
+ ISpeechGrammarRuleStateTransitions, ISpeechGrammarRuleStateTransitionsVtbl,
+ ISpeechTextSelectionInformation, ISpeechTextSelectionInformationVtbl,
+ ISpeechRecoResult, ISpeechRecoResultVtbl,
+};
+RIDL!{#[uuid(0x8e0a246d, 0xd3c8, 0x45de, 0x86, 0x57, 0x04, 0x29, 0x0c, 0x45, 0x8c, 0x3c)]
+interface ISpeechRecoResult2(ISpeechRecoResult2Vtbl): ISpeechRecoResult(ISpeechRecoResultVtbl) {
+ fn SetTextFeedback(
+ Feedback: BSTR,
+ WasSuccessful: VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+pub use um::sapi51::{
+ ISpeechRecoResultTimes, ISpeechRecoResultTimesVtbl,
+ ISpeechPhraseAlternate, ISpeechPhraseAlternateVtbl,
+ ISpeechPhraseAlternates, ISpeechPhraseAlternatesVtbl,
+ ISpeechPhraseInfo, ISpeechPhraseInfoVtbl,
+ ISpeechPhraseElement, ISpeechPhraseElementVtbl,
+ ISpeechPhraseElements, ISpeechPhraseElementsVtbl,
+ ISpeechPhraseReplacement, ISpeechPhraseReplacementVtbl,
+ ISpeechPhraseReplacements, ISpeechPhraseReplacementsVtbl,
+ ISpeechPhraseProperty, ISpeechPhrasePropertyVtbl,
+ ISpeechPhraseProperties, ISpeechPhrasePropertiesVtbl,
+ ISpeechPhraseRule, ISpeechPhraseRuleVtbl,
+ ISpeechPhraseRules, ISpeechPhraseRulesVtbl,
+ ISpeechLexicon, ISpeechLexiconVtbl,
+ ISpeechLexiconWords, ISpeechLexiconWordsVtbl,
+ ISpeechLexiconWord, ISpeechLexiconWordVtbl,
+ ISpeechLexiconPronunciations, ISpeechLexiconPronunciationsVtbl,
+ ISpeechLexiconPronunciation, ISpeechLexiconPronunciationVtbl,
+ Speech_Default_Weight,
+ Speech_Max_Word_Length,
+ Speech_Max_Pron_Length,
+ Speech_StreamPos_Asap,
+ Speech_StreamPos_RealTime,
+ SpeechAllElements,
+};
+RIDL!{#[uuid(0xaaec54af, 0x8f85, 0x4924, 0x94, 0x4d, 0xb7, 0x9d, 0x39, 0xd7, 0x2e, 0x19)]
+interface ISpeechXMLRecoResult(ISpeechXMLRecoResultVtbl):
+ ISpeechRecoResult(ISpeechRecoResultVtbl) {
+ fn GetXMLResult(
+ Options: SPXMLRESULTOPTIONS,
+ pResult: *mut BSTR,
+ ) -> HRESULT,
+ fn GetXMLErrorInfo(
+ LineNumber: *mut c_long,
+ ScriptLine: *mut BSTR,
+ Source: *mut BSTR,
+ Description: *mut BSTR,
+ ResultCode: *mut c_long,
+ IsError: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x6d60eb64, 0xaced, 0x40a6, 0xbb, 0xf3, 0x4e, 0x55, 0x7f, 0x71, 0xde, 0xe2)]
+interface ISpeechRecoResultDispatch(ISpeechRecoResultDispatchVtbl): IDispatch(IDispatchVtbl) {
+ fn get_RecoContext(
+ RecoContext: *mut ISpeechRecoContext,
+ ) -> HRESULT,
+ fn get_Times(
+ Times: *mut ISpeechRecoResultTimes,
+ ) -> HRESULT,
+ fn putref_AudioFormat(
+ Format: *mut ISpeechAudioFormat,
+ ) -> HRESULT,
+ fn get_AudioFormat(
+ Format: *mut *mut ISpeechAudioFormat,
+ ) -> HRESULT,
+ fn get_PhraseInfo(
+ PhraseInfo: *mut *mut ISpeechPhraseInfo,
+ ) -> HRESULT,
+ fn Alternates(
+ RequestCount: c_long,
+ StartElement: c_long,
+ Elements: c_long,
+ Alternates: *mut *mut ISpeechPhraseAlternates,
+ ) -> HRESULT,
+ fn Audio(
+ StartElement: c_long,
+ Elements: c_long,
+ Stream: *mut *mut ISpeechMemoryStream,
+ ) -> HRESULT,
+ fn SpeakAudio(
+ StartElement: c_long,
+ Elements: c_long,
+ Flags: SpeechVoiceSpeakFlags,
+ StreamNumber: *mut c_long,
+ ) -> HRESULT,
+ fn SaveToMemory(
+ ResultBlock: *mut VARIANT,
+ ) -> HRESULT,
+ fn DiscardResultInfo(
+ ValueTypes: SpeechDiscardType,
+ ) -> HRESULT,
+ fn GetXMLResult(
+ Options: SPXMLRESULTOPTIONS,
+ pResult: *mut BSTR,
+ ) -> HRESULT,
+ fn GetXMLErrorInfo(
+ LineNumber: *mut c_long,
+ ScriptLine: *mut BSTR,
+ Source: *mut BSTR,
+ Description: *mut BSTR,
+ ResultCode: *mut HRESULT,
+ IsError: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn SetTextFeedback(
+ Feedback: BSTR,
+ WasSuccessful: VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+pub use um::sapi51::{
+ ISpeechPhraseInfoBuilder, ISpeechPhraseInfoBuilderVtbl,
+ ISpeechPhoneConverter, ISpeechPhoneConverterVtbl,
+ CLSID_SpNotifyTranslator,
+ CLSID_SpObjectTokenCategory,
+ CLSID_SpObjectToken,
+ CLSID_SpResourceManager,
+ CLSID_SpStreamFormatConverter,
+ CLSID_SpMMAudioEnum,
+ CLSID_SpMMAudioIn,
+ CLSID_SpMMAudioOut,
+ CLSID_SpStream,
+ CLSID_SpVoice,
+ CLSID_SpSharedRecoContext,
+ CLSID_SpInprocRecognizer,
+ CLSID_SpSharedRecognizer,
+ CLSID_SpLexicon,
+ CLSID_SpUnCompressedLexicon,
+ CLSID_SpCompressedLexicon,
+};
+extern {
+ pub static CLSID_SpShortcut: CLSID;
+}
+pub use um::sapi51::CLSID_SpPhoneConverter;
+extern {
+ pub static CLSID_SpPhoneticAlphabetConverter: CLSID;
+}
+pub use um::sapi51::{
+ CLSID_SpNullPhoneConverter,
+ CLSID_SpTextSelectionInformation,
+ CLSID_SpPhraseInfoBuilder,
+ CLSID_SpAudioFormat,
+ CLSID_SpWaveFormatEx,
+ CLSID_SpInProcRecoContext,
+ CLSID_SpCustomStream,
+ CLSID_SpFileStream,
+ CLSID_SpMemoryStream,
+};
diff --git a/vendor/winapi/src/um/sapiddk.rs b/vendor/winapi/src/um/sapiddk.rs
new file mode 100644
index 000000000..8ff59b523
--- /dev/null
+++ b/vendor/winapi/src/um/sapiddk.rs
@@ -0,0 +1,238 @@
+// 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 ctypes::{c_float, c_int, c_void};
+use shared::guiddef::CLSID;
+use shared::minwindef::{BOOL, DWORD, ULONG};
+use um::sapi::*;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPCWSTR, ULONGLONG, WCHAR};
+pub use um::sapiddk51::{
+ SPRECOEXTENSION,
+ SPALTERNATESCLSID,
+};
+pub const SR_LOCALIZED_DESCRIPTION: &'static str = "Description";
+pub use um::sapiddk51::{
+ ISpTokenUI, ISpTokenUIVtbl,
+ ISpObjectTokenEnumBuilder, ISpObjectTokenEnumBuilderVtbl,
+ SPWORDHANDLE,
+ SPRULEHANDLE,
+ SPGRAMMARHANDLE,
+ SPRECOCONTEXTHANDLE,
+ SPPHRASERULEHANDLE,
+ SPPHRASEPROPERTYHANDLE,
+ SPTRANSITIONID,
+ ISpErrorLog, ISpErrorLogVtbl,
+ ISpGrammarCompiler, ISpGrammarCompilerVtbl,
+ ISpGramCompBackend, ISpGramCompBackendVtbl,
+ ISpITNProcessor, ISpITNProcessorVtbl,
+ ISpPhraseBuilder, ISpPhraseBuilderVtbl,
+ ISpTask,
+ ISpThreadTask,
+ ISpThreadControl, ISpThreadControlVtbl,
+ SPTMTHREADINFO,
+ ISpTaskManager, ISpTaskManagerVtbl,
+ SPVSKIPTYPE,
+ SPVST_SENTENCE,
+ SPVESACTIONS,
+ SPVES_CONTINUE,
+ SPVES_ABORT,
+ SPVES_SKIP,
+ SPVES_RATE,
+ SPVES_VOLUME,
+ ISpTTSEngineSite, ISpTTSEngineSiteVtbl,
+ SPVTEXTFRAG,
+ ISpTTSEngine, ISpTTSEngineVtbl,
+ SPWORDENTRY,
+ SPRULEENTRY,
+ SPTRANSITIONTYPE,
+ SPTRANSEPSILON,
+ SPTRANSWORD,
+ SPTRANSRULE,
+ SPTRANSTEXTBUF,
+ SPTRANSWILDCARD,
+ SPTRANSDICTATION,
+ SPTRANSITIONENTRY,
+ SPTRANSITIONPROPERTY,
+ SPSTATEINFO,
+ SPPATHENTRY,
+ ISpCFGInterpreterSite, ISpCFGInterpreterSiteVtbl,
+ ISpCFGInterpreter, ISpCFGInterpreterVtbl,
+ SPCFGNOTIFY,
+ SPCFGN_ADD,
+ SPCFGN_REMOVE,
+ SPCFGN_INVALIDATE,
+ SPCFGN_ACTIVATE,
+ SPCFGN_DEACTIVATE,
+ SPRESULTTYPE,
+ SPRT_CFG,
+ SPRT_SLM,
+ SPRT_PROPRIETARY,
+ SPRT_FALSE_RECOGNITION,
+};
+pub const SPRT_TYPE_MASK: SPRESULTTYPE = 3;
+pub const SPRT_EMULATED: SPRESULTTYPE = 1 << 3;
+pub const SPRT_EXTENDABLE_PARSE: SPRESULTTYPE = 1 << 4;
+pub use um::sapiddk51::{
+ SPPHRASEALT,
+ SPRECORESULTINFO,
+};
+STRUCT!{struct SPRECORESULTINFOEX {
+ cbSize: ULONG,
+ eResultType: SPRESULTTYPE,
+ fHypothesis: BOOL,
+ fProprietaryAutoPause: BOOL,
+ ullStreamPosStart: ULONGLONG,
+ ullStreamPosEnd: ULONGLONG,
+ hGrammar: SPGRAMMARHANDLE,
+ ulSizeEngineData: ULONG,
+ pvEngineData: *mut c_void,
+ pPhrase: *mut ISpPhraseBuilder,
+ aPhraseAlts: *mut SPPHRASEALT,
+ ulNumAlts: ULONG,
+ ullStreamTimeStart: ULONGLONG,
+ ullStreamTimeEnd: ULONGLONG,
+}}
+pub use um::sapiddk51::{
+ SPWORDINFOOPT,
+ SPWIO_NONE,
+ SPWIO_WANT_TEXT,
+ SPRULEINFOOPT,
+ SPRIO_NONE,
+ SPPARSEINFO,
+ ISpSREngineSite, ISpSREngineSiteVtbl,
+};
+RIDL!{#[uuid(0x7bc6e012, 0x684a, 0x493e, 0xbd, 0xd4, 0x2b, 0xf5, 0xfb, 0xf4, 0x8c, 0xfe)]
+interface ISpSREngineSite2(ISpSREngineSite2Vtbl): ISpSREngineSite(ISpSREngineSiteVtbl) {
+ fn AddEventEx(
+ pEvent: *const SPEVENTEX,
+ hSAPIRecoContext: SPRECOCONTEXTHANDLE,
+ ) -> HRESULT,
+ fn UpdateRecoPosEx(
+ ullCurrentRecoPos: ULONGLONG,
+ ullCurrentRecoTime: ULONGLONG,
+ ) -> HRESULT,
+ fn GetRuleTransition(
+ ulGrammarID: ULONG,
+ RuleIndex: ULONG,
+ pTrans: *mut SPTRANSITIONENTRY,
+ ) -> HRESULT,
+ fn RecognitionEx(
+ pResultInfo: *const SPRECORESULTINFOEX,
+ ) -> HRESULT,
+}}
+pub use um::sapiddk51::{
+ SPPROPSRC,
+ SPPROPSRC_RECO_INST,
+ SPPROPSRC_RECO_CTX,
+ SPPROPSRC_RECO_GRAMMAR,
+ ISpSREngine, ISpSREngineVtbl,
+};
+RIDL!{#[uuid(0x7ba627d8, 0x33f9, 0x4375, 0x90, 0xc5, 0x99, 0x85, 0xae, 0xe5, 0xed, 0xe5)]
+interface ISpSREngine2(ISpSREngine2Vtbl): ISpSREngine(ISpSREngineVtbl) {
+ fn PrivateCallImmediate(
+ pvEngineContext: *mut c_void,
+ pInCallFrame: *const c_void,
+ ulInCallFrameSize: ULONG,
+ ppvCoMemResponse: *mut *mut c_void,
+ pulResponseSize: *mut ULONG,
+ ) -> HRESULT,
+ fn SetAdaptationData2(
+ pvEngineContext: *mut c_void,
+ pAdaptationData: *const WCHAR,
+ cch: ULONG,
+ pTopicName: LPCWSTR,
+ eSettings: SPADAPTATIONSETTINGS,
+ eRelevance: SPADAPTATIONRELEVANCE,
+ ) -> HRESULT,
+ fn SetGrammarPrefix(
+ pvEngineGrammar: *mut c_void,
+ pszPrefix: LPCWSTR,
+ fIsPrefixRequired: BOOL,
+ ) -> HRESULT,
+ fn SetRulePriority(
+ hRule: SPRULEHANDLE,
+ pvClientRuleContext: *mut c_void,
+ nRulePriority: c_int,
+ ) -> HRESULT,
+ fn EmulateRecognition(
+ pPhrase: *mut ISpPhrase,
+ dwCompareFlags: DWORD,
+ ) -> HRESULT,
+ fn SetSLMWeight(
+ pvEngineGrammar: *mut c_void,
+ flWeight: c_float,
+ ) -> HRESULT,
+ fn SetRuleWeight(
+ hRule: SPRULEHANDLE,
+ pvClientRuleContext: *mut c_void,
+ flWeight: c_float,
+ ) -> HRESULT,
+ fn SetTrainingState(
+ fDoingTraining: BOOL,
+ fAdaptFromTrainingData: BOOL,
+ ) -> HRESULT,
+ fn ResetAcousticModelAdaptation() -> HRESULT,
+ fn OnLoadCFG(
+ pvEngineGrammar: *mut c_void,
+ pvGrammarData: *const SPBINARYGRAMMAR,
+ ulGrammarID: ULONG,
+ ) -> HRESULT,
+ fn OnUnloadCFG(
+ pvEngineGrammar: *mut c_void,
+ ulGrammarID: ULONG,
+ ) -> HRESULT,
+}}
+pub use um::sapiddk51::SPPHRASEALTREQUEST;
+RIDL!{#[uuid(0xfece8294, 0x2be1, 0x408f, 0x8e, 0x68, 0x2d, 0xe3, 0x77, 0x09, 0x2f, 0x0e)]
+interface ISpSRAlternates(ISpSRAlternatesVtbl): IUnknown(IUnknownVtbl) {
+ fn GetAlternates(
+ pAltRequest: *mut SPPHRASEALTREQUEST,
+ ppAlts: *mut *mut SPPHRASEALT,
+ pcAlts: *mut ULONG,
+ ) -> HRESULT,
+ fn Commit(
+ pAltRequest: *mut SPPHRASEALTREQUEST,
+ pAlt: *mut SPPHRASEALT,
+ ppvResultExtra: *mut c_void,
+ pcbResultExtra: *mut ULONG,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xf338f437, 0xcb33, 0x4020, 0x9c, 0xab, 0xc7, 0x1f, 0xf9, 0xce, 0x12, 0xd3)]
+interface ISpSRAlternates2(ISpSRAlternates2Vtbl): ISpSRAlternates(ISpSRAlternatesVtbl) {
+ fn CommitText(
+ pAltRequest: *mut SPPHRASEALTREQUEST,
+ pcszNewText: LPCWSTR,
+ commitFlags: SPCOMMITFLAGS,
+ ) -> HRESULT,
+}}
+pub use um::sapiddk51::{_ISpPrivateEngineCall, _ISpPrivateEngineCallVtbl};
+RIDL!{#[uuid(0xdefd682a, 0xfe0a, 0x42b9, 0xbf, 0xa1, 0x56, 0xd3, 0xd6, 0xce, 0xcf, 0xaf)]
+interface ISpPrivateEngineCallEx(ISpPrivateEngineCallExVtbl): IUnknown(IUnknownVtbl) {
+ fn CallEngineSynchronize(
+ pInFrame: *const c_void,
+ ulInFrameSize: ULONG,
+ ppCoMemOutFrame: *mut *mut c_void,
+ pulOutFrameSize: *mut ULONG,
+ ) -> HRESULT,
+ fn CallEngineImmediate(
+ pInFrame: *const c_void,
+ ulInFrameSize: ULONG,
+ ppCoMemOutFrame: *mut *mut c_void,
+ pulOutFrameSize: *mut ULONG,
+ ) -> HRESULT,
+}}
+pub use um::sapiddk51::{
+ LIBID_SpeechDDKLib,
+ CLSID_SpDataKey,
+ CLSID_SpObjectTokenEnum,
+ CLSID_SpPhraseBuilder,
+ CLSID_SpITNProcessor,
+ CLSID_SpGrammarCompiler,
+};
+extern {
+ pub static CLSID_SpW3CGrammarCompiler: CLSID;
+}
+pub use um::sapiddk51::CLSID_SpGramCompBackend;
diff --git a/vendor/winapi/src/um/sapiddk51.rs b/vendor/winapi/src/um/sapiddk51.rs
new file mode 100644
index 000000000..0607cebfb
--- /dev/null
+++ b/vendor/winapi/src/um/sapiddk51.rs
@@ -0,0 +1,651 @@
+// 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 ctypes::{c_char, c_float, c_long, c_void};
+use shared::guiddef::{CLSID, GUID, IID, REFGUID};
+use shared::minwindef::{BOOL, BYTE, DWORD, ULONG, USHORT, WORD};
+use shared::mmreg::WAVEFORMATEX;
+use shared::windef::HWND;
+use um::oaidl::VARIANT;
+use um::objidlbase::IStream;
+use um::sapi::*;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HANDLE, HRESULT, LONG, LPCWSTR, LPWSTR, PVOID, ULONGLONG, WCHAR};
+pub const SPRECOEXTENSION: &'static str = "RecoExtension";
+pub const SPALTERNATESCLSID: &'static str = "AlternatesCLSID";
+RIDL!{#[uuid(0xf8e690f0, 0x39cb, 0x4843, 0xb8, 0xd7, 0xc8, 0x46, 0x96, 0xe1, 0x11, 0x9d)]
+interface ISpTokenUI(ISpTokenUIVtbl): IUnknown(IUnknownVtbl) {
+ fn IsUISupported(
+ pszTypeOfUI: LPCWSTR,
+ pvExtraData: *mut c_void,
+ cbExtraData: ULONG,
+ punkObject: *mut IUnknown,
+ pfSupported: *mut BOOL,
+ ) -> HRESULT,
+ fn DisplayUI(
+ hwndParent: HWND,
+ pszTitle: LPCWSTR,
+ pszTypeOfUI: LPCWSTR,
+ pvExtraData: *mut c_void,
+ cbExtraData: ULONG,
+ pToken: *mut ISpObjectToken,
+ punkObject: *mut IUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x06b64f9f, 0x7fda, 0x11d2, 0xb4, 0xf2, 0x00, 0xc0, 0x4f, 0x79, 0x73, 0x96)]
+interface ISpObjectTokenEnumBuilder(ISpObjectTokenEnumBuilderVtbl):
+ IEnumSpObjectTokens(IEnumSpObjectTokensVtbl) {
+ fn SetAttribs(
+ pszReqAttribs: LPCWSTR,
+ pszOptAttribs: LPCWSTR,
+ ) -> HRESULT,
+ fn AddTokens(
+ cTokens: ULONG,
+ pToken: *mut *mut ISpObjectToken,
+ ) -> HRESULT,
+ fn AddTokensFromDataKey(
+ pDataKey: *mut ISpDataKey,
+ pszSubKey: LPCWSTR,
+ pszCategoryId: LPCWSTR,
+ ) -> HRESULT,
+ fn AddTokensFromTokenEnum(
+ pTokenEnum: *mut IEnumSpObjectTokens,
+ ) -> HRESULT,
+ fn Sort(
+ pszTokenIdToListFirst: LPCWSTR,
+ ) -> HRESULT,
+}}
+DECLARE_HANDLE!{SPWORDHANDLE, SPWORDHANDLE__}
+DECLARE_HANDLE!{SPRULEHANDLE, SPRULEHANDLE__}
+DECLARE_HANDLE!{SPGRAMMARHANDLE, SPGRAMMARHANDLE__}
+DECLARE_HANDLE!{SPRECOCONTEXTHANDLE, SPRECOCONTEXTHANDLE__}
+DECLARE_HANDLE!{SPPHRASERULEHANDLE, SPPHRASERULEHANDLE__}
+DECLARE_HANDLE!{SPPHRASEPROPERTYHANDLE, SPPHRASEPROPERTYHANDLE__}
+DECLARE_HANDLE!{SPTRANSITIONID, SPTRANSITIONID__}
+RIDL!{#[uuid(0xf4711347, 0xe608, 0x11d2, 0xa0, 0x86, 0x00, 0xc0, 0x4f, 0x8e, 0xf9, 0xb5)]
+interface ISpErrorLog(ISpErrorLogVtbl): IUnknown(IUnknownVtbl) {
+ fn AddError(
+ lLineNumber: c_long,
+ hr: HRESULT,
+ pszDescription: LPCWSTR,
+ pszHelpFile: LPCWSTR,
+ dwHelpContext: DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xb1e29d58, 0xa675, 0x11d2, 0x83, 0x02, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0xc0)]
+interface ISpGrammarCompiler(ISpGrammarCompilerVtbl): IUnknown(IUnknownVtbl) {
+ fn CompileStream(
+ pSource: *mut IStream,
+ pDest: *mut IStream,
+ pHeader: *mut IStream,
+ pReserved: *mut IUnknown,
+ pErrorLog: *mut ISpErrorLog,
+ dwFlags: DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3ddca27c, 0x665c, 0x4786, 0x9f, 0x97, 0x8c, 0x90, 0xc3, 0x48, 0x8b, 0x61)]
+interface ISpGramCompBackend(ISpGramCompBackendVtbl): ISpGrammarBuilder(ISpGrammarBuilderVtbl) {
+ fn SetSaveObjects(
+ pStream: *mut IStream,
+ pErrorLog: *mut ISpErrorLog,
+ ) -> HRESULT,
+ fn InitFromBinaryGrammar(
+ pBinaryData: *const SPBINARYGRAMMAR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x12d7360f, 0xa1c9, 0x11d3, 0xbc, 0x90, 0x00, 0xc0, 0x4f, 0x72, 0xdf, 0x9f)]
+interface ISpITNProcessor(ISpITNProcessorVtbl): IUnknown(IUnknownVtbl) {
+ fn LoadITNGrammar(
+ pszCLSID: LPWSTR,
+ ) -> HRESULT,
+ fn ITNPhrase(
+ pPhrase: *mut ISpPhraseBuilder,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x88a3342a, 0x0bed, 0x4834, 0x92, 0x2b, 0x88, 0xd4, 0x31, 0x73, 0x16, 0x2f)]
+interface ISpPhraseBuilder(ISpPhraseBuilderVtbl): ISpPhrase(ISpPhraseVtbl) {
+ fn InitFromPhrase(
+ pPhrase: *const SPPHRASE,
+ ) -> HRESULT,
+ fn InitFromSerializedPhrase(
+ pPhrase: *const SPSERIALIZEDPHRASE,
+ ) -> HRESULT,
+ fn AddElements(
+ cElements: ULONG,
+ pElement: *const SPPHRASEELEMENT,
+ ) -> HRESULT,
+ fn AddRules(
+ hParent: SPPHRASERULEHANDLE,
+ pRule: *const SPPHRASERULE,
+ phNewRule: *mut SPPHRASERULEHANDLE,
+ ) -> HRESULT,
+ fn AddProperties(
+ hParent: SPPHRASEPROPERTYHANDLE,
+ pProperty: *const SPPHRASEPROPERTY,
+ phNewProperty: *mut SPPHRASEPROPERTYHANDLE,
+ ) -> HRESULT,
+ fn AddReplacements(
+ cReplacements: ULONG,
+ pReplacements: *const SPPHRASEREPLACEMENT,
+ ) -> HRESULT,
+}}
+pub type ISpTask = *mut c_void;
+pub type ISpThreadTask = *mut c_void;
+RIDL!{#[uuid(0xa6be4d73, 0x4403, 0x4358, 0xb2, 0x2d, 0x03, 0x46, 0xe2, 0x3b, 0x17, 0x64)]
+interface ISpThreadControl(ISpThreadControlVtbl): ISpNotifySink(ISpNotifySinkVtbl) {
+ fn StartThread(
+ dwFlags: DWORD,
+ phwnd: *mut HWND,
+ ) -> HRESULT,
+ fn WaitForThreadDone(
+ fForceStop: BOOL,
+ phrThreadResult: *mut HRESULT,
+ msTimeOut: ULONG,
+ ) -> HRESULT,
+ fn TerminateThread() -> HRESULT,
+ fn ThreadHandle() -> HANDLE,
+ fn ThreadId() -> DWORD,
+ fn NotifyEvent() -> HANDLE,
+ fn WindowHandle() -> HWND,
+ fn ThreadCompleteEvent() -> HANDLE,
+ fn ExitThreadEvent() -> HANDLE,
+}}
+STRUCT!{struct SPTMTHREADINFO {
+ lPoolSize: c_long,
+ lPriority: c_long,
+ ulConcurrencyLimit: ULONG,
+ ulMaxQuickAllocThreads: ULONG,
+}}
+RIDL!{#[uuid(0x2baeef81, 0x2ca3, 0x4331, 0x98, 0xf3, 0x26, 0xec, 0x5a, 0xbe, 0xfb, 0x03)]
+interface ISpTaskManager(ISpTaskManagerVtbl): IUnknown(IUnknownVtbl) {
+ fn SetThreadPoolInfo(
+ pPoolInfo: *const SPTMTHREADINFO,
+ ) -> HRESULT,
+ fn GetThreadPoolInfo(
+ pPoolInfo: *mut SPTMTHREADINFO,
+ ) -> HRESULT,
+ fn QueueTask(
+ pTask: *mut ISpTask,
+ pvTaskData: *mut c_void,
+ hCompEvent: HANDLE,
+ pdwGroupId: *mut DWORD,
+ pTaskID: *mut DWORD,
+ ) -> HRESULT,
+ fn CreateReoccurringTask(
+ pTask: *mut ISpTask,
+ pvTaskData: *mut c_void,
+ hCompEvent: HANDLE,
+ ppTaskCtrl: *mut *mut ISpNotifySink,
+ ) -> HRESULT,
+ fn CreateThreadControl(
+ pTask: *mut ISpThreadTask,
+ pvTaskData: *mut c_void,
+ nPriority: c_long,
+ ppTaskCtrl: *mut *mut ISpThreadControl,
+ ) -> HRESULT,
+ fn TerminateTask(
+ dwGroupId: DWORD,
+ ulWaitPeriod: ULONG,
+ ) -> HRESULT,
+}}
+ENUM!{enum SPVSKIPTYPE {
+ SPVST_SENTENCE = 1 << 0,
+}}
+ENUM!{enum SPVESACTIONS {
+ SPVES_CONTINUE = 0,
+ SPVES_ABORT = 1 << 0,
+ SPVES_SKIP = 1 << 1,
+ SPVES_RATE = 1 << 2,
+ SPVES_VOLUME = 1 << 3,
+}}
+RIDL!{#[uuid(0x9880499b, 0xcce9, 0x11d2, 0xb5, 0x03, 0x00, 0xc0, 0x4f, 0x79, 0x73, 0x96)]
+interface ISpTTSEngineSite(ISpTTSEngineSiteVtbl): ISpEventSink(ISpEventSinkVtbl) {
+ fn GetActions() -> DWORD,
+ fn Write(
+ pBuff: *const c_void,
+ cb: ULONG,
+ pcbWritten: *mut ULONG,
+ ) -> HRESULT,
+ fn GetRate(
+ pRateAdjust: *mut c_long,
+ ) -> HRESULT,
+ fn GetVolume(pusVolume: *mut USHORT,
+ ) -> HRESULT,
+ fn GetSkipInfo(
+ peType: *mut SPVSKIPTYPE,
+ plNumItems: *mut c_long,
+ ) -> HRESULT,
+ fn CompleteSkip(
+ ulNumSkipped: c_long,
+ ) -> HRESULT,
+}}
+STRUCT!{struct SPVTEXTFRAG {
+ pNext: *mut SPVTEXTFRAG,
+ State: SPVSTATE,
+ pTextStart: LPCWSTR,
+ ulTextLen: ULONG,
+ ulTextSrcOffset: ULONG,
+}}
+RIDL!{#[uuid(0xa74d7c8e, 0x4cc5, 0x4f2f, 0xa6, 0xeb, 0x80, 0x4d, 0xee, 0x18, 0x50, 0x0e)]
+interface ISpTTSEngine(ISpTTSEngineVtbl): IUnknown(IUnknownVtbl) {
+ fn Speak(
+ dwSpeakFlags: DWORD,
+ rguidFormatId: REFGUID,
+ pWaveFormatEx: *const WAVEFORMATEX,
+ pTextFragList: *const SPVTEXTFRAG,
+ pOutputSite: *mut ISpTTSEngineSite,
+ ) -> HRESULT,
+ fn GetOutputFormat(
+ pTargetFmtId: *const GUID,
+ pTargetWaveFormatEx: *const WAVEFORMATEX,
+ pOutputFormatId: *mut GUID,
+ ppCoMemOutputWaveFormatEx: *mut WAVEFORMATEX,
+ ) -> HRESULT,
+}}
+STRUCT!{struct SPWORDENTRY {
+ hWord: SPWORDHANDLE,
+ LangID: WORD,
+ pszDisplayText: *mut WCHAR,
+ pszLexicalForm: *mut WCHAR,
+ aPhoneId: *mut SPPHONEID,
+ pvClientContext: *mut c_void,
+}}
+STRUCT!{struct SPRULEENTRY {
+ hRule: SPRULEHANDLE,
+ hInitialState: SPSTATEHANDLE,
+ Attributes: DWORD,
+ pvClientRuleContext: *mut c_void,
+ pvClientGrammarContext: *mut c_void,
+}}
+ENUM!{enum SPTRANSITIONTYPE {
+ SPTRANSEPSILON = 0,
+ SPTRANSWORD,
+ SPTRANSRULE,
+ SPTRANSTEXTBUF,
+ SPTRANSWILDCARD,
+ SPTRANSDICTATION,
+}}
+STRUCT!{struct SPTRANSITIONENTRY_u_s1 {
+ hRuleInitialState: SPSTATEHANDLE,
+ hRule: SPRULEHANDLE,
+ pvClientRuleContext: *mut c_void,
+}}
+STRUCT!{struct SPTRANSITIONENTRY_u_s2 {
+ hWord: SPWORDHANDLE,
+ pvClientWordContext: *mut c_void,
+}}
+UNION!{union SPTRANSITIONENTRY_u {
+ [usize; 3],
+ s1 s1_mut: SPTRANSITIONENTRY_u_s1,
+ s2 s2_mut: SPTRANSITIONENTRY_u_s2,
+ pvGrammarCookie pvGrammarCookie_mut: *mut c_void,
+}}
+STRUCT!{struct SPTRANSITIONENTRY {
+ ID: SPTRANSITIONID,
+ hNextState: SPSTATEHANDLE,
+ Type: BYTE,
+ RequiredConfidence: c_char,
+ fHasProperty: DWORD,
+ Weight: c_float,
+ u: SPTRANSITIONENTRY_u,
+}}
+STRUCT!{struct SPTRANSITIONPROPERTY {
+ pszName: LPCWSTR,
+ ulId: ULONG,
+ pszValue: LPCWSTR,
+ vValue: VARIANT,
+}}
+STRUCT!{struct SPSTATEINFO {
+ cAllocatedEntries: ULONG,
+ pTransitions: *mut SPTRANSITIONENTRY,
+ cEpsilons: ULONG,
+ cRules: ULONG,
+ cWords: ULONG,
+ cSpecialTransitions: ULONG,
+}}
+STRUCT!{struct SPPATHENTRY {
+ hTransition: SPTRANSITIONID,
+ elem: SPPHRASEELEMENT,
+}}
+RIDL!{#[uuid(0x6a6ffad8, 0x78b6, 0x473d, 0xb8, 0x44, 0x98, 0x15, 0x2e, 0x4f, 0xb1, 0x6b)]
+interface ISpCFGInterpreterSite(ISpCFGInterpreterSiteVtbl): IUnknown(IUnknownVtbl) {
+ fn AddTextReplacement(
+ pReplace: *mut SPPHRASEREPLACEMENT,
+ ) -> HRESULT,
+ fn AddProperty(
+ pProperty: *const SPPHRASEPROPERTY,
+ ) -> HRESULT,
+ fn GetResourceValue(
+ pszResourceName: LPCWSTR,
+ ppCoMemResource: *mut LPWSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xf3d3f926, 0x11fc, 0x11d3, 0xbb, 0x97, 0x00, 0xc0, 0x4f, 0x8e, 0xe6, 0xc0)]
+interface ISpCFGInterpreter(ISpCFGInterpreterVtbl): IUnknown(IUnknownVtbl) {
+ fn InitGrammar(
+ pszGrammarName: LPCWSTR,
+ pvGrammarData: *mut *const c_void,
+ ) -> HRESULT,
+ fn Interpret(
+ pPhrase: *mut ISpPhraseBuilder,
+ ulFirstElement: *const ULONG,
+ ulCountOfElements: *const ULONG,
+ pSite: *mut ISpCFGInterpreterSite,
+ ) -> HRESULT,
+}}
+ENUM!{enum SPCFGNOTIFY {
+ SPCFGN_ADD,
+ SPCFGN_REMOVE,
+ SPCFGN_INVALIDATE,
+ SPCFGN_ACTIVATE,
+ SPCFGN_DEACTIVATE,
+}}
+ENUM!{enum SPRESULTTYPE {
+ SPRT_CFG = 0,
+ SPRT_SLM = 1,
+ SPRT_PROPRIETARY = 2,
+ SPRT_FALSE_RECOGNITION = 1 << 2,
+}}
+STRUCT!{struct SPPHRASEALT {
+ pPhrase: *mut ISpPhraseBuilder,
+ ulStartElementInParent: ULONG,
+ cElementsInParent: ULONG,
+ cElementsInAlternate: ULONG,
+ pvAltExtra: *mut c_void,
+ cbAltExtra: ULONG,
+}}
+STRUCT!{struct SPRECORESULTINFO {
+ cbSize: ULONG,
+ eResultType: SPRESULTTYPE,
+ fHypothesis: BOOL,
+ fProprietaryAutoPause: BOOL,
+ ullStreamPosStart: ULONGLONG,
+ ullStreamPosEnd: ULONGLONG,
+ hGrammar: SPGRAMMARHANDLE,
+ ulSizeEngineData: ULONG,
+ pvEngineData: *mut c_void,
+ pPhrase: *mut ISpPhraseBuilder,
+ aPhraseAlts: *mut SPPHRASEALT,
+ ulNumAlts: ULONG,
+}}
+ENUM!{enum SPWORDINFOOPT {
+ SPWIO_NONE = 0,
+ SPWIO_WANT_TEXT = 1,
+}}
+ENUM!{enum SPRULEINFOOPT {
+ SPRIO_NONE = 0,
+}}
+STRUCT!{struct SPPARSEINFO {
+ cbSize: ULONG,
+ hRule: SPRULEHANDLE,
+ ullAudioStreamPosition: ULONGLONG,
+ ulAudioSize: ULONG,
+ cTransitions: ULONG,
+ pPath: *mut SPPATHENTRY,
+ SREngineID: GUID,
+ ulSREnginePrivateDataSize: ULONG,
+ pSREnginePrivateData: *const BYTE,
+ fHypothesis: BOOL,
+}}
+RIDL!{#[uuid(0x3b414aec, 0x720c, 0x4883, 0xb9, 0xef, 0x17, 0x8c, 0xd3, 0x94, 0xfb, 0x3a)]
+interface ISpSREngineSite(ISpSREngineSiteVtbl): IUnknown(IUnknownVtbl) {
+ fn Read(
+ pv: *mut c_void,
+ cb: ULONG,
+ pcbRead: *mut ULONG,
+ ) -> HRESULT,
+ fn DataAvailable(
+ pcb: *mut ULONG,
+ ) -> HRESULT,
+ fn SetBufferNotifySize(
+ cbSize: ULONG,
+ ) -> HRESULT,
+ fn ParseFromTransitions(
+ pParseInfo: *const SPPARSEINFO,
+ ppNewPhrase: *mut *mut ISpPhraseBuilder,
+ ) -> HRESULT,
+ fn Recognition(
+ pResultInfo: *const SPRECORESULTINFO,
+ ) -> HRESULT,
+ fn AddEvent(
+ pEvent: *const SPEVENT,
+ hSAPIRecoContext: SPRECOCONTEXTHANDLE,
+ ) -> HRESULT,
+ fn Synchronize(
+ ullProcessedThruPos: ULONGLONG,
+ ) -> HRESULT,
+ fn GetWordInfo(
+ pWordEntry: *mut SPWORDENTRY,
+ Options: SPWORDINFOOPT,
+ ) -> HRESULT,
+ fn SetWordClientContext(
+ hWord: SPWORDHANDLE,
+ pvClientContext: *mut c_void,
+ ) -> HRESULT,
+ fn GetRuleInfo(
+ pRuleEntry: *mut SPRULEENTRY,
+ Options: SPRULEINFOOPT,
+ ) -> HRESULT,
+ fn SetRuleClientContext(
+ hRule: SPRULEHANDLE,
+ pvClientContext: *mut c_void,
+ ) -> HRESULT,
+ fn GetStateInfo(
+ hState: SPSTATEHANDLE,
+ pStateInfo: *mut SPSTATEINFO,
+ ) -> HRESULT,
+ fn GetResource(
+ hRule: SPRULEHANDLE,
+ pszResourceName: LPCWSTR,
+ ppCoMemResource: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetTransitionProperty(
+ ID: SPTRANSITIONID,
+ ppCoMemProperty: *mut *mut SPTRANSITIONPROPERTY,
+ ) -> HRESULT,
+ fn IsAlternate(
+ hRule: SPRULEHANDLE,
+ hAltRule: SPRULEHANDLE,
+ ) -> HRESULT,
+ fn GetMaxAlternates(
+ hRule: SPRULEHANDLE,
+ pulNumAlts: *mut ULONG,
+ ) -> HRESULT,
+ fn GetContextMaxAlternates(
+ hContext: SPRECOCONTEXTHANDLE,
+ pulNumAlts: *mut ULONG,
+ ) -> HRESULT,
+ fn UpdateRecoPos(
+ ullCurrentRecoPos: ULONGLONG,
+ ) -> HRESULT,
+}}
+ENUM!{enum SPPROPSRC {
+ SPPROPSRC_RECO_INST,
+ SPPROPSRC_RECO_CTX,
+ SPPROPSRC_RECO_GRAMMAR,
+}}
+RIDL!{#[uuid(0x2f472991, 0x854b, 0x4465, 0xb6, 0x13, 0xfb, 0xaf, 0xb3, 0xad, 0x8e, 0xd8)]
+interface ISpSREngine(ISpSREngineVtbl): IUnknown(IUnknownVtbl) {
+ fn SetSite(
+ pSite: *mut ISpSREngineSite,
+ ) -> HRESULT,
+ fn GetInputAudioFormat(
+ pguidSourceFormatId: *const GUID,
+ pSourceWaveFormatEx: *const WAVEFORMATEX,
+ pguidDesiredFormatId: *mut GUID,
+ ppCoMemDesiredWaveFormatEx: *mut WAVEFORMATEX,
+ ) -> HRESULT,
+ fn RecognizeStream(
+ rguidFmtId: REFGUID,
+ pWaveFormatEx: *const WAVEFORMATEX,
+ hRequestSync: HANDLE,
+ hDataAvailable: HANDLE,
+ hExit: HANDLE,
+ fNewAudioStream: BOOL,
+ fRealTimeAudio: BOOL,
+ pAudioObjectToken: *mut ISpObjectToken,
+ ) -> HRESULT,
+ fn SetRecoProfile(
+ pProfile: *mut ISpObjectToken,
+ ) -> HRESULT,
+ fn OnCreateGrammar(
+ pvEngineRecoContext: *mut c_void,
+ hSAPIGrammar: SPGRAMMARHANDLE,
+ ppvEngineGrammarContext: *mut *mut c_void,
+ ) -> HRESULT,
+ fn OnDeleteGrammar(
+ pvEngineGrammar: *mut c_void,
+ ) -> HRESULT,
+ fn LoadProprietaryGrammar(
+ pvEngineGrammar: *mut c_void,
+ rguidParam: REFGUID,
+ pszStringParam: LPCWSTR,
+ pvDataParam: *const c_void,
+ ulDataSize: ULONG,
+ Options: SPLOADOPTIONS,
+ ) -> HRESULT,
+ fn UnloadProprietaryGrammar(
+ pvEngineGrammar: *mut c_void,
+ ) -> HRESULT,
+ fn SetProprietaryRuleState(
+ pvEngineGrammar: *mut c_void,
+ pszName: LPCWSTR,
+ pReserved: *mut c_void,
+ NewState: SPRULESTATE,
+ pcRulesChanged: *mut ULONG,
+ ) -> HRESULT,
+ fn SetProprietaryRuleIdState(
+ pvEngineGrammar: *mut c_void,
+ dwRuleId: DWORD,
+ NewState: SPRULESTATE,
+ ) -> HRESULT,
+ fn LoadSLM(
+ pvEngineGrammar: *mut c_void,
+ pszTopicName: LPCWSTR,
+ ) -> HRESULT,
+ fn UnloadSLM(
+ pvEngineGrammar: *mut c_void,
+ ) -> HRESULT,
+ fn SetSLMState(
+ pvEngineGrammar: *mut c_void,
+ NewState: SPRULESTATE,
+ ) -> HRESULT,
+ fn SetWordSequenceData(
+ pvEngineGrammar: *mut c_void,
+ pText: *const WCHAR,
+ cchText: ULONG,
+ pInfo: *const SPTEXTSELECTIONINFO,
+ ) -> HRESULT,
+ fn SetTextSelection(
+ pvEngineGrammar: *mut c_void,
+ pInfo: *const SPTEXTSELECTIONINFO,
+ ) -> HRESULT,
+ fn IsPronounceable(
+ pvEngineGrammar: *mut c_void,
+ pszWord: LPCWSTR,
+ pWordPronounceable: *mut SPWORDPRONOUNCEABLE,
+ ) -> HRESULT,
+ fn OnCreateRecoContext(
+ hSAPIRecoContext: SPRECOCONTEXTHANDLE,
+ ppvEngineContext: *mut *mut c_void,
+ ) -> HRESULT,
+ fn OnDeleteRecoContext(
+ pvEngineContext: *mut c_void,
+ ) -> HRESULT,
+ fn OnPrivateCall(
+ pvEngineContext: *mut c_void,
+ pCallFrame: PVOID,
+ ulCallFrameSize: ULONG,
+ ) -> HRESULT,
+ fn SetAdaptationData(
+ pvEngineContext: *mut c_void,
+ pAdaptationData: *const WCHAR,
+ cch: ULONG,
+ ) -> HRESULT,
+ fn SetPropertyNum(
+ eSrc: SPPROPSRC,
+ pvSrcObj: *mut c_void,
+ pName: *const WCHAR,
+ lValue: LONG,
+ ) -> HRESULT,
+ fn GetPropertyNum(
+ eSrc: SPPROPSRC,
+ pvSrcObj: *mut c_void,
+ pName: *const WCHAR,
+ lValue: *mut LONG,
+ ) -> HRESULT,
+ fn SetPropertyString(
+ eSrc: SPPROPSRC,
+ pvSrcObj: *mut c_void,
+ pName: LPCWSTR,
+ pValue: LPCWSTR,
+ ) -> HRESULT,
+ fn GetPropertyString(
+ eSrc: SPPROPSRC,
+ pvSrcObj: *mut c_void,
+ pName: LPCWSTR,
+ ppCoMemValue: *mut LPWSTR,
+ ) -> HRESULT,
+ fn SetGrammarState(
+ pvEngineGrammar: *mut c_void,
+ eGrammarState: SPGRAMMARSTATE,
+ ) -> HRESULT,
+ fn WordNotify(
+ Action: SPCFGNOTIFY,
+ cWords: ULONG,
+ pWords: *const SPWORDENTRY,
+ ) -> HRESULT,
+ fn RuleNotify(
+ Action: SPCFGNOTIFY,
+ cRules: ULONG,
+ pRules: *const SPRULEENTRY,
+ ) -> HRESULT,
+ fn PrivateCallEx(
+ pvEngineContext: *mut c_void,
+ pInCallFrame: *const c_void,
+ ulInCallFrameSize: ULONG,
+ ppvCoMemResponse: *mut *mut c_void,
+ pulResponseSize: *mut ULONG,
+ ) -> HRESULT,
+ fn SetContextState(
+ pvEngineContext: *mut c_void,
+ eContextState: SPCONTEXTSTATE,
+ ) -> HRESULT,
+}}
+STRUCT!{struct SPPHRASEALTREQUEST {
+ ulStartElement: ULONG,
+ cElements: ULONG,
+ ulRequestAltCount: ULONG,
+ pvResultExtra: *mut c_void,
+ cbResultExtra: ULONG,
+ pPhrase: *mut ISpPhrase,
+ pRecoContext: *mut ISpRecoContext,
+}}
+RIDL!{#[uuid(0x8e7c791e, 0x4467, 0x11d3, 0x97, 0x23, 0x00, 0xc0, 0x4f, 0x72, 0xdb, 0x08)]
+interface _ISpPrivateEngineCall(_ISpPrivateEngineCallVtbl): IUnknown(IUnknownVtbl) {
+ fn CallEngine(
+ pCallFrame: *mut c_void,
+ ulCallFrameSize: ULONG,
+ ) -> HRESULT,
+ fn CallEngineEx(
+ pInFrame: *const c_void,
+ ulInFrameSize: ULONG,
+ ppCoMemOutFrame: *mut *mut c_void,
+ pulOutFrameSize: *mut ULONG,
+ ) -> HRESULT,
+}}
+extern {
+ pub static LIBID_SpeechDDKLib: IID;
+ pub static CLSID_SpDataKey: CLSID;
+}
+RIDL!{#[uuid(0xd9f6ee60, 0x58c9, 0x458b, 0x88, 0xe1, 0x2f, 0x90, 0x8f, 0xd7, 0xf8, 0x7c)]
+class SpDataKey;}
+extern {
+ pub static CLSID_SpObjectTokenEnum: CLSID;
+ pub static CLSID_SpPhraseBuilder: CLSID;
+ pub static CLSID_SpITNProcessor: CLSID;
+ pub static CLSID_SpGrammarCompiler: CLSID;
+ pub static CLSID_SpGramCompBackend: CLSID;
+}
diff --git a/vendor/winapi/src/um/schannel.rs b/vendor/winapi/src/um/schannel.rs
new file mode 100644
index 000000000..5ec1ac008
--- /dev/null
+++ b/vendor/winapi/src/um/schannel.rs
@@ -0,0 +1,339 @@
+// 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.
+//! Public Definitions for SCHANNEL Security Provider
+use shared::guiddef::GUID;
+use shared::minwindef::{BYTE, DWORD, PBYTE, WORD};
+use shared::windef::HWND;
+use um::wincrypt::{ALG_ID, HCERTSTORE, HCRYPTPROV, PCCERT_CONTEXT, PCERT_NAME_BLOB};
+use um::winnt::{HRESULT, LPWSTR, PVOID, WCHAR};
+pub const UNISP_NAME: &'static str = "Microsoft Unified Security Protocol Provider";
+pub const SSL2SP_NAME: &'static str = "Microsoft SSL 2.0";
+pub const SSL3SP_NAME: &'static str = "Microsoft SSL 3.0";
+pub const TLS1SP_NAME: &'static str = "Microsoft TLS 1.0";
+pub const PCT1SP_NAME: &'static str = "Microsoft PCT 1.0";
+pub const SCHANNEL_NAME: &'static str = "Schannel";
+ENUM!{enum eTlsSignatureAlgorithm {
+ TlsSignatureAlgorithm_Anonymous = 0,
+ TlsSignatureAlgorithm_Rsa = 1,
+ TlsSignatureAlgorithm_Dsa = 2,
+ TlsSignatureAlgorithm_Ecdsa = 3,
+}}
+ENUM!{enum eTlsHashAlgorithm {
+ TlsHashAlgorithm_None = 0,
+ TlsHashAlgorithm_Md5 = 1,
+ TlsHashAlgorithm_Sha1 = 2,
+ TlsHashAlgorithm_Sha224 = 3,
+ TlsHashAlgorithm_Sha256 = 4,
+ TlsHashAlgorithm_Sha384 = 5,
+ TlsHashAlgorithm_Sha512 = 6,
+}}
+pub const UNISP_RPC_ID: DWORD = 14;
+STRUCT!{struct SecPkgContext_RemoteCredentialInfo {
+ cbCertificateChain: DWORD,
+ pbCertificateChain: PBYTE,
+ cCertificates: DWORD,
+ fFlags: DWORD,
+ dwBits: DWORD,
+}}
+pub type PSecPkgContext_RemoteCredentialInfo = *mut SecPkgContext_RemoteCredentialInfo;
+pub type SecPkgContext_RemoteCredenitalInfo = SecPkgContext_RemoteCredentialInfo;
+pub type PSecPkgContext_RemoteCredenitalInfo = *mut SecPkgContext_RemoteCredentialInfo;
+pub const RCRED_STATUS_NOCRED: DWORD = 0x00000000;
+pub const RCRED_CRED_EXISTS: DWORD = 0x00000001;
+pub const RCRED_STATUS_UNKNOWN_ISSUER: DWORD = 0x00000002;
+STRUCT!{struct SecPkgContext_LocalCredentialInfo {
+ cbCertificateChain: DWORD,
+ pbCertificateChain: PBYTE,
+ cCertificates: DWORD,
+ fFlags: DWORD,
+ dwBits: DWORD,
+}}
+pub type PSecPkgContext_LocalCredentialInfo = *mut SecPkgContext_LocalCredentialInfo;
+pub type SecPkgContext_LocalCredenitalInfo = SecPkgContext_LocalCredentialInfo;
+pub type PSecPkgContext_LocalCredenitalInfo = *mut SecPkgContext_LocalCredentialInfo;
+pub const LCRED_STATUS_NOCRED: DWORD = 0x00000000;
+pub const LCRED_CRED_EXISTS: DWORD = 0x00000001;
+pub const LCRED_STATUS_UNKNOWN_ISSUER: DWORD = 0x00000002;
+STRUCT!{struct SecPkgContext_ClientCertPolicyResult {
+ dwPolicyResult: HRESULT,
+ guidPolicyId: GUID,
+}}
+pub type PSecPkgContext_ClientCertPolicyResult = *mut SecPkgContext_ClientCertPolicyResult;
+STRUCT!{struct SecPkgContext_IssuerListInfoEx {
+ aIssuers: PCERT_NAME_BLOB,
+ cIssuers: DWORD,
+}}
+pub type PSecPkgContext_IssuerListInfoEx = *mut SecPkgContext_IssuerListInfoEx;
+STRUCT!{struct SecPkgContext_ConnectionInfo {
+ dwProtocol: DWORD,
+ aiCipher: ALG_ID,
+ dwCipherStrength: DWORD,
+ aiHash: ALG_ID,
+ dwHashStrength: DWORD,
+ aiExch: ALG_ID,
+ dwExchStrength: DWORD,
+}}
+pub type PSecPkgContext_ConnectionInfo = *mut SecPkgContext_ConnectionInfo;
+pub const SZ_ALG_MAX_SIZE: usize = 64;
+pub const SECPKGCONTEXT_CIPHERINFO_V1: DWORD = 1;
+STRUCT!{struct SecPkgContext_CipherInfo {
+ dwVersion: DWORD,
+ dwProtocol: DWORD,
+ dwCipherSuite: DWORD,
+ dwBaseCipherSuite: DWORD,
+ szCipherSuite: [WCHAR; SZ_ALG_MAX_SIZE],
+ szCipher: [WCHAR; SZ_ALG_MAX_SIZE],
+ dwCipherLen: DWORD,
+ dwCipherBlockLen: DWORD,
+ szHash: [WCHAR; SZ_ALG_MAX_SIZE],
+ dwHashLen: DWORD,
+ szExchange: [WCHAR; SZ_ALG_MAX_SIZE],
+ dwMinExchangeLen: DWORD,
+ dwMaxExchangeLen: DWORD,
+ szCertificate: [WCHAR; SZ_ALG_MAX_SIZE],
+ dwKeyType: DWORD,
+}}
+pub type PSecPkgContext_CipherInfo = *mut SecPkgContext_CipherInfo;
+STRUCT!{struct SecPkgContext_EapKeyBlock {
+ rgbKeys: [BYTE; 128],
+ rgbIVs: [BYTE; 64],
+}}
+pub type PSecPkgContext_EapKeyBlock = *mut SecPkgContext_EapKeyBlock;
+STRUCT!{struct SecPkgContext_MappedCredAttr {
+ dwAttribute: DWORD,
+ pvBuffer: PVOID,
+}}
+pub type PSecPkgContext_MappedCredAttr = *mut SecPkgContext_MappedCredAttr;
+pub const SSL_SESSION_RECONNECT: DWORD = 1;
+STRUCT!{struct SecPkgContext_SessionInfo {
+ dwFlags: DWORD,
+ cbSessionId: DWORD,
+ rgbSessionId: [BYTE; 32],
+}}
+pub type PSecPkgContext_SessionInfo = *mut SecPkgContext_SessionInfo;
+STRUCT!{struct SecPkgContext_SessionAppData {
+ dwFlags: DWORD,
+ cbAppData: DWORD,
+ pbAppData: PBYTE,
+}}
+pub type PSecPkgContext_SessionAppData = *mut SecPkgContext_SessionAppData;
+STRUCT!{struct SecPkgContext_EapPrfInfo {
+ dwVersion: DWORD,
+ cbPrfData: DWORD,
+ pbPrfData: PBYTE,
+}}
+pub type PSecPkgContext_EapPrfInfo = *mut SecPkgContext_EapPrfInfo;
+STRUCT!{struct SecPkgContext_SupportedSignatures {
+ cSignatureAndHashAlgorithms: WORD,
+ pSignatureAndHashAlgorithms: *mut WORD,
+}}
+pub type PSecPkgContext_SupportedSignatures = *mut SecPkgContext_SupportedSignatures;
+STRUCT!{struct SecPkgContext_Certificates {
+ cCertificates: DWORD,
+ cbCertificateChain: DWORD,
+ pbCertificateChain: PBYTE,
+}}
+pub type PSecPkgContext_Certificates = *mut SecPkgContext_Certificates;
+STRUCT!{struct SecPkgContext_CertInfo {
+ dwVersion: DWORD,
+ cbSubjectName: DWORD,
+ pwszSubjectName: LPWSTR,
+ cbIssuerName: DWORD,
+ pwszIssuerName: LPWSTR,
+ dwKeySize: DWORD,
+}}
+pub type PSecPkgContext_CertInfo = *mut SecPkgContext_CertInfo;
+pub const KERN_CONTEXT_CERT_INFO_V1: DWORD = 0x00000000;
+STRUCT!{struct SecPkgContext_UiInfo {
+ hParentWindow: HWND,
+}}
+pub type PSecPkgContext_UiInfo = *mut SecPkgContext_UiInfo;
+STRUCT!{struct SecPkgContext_EarlyStart {
+ dwEarlyStartFlags: DWORD,
+}}
+pub type PSecPkgContext_EarlyStart = *mut SecPkgContext_EarlyStart;
+pub const ENABLE_TLS_CLIENT_EARLY_START: DWORD = 0x00000001;
+pub const SCH_CRED_V1: DWORD = 0x00000001;
+pub const SCH_CRED_V2: DWORD = 0x00000002;
+pub const SCH_CRED_VERSION: DWORD = 0x00000002;
+pub const SCH_CRED_V3: DWORD = 0x00000003;
+pub const SCHANNEL_CRED_VERSION: DWORD = 0x00000004;
+pub const SCHANNEL_SECRET_TYPE_CAPI: DWORD = 0x00000001;
+pub const SCHANNEL_SECRET_PRIVKEY: DWORD = 0x00000002;
+pub const SCH_CRED_X509_CERTCHAIN: DWORD = 0x00000001;
+pub const SCH_CRED_X509_CAPI: DWORD = 0x00000002;
+pub const SCH_CRED_CERT_CONTEXT: DWORD = 0x00000003;
+pub enum _HMAPPER {}
+STRUCT!{struct SCHANNEL_CRED {
+ dwVersion: DWORD,
+ cCreds: DWORD,
+ paCred: *mut PCCERT_CONTEXT,
+ hRootStore: HCERTSTORE,
+ cMappers: DWORD,
+ aphMappers: *mut *mut _HMAPPER,
+ cSupportedAlgs: DWORD,
+ palgSupportedAlgs: *mut ALG_ID,
+ grbitEnabledProtocols: DWORD,
+ dwMinimumCipherStrength: DWORD,
+ dwMaximumCipherStrength: DWORD,
+ dwSessionLifespan: DWORD,
+ dwFlags: DWORD,
+ dwCredFormat: DWORD,
+}}
+pub type PSCHANNEL_CRED = *mut SCHANNEL_CRED;
+pub const SCH_CRED_FORMAT_CERT_CONTEXT: DWORD = 0x00000000;
+pub const SCH_CRED_FORMAT_CERT_HASH: DWORD = 0x00000001;
+pub const SCH_CRED_FORMAT_CERT_HASH_STORE: DWORD = 0x00000002;
+pub const SCH_CRED_MAX_STORE_NAME_SIZE: usize = 128;
+pub const SCH_CRED_MAX_SUPPORTED_ALGS: DWORD = 256;
+pub const SCH_CRED_MAX_SUPPORTED_CERTS: DWORD = 100;
+STRUCT!{struct SCHANNEL_CERT_HASH {
+ dwLength: DWORD,
+ dwFlags: DWORD,
+ hProv: HCRYPTPROV,
+ ShaHash: [BYTE; 20],
+}}
+pub type PSCHANNEL_CERT_HASH = *mut SCHANNEL_CERT_HASH;
+STRUCT!{struct SCHANNEL_CERT_HASH_STORE {
+ dwLength: DWORD,
+ dwFlags: DWORD,
+ hProv: HCRYPTPROV,
+ ShaHash: [BYTE; 20],
+ pwszStoreName: [WCHAR; SCH_CRED_MAX_STORE_NAME_SIZE],
+}}
+pub type PSCHANNEL_CERT_HASH_STORE = *mut SCHANNEL_CERT_HASH_STORE;
+pub const SCH_MACHINE_CERT_HASH: DWORD = 0x00000001;
+pub const SCH_CRED_NO_SYSTEM_MAPPER: DWORD = 0x00000002;
+pub const SCH_CRED_NO_SERVERNAME_CHECK: DWORD = 0x00000004;
+pub const SCH_CRED_MANUAL_CRED_VALIDATION: DWORD = 0x00000008;
+pub const SCH_CRED_NO_DEFAULT_CREDS: DWORD = 0x00000010;
+pub const SCH_CRED_AUTO_CRED_VALIDATION: DWORD = 0x00000020;
+pub const SCH_CRED_USE_DEFAULT_CREDS: DWORD = 0x00000040;
+pub const SCH_CRED_DISABLE_RECONNECTS: DWORD = 0x00000080;
+pub const SCH_CRED_REVOCATION_CHECK_END_CERT: DWORD = 0x00000100;
+pub const SCH_CRED_REVOCATION_CHECK_CHAIN: DWORD = 0x00000200;
+pub const SCH_CRED_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT: DWORD = 0x00000400;
+pub const SCH_CRED_IGNORE_NO_REVOCATION_CHECK: DWORD = 0x00000800;
+pub const SCH_CRED_IGNORE_REVOCATION_OFFLINE: DWORD = 0x00001000;
+pub const SCH_CRED_RESTRICTED_ROOTS: DWORD = 0x00002000;
+pub const SCH_CRED_REVOCATION_CHECK_CACHE_ONLY: DWORD = 0x00004000;
+pub const SCH_CRED_CACHE_ONLY_URL_RETRIEVAL: DWORD = 0x00008000;
+pub const SCH_CRED_MEMORY_STORE_CERT: DWORD = 0x00010000;
+pub const SCH_CRED_CACHE_ONLY_URL_RETRIEVAL_ON_CREATE: DWORD = 0x00020000;
+pub const SCH_SEND_ROOT_CERT: DWORD = 0x00040000;
+pub const SCH_CRED_SNI_CREDENTIAL: DWORD = 0x00080000;
+pub const SCH_CRED_SNI_ENABLE_OCSP: DWORD = 0x00100000;
+pub const SCH_SEND_AUX_RECORD: DWORD = 0x00200000;
+pub const SCH_USE_STRONG_CRYPTO: DWORD = 0x00400000;
+pub const SCHANNEL_RENEGOTIATE: DWORD = 0;
+pub const SCHANNEL_SHUTDOWN: DWORD = 1;
+pub const SCHANNEL_ALERT: DWORD = 2;
+pub const SCHANNEL_SESSION: DWORD = 3;
+STRUCT!{struct SCHANNEL_ALERT_TOKEN {
+ dwTokenType: DWORD,
+ dwAlertType: DWORD,
+ dwAlertNumber: DWORD,
+}}
+pub const TLS1_ALERT_WARNING: DWORD = 1;
+pub const TLS1_ALERT_FATAL: DWORD = 2;
+pub const TLS1_ALERT_CLOSE_NOTIFY: DWORD = 0;
+pub const TLS1_ALERT_UNEXPECTED_MESSAGE: DWORD = 10;
+pub const TLS1_ALERT_BAD_RECORD_MAC: DWORD = 20;
+pub const TLS1_ALERT_DECRYPTION_FAILED: DWORD = 21;
+pub const TLS1_ALERT_RECORD_OVERFLOW: DWORD = 22;
+pub const TLS1_ALERT_DECOMPRESSION_FAIL: DWORD = 30;
+pub const TLS1_ALERT_HANDSHAKE_FAILURE: DWORD = 40;
+pub const TLS1_ALERT_BAD_CERTIFICATE: DWORD = 42;
+pub const TLS1_ALERT_UNSUPPORTED_CERT: DWORD = 43;
+pub const TLS1_ALERT_CERTIFICATE_REVOKED: DWORD = 44;
+pub const TLS1_ALERT_CERTIFICATE_EXPIRED: DWORD = 45;
+pub const TLS1_ALERT_CERTIFICATE_UNKNOWN: DWORD = 46;
+pub const TLS1_ALERT_ILLEGAL_PARAMETER: DWORD = 47;
+pub const TLS1_ALERT_UNKNOWN_CA: DWORD = 48;
+pub const TLS1_ALERT_ACCESS_DENIED: DWORD = 49;
+pub const TLS1_ALERT_DECODE_ERROR: DWORD = 50;
+pub const TLS1_ALERT_DECRYPT_ERROR: DWORD = 51;
+pub const TLS1_ALERT_EXPORT_RESTRICTION: DWORD = 60;
+pub const TLS1_ALERT_PROTOCOL_VERSION: DWORD = 70;
+pub const TLS1_ALERT_INSUFFIENT_SECURITY: DWORD = 71;
+pub const TLS1_ALERT_INTERNAL_ERROR: DWORD = 80;
+pub const TLS1_ALERT_USER_CANCELED: DWORD = 90;
+pub const TLS1_ALERT_NO_RENEGOTIATION: DWORD = 100;
+pub const TLS1_ALERT_UNSUPPORTED_EXT: DWORD = 110;
+pub const TLS1_ALERT_NO_APP_PROTOCOL: DWORD = 120;
+pub const SSL_SESSION_ENABLE_RECONNECTS: DWORD = 1;
+pub const SSL_SESSION_DISABLE_RECONNECTS: DWORD = 2;
+STRUCT!{struct SCHANNEL_SESSION_TOKEN {
+ dwTokenType: DWORD,
+ dwFlags: DWORD,
+}}
+STRUCT!{struct SCHANNEL_CLIENT_SIGNATURE {
+ cbLength: DWORD,
+ aiHash: ALG_ID,
+ cbHash: DWORD,
+ HashValue: [BYTE; 36],
+ CertThumbprint: [BYTE; 20],
+}}
+pub type PSCHANNEL_CLIENT_SIGNATURE = *mut SCHANNEL_CLIENT_SIGNATURE;
+pub const SP_PROT_PCT1_SERVER: DWORD = 0x00000001;
+pub const SP_PROT_PCT1_CLIENT: DWORD = 0x00000002;
+pub const SP_PROT_PCT1: DWORD = SP_PROT_PCT1_SERVER | SP_PROT_PCT1_CLIENT;
+pub const SP_PROT_SSL2_SERVER: DWORD = 0x00000004;
+pub const SP_PROT_SSL2_CLIENT: DWORD = 0x00000008;
+pub const SP_PROT_SSL2: DWORD = SP_PROT_SSL2_SERVER | SP_PROT_SSL2_CLIENT;
+pub const SP_PROT_SSL3_SERVER: DWORD = 0x00000010;
+pub const SP_PROT_SSL3_CLIENT: DWORD = 0x00000020;
+pub const SP_PROT_SSL3: DWORD = SP_PROT_SSL3_SERVER | SP_PROT_SSL3_CLIENT;
+pub const SP_PROT_TLS1_SERVER: DWORD = 0x00000040;
+pub const SP_PROT_TLS1_CLIENT: DWORD = 0x00000080;
+pub const SP_PROT_TLS1: DWORD = SP_PROT_TLS1_SERVER | SP_PROT_TLS1_CLIENT;
+pub const SP_PROT_SSL3TLS1_CLIENTS: DWORD = SP_PROT_TLS1_CLIENT | SP_PROT_SSL3_CLIENT;
+pub const SP_PROT_SSL3TLS1_SERVERS: DWORD = SP_PROT_TLS1_SERVER | SP_PROT_SSL3_SERVER;
+pub const SP_PROT_SSL3TLS1: DWORD = SP_PROT_SSL3 | SP_PROT_TLS1;
+pub const SP_PROT_UNI_SERVER: DWORD = 0x40000000;
+pub const SP_PROT_UNI_CLIENT: DWORD = 0x80000000;
+pub const SP_PROT_UNI: DWORD = SP_PROT_UNI_SERVER | SP_PROT_UNI_CLIENT;
+pub const SP_PROT_ALL: DWORD = 0xffffffff;
+pub const SP_PROT_NONE: DWORD = 0;
+pub const SP_PROT_CLIENTS: DWORD = SP_PROT_PCT1_CLIENT | SP_PROT_SSL2_CLIENT
+ | SP_PROT_SSL3_CLIENT | SP_PROT_UNI_CLIENT | SP_PROT_TLS1_CLIENT;
+pub const SP_PROT_SERVERS: DWORD = SP_PROT_PCT1_SERVER | SP_PROT_SSL2_SERVER
+ | SP_PROT_SSL3_SERVER | SP_PROT_UNI_SERVER | SP_PROT_TLS1_SERVER;
+pub const SP_PROT_TLS1_0_SERVER: DWORD = SP_PROT_TLS1_SERVER;
+pub const SP_PROT_TLS1_0_CLIENT: DWORD = SP_PROT_TLS1_CLIENT;
+pub const SP_PROT_TLS1_0: DWORD = SP_PROT_TLS1_0_SERVER | SP_PROT_TLS1_0_CLIENT;
+pub const SP_PROT_TLS1_1_SERVER: DWORD = 0x00000100;
+pub const SP_PROT_TLS1_1_CLIENT: DWORD = 0x00000200;
+pub const SP_PROT_TLS1_1: DWORD = SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_1_CLIENT;
+pub const SP_PROT_TLS1_2_SERVER: DWORD = 0x00000400;
+pub const SP_PROT_TLS1_2_CLIENT: DWORD = 0x00000800;
+pub const SP_PROT_TLS1_2: DWORD = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_2_CLIENT;
+pub const SP_PROT_DTLS_SERVER: DWORD = 0x00010000;
+pub const SP_PROT_DTLS_CLIENT: DWORD = 0x00020000;
+pub const SP_PROT_DTLS: DWORD = SP_PROT_DTLS_SERVER | SP_PROT_DTLS_CLIENT;
+pub const SP_PROT_DTLS1_0_SERVER: DWORD = SP_PROT_DTLS_SERVER;
+pub const SP_PROT_DTLS1_0_CLIENT: DWORD = SP_PROT_DTLS_CLIENT;
+pub const SP_PROT_DTLS1_0: DWORD = SP_PROT_DTLS1_0_SERVER | SP_PROT_DTLS1_0_CLIENT;
+pub const SP_PROT_DTLS1_X_SERVER: DWORD = SP_PROT_DTLS1_0_SERVER;
+pub const SP_PROT_DTLS1_X_CLIENT: DWORD = SP_PROT_DTLS1_0_CLIENT;
+pub const SP_PROT_DTLS1_X: DWORD = SP_PROT_DTLS1_X_SERVER | SP_PROT_DTLS1_X_CLIENT;
+pub const SP_PROT_TLS1_1PLUS_SERVER: DWORD = SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_2_SERVER;
+pub const SP_PROT_TLS1_1PLUS_CLIENT: DWORD = SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_2_CLIENT;
+pub const SP_PROT_TLS1_1PLUS: DWORD = SP_PROT_TLS1_1PLUS_SERVER | SP_PROT_TLS1_1PLUS_CLIENT;
+pub const SP_PROT_TLS1_X_SERVER: DWORD = SP_PROT_TLS1_0_SERVER | SP_PROT_TLS1_1_SERVER
+ | SP_PROT_TLS1_2_SERVER;
+pub const SP_PROT_TLS1_X_CLIENT: DWORD = SP_PROT_TLS1_0_CLIENT | SP_PROT_TLS1_1_CLIENT
+ | SP_PROT_TLS1_2_CLIENT;
+pub const SP_PROT_TLS1_X: DWORD = SP_PROT_TLS1_X_SERVER | SP_PROT_TLS1_X_CLIENT;
+pub const SP_PROT_SSL3TLS1_X_CLIENTS: DWORD = SP_PROT_TLS1_X_CLIENT | SP_PROT_SSL3_CLIENT;
+pub const SP_PROT_SSL3TLS1_X_SERVERS: DWORD = SP_PROT_TLS1_X_SERVER | SP_PROT_SSL3_SERVER;
+pub const SP_PROT_SSL3TLS1_X: DWORD = SP_PROT_SSL3 | SP_PROT_TLS1_X;
+pub const SP_PROT_X_CLIENTS: DWORD = SP_PROT_CLIENTS | SP_PROT_TLS1_X_CLIENT
+ | SP_PROT_DTLS1_X_CLIENT;
+pub const SP_PROT_X_SERVERS: DWORD = SP_PROT_SERVERS | SP_PROT_TLS1_X_SERVER
+ | SP_PROT_DTLS1_X_SERVER;
+pub const SSL_CRACK_CERTIFICATE_NAME: &'static str = "SslCrackCertificate";
+pub const SSL_FREE_CERTIFICATE_NAME: &'static str = "SslFreeCertificate";
diff --git a/vendor/winapi/src/um/securityappcontainer.rs b/vendor/winapi/src/um/securityappcontainer.rs
new file mode 100644
index 000000000..02d862938
--- /dev/null
+++ b/vendor/winapi/src/um/securityappcontainer.rs
@@ -0,0 +1,16 @@
+// 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::minwindef::{BOOL, PULONG, ULONG};
+use um::winnt::{HANDLE, LPWSTR, PSID};
+extern "system" {
+ pub fn GetAppContainerNamedObjectPath(
+ Token: HANDLE,
+ AppContainerSid: PSID,
+ ObjectPathLength: ULONG,
+ ObjectPath: LPWSTR,
+ ReturnLength: PULONG,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/securitybaseapi.rs b/vendor/winapi/src/um/securitybaseapi.rs
new file mode 100644
index 000000000..81bfd18ff
--- /dev/null
+++ b/vendor/winapi/src/um/securitybaseapi.rs
@@ -0,0 +1,690 @@
+// 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.
+//! FFI bindings to psapi.
+use shared::guiddef::GUID;
+use shared::minwindef::{
+ BOOL, BYTE, DWORD, LPBOOL, LPDWORD, LPVOID, PBOOL, PDWORD, PUCHAR, PULONG, UCHAR, ULONG
+};
+use um::minwinbase::LPSECURITY_ATTRIBUTES;
+use um::winnt::{
+ ACL_INFORMATION_CLASS, AUDIT_EVENT_TYPE, BOOLEAN, HANDLE, LONG, LPCWSTR, LPWSTR, PACL,
+ PCLAIM_SECURITY_ATTRIBUTES_INFORMATION, PCWSTR, PGENERIC_MAPPING, PHANDLE, PLUID,
+ PLUID_AND_ATTRIBUTES, POBJECT_TYPE_LIST, PPRIVILEGE_SET, PSECURITY_DESCRIPTOR,
+ PSECURITY_DESCRIPTOR_CONTROL, PSID, PSID_AND_ATTRIBUTES, PSID_IDENTIFIER_AUTHORITY,
+ PTOKEN_GROUPS, PTOKEN_PRIVILEGES, PVOID, SECURITY_DESCRIPTOR_CONTROL,
+ SECURITY_IMPERSONATION_LEVEL, SECURITY_INFORMATION, TOKEN_INFORMATION_CLASS, TOKEN_TYPE,
+ WELL_KNOWN_SID_TYPE
+};
+extern "system" {
+ pub fn AccessCheck(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ ClientToken: HANDLE,
+ DesiredAccess: DWORD,
+ GenericMapping: PGENERIC_MAPPING,
+ PrivilegeSet: PPRIVILEGE_SET,
+ PrivilegeSetLength: LPDWORD,
+ GrantedAccess: LPDWORD,
+ AccessStatus: LPBOOL,
+ ) -> BOOL;
+ pub fn AccessCheckAndAuditAlarmW(
+ SubsystemName: LPCWSTR,
+ HandleId: LPVOID,
+ ObjectTypeName: LPWSTR,
+ ObjectName: LPWSTR,
+ SecurityDescriptor: PSECURITY_DESCRIPTOR,
+ DesiredAccess: DWORD,
+ GenericMapping: PGENERIC_MAPPING,
+ ObjectCreation: BOOL,
+ GrantedAccess: LPDWORD,
+ AccessStatus: LPBOOL,
+ pfGenerateOnClose: LPBOOL,
+ ) -> BOOL;
+ pub fn AccessCheckByType(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ PrincipalSelfSid: PSID,
+ ClientToken: HANDLE,
+ DesiredAccess: DWORD,
+ ObjectTypeList: POBJECT_TYPE_LIST,
+ ObjectTypeListLength: DWORD,
+ GenericMapping: PGENERIC_MAPPING,
+ PrivilegeSet: PPRIVILEGE_SET,
+ PrivilegeSetLength: LPDWORD,
+ GrantedAccess: LPDWORD,
+ AccessStatus: LPBOOL,
+ ) -> BOOL;
+ pub fn AccessCheckByTypeResultList(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ PrincipalSelfSid: PSID,
+ ClientToken: HANDLE,
+ DesiredAccess: DWORD,
+ ObjectTypeList: POBJECT_TYPE_LIST,
+ ObjectTypeListLength: DWORD,
+ GenericMapping: PGENERIC_MAPPING,
+ PrivilegeSet: PPRIVILEGE_SET,
+ PrivilegeSetLength: LPDWORD,
+ GrantedAccessList: LPDWORD,
+ AccessStatusList: LPDWORD,
+ ) -> BOOL;
+ pub fn AccessCheckByTypeAndAuditAlarmW(
+ SubsystemName: LPCWSTR,
+ HandleId: LPVOID,
+ ObjectTypeName: LPWSTR,
+ ObjectName: LPCWSTR,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ PrincipalSelfSid: PSID,
+ DesiredAccess: DWORD,
+ AuditType: AUDIT_EVENT_TYPE,
+ Flags: DWORD,
+ ObjectTypeList: POBJECT_TYPE_LIST,
+ ObjectTypeListLength: DWORD,
+ GenericMapping: PGENERIC_MAPPING,
+ ObjectCreation: BOOL,
+ GrantedAccess: LPDWORD,
+ AccessStatus: LPBOOL,
+ pfGenerateOnClose: LPBOOL,
+ ) -> BOOL;
+ pub fn AccessCheckByTypeResultListAndAuditAlarmW(
+ SubsystemName: LPCWSTR,
+ HandleId: LPVOID,
+ ObjectTypeName: LPCWSTR,
+ ObjectName: LPCWSTR,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ PrincipalSelfSid: PSID,
+ DesiredAccess: DWORD,
+ AuditType: AUDIT_EVENT_TYPE,
+ Flags: DWORD,
+ ObjectTypeList: POBJECT_TYPE_LIST,
+ ObjectTypeListLength: DWORD,
+ GenericMapping: PGENERIC_MAPPING,
+ ObjectCreation: BOOL,
+ GrantedAccess: LPDWORD,
+ AccessStatusList: LPDWORD,
+ pfGenerateOnClose: LPBOOL,
+ ) -> BOOL;
+ pub fn AccessCheckByTypeResultListAndAuditAlarmByHandleW(
+ SubsystemName: LPCWSTR,
+ HandleId: LPVOID,
+ ClientToken: HANDLE,
+ ObjectTypeName: LPCWSTR,
+ ObjectName: LPCWSTR,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ PrincipalSelfSid: PSID,
+ DesiredAccess: DWORD,
+ AuditType: AUDIT_EVENT_TYPE,
+ Flags: DWORD,
+ ObjectTypeList: POBJECT_TYPE_LIST,
+ ObjectTypeListLength: DWORD,
+ GenericMapping: PGENERIC_MAPPING,
+ ObjectCreation: BOOL,
+ GrantedAccess: LPDWORD,
+ AccessStatusList: LPDWORD,
+ pfGenerateOnClose: LPBOOL,
+ ) -> BOOL;
+ pub fn AddAccessAllowedAce(
+ pAcl: PACL,
+ dwAceRevision: DWORD,
+ AccessMask: DWORD,
+ pSid: PSID,
+ ) -> BOOL;
+ pub fn AddAccessAllowedAceEx(
+ pAcl: PACL,
+ dwAceRevision: DWORD,
+ AceFlags: DWORD,
+ AccessMask: DWORD,
+ pSid: PSID,
+ ) -> BOOL;
+ pub fn AddAccessAllowedObjectAce(
+ pAcl: PACL,
+ dwAceRevision: DWORD,
+ AceFlags: DWORD,
+ AccessMask: DWORD,
+ ObjectTypeGuid: *mut GUID,
+ InheritedObjectTypeGuid: *mut GUID,
+ pSid: PSID,
+ ) -> BOOL;
+ pub fn AddAccessDeniedAce(
+ pAcl: PACL,
+ dwAceRevision: DWORD,
+ AccessMask: DWORD,
+ pSid: PSID,
+ ) -> BOOL;
+ pub fn AddAccessDeniedAceEx(
+ pAcl: PACL,
+ dwAceRevision: DWORD,
+ AceFlags: DWORD,
+ AccessMask: DWORD,
+ pSid: PSID,
+ ) -> BOOL;
+ pub fn AddAccessDeniedObjectAce(
+ pAcl: PACL,
+ dwAceRevision: DWORD,
+ AceFlags: DWORD,
+ AccessMask: DWORD,
+ ObjectTypeGuid: *mut GUID,
+ InheritedObjectTypeGuid: *mut GUID,
+ pSid: PSID,
+ ) -> BOOL;
+ pub fn AddAce(
+ pAcl: PACL,
+ dwAceRevision: DWORD,
+ dwStartingAceIndex: DWORD,
+ pAceList: LPVOID,
+ nAceListLength: DWORD,
+ ) -> BOOL;
+ pub fn AddAuditAccessAce(
+ pAcl: PACL,
+ dwAceRevision: DWORD,
+ dwAccessMask: DWORD,
+ pSid: PSID,
+ bAuditSuccess: BOOL,
+ bAuditFailure: BOOL,
+ ) -> BOOL;
+ pub fn AddAuditAccessAceEx(
+ pAcl: PACL,
+ dwAceRevision: DWORD,
+ AceFlags: DWORD,
+ dwAccessMask: DWORD,
+ pSid: PSID,
+ bAuditSuccess: BOOL,
+ bAuditFailure: BOOL,
+ ) -> BOOL;
+ pub fn AddAuditAccessObjectAce(
+ pAcl: PACL,
+ dwAceRevision: DWORD,
+ AceFlags: DWORD,
+ AccessMask: DWORD,
+ ObjectTypeGuid: *mut GUID,
+ InheritedObjectTypeGuid: *mut GUID,
+ pSid: PSID,
+ bAuditSuccess: BOOL,
+ bAuditFailure: BOOL,
+ ) -> BOOL;
+ pub fn AddMandatoryAce(
+ pAcl: PACL,
+ dwAceRevision: DWORD,
+ AceFlags: DWORD,
+ MandatoryPolicy: DWORD,
+ pLabelSid: PSID,
+ ) -> BOOL;
+ pub fn AddResourceAttributeAce(
+ pAcl: PACL,
+ dwAceRevision: DWORD,
+ AceFlags: DWORD,
+ AccessMask: DWORD,
+ pSid: PSID,
+ pAttributeInfo: PCLAIM_SECURITY_ATTRIBUTES_INFORMATION,
+ pReturnLength: PDWORD,
+ ) -> BOOL;
+ pub fn AddScopedPolicyIDAce(
+ pAcl: PACL,
+ dwAceRevision: DWORD,
+ AceFlags: DWORD,
+ AccessMask: DWORD,
+ pSid: PSID,
+ ) -> BOOL;
+ pub fn AdjustTokenGroups(
+ TokenHandle: HANDLE,
+ ResetToDefault: BOOL,
+ NewState: PTOKEN_GROUPS,
+ BufferLength: DWORD,
+ PreviousState: PTOKEN_GROUPS,
+ ReturnLength: PDWORD,
+ ) -> BOOL;
+ pub fn AdjustTokenPrivileges(
+ TokenHandle: HANDLE,
+ DisableAllPrivileges: BOOL,
+ NewState: PTOKEN_PRIVILEGES,
+ BufferLength: DWORD,
+ PreviousState: PTOKEN_PRIVILEGES,
+ ReturnLength: PDWORD,
+ ) -> BOOL;
+ pub fn AllocateAndInitializeSid(
+ pIdentifierAuthoirity: PSID_IDENTIFIER_AUTHORITY,
+ nSubAuthorityCount: BYTE,
+ dwSubAuthority0: DWORD,
+ dwSubAuthority1: DWORD,
+ dwSubAuthority2: DWORD,
+ dwSubAuthority3: DWORD,
+ dwSubAuthority4: DWORD,
+ dwSubAuthority5: DWORD,
+ dwSubAuthority6: DWORD,
+ dwSubAuthority7: DWORD,
+ pSid: *mut PSID,
+ ) -> BOOL;
+ pub fn AllocateLocallyUniqueId(
+ Luid: PLUID,
+ ) -> BOOL;
+ pub fn AreAllAccessesGranted(
+ GrantedAccess: DWORD,
+ DesiredAccess: DWORD,
+ ) -> BOOL;
+ pub fn AreAnyAccessesGranted(
+ GrantedAccess: DWORD,
+ DesiredAccess: DWORD,
+ ) -> BOOL;
+ pub fn CheckTokenMembership(
+ TokenHandle: HANDLE,
+ SidToCheck: PSID,
+ IsMember: PBOOL,
+ ) -> BOOL;
+ pub fn CheckTokenCapability(
+ TokenHandle: HANDLE,
+ CapabilitySidToCheck: PSID,
+ HasCapability: PBOOL,
+ ) -> BOOL;
+ pub fn GetAppContainerAce(
+ Acl: PACL,
+ StartingAceIndex: DWORD,
+ AppContainerAce: *mut PVOID,
+ AppContainerAceIndex: *mut DWORD,
+ ) -> BOOL;
+ pub fn CheckTokenMembershipEx(
+ TokenHandle: HANDLE,
+ SidToCheck: PSID,
+ Flags: DWORD,
+ IsMember: PBOOL,
+ ) -> BOOL;
+ pub fn ConvertToAutoInheritPrivateObjectSecurity(
+ ParentDescriptor: PSECURITY_DESCRIPTOR,
+ CurrentSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ NewSecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
+ ObjectType: *mut GUID,
+ IsDirectoryObject: BOOLEAN,
+ GenericMapping: PGENERIC_MAPPING,
+ ) -> BOOL;
+ pub fn CopySid(
+ nDestinationSidLength: DWORD,
+ pDestinationSid: PSID,
+ pSourceSid: PSID,
+ ) -> BOOL;
+ pub fn CreatePrivateObjectSecurity(
+ ParentDescriptor: PSECURITY_DESCRIPTOR,
+ CreatorDescriptor: PSECURITY_DESCRIPTOR,
+ NewDescriptor: *mut PSECURITY_DESCRIPTOR,
+ IsDirectoryObject: BOOL,
+ Token: HANDLE,
+ GenericMapping: PGENERIC_MAPPING,
+ ) -> BOOL;
+ pub fn CreatePrivateObjectSecurityEx(
+ ParentDescriptor: PSECURITY_DESCRIPTOR,
+ CreatorDescriptor: PSECURITY_DESCRIPTOR,
+ NewSecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
+ ObjectType: *mut GUID,
+ IsContainerObject: BOOL,
+ AutoInheritFlags: ULONG,
+ Token: HANDLE,
+ GenericMapping: PGENERIC_MAPPING,
+ ) -> BOOL;
+ pub fn CreatePrivateObjectSecurityWithMultipleInheritance(
+ ParentDescriptor: PSECURITY_DESCRIPTOR,
+ CreatorDescriptor: PSECURITY_DESCRIPTOR,
+ NewSecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
+ ObjectTypes: *mut *mut GUID,
+ GuidCount: ULONG,
+ IsContainerObject: BOOL,
+ AutoInheritFlags: ULONG,
+ Token: HANDLE,
+ GenericMapping: PGENERIC_MAPPING,
+ ) -> BOOL;
+ pub fn CreateRestrictedToken(
+ ExistingTokenHandle: HANDLE,
+ Flags: DWORD,
+ DisableSidCount: DWORD,
+ SidsToDisable: PSID_AND_ATTRIBUTES,
+ DeletePrivilegeCount: DWORD,
+ PrivilegesToDelete: PLUID_AND_ATTRIBUTES,
+ RestrictedSidCount: DWORD,
+ SidsToRestrict: PSID_AND_ATTRIBUTES,
+ NewTokenHandle: PHANDLE,
+ ) -> BOOL;
+ pub fn CreateWellKnownSid(
+ WellKnownSidType: WELL_KNOWN_SID_TYPE,
+ DomainSid: PSID,
+ pSid: PSID,
+ cbSid: *mut DWORD,
+ ) -> BOOL;
+ pub fn EqualDomainSid(
+ pSid1: PSID,
+ pSid2: PSID,
+ pfEqual: *mut BOOL,
+ ) -> BOOL;
+ pub fn DeleteAce(
+ pAcl: PACL,
+ dwAceIndex: DWORD,
+ ) -> BOOL;
+ pub fn DestroyPrivateObjectSecurity(
+ ObjectDescriptor: *mut PSECURITY_DESCRIPTOR,
+ ) -> BOOL;
+ pub fn DuplicateToken(
+ ExistingTokenHandle: HANDLE,
+ ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL,
+ DuplicateTokenHandle: PHANDLE,
+ ) -> BOOL;
+ pub fn DuplicateTokenEx(
+ hExistingToken: HANDLE,
+ dwDesiredAccess: DWORD,
+ lpTokenAttributes: LPSECURITY_ATTRIBUTES,
+ ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL,
+ TokenType: TOKEN_TYPE,
+ phNewToken: PHANDLE,
+ ) -> BOOL;
+ pub fn EqualPrefixSid(
+ pSid1: PSID,
+ pSid2: PSID,
+ ) -> BOOL;
+ pub fn EqualSid(
+ pSid1: PSID,
+ pSid2: PSID,
+ ) -> BOOL;
+ pub fn FindFirstFreeAce(
+ pAcl: PACL,
+ pAce: *mut LPVOID,
+ ) -> BOOL;
+ pub fn FreeSid(
+ pSid: PSID,
+ ) -> PVOID;
+ pub fn GetAce(
+ pAcl: PACL,
+ dwAceIndex: DWORD,
+ pAce: *mut LPVOID,
+ ) -> BOOL;
+ pub fn GetAclInformation(
+ pAcl: PACL,
+ pAclInformtion: LPVOID,
+ nAclInformationLength: DWORD,
+ dwAclInformationClass: ACL_INFORMATION_CLASS,
+ ) -> BOOL;
+ pub fn GetFileSecurityW(
+ lpFileName: LPCWSTR,
+ RequestedInformation: SECURITY_INFORMATION,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ nLength: DWORD,
+ lpnLengthNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn GetKernelObjectSecurity(
+ Handle: HANDLE,
+ RequestedInformation: SECURITY_INFORMATION,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ nLength: DWORD,
+ lpnLengthNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn GetLengthSid(
+ pSid: PSID,
+ ) -> DWORD;
+ pub fn GetPrivateObjectSecurity(
+ ObjectDescriptor: PSECURITY_DESCRIPTOR,
+ SecurityInformation: SECURITY_INFORMATION,
+ ResultantDescriptor: PSECURITY_DESCRIPTOR,
+ DescriptorLength: DWORD,
+ ReturnLength: PDWORD,
+ ) -> BOOL;
+ pub fn GetSecurityDescriptorControl(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ pControl: PSECURITY_DESCRIPTOR_CONTROL,
+ lpdwRevision: LPDWORD,
+ ) -> BOOL;
+ pub fn GetSecurityDescriptorDacl(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ lpbDaclPresent: LPBOOL,
+ pDacl: *mut PACL,
+ lpbDaclDefaulted: LPBOOL,
+ ) -> BOOL;
+ pub fn GetSecurityDescriptorGroup(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ pGroup: *mut PSID,
+ lpbGroupDefaulted: LPBOOL,
+ ) -> BOOL;
+ pub fn GetSecurityDescriptorLength(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ ) -> DWORD;
+ pub fn GetSecurityDescriptorOwner(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ pOwner: *mut PSID,
+ lpbOwnerDefaulted: LPBOOL,
+ ) -> BOOL;
+ pub fn GetSecurityDescriptorRMControl(
+ SecurityDescriptor: PSECURITY_DESCRIPTOR,
+ RMControl: PUCHAR,
+ ) -> DWORD;
+ pub fn GetSecurityDescriptorSacl(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ lpbSaclPresent: LPBOOL,
+ pSacl: *mut PACL,
+ lpbSaclDefaulted: LPBOOL,
+ ) -> BOOL;
+ pub fn GetSidIdentifierAuthority(
+ pSid: PSID,
+ ) -> PSID_IDENTIFIER_AUTHORITY;
+ pub fn GetSidLengthRequired(
+ nSubAuthorityCount: UCHAR,
+ ) -> DWORD;
+ pub fn GetSidSubAuthority(
+ pSid: PSID,
+ nSubAuthority: DWORD,
+ ) -> PDWORD;
+ pub fn GetSidSubAuthorityCount(
+ pSid: PSID,
+ ) -> PUCHAR;
+ pub fn GetTokenInformation(
+ TokenHandle: HANDLE,
+ TokenInformationClass: TOKEN_INFORMATION_CLASS,
+ TokenInformation: LPVOID,
+ TokenInformationLength: DWORD,
+ ReturnLength: PDWORD,
+ ) -> BOOL;
+ pub fn GetWindowsAccountDomainSid(
+ pSid: PSID,
+ pDomainSid: PSID,
+ cbDomainSid: *mut DWORD,
+ ) -> BOOL;
+ pub fn ImpersonateAnonymousToken(
+ ThreadHandle: HANDLE,
+ ) -> BOOL;
+ pub fn ImpersonateLoggedOnUser(
+ hToken: HANDLE,
+ ) -> BOOL;
+ pub fn ImpersonateSelf(
+ ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL,
+ ) -> BOOL;
+ pub fn InitializeAcl(
+ pAcl: PACL,
+ nAclLength: DWORD,
+ dwAclRevision: DWORD,
+ ) -> BOOL;
+ pub fn InitializeSecurityDescriptor(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ dwRevision: DWORD,
+ ) -> BOOL;
+ pub fn InitializeSid(
+ Sid: PSID,
+ pIdentifierAuthority: PSID_IDENTIFIER_AUTHORITY,
+ nSubAuthorityCount: BYTE,
+ ) -> BOOL;
+ pub fn IsTokenRestricted(
+ TokenHandle: HANDLE,
+ ) -> BOOL;
+ pub fn IsValidAcl(
+ pAcl: PACL,
+ ) -> BOOL;
+ pub fn IsValidSecurityDescriptor(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ ) -> BOOL;
+ pub fn IsValidSid(
+ pSid: PSID,
+ ) -> BOOL;
+ pub fn IsWellKnownSid(
+ pSid: PSID,
+ WellKnownSidType: WELL_KNOWN_SID_TYPE,
+ ) -> BOOL;
+ pub fn MakeAbsoluteSD(
+ pSelfRelativeSD: PSECURITY_DESCRIPTOR,
+ pAbsoluteSD: PSECURITY_DESCRIPTOR,
+ lpdwAbsoluteSDSize: LPDWORD,
+ pDacl: PACL,
+ lpdwDaclSize: LPDWORD,
+ pSacl: PACL,
+ lpdwSaclSize: LPDWORD,
+ pOwner: PSID,
+ lpdwOwnerSize: LPDWORD,
+ pPrimaryGroup: PSID,
+ lpdwPrimaryGroupSize: LPDWORD,
+ ) -> BOOL;
+ pub fn MakeSelfRelativeSD(
+ pAbsoluteSD: PSECURITY_DESCRIPTOR,
+ pSelfRelativeSD: PSECURITY_DESCRIPTOR,
+ lpdwBufferLength: LPDWORD,
+ ) -> BOOL;
+ pub fn MapGenericMask(
+ AccessMask: PDWORD,
+ GenericMapping: PGENERIC_MAPPING,
+ );
+ pub fn ObjectCloseAuditAlarmW(
+ SubsystemName: LPCWSTR,
+ HandleId: LPVOID,
+ GenerateOnClose: BOOL,
+ ) -> BOOL;
+ pub fn ObjectDeleteAuditAlarmW(
+ SubsystemName: LPCWSTR,
+ HandleId: LPVOID,
+ GenerateOnClose: BOOL,
+ ) -> BOOL;
+ pub fn ObjectOpenAuditAlarmW(
+ SubsystemName: LPCWSTR,
+ HandleId: LPVOID,
+ ObjectTypeName: LPWSTR,
+ ObjectName: LPWSTR,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ ClientToken: HANDLE,
+ DesiredAccess: DWORD,
+ GrantedAccess: DWORD,
+ Privileges: PPRIVILEGE_SET,
+ ObjectCreation: BOOL,
+ AccessGranted: BOOL,
+ GenerateOnClose: LPBOOL,
+ ) -> BOOL;
+ pub fn ObjectPrivilegeAuditAlarmW(
+ SubsystemName: LPCWSTR,
+ HandleId: LPVOID,
+ ClientToken: HANDLE,
+ DesiredAccess: DWORD,
+ Privileges: PPRIVILEGE_SET,
+ AccessGranted: BOOL,
+ ) -> BOOL;
+ pub fn PrivilegeCheck(
+ ClientToken: HANDLE,
+ RequiredPrivileges: PPRIVILEGE_SET,
+ pfResult: LPBOOL,
+ ) -> BOOL;
+ pub fn PrivilegedServiceAuditAlarmW(
+ SubsystemName: LPCWSTR,
+ ServiceName: LPCWSTR,
+ ClientToken: HANDLE,
+ Privileges: PPRIVILEGE_SET,
+ AccessGranted: BOOL,
+ ) -> BOOL;
+ pub fn QuerySecurityAccessMask(
+ SecurityInformation: SECURITY_INFORMATION,
+ DesiredAccess: LPDWORD,
+ );
+ pub fn RevertToSelf() -> BOOL;
+ pub fn SetAclInformation(
+ pAcl: PACL,
+ pAclInformation: LPVOID,
+ nAclInformationLength: DWORD,
+ dwAclInfomrationClass: ACL_INFORMATION_CLASS,
+ ) -> BOOL;
+ pub fn SetFileSecurityW(
+ lpFileName: LPCWSTR,
+ SecurityInformation: SECURITY_INFORMATION,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ ) -> BOOL;
+ pub fn SetKernelObjectSecurity(
+ Handle: HANDLE,
+ SecurityInformation: SECURITY_INFORMATION,
+ SecurityDescriptor: PSECURITY_DESCRIPTOR,
+ ) -> BOOL;
+ pub fn SetPrivateObjectSecurity(
+ SecurityInformation: SECURITY_INFORMATION,
+ ModificationDescriptor: PSECURITY_DESCRIPTOR,
+ ObjectsSecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
+ GenericMapping: PGENERIC_MAPPING,
+ Token: HANDLE,
+ ) -> BOOL;
+ pub fn SetPrivateObjectSecurityEx(
+ SecurityInformation: SECURITY_INFORMATION,
+ ModificationDescriptor: PSECURITY_DESCRIPTOR,
+ ObjectsSecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
+ AutoInheritFlags: ULONG,
+ GenericMapping: PGENERIC_MAPPING,
+ Token: HANDLE,
+ ) -> BOOL;
+ pub fn SetSecurityAccessMask(
+ SecurityInformation: SECURITY_INFORMATION,
+ DesiredAccess: LPDWORD,
+ );
+ pub fn SetSecurityDescriptorControl(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ ControlBitsOfInterest: SECURITY_DESCRIPTOR_CONTROL,
+ ControlBitsToSet: SECURITY_DESCRIPTOR_CONTROL,
+ ) -> BOOL;
+ pub fn SetSecurityDescriptorDacl(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ bDaclPresent: BOOL,
+ pDacl: PACL,
+ bDaclDefaulted: BOOL,
+ ) -> BOOL;
+ pub fn SetSecurityDescriptorGroup(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ pGroup: PSID,
+ bGroupDefaulted: BOOL,
+ ) -> BOOL;
+ pub fn SetSecurityDescriptorOwner(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ pOwner: PSID,
+ bOwnerDefaulted: BOOL,
+ ) -> BOOL;
+ pub fn SetSecurityDescriptorRMControl(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ RMControl: PUCHAR,
+ ) -> DWORD;
+ pub fn SetSecurityDescriptorSacl(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ bSaclPresent: BOOL,
+ pSacl: PACL,
+ bSaclDefaulted: BOOL,
+ ) -> BOOL;
+ pub fn SetTokenInformation(
+ TokenHandle: HANDLE,
+ TokenInformationClass: TOKEN_INFORMATION_CLASS,
+ TokenInformation: LPVOID,
+ TokenInformationLength: DWORD,
+ ) -> BOOL;
+ pub fn SetCachedSigningLevel(
+ SourceFiles: PHANDLE,
+ SourceFileCount: ULONG,
+ Flags: ULONG,
+ TargetFile: HANDLE,
+ ) -> BOOL;
+ pub fn GetCachedSigningLevel(
+ File: HANDLE,
+ Flags: PULONG,
+ SigningLevel: PULONG,
+ Thumbprint: PUCHAR,
+ ThumbprintSize: PULONG,
+ ThumbprintAlgorithm: PULONG,
+ ) -> BOOL;
+ pub fn CveEventWrite(
+ CveId: PCWSTR,
+ AdditionalDetails: PCWSTR,
+ ) -> LONG;
+ pub fn DeriveCapabilitySidsFromName(
+ CapName: LPCWSTR,
+ CapabilityGroupSids: *mut *mut PSID,
+ CapabilityGroupSidCount: *mut DWORD,
+ CapabilitySids: *mut *mut PSID,
+ CapabilitySidCount: *mut DWORD,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/servprov.rs b/vendor/winapi/src/um/servprov.rs
new file mode 100644
index 000000000..aeb382dbc
--- /dev/null
+++ b/vendor/winapi/src/um/servprov.rs
@@ -0,0 +1,23 @@
+// 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 ctypes::c_void;
+use shared::guiddef::{REFGUID, REFIID};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::HRESULT;
+pub type LPSERVICEPROVIDER = *mut IServiceProvider;
+RIDL!{#[uuid(0x6d5140c1, 0x7436, 0x11ce, 0x80, 0x34, 0x00, 0xaa, 0x00, 0x60, 0x09, 0xfa)]
+interface IServiceProvider(IServiceProviderVtbl): IUnknown(IUnknownVtbl) {
+ fn QueryService(
+ guidService: REFGUID,
+ riid: REFIID,
+ ppvObject: *mut *mut c_void,
+ ) -> HRESULT,
+ fn RemoteQueryService(
+ guidService: REFGUID,
+ riid: REFIID,
+ ppvObject: *mut *mut IUnknown,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/setupapi.rs b/vendor/winapi/src/um/setupapi.rs
new file mode 100644
index 000000000..d716fc56c
--- /dev/null
+++ b/vendor/winapi/src/um/setupapi.rs
@@ -0,0 +1,3571 @@
+// 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.
+//! Public header file for Windows NT Setup and Device Installer services Dll.
+use ctypes::c_int;
+use shared::basetsd::{DWORD_PTR, UINT_PTR, ULONG_PTR};
+use shared::devpropdef::{DEVPROPKEY, DEVPROPTYPE};
+use shared::guiddef::{GUID, LPGUID};
+use shared::minwindef::{
+ BOOL, BYTE, DWORD, FILETIME, HINSTANCE, HKEY, INT, LPARAM, LPCVOID, LPDWORD, MAX_PATH, PBOOL,
+ PBYTE, PDWORD, PINT, PUINT, UINT, USHORT, WORD,
+};
+use shared::windef::{HDC, HICON, HWND, RECT};
+use um::commctrl::HIMAGELIST;
+use um::prsht::{HPROPSHEETPAGE, LPPROPSHEETHEADERA, LPPROPSHEETHEADERW};
+use um::spapidef::SP_LOG_TOKEN;
+use um::winnt::{
+ ANYSIZE_ARRAY, APPLICATION_ERROR_MASK, CHAR, DWORDLONG, ERROR_SEVERITY_ERROR, HANDLE, LONG,
+ LONGLONG, LPCSTR, LPCWSTR, PCSTR, PCWSTR, PSTR, PVOID, PWSTR, WCHAR,
+};
+use um::winreg::REGSAM;
+pub const LINE_LEN: usize = 256;
+pub const MAX_INF_STRING_LENGTH: usize = 4096;
+pub const MAX_INF_SECTION_NAME_LENGTH: usize = 255;
+pub const MAX_TITLE_LEN: usize = 60;
+pub const MAX_INSTRUCTION_LEN: usize = 256;
+pub const MAX_LABEL_LEN: usize = 30;
+pub const MAX_SERVICE_NAME_LEN: usize = 256;
+pub const MAX_SUBTITLE_LEN: usize = 256;
+pub const SP_MAX_MACHINENAME_LENGTH: usize = MAX_PATH + 3;
+pub type HINF = PVOID;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct INFCONTEXT {
+ Inf: PVOID,
+ CurrentInf: PVOID,
+ Section: UINT,
+ Line: UINT,
+}}
+pub type PINFCONTEXT = *mut INFCONTEXT;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INF_INFORMATION {
+ InfStyle: DWORD,
+ InfCount: DWORD,
+ VersionData: [BYTE; ANYSIZE_ARRAY],
+}}
+pub type PSP_INF_INFORMATION = *mut SP_INF_INFORMATION;
+UNION!{#[cfg_attr(target_arch = "x86", repr(packed))] union SP_ALTPLATFORM_INFO_V3_u {
+ [u16; 1],
+ Reserved Reserved_mut: WORD,
+ Flags Flags_mut: WORD,
+}}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ALTPLATFORM_INFO_V3 {
+ cbSize: DWORD,
+ Platform: DWORD,
+ MajorVersion: DWORD,
+ MinorVersion: DWORD,
+ ProcessorArchitecture: WORD,
+ u: SP_ALTPLATFORM_INFO_V3_u,
+ FirstValidatedMajorVersion: DWORD,
+ FirstValidatedMinorVersion: DWORD,
+ ProductType: BYTE,
+ SuiteMask: WORD,
+ BuildNumber: DWORD,
+}}
+pub type PSP_ALTPLATFORM_INFO_V3 = *mut SP_ALTPLATFORM_INFO_V3;
+UNION!{#[cfg_attr(target_arch = "x86", repr(packed))] union SP_ALTPLATFORM_INFO_V2_u {
+ [u16; 1],
+ Reserved Reserved_mut: WORD,
+ Flags Flags_mut: WORD,
+}}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ALTPLATFORM_INFO_V2 {
+ cbSize: DWORD,
+ Platform: DWORD,
+ MajorVersion: DWORD,
+ MinorVersion: DWORD,
+ ProcessorArchitecture: WORD,
+ u: SP_ALTPLATFORM_INFO_V2_u,
+ FirstValidatedMajorVersion: DWORD,
+ FirstValidatedMinorVersion: DWORD,
+}}
+pub type PSP_ALTPLATFORM_INFO_V2 = *mut SP_ALTPLATFORM_INFO_V2;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ALTPLATFORM_INFO_V1 {
+ cbSize: DWORD,
+ Platform: DWORD,
+ MajorVersion: DWORD,
+ MinorVersion: DWORD,
+ ProcessorArchitecture: WORD,
+ Reserved: WORD,
+}}
+pub type PSP_ALTPLATFORM_INFO_V1 = *mut SP_ALTPLATFORM_INFO_V1;
+pub type SP_ALTPLATFORM_INFO = SP_ALTPLATFORM_INFO_V2;
+pub type PSP_ALTPLATFORM_INFO = PSP_ALTPLATFORM_INFO_V2;
+pub const SP_ALTPLATFORM_FLAGS_VERSION_RANGE: WORD = 0x0001;
+pub const SP_ALTPLATFORM_FLAGS_SUITE_MASK: WORD = 0x0002;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ORIGINAL_FILE_INFO_A {
+ cbSize: DWORD,
+ OriginalInfName: [CHAR; MAX_PATH],
+ OriginalCatalogName: [CHAR; MAX_PATH],
+}}
+pub type PSP_ORIGINAL_FILE_INFO_A = *mut SP_ORIGINAL_FILE_INFO_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ORIGINAL_FILE_INFO_W {
+ cbSize: DWORD,
+ OriginalInfName: [WCHAR; MAX_PATH],
+ OriginalCatalogName: [WCHAR; MAX_PATH],
+}}
+pub type PSP_ORIGINAL_FILE_INFO_W = *mut SP_ORIGINAL_FILE_INFO_W;
+pub const INF_STYLE_NONE: DWORD = 0x00000000;
+pub const INF_STYLE_OLDNT: DWORD = 0x00000001;
+pub const INF_STYLE_WIN4: DWORD = 0x00000002;
+pub const INF_STYLE_CACHE_ENABLE: DWORD = 0x00000010;
+pub const INF_STYLE_CACHE_DISABLE: DWORD = 0x00000020;
+pub const INF_STYLE_CACHE_IGNORE: DWORD = 0x00000040;
+pub const DIRID_ABSOLUTE: DWORD = -1i32 as u32;
+pub const DIRID_ABSOLUTE_16BIT: DWORD = 0xffff;
+pub const DIRID_NULL: DWORD = 0;
+pub const DIRID_SRCPATH: DWORD = 1;
+pub const DIRID_WINDOWS: DWORD = 10;
+pub const DIRID_SYSTEM: DWORD = 11;
+pub const DIRID_DRIVERS: DWORD = 12;
+pub const DIRID_IOSUBSYS: DWORD = DIRID_DRIVERS;
+pub const DIRID_DRIVER_STORE: DWORD = 13;
+pub const DIRID_INF: DWORD = 17;
+pub const DIRID_HELP: DWORD = 18;
+pub const DIRID_FONTS: DWORD = 20;
+pub const DIRID_VIEWERS: DWORD = 21;
+pub const DIRID_COLOR: DWORD = 23;
+pub const DIRID_APPS: DWORD = 24;
+pub const DIRID_SHARED: DWORD = 25;
+pub const DIRID_BOOT: DWORD = 30;
+pub const DIRID_SYSTEM16: DWORD = 50;
+pub const DIRID_SPOOL: DWORD = 51;
+pub const DIRID_SPOOLDRIVERS: DWORD = 52;
+pub const DIRID_USERPROFILE: DWORD = 53;
+pub const DIRID_LOADER: DWORD = 54;
+pub const DIRID_PRINTPROCESSOR: DWORD = 55;
+pub const DIRID_DEFAULT: DWORD = DIRID_SYSTEM;
+pub const DIRID_COMMON_STARTMENU: DWORD = 16406;
+pub const DIRID_COMMON_PROGRAMS: DWORD = 16407;
+pub const DIRID_COMMON_STARTUP: DWORD = 16408;
+pub const DIRID_COMMON_DESKTOPDIRECTORY: DWORD = 16409;
+pub const DIRID_COMMON_FAVORITES: DWORD = 16415;
+pub const DIRID_COMMON_APPDATA: DWORD = 16419;
+pub const DIRID_PROGRAM_FILES: DWORD = 16422;
+pub const DIRID_SYSTEM_X86: DWORD = 16425;
+pub const DIRID_PROGRAM_FILES_X86: DWORD = 16426;
+pub const DIRID_PROGRAM_FILES_COMMON: DWORD = 16427;
+pub const DIRID_PROGRAM_FILES_COMMONX86: DWORD = 16428;
+pub const DIRID_COMMON_TEMPLATES: DWORD = 16429;
+pub const DIRID_COMMON_DOCUMENTS: DWORD = 16430;
+pub const DIRID_USER: DWORD = 0x8000;
+FN!{stdcall PSP_FILE_CALLBACK_A(
+ Context: PVOID,
+ Notification: UINT,
+ Param1: UINT_PTR,
+ Param2: UINT_PTR,
+) -> UINT}
+FN!{stdcall PSP_FILE_CALLBACK_W(
+ Context: PVOID,
+ Notification: UINT,
+ Param1: UINT_PTR,
+ Param2: UINT_PTR,
+) -> UINT}
+pub const SPFILENOTIFY_STARTQUEUE: UINT = 0x00000001;
+pub const SPFILENOTIFY_ENDQUEUE: UINT = 0x00000002;
+pub const SPFILENOTIFY_STARTSUBQUEUE: UINT = 0x00000003;
+pub const SPFILENOTIFY_ENDSUBQUEUE: UINT = 0x00000004;
+pub const SPFILENOTIFY_STARTDELETE: UINT = 0x00000005;
+pub const SPFILENOTIFY_ENDDELETE: UINT = 0x00000006;
+pub const SPFILENOTIFY_DELETEERROR: UINT = 0x00000007;
+pub const SPFILENOTIFY_STARTRENAME: UINT = 0x00000008;
+pub const SPFILENOTIFY_ENDRENAME: UINT = 0x00000009;
+pub const SPFILENOTIFY_RENAMEERROR: UINT = 0x0000000a;
+pub const SPFILENOTIFY_STARTCOPY: UINT = 0x0000000b;
+pub const SPFILENOTIFY_ENDCOPY: UINT = 0x0000000c;
+pub const SPFILENOTIFY_COPYERROR: UINT = 0x0000000d;
+pub const SPFILENOTIFY_NEEDMEDIA: UINT = 0x0000000e;
+pub const SPFILENOTIFY_QUEUESCAN: UINT = 0x0000000f;
+pub const SPFILENOTIFY_CABINETINFO: UINT = 0x00000010;
+pub const SPFILENOTIFY_FILEINCABINET: UINT = 0x00000011;
+pub const SPFILENOTIFY_NEEDNEWCABINET: UINT = 0x00000012;
+pub const SPFILENOTIFY_FILEEXTRACTED: UINT = 0x00000013;
+pub const SPFILENOTIFY_FILEOPDELAYED: UINT = 0x00000014;
+pub const SPFILENOTIFY_STARTBACKUP: UINT = 0x00000015;
+pub const SPFILENOTIFY_BACKUPERROR: UINT = 0x00000016;
+pub const SPFILENOTIFY_ENDBACKUP: UINT = 0x00000017;
+pub const SPFILENOTIFY_QUEUESCAN_EX: UINT = 0x00000018;
+pub const SPFILENOTIFY_STARTREGISTRATION: UINT = 0x00000019;
+pub const SPFILENOTIFY_ENDREGISTRATION: UINT = 0x00000020;
+pub const SPFILENOTIFY_QUEUESCAN_SIGNERINFO: UINT = 0x00000040;
+pub const SPFILENOTIFY_LANGMISMATCH: UINT = 0x00010000;
+pub const SPFILENOTIFY_TARGETEXISTS: UINT = 0x00020000;
+pub const SPFILENOTIFY_TARGETNEWER: UINT = 0x00040000;
+pub const FILEOP_COPY: UINT = 0;
+pub const FILEOP_RENAME: UINT = 1;
+pub const FILEOP_DELETE: UINT = 2;
+pub const FILEOP_BACKUP: UINT = 3;
+pub const FILEOP_ABORT: UINT = 0;
+pub const FILEOP_DOIT: UINT = 1;
+pub const FILEOP_SKIP: UINT = 2;
+pub const FILEOP_RETRY: UINT = FILEOP_DOIT;
+pub const FILEOP_NEWPATH: UINT = 4;
+pub const COPYFLG_WARN_IF_SKIP: UINT = 0x00000001;
+pub const COPYFLG_NOSKIP: UINT = 0x00000002;
+pub const COPYFLG_NOVERSIONCHECK: UINT = 0x00000004;
+pub const COPYFLG_FORCE_FILE_IN_USE: UINT = 0x00000008;
+pub const COPYFLG_NO_OVERWRITE: UINT = 0x00000010;
+pub const COPYFLG_NO_VERSION_DIALOG: UINT = 0x00000020;
+pub const COPYFLG_OVERWRITE_OLDER_ONLY: UINT = 0x00000040;
+pub const COPYFLG_PROTECTED_WINDOWS_DRIVER_FILE: UINT = 0x00000100;
+pub const COPYFLG_REPLACEONLY: UINT = 0x00000400;
+pub const COPYFLG_NODECOMP: UINT = 0x00000800;
+pub const COPYFLG_REPLACE_BOOT_FILE: UINT = 0x00001000;
+pub const COPYFLG_NOPRUNE: UINT = 0x00002000;
+pub const COPYFLG_IN_USE_TRY_RENAME: UINT = 0x00004000;
+pub const DELFLG_IN_USE: UINT = 0x00000001;
+pub const DELFLG_IN_USE1: UINT = 0x00010000;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILEPATHS_A {
+ Target: PCSTR,
+ Source: PCSTR,
+ Win32Error: UINT,
+ Flags: DWORD,
+}}
+pub type PFILEPATHS_A = *mut FILEPATHS_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILEPATHS_W {
+ Target: PCWSTR,
+ Source: PCWSTR,
+ Win32Error: UINT,
+ Flags: DWORD,
+}}
+pub type PFILEPATHS_W = *mut FILEPATHS_W;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILEPATHS_SIGNERINFO_A {
+ Target: PCSTR,
+ Source: PCSTR,
+ Win32Error: UINT,
+ Flags: DWORD,
+ DigitalSigner: PCSTR,
+ Version: PCSTR,
+ CatalogFile: PCSTR,
+}}
+pub type PFILEPATHS_SIGNERINFO_A = *mut FILEPATHS_SIGNERINFO_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILEPATHS_SIGNERINFO_W {
+ Target: PCWSTR,
+ Source: PCWSTR,
+ Win32Error: UINT,
+ Flags: DWORD,
+ DigitalSigner: PCWSTR,
+ Version: PCWSTR,
+ CatalogFile: PCWSTR,
+}}
+pub type PFILEPATHS_SIGNERINFO_W = *mut FILEPATHS_SIGNERINFO_W;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SOURCE_MEDIA_A {
+ Reserved: PCSTR,
+ Tagfile: PCSTR,
+ Description: PCSTR,
+ SourcePath: PCSTR,
+ SourceFile: PCSTR,
+ Flags: DWORD,
+}}
+pub type PSOURCE_MEDIA_A = *mut SOURCE_MEDIA_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SOURCE_MEDIA_W {
+ Reserved: PCWSTR,
+ Tagfile: PCWSTR,
+ Description: PCWSTR,
+ SourcePath: PCWSTR,
+ SourceFile: PCWSTR,
+ Flags: DWORD,
+}}
+pub type PSOURCE_MEDIA_W = *mut SOURCE_MEDIA_W;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct CABINET_INFO_A {
+ CabinetPath: PCSTR,
+ CabinetFile: PCSTR,
+ DiskName: PCSTR,
+ SetId: USHORT,
+ CabinetNumber: USHORT,
+}}
+pub type PCABINET_INFO_A = *mut CABINET_INFO_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct CABINET_INFO_W {
+ CabinetPath: PCWSTR,
+ CabinetFile: PCWSTR,
+ DiskName: PCWSTR,
+ SetId: USHORT,
+ CabinetNumber: USHORT,
+}}
+pub type PCABINET_INFO_W = *mut CABINET_INFO_W;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILE_IN_CABINET_INFO_A {
+ NameInCabinet: PCSTR,
+ FileSize: DWORD,
+ Win32Error: DWORD,
+ DosDate: WORD,
+ DosTime: WORD,
+ DosAttribs: WORD,
+ FullTargetName: [CHAR; MAX_PATH],
+}}
+pub type PFILE_IN_CABINET_INFO_A = *mut FILE_IN_CABINET_INFO_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct FILE_IN_CABINET_INFO_W {
+ NameInCabinet: PCWSTR,
+ FileSize: DWORD,
+ Win32Error: DWORD,
+ DosDate: WORD,
+ DosTime: WORD,
+ DosAttribs: WORD,
+ FullTargetName: [WCHAR; MAX_PATH],
+}}
+pub type PFILE_IN_CABINET_INFO_W = *mut FILE_IN_CABINET_INFO_W;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_REGISTER_CONTROL_STATUSA {
+ cbSize: DWORD,
+ FileName: PCSTR,
+ Win32Error: DWORD,
+ FailureCode: DWORD,
+}}
+pub type PSP_REGISTER_CONTROL_STATUSA = *mut SP_REGISTER_CONTROL_STATUSA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_REGISTER_CONTROL_STATUSW {
+ cbSize: DWORD,
+ FileName: PCWSTR,
+ Win32Error: DWORD,
+ FailureCode: DWORD,
+}}
+pub type PSP_REGISTER_CONTROL_STATUSW = *mut SP_REGISTER_CONTROL_STATUSW;
+pub const SPREG_SUCCESS: DWORD = 0x00000000;
+pub const SPREG_LOADLIBRARY: DWORD = 0x00000001;
+pub const SPREG_GETPROCADDR: DWORD = 0x00000002;
+pub const SPREG_REGSVR: DWORD = 0x00000003;
+pub const SPREG_DLLINSTALL: DWORD = 0x00000004;
+pub const SPREG_TIMEOUT: DWORD = 0x00000005;
+pub const SPREG_UNKNOWN: DWORD = 0xFFFFFFFF;
+pub type HSPFILEQ = PVOID;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_FILE_COPY_PARAMS_A {
+ cbSize: DWORD,
+ QueueHandle: HSPFILEQ,
+ SourceRootPath: PCSTR,
+ SourcePath: PCSTR,
+ SourceFilename: PCSTR,
+ SourceDescription: PCSTR,
+ SourceTagfile: PCSTR,
+ TargetDirectory: PCSTR,
+ TargetFilename: PCSTR,
+ CopyStyle: DWORD,
+ LayoutInf: HINF,
+ SecurityDescriptor: PCSTR,
+}}
+pub type PSP_FILE_COPY_PARAMS_A = *mut SP_FILE_COPY_PARAMS_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_FILE_COPY_PARAMS_W {
+ cbSize: DWORD,
+ QueueHandle: HSPFILEQ,
+ SourceRootPath: PCWSTR,
+ SourcePath: PCWSTR,
+ SourceFilename: PCWSTR,
+ SourceDescription: PCWSTR,
+ SourceTagfile: PCWSTR,
+ TargetDirectory: PCWSTR,
+ TargetFilename: PCWSTR,
+ CopyStyle: DWORD,
+ LayoutInf: HINF,
+ SecurityDescriptor: PCWSTR,
+}}
+pub type PSP_FILE_COPY_PARAMS_W = *mut SP_FILE_COPY_PARAMS_W;
+pub type HDSKSPC = PVOID;
+pub type HDEVINFO = PVOID;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVINFO_DATA {
+ cbSize: DWORD,
+ ClassGuid: GUID,
+ DevInst: DWORD,
+ Reserved: ULONG_PTR,
+}}
+pub type PSP_DEVINFO_DATA = *mut SP_DEVINFO_DATA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVICE_INTERFACE_DATA {
+ cbSize: DWORD,
+ InterfaceClassGuid: GUID,
+ Flags: DWORD,
+ Reserved: ULONG_PTR,
+}}
+pub type PSP_DEVICE_INTERFACE_DATA = *mut SP_DEVICE_INTERFACE_DATA;
+pub const SPINT_ACTIVE: DWORD = 0x00000001;
+pub const SPINT_DEFAULT: DWORD = 0x00000002;
+pub const SPINT_REMOVED: DWORD = 0x00000004;
+pub type SP_INTERFACE_DEVICE_DATA = SP_DEVICE_INTERFACE_DATA;
+pub type PSP_INTERFACE_DEVICE_DATA = PSP_DEVICE_INTERFACE_DATA;
+pub const SPID_ACTIVE: DWORD = SPINT_ACTIVE;
+pub const SPID_DEFAULT: DWORD = SPINT_DEFAULT;
+pub const SPID_REMOVED: DWORD = SPINT_REMOVED;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVICE_INTERFACE_DETAIL_DATA_A {
+ cbSize: DWORD,
+ DevicePath: [CHAR; ANYSIZE_ARRAY],
+}}
+pub type PSP_DEVICE_INTERFACE_DETAIL_DATA_A = *mut SP_DEVICE_INTERFACE_DETAIL_DATA_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVICE_INTERFACE_DETAIL_DATA_W {
+ cbSize: DWORD,
+ DevicePath: [WCHAR; ANYSIZE_ARRAY],
+}}
+pub type PSP_DEVICE_INTERFACE_DETAIL_DATA_W = *mut SP_DEVICE_INTERFACE_DETAIL_DATA_W;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVINFO_LIST_DETAIL_DATA_A {
+ cbSize: DWORD,
+ ClassGuid: GUID,
+ RemoteMachineHandle: HANDLE,
+ RemoteMachineName: [CHAR; SP_MAX_MACHINENAME_LENGTH],
+}}
+pub type PSP_DEVINFO_LIST_DETAIL_DATA_A = *mut SP_DEVINFO_LIST_DETAIL_DATA_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVINFO_LIST_DETAIL_DATA_W {
+ cbSize: DWORD,
+ ClassGuid: GUID,
+ RemoteMachineHandle: HANDLE,
+ RemoteMachineName: [WCHAR; SP_MAX_MACHINENAME_LENGTH],
+}}
+pub type PSP_DEVINFO_LIST_DETAIL_DATA_W = *mut SP_DEVINFO_LIST_DETAIL_DATA_W;
+pub const DIF_SELECTDEVICE: DI_FUNCTION = 0x00000001;
+pub const DIF_INSTALLDEVICE: DI_FUNCTION = 0x00000002;
+pub const DIF_ASSIGNRESOURCES: DI_FUNCTION = 0x00000003;
+pub const DIF_PROPERTIES: DI_FUNCTION = 0x00000004;
+pub const DIF_REMOVE: DI_FUNCTION = 0x00000005;
+pub const DIF_FIRSTTIMESETUP: DI_FUNCTION = 0x00000006;
+pub const DIF_FOUNDDEVICE: DI_FUNCTION = 0x00000007;
+pub const DIF_SELECTCLASSDRIVERS: DI_FUNCTION = 0x00000008;
+pub const DIF_VALIDATECLASSDRIVERS: DI_FUNCTION = 0x00000009;
+pub const DIF_INSTALLCLASSDRIVERS: DI_FUNCTION = 0x0000000A;
+pub const DIF_CALCDISKSPACE: DI_FUNCTION = 0x0000000B;
+pub const DIF_DESTROYPRIVATEDATA: DI_FUNCTION = 0x0000000C;
+pub const DIF_VALIDATEDRIVER: DI_FUNCTION = 0x0000000D;
+pub const DIF_DETECT: DI_FUNCTION = 0x0000000F;
+pub const DIF_INSTALLWIZARD: DI_FUNCTION = 0x00000010;
+pub const DIF_DESTROYWIZARDDATA: DI_FUNCTION = 0x00000011;
+pub const DIF_PROPERTYCHANGE: DI_FUNCTION = 0x00000012;
+pub const DIF_ENABLECLASS: DI_FUNCTION = 0x00000013;
+pub const DIF_DETECTVERIFY: DI_FUNCTION = 0x00000014;
+pub const DIF_INSTALLDEVICEFILES: DI_FUNCTION = 0x00000015;
+pub const DIF_UNREMOVE: DI_FUNCTION = 0x00000016;
+pub const DIF_SELECTBESTCOMPATDRV: DI_FUNCTION = 0x00000017;
+pub const DIF_ALLOW_INSTALL: DI_FUNCTION = 0x00000018;
+pub const DIF_REGISTERDEVICE: DI_FUNCTION = 0x00000019;
+pub const DIF_NEWDEVICEWIZARD_PRESELECT: DI_FUNCTION = 0x0000001A;
+pub const DIF_NEWDEVICEWIZARD_SELECT: DI_FUNCTION = 0x0000001B;
+pub const DIF_NEWDEVICEWIZARD_PREANALYZE: DI_FUNCTION = 0x0000001C;
+pub const DIF_NEWDEVICEWIZARD_POSTANALYZE: DI_FUNCTION = 0x0000001D;
+pub const DIF_NEWDEVICEWIZARD_FINISHINSTALL: DI_FUNCTION = 0x0000001E;
+pub const DIF_UNUSED1: DI_FUNCTION = 0x0000001F;
+pub const DIF_INSTALLINTERFACES: DI_FUNCTION = 0x00000020;
+pub const DIF_DETECTCANCEL: DI_FUNCTION = 0x00000021;
+pub const DIF_REGISTER_COINSTALLERS: DI_FUNCTION = 0x00000022;
+pub const DIF_ADDPROPERTYPAGE_ADVANCED: DI_FUNCTION = 0x00000023;
+pub const DIF_ADDPROPERTYPAGE_BASIC: DI_FUNCTION = 0x00000024;
+pub const DIF_RESERVED1: DI_FUNCTION = 0x00000025;
+pub const DIF_TROUBLESHOOTER: DI_FUNCTION = 0x00000026;
+pub const DIF_POWERMESSAGEWAKE: DI_FUNCTION = 0x00000027;
+pub const DIF_ADDREMOTEPROPERTYPAGE_ADVANCED: DI_FUNCTION = 0x00000028;
+pub const DIF_UPDATEDRIVER_UI: DI_FUNCTION = 0x00000029;
+pub const DIF_FINISHINSTALL_ACTION: DI_FUNCTION = 0x0000002A;
+pub const DIF_RESERVED2: DI_FUNCTION = 0x00000030;
+pub const DIF_MOVEDEVICE: DI_FUNCTION = 0x0000000E;
+pub type DI_FUNCTION = UINT;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVINSTALL_PARAMS_A {
+ cbSize: DWORD,
+ Flags: DWORD,
+ FlagsEx: DWORD,
+ hwndParent: HWND,
+ InstallMsgHandler: PSP_FILE_CALLBACK_A,
+ InstallMsgHandlerContext: PVOID,
+ FileQueue: HSPFILEQ,
+ ClassInstallReserved: ULONG_PTR,
+ Reserved: DWORD,
+ DriverPath: [CHAR; MAX_PATH],
+}}
+pub type PSP_DEVINSTALL_PARAMS_A = *mut SP_DEVINSTALL_PARAMS_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DEVINSTALL_PARAMS_W {
+ cbSize: DWORD,
+ Flags: DWORD,
+ FlagsEx: DWORD,
+ hwndParent: HWND,
+ InstallMsgHandler: PSP_FILE_CALLBACK_W,
+ InstallMsgHandlerContext: PVOID,
+ FileQueue: HSPFILEQ,
+ ClassInstallReserved: ULONG_PTR,
+ Reserved: DWORD,
+ DriverPath: [WCHAR; MAX_PATH],
+}}
+pub type PSP_DEVINSTALL_PARAMS_W = *mut SP_DEVINSTALL_PARAMS_W;
+pub const DI_SHOWOEM: DWORD = 0x00000001;
+pub const DI_SHOWCOMPAT: DWORD = 0x00000002;
+pub const DI_SHOWCLASS: DWORD = 0x00000004;
+pub const DI_SHOWALL: DWORD = 0x00000007;
+pub const DI_NOVCP: DWORD = 0x00000008;
+pub const DI_DIDCOMPAT: DWORD = 0x00000010;
+pub const DI_DIDCLASS: DWORD = 0x00000020;
+pub const DI_AUTOASSIGNRES: DWORD = 0x00000040;
+pub const DI_NEEDRESTART: DWORD = 0x00000080;
+pub const DI_NEEDREBOOT: DWORD = 0x00000100;
+pub const DI_NOBROWSE: DWORD = 0x00000200;
+pub const DI_MULTMFGS: DWORD = 0x00000400;
+pub const DI_DISABLED: DWORD = 0x00000800;
+pub const DI_GENERALPAGE_ADDED: DWORD = 0x00001000;
+pub const DI_RESOURCEPAGE_ADDED: DWORD = 0x00002000;
+pub const DI_PROPERTIES_CHANGE: DWORD = 0x00004000;
+pub const DI_INF_IS_SORTED: DWORD = 0x00008000;
+pub const DI_ENUMSINGLEINF: DWORD = 0x00010000;
+pub const DI_DONOTCALLCONFIGMG: DWORD = 0x00020000;
+pub const DI_INSTALLDISABLED: DWORD = 0x00040000;
+pub const DI_COMPAT_FROM_CLASS: DWORD = 0x00080000;
+pub const DI_CLASSINSTALLPARAMS: DWORD = 0x00100000;
+pub const DI_NODI_DEFAULTACTION: DWORD = 0x00200000;
+pub const DI_QUIETINSTALL: DWORD = 0x00800000;
+pub const DI_NOFILECOPY: DWORD = 0x01000000;
+pub const DI_FORCECOPY: DWORD = 0x02000000;
+pub const DI_DRIVERPAGE_ADDED: DWORD = 0x04000000;
+pub const DI_USECI_SELECTSTRINGS: DWORD = 0x08000000;
+pub const DI_OVERRIDE_INFFLAGS: DWORD = 0x10000000;
+pub const DI_PROPS_NOCHANGEUSAGE: DWORD = 0x20000000;
+pub const DI_NOSELECTICONS: DWORD = 0x40000000;
+pub const DI_NOWRITE_IDS: DWORD = 0x80000000;
+pub const DI_FLAGSEX_RESERVED2: DWORD = 0x00000001;
+pub const DI_FLAGSEX_RESERVED3: DWORD = 0x00000002;
+pub const DI_FLAGSEX_CI_FAILED: DWORD = 0x00000004;
+pub const DI_FLAGSEX_FINISHINSTALL_ACTION: DWORD = 0x00000008;
+pub const DI_FLAGSEX_DIDINFOLIST: DWORD = 0x00000010;
+pub const DI_FLAGSEX_DIDCOMPATINFO: DWORD = 0x00000020;
+pub const DI_FLAGSEX_FILTERCLASSES: DWORD = 0x00000040;
+pub const DI_FLAGSEX_SETFAILEDINSTALL: DWORD = 0x00000080;
+pub const DI_FLAGSEX_DEVICECHANGE: DWORD = 0x00000100;
+pub const DI_FLAGSEX_ALWAYSWRITEIDS: DWORD = 0x00000200;
+pub const DI_FLAGSEX_PROPCHANGE_PENDING: DWORD = 0x00000400;
+pub const DI_FLAGSEX_ALLOWEXCLUDEDDRVS: DWORD = 0x00000800;
+pub const DI_FLAGSEX_NOUIONQUERYREMOVE: DWORD = 0x00001000;
+pub const DI_FLAGSEX_USECLASSFORCOMPAT: DWORD = 0x00002000;
+pub const DI_FLAGSEX_RESERVED4: DWORD = 0x00004000;
+pub const DI_FLAGSEX_NO_DRVREG_MODIFY: DWORD = 0x00008000;
+pub const DI_FLAGSEX_IN_SYSTEM_SETUP: DWORD = 0x00010000;
+pub const DI_FLAGSEX_INET_DRIVER: DWORD = 0x00020000;
+pub const DI_FLAGSEX_APPENDDRIVERLIST: DWORD = 0x00040000;
+pub const DI_FLAGSEX_PREINSTALLBACKUP: DWORD = 0x00080000;
+pub const DI_FLAGSEX_BACKUPONREPLACE: DWORD = 0x00100000;
+pub const DI_FLAGSEX_DRIVERLIST_FROM_URL: DWORD = 0x00200000;
+pub const DI_FLAGSEX_RESERVED1: DWORD = 0x00400000;
+pub const DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS: DWORD = 0x00800000;
+pub const DI_FLAGSEX_POWERPAGE_ADDED: DWORD = 0x01000000;
+pub const DI_FLAGSEX_FILTERSIMILARDRIVERS: DWORD = 0x02000000;
+pub const DI_FLAGSEX_INSTALLEDDRIVER: DWORD = 0x04000000;
+pub const DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE: DWORD = 0x08000000;
+pub const DI_FLAGSEX_ALTPLATFORM_DRVSEARCH: DWORD = 0x10000000;
+pub const DI_FLAGSEX_RESTART_DEVICE_ONLY: DWORD = 0x20000000;
+pub const DI_FLAGSEX_RECURSIVESEARCH: DWORD = 0x40000000;
+pub const DI_FLAGSEX_SEARCH_PUBLISHED_INFS: DWORD = 0x80000000;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_CLASSINSTALL_HEADER {
+ cbSize: DWORD,
+ InstallFunction: DI_FUNCTION,
+}}
+pub type PSP_CLASSINSTALL_HEADER = *mut SP_CLASSINSTALL_HEADER;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_ENABLECLASS_PARAMS {
+ ClassInstallHeader: SP_CLASSINSTALL_HEADER,
+ ClassGuid: GUID,
+ EnableMessage: DWORD,
+}}
+pub type PSP_ENABLECLASS_PARAMS = *mut SP_ENABLECLASS_PARAMS;
+pub const ENABLECLASS_QUERY: DWORD = 0;
+pub const ENABLECLASS_SUCCESS: DWORD = 1;
+pub const ENABLECLASS_FAILURE: DWORD = 2;
+pub const DICS_ENABLE: DWORD = 0x00000001;
+pub const DICS_DISABLE: DWORD = 0x00000002;
+pub const DICS_PROPCHANGE: DWORD = 0x00000003;
+pub const DICS_START: DWORD = 0x00000004;
+pub const DICS_STOP: DWORD = 0x00000005;
+pub const DICS_FLAG_GLOBAL: DWORD = 0x00000001;
+pub const DICS_FLAG_CONFIGSPECIFIC: DWORD = 0x00000002;
+pub const DICS_FLAG_CONFIGGENERAL: DWORD = 0x00000004;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_PROPCHANGE_PARAMS {
+ ClassInstallHeader: SP_CLASSINSTALL_HEADER,
+ StateChange: DWORD,
+ Scope: DWORD,
+ HwProfile: DWORD,
+}}
+pub type PSP_PROPCHANGE_PARAMS = *mut SP_PROPCHANGE_PARAMS;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_REMOVEDEVICE_PARAMS {
+ ClassInstallHeader: SP_CLASSINSTALL_HEADER,
+ Scope: DWORD,
+ HwProfile: DWORD,
+}}
+pub type PSP_REMOVEDEVICE_PARAMS = *mut SP_REMOVEDEVICE_PARAMS;
+pub const DI_REMOVEDEVICE_GLOBAL: DWORD = 0x00000001;
+pub const DI_REMOVEDEVICE_CONFIGSPECIFIC: DWORD = 0x00000002;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_UNREMOVEDEVICE_PARAMS {
+ ClassInstallHeader: SP_CLASSINSTALL_HEADER,
+ Scope: DWORD,
+ HwProfile: DWORD,
+}}
+pub type PSP_UNREMOVEDEVICE_PARAMS = *mut SP_UNREMOVEDEVICE_PARAMS;
+pub const DI_UNREMOVEDEVICE_CONFIGSPECIFIC: DWORD = 0x00000002;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_SELECTDEVICE_PARAMS_A {
+ ClassInstallHeader: SP_CLASSINSTALL_HEADER,
+ Title: [CHAR; MAX_TITLE_LEN],
+ Instructions: [CHAR; MAX_INSTRUCTION_LEN],
+ ListLabel: [CHAR; MAX_LABEL_LEN],
+ SubTitle: [CHAR; MAX_SUBTITLE_LEN],
+ Reserved: [BYTE; 2],
+}}
+pub type PSP_SELECTDEVICE_PARAMS_A = *mut SP_SELECTDEVICE_PARAMS_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_SELECTDEVICE_PARAMS_W {
+ ClassInstallHeader: SP_CLASSINSTALL_HEADER,
+ Title: [WCHAR; MAX_TITLE_LEN],
+ Instructions: [WCHAR; MAX_INSTRUCTION_LEN],
+ ListLabel: [WCHAR; MAX_LABEL_LEN],
+ SubTitle: [WCHAR; MAX_SUBTITLE_LEN],
+}}
+pub type PSP_SELECTDEVICE_PARAMS_W = *mut SP_SELECTDEVICE_PARAMS_W;
+FN!{stdcall PDETECT_PROGRESS_NOTIFY(
+ ProgressNotifyParam: PVOID,
+ DetectComplete: DWORD,
+) -> BOOL}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DETECTDEVICE_PARAMS {
+ ClassInstallHeader: SP_CLASSINSTALL_HEADER,
+ DetectProgressNotify: PDETECT_PROGRESS_NOTIFY,
+ ProgressNotifyParam: PVOID,
+}}
+pub type PSP_DETECTDEVICE_PARAMS = *mut SP_DETECTDEVICE_PARAMS;
+pub const MAX_INSTALLWIZARD_DYNAPAGES: usize = 20;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INSTALLWIZARD_DATA {
+ ClassInstallHeader: SP_CLASSINSTALL_HEADER,
+ Flags: DWORD,
+ DynamicPages: [HPROPSHEETPAGE; MAX_INSTALLWIZARD_DYNAPAGES],
+ NumDynamicPages: DWORD,
+ DynamicPageFlags: DWORD,
+ PrivateFlags: DWORD,
+ PrivateData: LPARAM,
+ hwndWizardDlg: HWND,
+}}
+pub type PSP_INSTALLWIZARD_DATA = *mut SP_INSTALLWIZARD_DATA;
+pub const NDW_INSTALLFLAG_DIDFACTDEFS: DWORD = 0x00000001;
+pub const NDW_INSTALLFLAG_HARDWAREALLREADYIN: DWORD = 0x00000002;
+pub const NDW_INSTALLFLAG_NEEDRESTART: DWORD = DI_NEEDRESTART;
+pub const NDW_INSTALLFLAG_NEEDREBOOT: DWORD = DI_NEEDREBOOT;
+pub const NDW_INSTALLFLAG_NEEDSHUTDOWN: DWORD = 0x00000200;
+pub const NDW_INSTALLFLAG_EXPRESSINTRO: DWORD = 0x00000400;
+pub const NDW_INSTALLFLAG_SKIPISDEVINSTALLED: DWORD = 0x00000800;
+pub const NDW_INSTALLFLAG_NODETECTEDDEVS: DWORD = 0x00001000;
+pub const NDW_INSTALLFLAG_INSTALLSPECIFIC: DWORD = 0x00002000;
+pub const NDW_INSTALLFLAG_SKIPCLASSLIST: DWORD = 0x00004000;
+pub const NDW_INSTALLFLAG_CI_PICKED_OEM: DWORD = 0x00008000;
+pub const NDW_INSTALLFLAG_PCMCIAMODE: DWORD = 0x00010000;
+pub const NDW_INSTALLFLAG_PCMCIADEVICE: DWORD = 0x00020000;
+pub const NDW_INSTALLFLAG_USERCANCEL: DWORD = 0x00040000;
+pub const NDW_INSTALLFLAG_KNOWNCLASS: DWORD = 0x00080000;
+pub const DYNAWIZ_FLAG_PAGESADDED: DWORD = 0x00000001;
+pub const DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT: DWORD = 0x00000008;
+pub const DYNAWIZ_FLAG_INSTALLDET_NEXT: DWORD = 0x00000002;
+pub const DYNAWIZ_FLAG_INSTALLDET_PREV: DWORD = 0x00000004;
+pub const MIN_IDD_DYNAWIZ_RESOURCE_ID: c_int = 10000;
+pub const MAX_IDD_DYNAWIZ_RESOURCE_ID: c_int = 11000;
+pub const IDD_DYNAWIZ_FIRSTPAGE: c_int = 10000;
+pub const IDD_DYNAWIZ_SELECT_PREVPAGE: c_int = 10001;
+pub const IDD_DYNAWIZ_SELECT_NEXTPAGE: c_int = 10002;
+pub const IDD_DYNAWIZ_ANALYZE_PREVPAGE: c_int = 10003;
+pub const IDD_DYNAWIZ_ANALYZE_NEXTPAGE: c_int = 10004;
+pub const IDD_DYNAWIZ_SELECTDEV_PAGE: c_int = 10009;
+pub const IDD_DYNAWIZ_ANALYZEDEV_PAGE: c_int = 10010;
+pub const IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE: c_int = 10011;
+pub const IDD_DYNAWIZ_SELECTCLASS_PAGE: c_int = 10012;
+pub const IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE: c_int = 10006;
+pub const IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE: c_int = 10007;
+pub const IDD_DYNAWIZ_INSTALLDETECTED_NODEVS: c_int = 10008;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_NEWDEVICEWIZARD_DATA {
+ ClassInstallHeader: SP_CLASSINSTALL_HEADER,
+ Flags: DWORD,
+ DynamicPages: [HPROPSHEETPAGE; MAX_INSTALLWIZARD_DYNAPAGES],
+ NumDynamicPages: DWORD,
+ hwndWizardDlg: HWND,
+}}
+pub type PSP_NEWDEVICEWIZARD_DATA = *mut SP_NEWDEVICEWIZARD_DATA;
+pub type SP_ADDPROPERTYPAGE_DATA = SP_NEWDEVICEWIZARD_DATA;
+pub type PSP_ADDPROPERTYPAGE_DATA = PSP_NEWDEVICEWIZARD_DATA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_TROUBLESHOOTER_PARAMS_A {
+ ClassInstallHeader: SP_CLASSINSTALL_HEADER,
+ ChmFile: [CHAR; MAX_PATH],
+ HtmlTroubleShooter: [CHAR; MAX_PATH],
+}}
+pub type PSP_TROUBLESHOOTER_PARAMS_A = *mut SP_TROUBLESHOOTER_PARAMS_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_TROUBLESHOOTER_PARAMS_W {
+ ClassInstallHeader: SP_CLASSINSTALL_HEADER,
+ ChmFile: [WCHAR; MAX_PATH],
+ HtmlTroubleShooter: [WCHAR; MAX_PATH],
+}}
+pub type PSP_TROUBLESHOOTER_PARAMS_W = *mut SP_TROUBLESHOOTER_PARAMS_W;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_POWERMESSAGEWAKE_PARAMS_A {
+ ClassInstallHeader: SP_CLASSINSTALL_HEADER,
+ PowerMessageWake: [CHAR; LINE_LEN * 2],
+}}
+pub type PSP_POWERMESSAGEWAKE_PARAMS_A = *mut SP_POWERMESSAGEWAKE_PARAMS_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_POWERMESSAGEWAKE_PARAMS_W {
+ ClassInstallHeader: SP_CLASSINSTALL_HEADER,
+ PowerMessageWake: [WCHAR; LINE_LEN * 2],
+}}
+pub type PSP_POWERMESSAGEWAKE_PARAMS_W = *mut SP_POWERMESSAGEWAKE_PARAMS_W;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DATA_V2_A {
+ cbSize: DWORD,
+ DriverType: DWORD,
+ Reserved: ULONG_PTR,
+ Description: [CHAR; LINE_LEN],
+ MfgName: [CHAR; LINE_LEN],
+ ProviderName: [CHAR; LINE_LEN],
+ DriverDate: FILETIME,
+ DriverVersion: DWORDLONG,
+}}
+pub type PSP_DRVINFO_DATA_V2_A = *mut SP_DRVINFO_DATA_V2_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DATA_V2_W {
+ cbSize: DWORD,
+ DriverType: DWORD,
+ Reserved: ULONG_PTR,
+ Description: [WCHAR; LINE_LEN],
+ MfgName: [WCHAR; LINE_LEN],
+ ProviderName: [WCHAR; LINE_LEN],
+ DriverDate: FILETIME,
+ DriverVersion: DWORDLONG,
+}}
+pub type PSP_DRVINFO_DATA_V2_W = *mut SP_DRVINFO_DATA_V2_W;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DATA_V1_A {
+ cbSize: DWORD,
+ DriverType: DWORD,
+ Reserved: ULONG_PTR,
+ Description: [CHAR; LINE_LEN],
+ MfgName: [CHAR; LINE_LEN],
+ ProviderName: [CHAR; LINE_LEN],
+}}
+pub type PSP_DRVINFO_DATA_V1_A = *mut SP_DRVINFO_DATA_V1_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DATA_V1_W {
+ cbSize: DWORD,
+ DriverType: DWORD,
+ Reserved: ULONG_PTR,
+ Description: [WCHAR; LINE_LEN],
+ MfgName: [WCHAR; LINE_LEN],
+ ProviderName: [WCHAR; LINE_LEN],
+}}
+pub type PSP_DRVINFO_DATA_V1_W = *mut SP_DRVINFO_DATA_V1_W;
+pub type SP_DRVINFO_DATA_A = SP_DRVINFO_DATA_V2_A;
+pub type PSP_DRVINFO_DATA_A = PSP_DRVINFO_DATA_V2_A;
+pub type SP_DRVINFO_DATA_W = SP_DRVINFO_DATA_V2_W;
+pub type PSP_DRVINFO_DATA_W = PSP_DRVINFO_DATA_V2_W;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DETAIL_DATA_A {
+ cbSize: DWORD,
+ InfDate: FILETIME,
+ CompatIDsOffset: DWORD,
+ CompatIDsLength: DWORD,
+ Reserved: ULONG_PTR,
+ SectionName: [CHAR; LINE_LEN],
+ InfFileName: [CHAR; MAX_PATH],
+ DrvDescription: [CHAR; LINE_LEN],
+ HardwareID: [CHAR; ANYSIZE_ARRAY],
+}}
+pub type PSP_DRVINFO_DETAIL_DATA_A = *mut SP_DRVINFO_DETAIL_DATA_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINFO_DETAIL_DATA_W {
+ cbSize: DWORD,
+ InfDate: FILETIME,
+ CompatIDsOffset: DWORD,
+ CompatIDsLength: DWORD,
+ Reserved: ULONG_PTR,
+ SectionName: [WCHAR; LINE_LEN],
+ InfFileName: [WCHAR; MAX_PATH],
+ DrvDescription: [WCHAR; LINE_LEN],
+ HardwareID: [WCHAR; ANYSIZE_ARRAY],
+}}
+pub type PSP_DRVINFO_DETAIL_DATA_W = *mut SP_DRVINFO_DETAIL_DATA_W;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_DRVINSTALL_PARAMS {
+ cbSize: DWORD,
+ Rank: DWORD,
+ Flags: DWORD,
+ PrivateData: DWORD_PTR,
+ Reserved: DWORD,
+}}
+pub type PSP_DRVINSTALL_PARAMS = *mut SP_DRVINSTALL_PARAMS;
+pub const DNF_DUPDESC: DWORD = 0x00000001;
+pub const DNF_OLDDRIVER: DWORD = 0x00000002;
+pub const DNF_EXCLUDEFROMLIST: DWORD = 0x00000004;
+pub const DNF_NODRIVER: DWORD = 0x00000008;
+pub const DNF_LEGACYINF: DWORD = 0x00000010;
+pub const DNF_CLASS_DRIVER: DWORD = 0x00000020;
+pub const DNF_COMPATIBLE_DRIVER: DWORD = 0x00000040;
+pub const DNF_INET_DRIVER: DWORD = 0x00000080;
+pub const DNF_UNUSED1: DWORD = 0x00000100;
+pub const DNF_UNUSED2: DWORD = 0x00000200;
+pub const DNF_OLD_INET_DRIVER: DWORD = 0x00000400;
+pub const DNF_BAD_DRIVER: DWORD = 0x00000800;
+pub const DNF_DUPPROVIDER: DWORD = 0x00001000;
+pub const DNF_INF_IS_SIGNED: DWORD = 0x00002000;
+pub const DNF_OEM_F6_INF: DWORD = 0x00004000;
+pub const DNF_DUPDRIVERVER: DWORD = 0x00008000;
+pub const DNF_BASIC_DRIVER: DWORD = 0x00010000;
+pub const DNF_AUTHENTICODE_SIGNED: DWORD = 0x00020000;
+pub const DNF_INSTALLEDDRIVER: DWORD = 0x00040000;
+pub const DNF_ALWAYSEXCLUDEFROMLIST: DWORD = 0x00080000;
+pub const DNF_INBOX_DRIVER: DWORD = 0x00100000;
+pub const DNF_REQUESTADDITIONALSOFTWARE: DWORD = 0x00200000;
+pub const DNF_UNUSED_22: DWORD = 0x00400000;
+pub const DNF_UNUSED_23: DWORD = 0x00800000;
+pub const DNF_UNUSED_24: DWORD = 0x01000000;
+pub const DNF_UNUSED_25: DWORD = 0x02000000;
+pub const DNF_UNUSED_26: DWORD = 0x04000000;
+pub const DNF_UNUSED_27: DWORD = 0x08000000;
+pub const DNF_UNUSED_28: DWORD = 0x10000000;
+pub const DNF_UNUSED_29: DWORD = 0x20000000;
+pub const DNF_UNUSED_30: DWORD = 0x40000000;
+pub const DNF_UNUSED_31: DWORD = 0x80000000;
+pub const DRIVER_HARDWAREID_RANK: DWORD = 0x00000FFF;
+pub const DRIVER_HARDWAREID_MASK: DWORD = 0x80000FFF;
+pub const DRIVER_UNTRUSTED_RANK: DWORD = 0x80000000;
+pub const DRIVER_W9X_SUSPECT_RANK: DWORD = 0xC0000000;
+FN!{stdcall PSP_DETSIG_CMPPROC(
+ DeviceInfoSet: HDEVINFO,
+ NewDeviceData: PSP_DEVINFO_DATA,
+ ExistingDeviceData: PSP_DEVINFO_DATA,
+ CompareContext: PVOID,
+) -> DWORD}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct COINSTALLER_CONTEXT_DATA {
+ PostProcessing: BOOL,
+ InstallResult: DWORD,
+ PrivateData: PVOID,
+}}
+pub type PCOINSTALLER_CONTEXT_DATA = *mut COINSTALLER_CONTEXT_DATA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_CLASSIMAGELIST_DATA {
+ cbSize: DWORD,
+ ImageList: HIMAGELIST,
+ Reserved: ULONG_PTR,
+}}
+pub type PSP_CLASSIMAGELIST_DATA = *mut SP_CLASSIMAGELIST_DATA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_PROPSHEETPAGE_REQUEST {
+ cbSize: DWORD,
+ PageRequested: DWORD,
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+}}
+pub type PSP_PROPSHEETPAGE_REQUEST = *mut SP_PROPSHEETPAGE_REQUEST;
+pub const SPPSR_SELECT_DEVICE_RESOURCES: DWORD = 1;
+pub const SPPSR_ENUM_BASIC_DEVICE_PROPERTIES: DWORD = 2;
+pub const SPPSR_ENUM_ADV_DEVICE_PROPERTIES: DWORD = 3;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_BACKUP_QUEUE_PARAMS_V2_A {
+ cbSize: DWORD,
+ FullInfPath: [CHAR; MAX_PATH],
+ FilenameOffset: INT,
+ ReinstallInstance: [CHAR; MAX_PATH],
+}}
+pub type PSP_BACKUP_QUEUE_PARAMS_V2_A = *mut SP_BACKUP_QUEUE_PARAMS_V2_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_BACKUP_QUEUE_PARAMS_V2_W {
+ cbSize: DWORD,
+ FullInfPath: [WCHAR; MAX_PATH],
+ FilenameOffset: INT,
+ ReinstallInstance: [WCHAR; MAX_PATH],
+}}
+pub type PSP_BACKUP_QUEUE_PARAMS_V2_W = *mut SP_BACKUP_QUEUE_PARAMS_V2_W;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_BACKUP_QUEUE_PARAMS_V1_A {
+ cbSize: DWORD,
+ FullInfPath: [CHAR; MAX_PATH],
+ FilenameOffset: INT,
+}}
+pub type PSP_BACKUP_QUEUE_PARAMS_V1_A = *mut SP_BACKUP_QUEUE_PARAMS_V1_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_BACKUP_QUEUE_PARAMS_V1_W {
+ cbSize: DWORD,
+ FullInfPath: [WCHAR; MAX_PATH],
+ FilenameOffset: INT,
+}}
+pub type PSP_BACKUP_QUEUE_PARAMS_V1_W = *mut SP_BACKUP_QUEUE_PARAMS_V1_W;
+pub type SP_BACKUP_QUEUE_PARAMS_A = SP_BACKUP_QUEUE_PARAMS_V2_A;
+pub type PSP_BACKUP_QUEUE_PARAMS_A = PSP_BACKUP_QUEUE_PARAMS_V2_A;
+pub type SP_BACKUP_QUEUE_PARAMS_W = SP_BACKUP_QUEUE_PARAMS_V2_W;
+pub type PSP_BACKUP_QUEUE_PARAMS_W = PSP_BACKUP_QUEUE_PARAMS_V2_W;
+pub const ERROR_EXPECTED_SECTION_NAME: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0;
+pub const ERROR_BAD_SECTION_NAME_LINE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 1;
+pub const ERROR_SECTION_NAME_TOO_LONG: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 2;
+pub const ERROR_GENERAL_SYNTAX: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 3;
+pub const ERROR_WRONG_INF_STYLE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x100;
+pub const ERROR_SECTION_NOT_FOUND: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x101;
+pub const ERROR_LINE_NOT_FOUND: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x102;
+pub const ERROR_NO_BACKUP: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x103;
+pub const ERROR_NO_ASSOCIATED_CLASS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x200;
+pub const ERROR_CLASS_MISMATCH: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x201;
+pub const ERROR_DUPLICATE_FOUND: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x202;
+pub const ERROR_NO_DRIVER_SELECTED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x203;
+pub const ERROR_KEY_DOES_NOT_EXIST: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x204;
+pub const ERROR_INVALID_DEVINST_NAME: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x205;
+pub const ERROR_INVALID_CLASS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x206;
+pub const ERROR_DEVINST_ALREADY_EXISTS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x207;
+pub const ERROR_DEVINFO_NOT_REGISTERED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x208;
+pub const ERROR_INVALID_REG_PROPERTY: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x209;
+pub const ERROR_NO_INF: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20A;
+pub const ERROR_NO_SUCH_DEVINST: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20B;
+pub const ERROR_CANT_LOAD_CLASS_ICON: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x20C;
+pub const ERROR_INVALID_CLASS_INSTALLER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x20D;
+pub const ERROR_DI_DO_DEFAULT: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20E;
+pub const ERROR_DI_NOFILECOPY: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20F;
+pub const ERROR_INVALID_HWPROFILE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x210;
+pub const ERROR_NO_DEVICE_SELECTED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x211;
+pub const ERROR_DEVINFO_LIST_LOCKED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x212;
+pub const ERROR_DEVINFO_DATA_LOCKED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x213;
+pub const ERROR_DI_BAD_PATH: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x214;
+pub const ERROR_NO_CLASSINSTALL_PARAMS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x215;
+pub const ERROR_FILEQUEUE_LOCKED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x216;
+pub const ERROR_BAD_SERVICE_INSTALLSECT: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x217;
+pub const ERROR_NO_CLASS_DRIVER_LIST: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x218;
+pub const ERROR_NO_ASSOCIATED_SERVICE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x219;
+pub const ERROR_NO_DEFAULT_DEVICE_INTERFACE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x21A;
+pub const ERROR_DEVICE_INTERFACE_ACTIVE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x21B;
+pub const ERROR_DEVICE_INTERFACE_REMOVED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x21C;
+pub const ERROR_BAD_INTERFACE_INSTALLSECT: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x21D;
+pub const ERROR_NO_SUCH_INTERFACE_CLASS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x21E;
+pub const ERROR_INVALID_REFERENCE_STRING: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x21F;
+pub const ERROR_INVALID_MACHINENAME: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x220;
+pub const ERROR_REMOTE_COMM_FAILURE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x221;
+pub const ERROR_MACHINE_UNAVAILABLE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x222;
+pub const ERROR_NO_CONFIGMGR_SERVICES: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x223;
+pub const ERROR_INVALID_PROPPAGE_PROVIDER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x224;
+pub const ERROR_NO_SUCH_DEVICE_INTERFACE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x225;
+pub const ERROR_DI_POSTPROCESSING_REQUIRED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x226;
+pub const ERROR_INVALID_COINSTALLER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x227;
+pub const ERROR_NO_COMPAT_DRIVERS: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x228;
+pub const ERROR_NO_DEVICE_ICON: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x229;
+pub const ERROR_INVALID_INF_LOGCONFIG: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x22A;
+pub const ERROR_DI_DONT_INSTALL: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22B;
+pub const ERROR_INVALID_FILTER_DRIVER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x22C;
+pub const ERROR_NON_WINDOWS_NT_DRIVER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x22D;
+pub const ERROR_NON_WINDOWS_DRIVER: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22E;
+pub const ERROR_NO_CATALOG_FOR_OEM_INF: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x22F;
+pub const ERROR_DEVINSTALL_QUEUE_NONNATIVE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x230;
+pub const ERROR_NOT_DISABLEABLE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x231;
+pub const ERROR_CANT_REMOVE_DEVINST: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x232;
+pub const ERROR_INVALID_TARGET: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x233;
+pub const ERROR_DRIVER_NONNATIVE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x234;
+pub const ERROR_IN_WOW64: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x235;
+pub const ERROR_SET_SYSTEM_RESTORE_POINT: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x236;
+pub const ERROR_SCE_DISABLED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x238;
+pub const ERROR_UNKNOWN_EXCEPTION: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x239;
+pub const ERROR_PNP_REGISTRY_ERROR: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x23A;
+pub const ERROR_REMOTE_REQUEST_UNSUPPORTED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x23B;
+pub const ERROR_NOT_AN_INSTALLED_OEM_INF: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x23C;
+pub const ERROR_INF_IN_USE_BY_DEVICES: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x23D;
+pub const ERROR_DI_FUNCTION_OBSOLETE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x23E;
+pub const ERROR_NO_AUTHENTICODE_CATALOG: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x23F;
+pub const ERROR_AUTHENTICODE_DISALLOWED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x240;
+pub const ERROR_AUTHENTICODE_TRUSTED_PUBLISHER: DWORD = APPLICATION_ERROR_MASK
+ | ERROR_SEVERITY_ERROR | 0x241;
+pub const ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED: DWORD = APPLICATION_ERROR_MASK
+ | ERROR_SEVERITY_ERROR | 0x242;
+pub const ERROR_AUTHENTICODE_PUBLISHER_NOT_TRUSTED: DWORD = APPLICATION_ERROR_MASK
+ | ERROR_SEVERITY_ERROR | 0x243;
+pub const ERROR_SIGNATURE_OSATTRIBUTE_MISMATCH: DWORD = APPLICATION_ERROR_MASK
+ | ERROR_SEVERITY_ERROR | 0x244;
+pub const ERROR_ONLY_VALIDATE_VIA_AUTHENTICODE: DWORD = APPLICATION_ERROR_MASK
+ | ERROR_SEVERITY_ERROR | 0x245;
+pub const ERROR_DEVICE_INSTALLER_NOT_READY: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x246;
+pub const ERROR_DRIVER_STORE_ADD_FAILED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x247;
+pub const ERROR_DEVICE_INSTALL_BLOCKED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x248;
+pub const ERROR_DRIVER_INSTALL_BLOCKED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x249;
+pub const ERROR_WRONG_INF_TYPE: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x24A;
+pub const ERROR_FILE_HASH_NOT_IN_CATALOG: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x24B;
+pub const ERROR_DRIVER_STORE_DELETE_FAILED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x24C;
+pub const ERROR_UNRECOVERABLE_STACK_OVERFLOW: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x300;
+pub const EXCEPTION_SPAPI_UNRECOVERABLE_STACK_OVERFLOW: DWORD = ERROR_UNRECOVERABLE_STACK_OVERFLOW;
+pub const ERROR_NO_DEFAULT_INTERFACE_DEVICE: DWORD = ERROR_NO_DEFAULT_DEVICE_INTERFACE;
+pub const ERROR_INTERFACE_DEVICE_ACTIVE: DWORD = ERROR_DEVICE_INTERFACE_ACTIVE;
+pub const ERROR_INTERFACE_DEVICE_REMOVED: DWORD = ERROR_DEVICE_INTERFACE_REMOVED;
+pub const ERROR_NO_SUCH_INTERFACE_DEVICE: DWORD = ERROR_NO_SUCH_DEVICE_INTERFACE;
+pub const ERROR_NOT_INSTALLED: DWORD = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR
+ | 0x1000;
+extern "system" {
+ pub fn SetupGetInfInformationA(
+ InfSpec: LPCVOID,
+ SearchControl: DWORD,
+ ReturnBuffer: PSP_INF_INFORMATION,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupGetInfInformationW(
+ InfSpec: LPCVOID,
+ SearchControl: DWORD,
+ ReturnBuffer: PSP_INF_INFORMATION,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+}
+pub const INFINFO_INF_SPEC_IS_HINF: DWORD = 1;
+pub const INFINFO_INF_NAME_IS_ABSOLUTE: DWORD = 2;
+pub const INFINFO_DEFAULT_SEARCH: DWORD = 3;
+pub const INFINFO_REVERSE_DEFAULT_SEARCH: DWORD = 4;
+pub const INFINFO_INF_PATH_LIST_SEARCH: DWORD = 5;
+extern "system" {
+ pub fn SetupQueryInfFileInformationA(
+ InfInformation: PSP_INF_INFORMATION,
+ InfIndex: UINT,
+ ReturnBuffer: PSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupQueryInfFileInformationW(
+ InfInformation: PSP_INF_INFORMATION,
+ InfIndex: UINT,
+ ReturnBuffer: PWSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupQueryInfOriginalFileInformationA(
+ InfInformation: PSP_INF_INFORMATION,
+ InfIndex: UINT,
+ AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
+ OriginalFileInfo: PSP_ORIGINAL_FILE_INFO_A,
+ ) -> BOOL;
+ pub fn SetupQueryInfOriginalFileInformationW(
+ InfInformation: PSP_INF_INFORMATION,
+ InfIndex: UINT,
+ AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
+ OriginalFileInfo: PSP_ORIGINAL_FILE_INFO_W,
+ ) -> BOOL;
+ pub fn SetupQueryInfVersionInformationA(
+ InfInformation: PSP_INF_INFORMATION,
+ InfIndex: UINT,
+ Key: PCSTR,
+ ReturnBuffer: PSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupQueryInfVersionInformationW(
+ InfInformation: PSP_INF_INFORMATION,
+ InfIndex: UINT,
+ Key: PCWSTR,
+ ReturnBuffer: PWSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupGetInfDriverStoreLocationA(
+ FileName: PCSTR,
+ AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
+ LocaleName: PCSTR,
+ ReturnBuffer: PSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupGetInfDriverStoreLocationW(
+ FileName: PCWSTR,
+ AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
+ LocaleName: PCWSTR,
+ ReturnBuffer: PWSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupGetInfPublishedNameA(
+ DriverStoreLocation: PCSTR,
+ ReturnBuffer: PSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupGetInfPublishedNameW(
+ DriverStoreLocation: PCWSTR,
+ ReturnBuffer: PWSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupGetInfFileListA(
+ DirectoryPath: PCSTR,
+ InfStyle: DWORD,
+ ReturnBuffer: PSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupGetInfFileListW(
+ DirectoryPath: PCWSTR,
+ InfStyle: DWORD,
+ ReturnBuffer: PWSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupOpenInfFileW(
+ FileName: PCWSTR,
+ InfClass: PCWSTR,
+ InfStyle: DWORD,
+ ErrorLine: PUINT,
+ ) -> HINF;
+ pub fn SetupOpenInfFileA(
+ FileName: PCSTR,
+ InfClass: PCSTR,
+ InfStyle: DWORD,
+ ErrorLine: PUINT,
+ ) -> HINF;
+ pub fn SetupOpenMasterInf() -> HINF;
+ pub fn SetupOpenAppendInfFileW(
+ FileName: PCWSTR,
+ InfHandle: HINF,
+ ErrorLine: PUINT,
+ ) -> BOOL;
+ pub fn SetupOpenAppendInfFileA(
+ FileName: PCSTR,
+ InfHandle: HINF,
+ ErrorLine: PUINT,
+ ) -> BOOL;
+ pub fn SetupCloseInfFile(
+ InfHandle: HINF,
+ ) -> ();
+ pub fn SetupFindFirstLineA(
+ InfHandle: HINF,
+ Section: PCSTR,
+ Key: PCSTR,
+ Context: PINFCONTEXT,
+ ) -> BOOL;
+ pub fn SetupFindFirstLineW(
+ InfHandle: HINF,
+ Section: PCWSTR,
+ Key: PCWSTR,
+ Context: PINFCONTEXT,
+ ) -> BOOL;
+ pub fn SetupFindNextLine(
+ ContextIn: PINFCONTEXT,
+ ContextOut: PINFCONTEXT,
+ ) -> BOOL;
+ pub fn SetupFindNextMatchLineA(
+ ContextIn: PINFCONTEXT,
+ Key: PCSTR,
+ ContextOut: PINFCONTEXT,
+ ) -> BOOL;
+ pub fn SetupFindNextMatchLineW(
+ ContextIn: PINFCONTEXT,
+ Key: PCWSTR,
+ ContextOut: PINFCONTEXT,
+ ) -> BOOL;
+ pub fn SetupGetLineByIndexA(
+ InfHandle: HINF,
+ Section: PCSTR,
+ Index: DWORD,
+ Context: PINFCONTEXT,
+ ) -> BOOL;
+ pub fn SetupGetLineByIndexW(
+ InfHandle: HINF,
+ Section: PCWSTR,
+ Index: DWORD,
+ Context: PINFCONTEXT,
+ ) -> BOOL;
+ pub fn SetupGetLineCountA(
+ InfHandle: HINF,
+ Section: PCSTR,
+ ) -> LONG;
+ pub fn SetupGetLineCountW(
+ InfHandle: HINF,
+ Section: PCWSTR,
+ ) -> LONG;
+ pub fn SetupGetLineTextA(
+ Context: PINFCONTEXT,
+ InfHandle: HINF,
+ Section: PCSTR,
+ Key: PCSTR,
+ ReturnBuffer: PSTR,
+ ReturnBufferSize: DWORD,
+ ReturnBufferSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupGetLineTextW(
+ Context: PINFCONTEXT,
+ InfHandle: HINF,
+ Section: PCWSTR,
+ Key: PCWSTR,
+ ReturnBuffer: PWSTR,
+ ReturnBufferSize: DWORD,
+ ReturnBufferSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupGetFieldCount(
+ Context: PINFCONTEXT,
+ ) -> DWORD;
+ pub fn SetupGetStringFieldA(
+ Context: PINFCONTEXT,
+ FieldIndex: DWORD,
+ ReturnBuffer: PSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupGetStringFieldW(
+ Context: PINFCONTEXT,
+ FieldIndex: DWORD,
+ ReturnBuffer: PWSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupGetIntField(
+ Context: PINFCONTEXT,
+ FieldIndex: DWORD,
+ IntegerValue: PINT,
+ ) -> BOOL;
+ pub fn SetupGetMultiSzFieldA(
+ Context: PINFCONTEXT,
+ FieldIndex: DWORD,
+ ReturnBuffer: PSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: LPDWORD,
+ ) -> BOOL;
+ pub fn SetupGetMultiSzFieldW(
+ Context: PINFCONTEXT,
+ FieldIndex: DWORD,
+ ReturnBuffer: PWSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: LPDWORD,
+ ) -> BOOL;
+ pub fn SetupGetBinaryField(
+ Context: PINFCONTEXT,
+ FieldIndex: DWORD,
+ ReturnBuffer: PBYTE,
+ ReturnBufferSize: DWORD,
+ RequiredSize: LPDWORD,
+ ) -> BOOL;
+ pub fn SetupGetFileCompressionInfoA(
+ SourceFileName: PCSTR,
+ ActualSourceFileName: *mut PSTR,
+ SourceFileSize: PDWORD,
+ TargetFileSize: PDWORD,
+ CompressionType: PUINT,
+ ) -> DWORD;
+ pub fn SetupGetFileCompressionInfoW(
+ SourceFileName: PCWSTR,
+ ActualSourceFileName: *mut PWSTR,
+ SourceFileSize: PDWORD,
+ TargetFileSize: PDWORD,
+ CompressionType: PUINT,
+ ) -> DWORD;
+ pub fn SetupGetFileCompressionInfoExA(
+ SourceFileName: PCSTR,
+ ActualSourceFileNameBuffer: PSTR,
+ ActualSourceFileNameBufferLen: DWORD,
+ RequiredBufferLen: PDWORD,
+ SourceFileSize: PDWORD,
+ TargetFileSize: PDWORD,
+ CompressionType: PUINT,
+ ) -> BOOL;
+ pub fn SetupGetFileCompressionInfoExW(
+ SourceFileName: PCWSTR,
+ ActualSourceFileNameBuffer: PWSTR,
+ ActualSourceFileNameBufferLen: DWORD,
+ RequiredBufferLen: PDWORD,
+ SourceFileSize: PDWORD,
+ TargetFileSize: PDWORD,
+ CompressionType: PUINT,
+ ) -> BOOL;
+}
+pub const FILE_COMPRESSION_NONE: UINT = 0;
+pub const FILE_COMPRESSION_WINLZA: UINT = 1;
+pub const FILE_COMPRESSION_MSZIP: UINT = 2;
+pub const FILE_COMPRESSION_NTCAB: UINT = 3;
+extern "system" {
+ pub fn SetupDecompressOrCopyFileA(
+ SourceFileName: PCSTR,
+ TargetFileName: PCSTR,
+ CompressionType: PUINT,
+ ) -> DWORD;
+ pub fn SetupDecompressOrCopyFileW(
+ SourceFileName: PCWSTR,
+ TargetFileName: PCWSTR,
+ CompressionType: PUINT,
+ ) -> DWORD;
+ pub fn SetupGetSourceFileLocationA(
+ InfHandle: HINF,
+ InfContext: PINFCONTEXT,
+ FileName: PCSTR,
+ SourceId: PUINT,
+ ReturnBuffer: PSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupGetSourceFileLocationW(
+ InfHandle: HINF,
+ InfContext: PINFCONTEXT,
+ FileName: PCWSTR,
+ SourceId: PUINT,
+ ReturnBuffer: PWSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupGetSourceFileSizeA(
+ InfHandle: HINF,
+ InfContext: PINFCONTEXT,
+ FileName: PCSTR,
+ Section: PCSTR,
+ FileSize: PDWORD,
+ RoundingFactor: UINT,
+ ) -> BOOL;
+ pub fn SetupGetSourceFileSizeW(
+ InfHandle: HINF,
+ InfContext: PINFCONTEXT,
+ FileName: PCWSTR,
+ Section: PCWSTR,
+ FileSize: PDWORD,
+ RoundingFactor: UINT,
+ ) -> BOOL;
+ pub fn SetupGetTargetPathA(
+ InfHandle: HINF,
+ InfContext: PINFCONTEXT,
+ Section: PCSTR,
+ ReturnBuffer: PSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupGetTargetPathW(
+ InfHandle: HINF,
+ InfContext: PINFCONTEXT,
+ Section: PCWSTR,
+ ReturnBuffer: PWSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+}
+pub const SRCLIST_TEMPORARY: DWORD = 0x00000001;
+pub const SRCLIST_NOBROWSE: DWORD = 0x00000002;
+pub const SRCLIST_SYSTEM: DWORD = 0x00000010;
+pub const SRCLIST_USER: DWORD = 0x00000020;
+pub const SRCLIST_SYSIFADMIN: DWORD = 0x00000040;
+pub const SRCLIST_SUBDIRS: DWORD = 0x00000100;
+pub const SRCLIST_APPEND: DWORD = 0x00000200;
+pub const SRCLIST_NOSTRIPPLATFORM: DWORD = 0x00000400;
+extern "system" {
+ pub fn SetupSetSourceListA(
+ Flags: DWORD,
+ SourceList: *mut PCSTR,
+ SourceCount: UINT,
+ ) -> BOOL;
+ pub fn SetupSetSourceListW(
+ Flags: DWORD,
+ SourceList: *mut PCWSTR,
+ SourceCount: UINT,
+ ) -> BOOL;
+ pub fn SetupCancelTemporarySourceList() -> BOOL;
+ pub fn SetupAddToSourceListA(
+ Flags: DWORD,
+ Source: PCSTR,
+ ) -> BOOL;
+ pub fn SetupAddToSourceListW(
+ Flags: DWORD,
+ Source: PCWSTR,
+ ) -> BOOL;
+ pub fn SetupRemoveFromSourceListA(
+ Flags: DWORD,
+ Source: PCSTR,
+ ) -> BOOL;
+ pub fn SetupRemoveFromSourceListW(
+ Flags: DWORD,
+ Source: PCWSTR,
+ ) -> BOOL;
+ pub fn SetupQuerySourceListA(
+ Flags: DWORD,
+ List: *mut *mut PCSTR,
+ Count: PUINT,
+ ) -> BOOL;
+ pub fn SetupQuerySourceListW(
+ Flags: DWORD,
+ List: *mut *mut PCWSTR,
+ Count: PUINT,
+ ) -> BOOL;
+ pub fn SetupFreeSourceListA(
+ List: *mut *mut PCSTR,
+ Count: UINT,
+ ) -> BOOL;
+ pub fn SetupFreeSourceListW(
+ List: *mut *mut PCWSTR,
+ Count: UINT,
+ ) -> BOOL;
+ pub fn SetupPromptForDiskA(
+ hwndParent: HWND,
+ DialogTitle: PCSTR,
+ DiskName: PCSTR,
+ PathToSource: PCSTR,
+ FileSought: PCSTR,
+ TagFile: PCSTR,
+ DiskPromptStyle: DWORD,
+ PathBuffer: PSTR,
+ PathBufferSize: DWORD,
+ PathRequiredSize: PDWORD,
+ ) -> UINT;
+ pub fn SetupPromptForDiskW(
+ hwndParent: HWND,
+ DialogTitle: PCWSTR,
+ DiskName: PCWSTR,
+ PathToSource: PCWSTR,
+ FileSought: PCWSTR,
+ TagFile: PCWSTR,
+ DiskPromptStyle: DWORD,
+ PathBuffer: PWSTR,
+ PathBufferSize: DWORD,
+ PathRequiredSize: PDWORD,
+ ) -> UINT;
+ pub fn SetupCopyErrorA(
+ hwndParent: HWND,
+ DialogTitle: PCSTR,
+ DiskName: PCSTR,
+ PathToSource: PCSTR,
+ SourceFile: PCSTR,
+ TargetPathFile: PCSTR,
+ Win32ErrorCode: UINT,
+ Style: DWORD,
+ PathBuffer: PSTR,
+ PathBufferSize: DWORD,
+ PathRequiredSize: PDWORD,
+ ) -> UINT;
+ pub fn SetupCopyErrorW(
+ hwndParent: HWND,
+ DialogTitle: PCWSTR,
+ DiskName: PCWSTR,
+ PathToSource: PCWSTR,
+ SourceFile: PCWSTR,
+ TargetPathFile: PCWSTR,
+ Win32ErrorCode: UINT,
+ Style: DWORD,
+ PathBuffer: PWSTR,
+ PathBufferSize: DWORD,
+ PathRequiredSize: PDWORD,
+ ) -> UINT;
+ pub fn SetupRenameErrorA(
+ hwndParent: HWND,
+ DialogTitle: PCSTR,
+ SourceFile: PCSTR,
+ TargetFile: PCSTR,
+ Win32ErrorCode: UINT,
+ Style: DWORD,
+ ) -> UINT;
+ pub fn SetupRenameErrorW(
+ hwndParent: HWND,
+ DialogTitle: PCWSTR,
+ SourceFile: PCWSTR,
+ TargetFile: PCWSTR,
+ Win32ErrorCode: UINT,
+ Style: DWORD,
+ ) -> UINT;
+ pub fn SetupDeleteErrorA(
+ hwndParent: HWND,
+ DialogTitle: PCSTR,
+ File: PCSTR,
+ Win32ErrorCode: UINT,
+ Style: DWORD,
+ ) -> UINT;
+ pub fn SetupDeleteErrorW(
+ hwndParent: HWND,
+ DialogTitle: PCWSTR,
+ File: PCWSTR,
+ Win32ErrorCode: UINT,
+ Style: DWORD,
+ ) -> UINT;
+ pub fn SetupBackupErrorA(
+ hwndParent: HWND,
+ DialogTitle: PCSTR,
+ SourceFile: PCSTR,
+ TargetFile: PCSTR,
+ Win32ErrorCode: UINT,
+ Style: DWORD,
+ ) -> UINT;
+ pub fn SetupBackupErrorW(
+ hwndParent: HWND,
+ DialogTitle: PCWSTR,
+ SourceFile: PCWSTR,
+ TargetFile: PCWSTR,
+ Win32ErrorCode: UINT,
+ Style: DWORD,
+ ) -> UINT;
+}
+pub const IDF_NOBROWSE: DWORD = 0x00000001;
+pub const IDF_NOSKIP: DWORD = 0x00000002;
+pub const IDF_NODETAILS: DWORD = 0x00000004;
+pub const IDF_NOCOMPRESSED: DWORD = 0x00000008;
+pub const IDF_CHECKFIRST: DWORD = 0x00000100;
+pub const IDF_NOBEEP: DWORD = 0x00000200;
+pub const IDF_NOFOREGROUND: DWORD = 0x00000400;
+pub const IDF_WARNIFSKIP: DWORD = 0x00000800;
+pub const IDF_NOREMOVABLEMEDIAPROMPT: DWORD = 0x00001000;
+pub const IDF_USEDISKNAMEASPROMPT: DWORD = 0x00002000;
+pub const IDF_OEMDISK: DWORD = 0x80000000;
+pub const DPROMPT_SUCCESS: UINT = 0;
+pub const DPROMPT_CANCEL: UINT = 1;
+pub const DPROMPT_SKIPFILE: UINT = 2;
+pub const DPROMPT_BUFFERTOOSMALL: UINT = 3;
+pub const DPROMPT_OUTOFMEMORY: UINT = 4;
+extern "system" {
+ pub fn SetupSetDirectoryIdA(
+ InfHandle: HINF,
+ Id: DWORD,
+ Directory: PCSTR,
+ ) -> BOOL;
+ pub fn SetupSetDirectoryIdW(
+ InfHandle: HINF,
+ Id: DWORD,
+ Directory: PCWSTR,
+ ) -> BOOL;
+ pub fn SetupSetDirectoryIdExA(
+ InfHandle: HINF,
+ Id: DWORD,
+ Directory: PCSTR,
+ Flags: DWORD,
+ Reserved1: DWORD,
+ Reserved2: PVOID,
+ ) -> BOOL;
+ pub fn SetupSetDirectoryIdExW(
+ InfHandle: HINF,
+ Id: DWORD,
+ Directory: PCWSTR,
+ Flags: DWORD,
+ Reserved1: DWORD,
+ Reserved2: PVOID,
+ ) -> BOOL;
+}
+pub const SETDIRID_NOT_FULL_PATH: DWORD = 0x00000001;
+extern "system" {
+ pub fn SetupGetSourceInfoA(
+ InfHandle: HINF,
+ SourceId: UINT,
+ InfoDesired: UINT,
+ ReturnBuffer: PSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupGetSourceInfoW(
+ InfHandle: HINF,
+ SourceId: UINT,
+ InfoDesired: UINT,
+ ReturnBuffer: PWSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+}
+pub const SRCINFO_PATH: UINT = 1;
+pub const SRCINFO_TAGFILE: UINT = 2;
+pub const SRCINFO_DESCRIPTION: UINT = 3;
+pub const SRCINFO_FLAGS: UINT = 4;
+pub const SRCINFO_TAGFILE2: UINT = 4;
+pub const SRC_FLAGS_CABFILE: UINT = 0x0010;
+extern "system" {
+ pub fn SetupInstallFileA(
+ InfHandle: HINF,
+ InfContext: PINFCONTEXT,
+ SourceFile: PCSTR,
+ SourcePathRoot: PCSTR,
+ DestinationName: PCSTR,
+ CopyStyle: DWORD,
+ CopyMsgHandler: PSP_FILE_CALLBACK_A,
+ Context: PVOID,
+ ) -> BOOL;
+ pub fn SetupInstallFileW(
+ InfHandle: HINF,
+ InfContext: PINFCONTEXT,
+ SourceFile: PCWSTR,
+ SourcePathRoot: PCWSTR,
+ DestinationName: PCWSTR,
+ CopyStyle: DWORD,
+ CopyMsgHandler: PSP_FILE_CALLBACK_W,
+ Context: PVOID,
+ ) -> BOOL;
+ pub fn SetupInstallFileExA(
+ InfHandle: HINF,
+ InfContext: PINFCONTEXT,
+ SourceFile: PCSTR,
+ SourcePathRoot: PCSTR,
+ DestinationName: PCSTR,
+ CopyStyle: DWORD,
+ CopyMsgHandler: PSP_FILE_CALLBACK_A,
+ Context: PVOID,
+ FileWasInUse: PBOOL,
+ ) -> BOOL;
+ pub fn SetupInstallFileExW(
+ InfHandle: HINF,
+ InfContext: PINFCONTEXT,
+ SourceFile: PCWSTR,
+ SourcePathRoot: PCWSTR,
+ DestinationName: PCWSTR,
+ CopyStyle: DWORD,
+ CopyMsgHandler: PSP_FILE_CALLBACK_W,
+ Context: PVOID,
+ FileWasInUse: PBOOL,
+ ) -> BOOL;
+}
+pub const SP_COPY_DELETESOURCE: DWORD = 0x0000001;
+pub const SP_COPY_REPLACEONLY: DWORD = 0x0000002;
+pub const SP_COPY_NEWER: DWORD = 0x0000004;
+pub const SP_COPY_NEWER_OR_SAME: DWORD = SP_COPY_NEWER;
+pub const SP_COPY_NOOVERWRITE: DWORD = 0x0000008;
+pub const SP_COPY_NODECOMP: DWORD = 0x0000010;
+pub const SP_COPY_LANGUAGEAWARE: DWORD = 0x0000020;
+pub const SP_COPY_SOURCE_ABSOLUTE: DWORD = 0x0000040;
+pub const SP_COPY_SOURCEPATH_ABSOLUTE: DWORD = 0x0000080;
+pub const SP_COPY_IN_USE_NEEDS_REBOOT: DWORD = 0x0000100;
+pub const SP_COPY_FORCE_IN_USE: DWORD = 0x0000200;
+pub const SP_COPY_NOSKIP: DWORD = 0x0000400;
+pub const SP_FLAG_CABINETCONTINUATION: DWORD = 0x0000800;
+pub const SP_COPY_FORCE_NOOVERWRITE: DWORD = 0x0001000;
+pub const SP_COPY_FORCE_NEWER: DWORD = 0x0002000;
+pub const SP_COPY_WARNIFSKIP: DWORD = 0x0004000;
+pub const SP_COPY_NOBROWSE: DWORD = 0x0008000;
+pub const SP_COPY_NEWER_ONLY: DWORD = 0x0010000;
+pub const SP_COPY_RESERVED: DWORD = 0x0020000;
+pub const SP_COPY_OEMINF_CATALOG_ONLY: DWORD = 0x0040000;
+pub const SP_COPY_REPLACE_BOOT_FILE: DWORD = 0x0080000;
+pub const SP_COPY_NOPRUNE: DWORD = 0x0100000;
+pub const SP_COPY_OEM_F6_INF: DWORD = 0x0200000;
+pub const SP_COPY_ALREADYDECOMP: DWORD = 0x0400000;
+pub const SP_COPY_WINDOWS_SIGNED: DWORD = 0x1000000;
+pub const SP_COPY_PNPLOCKED: DWORD = 0x2000000;
+pub const SP_COPY_IN_USE_TRY_RENAME: DWORD = 0x4000000;
+pub const SP_COPY_INBOX_INF: DWORD = 0x8000000;
+pub const SP_COPY_HARDLINK: DWORD = 0x10000000;
+pub const SP_BACKUP_BACKUPPASS: DWORD = 0x00000001;
+pub const SP_BACKUP_DEMANDPASS: DWORD = 0x00000002;
+pub const SP_BACKUP_SPECIAL: DWORD = 0x00000004;
+pub const SP_BACKUP_BOOTFILE: DWORD = 0x00000008;
+extern "system" {
+ pub fn SetupOpenFileQueue() -> HSPFILEQ;
+ pub fn SetupCloseFileQueue(
+ QueueHandle: HSPFILEQ,
+ ) -> BOOL;
+ pub fn SetupSetFileQueueAlternatePlatformA(
+ QueueHandle: HSPFILEQ,
+ AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
+ AlternateDefaultCatalogFile: PCSTR,
+ ) -> BOOL;
+ pub fn SetupSetFileQueueAlternatePlatformW(
+ QueueHandle: HSPFILEQ,
+ AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
+ AlternateDefaultCatalogFile: PCWSTR,
+ ) -> BOOL;
+ pub fn SetupSetPlatformPathOverrideA(
+ Override: PCSTR,
+ ) -> BOOL;
+ pub fn SetupSetPlatformPathOverrideW(
+ Override: PCWSTR,
+ ) -> BOOL;
+ pub fn SetupQueueCopyA(
+ QueueHandle: HSPFILEQ,
+ SourceRootPath: PCSTR,
+ SourcePath: PCSTR,
+ SourceFilename: PCSTR,
+ SourceDescription: PCSTR,
+ SourceTagfile: PCSTR,
+ TargetDirectory: PCSTR,
+ TargetFilename: PCSTR,
+ CopyStyle: DWORD,
+ ) -> BOOL;
+ pub fn SetupQueueCopyW(
+ QueueHandle: HSPFILEQ,
+ SourceRootPath: PCWSTR,
+ SourcePath: PCWSTR,
+ SourceFilename: PCWSTR,
+ SourceDescription: PCWSTR,
+ SourceTagfile: PCWSTR,
+ TargetDirectory: PCWSTR,
+ TargetFilename: PCWSTR,
+ CopyStyle: DWORD,
+ ) -> BOOL;
+ pub fn SetupQueueCopyIndirectA(
+ CopyParams: PSP_FILE_COPY_PARAMS_A,
+ ) -> BOOL;
+ pub fn SetupQueueCopyIndirectW(
+ CopyParams: PSP_FILE_COPY_PARAMS_W,
+ ) -> BOOL;
+ pub fn SetupQueueDefaultCopyA(
+ QueueHandle: HSPFILEQ,
+ InfHandle: HINF,
+ SourceRootPath: PCSTR,
+ SourceFilename: PCSTR,
+ TargetFilename: PCSTR,
+ CopyStyle: DWORD,
+ ) -> BOOL;
+ pub fn SetupQueueDefaultCopyW(
+ QueueHandle: HSPFILEQ,
+ InfHandle: HINF,
+ SourceRootPath: PCWSTR,
+ SourceFilename: PCWSTR,
+ TargetFilename: PCWSTR,
+ CopyStyle: DWORD,
+ ) -> BOOL;
+ pub fn SetupQueueCopySectionA(
+ QueueHandle: HSPFILEQ,
+ SourceRootPath: PCSTR,
+ InfHandle: HINF,
+ ListInfHandle: HINF,
+ Section: PCSTR,
+ CopyStyle: DWORD,
+ ) -> BOOL;
+ pub fn SetupQueueCopySectionW(
+ QueueHandle: HSPFILEQ,
+ SourceRootPath: PCWSTR,
+ InfHandle: HINF,
+ ListInfHandle: HINF,
+ Section: PCWSTR,
+ CopyStyle: DWORD,
+ ) -> BOOL;
+ pub fn SetupQueueDeleteA(
+ QueueHandle: HSPFILEQ,
+ PathPart1: PCSTR,
+ PathPart2: PCSTR,
+ ) -> BOOL;
+ pub fn SetupQueueDeleteW(
+ QueueHandle: HSPFILEQ,
+ PathPart1: PCWSTR,
+ PathPart2: PCWSTR,
+ ) -> BOOL;
+ pub fn SetupQueueDeleteSectionA(
+ QueueHandle: HSPFILEQ,
+ InfHandle: HINF,
+ ListInfHandle: HINF,
+ Section: PCSTR,
+ ) -> BOOL;
+ pub fn SetupQueueDeleteSectionW(
+ QueueHandle: HSPFILEQ,
+ InfHandle: HINF,
+ ListInfHandle: HINF,
+ Section: PCWSTR,
+ ) -> BOOL;
+ pub fn SetupQueueRenameA(
+ QueueHandle: HSPFILEQ,
+ SourcePath: PCSTR,
+ SourceFilename: PCSTR,
+ TargetPath: PCSTR,
+ TargetFilename: PCSTR,
+ ) -> BOOL;
+ pub fn SetupQueueRenameW(
+ QueueHandle: HSPFILEQ,
+ SourcePath: PCWSTR,
+ SourceFilename: PCWSTR,
+ TargetPath: PCWSTR,
+ TargetFilename: PCWSTR,
+ ) -> BOOL;
+ pub fn SetupQueueRenameSectionA(
+ QueueHandle: HSPFILEQ,
+ InfHandle: HINF,
+ ListInfHandle: HINF,
+ Section: PCSTR,
+ ) -> BOOL;
+ pub fn SetupQueueRenameSectionW(
+ QueueHandle: HSPFILEQ,
+ InfHandle: HINF,
+ ListInfHandle: HINF,
+ Section: PCWSTR,
+ ) -> BOOL;
+ pub fn SetupCommitFileQueueA(
+ Owner: HWND,
+ QueueHandle: HSPFILEQ,
+ MsgHandler: PSP_FILE_CALLBACK_A,
+ Context: PVOID,
+ ) -> BOOL;
+ pub fn SetupCommitFileQueueW(
+ Owner: HWND,
+ QueueHandle: HSPFILEQ,
+ MsgHandler: PSP_FILE_CALLBACK_W,
+ Context: PVOID,
+ ) -> BOOL;
+ pub fn SetupScanFileQueueA(
+ FileQueue: HSPFILEQ,
+ Flags: DWORD,
+ Window: HWND,
+ CallbackRoutine: PSP_FILE_CALLBACK_A,
+ CallbackContext: PVOID,
+ Result: PDWORD,
+ ) -> BOOL;
+ pub fn SetupScanFileQueueW(
+ FileQueue: HSPFILEQ,
+ Flags: DWORD,
+ Window: HWND,
+ CallbackRoutine: PSP_FILE_CALLBACK_W,
+ CallbackContext: PVOID,
+ Result: PDWORD,
+ ) -> BOOL;
+}
+pub const SPQ_SCAN_FILE_PRESENCE: DWORD = 0x00000001;
+pub const SPQ_SCAN_FILE_VALIDITY: DWORD = 0x00000002;
+pub const SPQ_SCAN_USE_CALLBACK: DWORD = 0x00000004;
+pub const SPQ_SCAN_USE_CALLBACKEX: DWORD = 0x00000008;
+pub const SPQ_SCAN_INFORM_USER: DWORD = 0x00000010;
+pub const SPQ_SCAN_PRUNE_COPY_QUEUE: DWORD = 0x00000020;
+pub const SPQ_SCAN_USE_CALLBACK_SIGNERINFO: DWORD = 0x00000040;
+pub const SPQ_SCAN_PRUNE_DELREN: DWORD = 0x00000080;
+pub const SPQ_SCAN_FILE_PRESENCE_WITHOUT_SOURCE: DWORD = 0x00000100;
+pub const SPQ_SCAN_FILE_COMPARISON: DWORD = 0x00000200;
+pub const SPQ_SCAN_ACTIVATE_DRP: DWORD = 0x00000400;
+pub const SPQ_DELAYED_COPY: DWORD = 0x00000001;
+extern "system" {
+ pub fn SetupGetFileQueueCount(
+ FileQueue: HSPFILEQ,
+ SubQueueFileOp: UINT,
+ NumOperations: PUINT,
+ ) -> BOOL;
+ pub fn SetupGetFileQueueFlags(
+ FileQueue: HSPFILEQ,
+ Flags: PDWORD,
+ ) -> BOOL;
+ pub fn SetupSetFileQueueFlags(
+ FileQueue: HSPFILEQ,
+ FlagMask: DWORD,
+ Flags: DWORD,
+ ) -> BOOL;
+}
+pub const SPQ_FLAG_BACKUP_AWARE: DWORD = 0x00000001;
+pub const SPQ_FLAG_ABORT_IF_UNSIGNED: DWORD = 0x00000002;
+pub const SPQ_FLAG_FILES_MODIFIED: DWORD = 0x00000004;
+pub const SPQ_FLAG_DO_SHUFFLEMOVE: DWORD = 0x00000008;
+pub const SPQ_FLAG_VALID: DWORD = 0x0000000F;
+pub const SPOST_NONE: DWORD = 0;
+pub const SPOST_PATH: DWORD = 1;
+pub const SPOST_URL: DWORD = 2;
+pub const SPOST_MAX: DWORD = 3;
+extern "system" {
+ pub fn SetupCopyOEMInfA(
+ SourceInfFileName: PCSTR,
+ OEMSourceMediaLocation: PCSTR,
+ OEMSourceMediaType: DWORD,
+ CopyStyle: DWORD,
+ DestinationInfFileName: PSTR,
+ DestinationInfFileNameSize: DWORD,
+ RequiredSize: PDWORD,
+ DestinationInfFileNameComponent: *mut PSTR,
+ ) -> BOOL;
+ pub fn SetupCopyOEMInfW(
+ SourceInfFileName: PCWSTR,
+ OEMSourceMediaLocation: PCWSTR,
+ OEMSourceMediaType: DWORD,
+ CopyStyle: DWORD,
+ DestinationInfFileName: PWSTR,
+ DestinationInfFileNameSize: DWORD,
+ RequiredSize: PDWORD,
+ DestinationInfFileNameComponent: *mut PWSTR,
+ ) -> BOOL;
+}
+pub const SUOI_FORCEDELETE: DWORD = 0x00000001;
+pub const SUOI_INTERNAL1: DWORD = 0x00000002;
+extern "system" {
+ pub fn SetupUninstallOEMInfA(
+ InfFileName: PCSTR,
+ Flags: DWORD,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupUninstallOEMInfW(
+ InfFileName: PCWSTR,
+ Flags: DWORD,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupUninstallNewlyCopiedInfs(
+ FileQueue: HSPFILEQ,
+ Flags: DWORD,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupCreateDiskSpaceListA(
+ Reserved1: PVOID,
+ Reserved2: DWORD,
+ Flags: UINT,
+ ) -> HDSKSPC;
+ pub fn SetupCreateDiskSpaceListW(
+ Reserved1: PVOID,
+ Reserved2: DWORD,
+ Flags: UINT,
+ ) -> HDSKSPC;
+}
+pub const SPDSL_IGNORE_DISK: UINT = 0x00000001;
+pub const SPDSL_DISALLOW_NEGATIVE_ADJUST: UINT = 0x00000002;
+extern "system" {
+ pub fn SetupDuplicateDiskSpaceListA(
+ DiskSpace: HDSKSPC,
+ Reserved1: PVOID,
+ Reserved2: DWORD,
+ Flags: UINT,
+ ) -> HDSKSPC;
+ pub fn SetupDuplicateDiskSpaceListW(
+ DiskSpace: HDSKSPC,
+ Reserved1: PVOID,
+ Reserved2: DWORD,
+ Flags: UINT,
+ ) -> HDSKSPC;
+ pub fn SetupDestroyDiskSpaceList(
+ DiskSpace: HDSKSPC,
+ ) -> BOOL;
+ pub fn SetupQueryDrivesInDiskSpaceListA(
+ DiskSpace: HDSKSPC,
+ ReturnBuffer: PSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupQueryDrivesInDiskSpaceListW(
+ DiskSpace: HDSKSPC,
+ ReturnBuffer: PWSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupQuerySpaceRequiredOnDriveA(
+ DiskSpace: HDSKSPC,
+ DriveSpec: PCSTR,
+ SpaceRequired: *mut LONGLONG,
+ Reserved1: PVOID,
+ Reserved2: UINT,
+ ) -> BOOL;
+ pub fn SetupQuerySpaceRequiredOnDriveW(
+ DiskSpace: HDSKSPC,
+ DriveSpec: PCWSTR,
+ SpaceRequired: *mut LONGLONG,
+ Reserved1: PVOID,
+ Reserved2: UINT,
+ ) -> BOOL;
+ pub fn SetupAdjustDiskSpaceListA(
+ DiskSpace: HDSKSPC,
+ DriveRoot: LPCSTR,
+ Amount: LONGLONG,
+ Reserved1: PVOID,
+ Reserved2: UINT,
+ ) -> BOOL;
+ pub fn SetupAdjustDiskSpaceListW(
+ DiskSpace: HDSKSPC,
+ DriveRoot: LPCWSTR,
+ Amount: LONGLONG,
+ Reserved1: PVOID,
+ Reserved2: UINT,
+ ) -> BOOL;
+ pub fn SetupAddToDiskSpaceListA(
+ DiskSpace: HDSKSPC,
+ TargetFilespec: PCSTR,
+ FileSize: LONGLONG,
+ Operation: UINT,
+ Reserved1: PVOID,
+ Reserved2: UINT,
+ ) -> BOOL;
+ pub fn SetupAddToDiskSpaceListW(
+ DiskSpace: HDSKSPC,
+ TargetFilespec: PCWSTR,
+ FileSize: LONGLONG,
+ Operation: UINT,
+ Reserved1: PVOID,
+ Reserved2: UINT,
+ ) -> BOOL;
+ pub fn SetupAddSectionToDiskSpaceListA(
+ DiskSpace: HDSKSPC,
+ InfHandle: HINF,
+ ListInfHandle: HINF,
+ SectionName: PCSTR,
+ Operation: UINT,
+ Reserved1: PVOID,
+ Reserved2: UINT,
+ ) -> BOOL;
+ pub fn SetupAddSectionToDiskSpaceListW(
+ DiskSpace: HDSKSPC,
+ InfHandle: HINF,
+ ListInfHandle: HINF,
+ SectionName: PCWSTR,
+ Operation: UINT,
+ Reserved1: PVOID,
+ Reserved2: UINT,
+ ) -> BOOL;
+ pub fn SetupAddInstallSectionToDiskSpaceListA(
+ DiskSpace: HDSKSPC,
+ InfHandle: HINF,
+ LayoutInfHandle: HINF,
+ SectionName: PCSTR,
+ Reserved1: PVOID,
+ Reserved2: UINT,
+ ) -> BOOL;
+ pub fn SetupAddInstallSectionToDiskSpaceListW(
+ DiskSpace: HDSKSPC,
+ InfHandle: HINF,
+ LayoutInfHandle: HINF,
+ SectionName: PCWSTR,
+ Reserved1: PVOID,
+ Reserved2: UINT,
+ ) -> BOOL;
+ pub fn SetupRemoveFromDiskSpaceListA(
+ DiskSpace: HDSKSPC,
+ TargetFilespec: PCSTR,
+ Operation: UINT,
+ Reserved1: PVOID,
+ Reserved2: UINT,
+ ) -> BOOL;
+ pub fn SetupRemoveFromDiskSpaceListW(
+ DiskSpace: HDSKSPC,
+ TargetFilespec: PCWSTR,
+ Operation: UINT,
+ Reserved1: PVOID,
+ Reserved2: UINT,
+ ) -> BOOL;
+ pub fn SetupRemoveSectionFromDiskSpaceListA(
+ DiskSpace: HDSKSPC,
+ InfHandle: HINF,
+ ListInfHandle: HINF,
+ SectionName: PCSTR,
+ Operation: UINT,
+ Reserved1: PVOID,
+ Reserved2: UINT,
+ ) -> BOOL;
+ pub fn SetupRemoveSectionFromDiskSpaceListW(
+ DiskSpace: HDSKSPC,
+ InfHandle: HINF,
+ ListInfHandle: HINF,
+ SectionName: PCWSTR,
+ Operation: UINT,
+ Reserved1: PVOID,
+ Reserved2: UINT,
+ ) -> BOOL;
+ pub fn SetupRemoveInstallSectionFromDiskSpaceListA(
+ DiskSpace: HDSKSPC,
+ InfHandle: HINF,
+ LayoutInfHandle: HINF,
+ SectionName: PCSTR,
+ Reserved1: PVOID,
+ Reserved2: UINT,
+ ) -> BOOL;
+ pub fn SetupRemoveInstallSectionFromDiskSpaceListW(
+ DiskSpace: HDSKSPC,
+ InfHandle: HINF,
+ LayoutInfHandle: HINF,
+ SectionName: PCWSTR,
+ Reserved1: PVOID,
+ Reserved2: UINT,
+ ) -> BOOL;
+ pub fn SetupIterateCabinetA(
+ CabinetFile: PCSTR,
+ Reserved: DWORD,
+ MsgHandler: PSP_FILE_CALLBACK_A,
+ Context: PVOID,
+ ) -> BOOL;
+ pub fn SetupIterateCabinetW(
+ CabinetFile: PCWSTR,
+ Reserved: DWORD,
+ MsgHandler: PSP_FILE_CALLBACK_W,
+ Context: PVOID,
+ ) -> BOOL;
+ pub fn SetupPromptReboot(
+ FileQueue: HSPFILEQ,
+ Owner: HWND,
+ ScanOnly: BOOL,
+ ) -> INT;
+}
+pub const SPFILEQ_FILE_IN_USE: INT = 0x00000001;
+pub const SPFILEQ_REBOOT_RECOMMENDED: INT = 0x00000002;
+pub const SPFILEQ_REBOOT_IN_PROGRESS: INT = 0x00000004;
+extern "system" {
+ pub fn SetupInitDefaultQueueCallback(
+ OwnerWindow: HWND,
+ ) -> PVOID;
+ pub fn SetupInitDefaultQueueCallbackEx(
+ OwnerWindow: HWND,
+ AlternateProgressWindow: HWND,
+ ProgressMessage: UINT,
+ Reserved1: DWORD,
+ Reserved2: PVOID,
+ ) -> PVOID;
+ pub fn SetupTermDefaultQueueCallback(
+ Context: PVOID,
+ ) -> ();
+ pub fn SetupDefaultQueueCallbackA(
+ Context: PVOID,
+ Notification: UINT,
+ Param1: UINT_PTR,
+ Param2: UINT_PTR,
+ ) -> UINT;
+ pub fn SetupDefaultQueueCallbackW(
+ Context: PVOID,
+ Notification: UINT,
+ Param1: UINT_PTR,
+ Param2: UINT_PTR,
+ ) -> UINT;
+}
+pub const FLG_ADDREG_DELREG_BIT: DWORD = 0x00008000;
+pub const FLG_ADDREG_BINVALUETYPE: DWORD = 0x00000001;
+pub const FLG_ADDREG_NOCLOBBER: DWORD = 0x00000002;
+pub const FLG_ADDREG_DELVAL: DWORD = 0x00000004;
+pub const FLG_ADDREG_APPEND: DWORD = 0x00000008;
+pub const FLG_ADDREG_KEYONLY: DWORD = 0x00000010;
+pub const FLG_ADDREG_OVERWRITEONLY: DWORD = 0x00000020;
+pub const FLG_ADDREG_64BITKEY: DWORD = 0x00001000;
+pub const FLG_ADDREG_KEYONLY_COMMON: DWORD = 0x00002000;
+pub const FLG_ADDREG_32BITKEY: DWORD = 0x00004000;
+pub const FLG_ADDREG_TYPE_MASK: DWORD = 0xFFFF0000 | FLG_ADDREG_BINVALUETYPE;
+pub const FLG_ADDREG_TYPE_SZ: DWORD = 0x00000000;
+pub const FLG_ADDREG_TYPE_MULTI_SZ: DWORD = 0x00010000;
+pub const FLG_ADDREG_TYPE_EXPAND_SZ: DWORD = 0x00020000;
+pub const FLG_ADDREG_TYPE_BINARY: DWORD = 0x00000000 | FLG_ADDREG_BINVALUETYPE;
+pub const FLG_ADDREG_TYPE_DWORD: DWORD = 0x00010000 | FLG_ADDREG_BINVALUETYPE;
+pub const FLG_ADDREG_TYPE_NONE: DWORD = 0x00020000 | FLG_ADDREG_BINVALUETYPE;
+pub const FLG_DELREG_VALUE: DWORD = 0x00000000;
+pub const FLG_DELREG_TYPE_MASK: DWORD = FLG_ADDREG_TYPE_MASK;
+pub const FLG_DELREG_TYPE_SZ: DWORD = FLG_ADDREG_TYPE_SZ;
+pub const FLG_DELREG_TYPE_MULTI_SZ: DWORD = FLG_ADDREG_TYPE_MULTI_SZ;
+pub const FLG_DELREG_TYPE_EXPAND_SZ: DWORD = FLG_ADDREG_TYPE_EXPAND_SZ;
+pub const FLG_DELREG_TYPE_BINARY: DWORD = FLG_ADDREG_TYPE_BINARY;
+pub const FLG_DELREG_TYPE_DWORD: DWORD = FLG_ADDREG_TYPE_DWORD;
+pub const FLG_DELREG_TYPE_NONE: DWORD = FLG_ADDREG_TYPE_NONE;
+pub const FLG_DELREG_64BITKEY: DWORD = FLG_ADDREG_64BITKEY;
+pub const FLG_DELREG_KEYONLY_COMMON: DWORD = FLG_ADDREG_KEYONLY_COMMON;
+pub const FLG_DELREG_32BITKEY: DWORD = FLG_ADDREG_32BITKEY;
+pub const FLG_DELREG_OPERATION_MASK: DWORD = 0x000000FE;
+pub const FLG_DELREG_MULTI_SZ_DELSTRING: DWORD = FLG_DELREG_TYPE_MULTI_SZ | FLG_ADDREG_DELREG_BIT
+ | 0x00000002;
+pub const FLG_BITREG_CLEARBITS: DWORD = 0x00000000;
+pub const FLG_BITREG_SETBITS: DWORD = 0x00000001;
+pub const FLG_BITREG_64BITKEY: DWORD = 0x00001000;
+pub const FLG_BITREG_32BITKEY: DWORD = 0x00004000;
+pub const FLG_INI2REG_64BITKEY: DWORD = 0x00001000;
+pub const FLG_INI2REG_32BITKEY: DWORD = 0x00004000;
+pub const FLG_REGSVR_DLLREGISTER: DWORD = 0x00000001;
+pub const FLG_REGSVR_DLLINSTALL: DWORD = 0x00000002;
+pub const FLG_PROFITEM_CURRENTUSER: DWORD = 0x00000001;
+pub const FLG_PROFITEM_DELETE: DWORD = 0x00000002;
+pub const FLG_PROFITEM_GROUP: DWORD = 0x00000004;
+pub const FLG_PROFITEM_CSIDL: DWORD = 0x00000008;
+pub const FLG_ADDPROPERTY_NOCLOBBER: DWORD = 0x00000001;
+pub const FLG_ADDPROPERTY_OVERWRITEONLY: DWORD = 0x00000002;
+pub const FLG_ADDPROPERTY_APPEND: DWORD = 0x00000004;
+pub const FLG_ADDPROPERTY_OR: DWORD = 0x00000008;
+pub const FLG_ADDPROPERTY_AND: DWORD = 0x00000010;
+pub const FLG_DELPROPERTY_MULTI_SZ_DELSTRING: DWORD = 0x00000001;
+extern "system" {
+ pub fn SetupInstallFromInfSectionA(
+ Owner: HWND,
+ InfHandle: HINF,
+ SectionName: PCSTR,
+ Flags: UINT,
+ RelativeKeyRoot: HKEY,
+ SourceRootPath: PCSTR,
+ CopyFlags: UINT,
+ MsgHandler: PSP_FILE_CALLBACK_A,
+ Context: PVOID,
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupInstallFromInfSectionW(
+ Owner: HWND,
+ InfHandle: HINF,
+ SectionName: PCWSTR,
+ Flags: UINT,
+ RelativeKeyRoot: HKEY,
+ SourceRootPath: PCWSTR,
+ CopyFlags: UINT,
+ MsgHandler: PSP_FILE_CALLBACK_W,
+ Context: PVOID,
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+}
+pub const SPINST_LOGCONFIG: UINT = 0x00000001;
+pub const SPINST_INIFILES: UINT = 0x00000002;
+pub const SPINST_REGISTRY: UINT = 0x00000004;
+pub const SPINST_INI2REG: UINT = 0x00000008;
+pub const SPINST_FILES: UINT = 0x00000010;
+pub const SPINST_BITREG: UINT = 0x00000020;
+pub const SPINST_REGSVR: UINT = 0x00000040;
+pub const SPINST_UNREGSVR: UINT = 0x00000080;
+pub const SPINST_PROFILEITEMS: UINT = 0x00000100;
+pub const SPINST_COPYINF: UINT = 0x00000200;
+pub const SPINST_PROPERTIES: UINT = 0x00000400;
+pub const SPINST_ALL: UINT = 0x000007ff;
+pub const SPINST_SINGLESECTION: UINT = 0x00010000;
+pub const SPINST_LOGCONFIG_IS_FORCED: UINT = 0x00020000;
+pub const SPINST_LOGCONFIGS_ARE_OVERRIDES: UINT = 0x00040000;
+pub const SPINST_REGISTERCALLBACKAWARE: UINT = 0x00080000;
+pub const SPINST_DEVICEINSTALL: UINT = 0x00100000;
+extern "system" {
+ pub fn SetupInstallFilesFromInfSectionA(
+ InfHandle: HINF,
+ LayoutInfHandle: HINF,
+ FileQueue: HSPFILEQ,
+ SectionName: PCSTR,
+ SourceRootPath: PCSTR,
+ CopyFlags: UINT,
+ ) -> BOOL;
+ pub fn SetupInstallFilesFromInfSectionW(
+ InfHandle: HINF,
+ LayoutInfHandle: HINF,
+ FileQueue: HSPFILEQ,
+ SectionName: PCWSTR,
+ SourceRootPath: PCWSTR,
+ CopyFlags: UINT,
+ ) -> BOOL;
+}
+pub const SPSVCINST_TAGTOFRONT: DWORD = 0x00000001;
+pub const SPSVCINST_ASSOCSERVICE: DWORD = 0x00000002;
+pub const SPSVCINST_DELETEEVENTLOGENTRY: DWORD = 0x00000004;
+pub const SPSVCINST_NOCLOBBER_DISPLAYNAME: DWORD = 0x00000008;
+pub const SPSVCINST_NOCLOBBER_STARTTYPE: DWORD = 0x00000010;
+pub const SPSVCINST_NOCLOBBER_ERRORCONTROL: DWORD = 0x00000020;
+pub const SPSVCINST_NOCLOBBER_LOADORDERGROUP: DWORD = 0x00000040;
+pub const SPSVCINST_NOCLOBBER_DEPENDENCIES: DWORD = 0x00000080;
+pub const SPSVCINST_NOCLOBBER_DESCRIPTION: DWORD = 0x00000100;
+pub const SPSVCINST_STOPSERVICE: DWORD = 0x00000200;
+pub const SPSVCINST_CLOBBER_SECURITY: DWORD = 0x00000400;
+pub const SPSVCINST_STARTSERVICE: DWORD = 0x00000800;
+pub const SPSVCINST_NOCLOBBER_REQUIREDPRIVILEGES: DWORD = 0x00001000;
+extern "system" {
+ pub fn SetupInstallServicesFromInfSectionA(
+ InfHandle: HINF,
+ SectionName: PCSTR,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn SetupInstallServicesFromInfSectionW(
+ InfHandle: HINF,
+ SectionName: PCWSTR,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn SetupInstallServicesFromInfSectionExA(
+ InfHandle: HINF,
+ SectionName: PCSTR,
+ Flags: DWORD,
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ Reserved1: PVOID,
+ Reserved2: PVOID,
+ ) -> BOOL;
+ pub fn SetupInstallServicesFromInfSectionExW(
+ InfHandle: HINF,
+ SectionName: PCWSTR,
+ Flags: DWORD,
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ Reserved1: PVOID,
+ Reserved2: PVOID,
+ ) -> BOOL;
+ pub fn InstallHinfSectionA(
+ Window: HWND,
+ ModuleHandle: HINSTANCE,
+ CommandLine: PCSTR,
+ ShowCommand: INT,
+ ) -> ();
+ pub fn InstallHinfSectionW(
+ Window: HWND,
+ ModuleHandle: HINSTANCE,
+ CommandLine: PCWSTR,
+ ShowCommand: INT,
+ ) -> ();
+}
+pub type HSPFILELOG = PVOID;
+extern "system" {
+ pub fn SetupInitializeFileLogA(
+ LogFileName: PCSTR,
+ Flags: DWORD,
+ ) -> HSPFILELOG;
+ pub fn SetupInitializeFileLogW(
+ LogFileName: PCWSTR,
+ Flags: DWORD,
+ ) -> HSPFILELOG;
+}
+pub const SPFILELOG_SYSTEMLOG: DWORD = 0x00000001;
+pub const SPFILELOG_FORCENEW: DWORD = 0x00000002;
+pub const SPFILELOG_QUERYONLY: DWORD = 0x00000004;
+extern "system" {
+ pub fn SetupTerminateFileLog(
+ FileLogHandle: HSPFILELOG,
+ ) -> BOOL;
+ pub fn SetupLogFileA(
+ FileLogHandle: HSPFILELOG,
+ LogSectionName: PCSTR,
+ SourceFilename: PCSTR,
+ TargetFilename: PCSTR,
+ Checksum: DWORD,
+ DiskTagfile: PCSTR,
+ DiskDescription: PCSTR,
+ OtherInfo: PCSTR,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn SetupLogFileW(
+ FileLogHandle: HSPFILELOG,
+ LogSectionName: PCWSTR,
+ SourceFilename: PCWSTR,
+ TargetFilename: PCWSTR,
+ Checksum: DWORD,
+ DiskTagfile: PCWSTR,
+ DiskDescription: PCWSTR,
+ OtherInfo: PCWSTR,
+ Flags: DWORD,
+ ) -> BOOL;
+}
+pub const SPFILELOG_OEMFILE: DWORD = 0x00000001;
+extern "system" {
+ pub fn SetupRemoveFileLogEntryA(
+ FileLogHandle: HSPFILELOG,
+ LogSectionName: PCSTR,
+ TargetFilename: PCSTR,
+ ) -> BOOL;
+ pub fn SetupRemoveFileLogEntryW(
+ FileLogHandle: HSPFILELOG,
+ LogSectionName: PCWSTR,
+ TargetFilename: PCWSTR,
+ ) -> BOOL;
+}
+ENUM!{enum SetupFileLogInfo {
+ SetupFileLogSourceFilename,
+ SetupFileLogChecksum,
+ SetupFileLogDiskTagfile,
+ SetupFileLogDiskDescription,
+ SetupFileLogOtherInfo,
+ SetupFileLogMax,
+}}
+extern "system" {
+ pub fn SetupQueryFileLogA(
+ FileLogHandle: HSPFILELOG,
+ LogSectionName: PCSTR,
+ TargetFilename: PCSTR,
+ DesiredInfo: SetupFileLogInfo,
+ DataOut: PSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupQueryFileLogW(
+ FileLogHandle: HSPFILELOG,
+ LogSectionName: PCWSTR,
+ TargetFilename: PCWSTR,
+ DesiredInfo: SetupFileLogInfo,
+ DataOut: PWSTR,
+ ReturnBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+}
+pub type LogSeverity = DWORD;
+pub const LogSevInformation: LogSeverity = 0x00000000;
+pub const LogSevWarning: LogSeverity = 0x00000001;
+pub const LogSevError: LogSeverity = 0x00000002;
+pub const LogSevFatalError: LogSeverity = 0x00000003;
+pub const LogSevMaximum: LogSeverity = 0x00000004;
+extern "system" {
+ pub fn SetupOpenLog(
+ Erase: BOOL,
+ ) -> BOOL;
+ pub fn SetupLogErrorA(
+ MessageString: LPCSTR,
+ Severity: LogSeverity,
+ ) -> BOOL;
+ pub fn SetupLogErrorW(
+ MessageString: LPCWSTR,
+ Severity: LogSeverity,
+ ) -> BOOL;
+ pub fn SetupCloseLog() -> ();
+ pub fn SetupGetThreadLogToken() -> SP_LOG_TOKEN;
+ pub fn SetupSetThreadLogToken(
+ LogToken: SP_LOG_TOKEN,
+ ) -> ();
+}
+//pub fn SetupWriteTextLog() -> ();
+//pub fn SetupWriteTextLogError() -> ();
+extern "system" {
+ pub fn SetupWriteTextLogInfLine(
+ LogToken: SP_LOG_TOKEN,
+ Flags: DWORD,
+ InfHandle: HINF,
+ Context: PINFCONTEXT,
+ ) -> ();
+ pub fn SetupGetBackupInformationA(
+ QueueHandle: HSPFILEQ,
+ BackupParams: PSP_BACKUP_QUEUE_PARAMS_A,
+ ) -> BOOL;
+ pub fn SetupGetBackupInformationW(
+ QueueHandle: HSPFILEQ,
+ BackupParams: PSP_BACKUP_QUEUE_PARAMS_W,
+ ) -> BOOL;
+ pub fn SetupPrepareQueueForRestoreA(
+ QueueHandle: HSPFILEQ,
+ BackupPath: PCSTR,
+ RestoreFlags: DWORD,
+ ) -> BOOL;
+ pub fn SetupPrepareQueueForRestoreW(
+ QueueHandle: HSPFILEQ,
+ BackupPath: PCWSTR,
+ RestoreFlags: DWORD,
+ ) -> BOOL;
+ pub fn SetupSetNonInteractiveMode(
+ NonInteractiveFlag: BOOL,
+ ) -> BOOL;
+ pub fn SetupGetNonInteractiveMode() -> BOOL;
+ pub fn SetupDiCreateDeviceInfoList(
+ ClassGuid: *const GUID,
+ hwndParent: HWND,
+ ) -> HDEVINFO;
+ pub fn SetupDiCreateDeviceInfoListExA(
+ ClassGuid: *const GUID,
+ hwndParent: HWND,
+ MachineName: PCSTR,
+ Reserved: PVOID,
+ ) -> HDEVINFO;
+ pub fn SetupDiCreateDeviceInfoListExW(
+ ClassGuid: *const GUID,
+ hwndParent: HWND,
+ MachineName: PCWSTR,
+ Reserved: PVOID,
+ ) -> HDEVINFO;
+ pub fn SetupDiGetDeviceInfoListClass(
+ DeviceInfoSet: HDEVINFO,
+ ClassGuid: LPGUID,
+ ) -> BOOL;
+ pub fn SetupDiGetDeviceInfoListDetailA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoSetDetailData: PSP_DEVINFO_LIST_DETAIL_DATA_A,
+ ) -> BOOL;
+ pub fn SetupDiGetDeviceInfoListDetailW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoSetDetailData: PSP_DEVINFO_LIST_DETAIL_DATA_W,
+ ) -> BOOL;
+}
+pub const DICD_GENERATE_ID: DWORD = 0x00000001;
+pub const DICD_INHERIT_CLASSDRVS: DWORD = 0x00000002;
+extern "system" {
+ pub fn SetupDiCreateDeviceInfoA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceName: PCSTR,
+ ClassGuid: *const GUID,
+ DeviceDescription: PCSTR,
+ hwndParent: HWND,
+ CreationFlags: DWORD,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiCreateDeviceInfoW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceName: PCWSTR,
+ ClassGuid: *const GUID,
+ DeviceDescription: PCWSTR,
+ hwndParent: HWND,
+ CreationFlags: DWORD,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+}
+pub const DIOD_INHERIT_CLASSDRVS: DWORD = 0x00000002;
+pub const DIOD_CANCEL_REMOVE: DWORD = 0x00000004;
+extern "system" {
+ pub fn SetupDiOpenDeviceInfoA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInstanceId: PCSTR,
+ hwndParent: HWND,
+ OpenFlags: DWORD,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiOpenDeviceInfoW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInstanceId: PCWSTR,
+ hwndParent: HWND,
+ OpenFlags: DWORD,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiGetDeviceInstanceIdA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DeviceInstanceId: PSTR,
+ DeviceInstanceIdSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetDeviceInstanceIdW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DeviceInstanceId: PWSTR,
+ DeviceInstanceIdSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiDeleteDeviceInfo(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiEnumDeviceInfo(
+ DeviceInfoSet: HDEVINFO,
+ MemberIndex: DWORD,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiDestroyDeviceInfoList(
+ DeviceInfoSet: HDEVINFO,
+ ) -> BOOL;
+ pub fn SetupDiEnumDeviceInterfaces(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ InterfaceClassGuid: *const GUID,
+ MemberIndex: DWORD,
+ DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ ) -> BOOL;
+ pub fn SetupDiCreateDeviceInterfaceA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ InterfaceClassGuid: *const GUID,
+ ReferenceString: PCSTR,
+ CreationFlags: DWORD,
+ DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ ) -> BOOL;
+ pub fn SetupDiCreateDeviceInterfaceW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ InterfaceClassGuid: *const GUID,
+ ReferenceString: PCWSTR,
+ CreationFlags: DWORD,
+ DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ ) -> BOOL;
+}
+pub const DIODI_NO_ADD: DWORD = 0x00000001;
+extern "system" {
+ pub fn SetupDiOpenDeviceInterfaceA(
+ DeviceInfoSet: HDEVINFO,
+ DevicePath: PCSTR,
+ OpenFlags: DWORD,
+ DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ ) -> BOOL;
+ pub fn SetupDiOpenDeviceInterfaceW(
+ DeviceInfoSet: HDEVINFO,
+ DevicePath: PCWSTR,
+ OpenFlags: DWORD,
+ DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ ) -> BOOL;
+ pub fn SetupDiGetDeviceInterfaceAlias(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ AliasInterfaceClassGuid: *const GUID,
+ AliasDeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ ) -> BOOL;
+ pub fn SetupDiDeleteDeviceInterfaceData(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ ) -> BOOL;
+ pub fn SetupDiRemoveDeviceInterface(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ ) -> BOOL;
+ pub fn SetupDiGetDeviceInterfaceDetailA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ DeviceInterfaceDetailData: PSP_DEVICE_INTERFACE_DETAIL_DATA_A,
+ DeviceInterfaceDetailDataSize: DWORD,
+ RequiredSize: PDWORD,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiGetDeviceInterfaceDetailW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ DeviceInterfaceDetailData: PSP_DEVICE_INTERFACE_DETAIL_DATA_W,
+ DeviceInterfaceDetailDataSize: DWORD,
+ RequiredSize: PDWORD,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiInstallDeviceInterfaces(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiSetDeviceInterfaceDefault(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ Flags: DWORD,
+ Reserved: PVOID,
+ ) -> BOOL;
+}
+pub const SPRDI_FIND_DUPS: DWORD = 0x00000001;
+extern "system" {
+ pub fn SetupDiRegisterDeviceInfo(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ Flags: DWORD,
+ CompareProc: PSP_DETSIG_CMPPROC,
+ CompareContext: PVOID,
+ DupDeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+}
+pub const SPDIT_NODRIVER: DWORD = 0x00000000;
+pub const SPDIT_CLASSDRIVER: DWORD = 0x00000001;
+pub const SPDIT_COMPATDRIVER: DWORD = 0x00000002;
+extern "system" {
+ pub fn SetupDiBuildDriverInfoList(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DriverType: DWORD,
+ ) -> BOOL;
+ pub fn SetupDiCancelDriverInfoSearch(
+ DeviceInfoSet: HDEVINFO,
+ ) -> BOOL;
+ pub fn SetupDiEnumDriverInfoA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DriverType: DWORD,
+ MemberIndex: DWORD,
+ DriverInfoData: PSP_DRVINFO_DATA_A,
+ ) -> BOOL;
+ pub fn SetupDiEnumDriverInfoW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DriverType: DWORD,
+ MemberIndex: DWORD,
+ DriverInfoData: PSP_DRVINFO_DATA_W,
+ ) -> BOOL;
+ pub fn SetupDiGetSelectedDriverA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DriverInfoData: PSP_DRVINFO_DATA_A,
+ ) -> BOOL;
+ pub fn SetupDiGetSelectedDriverW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DriverInfoData: PSP_DRVINFO_DATA_W,
+ ) -> BOOL;
+ pub fn SetupDiSetSelectedDriverA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DriverInfoData: PSP_DRVINFO_DATA_A,
+ ) -> BOOL;
+ pub fn SetupDiSetSelectedDriverW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DriverInfoData: PSP_DRVINFO_DATA_W,
+ ) -> BOOL;
+ pub fn SetupDiGetDriverInfoDetailA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DriverInfoData: PSP_DRVINFO_DATA_A,
+ DriverInfoDetailData: PSP_DRVINFO_DETAIL_DATA_A,
+ DriverInfoDetailDataSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetDriverInfoDetailW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DriverInfoData: PSP_DRVINFO_DATA_W,
+ DriverInfoDetailData: PSP_DRVINFO_DETAIL_DATA_W,
+ DriverInfoDetailDataSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiDestroyDriverInfoList(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DriverType: DWORD,
+ ) -> BOOL;
+}
+pub const DIGCF_DEFAULT: DWORD = 0x00000001;
+pub const DIGCF_PRESENT: DWORD = 0x00000002;
+pub const DIGCF_ALLCLASSES: DWORD = 0x00000004;
+pub const DIGCF_PROFILE: DWORD = 0x00000008;
+pub const DIGCF_DEVICEINTERFACE: DWORD = 0x00000010;
+extern "system" {
+ pub fn SetupDiGetClassDevsA(
+ ClassGuid: *const GUID,
+ Enumerator: PCSTR,
+ hwndParent: HWND,
+ Flags: DWORD,
+ ) -> HDEVINFO;
+ pub fn SetupDiGetClassDevsW(
+ ClassGuid: *const GUID,
+ Enumerator: PCWSTR,
+ hwndParent: HWND,
+ Flags: DWORD,
+ ) -> HDEVINFO;
+ pub fn SetupDiGetClassDevsExA(
+ ClassGuid: *const GUID,
+ Enumerator: PCSTR,
+ hwndParent: HWND,
+ Flags: DWORD,
+ DeviceInfoSet: HDEVINFO,
+ MachineName: PCSTR,
+ Reserved: PVOID,
+ ) -> HDEVINFO;
+ pub fn SetupDiGetClassDevsExW(
+ ClassGuid: *const GUID,
+ Enumerator: PCWSTR,
+ hwndParent: HWND,
+ Flags: DWORD,
+ DeviceInfoSet: HDEVINFO,
+ MachineName: PCWSTR,
+ Reserved: PVOID,
+ ) -> HDEVINFO;
+ pub fn SetupDiGetINFClassA(
+ InfName: PCSTR,
+ ClassGuid: LPGUID,
+ ClassName: PSTR,
+ ClassNameSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetINFClassW(
+ InfName: PCWSTR,
+ ClassGuid: LPGUID,
+ ClassName: PWSTR,
+ ClassNameSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+}
+pub const DIBCI_NOINSTALLCLASS: DWORD = 0x00000001;
+pub const DIBCI_NODISPLAYCLASS: DWORD = 0x00000002;
+extern "system" {
+ pub fn SetupDiBuildClassInfoList(
+ Flags: DWORD,
+ ClassGuidList: LPGUID,
+ ClassGuidListSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiBuildClassInfoListExA(
+ Flags: DWORD,
+ ClassGuidList: LPGUID,
+ ClassGuidListSize: DWORD,
+ RequiredSize: PDWORD,
+ MachineName: PCSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiBuildClassInfoListExW(
+ Flags: DWORD,
+ ClassGuidList: LPGUID,
+ ClassGuidListSize: DWORD,
+ RequiredSize: PDWORD,
+ MachineName: PCWSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiGetClassDescriptionA(
+ ClassGuid: *const GUID,
+ ClassDescription: PSTR,
+ ClassDescriptionSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetClassDescriptionW(
+ ClassGuid: *const GUID,
+ ClassDescription: PWSTR,
+ ClassDescriptionSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetClassDescriptionExA(
+ ClassGuid: *const GUID,
+ ClassDescription: PSTR,
+ ClassDescriptionSize: DWORD,
+ RequiredSize: PDWORD,
+ MachineName: PCSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiGetClassDescriptionExW(
+ ClassGuid: *const GUID,
+ ClassDescription: PWSTR,
+ ClassDescriptionSize: DWORD,
+ RequiredSize: PDWORD,
+ MachineName: PCWSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiCallClassInstaller(
+ InstallFunction: DI_FUNCTION,
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiSelectDevice(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiSelectBestCompatDrv(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiInstallDevice(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiInstallDriverFiles(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiRegisterCoDeviceInstallers(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiRemoveDevice(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiUnremoveDevice(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiRestartDevices(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiChangeState(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiInstallClassA(
+ hwndParent: HWND,
+ InfFileName: PCSTR,
+ Flags: DWORD,
+ FileQueue: HSPFILEQ,
+ ) -> BOOL;
+ pub fn SetupDiInstallClassW(
+ hwndParent: HWND,
+ InfFileName: PCWSTR,
+ Flags: DWORD,
+ FileQueue: HSPFILEQ,
+ ) -> BOOL;
+ pub fn SetupDiInstallClassExA(
+ hwndParent: HWND,
+ InfFileName: PCSTR,
+ Flags: DWORD,
+ FileQueue: HSPFILEQ,
+ InterfaceClassGuid: *const GUID,
+ Reserved1: PVOID,
+ Reserved2: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiInstallClassExW(
+ hwndParent: HWND,
+ InfFileName: PCWSTR,
+ Flags: DWORD,
+ FileQueue: HSPFILEQ,
+ InterfaceClassGuid: *const GUID,
+ Reserved1: PVOID,
+ Reserved2: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiOpenClassRegKey(
+ ClassGuid: *const GUID,
+ samDesired: REGSAM,
+ ) -> HKEY;
+}
+pub const DIOCR_INSTALLER: DWORD = 0x00000001;
+pub const DIOCR_INTERFACE: DWORD = 0x00000002;
+extern "system" {
+ pub fn SetupDiOpenClassRegKeyExA(
+ ClassGuid: *const GUID,
+ samDesired: REGSAM,
+ Flags: DWORD,
+ MachineName: PCSTR,
+ Reserved: PVOID,
+ ) -> HKEY;
+ pub fn SetupDiOpenClassRegKeyExW(
+ ClassGuid: *const GUID,
+ samDesired: REGSAM,
+ Flags: DWORD,
+ MachineName: PCWSTR,
+ Reserved: PVOID,
+ ) -> HKEY;
+ pub fn SetupDiCreateDeviceInterfaceRegKeyA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ Reserved: DWORD,
+ samDesired: REGSAM,
+ InfHandle: HINF,
+ InfSectionName: PCSTR,
+ ) -> HKEY;
+ pub fn SetupDiCreateDeviceInterfaceRegKeyW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ Reserved: DWORD,
+ samDesired: REGSAM,
+ InfHandle: HINF,
+ InfSectionName: PCWSTR,
+ ) -> HKEY;
+ pub fn SetupDiOpenDeviceInterfaceRegKey(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ Reserved: DWORD,
+ samDesired: REGSAM,
+ ) -> HKEY;
+ pub fn SetupDiDeleteDeviceInterfaceRegKey(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ Reserved: DWORD,
+ ) -> BOOL;
+}
+pub const DIREG_DEV: DWORD = 0x00000001;
+pub const DIREG_DRV: DWORD = 0x00000002;
+pub const DIREG_BOTH: DWORD = 0x00000004;
+extern "system" {
+ pub fn SetupDiCreateDevRegKeyA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ Scope: DWORD,
+ HwProfile: DWORD,
+ KeyType: DWORD,
+ InfHandle: HINF,
+ InfSectionName: PCSTR,
+ ) -> HKEY;
+ pub fn SetupDiCreateDevRegKeyW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ Scope: DWORD,
+ HwProfile: DWORD,
+ KeyType: DWORD,
+ InfHandle: HINF,
+ InfSectionName: PCWSTR,
+ ) -> HKEY;
+ pub fn SetupDiOpenDevRegKey(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ Scope: DWORD,
+ HwProfile: DWORD,
+ KeyType: DWORD,
+ samDesired: REGSAM,
+ ) -> HKEY;
+ pub fn SetupDiDeleteDevRegKey(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ Scope: DWORD,
+ HwProfile: DWORD,
+ KeyType: DWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetHwProfileList(
+ HwProfileList: PDWORD,
+ HwProfileListSize: DWORD,
+ RequiredSize: PDWORD,
+ CurrentlyActiveIndex: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetHwProfileListExA(
+ HwProfileList: PDWORD,
+ HwProfileListSize: DWORD,
+ RequiredSize: PDWORD,
+ CurrentlyActiveIndex: PDWORD,
+ MachineName: PCSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiGetHwProfileListExW(
+ HwProfileList: PDWORD,
+ HwProfileListSize: DWORD,
+ RequiredSize: PDWORD,
+ CurrentlyActiveIndex: PDWORD,
+ MachineName: PCWSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiGetDevicePropertyKeys(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ PropertyKeyArray: *mut DEVPROPKEY,
+ PropertyKeyCount: DWORD,
+ RequiredPropertyKeyCount: PDWORD,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetDevicePropertyW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ PropertyKey: *const DEVPROPKEY,
+ PropertyType: *mut DEVPROPTYPE,
+ PropertyBuffer: PBYTE,
+ PropertyBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn SetupDiSetDevicePropertyW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ PropertyKey: *const DEVPROPKEY,
+ PropertyType: DEVPROPTYPE,
+ PropertyBuffer: *const BYTE,
+ PropertyBufferSize: DWORD,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetDeviceInterfacePropertyKeys(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ PropertyKeyArray: *mut DEVPROPKEY,
+ PropertyKeyCount: DWORD,
+ RequiredPropertyKeyCount: PDWORD,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetDeviceInterfacePropertyW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ PropertyKey: *const DEVPROPKEY,
+ PropertyType: *mut DEVPROPTYPE,
+ PropertyBuffer: PBYTE,
+ PropertyBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn SetupDiSetDeviceInterfacePropertyW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInterfaceData: PSP_DEVICE_INTERFACE_DATA,
+ PropertyKey: *const DEVPROPKEY,
+ PropertyType: DEVPROPTYPE,
+ PropertyBuffer: *const BYTE,
+ PropertyBufferSize: DWORD,
+ Flags: DWORD,
+ ) -> BOOL;
+}
+pub const DICLASSPROP_INSTALLER: DWORD = 0x00000001;
+pub const DICLASSPROP_INTERFACE: DWORD = 0x00000002;
+extern "system" {
+ pub fn SetupDiGetClassPropertyKeys(
+ ClassGuid: *const GUID,
+ PropertyKeyArray: *mut DEVPROPKEY,
+ PropertyKeyCount: DWORD,
+ RequiredPropertyKeyCount: PDWORD,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetClassPropertyKeysExW(
+ ClassGuid: *const GUID,
+ PropertyKeyArray: *mut DEVPROPKEY,
+ PropertyKeyCount: DWORD,
+ RequiredPropertyKeyCount: PDWORD,
+ Flags: DWORD,
+ MachineName: PCWSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiGetClassPropertyW(
+ ClassGuid: *const GUID,
+ PropertyKey: *const DEVPROPKEY,
+ PropertyType: *mut DEVPROPTYPE,
+ PropertyBuffer: PBYTE,
+ PropertyBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetClassPropertyExW(
+ ClassGuid: *const GUID,
+ PropertyKey: *const DEVPROPKEY,
+ PropertyType: *mut DEVPROPTYPE,
+ PropertyBuffer: PBYTE,
+ PropertyBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ Flags: DWORD,
+ MachineName: PCWSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiSetClassPropertyW(
+ ClassGuid: *const GUID,
+ PropertyKey: *const DEVPROPKEY,
+ PropertyType: DEVPROPTYPE,
+ PropertyBuffer: *const BYTE,
+ PropertyBufferSize: DWORD,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn SetupDiSetClassPropertyExW(
+ ClassGuid: *const GUID,
+ PropertyKey: *const DEVPROPKEY,
+ PropertyType: DEVPROPTYPE,
+ PropertyBuffer: *const BYTE,
+ PropertyBufferSize: DWORD,
+ Flags: DWORD,
+ MachineName: PCWSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+}
+pub const SPDRP_DEVICEDESC: DWORD = 0x00000000;
+pub const SPDRP_HARDWAREID: DWORD = 0x00000001;
+pub const SPDRP_COMPATIBLEIDS: DWORD = 0x00000002;
+pub const SPDRP_UNUSED0: DWORD = 0x00000003;
+pub const SPDRP_SERVICE: DWORD = 0x00000004;
+pub const SPDRP_UNUSED1: DWORD = 0x00000005;
+pub const SPDRP_UNUSED2: DWORD = 0x00000006;
+pub const SPDRP_CLASS: DWORD = 0x00000007;
+pub const SPDRP_CLASSGUID: DWORD = 0x00000008;
+pub const SPDRP_DRIVER: DWORD = 0x00000009;
+pub const SPDRP_CONFIGFLAGS: DWORD = 0x0000000A;
+pub const SPDRP_MFG: DWORD = 0x0000000B;
+pub const SPDRP_FRIENDLYNAME: DWORD = 0x0000000C;
+pub const SPDRP_LOCATION_INFORMATION: DWORD = 0x0000000D;
+pub const SPDRP_PHYSICAL_DEVICE_OBJECT_NAME: DWORD = 0x0000000E;
+pub const SPDRP_CAPABILITIES: DWORD = 0x0000000F;
+pub const SPDRP_UI_NUMBER: DWORD = 0x00000010;
+pub const SPDRP_UPPERFILTERS: DWORD = 0x00000011;
+pub const SPDRP_LOWERFILTERS: DWORD = 0x00000012;
+pub const SPDRP_BUSTYPEGUID: DWORD = 0x00000013;
+pub const SPDRP_LEGACYBUSTYPE: DWORD = 0x00000014;
+pub const SPDRP_BUSNUMBER: DWORD = 0x00000015;
+pub const SPDRP_ENUMERATOR_NAME: DWORD = 0x00000016;
+pub const SPDRP_SECURITY: DWORD = 0x00000017;
+pub const SPDRP_SECURITY_SDS: DWORD = 0x00000018;
+pub const SPDRP_DEVTYPE: DWORD = 0x00000019;
+pub const SPDRP_EXCLUSIVE: DWORD = 0x0000001A;
+pub const SPDRP_CHARACTERISTICS: DWORD = 0x0000001B;
+pub const SPDRP_ADDRESS: DWORD = 0x0000001C;
+pub const SPDRP_UI_NUMBER_DESC_FORMAT: DWORD = 0x0000001D;
+pub const SPDRP_DEVICE_POWER_DATA: DWORD = 0x0000001E;
+pub const SPDRP_REMOVAL_POLICY: DWORD = 0x0000001F;
+pub const SPDRP_REMOVAL_POLICY_HW_DEFAULT: DWORD = 0x00000020;
+pub const SPDRP_REMOVAL_POLICY_OVERRIDE: DWORD = 0x00000021;
+pub const SPDRP_INSTALL_STATE: DWORD = 0x00000022;
+pub const SPDRP_LOCATION_PATHS: DWORD = 0x00000023;
+pub const SPDRP_BASE_CONTAINERID: DWORD = 0x00000024;
+pub const SPDRP_MAXIMUM_PROPERTY: DWORD = 0x00000025;
+pub const SPCRP_UPPERFILTERS: DWORD = 0x00000011;
+pub const SPCRP_LOWERFILTERS: DWORD = 0x00000012;
+pub const SPCRP_SECURITY: DWORD = 0x00000017;
+pub const SPCRP_SECURITY_SDS: DWORD = 0x00000018;
+pub const SPCRP_DEVTYPE: DWORD = 0x00000019;
+pub const SPCRP_EXCLUSIVE: DWORD = 0x0000001A;
+pub const SPCRP_CHARACTERISTICS: DWORD = 0x0000001B;
+pub const SPCRP_MAXIMUM_PROPERTY: DWORD = 0x0000001C;
+extern "system" {
+ pub fn SetupDiGetDeviceRegistryPropertyA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ Property: DWORD,
+ PropertyRegDataType: PDWORD,
+ PropertyBuffer: PBYTE,
+ PropertyBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetDeviceRegistryPropertyW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ Property: DWORD,
+ PropertyRegDataType: PDWORD,
+ PropertyBuffer: PBYTE,
+ PropertyBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetClassRegistryPropertyA(
+ ClassGuid: *const GUID,
+ Property: DWORD,
+ PropertyRegDataType: PDWORD,
+ PropertyBuffer: PBYTE,
+ PropertyBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ MachineName: PCSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiGetClassRegistryPropertyW(
+ ClassGuid: *const GUID,
+ Property: DWORD,
+ PropertyRegDataType: PDWORD,
+ PropertyBuffer: PBYTE,
+ PropertyBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ MachineName: PCWSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiSetDeviceRegistryPropertyA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ Property: DWORD,
+ PropertyBuffer: *const BYTE,
+ PropertyBufferSize: DWORD,
+ ) -> BOOL;
+ pub fn SetupDiSetDeviceRegistryPropertyW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ Property: DWORD,
+ PropertyBuffer: *const BYTE,
+ PropertyBufferSize: DWORD,
+ ) -> BOOL;
+ pub fn SetupDiSetClassRegistryPropertyA(
+ ClassGuid: *const GUID,
+ Property: DWORD,
+ PropertyBuffer: *const BYTE,
+ PropertyBufferSize: DWORD,
+ MachineName: PCSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiSetClassRegistryPropertyW(
+ ClassGuid: *const GUID,
+ Property: DWORD,
+ PropertyBuffer: *const BYTE,
+ PropertyBufferSize: DWORD,
+ MachineName: PCWSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiGetDeviceInstallParamsA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DeviceInstallParams: PSP_DEVINSTALL_PARAMS_A,
+ ) -> BOOL;
+ pub fn SetupDiGetDeviceInstallParamsW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DeviceInstallParams: PSP_DEVINSTALL_PARAMS_W,
+ ) -> BOOL;
+ pub fn SetupDiGetClassInstallParamsA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ClassInstallParams: PSP_CLASSINSTALL_HEADER,
+ ClassInstallParamsSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetClassInstallParamsW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ClassInstallParams: PSP_CLASSINSTALL_HEADER,
+ ClassInstallParamsSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiSetDeviceInstallParamsA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DeviceInstallParams: PSP_DEVINSTALL_PARAMS_A,
+ ) -> BOOL;
+ pub fn SetupDiSetDeviceInstallParamsW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DeviceInstallParams: PSP_DEVINSTALL_PARAMS_W,
+ ) -> BOOL;
+ pub fn SetupDiSetClassInstallParamsA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ClassInstallParams: PSP_CLASSINSTALL_HEADER,
+ ClassInstallParamsSize: DWORD,
+ ) -> BOOL;
+ pub fn SetupDiSetClassInstallParamsW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ClassInstallParams: PSP_CLASSINSTALL_HEADER,
+ ClassInstallParamsSize: DWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetDriverInstallParamsA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DriverInfoData: PSP_DRVINFO_DATA_A,
+ DriverInstallParams: PSP_DRVINSTALL_PARAMS,
+ ) -> BOOL;
+ pub fn SetupDiGetDriverInstallParamsW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DriverInfoData: PSP_DRVINFO_DATA_W,
+ DriverInstallParams: PSP_DRVINSTALL_PARAMS,
+ ) -> BOOL;
+ pub fn SetupDiSetDriverInstallParamsA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DriverInfoData: PSP_DRVINFO_DATA_A,
+ DriverInstallParams: PSP_DRVINSTALL_PARAMS,
+ ) -> BOOL;
+ pub fn SetupDiSetDriverInstallParamsW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ DriverInfoData: PSP_DRVINFO_DATA_W,
+ DriverInstallParams: PSP_DRVINSTALL_PARAMS,
+ ) -> BOOL;
+ pub fn SetupDiLoadClassIcon(
+ ClassGuid: *const GUID,
+ LargeIcon: *mut HICON,
+ MiniIconIndex: PINT,
+ ) -> BOOL;
+ pub fn SetupDiLoadDeviceIcon(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ cxIcon: UINT,
+ cyIcon: UINT,
+ Flags: DWORD,
+ hIcon: *mut HICON,
+ ) -> BOOL;
+}
+pub const DMI_MASK: DWORD = 0x00000001;
+pub const DMI_BKCOLOR: DWORD = 0x00000002;
+pub const DMI_USERECT: DWORD = 0x00000004;
+extern "system" {
+ pub fn SetupDiDrawMiniIcon(
+ hdc: HDC,
+ rc: RECT,
+ MiniIconIndex: INT,
+ Flags: DWORD,
+ ) -> INT;
+ pub fn SetupDiGetClassBitmapIndex(
+ ClassGuid: *const GUID,
+ MiniIconIndex: PINT,
+ ) -> BOOL;
+ pub fn SetupDiGetClassImageList(
+ ClassImageListData: PSP_CLASSIMAGELIST_DATA,
+ ) -> BOOL;
+ pub fn SetupDiGetClassImageListExA(
+ ClassImageListData: PSP_CLASSIMAGELIST_DATA,
+ MachineName: PCSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiGetClassImageListExW(
+ ClassImageListData: PSP_CLASSIMAGELIST_DATA,
+ MachineName: PCWSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiGetClassImageIndex(
+ ClassImageListData: PSP_CLASSIMAGELIST_DATA,
+ ClassGuid: *const GUID,
+ ImageIndex: PINT,
+ ) -> BOOL;
+ pub fn SetupDiDestroyClassImageList(
+ ClassImageListData: PSP_CLASSIMAGELIST_DATA,
+ ) -> BOOL;
+}
+pub const DIGCDP_FLAG_BASIC: DWORD = 0x00000001;
+pub const DIGCDP_FLAG_ADVANCED: DWORD = 0x00000002;
+pub const DIGCDP_FLAG_REMOTE_BASIC: DWORD = 0x00000003;
+pub const DIGCDP_FLAG_REMOTE_ADVANCED: DWORD = 0x00000004;
+extern "system" {
+ pub fn SetupDiGetClassDevPropertySheetsA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ PropertySheetHeader: LPPROPSHEETHEADERA,
+ PropertySheetHeaderPageListSize: DWORD,
+ RequiredSize: PDWORD,
+ PropertySheetType: DWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetClassDevPropertySheetsW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ PropertySheetHeader: LPPROPSHEETHEADERW,
+ PropertySheetHeaderPageListSize: DWORD,
+ RequiredSize: PDWORD,
+ PropertySheetType: DWORD,
+ ) -> BOOL;
+}
+pub const IDI_RESOURCEFIRST: c_int = 159;
+pub const IDI_RESOURCE: c_int = 159;
+pub const IDI_RESOURCELAST: c_int = 161;
+pub const IDI_RESOURCEOVERLAYFIRST: c_int = 161;
+pub const IDI_RESOURCEOVERLAYLAST: c_int = 161;
+pub const IDI_CONFLICT: c_int = 161;
+pub const IDI_CLASSICON_OVERLAYFIRST: c_int = 500;
+pub const IDI_CLASSICON_OVERLAYLAST: c_int = 502;
+pub const IDI_PROBLEM_OVL: c_int = 500;
+pub const IDI_DISABLED_OVL: c_int = 501;
+pub const IDI_FORCED_OVL: c_int = 502;
+extern "system" {
+ pub fn SetupDiAskForOEMDisk(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiSelectOEMDrv(
+ hwndParent: HWND,
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiClassNameFromGuidA(
+ ClassGuid: *const GUID,
+ ClassName: PSTR,
+ ClassNameSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiClassNameFromGuidW(
+ ClassGuid: *const GUID,
+ ClassName: PWSTR,
+ ClassNameSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiClassNameFromGuidExA(
+ ClassGuid: *const GUID,
+ ClassName: PSTR,
+ ClassNameSize: DWORD,
+ RequiredSize: PDWORD,
+ MachineName: PCSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiClassNameFromGuidExW(
+ ClassGuid: *const GUID,
+ ClassName: PWSTR,
+ ClassNameSize: DWORD,
+ RequiredSize: PDWORD,
+ MachineName: PCWSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiClassGuidsFromNameA(
+ ClassName: PCSTR,
+ ClassGuidList: LPGUID,
+ ClassGuidListSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiClassGuidsFromNameW(
+ ClassName: PCWSTR,
+ ClassGuidList: LPGUID,
+ ClassGuidListSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiClassGuidsFromNameExA(
+ ClassName: PCSTR,
+ ClassGuidList: LPGUID,
+ ClassGuidListSize: DWORD,
+ RequiredSize: PDWORD,
+ MachineName: PCSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiClassGuidsFromNameExW(
+ ClassName: PCWSTR,
+ ClassGuidList: LPGUID,
+ ClassGuidListSize: DWORD,
+ RequiredSize: PDWORD,
+ MachineName: PCWSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiGetHwProfileFriendlyNameA(
+ HwProfile: DWORD,
+ FriendlyName: PSTR,
+ FriendlyNameSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetHwProfileFriendlyNameW(
+ HwProfile: DWORD,
+ FriendlyName: PWSTR,
+ FriendlyNameSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetHwProfileFriendlyNameExA(
+ HwProfile: DWORD,
+ FriendlyName: PSTR,
+ FriendlyNameSize: DWORD,
+ RequiredSize: PDWORD,
+ MachineName: PCSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiGetHwProfileFriendlyNameExW(
+ HwProfile: DWORD,
+ FriendlyName: PWSTR,
+ FriendlyNameSize: DWORD,
+ RequiredSize: PDWORD,
+ MachineName: PCWSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+}
+pub const SPWPT_SELECTDEVICE: DWORD = 0x00000001;
+pub const SPWP_USE_DEVINFO_DATA: DWORD = 0x00000001;
+extern "system" {
+ pub fn SetupDiGetWizardPage(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ InstallWizardData: PSP_INSTALLWIZARD_DATA,
+ PageType: DWORD,
+ Flags: DWORD,
+ ) -> HPROPSHEETPAGE;
+ pub fn SetupDiGetSelectedDevice(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiSetSelectedDevice(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ ) -> BOOL;
+ pub fn SetupDiGetActualModelsSectionA(
+ Context: PINFCONTEXT,
+ AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
+ InfSectionWithExt: PSTR,
+ InfSectionWithExtSize: DWORD,
+ RequiredSize: PDWORD,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiGetActualModelsSectionW(
+ Context: PINFCONTEXT,
+ AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
+ InfSectionWithExt: PWSTR,
+ InfSectionWithExtSize: DWORD,
+ RequiredSize: PDWORD,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiGetActualSectionToInstallA(
+ InfHandle: HINF,
+ InfSectionName: PCSTR,
+ InfSectionWithExt: PSTR,
+ InfSectionWithExtSize: DWORD,
+ RequiredSize: PDWORD,
+ Extension: *mut PSTR,
+ ) -> BOOL;
+ pub fn SetupDiGetActualSectionToInstallW(
+ InfHandle: HINF,
+ InfSectionName: PCWSTR,
+ InfSectionWithExt: PWSTR,
+ InfSectionWithExtSize: DWORD,
+ RequiredSize: PDWORD,
+ Extension: *mut PWSTR,
+ ) -> BOOL;
+ pub fn SetupDiGetActualSectionToInstallExA(
+ InfHandle: HINF,
+ InfSectionName: PCSTR,
+ AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
+ InfSectionWithExt: PSTR,
+ InfSectionWithExtSize: DWORD,
+ RequiredSize: PDWORD,
+ Extension: *mut PSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupDiGetActualSectionToInstallExW(
+ InfHandle: HINF,
+ InfSectionName: PCWSTR,
+ AlternatePlatformInfo: PSP_ALTPLATFORM_INFO,
+ InfSectionWithExt: PWSTR,
+ InfSectionWithExtSize: DWORD,
+ RequiredSize: PDWORD,
+ Extension: *mut PWSTR,
+ Reserved: PVOID,
+ ) -> BOOL;
+ pub fn SetupEnumInfSectionsA(
+ InfHandle: HINF,
+ Index: UINT,
+ Buffer: PSTR,
+ Size: UINT,
+ SizeNeeded: *mut UINT,
+ ) -> BOOL;
+ pub fn SetupEnumInfSectionsW(
+ InfHandle: HINF,
+ Index: UINT,
+ Buffer: PWSTR,
+ Size: UINT,
+ SizeNeeded: *mut UINT,
+ ) -> BOOL;
+}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INF_SIGNER_INFO_V1_A {
+ cbSize: DWORD,
+ CatalogFile: [CHAR; MAX_PATH],
+ DigitalSigner: [CHAR; MAX_PATH],
+ DigitalSignerVersion: [CHAR; MAX_PATH],
+}}
+pub type PSP_INF_SIGNER_INFO_V1_A = *mut SP_INF_SIGNER_INFO_V1_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INF_SIGNER_INFO_V1_W {
+ cbSize: DWORD,
+ CatalogFile: [WCHAR; MAX_PATH],
+ DigitalSigner: [WCHAR; MAX_PATH],
+ DigitalSignerVersion: [WCHAR; MAX_PATH],
+}}
+pub type PSP_INF_SIGNER_INFO_V1_W = *mut SP_INF_SIGNER_INFO_V1_W;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INF_SIGNER_INFO_V2_A {
+ cbSize: DWORD,
+ CatalogFile: [CHAR; MAX_PATH],
+ DigitalSigner: [CHAR; MAX_PATH],
+ DigitalSignerVersion: [CHAR; MAX_PATH],
+ SignerScore: DWORD,
+}}
+pub type PSP_INF_SIGNER_INFO_V2_A = *mut SP_INF_SIGNER_INFO_V2_A;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SP_INF_SIGNER_INFO_V2_W {
+ cbSize: DWORD,
+ CatalogFile: [WCHAR; MAX_PATH],
+ DigitalSigner: [WCHAR; MAX_PATH],
+ DigitalSignerVersion: [WCHAR; MAX_PATH],
+ SignerScore: DWORD,
+}}
+pub type PSP_INF_SIGNER_INFO_V2_W = *mut SP_INF_SIGNER_INFO_V2_W;
+pub const SIGNERSCORE_UNKNOWN: DWORD = 0xFF000000;
+pub const SIGNERSCORE_W9X_SUSPECT: DWORD = 0xC0000000;
+pub const SIGNERSCORE_UNSIGNED: DWORD = 0x80000000;
+pub const SIGNERSCORE_AUTHENTICODE: DWORD = 0x0F000000;
+pub const SIGNERSCORE_WHQL: DWORD = 0x0D000005;
+pub const SIGNERSCORE_UNCLASSIFIED: DWORD = 0x0D000004;
+pub const SIGNERSCORE_INBOX: DWORD = 0x0D000003;
+pub const SIGNERSCORE_LOGO_STANDARD: DWORD = 0x0D000002;
+pub const SIGNERSCORE_LOGO_PREMIUM: DWORD = 0x0D000001;
+pub const SIGNERSCORE_MASK: DWORD = 0xFF000000;
+pub const SIGNERSCORE_SIGNED_MASK: DWORD = 0xF0000000;
+pub type SP_INF_SIGNER_INFO_A = SP_INF_SIGNER_INFO_V2_A;
+pub type PSP_INF_SIGNER_INFO_A = PSP_INF_SIGNER_INFO_V2_A;
+pub type SP_INF_SIGNER_INFO_W = SP_INF_SIGNER_INFO_V2_W;
+pub type PSP_INF_SIGNER_INFO_W = PSP_INF_SIGNER_INFO_V2_W;
+extern "system" {
+ pub fn SetupVerifyInfFileA(
+ InfName: PCSTR,
+ AltPlatformInfo: PSP_ALTPLATFORM_INFO,
+ InfSignerInfo: PSP_INF_SIGNER_INFO_A,
+ ) -> BOOL;
+ pub fn SetupVerifyInfFileW(
+ InfName: PCWSTR,
+ AltPlatformInfo: PSP_ALTPLATFORM_INFO,
+ InfSignerInfo: PSP_INF_SIGNER_INFO_W,
+ ) -> BOOL;
+}
+pub const DICUSTOMDEVPROP_MERGE_MULTISZ: DWORD = 0x00000001;
+extern "system" {
+ pub fn SetupDiGetCustomDevicePropertyA(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ CustomPropertyName: PCSTR,
+ Flags: DWORD,
+ PropertyRegDataType: PDWORD,
+ PropertyBuffer: PBYTE,
+ PropertyBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+ pub fn SetupDiGetCustomDevicePropertyW(
+ DeviceInfoSet: HDEVINFO,
+ DeviceInfoData: PSP_DEVINFO_DATA,
+ CustomPropertyName: PCWSTR,
+ Flags: DWORD,
+ PropertyRegDataType: PDWORD,
+ PropertyBuffer: PBYTE,
+ PropertyBufferSize: DWORD,
+ RequiredSize: PDWORD,
+ ) -> BOOL;
+}
+pub const SCWMI_CLOBBER_SECURITY: DWORD = 0x00000001;
+extern "system" {
+ pub fn SetupConfigureWmiFromInfSectionA(
+ InfHandle: HINF,
+ SectionName: PCSTR,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn SetupConfigureWmiFromInfSectionW(
+ InfHandle: HINF,
+ SectionName: PCWSTR,
+ Flags: DWORD,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/shellapi.rs b/vendor/winapi/src/um/shellapi.rs
new file mode 100644
index 000000000..2c961c4c5
--- /dev/null
+++ b/vendor/winapi/src/um/shellapi.rs
@@ -0,0 +1,923 @@
+// 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
+//! SHELL.DLL functions, types, and definitions
+use ctypes::{__int64, c_int, c_void};
+use shared::basetsd::{DWORD_PTR, UINT_PTR};
+use shared::guiddef::{GUID, REFIID};
+use shared::minwindef::{
+ BOOL, DWORD, FILETIME, HINSTANCE, HKEY, INT, LPARAM, LPVOID, MAX_PATH, UINT, ULONG, WORD,
+};
+use shared::windef::{HICON, HWND, POINT, RECT};
+use um::minwinbase::LPSECURITY_ATTRIBUTES;
+use um::processthreadsapi::{LPPROCESS_INFORMATION, LPSTARTUPINFOW};
+use um::winnt::{
+ CHAR, HANDLE, HRESULT, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PCSTR, PCWSTR, PCZZSTR, PCZZWSTR, PWSTR,
+ PZZSTR, PZZWSTR, ULARGE_INTEGER, WCHAR,
+};
+use um::winuser::WM_USER;
+DECLARE_HANDLE!{HDROP, HDROP__}
+extern "system" {
+ pub fn DragQueryFileA(
+ hDrop: HDROP,
+ iFile: UINT,
+ lpszFile: LPSTR,
+ cch: UINT,
+ ) -> UINT;
+ pub fn DragQueryFileW(
+ hDrop: HDROP,
+ iFile: UINT,
+ lpszFile: LPWSTR,
+ cch: UINT,
+ ) -> UINT;
+ pub fn DragQueryPoint(
+ hDrop: HDROP,
+ lppt: *mut POINT,
+ ) -> BOOL;
+ pub fn DragFinish(
+ hDrop: HDROP,
+ );
+ pub fn DragAcceptFiles(
+ hWnd: HWND,
+ fAccept: BOOL,
+ );
+ pub fn ShellExecuteA(
+ hwnd: HWND,
+ lpOperation: LPCSTR,
+ lpFile: LPCSTR,
+ lpParameters: LPCSTR,
+ lpDirectory: LPCSTR,
+ nShowCmd: c_int,
+ ) -> HINSTANCE;
+ pub fn ShellExecuteW(
+ hwnd: HWND,
+ lpOperation: LPCWSTR,
+ lpFile: LPCWSTR,
+ lpParameters: LPCWSTR,
+ lpDirectory: LPCWSTR,
+ nShowCmd: c_int,
+ ) -> HINSTANCE;
+ pub fn FindExecutableA(
+ lpFile: LPCSTR,
+ lpDirectory: LPCSTR,
+ lpResult: LPSTR,
+ ) -> HINSTANCE;
+ pub fn FindExecutableW(
+ lpFile: LPCWSTR,
+ lpDirectory: LPCWSTR,
+ lpResult: LPWSTR,
+ ) -> HINSTANCE;
+ pub fn CommandLineToArgvW(
+ lpCmdLine: LPCWSTR,
+ pNumArgs: *mut c_int,
+ ) -> *mut LPWSTR;
+ pub fn ShellAboutA(
+ hWnd: HWND,
+ szApp: LPCSTR,
+ szOtherStuff: LPCSTR,
+ hIcon: HICON,
+ ) -> INT;
+ pub fn ShellAboutW(
+ hWnd: HWND,
+ szApp: LPCWSTR,
+ szOtherStuff: LPCWSTR,
+ hIcon: HICON,
+ ) -> INT;
+ pub fn DuplicateIcon(
+ hInst: HINSTANCE,
+ hIcon: HICON,
+ ) -> HICON;
+ pub fn ExtractAssociatedIconA(
+ hInst: HINSTANCE,
+ pszIconPath: LPSTR,
+ piIcon: *mut WORD,
+ ) -> HICON;
+ pub fn ExtractAssociatedIconW(
+ hInst: HINSTANCE,
+ pszIconPath: LPWSTR,
+ piIcon: *mut WORD,
+ ) -> HICON;
+ pub fn ExtractAssociatedIconExA(
+ hInst: HINSTANCE,
+ pszIconPath: LPSTR,
+ piIconIndex: *mut WORD,
+ piIconId: *mut WORD,
+ ) -> HICON;
+ pub fn ExtractAssociatedIconExW(
+ hInst: HINSTANCE,
+ pszIconPath: LPWSTR,
+ piIconIndex: *mut WORD,
+ piIconId: *mut WORD,
+ ) -> HICON;
+ pub fn ExtractIconA(
+ hInst: HINSTANCE,
+ pszExeFileName: LPCSTR,
+ nIconIndex: UINT,
+ ) -> HICON;
+ pub fn ExtractIconW(
+ hInst: HINSTANCE,
+ pszExeFileName: LPCWSTR,
+ nIconIndex: UINT,
+ ) -> HICON;
+}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct DRAGINFOA {
+ uSize: UINT,
+ pt: POINT,
+ fNC: BOOL,
+ lpFileList: PZZSTR,
+ grfKeyState: DWORD,
+}}
+pub type LPDRAGINFOA = *mut DRAGINFOA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct DRAGINFOW {
+ uSize: UINT,
+ pt: POINT,
+ fNC: BOOL,
+ lpFileList: PZZWSTR,
+ grfKeyState: DWORD,
+}}
+pub type LPDRAGINFOW = *mut DRAGINFOW;
+pub const ABM_NEW: DWORD = 0x00000000;
+pub const ABM_REMOVE: DWORD = 0x00000001;
+pub const ABM_QUERYPOS: DWORD = 0x00000002;
+pub const ABM_SETPOS: DWORD = 0x00000003;
+pub const ABM_GETSTATE: DWORD = 0x00000004;
+pub const ABM_GETTASKBARPOS: DWORD = 0x00000005;
+pub const ABM_ACTIVATE: DWORD = 0x00000006;
+pub const ABM_GETAUTOHIDEBAR: DWORD = 0x00000007;
+pub const ABM_SETAUTOHIDEBAR: DWORD = 0x00000008;
+pub const ABM_WINDOWPOSCHANGED: DWORD = 0x0000009;
+pub const ABM_SETSTATE: DWORD = 0x0000000a;
+pub const ABM_GETAUTOHIDEBAREX: DWORD = 0x0000000b;
+pub const ABM_SETAUTOHIDEBAREX: DWORD = 0x0000000c;
+pub const ABN_STATECHANGE: DWORD = 0x0000000;
+pub const ABN_POSCHANGED: DWORD = 0x0000001;
+pub const ABN_FULLSCREENAPP: DWORD = 0x0000002;
+pub const ABN_WINDOWARRANGE: DWORD = 0x0000003;
+pub const ABS_AUTOHIDE: UINT = 0x0000001;
+pub const ABS_ALWAYSONTOP: UINT = 0x0000002;
+pub const ABE_LEFT: UINT = 0;
+pub const ABE_TOP: UINT = 1;
+pub const ABE_RIGHT: UINT = 2;
+pub const ABE_BOTTOM: UINT = 3;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct APPBARDATA {
+ cbSize: DWORD,
+ hWnd: HWND,
+ uCallbackMessage: UINT,
+ uEdge: UINT,
+ rc: RECT,
+ lParam: LPARAM,
+}}
+pub type PAPPBARDATA = *mut APPBARDATA;
+extern "system" {
+ pub fn SHAppBarMessage(
+ dwMessage: DWORD,
+ pData: PAPPBARDATA,
+ ) -> UINT_PTR;
+ pub fn DoEnvironmentSubstA(
+ pszSrc: LPSTR,
+ cchSrc: UINT,
+ ) -> DWORD;
+ pub fn DoEnvironmentSubstW(
+ pszSrc: LPWSTR,
+ cchSrc: UINT,
+ ) -> DWORD;
+ pub fn ExtractIconExA(
+ lpszFile: LPCSTR,
+ nIconIndex: c_int,
+ phiconLarge: *mut HICON,
+ phiconSmall: *mut HICON,
+ nIcons: UINT,
+ ) -> UINT;
+ pub fn ExtractIconExW(
+ lpszFile: LPCWSTR,
+ nIconIndex: c_int,
+ phiconLarge: *mut HICON,
+ phiconSmall: *mut HICON,
+ nIcons: UINT,
+ ) -> UINT;
+}
+pub const FO_MOVE: WORD = 0x0001;
+pub const FO_COPY: WORD = 0x0002;
+pub const FO_DELETE: WORD = 0x0003;
+pub const FO_RENAME: WORD = 0x0004;
+pub const FOF_MULTIDESTFILES: WORD = 0x0001;
+pub const FOF_CONFIRMMOUSE: WORD = 0x0002;
+pub const FOF_SILENT: WORD = 0x0004;
+pub const FOF_RENAMEONCOLLISION: WORD = 0x0008;
+pub const FOF_NOCONFIRMATION: WORD = 0x0010;
+pub const FOF_WANTMAPPINGHANDLE: WORD = 0x0020;
+pub const FOF_ALLOWUNDO: WORD = 0x0040;
+pub const FOF_FILESONLY: WORD = 0x0080;
+pub const FOF_SIMPLEPROGRESS: WORD = 0x0100;
+pub const FOF_NOCONFIRMMKDIR: WORD = 0x0200;
+pub const FOF_NOERRORUI: WORD = 0x0400;
+pub const FOF_NOCOPYSECURITYATTRIBS: WORD = 0x0800;
+pub const FOF_NORECURSION: WORD = 0x1000;
+pub const FOF_NO_CONNECTED_ELEMENTS: WORD = 0x2000;
+pub const FOF_WANTNUKEWARNING: WORD = 0x4000;
+pub const FOF_NORECURSEREPARSE: WORD = 0x8000;
+pub const FOF_NO_UI: WORD = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR;
+pub type FILEOP_FLAGS = WORD;
+pub const PO_DELETE: WORD = 0x0013;
+pub const PO_RENAME: WORD = 0x0014;
+pub const PO_PORTCHANGE: WORD = 0x0020;
+pub const PO_REN_PORT: WORD = 0x0034;
+pub type PRINTEROP_FLAGS = WORD;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SHFILEOPSTRUCTA {
+ hwnd: HWND,
+ wFunc: UINT,
+ pFrom: PCZZSTR,
+ pTo: PCZZSTR,
+ fFlags: FILEOP_FLAGS,
+ fAnyOperationsAborted: BOOL,
+ hNameMappings: LPVOID,
+ lpszProgressTitle: PCSTR,
+}}
+pub type LPSHFILEOPSTRUCTA = *mut SHFILEOPSTRUCTA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SHFILEOPSTRUCTW {
+ hwnd: HWND,
+ wFunc: UINT,
+ pFrom: PCZZWSTR,
+ pTo: PCZZWSTR,
+ fFlags: FILEOP_FLAGS,
+ fAnyOperationsAborted: BOOL,
+ hNameMappings: LPVOID,
+ lpszProgressTitle: PCWSTR,
+}}
+pub type LPSHFILEOPSTRUCTW = *mut SHFILEOPSTRUCTW;
+extern "system" {
+ pub fn SHFileOperationA(
+ lpFileOp: LPSHFILEOPSTRUCTA,
+ ) -> c_int;
+ pub fn SHFileOperationW(
+ lpFileOp: LPSHFILEOPSTRUCTW,
+ ) -> c_int;
+ pub fn SHFreeNameMappings(
+ hNameMappings: HANDLE,
+ );
+}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SHNAMEMAPPINGA {
+ pszOldPath: LPSTR,
+ pszNewPath: LPSTR,
+ cchOldPath: c_int,
+ cchNewPath: c_int,
+}}
+pub type LPSHNAMEMAPPINGA = *mut SHNAMEMAPPINGA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SHNAMEMAPPINGW {
+ pszOldPath: LPWSTR,
+ pszNewPath: LPWSTR,
+ cchOldPath: c_int,
+ cchNewPath: c_int,
+}}
+pub type LPSHNAMEMAPPINGW = *mut SHNAMEMAPPINGW;
+pub const SE_ERR_FNF: DWORD = 2;
+pub const SE_ERR_PNF: DWORD = 3;
+pub const SE_ERR_ACCESSDENIED: DWORD = 5;
+pub const SE_ERR_OOM: DWORD = 8;
+pub const SE_ERR_DLLNOTFOUND: DWORD = 32;
+pub const SE_ERR_SHARE: DWORD = 26;
+pub const SE_ERR_ASSOCINCOMPLETE: DWORD = 27;
+pub const SE_ERR_DDETIMEOUT: DWORD = 28;
+pub const SE_ERR_DDEFAIL: DWORD = 29;
+pub const SE_ERR_DDEBUSY: DWORD = 30;
+pub const SE_ERR_NOASSOC: DWORD = 31;
+pub const SEE_MASK_DEFAULT: DWORD = 0x00000000;
+pub const SEE_MASK_CLASSNAME: DWORD = 0x00000001;
+pub const SEE_MASK_CLASSKEY: DWORD = 0x00000003;
+pub const SEE_MASK_IDLIST: DWORD = 0x00000004;
+pub const SEE_MASK_INVOKEIDLIST: DWORD = 0x0000000c;
+pub const SEE_MASK_ICON: DWORD = 0x00000010;
+pub const SEE_MASK_HOTKEY: DWORD = 0x00000020;
+pub const SEE_MASK_NOCLOSEPROCESS: DWORD = 0x00000040;
+pub const SEE_MASK_CONNECTNETDRV: DWORD = 0x00000080;
+pub const SEE_MASK_NOASYNC: DWORD = 0x00000100;
+pub const SEE_MASK_FLAG_DDEWAIT: DWORD = SEE_MASK_NOASYNC;
+pub const SEE_MASK_DOENVSUBST: DWORD = 0x00000200;
+pub const SEE_MASK_FLAG_NO_UI: DWORD = 0x00000400;
+pub const SEE_MASK_UNICODE: DWORD = 0x00004000;
+pub const SEE_MASK_NO_CONSOLE: DWORD = 0x00008000;
+pub const SEE_MASK_ASYNCOK: DWORD = 0x00100000;
+pub const SEE_MASK_HMONITOR: DWORD = 0x00200000;
+pub const SEE_MASK_NOZONECHECKS: DWORD = 0x00800000;
+pub const SEE_MASK_NOQUERYCLASSSTORE: DWORD = 0x01000000;
+pub const SEE_MASK_WAITFORINPUTIDLE: DWORD = 0x02000000;
+pub const SEE_MASK_FLAG_LOG_USAGE: DWORD = 0x04000000;
+pub const SEE_MASK_FLAG_HINST_IS_SITE: DWORD = 0x08000000;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SHELLEXECUTEINFOA {
+ cbSize: DWORD,
+ fMask: ULONG,
+ hwnd: HWND,
+ lpVerb: LPCSTR,
+ lpFile: LPCSTR,
+ lpParameters: LPCSTR,
+ lpDirectory: LPCSTR,
+ nShow: c_int,
+ hInstApp: HINSTANCE,
+ lpIDList: *mut c_void,
+ lpClass: LPCSTR,
+ hkeyClass: HKEY,
+ dwHotKey: DWORD,
+ hMonitor: HANDLE,
+ hProcess: HANDLE,
+}}
+pub type LPSHELLEXECUTEINFOA = *mut SHELLEXECUTEINFOA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SHELLEXECUTEINFOW {
+ cbSize: DWORD,
+ fMask: ULONG,
+ hwnd: HWND,
+ lpVerb: LPCWSTR,
+ lpFile: LPCWSTR,
+ lpParameters: LPCWSTR,
+ lpDirectory: LPCWSTR,
+ nShow: c_int,
+ hInstApp: HINSTANCE,
+ lpIDList: *mut c_void,
+ lpClass: LPCWSTR,
+ hkeyClass: HKEY,
+ dwHotKey: DWORD,
+ hMonitor: HANDLE,
+ hProcess: HANDLE,
+}}
+pub type LPSHELLEXECUTEINFOW = *mut SHELLEXECUTEINFOW;
+extern "system" {
+ pub fn ShellExecuteExA(
+ pExecInfo: *mut SHELLEXECUTEINFOA,
+ ) -> BOOL;
+ pub fn ShellExecuteExW(
+ pExecInfo: *mut SHELLEXECUTEINFOW,
+ ) -> BOOL;
+}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SHCREATEPROCESSINFOW {
+ cbSize: DWORD,
+ fMask: ULONG,
+ hwnd: HWND,
+ pszFile: LPCWSTR,
+ pszParameters: LPCWSTR,
+ pszCurrentDirectory: LPCWSTR,
+ hUserToken: HANDLE,
+ lpProcessAttributes: LPSECURITY_ATTRIBUTES,
+ lpThreadAttributes: LPSECURITY_ATTRIBUTES,
+ bInheritHandles: BOOL,
+ dwCreationFlags: DWORD,
+ lpStartupInfo: LPSTARTUPINFOW,
+ lpProcessInformation: LPPROCESS_INFORMATION,
+}}
+pub type PSHCREATEPROCESSINFOW = *mut SHCREATEPROCESSINFOW;
+extern "system" {
+ pub fn SHCreateProcessAsUserW(
+ pscpi: PSHCREATEPROCESSINFOW,
+ ) -> BOOL;
+ pub fn SHEvaluateSystemCommandTemplate(
+ pszCmdTemplate: PCWSTR,
+ ppszApplication: *mut PWSTR,
+ ppszCommandLine: *mut PWSTR,
+ ppszParameters: *mut PWSTR,
+ ) -> HRESULT;
+}
+ENUM!{enum ASSOCCLASS {
+ ASSOCCLASS_SHELL_KEY = 0,
+ ASSOCCLASS_PROGID_KEY,
+ ASSOCCLASS_PROGID_STR,
+ ASSOCCLASS_CLSID_KEY,
+ ASSOCCLASS_CLSID_STR,
+ ASSOCCLASS_APP_KEY,
+ ASSOCCLASS_APP_STR,
+ ASSOCCLASS_SYSTEM_STR,
+ ASSOCCLASS_FOLDER,
+ ASSOCCLASS_STAR,
+ ASSOCCLASS_FIXED_PROGID_STR,
+ ASSOCCLASS_PROTOCOL_STR,
+}}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct ASSOCIATIONELEMENT {
+ ac: ASSOCCLASS,
+ hkClass: HKEY,
+ pszClass: PCWSTR,
+}}
+extern "system" {
+ pub fn AssocCreateForClasses(
+ rgClasses: *const ASSOCIATIONELEMENT,
+ cClasses: ULONG,
+ riid: REFIID,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT;
+}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SHQUERYRBINFO {
+ cbSize: DWORD,
+ i64Size: __int64,
+ i64NumItems: __int64,
+}}
+pub type LPSHQUERYRBINFO = *mut SHQUERYRBINFO;
+pub const SHERB_NOCONFIRMATION: DWORD = 0x00000001;
+pub const SHERB_NOPROGRESSUI: DWORD = 0x00000002;
+pub const SHERB_NOSOUND: DWORD = 0x00000004;
+extern "system" {
+ pub fn SHQueryRecycleBinA(
+ pszRootPath: LPCSTR,
+ pSHQueryRBInfo: LPSHQUERYRBINFO,
+ ) -> HRESULT;
+ pub fn SHQueryRecycleBinW(
+ pszRootPath: LPCWSTR,
+ pSHQueryRBInfo: LPSHQUERYRBINFO,
+ ) -> HRESULT;
+ pub fn SHEmptyRecycleBinA(
+ hwnd: HWND,
+ pszRootPath: LPCSTR,
+ dwFlags: DWORD,
+ ) -> HRESULT;
+ pub fn SHEmptyRecycleBinW(
+ hwnd: HWND,
+ pszRootPath: LPCWSTR,
+ dwFlags: DWORD,
+ ) -> HRESULT;
+}
+ENUM!{enum QUERY_USER_NOTIFICATION_STATE {
+ QUNS_NOT_PRESENT = 1,
+ QUNS_BUSY = 2,
+ QUNS_RUNNING_D3D_FULL_SCREEN = 3,
+ QUNS_PRESENTATION_MODE = 4,
+ QUNS_ACCEPTS_NOTIFICATIONS = 5,
+ QUNS_QUIET_TIME = 6,
+ QUNS_APP = 7,
+}}
+extern "system" {
+ pub fn SHQueryUserNotificationState(
+ pquns: *mut QUERY_USER_NOTIFICATION_STATE,
+ ) -> HRESULT;
+ pub fn SHGetPropertyStoreForWindow(
+ hwnd: HWND,
+ riid: REFIID,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT;
+}
+UNION!{#[cfg_attr(target_arch = "x86", repr(packed))] union NOTIFYICONDATAA_u {
+ [u32; 1],
+ uTimeout uTimeout_mut: UINT,
+ uVersion uVersion_mut: UINT,
+}}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct NOTIFYICONDATAA {
+ cbSize: DWORD,
+ hWnd: HWND,
+ uID: UINT,
+ uFlags: UINT,
+ uCallbackMessage: UINT,
+ hIcon: HICON,
+ szTip: [CHAR; 128],
+ dwState: DWORD,
+ dwStateMask: DWORD,
+ szInfo: [CHAR; 256],
+ u: NOTIFYICONDATAA_u,
+ szInfoTitle: [CHAR; 64],
+ dwInfoFlags: DWORD,
+ guidItem: GUID,
+ hBalloonIcon: HICON,
+}}
+pub type PNOTIFYICONDATAA = *mut NOTIFYICONDATAA;
+UNION!{#[cfg_attr(target_arch = "x86", repr(packed))] union NOTIFYICONDATAW_u {
+ [u32; 1],
+ uTimeout uTimeout_mut: UINT,
+ uVersion uVersion_mut: UINT,
+}}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct NOTIFYICONDATAW {
+ cbSize: DWORD,
+ hWnd: HWND,
+ uID: UINT,
+ uFlags: UINT,
+ uCallbackMessage: UINT,
+ hIcon: HICON,
+ szTip: [WCHAR; 128],
+ dwState: DWORD,
+ dwStateMask: DWORD,
+ szInfo: [WCHAR; 256],
+ u: NOTIFYICONDATAW_u,
+ szInfoTitle: [WCHAR; 64],
+ dwInfoFlags: DWORD,
+ guidItem: GUID,
+ hBalloonIcon: HICON,
+}}
+pub type PNOTIFYICONDATAW = *mut NOTIFYICONDATAW;
+pub const NIN_SELECT: DWORD = WM_USER + 0;
+pub const NINF_KEY: DWORD = 0x1;
+pub const NIN_KEYSELECT: DWORD = NIN_SELECT | NINF_KEY;
+pub const NIN_BALLOONSHOW: DWORD = WM_USER + 2;
+pub const NIN_BALLOONHIDE: DWORD = WM_USER + 3;
+pub const NIN_BALLOONTIMEOUT: DWORD = WM_USER + 4;
+pub const NIN_BALLOONUSERCLICK: DWORD = WM_USER + 5;
+pub const NIN_POPUPOPEN: DWORD = WM_USER + 6;
+pub const NIN_POPUPCLOSE: DWORD = WM_USER + 7;
+pub const NIM_ADD: DWORD = 0x00000000;
+pub const NIM_MODIFY: DWORD = 0x00000001;
+pub const NIM_DELETE: DWORD = 0x00000002;
+pub const NIM_SETFOCUS: DWORD = 0x00000003;
+pub const NIM_SETVERSION: DWORD = 0x00000004;
+pub const NOTIFYICON_VERSION: DWORD = 3;
+pub const NOTIFYICON_VERSION_4: DWORD = 4;
+pub const NIF_MESSAGE: DWORD = 0x00000001;
+pub const NIF_ICON: DWORD = 0x00000002;
+pub const NIF_TIP: DWORD = 0x00000004;
+pub const NIF_STATE: DWORD = 0x00000008;
+pub const NIF_INFO: DWORD = 0x00000010;
+pub const NIF_GUID: DWORD = 0x00000020;
+pub const NIF_REALTIME: DWORD = 0x00000040;
+pub const NIF_SHOWTIP: DWORD = 0x00000080;
+pub const NIS_HIDDEN: DWORD = 0x00000001;
+pub const NIS_SHAREDICON: DWORD = 0x00000002;
+pub const NIIF_NONE: DWORD = 0x00000000;
+pub const NIIF_INFO: DWORD = 0x00000001;
+pub const NIIF_WARNING: DWORD = 0x00000002;
+pub const NIIF_ERROR: DWORD = 0x00000003;
+pub const NIIF_USER: DWORD = 0x00000004;
+pub const NIIF_ICON_MASK: DWORD = 0x0000000F;
+pub const NIIF_NOSOUND: DWORD = 0x00000010;
+pub const NIIF_LARGE_ICON: DWORD = 0x00000020;
+pub const NIIF_RESPECT_QUIET_TIME: DWORD = 0x00000080;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct NOTIFYICONIDENTIFIER {
+ cbSize: DWORD,
+ hWnd: HWND,
+ uID: UINT,
+ guidItem: GUID,
+}}
+pub type PNOTIFYICONIDENTIFIER = *mut NOTIFYICONIDENTIFIER;
+extern "system" {
+ pub fn Shell_NotifyIconA(
+ dwMessage: DWORD,
+ lpData: PNOTIFYICONDATAA,
+ ) -> BOOL;
+ pub fn Shell_NotifyIconW(
+ dwMessage: DWORD,
+ lpData: PNOTIFYICONDATAW,
+ ) -> BOOL;
+ pub fn Shell_NotifyIconGetRect(
+ identifier: *const NOTIFYICONIDENTIFIER,
+ iconLocation: *mut RECT,
+ ) -> HRESULT;
+}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SHFILEINFOA {
+ hIcon: HICON,
+ iIcon: c_int,
+ dwAttributes: DWORD,
+ szDisplayName: [CHAR; MAX_PATH],
+ szTypeName: [CHAR; 80],
+}}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SHFILEINFOW {
+ hIcon: HICON,
+ iIcon: c_int,
+ dwAttributes: DWORD,
+ szDisplayName: [WCHAR; MAX_PATH],
+ szTypeName: [WCHAR; 80],
+}}
+pub const SHGFI_ICON: DWORD = 0x000000100;
+pub const SHGFI_DISPLAYNAME: DWORD = 0x000000200;
+pub const SHGFI_TYPENAME: DWORD = 0x000000400;
+pub const SHGFI_ATTRIBUTES: DWORD = 0x000000800;
+pub const SHGFI_ICONLOCATION: DWORD = 0x000001000;
+pub const SHGFI_EXETYPE: DWORD = 0x000002000;
+pub const SHGFI_SYSICONINDEX: DWORD = 0x000004000;
+pub const SHGFI_LINKOVERLAY: DWORD = 0x000008000;
+pub const SHGFI_SELECTED: DWORD = 0x000010000;
+pub const SHGFI_ATTR_SPECIFIED: DWORD = 0x000020000;
+pub const SHGFI_LARGEICON: DWORD = 0x000000000;
+pub const SHGFI_SMALLICON: DWORD = 0x000000001;
+pub const SHGFI_OPENICON: DWORD = 0x000000002;
+pub const SHGFI_SHELLICONSIZE: DWORD = 0x000000004;
+pub const SHGFI_PIDL: DWORD = 0x000000008;
+pub const SHGFI_USEFILEATTRIBUTES: DWORD = 0x000000010;
+pub const SHGFI_ADDOVERLAYS: DWORD = 0x000000020;
+pub const SHGFI_OVERLAYINDEX: DWORD = 0x000000040;
+extern "system" {
+ pub fn SHGetFileInfoA(
+ pszPath: LPCSTR,
+ dwFileAttributes: DWORD,
+ psfi: *mut SHFILEINFOA,
+ cbFileInfo: UINT,
+ uFlags: UINT,
+ ) -> DWORD_PTR;
+ pub fn SHGetFileInfoW(
+ pszPath: LPCWSTR,
+ dwFileAttributes: DWORD,
+ psfi: *mut SHFILEINFOW,
+ cbFileInfo: UINT,
+ uFlags: UINT,
+ ) -> DWORD_PTR;
+}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct SHSTOCKICONINFO {
+ cbSize: DWORD,
+ hIcon: HICON,
+ iSysImageIndex: c_int,
+ iIcon: c_int,
+ szPath: [WCHAR; MAX_PATH],
+}}
+pub const SHGSI_ICONLOCATION: DWORD = 0;
+pub const SHGSI_ICON: DWORD = SHGFI_ICON;
+pub const SHGSI_SYSICONINDEX: DWORD = SHGFI_SYSICONINDEX;
+pub const SHGSI_LINKOVERLAY: DWORD = SHGFI_LINKOVERLAY;
+pub const SHGSI_SELECTED: DWORD = SHGFI_SELECTED;
+pub const SHGSI_LARGEICON: DWORD = SHGFI_LARGEICON;
+pub const SHGSI_SMALLICON: DWORD = SHGFI_SMALLICON;
+pub const SHGSI_SHELLICONSIZE: DWORD = SHGFI_SHELLICONSIZE;
+ENUM!{enum SHSTOCKICONID {
+ SIID_DOCNOASSOC = 0,
+ SIID_DOCASSOC = 1,
+ SIID_APPLICATION = 2,
+ SIID_FOLDER = 3,
+ SIID_FOLDEROPEN = 4,
+ SIID_DRIVE525 = 5,
+ SIID_DRIVE35 = 6,
+ SIID_DRIVEREMOVE = 7,
+ SIID_DRIVEFIXED = 8,
+ SIID_DRIVENET = 9,
+ SIID_DRIVENETDISABLED = 10,
+ SIID_DRIVECD = 11,
+ SIID_DRIVERAM = 12,
+ SIID_WORLD = 13,
+ SIID_SERVER = 15,
+ SIID_PRINTER = 16,
+ SIID_MYNETWORK = 17,
+ SIID_FIND = 22,
+ SIID_HELP = 23,
+ SIID_SHARE = 28,
+ SIID_LINK = 29,
+ SIID_SLOWFILE = 30,
+ SIID_RECYCLER = 31,
+ SIID_RECYCLERFULL = 32,
+ SIID_MEDIACDAUDIO = 40,
+ SIID_LOCK = 47,
+ SIID_AUTOLIST = 49,
+ SIID_PRINTERNET = 50,
+ SIID_SERVERSHARE = 51,
+ SIID_PRINTERFAX = 52,
+ SIID_PRINTERFAXNET = 53,
+ SIID_PRINTERFILE = 54,
+ SIID_STACK = 55,
+ SIID_MEDIASVCD = 56,
+ SIID_STUFFEDFOLDER = 57,
+ SIID_DRIVEUNKNOWN = 58,
+ SIID_DRIVEDVD = 59,
+ SIID_MEDIADVD = 60,
+ SIID_MEDIADVDRAM = 61,
+ SIID_MEDIADVDRW = 62,
+ SIID_MEDIADVDR = 63,
+ SIID_MEDIADVDROM = 64,
+ SIID_MEDIACDAUDIOPLUS = 65,
+ SIID_MEDIACDRW = 66,
+ SIID_MEDIACDR = 67,
+ SIID_MEDIACDBURN = 68,
+ SIID_MEDIABLANKCD = 69,
+ SIID_MEDIACDROM = 70,
+ SIID_AUDIOFILES = 71,
+ SIID_IMAGEFILES = 72,
+ SIID_VIDEOFILES = 73,
+ SIID_MIXEDFILES = 74,
+ SIID_FOLDERBACK = 75,
+ SIID_FOLDERFRONT = 76,
+ SIID_SHIELD = 77,
+ SIID_WARNING = 78,
+ SIID_INFO = 79,
+ SIID_ERROR = 80,
+ SIID_KEY = 81,
+ SIID_SOFTWARE = 82,
+ SIID_RENAME = 83,
+ SIID_DELETE = 84,
+ SIID_MEDIAAUDIODVD = 85,
+ SIID_MEDIAMOVIEDVD = 86,
+ SIID_MEDIAENHANCEDCD = 87,
+ SIID_MEDIAENHANCEDDVD = 88,
+ SIID_MEDIAHDDVD = 89,
+ SIID_MEDIABLURAY = 90,
+ SIID_MEDIAVCD = 91,
+ SIID_MEDIADVDPLUSR = 92,
+ SIID_MEDIADVDPLUSRW = 93,
+ SIID_DESKTOPPC = 94,
+ SIID_MOBILEPC = 95,
+ SIID_USERS = 96,
+ SIID_MEDIASMARTMEDIA = 97,
+ SIID_MEDIACOMPACTFLASH = 98,
+ SIID_DEVICECELLPHONE = 99,
+ SIID_DEVICECAMERA = 100,
+ SIID_DEVICEVIDEOCAMERA = 101,
+ SIID_DEVICEAUDIOPLAYER = 102,
+ SIID_NETWORKCONNECT = 103,
+ SIID_INTERNET = 104,
+ SIID_ZIPFILE = 105,
+ SIID_SETTINGS = 106,
+ SIID_DRIVEHDDVD = 132,
+ SIID_DRIVEBD = 133,
+ SIID_MEDIAHDDVDROM = 134,
+ SIID_MEDIAHDDVDR = 135,
+ SIID_MEDIAHDDVDRAM = 136,
+ SIID_MEDIABDROM = 137,
+ SIID_MEDIABDR = 138,
+ SIID_MEDIABDRE = 139,
+ SIID_CLUSTEREDDRIVE = 140,
+ SIID_MAX_ICONS = 181,
+}}
+pub const SIID_INVALID: SHSTOCKICONID = -1i32 as u32;
+extern "system" {
+ pub fn SHGetStockIconInfo(
+ siid: SHSTOCKICONID,
+ uFlags: UINT,
+ psii: *mut SHSTOCKICONINFO,
+ ) -> HRESULT;
+ pub fn SHGetDiskFreeSpaceExA(
+ pszDirectoryName: LPCSTR,
+ pulFreeBytesAvailableToCaller: *mut ULARGE_INTEGER,
+ pulTotalNumberOfBytes: *mut ULARGE_INTEGER,
+ pulTotalNumberOfFreeBytes: *mut ULARGE_INTEGER,
+ ) -> BOOL;
+ pub fn SHGetDiskFreeSpaceExW(
+ pszDirectoryName: LPCWSTR,
+ pulFreeBytesAvailableToCaller: *mut ULARGE_INTEGER,
+ pulTotalNumberOfBytes: *mut ULARGE_INTEGER,
+ pulTotalNumberOfFreeBytes: *mut ULARGE_INTEGER,
+ ) -> BOOL;
+ pub fn SHGetNewLinkInfoA(
+ pszLinkTo: LPCSTR,
+ pszDir: LPCSTR,
+ pszName: LPSTR,
+ pfMustCopy: *mut BOOL,
+ uFlags: UINT,
+ ) -> BOOL;
+ pub fn SHGetNewLinkInfoW(
+ pszLinkTo: LPCWSTR,
+ pszDir: LPCWSTR,
+ pszName: LPWSTR,
+ pfMustCopy: *mut BOOL,
+ uFlags: UINT,
+ ) -> BOOL;
+}
+pub const SHGNLI_PIDL: DWORD = 0x000000001;
+pub const SHGNLI_PREFIXNAME: DWORD = 0x000000002;
+pub const SHGNLI_NOUNIQUE: DWORD = 0x000000004;
+pub const SHGNLI_NOLNK: DWORD = 0x000000008;
+pub const SHGNLI_NOLOCNAME: DWORD = 0x000000010;
+pub const SHGNLI_USEURLEXT: DWORD = 0x000000020;
+pub const PRINTACTION_OPEN: DWORD = 0;
+pub const PRINTACTION_PROPERTIES: DWORD = 1;
+pub const PRINTACTION_NETINSTALL: DWORD = 2;
+pub const PRINTACTION_NETINSTALLLINK: DWORD = 3;
+pub const PRINTACTION_TESTPAGE: DWORD = 4;
+pub const PRINTACTION_OPENNETPRN: DWORD = 5;
+pub const PRINTACTION_DOCUMENTDEFAULTS: DWORD = 6;
+pub const PRINTACTION_SERVERPROPERTIES: DWORD = 7;
+extern "system" {
+ pub fn SHInvokePrinterCommandA(
+ hwnd: HWND,
+ uAction: UINT,
+ lpBuf1: LPCSTR,
+ lpBuf2: LPCSTR,
+ fModal: BOOL,
+ ) -> BOOL;
+ pub fn SHInvokePrinterCommandW(
+ hwnd: HWND,
+ uAction: UINT,
+ lpBuf1: LPCWSTR,
+ lpBuf2: LPCWSTR,
+ fModal: BOOL,
+ ) -> BOOL;
+}
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OPEN_PRINTER_PROPS_INFOA {
+ dwSize: DWORD,
+ pszSheetName: LPSTR,
+ uSheetIndex: UINT,
+ dwFlags: DWORD,
+ bModal: BOOL,
+}}
+pub type POPEN_PRINTER_PROPS_INFOA = *mut OPEN_PRINTER_PROPS_INFOA;
+STRUCT!{#[cfg_attr(target_arch = "x86", repr(packed))] struct OPEN_PRINTER_PROPS_INFOW {
+ dwSize: DWORD,
+ pszSheetName: LPWSTR,
+ uSheetIndex: UINT,
+ dwFlags: DWORD,
+ bModal: BOOL,
+}}
+pub type POPEN_PRINTER_PROPS_INFOW = *mut OPEN_PRINTER_PROPS_INFOW;
+pub const PRINT_PROP_FORCE_NAME: DWORD = 0x01;
+extern "system" {
+ pub fn SHLoadNonloadedIconOverlayIdentifiers() -> HRESULT;
+ pub fn SHIsFileAvailableOffline(
+ pwszPath: PCWSTR,
+ pdwStatus: *mut DWORD,
+ ) -> HRESULT;
+}
+pub const OFFLINE_STATUS_LOCAL: DWORD = 0x0001;
+pub const OFFLINE_STATUS_REMOTE: DWORD = 0x0002;
+pub const OFFLINE_STATUS_INCOMPLETE: DWORD = 0x0004;
+extern "system" {
+ pub fn SHSetLocalizedName(
+ pszPath: PCWSTR,
+ pszResModule: PCWSTR,
+ idsRes: c_int,
+ ) -> HRESULT;
+ pub fn SHRemoveLocalizedName(
+ pszPath: PCWSTR,
+ ) -> HRESULT;
+ pub fn SHGetLocalizedName(
+ pszPath: PCWSTR,
+ pszResModule: PWSTR,
+ cch: UINT,
+ pidsRes: *mut c_int,
+ ) -> HRESULT;
+}
+extern "C" {
+ pub fn ShellMessageBoxA(
+ hAppInst: HINSTANCE,
+ hWnd: HWND,
+ lpcText: LPCSTR,
+ lpcTitle: LPCSTR,
+ fuStyle: UINT,
+ ...
+ ) -> c_int;
+ pub fn ShellMessageBoxW(
+ hAppInst: HINSTANCE,
+ hWnd: HWND,
+ lpcText: LPCWSTR,
+ lpcTitle: LPCWSTR,
+ fuStyle: UINT,
+ ...
+ ) -> c_int;
+}
+extern "system" {
+ pub fn IsLFNDriveA(
+ pszPath: LPCSTR,
+ ) -> BOOL;
+ pub fn IsLFNDriveW(
+ pszPath: LPCWSTR,
+ ) -> BOOL;
+ pub fn SHEnumerateUnreadMailAccountsA(
+ hKeyUser: HKEY,
+ dwIndex: DWORD,
+ pszMailAddress: LPSTR,
+ cchMailAddress: c_int,
+ ) -> HRESULT;
+ pub fn SHEnumerateUnreadMailAccountsW(
+ hKeyUser: HKEY,
+ dwIndex: DWORD,
+ pszMailAddress: LPWSTR,
+ cchMailAddress: c_int,
+ ) -> HRESULT;
+ pub fn SHGetUnreadMailCountA(
+ hKeyUser: HKEY,
+ pszMailAddress: LPCSTR,
+ pdwCount: *mut DWORD,
+ pFileTime: *mut FILETIME,
+ pszShellExecuteCommand: LPSTR,
+ cchShellExecuteCommand: c_int,
+ ) -> HRESULT;
+ pub fn SHGetUnreadMailCountW(
+ hKeyUser: HKEY,
+ pszMailAddress: LPCWSTR,
+ pdwCount: *mut DWORD,
+ pFileTime: *mut FILETIME,
+ pszShellExecuteCommand: LPWSTR,
+ cchShellExecuteCommand: c_int,
+ ) -> HRESULT;
+ pub fn SHSetUnreadMailCountA(
+ pszMailAddress: LPCSTR,
+ dwCount: DWORD,
+ pszShellExecuteCommand: LPCSTR,
+ ) -> HRESULT;
+ pub fn SHSetUnreadMailCountW(
+ pszMailAddress: LPCWSTR,
+ dwCount: DWORD,
+ pszShellExecuteCommand: LPCWSTR,
+ ) -> HRESULT;
+ pub fn SHTestTokenMembership(
+ hToken: HANDLE,
+ ulRID: ULONG,
+ ) -> BOOL;
+ pub fn SHGetImageList(
+ iImageList: c_int,
+ riid: REFIID,
+ ppvObj: *mut *mut c_void,
+ ) -> HRESULT;
+}
+pub const SHIL_LARGE: DWORD = 0;
+pub const SHIL_SMALL: DWORD = 1;
+pub const SHIL_EXTRALARGE: DWORD = 2;
+pub const SHIL_SYSSMALL: DWORD = 3;
+pub const SHIL_JUMBO: DWORD = 4;
+pub const SHIL_LAST: DWORD = SHIL_JUMBO;
+FN!{stdcall PFNCANSHAREFOLDERW(
+ pszPath: PCWSTR,
+) -> HRESULT}
+FN!{stdcall PFNSHOWSHAREFOLDERUIW(
+ hwndParent: HWND,
+ pszPath: PCWSTR,
+) -> HRESULT}
+pub const WC_NETADDRESS: &'static str = "msctls_netaddress";
+extern "system" {
+ pub fn InitNetworkAddressControl() -> BOOL;
+}
+// STRUCT!{struct NC_ADDRESS {
+// pAddrInfo: *mut NET_ADDRESS_INFO,
+// PortNumber: USHORT,
+// PrefixLength: BYTE,
+// }}
+// pub type PNC_ADDRESS = *mut NC_ADDRESS;
+extern "system" {
+ pub fn SHGetDriveMedia(
+ pszDrive: PCWSTR,
+ pdwMediaContent: *mut DWORD,
+ ) -> HRESULT;
+}
diff --git a/vendor/winapi/src/um/shellscalingapi.rs b/vendor/winapi/src/um/shellscalingapi.rs
new file mode 100644
index 000000000..4db4ff6fe
--- /dev/null
+++ b/vendor/winapi/src/um/shellscalingapi.rs
@@ -0,0 +1,44 @@
+// 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::minwindef::UINT;
+use shared::windef::HMONITOR;
+use um::winnt::{HANDLE, HRESULT};
+ENUM!{enum PROCESS_DPI_AWARENESS {
+ PROCESS_DPI_UNAWARE = 0,
+ PROCESS_SYSTEM_DPI_AWARE = 1,
+ PROCESS_PER_MONITOR_DPI_AWARE = 2,
+}}
+ENUM!{enum MONITOR_DPI_TYPE {
+ MDT_EFFECTIVE_DPI = 0,
+ MDT_ANGULAR_DPI = 1,
+ MDT_RAW_DPI = 2,
+ MDT_DEFAULT = MDT_EFFECTIVE_DPI,
+}}
+extern "system" {
+ pub fn SetProcessDpiAwareness(
+ value: PROCESS_DPI_AWARENESS,
+ ) -> HRESULT;
+ pub fn GetProcessDpiAwareness(
+ hProcess: HANDLE,
+ value: *mut PROCESS_DPI_AWARENESS,
+ ) -> HRESULT;
+ pub fn GetDpiForMonitor(
+ hmonitor: HMONITOR,
+ dpiType: MONITOR_DPI_TYPE,
+ dpiX: *mut UINT,
+ dpiY: *mut UINT,
+ ) -> HRESULT;
+}
+ENUM!{enum SHELL_UI_COMPONENT {
+ SHELL_UI_COMPONENT_TASKBARS = 0,
+ SHELL_UI_COMPONENT_NOTIFICATIONAREA = 1,
+ SHELL_UI_COMPONENT_DESKBAND = 2,
+}}
+extern "system" {
+ pub fn GetDpiForShellUIComponent(
+ component: SHELL_UI_COMPONENT,
+ ) -> UINT;
+}
diff --git a/vendor/winapi/src/um/shlobj.rs b/vendor/winapi/src/um/shlobj.rs
new file mode 100644
index 000000000..f652c6c2d
--- /dev/null
+++ b/vendor/winapi/src/um/shlobj.rs
@@ -0,0 +1,260 @@
+// 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 ctypes::{c_int, c_void};
+use shared::guiddef::REFIID;
+use shared::minwindef::{BOOL, DWORD, UINT};
+use shared::windef::HWND;
+use um::minwinbase::SECURITY_ATTRIBUTES;
+use um::shtypes::{PCIDLIST_ABSOLUTE, PCUITEMID_CHILD_ARRAY, PIDLIST_ABSOLUTE, REFKNOWNFOLDERID};
+use um::winnt::{HANDLE, HRESULT, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PCWSTR, PWSTR};
+pub const IDO_SHGIOI_SHARE: c_int = 0x0FFFFFFF;
+pub const IDO_SHGIOI_LINK: c_int = 0x0FFFFFFE;
+// Yes, these values are supposed to be 9 digits
+pub const IDO_SHGIOI_SLOWFILE: c_int = 0x0FFFFFFFD;
+pub const IDO_SHGIOI_DEFAULT: c_int = 0x0FFFFFFFC;
+extern "system" {
+ pub fn SHGetIconOverlayIndexA(
+ pszIconPath: LPCSTR,
+ iIconIndex: c_int,
+ ) -> c_int;
+ pub fn SHGetIconOverlayIndexW(
+ pszIconPath: LPCWSTR,
+ iIconIndex: c_int,
+ ) -> c_int;
+}
+pub const GPFIDL_DEFAULT: GPFIDL_FLAGS = 0x0000;
+pub const GPFIDL_ALTNAME: GPFIDL_FLAGS = 0x0001;
+pub const GPFIDL_UNCPRINTER: GPFIDL_FLAGS = 0x0002;
+pub type GPFIDL_FLAGS = c_int;
+extern "system" {
+ pub fn SHGetPathFromIDListEx(
+ pidl: PCIDLIST_ABSOLUTE,
+ pszPath: PWSTR,
+ cchPath: DWORD,
+ uOpts: GPFIDL_FLAGS,
+ ) -> BOOL;
+ pub fn SHGetPathFromIDListA(
+ pidl: PCIDLIST_ABSOLUTE,
+ pszPath: LPSTR,
+ ) -> BOOL;
+ pub fn SHGetPathFromIDListW(
+ pidl: PCIDLIST_ABSOLUTE,
+ pszPath: LPWSTR,
+ ) -> BOOL;
+ pub fn SHCreateDirectory(
+ hwnd: HWND,
+ pszPath: PCWSTR,
+ ) -> c_int;
+ pub fn SHCreateDirectoryExA(
+ hwnd: HWND,
+ pszPath: LPCSTR,
+ psa: *const SECURITY_ATTRIBUTES,
+ ) -> c_int;
+ pub fn SHCreateDirectoryExW(
+ hwnd: HWND,
+ pszPath: LPCWSTR,
+ psa: *const SECURITY_ATTRIBUTES,
+ ) -> c_int;
+}
+pub const OFASI_EDIT: DWORD = 0x0001;
+pub const OFASI_OPENDESKTOP: DWORD = 0x0002;
+extern "system" {
+ pub fn SHOpenFolderAndSelectItems(
+ pidlFolder: PCIDLIST_ABSOLUTE,
+ cidl: UINT,
+ apidl: PCUITEMID_CHILD_ARRAY,
+ dwFlags: DWORD,
+ ) -> HRESULT;
+ //pub fn SHCreateShellItem(
+ // pidlParent: PCIDLIST_ABSOLUTE,
+ // psfParent: *mut IShellFolder,
+ // pidl: PCUITEMID_CHILD,
+ // ppsi: *mut *mut IShellItem,
+ //) -> HRESULT;
+}
+pub const CSIDL_DESKTOP: c_int = 0x0000;
+pub const CSIDL_INTERNET: c_int = 0x0001;
+pub const CSIDL_PROGRAMS: c_int = 0x0002;
+pub const CSIDL_CONTROLS: c_int = 0x0003;
+pub const CSIDL_PRINTERS: c_int = 0x0004;
+pub const CSIDL_PERSONAL: c_int = 0x0005;
+pub const CSIDL_FAVORITES: c_int = 0x0006;
+pub const CSIDL_STARTUP: c_int = 0x0007;
+pub const CSIDL_RECENT: c_int = 0x0008;
+pub const CSIDL_SENDTO: c_int = 0x0009;
+pub const CSIDL_BITBUCKET: c_int = 0x000a;
+pub const CSIDL_STARTMENU: c_int = 0x000b;
+pub const CSIDL_MYDOCUMENTS: c_int = CSIDL_PERSONAL;
+pub const CSIDL_MYMUSIC: c_int = 0x000d;
+pub const CSIDL_MYVIDEO: c_int = 0x000e;
+pub const CSIDL_DESKTOPDIRECTORY: c_int = 0x0010;
+pub const CSIDL_DRIVES: c_int = 0x0011;
+pub const CSIDL_NETWORK: c_int = 0x0012;
+pub const CSIDL_NETHOOD: c_int = 0x0013;
+pub const CSIDL_FONTS: c_int = 0x0014;
+pub const CSIDL_TEMPLATES: c_int = 0x0015;
+pub const CSIDL_COMMON_STARTMENU: c_int = 0x0016;
+pub const CSIDL_COMMON_PROGRAMS: c_int = 0x0017;
+pub const CSIDL_COMMON_STARTUP: c_int = 0x0018;
+pub const CSIDL_COMMON_DESKTOPDIRECTORY: c_int = 0x0019;
+pub const CSIDL_APPDATA: c_int = 0x001a;
+pub const CSIDL_PRINTHOOD: c_int = 0x001b;
+pub const CSIDL_LOCAL_APPDATA: c_int = 0x001c;
+pub const CSIDL_ALTSTARTUP: c_int = 0x001d;
+pub const CSIDL_COMMON_ALTSTARTUP: c_int = 0x001e;
+pub const CSIDL_COMMON_FAVORITES: c_int = 0x001f;
+pub const CSIDL_INTERNET_CACHE: c_int = 0x0020;
+pub const CSIDL_COOKIES: c_int = 0x0021;
+pub const CSIDL_HISTORY: c_int = 0x0022;
+pub const CSIDL_COMMON_APPDATA: c_int = 0x0023;
+pub const CSIDL_WINDOWS: c_int = 0x0024;
+pub const CSIDL_SYSTEM: c_int = 0x0025;
+pub const CSIDL_PROGRAM_FILES: c_int = 0x0026;
+pub const CSIDL_MYPICTURES: c_int = 0x0027;
+pub const CSIDL_PROFILE: c_int = 0x0028;
+pub const CSIDL_SYSTEMX86: c_int = 0x0029;
+pub const CSIDL_PROGRAM_FILESX86: c_int = 0x002a;
+pub const CSIDL_PROGRAM_FILES_COMMON: c_int = 0x002b;
+pub const CSIDL_PROGRAM_FILES_COMMONX86: c_int = 0x002c;
+pub const CSIDL_COMMON_TEMPLATES: c_int = 0x002d;
+pub const CSIDL_COMMON_DOCUMENTS: c_int = 0x002e;
+pub const CSIDL_COMMON_ADMINTOOLS: c_int = 0x002f;
+pub const CSIDL_ADMINTOOLS: c_int = 0x0030;
+pub const CSIDL_CONNECTIONS: c_int = 0x0031;
+pub const CSIDL_COMMON_MUSIC: c_int = 0x0035;
+pub const CSIDL_COMMON_PICTURES: c_int = 0x0036;
+pub const CSIDL_COMMON_VIDEO: c_int = 0x0037;
+pub const CSIDL_RESOURCES: c_int = 0x0038;
+pub const CSIDL_RESOURCES_LOCALIZED: c_int = 0x0039;
+pub const CSIDL_COMMON_OEM_LINKS: c_int = 0x003a;
+pub const CSIDL_CDBURN_AREA: c_int = 0x003b;
+pub const CSIDL_COMPUTERSNEARME: c_int = 0x003d;
+pub const CSIDL_FLAG_CREATE: c_int = 0x8000;
+pub const CSIDL_FLAG_DONT_VERIFY: c_int = 0x4000;
+pub const CSIDL_FLAG_DONT_UNEXPAND: c_int = 0x2000;
+pub const CSIDL_FLAG_NO_ALIAS: c_int = 0x1000;
+pub const CSIDL_FLAG_PER_USER_INIT: c_int = 0x0800;
+pub const CSIDL_FLAG_MASK: c_int = 0xff00;
+extern "system" {
+ pub fn SHGetSpecialFolderLocation(
+ hwnd: HWND,
+ csidl: c_int,
+ ppidl: *mut PIDLIST_ABSOLUTE,
+ ) -> HRESULT;
+ pub fn SHCloneSpecialIDList(
+ hwnd: HWND,
+ csidl: c_int,
+ fCreate: BOOL,
+ ) -> PIDLIST_ABSOLUTE;
+ pub fn SHGetSpecialFolderPathA(
+ hwnd: HWND,
+ pszPath: LPSTR,
+ csidl: c_int,
+ fCreate: BOOL,
+ ) -> BOOL;
+ pub fn SHGetSpecialFolderPathW(
+ hwnd: HWND,
+ pszPath: LPWSTR,
+ csidl: c_int,
+ fCreate: BOOL,
+ ) -> BOOL;
+ pub fn SHFlushSFCache();
+}
+ENUM!{enum SHGFP_TYPE {
+ SHGFP_TYPE_CURRENT = 0,
+ SHGFP_TYPE_DEFAULT = 1,
+}}
+extern "system" {
+ pub fn SHGetFolderPathA(
+ hwnd: HWND,
+ csidl: c_int,
+ hToken: HANDLE,
+ dwFlags: DWORD,
+ pszPath: LPSTR,
+ ) -> HRESULT;
+ pub fn SHGetFolderPathW(
+ hwnd: HWND,
+ csidl: c_int,
+ hToken: HANDLE,
+ dwFlags: DWORD,
+ pszPath: LPWSTR,
+ ) -> HRESULT;
+ pub fn SHGetFolderLocation(
+ hwnd: HWND,
+ csidl: c_int,
+ hToken: HANDLE,
+ dwFlags: DWORD,
+ ppidl: *mut PIDLIST_ABSOLUTE,
+ ) -> HRESULT;
+ pub fn SHSetFolderPathA(
+ csidl: c_int,
+ hToken: HANDLE,
+ dwFlags: DWORD,
+ pszPath: LPCSTR,
+ ) -> HRESULT;
+ pub fn SHSetFolderPathW(
+ csidl: c_int,
+ hToken: HANDLE,
+ dwFlags: DWORD,
+ pszPath: LPCWSTR,
+ ) -> HRESULT;
+ pub fn SHGetFolderPathAndSubDirA(
+ hwnd: HWND,
+ csidl: c_int,
+ hToken: HANDLE,
+ dwFlags: DWORD,
+ pszSubDir: LPCSTR,
+ pszPath: LPSTR,
+ ) -> HRESULT;
+ pub fn SHGetFolderPathAndSubDirW(
+ hwnd: HWND,
+ csidl: c_int,
+ hToken: HANDLE,
+ dwFlags: DWORD,
+ pszSubDir: LPCWSTR,
+ pszPath: LPWSTR,
+ ) -> HRESULT;
+}
+ENUM!{enum KNOWN_FOLDER_FLAG {
+ KF_FLAG_DEFAULT = 0x00000000,
+ KF_FLAG_NO_APPCONTAINER_REDIRECTION = 0x00010000,
+ KF_FLAG_CREATE = 0x00008000,
+ KF_FLAG_DONT_VERIFY = 0x00004000,
+ KF_FLAG_DONT_UNEXPAND = 0x00002000,
+ KF_FLAG_NO_ALIAS = 0x00001000,
+ KF_FLAG_INIT = 0x00000800,
+ KF_FLAG_DEFAULT_PATH = 0x00000400,
+ KF_FLAG_NOT_PARENT_RELATIVE = 0x00000200,
+ KF_FLAG_SIMPLE_IDLIST = 0x00000100,
+ KF_FLAG_ALIAS_ONLY = 0x80000000,
+}}
+extern "system" {
+ pub fn SHGetKnownFolderIDList(
+ rfid: REFKNOWNFOLDERID,
+ dwFlags: DWORD,
+ hToken: HANDLE,
+ ppidl: *mut PIDLIST_ABSOLUTE,
+ ) -> HRESULT;
+ pub fn SHSetKnownFolderPath(
+ rfid: REFKNOWNFOLDERID,
+ dwFlags: DWORD,
+ hToken: HANDLE,
+ pszPath: PCWSTR,
+ ) -> HRESULT;
+ pub fn SHGetKnownFolderPath(
+ rfid: REFKNOWNFOLDERID,
+ dwFlags: DWORD,
+ hToken: HANDLE,
+ pszPath: *mut PWSTR,
+ ) -> HRESULT;
+ pub fn SHGetKnownFolderItem(
+ rfid: REFKNOWNFOLDERID,
+ flags: KNOWN_FOLDER_FLAG,
+ hToken: HANDLE,
+ riid: REFIID,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT;
+}
diff --git a/vendor/winapi/src/um/shobjidl.rs b/vendor/winapi/src/um/shobjidl.rs
new file mode 100644
index 000000000..ad351cc57
--- /dev/null
+++ b/vendor/winapi/src/um/shobjidl.rs
@@ -0,0 +1,329 @@
+// 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::guiddef::REFGUID;
+use shared::minwindef::{BOOL, DWORD, UINT};
+use shared::windef::HWND;
+use um::propsys::{IPropertyDescriptionList, IPropertyStore};
+use um::shobjidl_core::{IModalWindow, IModalWindowVtbl, IShellItem, IShellItemFilter};
+use um::shtypes::COMDLG_FILTERSPEC;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPCWSTR, LPWSTR, WCHAR};
+pub type IFileOperationProgressSink = IUnknown; // TODO
+pub use um::shobjidl_core::{IShellItemArray, SIATTRIBFLAGS}; // FIXME: Remove these in the next major release
+ENUM!{enum FDE_OVERWRITE_RESPONSE {
+ FDEOR_DEFAULT = 0,
+ FDEOR_ACCEPT = 1,
+ FDEOR_REFUSE = 2,
+}}
+ENUM!{enum FDE_SHAREVIOLATION_RESPONSE {
+ FDESVR_DEFAULT = 0,
+ FDESVR_ACCEPT = 1,
+ FDESVR_REFUSE = 2,
+}}
+ENUM!{enum FDAP {
+ FDAP_BOTTOM = 0,
+ FDAP_TOP = 1,
+}}
+RIDL!{#[uuid(0x973510db, 0x7d7f, 0x452b, 0x89, 0x75, 0x74, 0xa8, 0x58, 0x28, 0xd3, 0x54)]
+interface IFileDialogEvents(IFileDialogEventsVtbl): IUnknown(IUnknownVtbl) {
+ fn OnFileOk(
+ pfd: *mut IFileDialog,
+ ) -> HRESULT,
+ fn OnFolderChanging(
+ pfd: *mut IFileDialog,
+ psiFolder: *mut IShellItem,
+ ) -> HRESULT,
+ fn OnFolderChange(
+ pfd: *mut IFileDialog,
+ ) -> HRESULT,
+ fn OnSelectionChange(
+ pfd: *mut IFileDialog,
+ ) -> HRESULT,
+ fn OnShareViolation(
+ pfd: *mut IFileDialog,
+ psi: *mut IShellItem,
+ pResponse: *mut FDE_SHAREVIOLATION_RESPONSE,
+ ) -> HRESULT,
+ fn OnTypeChange(
+ pfd: *mut IFileDialog,
+ ) -> HRESULT,
+ fn OnOverwrite(
+ pfd: *mut IFileDialog,
+ psi: *mut IShellItem,
+ pResponse: *mut FDE_OVERWRITE_RESPONSE,
+ ) -> HRESULT,
+}}
+ENUM!{enum FILEOPENDIALOGOPTIONS {
+ FOS_OVERWRITEPROMPT = 0x2,
+ FOS_STRICTFILETYPES = 0x4,
+ FOS_NOCHANGEDIR = 0x8,
+ FOS_PICKFOLDERS = 0x20,
+ FOS_FORCEFILESYSTEM = 0x40,
+ FOS_ALLNONSTORAGEITEMS = 0x80,
+ FOS_NOVALIDATE = 0x100,
+ FOS_ALLOWMULTISELECT = 0x200,
+ FOS_PATHMUSTEXIST = 0x800,
+ FOS_FILEMUSTEXIST = 0x1000,
+ FOS_CREATEPROMPT = 0x2000,
+ FOS_SHAREAWARE = 0x4000,
+ FOS_NOREADONLYRETURN = 0x8000,
+ FOS_NOTESTFILECREATE = 0x10000,
+ FOS_HIDEMRUPLACES = 0x20000,
+ FOS_HIDEPINNEDPLACES = 0x40000,
+ FOS_NODEREFERENCELINKS = 0x100000,
+ FOS_DONTADDTORECENT = 0x2000000,
+ FOS_FORCESHOWHIDDEN = 0x10000000,
+ FOS_DEFAULTNOMINIMODE = 0x20000000,
+ FOS_FORCEPREVIEWPANEON = 0x40000000,
+ FOS_SUPPORTSTREAMABLEITEMS = 0x80000000,
+}}
+RIDL!{#[uuid(0x42f85136, 0xdb7e, 0x439c, 0x85, 0xf1, 0xe4, 0x07, 0x5d, 0x13, 0x5f, 0xc8)]
+interface IFileDialog(IFileDialogVtbl): IModalWindow(IModalWindowVtbl) {
+ fn SetFileTypes(
+ cFileTypes: UINT,
+ rgFilterSpec: *const COMDLG_FILTERSPEC,
+ ) -> HRESULT,
+ fn SetFileTypeIndex(
+ iFileType: UINT,
+ ) -> HRESULT,
+ fn GetFileTypeIndex(
+ piFileType: *mut UINT,
+ ) -> HRESULT,
+ fn Advise(
+ pfde: *mut IFileDialogEvents,
+ pdwCookie: *mut DWORD,
+ ) -> HRESULT,
+ fn Unadvise(
+ dwCookie: DWORD,
+ ) -> HRESULT,
+ fn SetOptions(
+ fos: FILEOPENDIALOGOPTIONS,
+ ) -> HRESULT,
+ fn GetOptions(
+ pfos: *mut FILEOPENDIALOGOPTIONS,
+ ) -> HRESULT,
+ fn SetDefaultFolder(
+ psi: *mut IShellItem,
+ ) -> HRESULT,
+ fn SetFolder(
+ psi: *mut IShellItem,
+ ) -> HRESULT,
+ fn GetFolder(
+ ppsi: *mut *mut IShellItem,
+ ) -> HRESULT,
+ fn GetCurrentSelection(
+ ppsi: *mut *mut IShellItem,
+ ) -> HRESULT,
+ fn SetFileName(
+ pszName: LPCWSTR,
+ ) -> HRESULT,
+ fn GetFileName(
+ pszName: *mut LPWSTR,
+ ) -> HRESULT,
+ fn SetTitle(
+ pszTitle: LPCWSTR,
+ ) -> HRESULT,
+ fn SetOkButtonLabel(
+ pszText: LPCWSTR,
+ ) -> HRESULT,
+ fn SetFileNameLabel(
+ pszLabel: LPCWSTR,
+ ) -> HRESULT,
+ fn GetResult(
+ ppsi: *mut *mut IShellItem,
+ ) -> HRESULT,
+ fn AddPlace(
+ psi: *mut IShellItem,
+ fdap: FDAP,
+ ) -> HRESULT,
+ fn SetDefaultExtension(
+ pszDefaultExtension: LPCWSTR,
+ ) -> HRESULT,
+ fn Close(
+ hr: HRESULT,
+ ) -> HRESULT,
+ fn SetClientGuid(
+ guid: REFGUID,
+ ) -> HRESULT,
+ fn ClearClientData() -> HRESULT,
+ fn SetFilter(
+ pFilter: *mut IShellItemFilter,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x84bccd23, 0x5fde, 0x4cdb, 0xae, 0xa4, 0xaf, 0x64, 0xb8, 0x3d, 0x78, 0xab)]
+interface IFileSaveDialog(IFileSaveDialogVtbl): IFileDialog(IFileDialogVtbl) {
+ fn SetSaveAsItem(
+ psi: *mut IShellItem,
+ ) -> HRESULT,
+ fn SetProperties(
+ pStore: *mut IPropertyStore,
+ ) -> HRESULT,
+ fn SetCollectedProperties(
+ pList: *mut IPropertyDescriptionList,
+ fAppendDefault: BOOL,
+ ) -> HRESULT,
+ fn GetProperties(
+ ppStore: *mut *mut IPropertyStore,
+ ) -> HRESULT,
+ fn ApplyProperties(
+ psi: *mut IShellItem,
+ pStore: *mut IPropertyStore,
+ hwnd: HWND,
+ pSink: *mut IFileOperationProgressSink,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xd57c7288, 0xd4ad, 0x4768, 0xbe, 0x02, 0x9d, 0x96, 0x95, 0x32, 0xd9, 0x60)]
+interface IFileOpenDialog(IFileOpenDialogVtbl): IFileDialog(IFileDialogVtbl) {
+ fn GetResults(
+ ppenum: *mut *mut IShellItemArray,
+ ) -> HRESULT,
+ fn GetSelectedItems(
+ ppsai: *mut *mut IShellItemArray,
+ ) -> HRESULT,
+}}
+ENUM!{enum CDCONTROLSTATEF {
+ CDCS_INACTIVE = 0,
+ CDCS_ENABLED = 0x1,
+ CDCS_VISIBLE = 0x2,
+ CDCS_ENABLEDVISIBLE = 0x3,
+}}
+RIDL!{#[uuid(0xe6fdd21a, 0x163f, 0x4975, 0x9c, 0x8c, 0xa6, 0x9f, 0x1b, 0xa3, 0x70, 0x34)]
+interface IFileDialogCustomize(IFileDialogCustomizeVtbl): IUnknown(IUnknownVtbl) {
+ fn EnableOpenDropDown(
+ dwIDCtl: DWORD,
+ ) -> HRESULT,
+ fn AddMenu(
+ dwIDCtl: DWORD,
+ pszLabel: LPCWSTR,
+ ) -> HRESULT,
+ fn AddPushButton(
+ dwIDCtl: DWORD,
+ pszLabel: LPCWSTR,
+ ) -> HRESULT,
+ fn AddComboBox(
+ dwIDCtl: DWORD,
+ ) -> HRESULT,
+ fn AddRadioButtonList(
+ dwIDCtl: DWORD,
+ ) -> HRESULT,
+ fn AddCheckButton(
+ dwIDCtl: DWORD,
+ pszLabel: LPCWSTR,
+ bChecked: BOOL,
+ ) -> HRESULT,
+ fn AddEditBox(
+ dwIDCtl: DWORD,
+ pszText: LPCWSTR,
+ ) -> HRESULT,
+ fn AddSeparator(
+ dwIDCtl: DWORD,
+ ) -> HRESULT,
+ fn AddText(
+ dwIDCtl: DWORD,
+ pszText: LPCWSTR,
+ ) -> HRESULT,
+ fn SetControlLabel(
+ dwIDCtl: DWORD,
+ pszLabel: LPCWSTR,
+ ) -> HRESULT,
+ fn GetControlState(
+ dwIDCtl: DWORD,
+ pdwState: *mut CDCONTROLSTATEF,
+ ) -> HRESULT,
+ fn SetControlState(
+ dwIDCtl: DWORD,
+ dwState: CDCONTROLSTATEF,
+ ) -> HRESULT,
+ fn GetEditBoxText(
+ dwIDCtl: DWORD,
+ ppszText: *mut *mut WCHAR,
+ ) -> HRESULT,
+ fn SetEditBoxText(
+ dwIDCtl: DWORD,
+ pszText: LPCWSTR,
+ ) -> HRESULT,
+ fn GetCheckButtonState(
+ dwIDCtl: DWORD,
+ pbChecked: *mut BOOL,
+ ) -> HRESULT,
+ fn SetCheckButtonState(
+ dwIDCtl: DWORD,
+ bChecked: BOOL,
+ ) -> HRESULT,
+ fn AddControlItem(
+ dwIDCtl: DWORD,
+ dwIDItem: DWORD,
+ pszLabel: LPCWSTR,
+ ) -> HRESULT,
+ fn RemoveControlItem(
+ dwIDCtl: DWORD,
+ dwIDItem: DWORD,
+ ) -> HRESULT,
+ fn RemoveAllControlItems(
+ dwIDCtl: DWORD,
+ ) -> HRESULT,
+ fn GetControlItemState(
+ dwIDCtl: DWORD,
+ dwIDItem: DWORD,
+ pdwState: *mut CDCONTROLSTATEF,
+ ) -> HRESULT,
+ fn SetControlItemState(
+ dwIDCtl: DWORD,
+ dwIDItem: DWORD,
+ dwState: CDCONTROLSTATEF,
+ ) -> HRESULT,
+ fn GetSelectedControlItem(
+ dwIDCtl: DWORD,
+ pdwIDItem: *mut DWORD,
+ ) -> HRESULT,
+ fn SetSelectedControlItem(
+ dwIDCtl: DWORD,
+ dwIDItem: DWORD,
+ ) -> HRESULT,
+ fn StartVisualGroup(
+ dwIDCtl: DWORD,
+ pszLabel: LPCWSTR,
+ ) -> HRESULT,
+ fn EndVisualGroup() -> HRESULT,
+ fn MakeProminent(
+ dwIDCtl: DWORD,
+ ) -> HRESULT,
+ fn SetControlItemText(
+ dwIDCtl: DWORD,
+ dwIDItem: DWORD,
+ pszLabel: LPCWSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x36116642, 0xd713, 0x4b97, 0x9b, 0x83, 0x74, 0x84, 0xa9, 0xd0, 0x04, 0x33)]
+interface IFileDialogControlEvents(IFileDialogControlEventsVtbl): IUnknown(IUnknownVtbl) {
+ fn OnItemSelected(
+ pfdc: *mut IFileDialogCustomize,
+ dwIDCtl: DWORD,
+ dwIDItem: DWORD,
+ ) -> HRESULT,
+ fn OnButtonClicked(
+ pfdc: *mut IFileDialogCustomize,
+ dwIDCtl: DWORD,
+ ) -> HRESULT,
+ fn OnCheckButtonToggled(
+ pfdc: *mut IFileDialogCustomize,
+ dwIDCtl: DWORD,
+ bChecked: BOOL,
+ ) -> HRESULT,
+ fn OnControlActivating(
+ pfdc: *mut IFileDialogCustomize,
+ dwIDCtl: DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x61744fc7, 0x85b5, 0x4791, 0xa9, 0xb0, 0x27, 0x22, 0x76, 0x30, 0x9b, 0x13)]
+interface IFileDialog2(IFileDialog2Vtbl): IFileDialog(IFileDialogVtbl) {
+ fn SetCancelButtonLabel(
+ pszLabel: LPCWSTR,
+ ) -> HRESULT,
+ fn SetNavigationRoot(
+ psi: IShellItem,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/shobjidl_core.rs b/vendor/winapi/src/um/shobjidl_core.rs
new file mode 100644
index 000000000..a4a4a33b9
--- /dev/null
+++ b/vendor/winapi/src/um/shobjidl_core.rs
@@ -0,0 +1,576 @@
+// 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 ctypes::{c_int, c_void};
+use shared::guiddef::{REFGUID, REFIID};
+use shared::minwindef::{BOOL, DWORD, UINT, ULONG, WORD};
+use shared::windef::{COLORREF, HICON, HWND, RECT};
+use um::commctrl::HIMAGELIST;
+use um::minwinbase::{WIN32_FIND_DATAA, WIN32_FIND_DATAW};
+use um::objidl::IBindCtx;
+use um::propkeydef::REFPROPERTYKEY;
+use um::propsys::GETPROPERTYSTOREFLAGS;
+use um::shtypes::{PCIDLIST_ABSOLUTE, PIDLIST_ABSOLUTE};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PCWSTR, ULONGLONG, WCHAR};
+DEFINE_GUID!{CLSID_DesktopWallpaper,
+ 0xc2cf3110, 0x460e, 0x4fc1, 0xb9, 0xd0, 0x8a, 0x1c, 0x0c, 0x9c, 0xc4, 0xbd}
+DEFINE_GUID!{CLSID_TaskbarList,
+ 0x56fdf344, 0xfd6d, 0x11d0, 0x95, 0x8a, 0x00, 0x60, 0x97, 0xc9, 0xa0, 0x90}
+DEFINE_GUID!{CLSID_FileOpenDialog,
+ 0xdc1c5a9c, 0xe88a, 0x4dde, 0xa5, 0xa1, 0x60, 0xf8, 0x2a, 0x20, 0xae, 0xf7}
+DEFINE_GUID!{CLSID_FileSaveDialog,
+ 0xc0b4e2f3, 0xba21, 0x4773, 0x8d, 0xba, 0x33, 0x5e, 0xc9, 0x46, 0xeb, 0x8b}
+//4498
+ENUM!{enum SHCONTF {
+ SHCONTF_CHECKING_FOR_CHILDREN = 0x10,
+ SHCONTF_FOLDERS = 0x20,
+ SHCONTF_NONFOLDERS = 0x40,
+ SHCONTF_INCLUDEHIDDEN = 0x80,
+ SHCONTF_INIT_ON_FIRST_NEXT = 0x100,
+ SHCONTF_NETPRINTERSRCH = 0x200,
+ SHCONTF_SHAREABLE = 0x400,
+ SHCONTF_STORAGE = 0x800,
+ SHCONTF_NAVIGATION_ENUM = 0x1000,
+ SHCONTF_FASTITEMS = 0x2000,
+ SHCONTF_FLATLIST = 0x4000,
+ SHCONTF_ENABLE_ASYNC = 0x8000,
+ SHCONTF_INCLUDESUPERHIDDEN = 0x10000,
+}}
+pub type SFGAOF = ULONG;
+//9466
+ENUM!{enum SIGDN {
+ SIGDN_NORMALDISPLAY = 0,
+ SIGDN_PARENTRELATIVEPARSING = 0x80018001,
+ SIGDN_DESKTOPABSOLUTEPARSING = 0x80028000,
+ SIGDN_PARENTRELATIVEEDITING = 0x80031001,
+ SIGDN_DESKTOPABSOLUTEEDITING = 0x8004c000,
+ SIGDN_FILESYSPATH = 0x80058000,
+ SIGDN_URL = 0x80068000,
+ SIGDN_PARENTRELATIVEFORADDRESSBAR = 0x8007c001,
+ SIGDN_PARENTRELATIVE = 0x80080001,
+ SIGDN_PARENTRELATIVEFORUI = 0x80094001,
+}}
+ENUM!{enum SICHINTF {
+ SICHINT_DISPLAY = 0,
+ SICHINT_ALLFIELDS = 0x80000000,
+ SICHINT_CANONICAL = 0x10000000,
+ SICHINT_TEST_FILESYSPATH_IF_NOT_EQUAL = 0x20000000,
+}}
+RIDL!{#[uuid(0x43826d1e, 0xe718, 0x42ee, 0xbc, 0x55, 0xa1, 0xe2, 0x61, 0xc3, 0x7b, 0xfe)]
+interface IShellItem(IShellItemVtbl): IUnknown(IUnknownVtbl) {
+ fn BindToHandler(
+ pbc: *mut IBindCtx,
+ bhid: REFGUID,
+ riid: REFIID,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT,
+ fn GetParent(
+ ppsi: *mut *mut IShellItem,
+ ) -> HRESULT,
+ fn GetDisplayName(
+ sigdnName: SIGDN,
+ ppszName: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetAttributes(
+ sfgaoMask: SFGAOF,
+ psfgaoAttribs: *mut SFGAOF,
+ ) -> HRESULT,
+ fn Compare(
+ psi: *mut IShellItem,
+ hint: SICHINTF,
+ piOrder: *mut c_int,
+ ) -> HRESULT,
+}}
+ENUM!{enum SIATTRIBFLAGS {
+ SIATTRIBFLAGS_AND = 0x1,
+ SIATTRIBFLAGS_OR = 0x2,
+ SIATTRIBFLAGS_APPCOMPAT = 0x3,
+ SIATTRIBFLAGS_MASK = 0x3,
+ SIATTRIBFLAGS_ALLITEMS = 0x4000,
+}}
+RIDL!{#[uuid(0xb63ea76d, 0x1f85, 0x456f, 0xa1, 0x9c, 0x48, 0x15, 0x9e, 0xfa, 0x85, 0x8b)]
+interface IShellItemArray(IShellItemArrayVtbl): IUnknown(IUnknownVtbl) {
+ fn BindToHandler(
+ pbc: *mut IBindCtx,
+ bhid: REFGUID,
+ riid: REFIID,
+ ppvOut: *mut *mut c_void,
+ ) -> HRESULT,
+ fn GetPropertyStore(
+ flags: GETPROPERTYSTOREFLAGS,
+ riid: REFIID,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT,
+ fn GetPropertyDescriptionList(
+ keyType: REFPROPERTYKEY,
+ riid: REFIID,
+ ppv: *mut *mut c_void,
+ ) -> HRESULT,
+ fn GetAttributes(
+ AttribFlags: SIATTRIBFLAGS,
+ sfgaoMask: SFGAOF,
+ psfgaoAttribs: *mut SFGAOF,
+ ) -> HRESULT,
+ fn GetCount(
+ pdwNumItems: *mut DWORD,
+ ) -> HRESULT,
+ fn GetItemAt(
+ dwIndex: DWORD,
+ ppsi: *mut *mut IShellItem,
+ ) -> HRESULT,
+ // TODO: Add IEnumShellItems
+ //fn EnumItems(
+ // ppenumShellItems: *mut *mut IEnumShellItems,
+ //) -> HRESULT,
+}}
+//20869
+RIDL!{#[uuid(0xb4db1657, 0x70d7, 0x485e, 0x8e, 0x3e, 0x6f, 0xcb, 0x5a, 0x5c, 0x18, 0x02)]
+interface IModalWindow(IModalWindowVtbl): IUnknown(IUnknownVtbl) {
+ fn Show(
+ hwndOwner: HWND,
+ ) -> HRESULT,
+}}
+//22307
+//27457
+RIDL!{#[uuid(0x2659b475, 0xeeb8, 0x48b7, 0x8f, 0x07, 0xb3, 0x78, 0x81, 0x0f, 0x48, 0xcf)]
+interface IShellItemFilter(IShellItemFilterVtbl): IUnknown(IUnknownVtbl) {
+ fn IncludeItem(
+ psi: *mut IShellItem,
+ ) -> HRESULT,
+ fn GetEnumFlagsForItem(
+ psi: *mut IShellItem,
+ pgrfFlags: *mut SHCONTF,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x56fdf342, 0xfd6d, 0x11d0, 0x95, 0x8a, 0x00, 0x60, 0x97, 0xc9, 0xa0, 0x90)]
+interface ITaskbarList(ITaskbarListVtbl): IUnknown(IUnknownVtbl) {
+ fn HrInit() -> HRESULT,
+ fn AddTab(
+ hwnd: HWND,
+ ) -> HRESULT,
+ fn DeleteTab(
+ hwnd: HWND,
+ ) -> HRESULT,
+ fn ActivateTab(
+ hwnd: HWND,
+ ) -> HRESULT,
+ fn SetActiveAlt(
+ hwnd: HWND,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x602d4995, 0xb13a, 0x429b, 0xa6, 0x6e, 0x19, 0x35, 0xe4, 0x4f, 0x43, 0x17)]
+interface ITaskbarList2(ITaskbarList2Vtbl): ITaskbarList(ITaskbarListVtbl) {
+ fn MarkFullscreenWindow(
+ hwnd: HWND,
+ fFullscreen: BOOL,
+ ) -> HRESULT,
+}}
+ENUM!{enum THUMBBUTTONFLAGS {
+ THBF_ENABLED = 0,
+ THBF_DISABLED = 0x1,
+ THBF_DISMISSONCLICK = 0x2,
+ THBF_NOBACKGROUND = 0x4,
+ THBF_HIDDEN = 0x8,
+ THBF_NONINTERACTIVE = 0x10,
+}}
+ENUM!{enum THUMBBUTTONMASK {
+ THB_BITMAP = 0x1,
+ THB_ICON = 0x2,
+ THB_TOOLTIP = 0x4,
+ THB_FLAGS = 0x8,
+}}
+STRUCT!{struct THUMBBUTTON {
+ dwMask: THUMBBUTTONMASK,
+ iId: UINT,
+ iBitmap: UINT,
+ hIcon: HICON,
+ szTip: [WCHAR; 260],
+ dwFlags: THUMBBUTTONFLAGS,
+}}
+pub type LPTHUMBBUTTON = *mut THUMBBUTTON;
+pub const THBN_CLICKED: WORD = 0x1800;
+ENUM!{enum TBPFLAG {
+ TBPF_NOPROGRESS = 0,
+ TBPF_INDETERMINATE = 0x1,
+ TBPF_NORMAL = 0x2,
+ TBPF_ERROR = 0x4,
+ TBPF_PAUSED = 0x8,
+}}
+RIDL!{#[uuid(0xea1afb91, 0x9e28, 0x4b86, 0x90, 0xe9, 0x9e, 0x9f, 0x8a, 0x5e, 0xef, 0xaf)]
+interface ITaskbarList3(ITaskbarList3Vtbl): ITaskbarList2(ITaskbarList2Vtbl) {
+ fn SetProgressValue(
+ hwnd: HWND,
+ ullCompleted: ULONGLONG,
+ ullTotal: ULONGLONG,
+ ) -> HRESULT,
+ fn SetProgressState(
+ hwnd: HWND,
+ tbpFlags: TBPFLAG,
+ ) -> HRESULT,
+ fn RegisterTab(
+ hwndTab: HWND,
+ hwndMDI: HWND,
+ ) -> HRESULT,
+ fn UnregisterTab(
+ hwndTab: HWND,
+ ) -> HRESULT,
+ fn SetTabOrder(
+ hwndTab: HWND,
+ hwndInsertBefore: HWND,
+ ) -> HRESULT,
+ fn SetTabActive(
+ hwndTab: HWND,
+ hwndMDI: HWND,
+ dwReserved: DWORD,
+ ) -> HRESULT,
+ fn ThumbBarAddButtons(
+ hwnd: HWND,
+ cButtons: UINT,
+ pButton: LPTHUMBBUTTON,
+ ) -> HRESULT,
+ fn ThumbBarUpdateButtons(
+ hwnd: HWND,
+ cButtons: UINT,
+ pButton: LPTHUMBBUTTON,
+ ) -> HRESULT,
+ fn ThumbBarSetImageList(
+ hwnd: HWND,
+ himl: HIMAGELIST,
+ ) -> HRESULT,
+ fn SetOverlayIcon(
+ hwnd: HWND,
+ hIcon: HICON,
+ pszDescription: LPCWSTR,
+ ) -> HRESULT,
+ fn SetThumbnailTooltip(
+ hwnd: HWND,
+ pszTip: LPCWSTR,
+ ) -> HRESULT,
+ fn SetThumbnailClip(
+ hwnd: HWND,
+ prcClip: *mut RECT,
+ ) -> HRESULT,
+}}
+ENUM!{enum STPFLAG {
+ STPF_NONE = 0,
+ STPF_USEAPPTHUMBNAILALWAYS = 0x1,
+ STPF_USEAPPTHUMBNAILWHENACTIVE = 0x2,
+ STPF_USEAPPPEEKALWAYS = 0x4,
+ STPF_USEAPPPEEKWHENACTIVE = 0x8,
+}}
+RIDL!{#[uuid(0xc43dc798, 0x95d1, 0x4bea, 0x90, 0x30, 0xbb, 0x99, 0xe2, 0x98, 0x3a, 0x1a)]
+interface ITaskbarList4(ITaskbarList4Vtbl): ITaskbarList3(ITaskbarList3Vtbl) {
+ fn SetTabProperties(
+ hwndTab: HWND,
+ stpFlags: STPFLAG,
+ ) -> HRESULT,
+}}
+ENUM!{enum DESKTOP_SLIDESHOW_OPTIONS {
+ DSO_SHUFFLEIMAGES = 0x1,
+}}
+ENUM!{enum DESKTOP_SLIDESHOW_STATE {
+ DSS_ENABLED = 0x1,
+ DSS_SLIDESHOW = 0x2,
+ DSS_DISABLED_BY_REMOTE_SESSION = 0x4,
+}}
+ENUM!{enum DESKTOP_SLIDESHOW_DIRECTION {
+ DSD_FORWARD = 0,
+ DSD_BACKWARD = 1,
+}}
+ENUM!{enum DESKTOP_WALLPAPER_POSITION {
+ DWPOS_CENTER = 0,
+ DWPOS_TILE = 1,
+ DWPOS_STRETCH = 2,
+ DWPOS_FIT = 3,
+ DWPOS_FILL = 4,
+ DWPOS_SPAN = 5,
+}}
+RIDL!{#[uuid(0xb92b56a9, 0x8b55, 0x4e14, 0x9a, 0x89, 0x01, 0x99, 0xbb, 0xb6, 0xf9, 0x3b)]
+interface IDesktopWallpaper(IDesktopWallpaperVtbl): IUnknown(IUnknownVtbl) {
+ fn SetWallpaper(
+ monitorID: LPCWSTR,
+ wallpaper: LPCWSTR,
+ ) -> HRESULT,
+ fn GetWallpaper(
+ monitorID: LPCWSTR,
+ wallpaper: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetMonitorDevicePathAt(
+ monitorIndex: UINT,
+ monitorID: *mut LPWSTR,
+ ) -> HRESULT,
+ fn GetMonitorDevicePathCount(
+ count: *mut UINT,
+ ) -> HRESULT,
+ fn GetMonitorRECT(
+ monitorID: LPCWSTR,
+ displayRect: *mut RECT,
+ ) -> HRESULT,
+ fn SetBackgroundColor(
+ color: COLORREF,
+ ) -> HRESULT,
+ fn GetBackgroundColor(
+ color: *mut COLORREF,
+ ) -> HRESULT,
+ fn SetPosition(
+ position: DESKTOP_WALLPAPER_POSITION,
+ ) -> HRESULT,
+ fn GetPosition(
+ position: *mut DESKTOP_WALLPAPER_POSITION,
+ ) -> HRESULT,
+ fn SetSlideshow(
+ items: *mut IShellItemArray,
+ ) -> HRESULT,
+ fn GetSlideshow(
+ items: *mut *mut IShellItemArray,
+ ) -> HRESULT,
+ fn SetSlideshowOptions(
+ options: DESKTOP_SLIDESHOW_OPTIONS,
+ slideshowTick: UINT,
+ ) -> HRESULT,
+ fn GetSlideshowOptions(
+ options: *mut DESKTOP_SLIDESHOW_OPTIONS,
+ slideshowTick: *mut UINT,
+ ) -> HRESULT,
+ fn AdvanceSlideshow(
+ monitorID: LPCWSTR,
+ direction: DESKTOP_SLIDESHOW_DIRECTION,
+ ) -> HRESULT,
+ fn GetStatus(
+ state: *mut DESKTOP_SLIDESHOW_STATE,
+ ) -> HRESULT,
+ fn Enable(
+ enable: BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x000214ee, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IShellLinkA(IShellLinkAVtbl): IUnknown(IUnknownVtbl) {
+ fn GetPath(
+ pszFile: LPSTR,
+ cch: c_int,
+ pfd: *mut WIN32_FIND_DATAA,
+ fFlags: DWORD,
+ ) -> HRESULT,
+ fn GetIDList(
+ ppidl: *mut PIDLIST_ABSOLUTE,
+ ) -> HRESULT,
+ fn SetIDList(
+ pidl: PCIDLIST_ABSOLUTE,
+ ) -> HRESULT,
+ fn GetDescription(
+ pszName: LPSTR,
+ cch: c_int,
+ ) -> HRESULT,
+ fn SetDescription(
+ pszName: LPCSTR,
+ ) -> HRESULT,
+ fn GetWorkingDirectory(
+ pszDir: LPSTR,
+ cch: c_int,
+ ) -> HRESULT,
+ fn SetWorkingDirectory(
+ pszDir: LPCSTR,
+ ) -> HRESULT,
+ fn GetArguments(
+ pszArgs: LPSTR,
+ cch: c_int,
+ ) -> HRESULT,
+ fn SetArguments(
+ pszArgs: LPCSTR,
+ ) -> HRESULT,
+ fn GetHotkey(
+ pwHotkey: *mut WORD,
+ ) -> HRESULT,
+ fn SetHotkey(
+ wHotkey: WORD,
+ ) -> HRESULT,
+ fn GetShowCmd(
+ piShowCmd: *mut c_int,
+ ) -> HRESULT,
+ fn SetShowCmd(
+ iShowCmd: c_int,
+ ) -> HRESULT,
+ fn GetIconLocation(
+ pszIconPath: LPSTR,
+ cch: c_int,
+ piIcon: *mut c_int,
+ ) -> HRESULT,
+ fn SetIconLocation(
+ pszIconPath: LPCSTR,
+ iIcon: c_int,
+ ) -> HRESULT,
+ fn SetRelativePath(
+ pszPathRel: LPCSTR,
+ dwReserved: DWORD,
+ ) -> HRESULT,
+ fn Resolve(
+ hwnd: HWND,
+ fFlags: DWORD,
+ ) -> HRESULT,
+ fn SetPath(
+ pszFile: LPCSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x000214f9, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IShellLinkW(IShellLinkWVtbl): IUnknown(IUnknownVtbl) {
+ fn GetPath(
+ pszFile: LPWSTR,
+ cch: c_int,
+ pfd: *mut WIN32_FIND_DATAW,
+ fFlags: DWORD,
+ ) -> HRESULT,
+ fn GetIDList(
+ ppidl: *mut PIDLIST_ABSOLUTE,
+ ) -> HRESULT,
+ fn SetIDList(
+ pidl: PCIDLIST_ABSOLUTE,
+ ) -> HRESULT,
+ fn GetDescription(
+ pszName: LPWSTR,
+ cch: c_int,
+ ) -> HRESULT,
+ fn SetDescription(
+ pszName: LPCWSTR,
+ ) -> HRESULT,
+ fn GetWorkingDirectory(
+ pszDir: LPWSTR,
+ cch: c_int,
+ ) -> HRESULT,
+ fn SetWorkingDirectory(
+ pszDir: LPCWSTR,
+ ) -> HRESULT,
+ fn GetArguments(
+ pszArgs: LPWSTR,
+ cch: c_int,
+ ) -> HRESULT,
+ fn SetArguments(
+ pszArgs: LPCWSTR,
+ ) -> HRESULT,
+ fn GetHotkey(
+ pwHotkey: *mut WORD,
+ ) -> HRESULT,
+ fn SetHotkey(
+ wHotkey: WORD,
+ ) -> HRESULT,
+ fn GetShowCmd(
+ piShowCmd: *mut c_int,
+ ) -> HRESULT,
+ fn SetShowCmd(
+ iShowCmd: c_int,
+ ) -> HRESULT,
+ fn GetIconLocation(
+ pszIconPath: LPWSTR,
+ cch: c_int,
+ piIcon: *mut c_int,
+ ) -> HRESULT,
+ fn SetIconLocation(
+ pszIconPath: LPCWSTR,
+ iIcon: c_int,
+ ) -> HRESULT,
+ fn SetRelativePath(
+ pszPathRel: LPCWSTR,
+ dwReserved: DWORD,
+ ) -> HRESULT,
+ fn Resolve(
+ hwnd: HWND,
+ fFlags: DWORD,
+ ) -> HRESULT,
+ fn SetPath(
+ pszFile: LPCWSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xc2cf3110, 0x460e, 0x4fc1, 0xb9, 0xd0, 0x8a, 0x1c, 0x0c, 0x9c, 0xc4, 0xbd)]
+class DesktopWallpaper;}
+RIDL!{#[uuid(0x00021400, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+class ShellDesktop;}
+RIDL!{#[uuid(0xf3364ba0, 0x65b9, 0x11ce, 0xa9, 0xba, 0x00, 0xaa, 0x00, 0x4a, 0xe8, 0x37)]
+class ShellFSFolder;}
+RIDL!{#[uuid(0x208d2c60, 0x3aea, 0x1069, 0xa2, 0xd7, 0x08, 0x00, 0x2b, 0x30, 0x30, 0x9d)]
+class NetworkPlaces;}
+RIDL!{#[uuid(0x00021401, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+class ShellLink;}
+RIDL!{#[uuid(0x94357b53, 0xca29, 0x4b78, 0x83, 0xae, 0xe8, 0xfe, 0x74, 0x09, 0x13, 0x4f)]
+class DriveSizeCategorizer;}
+RIDL!{#[uuid(0xb0a8f3cf, 0x4333, 0x4bab, 0x88, 0x73, 0x1c, 0xcb, 0x1c, 0xad, 0xa4, 0x8b)]
+class DriveTypeCategorizer;}
+RIDL!{#[uuid(0xb5607793, 0x24ac, 0x44c7, 0x82, 0xe2, 0x83, 0x17, 0x26, 0xaa, 0x6c, 0xb7)]
+class FreeSpaceCategorizer;}
+RIDL!{#[uuid(0x55d7b852, 0xf6d1, 0x42f2, 0xaa, 0x75, 0x87, 0x28, 0xa1, 0xb2, 0xd2, 0x64)]
+class SizeCategorizer;}
+RIDL!{#[uuid(0xd912f8cf, 0x0396, 0x4915, 0x88, 0x4e, 0xfb, 0x42, 0x5d, 0x32, 0x94, 0x3b)]
+class PropertiesUI;}
+RIDL!{#[uuid(0x0010890e, 0x8789, 0x413c, 0xad, 0xbc, 0x48, 0xf5, 0xb5, 0x11, 0xb3, 0xaf)]
+class UserNotification;}
+RIDL!{#[uuid(0x56fdf344, 0xfd6d, 0x11d0, 0x95, 0x8a, 0x00, 0x60, 0x97, 0xc9, 0xa0, 0x90)]
+class TaskbarList;}
+RIDL!{#[uuid(0x9ac9fbe1, 0xe0a2, 0x4ad6, 0xb4, 0xee, 0xe2, 0x12, 0x01, 0x3e, 0xa9, 0x17)]
+class ShellItem;}
+RIDL!{#[uuid(0x72eb61e0, 0x8672, 0x4303, 0x91, 0x75, 0xf2, 0xe4, 0xc6, 0x8b, 0x2e, 0x7c)]
+class NamespaceWalker;}
+RIDL!{#[uuid(0x3ad05575, 0x8857, 0x4850, 0x92, 0x77, 0x11, 0xb8, 0x5b, 0xdb, 0x8e, 0x09)]
+class FileOperation;}
+RIDL!{#[uuid(0xdc1c5a9c, 0xe88a, 0x4dde, 0xa5, 0xa1, 0x60, 0xf8, 0x2a, 0x20, 0xae, 0xf7)]
+class FileOpenDialog;}
+RIDL!{#[uuid(0xc0b4e2f3, 0xba21, 0x4773, 0x8d, 0xba, 0x33, 0x5e, 0xc9, 0x46, 0xeb, 0x8b)]
+class FileSaveDialog;}
+RIDL!{#[uuid(0x4df0c730, 0xdf9d, 0x4ae3, 0x91, 0x53, 0xaa, 0x6b, 0x82, 0xe9, 0x79, 0x5a)]
+class KnownFolderManager;}
+RIDL!{#[uuid(0x49f371e1, 0x8c5c, 0x4d9c, 0x9a, 0x3b, 0x54, 0xa6, 0x82, 0x7f, 0x51, 0x3c)]
+class SharingConfigurationManager;}
+RIDL!{#[uuid(0x7007acc7, 0x3202, 0x11d1, 0xaa, 0xd2, 0x00, 0x80, 0x5f, 0xc1, 0x27, 0x0e)]
+class NetworkConnections;}
+RIDL!{#[uuid(0xd6277990, 0x4c6a, 0x11cf, 0x8d, 0x87, 0x00, 0xaa, 0x00, 0x60, 0xf5, 0xbf)]
+class ScheduledTasks;}
+RIDL!{#[uuid(0x591209c7, 0x767b, 0x42b2, 0x9f, 0xba, 0x44, 0xee, 0x46, 0x15, 0xf2, 0xc7)]
+class ApplicationAssociationRegistration;}
+RIDL!{#[uuid(0x14010e02, 0xbbbd, 0x41f0, 0x88, 0xe3, 0xed, 0xa3, 0x71, 0x21, 0x65, 0x84)]
+class SearchFolderItemFactory;}
+RIDL!{#[uuid(0x06622d85, 0x6856, 0x4460, 0x8d, 0xe1, 0xa8, 0x19, 0x21, 0xb4, 0x1c, 0x4b)]
+class OpenControlPanel;}
+RIDL!{#[uuid(0x9e56be60, 0xc50f, 0x11cf, 0x9a, 0x2c, 0x00, 0xa0, 0xc9, 0x0a, 0x90, 0xce)]
+class MailRecipient;}
+RIDL!{#[uuid(0xf02c1a0d, 0xbe21, 0x4350, 0x88, 0xb0, 0x73, 0x67, 0xfc, 0x96, 0xef, 0x3c)]
+class NetworkExplorerFolder;}
+RIDL!{#[uuid(0x77f10cf0, 0x3db5, 0x4966, 0xb5, 0x20, 0xb7, 0xc5, 0x4f, 0xd3, 0x5e, 0xd6)]
+class DestinationList;}
+RIDL!{#[uuid(0x86c14003, 0x4d6b, 0x4ef3, 0xa7, 0xb4, 0x05, 0x06, 0x66, 0x3b, 0x2e, 0x68)]
+class ApplicationDestinations;}
+RIDL!{#[uuid(0x86bec222, 0x30f2, 0x47e0, 0x9f, 0x25, 0x60, 0xd1, 0x1c, 0xd7, 0x5c, 0x28)]
+class ApplicationDocumentLists;}
+RIDL!{#[uuid(0xde77ba04, 0x3c92, 0x4d11, 0xa1, 0xa5, 0x42, 0x35, 0x2a, 0x53, 0xe0, 0xe3)]
+class HomeGroup;}
+RIDL!{#[uuid(0xd9b3211d, 0xe57f, 0x4426, 0xaa, 0xef, 0x30, 0xa8, 0x06, 0xad, 0xd3, 0x97)]
+class ShellLibrary;}
+RIDL!{#[uuid(0x273eb5e7, 0x88b0, 0x4843, 0xbf, 0xef, 0xe2, 0xc8, 0x1d, 0x43, 0xaa, 0xe5)]
+class AppStartupLink;}
+RIDL!{#[uuid(0x2d3468c1, 0x36a7, 0x43b6, 0xac, 0x24, 0xd3, 0xf0, 0x2f, 0xd9, 0x60, 0x7a)]
+class EnumerableObjectCollection;}
+RIDL!{#[uuid(0xd5120aa3, 0x46ba, 0x44c5, 0x82, 0x2d, 0xca, 0x80, 0x92, 0xc1, 0xfc, 0x72)]
+class FrameworkInputPane;}
+RIDL!{#[uuid(0xc63382be, 0x7933, 0x48d0, 0x9a, 0xc8, 0x85, 0xfb, 0x46, 0xbe, 0x2f, 0xdd)]
+class DefFolderMenu;}
+RIDL!{#[uuid(0x7e5fe3d9, 0x985f, 0x4908, 0x91, 0xf9, 0xee, 0x19, 0xf9, 0xfd, 0x15, 0x14)]
+class AppVisibility;}
+RIDL!{#[uuid(0x4ed3a719, 0xcea8, 0x4bd9, 0x91, 0x0d, 0xe2, 0x52, 0xf9, 0x97, 0xaf, 0xc2)]
+class AppShellVerbHandler;}
+RIDL!{#[uuid(0xe44e9428, 0xbdbc, 0x4987, 0xa0, 0x99, 0x40, 0xdc, 0x8f, 0xd2, 0x55, 0xe7)]
+class ExecuteUnknown;}
+RIDL!{#[uuid(0xb1aec16f, 0x2383, 0x4852, 0xb0, 0xe9, 0x8f, 0x0b, 0x1d, 0xc6, 0x6b, 0x4d)]
+class PackageDebugSettings;}
+RIDL!{#[uuid(0x6b273fc5, 0x61fd, 0x4918, 0x95, 0xa2, 0xc3, 0xb5, 0xe9, 0xd7, 0xf5, 0x81)]
+class SuspensionDependencyManager;}
+RIDL!{#[uuid(0x45ba127d, 0x10a8, 0x46ea, 0x8a, 0xb7, 0x56, 0xea, 0x90, 0x78, 0x94, 0x3c)]
+class ApplicationActivationManager;}
+RIDL!{#[uuid(0x958a6fb5, 0xdcb2, 0x4faf, 0xaa, 0xfd, 0x7f, 0xb0, 0x54, 0xad, 0x1a, 0x3b)]
+class ApplicationDesignModeSettings;}
+extern "system" {
+ pub fn SHCreateItemFromParsingName(
+ pszPath: PCWSTR,
+ pbc: *mut IBindCtx,
+ riid: REFIID,
+ ppv: *mut *mut c_void
+ ) -> HRESULT;
+}
diff --git a/vendor/winapi/src/um/shtypes.rs b/vendor/winapi/src/um/shtypes.rs
new file mode 100644
index 000000000..470d79e21
--- /dev/null
+++ b/vendor/winapi/src/um/shtypes.rs
@@ -0,0 +1,44 @@
+// 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.
+//! this ALWAYS GENERATED file contains the definitions for the interfaces
+use shared::guiddef::GUID;
+use shared::minwindef::{BYTE, USHORT};
+use um::winnt::LPCWSTR;
+STRUCT!{#[repr(packed)] struct SHITEMID {
+ cb: USHORT,
+ abID: [BYTE; 1],
+}}
+pub type LPSHITEMID = *mut SHITEMID;
+pub type LPCSHITEMID = *const SHITEMID;
+STRUCT!{#[repr(packed)] struct ITEMIDLIST {
+ mkid: SHITEMID,
+}}
+pub type ITEMIDLIST_RELATIVE = ITEMIDLIST;
+pub type ITEMID_CHILD = ITEMIDLIST;
+pub type ITEMIDLIST_ABSOLUTE = ITEMIDLIST;
+pub type LPITEMIDLIST = *mut ITEMIDLIST;
+pub type LPCITEMIDLIST = *const ITEMIDLIST;
+pub type PIDLIST_ABSOLUTE = *mut ITEMIDLIST_ABSOLUTE;
+pub type PCIDLIST_ABSOLUTE = *const ITEMIDLIST_ABSOLUTE;
+pub type PCUIDLIST_ABSOLUTE = *const ITEMIDLIST_ABSOLUTE;
+pub type PIDLIST_RELATIVE = *mut ITEMIDLIST_RELATIVE;
+pub type PCIDLIST_RELATIVE = *const ITEMIDLIST_RELATIVE;
+pub type PUIDLIST_RELATIVE = *mut ITEMIDLIST_RELATIVE;
+pub type PCUIDLIST_RELATIVE = *const ITEMIDLIST_RELATIVE;
+pub type PITEMID_CHILD = *mut ITEMID_CHILD;
+pub type PCITEMID_CHILD = *const ITEMID_CHILD;
+pub type PUITEMID_CHILD = *mut ITEMID_CHILD;
+pub type PCUITEMID_CHILD = *const ITEMID_CHILD;
+pub type PCUITEMID_CHILD_ARRAY = *const PCUITEMID_CHILD;
+pub type PCUIDLIST_RELATIVE_ARRAY = *const PCUIDLIST_RELATIVE;
+pub type PCIDLIST_ABSOLUTE_ARRAY = *const PCIDLIST_ABSOLUTE;
+pub type PCUIDLIST_ABSOLUTE_ARRAY = *const PCUIDLIST_ABSOLUTE;
+STRUCT!{struct COMDLG_FILTERSPEC {
+ pszName: LPCWSTR,
+ pszSpec: LPCWSTR,
+}}
+pub type KNOWNFOLDERID = GUID;
+pub type REFKNOWNFOLDERID = *const KNOWNFOLDERID;
diff --git a/vendor/winapi/src/um/softpub.rs b/vendor/winapi/src/um/softpub.rs
new file mode 100644
index 000000000..d3a1eaad6
--- /dev/null
+++ b/vendor/winapi/src/um/softpub.rs
@@ -0,0 +1,3 @@
+//50
+DEFINE_GUID!{WINTRUST_ACTION_GENERIC_VERIFY_V2,
+ 0xaac56b, 0xcd44, 0x11d0, 0x8c, 0xc2, 0x0, 0xc0, 0x4f, 0xc2, 0x95, 0xee}
diff --git a/vendor/winapi/src/um/spapidef.rs b/vendor/winapi/src/um/spapidef.rs
new file mode 100644
index 000000000..259f4699f
--- /dev/null
+++ b/vendor/winapi/src/um/spapidef.rs
@@ -0,0 +1,53 @@
+// 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.
+//! Public header file for Windows NT Setup and Device Installer services Dlls
+use shared::minwindef::DWORD;
+use um::winnt::DWORDLONG;
+pub type SP_LOG_TOKEN = DWORDLONG;
+pub type PSP_LOG_TOKEN = *mut DWORDLONG;
+pub const LOGTOKEN_TYPE_MASK: SP_LOG_TOKEN = 3;
+pub const LOGTOKEN_UNSPECIFIED: SP_LOG_TOKEN = 0;
+pub const LOGTOKEN_NO_LOG: SP_LOG_TOKEN = 1;
+pub const LOGTOKEN_SETUPAPI_APPLOG: SP_LOG_TOKEN = 2;
+pub const LOGTOKEN_SETUPAPI_DEVLOG: SP_LOG_TOKEN = 3;
+pub const TXTLOG_SETUPAPI_DEVLOG: DWORD = 0x00000001;
+pub const TXTLOG_SETUPAPI_CMDLINE: DWORD = 0x00000002;
+pub const TXTLOG_SETUPAPI_BITS: DWORD = 0x00000003;
+pub const TXTLOG_ERROR: DWORD = 0x1;
+pub const TXTLOG_WARNING: DWORD = 0x2;
+pub const TXTLOG_SYSTEM_STATE_CHANGE: DWORD = 0x3;
+pub const TXTLOG_SUMMARY: DWORD = 0x4;
+pub const TXTLOG_DETAILS: DWORD = 0x5;
+pub const TXTLOG_VERBOSE: DWORD = 0x6;
+pub const TXTLOG_VERY_VERBOSE: DWORD = 0x7;
+pub const TXTLOG_RESERVED_FLAGS: DWORD = 0x0000FFF0;
+pub const TXTLOG_TIMESTAMP: DWORD = 0x00010000;
+pub const TXTLOG_DEPTH_INCR: DWORD = 0x00020000;
+pub const TXTLOG_DEPTH_DECR: DWORD = 0x00040000;
+pub const TXTLOG_TAB_1: DWORD = 0x00080000;
+pub const TXTLOG_FLUSH_FILE: DWORD = 0x00100000;
+#[inline]
+pub fn TXTLOG_LEVEL(flags: DWORD) -> DWORD {
+ flags & 0xf
+}
+pub const TXTLOG_DEVINST: DWORD = 0x00000001;
+pub const TXTLOG_INF: DWORD = 0x00000002;
+pub const TXTLOG_FILEQ: DWORD = 0x00000004;
+pub const TXTLOG_COPYFILES: DWORD = 0x00000008;
+pub const TXTLOG_SIGVERIF: DWORD = 0x00000020;
+pub const TXTLOG_BACKUP: DWORD = 0x00000080;
+pub const TXTLOG_UI: DWORD = 0x00000100;
+pub const TXTLOG_UTIL: DWORD = 0x00000200;
+pub const TXTLOG_INFDB: DWORD = 0x00000400;
+pub const TXTLOG_POLICY: DWORD = 0x00800000;
+pub const TXTLOG_NEWDEV: DWORD = 0x01000000;
+pub const TXTLOG_UMPNPMGR: DWORD = 0x02000000;
+pub const TXTLOG_DRIVER_STORE: DWORD = 0x04000000;
+pub const TXTLOG_SETUP: DWORD = 0x08000000;
+pub const TXTLOG_CMI: DWORD = 0x10000000;
+pub const TXTLOG_DEVMGR: DWORD = 0x20000000;
+pub const TXTLOG_INSTALLER: DWORD = 0x40000000;
+pub const TXTLOG_VENDOR: DWORD = 0x80000000;
diff --git a/vendor/winapi/src/um/spellcheck.rs b/vendor/winapi/src/um/spellcheck.rs
new file mode 100644
index 000000000..9254ed52d
--- /dev/null
+++ b/vendor/winapi/src/um/spellcheck.rs
@@ -0,0 +1,146 @@
+use shared::minwindef::{BOOL, BYTE, DWORD};
+use shared::ntdef::{LPCWSTR, LPWSTR, ULONG};
+use shared::winerror::HRESULT;
+use um::objidlbase::IEnumString;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+ENUM!{enum WORDLIST_TYPE {
+ WORDLIST_TYPE_IGNORE = 0,
+ WORDLIST_TYPE_ADD = 1,
+ WORDLIST_TYPE_EXCLUDE = 2,
+ WORDLIST_TYPE_AUTOCORRECT = 3,
+}}
+ENUM!{enum CORRECTIVE_ACTION {
+ CORRECTIVE_ACTION_NONE = 0,
+ CORRECTIVE_ACTION_GET_SUGGESTIONS = 1,
+ CORRECTIVE_ACTION_REPLACE = 2,
+ CORRECTIVE_ACTION_DELETE = 3,
+}}
+RIDL!{#[uuid(0xb7c82d61, 0xfbe8, 0x4b47, 0x9b, 0x27, 0x6c, 0x0d, 0x2e, 0x0d, 0xe0, 0xa3)]
+interface ISpellingError(ISpellingErrorVtbl): IUnknown(IUnknownVtbl) {
+ fn get_StartIndex(
+ value: *mut ULONG,
+ ) -> HRESULT,
+ fn get_Length(
+ value: *mut ULONG,
+ ) -> HRESULT,
+ fn get_CorrectiveAction(
+ value: *mut CORRECTIVE_ACTION,
+ ) -> HRESULT,
+ fn get_Replacement(
+ value: *mut LPWSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x803e3bd4, 0x2828, 0x4410, 0x82, 0x90, 0x41, 0x8d, 0x1d, 0x73, 0xc7, 0x62)]
+interface IEnumSpellingError(IEnumSpellingErrorVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ value: *mut *mut ISpellingError,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x432e5f85, 0x35cf, 0x4606, 0xa8, 0x01, 0x6f, 0x70, 0x27, 0x7e, 0x1d, 0x7a)]
+interface IOptionDescription(IOptionDescriptionVtbl): IUnknown(IUnknownVtbl) {
+ fn Id(
+ value: *mut LPWSTR,
+ ) -> HRESULT,
+ fn Heading(
+ value: *mut LPWSTR,
+ ) -> HRESULT,
+ fn Description(
+ value: *mut LPWSTR,
+ ) -> HRESULT,
+ fn Labels(
+ value: *mut *mut IEnumString,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x0b83a5b0, 0x792f, 0x4eab, 0x97, 0x99, 0xac, 0xf5, 0x2c, 0x5e, 0xd0, 0x8a)]
+interface ISpellCheckerChangedEventHandler(ISpellCheckerChangedEventHandlerVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn Invoke(
+ sender: *const ISpellChecker,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xb6fd0b71, 0xe2bc, 0x4653, 0x8d, 0x05, 0xf1, 0x97, 0xe4, 0x12, 0x77, 0x0b)]
+interface ISpellChecker(ISpellCheckerVtbl): IUnknown(IUnknownVtbl) {
+ fn get_LanguageTag(
+ value: *mut LPWSTR,
+ ) -> HRESULT,
+ fn Check(
+ text: LPCWSTR,
+ value: *mut *mut IEnumSpellingError,
+ ) -> HRESULT,
+ fn Suggest(
+ word: LPCWSTR,
+ value: *mut *mut IEnumString,
+ ) -> HRESULT,
+ fn Add(
+ word: LPCWSTR,
+ ) -> HRESULT,
+ fn Ignore(
+ word: LPCWSTR,
+ ) -> HRESULT,
+ fn AutoCorrect(
+ from: LPCWSTR,
+ to: LPCWSTR,
+ ) -> HRESULT,
+ fn GetOptionValue(
+ optionId: LPCWSTR,
+ value: *mut BYTE,
+ ) -> HRESULT,
+ fn Get_OptionIds(
+ value: *mut *mut IEnumString,
+ ) -> HRESULT,
+ fn Get_Id(
+ value: *mut LPWSTR,
+ ) -> HRESULT,
+ fn Get_LocalizedName(
+ value: *mut LPWSTR,
+ ) -> HRESULT,
+ fn add_SpellCheckerChanged(
+ handler: *const ISpellCheckerChangedEventHandler,
+ eventCookie: *mut DWORD,
+ ) -> HRESULT,
+ fn remove_SpellCheckerChanged(
+ eventCookie: DWORD,
+ ) -> HRESULT,
+ fn GetOptionDescription(
+ optionId: LPCWSTR,
+ value: *mut *mut IOptionDescription,
+ ) -> HRESULT,
+ fn ComprehensiveCheck(
+ text: LPCWSTR,
+ value: *mut *mut IEnumSpellingError,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xe7ed1c71, 0x87f7, 0x4378, 0xa8, 0x40, 0xc9, 0x20, 0x0d, 0xac, 0xee, 0x47)]
+interface ISpellChecker2(ISpellChecker2Vtbl): ISpellChecker(ISpellCheckerVtbl) {
+ fn Remove(
+ word: LPCWSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8e018a9d, 0x2415, 0x4677, 0xbf, 0x08, 0x79, 0x4e, 0xa6, 0x1f, 0x94, 0xbb)]
+interface ISpellCheckerFactory(ISpellCheckerFactoryVtbl): IUnknown(IUnknownVtbl) {
+ fn SupportedLanguages(
+ value: *mut *mut IEnumString,
+ ) -> HRESULT,
+ fn IsSupported(
+ languageTag: LPCWSTR,
+ value: *mut BOOL,
+ ) -> HRESULT,
+ fn CreateSpellChecker(
+ languageTag: LPCWSTR,
+ value: *mut *mut ISpellChecker,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xaa176b85, 0x0e12, 0x4844, 0x8e, 0x1a, 0xee, 0xf1, 0xda, 0x77, 0xf5, 0x86)]
+interface IUserDictionariesRegistrar(IUserDictionariesRegistrarVtbl): IUnknown(IUnknownVtbl) {
+ fn RegisterUserDictionary(
+ dictionaryPath: LPCWSTR,
+ languageTag: LPCWSTR,
+ ) -> HRESULT,
+ fn UnregisterUserDictionary(
+ dictionaryPath: LPCWSTR,
+ languageTag: LPCWSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x7ab36653, 0x1796, 0x484b, 0xbd, 0xfa, 0xe7, 0x4f, 0x1d, 0xb7, 0xc1, 0xdc)]
+class SpellCheckerFactory;
+}
diff --git a/vendor/winapi/src/um/sporder.rs b/vendor/winapi/src/um/sporder.rs
new file mode 100644
index 000000000..84630e3e0
--- /dev/null
+++ b/vendor/winapi/src/um/sporder.rs
@@ -0,0 +1,41 @@
+// 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
+//! Service Provider Order
+use ctypes::c_int;
+use shared::guiddef::LPGUID;
+use shared::minwindef::{DWORD, LPDWORD};
+extern "system" {
+ pub fn WSCWriteProviderOrder(
+ lpwdCatalogEntryId: LPDWORD,
+ dwNumberOfEntries: DWORD,
+ ) -> c_int;
+}
+FN!{stdcall LPWSCWRITEPROVIDERORDER(
+ lpwdCatalogEntryId: LPDWORD,
+ dwNumberOfEntries: DWORD,
+) -> c_int}
+#[cfg(target_pointer_width = "64")]
+extern "system" {
+ pub fn WSCWriteProviderOrder32(
+ lpwdCatalogEntryId: LPDWORD,
+ dwNumberOfEntries: DWORD,
+ ) -> c_int;
+ pub fn WSCWriteNameSpaceOrder(
+ lpProviderId: LPGUID,
+ dwNumberOfEntries: DWORD,
+ ) -> c_int;
+}
+FN!{stdcall LPWSCWRITENAMESPACEORDER(
+ lpProviderId: LPGUID,
+ dwNumberOfEntries: DWORD,
+) -> c_int}
+#[cfg(target_pointer_width = "64")]
+extern "system" {
+ pub fn WSCWriteNameSpaceOrder32(
+ lpProviderId: LPGUID,
+ dwNumberOfEntries: DWORD,
+ ) -> c_int;
+}
diff --git a/vendor/winapi/src/um/sql.rs b/vendor/winapi/src/um/sql.rs
new file mode 100644
index 000000000..d42a163ed
--- /dev/null
+++ b/vendor/winapi/src/um/sql.rs
@@ -0,0 +1,108 @@
+// 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 um::sqltypes::{
+ SQLHANDLE, SQLHDBC, SQLHENV, SQLHSTMT, SQLINTEGER, SQLLEN, SQLPOINTER, SQLRETURN, SQLSMALLINT,
+ SQLUSMALLINT,
+};
+pub const SQL_NULL_DATA: SQLLEN = -1;
+pub const SQL_DATA_AT_EXEC: SQLLEN = -2;
+pub const SQL_SUCCESS: SQLRETURN = 0;
+pub const SQL_SUCCESS_WITH_INFO: SQLRETURN = 1;
+pub const SQL_NO_DATA: SQLRETURN = 100;
+pub const SQL_PARAM_DATA_AVAILABLE: SQLRETURN = 101;
+pub const SQL_ERROR: SQLRETURN = -1;
+pub const SQL_INVALID_HANDLE: SQLRETURN = -2;
+pub const SQL_STILL_EXECUTING: SQLRETURN = 2;
+pub const SQL_NEED_DATA: SQLRETURN = 99;
+pub const SQL_NTS: SQLSMALLINT = -3;
+pub const SQL_MAX_MESSAGE_LENGTH: usize = 512;
+pub const SQL_DATE_LEN: usize = 10;
+pub const SQL_TIME_LEN: usize = 8;
+pub const SQL_TIMESTAMP_LEN: usize = 19;
+pub const SQL_HANDLE_ENV: SQLSMALLINT = 1;
+pub const SQL_HANDLE_DBC: SQLSMALLINT = 2;
+pub const SQL_HANDLE_STMT: SQLSMALLINT = 3;
+pub const SQL_HANDLE_DESC: SQLSMALLINT = 4;
+pub const SQL_ATTR_OUTPUT_NTS: SQLINTEGER = 10001;
+pub const SQL_ATTR_AUTO_IPD: SQLINTEGER = 10001;
+pub const SQL_ATTR_METADATA_ID: SQLINTEGER = 10014;
+pub const SQL_ATTR_APP_ROW_DESC: SQLINTEGER = 10010;
+pub const SQL_ATTR_APP_PARAM_DESC: SQLINTEGER = 10011;
+pub const SQL_ATTR_IMP_ROW_DESC: SQLINTEGER = 10012;
+pub const SQL_ATTR_IMP_PARAM_DESC: SQLINTEGER = 10013;
+pub const SQL_ATTR_CURSOR_SCROLLABLE: SQLINTEGER = -1;
+pub const SQL_ATTR_CURSOR_SENSITIVITY: SQLINTEGER = -2;
+pub const SQL_UNKNOWN_TYPE: SQLSMALLINT = 0;
+pub const SQL_CHAR: SQLSMALLINT = 1;
+pub const SQL_NUMERIC: SQLSMALLINT = 2;
+pub const SQL_DECIMAL: SQLSMALLINT = 3;
+pub const SQL_INTEGER: SQLSMALLINT = 4;
+pub const SQL_SMALLINT: SQLSMALLINT = 5;
+pub const SQL_FLOAT: SQLSMALLINT = 6;
+pub const SQL_REAL: SQLSMALLINT = 7;
+pub const SQL_DOUBLE: SQLSMALLINT = 8;
+pub const SQL_DATETIME: SQLSMALLINT = 9;
+pub const SQL_VARCHAR: SQLSMALLINT = 12;
+pub const SQL_TYPE_DATE: SQLSMALLINT = 91;
+pub const SQL_TYPE_TIME: SQLSMALLINT = 92;
+pub const SQL_TYPE_TIMESTAMP: SQLSMALLINT = 93;
+pub const SQL_NO_NULLS: SQLSMALLINT = 0;
+pub const SQL_NULLABLE: SQLSMALLINT = 1;
+pub const SQL_NULLABLE_UNKNOWN: SQLSMALLINT = 2;
+pub const SQL_CLOSE: SQLUSMALLINT = 0;
+pub const SQL_DROP: SQLUSMALLINT = 1;
+pub const SQL_UNBIND: SQLUSMALLINT = 2;
+pub const SQL_RESET_PARAMS: SQLUSMALLINT = 3;
+pub const SQL_NULL_HANDLE: SQLHANDLE = 0 as SQLHANDLE;
+extern "system" {
+ pub fn SQLAllocHandle(
+ handleType: SQLSMALLINT,
+ inputHandle: SQLHANDLE,
+ outputHandle: *mut SQLHANDLE,
+ ) -> SQLRETURN;
+ pub fn SQLDisconnect(
+ connectionHandle: SQLHDBC,
+ ) -> SQLRETURN;
+ pub fn SQLFetch(
+ statementHandle: SQLHSTMT,
+ ) -> SQLRETURN;
+ pub fn SQLFreeHandle(
+ handleType: SQLSMALLINT,
+ handle: SQLHANDLE,
+ ) -> SQLRETURN;
+ pub fn SQLFreeStmt(
+ statementHandle: SQLHSTMT,
+ option: SQLUSMALLINT,
+ ) -> SQLRETURN;
+ pub fn SQLGetData(
+ statementHandle: SQLHSTMT,
+ columnNumber: SQLUSMALLINT,
+ targetType: SQLSMALLINT,
+ targetValue: SQLPOINTER,
+ bufferLength: SQLLEN,
+ strLen_or_IndPtr: *mut SQLLEN,
+ ) -> SQLRETURN;
+ pub fn SQLNumResultCols(
+ statementHandle: SQLHSTMT,
+ columnCount: *mut SQLSMALLINT,
+ ) -> SQLRETURN;
+ pub fn SQLRowCount(
+ statementHandle: SQLHSTMT,
+ rowCount: *mut SQLLEN,
+ ) -> SQLRETURN;
+ pub fn SQLSetConnectAttr(
+ connectionHandle: SQLHDBC,
+ attribute: SQLINTEGER,
+ value: SQLPOINTER,
+ stringLength: SQLINTEGER,
+ ) -> SQLRETURN;
+ pub fn SQLSetEnvAttr(
+ environmentHandle: SQLHENV,
+ attribute: SQLINTEGER,
+ value: SQLPOINTER,
+ stringLength: SQLINTEGER,
+ ) -> SQLRETURN;
+}
diff --git a/vendor/winapi/src/um/sqlext.rs b/vendor/winapi/src/um/sqlext.rs
new file mode 100644
index 000000000..8de50f1b8
--- /dev/null
+++ b/vendor/winapi/src/um/sqlext.rs
@@ -0,0 +1,95 @@
+// 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.
+//! This module defines the SQL extension APIs
+use um::sql::{
+ SQL_CHAR, SQL_DOUBLE, SQL_INTEGER, SQL_NUMERIC, SQL_REAL, SQL_SMALLINT, SQL_TYPE_DATE,
+ SQL_TYPE_TIME, SQL_TYPE_TIMESTAMP
+};
+use um::sqltypes::{SQLINTEGER, SQLSMALLINT, SQLUSMALLINT};
+pub const SQL_ATTR_ODBC_VERSION: SQLINTEGER = 200;
+pub const SQL_ATTR_CONNECTION_POOLING: SQLINTEGER = 201;
+pub const SQL_ATTR_CP_MATCH: SQLINTEGER = 202;
+pub const SQL_OV_ODBC2: SQLINTEGER = 2;
+pub const SQL_OV_ODBC3: SQLINTEGER = 3;
+pub const SQL_OV_ODBC3_80: SQLINTEGER = 380;
+pub const SQL_ACCESS_MODE: SQLINTEGER = 101;
+pub const SQL_AUTOCOMMIT: SQLINTEGER = 102;
+pub const SQL_LOGIN_TIMEOUT: SQLINTEGER = 103;
+pub const SQL_OPT_TRACE: SQLINTEGER = 104;
+pub const SQL_OPT_TRACEFILE: SQLINTEGER = 105;
+pub const SQL_TRANSLATE_DLL: SQLINTEGER = 106;
+pub const SQL_TRANSLATE_OPTION: SQLINTEGER = 107;
+pub const SQL_TXN_ISOLATION: SQLINTEGER = 108;
+pub const SQL_CURRENT_QUALIFIER: SQLINTEGER = 109;
+pub const SQL_ODBC_CURSORS: SQLINTEGER = 110;
+pub const SQL_QUIET_MODE: SQLINTEGER = 111;
+pub const SQL_PACKET_SIZE: SQLINTEGER = 112;
+pub const SQL_ATTR_ACCESS_MODE: SQLINTEGER = SQL_ACCESS_MODE;
+pub const SQL_ATTR_AUTOCOMMIT: SQLINTEGER = SQL_AUTOCOMMIT;
+pub const SQL_ATTR_CONNECTION_TIMEOUT: SQLINTEGER = 113;
+pub const SQL_ATTR_CURRENT_CATALOG: SQLINTEGER = SQL_CURRENT_QUALIFIER;
+pub const SQL_ATTR_DISCONNECT_BEHAVIOR: SQLINTEGER = 114;
+pub const SQL_ATTR_ENLIST_IN_DTC: SQLINTEGER = 1207;
+pub const SQL_ATTR_ENLIST_IN_XA: SQLINTEGER = 1208;
+pub const SQL_ATTR_LOGIN_TIMEOUT: SQLINTEGER = SQL_LOGIN_TIMEOUT;
+pub const SQL_ATTR_ODBC_CURSORS: SQLINTEGER = SQL_ODBC_CURSORS;
+pub const SQL_ATTR_PACKET_SIZE: SQLINTEGER = SQL_PACKET_SIZE;
+pub const SQL_ATTR_QUIET_MODE: SQLINTEGER = SQL_QUIET_MODE;
+pub const SQL_ATTR_TRACE: SQLINTEGER = SQL_OPT_TRACE;
+pub const SQL_ATTR_TRACEFILE: SQLINTEGER = SQL_OPT_TRACEFILE;
+pub const SQL_ATTR_TRANSLATE_LIB: SQLINTEGER = SQL_TRANSLATE_DLL;
+pub const SQL_ATTR_TRANSLATE_OPTION: SQLINTEGER = SQL_TRANSLATE_OPTION;
+pub const SQL_ATTR_TXN_ISOLATION: SQLINTEGER = SQL_TXN_ISOLATION;
+pub const SQL_ATTR_CONNECTION_DEAD: SQLINTEGER = 1209;
+pub const SQL_IS_POINTER: SQLINTEGER = -4;
+pub const SQL_IS_UINTEGER: SQLINTEGER = -5;
+pub const SQL_IS_INTEGER: SQLINTEGER = -6;
+pub const SQL_IS_USMALLINT: SQLINTEGER = -7;
+pub const SQL_IS_SMALLINT: SQLINTEGER = -8;
+pub const SQL_DATE: SQLSMALLINT = 9;
+pub const SQL_INTERVAL: SQLSMALLINT = 10;
+pub const SQL_TIME: SQLSMALLINT = 10;
+pub const SQL_TIMESTAMP: SQLSMALLINT = 11;
+pub const SQL_LONGVARCHAR: SQLSMALLINT = -1;
+pub const SQL_BINARY: SQLSMALLINT = -2;
+pub const SQL_VARBINARY: SQLSMALLINT = -3;
+pub const SQL_LONGVARBINARY: SQLSMALLINT = -4;
+pub const SQL_BIGINT: SQLSMALLINT = -5;
+pub const SQL_TINYINT: SQLSMALLINT = -6;
+pub const SQL_BIT: SQLSMALLINT = -7;
+pub const SQL_GUID: SQLSMALLINT = -11;
+pub const SQL_C_CHAR: SQLSMALLINT = SQL_CHAR;
+pub const SQL_C_LONG: SQLSMALLINT = SQL_INTEGER;
+pub const SQL_C_SHORT: SQLSMALLINT = SQL_SMALLINT;
+pub const SQL_C_FLOAT: SQLSMALLINT = SQL_REAL;
+pub const SQL_C_DOUBLE: SQLSMALLINT = SQL_DOUBLE;
+pub const SQL_C_NUMERIC: SQLSMALLINT = SQL_NUMERIC;
+pub const SQL_C_DEFAULT: SQLSMALLINT = 99;
+pub const SQL_SIGNED_OFFSET: SQLSMALLINT = -20;
+pub const SQL_UNSIGNED_OFFSET: SQLSMALLINT = -22;
+pub const SQL_C_DATE: SQLSMALLINT = SQL_DATE;
+pub const SQL_C_TIME: SQLSMALLINT = SQL_TIME;
+pub const SQL_C_TIMESTAMP: SQLSMALLINT = SQL_TIMESTAMP;
+pub const SQL_C_TYPE_DATE: SQLSMALLINT = SQL_TYPE_DATE;
+pub const SQL_C_TYPE_TIME: SQLSMALLINT = SQL_TYPE_TIME;
+pub const SQL_C_TYPE_TIMESTAMP: SQLSMALLINT = SQL_TYPE_TIMESTAMP;
+pub const SQL_C_BINARY: SQLSMALLINT = SQL_BINARY;
+pub const SQL_C_BIT: SQLSMALLINT = SQL_BIT;
+pub const SQL_C_SBIGINT: SQLSMALLINT = SQL_BIGINT + SQL_SIGNED_OFFSET;
+pub const SQL_C_UBIGINT: SQLSMALLINT = SQL_BIGINT + SQL_UNSIGNED_OFFSET;
+pub const SQL_C_TINYINT: SQLSMALLINT = SQL_TINYINT;
+pub const SQL_C_SLONG: SQLSMALLINT = SQL_C_LONG + SQL_SIGNED_OFFSET;
+pub const SQL_C_SSHORT: SQLSMALLINT = SQL_C_SHORT + SQL_SIGNED_OFFSET;
+pub const SQL_C_STINYINT: SQLSMALLINT = SQL_TINYINT + SQL_SIGNED_OFFSET;
+pub const SQL_C_ULONG: SQLSMALLINT = SQL_C_LONG + SQL_UNSIGNED_OFFSET;
+pub const SQL_C_USHORT: SQLSMALLINT = SQL_C_SHORT + SQL_UNSIGNED_OFFSET;
+pub const SQL_C_UTINYINT: SQLSMALLINT = SQL_TINYINT + SQL_UNSIGNED_OFFSET;
+pub const SQL_C_GUID: SQLSMALLINT = SQL_GUID;
+pub const SQL_TYPE_NULL: SQLSMALLINT = 0;
+pub const SQL_DRIVER_NOPROMPT: SQLUSMALLINT = 0;
+pub const SQL_DRIVER_COMPLETE: SQLUSMALLINT = 1;
+pub const SQL_DRIVER_PROMPT: SQLUSMALLINT = 2;
+pub const SQL_DRIVER_COMPLETE_REQUIRED: SQLUSMALLINT = 3;
diff --git a/vendor/winapi/src/um/sqltypes.rs b/vendor/winapi/src/um/sqltypes.rs
new file mode 100644
index 000000000..401cffbbe
--- /dev/null
+++ b/vendor/winapi/src/um/sqltypes.rs
@@ -0,0 +1,142 @@
+// 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.
+//! This module defines the types used in ODBC
+use ctypes::*;
+#[cfg(target_pointer_width = "64")]
+use shared::basetsd::{INT64, UINT64};
+use shared::guiddef::GUID;
+use shared::windef::HWND;
+pub type SQLCHAR = c_uchar;
+pub type SQLSCHAR = c_schar;
+pub type SQLDATE = c_uchar;
+pub type SQLDECIMAL = c_uchar;
+pub type SQLDOUBLE = c_double;
+pub type SQLFLOAT = c_double;
+pub type SQLINTEGER = c_long;
+pub type SQLUINTEGER = c_ulong;
+#[cfg(target_pointer_width = "64")]
+pub type SQLLEN = INT64;
+#[cfg(target_pointer_width = "64")]
+pub type SQLULEN = UINT64;
+#[cfg(target_pointer_width = "64")]
+pub type SQLSETPOSIROW = UINT64;
+#[cfg(target_pointer_width = "32")]
+pub type SQLLEN = SQLINTEGER;
+#[cfg(target_pointer_width = "32")]
+pub type SQLULEN = SQLUINTEGER;
+#[cfg(target_pointer_width = "32")]
+pub type SQLSETPOSIROW = SQLUSMALLINT;
+pub type SQLROWCOUNT = SQLULEN;
+pub type SQLROWSETSIZE = SQLULEN;
+pub type SQLTRANSID = SQLULEN;
+pub type SQLROWOFFSET = SQLLEN;
+pub type SQLNUMERIC = c_uchar;
+pub type SQLPOINTER = *mut c_void;
+pub type SQLREAL = c_float;
+pub type SQLSMALLINT = c_short;
+pub type SQLUSMALLINT = c_ushort;
+pub type SQLTIME = c_uchar;
+pub type SQLTIMESTAMP = c_uchar;
+pub type SQLVARCHAR = c_uchar;
+pub type SQLRETURN = SQLSMALLINT;
+pub type SQLHANDLE = *mut c_void;
+pub type SQLHENV = SQLHANDLE;
+pub type SQLHDBC = SQLHANDLE;
+pub type SQLHSTMT = SQLHANDLE;
+pub type SQLHDESC = SQLHANDLE;
+//pub type UCHAR = c_uchar;
+pub type SCHAR = c_schar;
+//pub type SQLSCHAR = SCHAR;
+pub type SDWORD = c_long;
+pub type SWORD = c_short;
+pub type UDWORD = c_ulong;
+//pub type UWORD = c_ushort;
+//#[cfg(target_pointer_width = "32")]
+//pub type SQLUINTEGER = UDWORD;
+pub type SLONG = c_long;
+pub type SSHORT = c_short;
+//pub type ULONG = c_ulong;
+//pub type USHORT = c_ushort;
+pub type SDOUBLE = c_double;
+pub type LDOUBLE = c_double;
+pub type SFLOAT = c_float;
+pub type PTR = *mut c_void;
+pub type HENV = *mut c_void;
+pub type HDBC = *mut c_void;
+pub type HSTMT = *mut c_void;
+pub type RETCODE = c_short;
+pub type SQLHWND = HWND;
+STRUCT!{struct DATE_STRUCT {
+ year: SQLSMALLINT,
+ month: SQLUSMALLINT,
+ day: SQLUSMALLINT,
+}}
+pub type SQL_DATE_STRUCT = DATE_STRUCT;
+STRUCT!{struct TIME_STRUCT {
+ hour: SQLUSMALLINT,
+ minute: SQLUSMALLINT,
+ second: SQLUSMALLINT,
+}}
+pub type SQL_TIME_STRUCT = TIME_STRUCT;
+STRUCT!{struct TIMESTAMP_STRUCT {
+ year: SQLSMALLINT,
+ month: SQLUSMALLINT,
+ day: SQLUSMALLINT,
+ hour: SQLUSMALLINT,
+ minute: SQLUSMALLINT,
+ second: SQLUSMALLINT,
+ fraction: SQLUINTEGER,
+}}
+pub type SQL_TIMESTAMP_STRUCT = TIMESTAMP_STRUCT;
+ENUM!{enum SQLINTERVAL {
+ SQL_IS_YEAR = 1,
+ SQL_IS_MONTH = 2,
+ SQL_IS_DAY = 3,
+ SQL_IS_HOUR = 4,
+ SQL_IS_MINUTE = 5,
+ SQL_IS_SECOND = 6,
+ SQL_IS_YEAR_TO_MONTH = 7,
+ SQL_IS_DAY_TO_HOUR = 8,
+ SQL_IS_DAY_TO_MINUTE = 9,
+ SQL_IS_DAY_TO_SECOND = 10,
+ SQL_IS_HOUR_TO_MINUTE = 11,
+ SQL_IS_HOUR_TO_SECOND = 12,
+ SQL_IS_MINUTE_TO_SECOND = 13,
+}}
+STRUCT!{struct SQL_YEAR_MONTH_STRUCT {
+ year: SQLUINTEGER,
+ month: SQLUINTEGER,
+}}
+STRUCT!{struct SQL_DAY_SECOND_STRUCT {
+ day: SQLUINTEGER,
+ hour: SQLUINTEGER,
+ minute: SQLUINTEGER,
+ second: SQLUINTEGER,
+ fraction: SQLUINTEGER,
+}}
+UNION!{union SQL_INTERVAL_STRUCT_intval {
+ [u32; 5],
+ year_month year_month_mut: SQL_YEAR_MONTH_STRUCT,
+ day_second day_second_mut: SQL_DAY_SECOND_STRUCT,
+}}
+STRUCT!{struct SQL_INTERVAL_STRUCT {
+ interval_type: SQLINTERVAL,
+ interval_sign: SQLSMALLINT,
+ intval: SQL_INTERVAL_STRUCT_intval,
+}}
+pub type ODBCINT64 = __int64;
+pub type SQLBIGINT = ODBCINT64;
+pub type SQLUBIGINT = __uint64;
+pub const SQL_MAX_NUMERIC_LEN: usize = 16;
+STRUCT!{struct SQL_NUMERIC_STRUCT {
+ precision: SQLCHAR,
+ scale: SQLSCHAR,
+ sign: SQLCHAR,
+ val: [SQLCHAR; SQL_MAX_NUMERIC_LEN],
+}}
+pub type SQLGUID = GUID;
+pub type BOOKMARK = SQLULEN;
+pub type SQLWCHAR = wchar_t;
diff --git a/vendor/winapi/src/um/sqlucode.rs b/vendor/winapi/src/um/sqlucode.rs
new file mode 100644
index 000000000..b5ed4bfab
--- /dev/null
+++ b/vendor/winapi/src/um/sqlucode.rs
@@ -0,0 +1,106 @@
+// 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.
+//! This module defines the ODBC Core unicode functions
+use um::sqltypes::{
+ SQLCHAR, SQLHANDLE, SQLHDBC, SQLHSTMT, SQLHWND, SQLINTEGER, SQLRETURN, SQLSMALLINT, SQLULEN,
+ SQLUSMALLINT, SQLWCHAR
+};
+pub const SQL_WCHAR: SQLSMALLINT = -8;
+pub const SQL_WVARCHAR: SQLSMALLINT = -9;
+pub const SQL_WLONGVARCHAR: SQLSMALLINT = -10;
+pub const SQL_C_WCHAR: SQLSMALLINT = SQL_WCHAR;
+extern "system" {
+ pub fn SQLConnectW(
+ connectionHandle: SQLHDBC,
+ serverName: *const SQLWCHAR,
+ nameLength1: SQLSMALLINT,
+ userName: *const SQLWCHAR,
+ nameLength2: SQLSMALLINT,
+ authentication: *const SQLWCHAR,
+ nameLength3: SQLSMALLINT,
+ ) -> SQLRETURN;
+ pub fn SQLDescribeColW(
+ statementHandle: SQLHSTMT,
+ columnNumber: SQLUSMALLINT,
+ columnName: *mut SQLWCHAR,
+ bufferLength: SQLSMALLINT,
+ nameLength: *mut SQLSMALLINT,
+ dataType: *mut SQLSMALLINT,
+ columnSize: *mut SQLULEN,
+ decimalDigits: *mut SQLSMALLINT,
+ nullable: *mut SQLSMALLINT,
+ ) -> SQLRETURN;
+ pub fn SQLExecDirectW(
+ statementHandle: SQLHSTMT,
+ statementText: *const SQLWCHAR,
+ textLength: SQLINTEGER,
+ ) -> SQLRETURN;
+ pub fn SQLGetDiagRecW(
+ handleType: SQLSMALLINT,
+ handle: SQLHANDLE,
+ recNumber: SQLSMALLINT,
+ sqlstate: *mut SQLWCHAR,
+ nativeError: *mut SQLINTEGER,
+ messageText: *mut SQLWCHAR,
+ bufferLength: SQLSMALLINT,
+ textLength: *mut SQLSMALLINT,
+ ) -> SQLRETURN;
+ pub fn SQLDriverConnectW(
+ hdbc: SQLHDBC,
+ hwnd: SQLHWND,
+ szConnStrIn: *const SQLWCHAR,
+ cchConnStrIn: SQLSMALLINT,
+ szConnStrOut: *mut SQLWCHAR,
+ cchConnStrOutMax: SQLSMALLINT,
+ pcchConnStrOut: *mut SQLSMALLINT,
+ fDriverCompletion: SQLUSMALLINT,
+ ) -> SQLRETURN;
+ pub fn SQLConnectA(
+ connectionHandle: SQLHDBC,
+ serverName: *const SQLCHAR,
+ nameLength1: SQLSMALLINT,
+ userName: *const SQLCHAR,
+ nameLength2: SQLSMALLINT,
+ authentication: *const SQLCHAR,
+ nameLength3: SQLSMALLINT,
+ ) -> SQLRETURN;
+ pub fn SQLDescribeColA(
+ statementHandle: SQLHSTMT,
+ columnNumber: SQLUSMALLINT,
+ columnName: *mut SQLCHAR,
+ bufferLength: SQLSMALLINT,
+ nameLength: *mut SQLSMALLINT,
+ dataType: *mut SQLSMALLINT,
+ columnSize: *mut SQLULEN,
+ decimalDigits: *mut SQLSMALLINT,
+ nullable: *mut SQLSMALLINT,
+ ) -> SQLRETURN;
+ pub fn SQLExecDirectA(
+ statementHandle: SQLHSTMT,
+ statementText: *const SQLCHAR,
+ textLength: SQLINTEGER,
+ ) -> SQLRETURN;
+ pub fn SQLGetDiagRecA(
+ handleType: SQLSMALLINT,
+ handle: SQLHANDLE,
+ recNumber: SQLSMALLINT,
+ sqlstate: *mut SQLCHAR,
+ nativeError: *mut SQLINTEGER,
+ messageText: *mut SQLCHAR,
+ bufferLength: SQLSMALLINT,
+ textLength: *mut SQLSMALLINT,
+ ) -> SQLRETURN;
+ pub fn SQLDriverConnectA(
+ hdbc: SQLHDBC,
+ hwnd: SQLHWND,
+ szConnStrIn: *const SQLCHAR,
+ cchConnStrIn: SQLSMALLINT,
+ szConnStrOut: *mut SQLCHAR,
+ cchConnStrOutMax: SQLSMALLINT,
+ pcchConnStrOut: *mut SQLSMALLINT,
+ fDriverCompletion: SQLUSMALLINT,
+ ) -> SQLRETURN;
+}
diff --git a/vendor/winapi/src/um/sspi.rs b/vendor/winapi/src/um/sspi.rs
new file mode 100644
index 000000000..edc0dbc6d
--- /dev/null
+++ b/vendor/winapi/src/um/sspi.rs
@@ -0,0 +1,7 @@
+// 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.
+//! Security Support Provider Interface Prototypes and structure definitions
+pub use shared::sspi::*;
diff --git a/vendor/winapi/src/um/stringapiset.rs b/vendor/winapi/src/um/stringapiset.rs
new file mode 100644
index 000000000..61560ed14
--- /dev/null
+++ b/vendor/winapi/src/um/stringapiset.rs
@@ -0,0 +1,75 @@
+// 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 ctypes::c_int;
+use shared::minwindef::{BOOL, DWORD, LPARAM, LPBOOL, LPVOID, LPWORD, UINT};
+use um::winnls::LPNLSVERSIONINFO;
+use um::winnt::{LCID, LPCSTR, LPCWCH, LPCWSTR, LPSTR, LPWSTR, PCNZWCH};
+extern "system" {
+ pub fn CompareStringEx(
+ lpLocaleName: LPCWSTR,
+ dwCmpFlags: DWORD,
+ lpString1: LPCWCH,
+ cchCount1: c_int,
+ lpString2: LPCWCH,
+ cchCount2: c_int,
+ lpVersionInformation: LPNLSVERSIONINFO,
+ lpReserved: LPVOID,
+ lParam: LPARAM,
+ ) -> c_int;
+ pub fn CompareStringOrdinal(
+ lpString1: LPCWCH,
+ cchCount1: c_int,
+ lpString2: LPCWCH,
+ cchCount2: c_int,
+ bIgnoreCase: BOOL,
+ ) -> c_int;
+ pub fn CompareStringW(
+ Locale: LCID,
+ dwCmpFlags: DWORD,
+ lpString1: PCNZWCH,
+ cchCount1: c_int,
+ lpString2: PCNZWCH,
+ cchCount2: c_int,
+ ) -> c_int;
+ pub fn FoldStringW(
+ dwMapFlags: DWORD,
+ lpSrcStr: LPCWCH,
+ cchSrc: c_int,
+ lpDestStr: LPWSTR,
+ cchDest: c_int,
+ ) -> c_int;
+ pub fn GetStringTypeExW(
+ Locale: LCID,
+ dwInfoType: DWORD,
+ lpSrcStr: LPCWCH,
+ cchSrc: c_int,
+ lpCharType: LPWORD,
+ ) -> BOOL;
+ pub fn GetStringTypeW(
+ dwInfoType: DWORD,
+ lpSrcStr: LPCWCH,
+ cchSrc: c_int,
+ lpCharType: LPWORD,
+ ) -> BOOL;
+ pub fn MultiByteToWideChar(
+ CodePage: UINT,
+ dwFlags: DWORD,
+ lpMultiByteStr: LPCSTR,
+ cbMultiByte: c_int,
+ lpWideCharStr: LPWSTR,
+ cchWideChar: c_int,
+ ) -> c_int;
+ pub fn WideCharToMultiByte(
+ CodePage: UINT,
+ dwFlags: DWORD,
+ lpWideCharStr: LPCWSTR,
+ cchWideChar: c_int,
+ lpMultiByteStr: LPSTR,
+ cbMultiByte: c_int,
+ lpDefaultChar: LPCSTR,
+ lpUsedDefaultChar: LPBOOL,
+ ) -> c_int;
+}
diff --git a/vendor/winapi/src/um/strmif.rs b/vendor/winapi/src/um/strmif.rs
new file mode 100644
index 000000000..db08afd9a
--- /dev/null
+++ b/vendor/winapi/src/um/strmif.rs
@@ -0,0 +1,7 @@
+// 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 um::winnt::LONGLONG;
+pub type REFERENCE_TIME = LONGLONG;
diff --git a/vendor/winapi/src/um/subauth.rs b/vendor/winapi/src/um/subauth.rs
new file mode 100644
index 000000000..b5d539b25
--- /dev/null
+++ b/vendor/winapi/src/um/subauth.rs
@@ -0,0 +1,204 @@
+// 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.
+//! Types and macros for Subauthentication Packages.
+use shared::minwindef::{PUCHAR, ULONG, USHORT};
+use um::winnt::{BOOLEAN, CHAR, LARGE_INTEGER, LONG, PCHAR, PVOID, PWSTR};
+STRUCT!{struct UNICODE_STRING {
+ Length: USHORT,
+ MaximumLength: USHORT,
+ Buffer: PWSTR,
+}}
+pub type PUNICODE_STRING = *mut UNICODE_STRING;
+STRUCT!{struct STRING {
+ Length: USHORT,
+ MaximumLength: USHORT,
+ Buffer: PCHAR,
+}}
+pub type PSTRING = *mut STRING;
+STRUCT!{struct OLD_LARGE_INTEGER {
+ LowPart: ULONG,
+ HighPart: LONG,
+}}
+pub type POLD_LARGE_INTEGER = *mut OLD_LARGE_INTEGER;
+pub type SAM_HANDLE = PVOID;
+pub type PSAM_HANDLE = *mut PVOID;
+pub const USER_ACCOUNT_DISABLED: ULONG = 0x00000001;
+pub const USER_HOME_DIRECTORY_REQUIRED: ULONG = 0x00000002;
+pub const USER_PASSWORD_NOT_REQUIRED: ULONG = 0x00000004;
+pub const USER_TEMP_DUPLICATE_ACCOUNT: ULONG = 0x00000008;
+pub const USER_NORMAL_ACCOUNT: ULONG = 0x00000010;
+pub const USER_MNS_LOGON_ACCOUNT: ULONG = 0x00000020;
+pub const USER_INTERDOMAIN_TRUST_ACCOUNT: ULONG = 0x00000040;
+pub const USER_WORKSTATION_TRUST_ACCOUNT: ULONG = 0x00000080;
+pub const USER_SERVER_TRUST_ACCOUNT: ULONG = 0x00000100;
+pub const USER_DONT_EXPIRE_PASSWORD: ULONG = 0x00000200;
+pub const USER_ACCOUNT_AUTO_LOCKED: ULONG = 0x00000400;
+pub const USER_ENCRYPTED_TEXT_PASSWORD_ALLOWED: ULONG = 0x00000800;
+pub const USER_SMARTCARD_REQUIRED: ULONG = 0x00001000;
+pub const USER_TRUSTED_FOR_DELEGATION: ULONG = 0x00002000;
+pub const USER_NOT_DELEGATED: ULONG = 0x00004000;
+pub const USER_USE_DES_KEY_ONLY: ULONG = 0x00008000;
+pub const USER_DONT_REQUIRE_PREAUTH: ULONG = 0x00010000;
+pub const USER_PASSWORD_EXPIRED: ULONG = 0x00020000;
+pub const USER_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION: ULONG = 0x00040000;
+pub const USER_NO_AUTH_DATA_REQUIRED: ULONG = 0x00080000;
+pub const USER_PARTIAL_SECRETS_ACCOUNT: ULONG = 0x00100000;
+pub const USER_USE_AES_KEYS: ULONG = 0x00200000;
+pub const NEXT_FREE_ACCOUNT_CONTROL_BIT: ULONG = USER_USE_AES_KEYS << 1;
+pub const USER_MACHINE_ACCOUNT_MASK: ULONG = USER_INTERDOMAIN_TRUST_ACCOUNT
+ | USER_WORKSTATION_TRUST_ACCOUNT | USER_SERVER_TRUST_ACCOUNT;
+pub const USER_ACCOUNT_TYPE_MASK: ULONG = USER_TEMP_DUPLICATE_ACCOUNT | USER_NORMAL_ACCOUNT
+ | USER_MACHINE_ACCOUNT_MASK;
+pub const USER_COMPUTED_ACCOUNT_CONTROL_BITS: ULONG = USER_ACCOUNT_AUTO_LOCKED
+ | USER_PASSWORD_EXPIRED;
+pub const SAM_DAYS_PER_WEEK: USHORT = 7;
+pub const SAM_HOURS_PER_WEEK: USHORT = 24 * SAM_DAYS_PER_WEEK;
+pub const SAM_MINUTES_PER_WEEK: USHORT = 60 * SAM_HOURS_PER_WEEK;
+STRUCT!{struct LOGON_HOURS {
+ UnitsPerWeek: USHORT,
+ LogonHours: PUCHAR,
+}}
+pub type PLOGON_HOURS = *mut LOGON_HOURS;
+STRUCT!{struct SR_SECURITY_DESCRIPTOR {
+ Length: ULONG,
+ SecurityDescriptor: PUCHAR,
+}}
+pub type PSR_SECURITY_DESCRIPTOR = *mut SR_SECURITY_DESCRIPTOR;
+STRUCT!{struct USER_ALL_INFORMATION {
+ LastLogon: LARGE_INTEGER,
+ LastLogoff: LARGE_INTEGER,
+ PasswordLastSet: LARGE_INTEGER,
+ AccountExpires: LARGE_INTEGER,
+ PasswordCanChange: LARGE_INTEGER,
+ PasswordMustChange: LARGE_INTEGER,
+ UserName: UNICODE_STRING,
+ FullName: UNICODE_STRING,
+ HomeDirectory: UNICODE_STRING,
+ HomeDirectoryDrive: UNICODE_STRING,
+ ScriptPath: UNICODE_STRING,
+ ProfilePath: UNICODE_STRING,
+ AdminComment: UNICODE_STRING,
+ WorkStations: UNICODE_STRING,
+ UserComment: UNICODE_STRING,
+ Parameters: UNICODE_STRING,
+ LmPassword: UNICODE_STRING,
+ NtPassword: UNICODE_STRING,
+ PrivateData: UNICODE_STRING,
+ SecurityDescriptor: SR_SECURITY_DESCRIPTOR,
+ UserId: ULONG,
+ PrimaryGroupId: ULONG,
+ UserAccountControl: ULONG,
+ WhichFields: ULONG,
+ LogonHours: LOGON_HOURS,
+ BadPasswordCount: USHORT,
+ LogonCount: USHORT,
+ CountryCode: USHORT,
+ CodePage: USHORT,
+ LmPasswordPresent: BOOLEAN,
+ NtPasswordPresent: BOOLEAN,
+ PasswordExpired: BOOLEAN,
+ PrivateDataSensitive: BOOLEAN,
+}}
+pub type PUSER_ALL_INFORMATION = *mut USER_ALL_INFORMATION;
+pub const USER_ALL_PARAMETERS: ULONG = 0x00200000;
+pub const CLEAR_BLOCK_LENGTH: usize = 8;
+STRUCT!{struct CLEAR_BLOCK {
+ data: [CHAR; CLEAR_BLOCK_LENGTH],
+}}
+pub type PCLEAR_BLOCK = *mut CLEAR_BLOCK;
+pub const CYPHER_BLOCK_LENGTH: usize = 8;
+STRUCT!{struct CYPHER_BLOCK {
+ data: [CHAR; CYPHER_BLOCK_LENGTH],
+}}
+pub type PCYPHER_BLOCK = *mut CYPHER_BLOCK;
+STRUCT!{struct LM_OWF_PASSWORD {
+ data: [CYPHER_BLOCK; 2],
+}}
+pub type PLM_OWF_PASSWORD = *mut LM_OWF_PASSWORD;
+pub type LM_CHALLENGE = CLEAR_BLOCK;
+pub type PLM_CHALLENGE = *mut LM_CHALLENGE;
+pub type NT_OWF_PASSWORD = LM_OWF_PASSWORD;
+pub type PNT_OWF_PASSWORD = *mut NT_OWF_PASSWORD;
+pub type NT_CHALLENGE = LM_CHALLENGE;
+pub type PNT_CHALLENGE = *mut NT_CHALLENGE;
+pub const USER_SESSION_KEY_LENGTH: usize = CYPHER_BLOCK_LENGTH * 2;
+STRUCT!{struct USER_SESSION_KEY {
+ data: [CYPHER_BLOCK; 2],
+}}
+pub type PUSER_SESSION_KEY = *mut USER_SESSION_KEY;
+ENUM!{enum NETLOGON_LOGON_INFO_CLASS {
+ NetlogonInteractiveInformation = 1,
+ NetlogonNetworkInformation,
+ NetlogonServiceInformation,
+ NetlogonGenericInformation,
+ NetlogonInteractiveTransitiveInformation,
+ NetlogonNetworkTransitiveInformation,
+ NetlogonServiceTransitiveInformation,
+}}
+STRUCT!{struct NETLOGON_LOGON_IDENTITY_INFO {
+ LogonDomainName: UNICODE_STRING,
+ ParameterControl: ULONG,
+ LogonId: OLD_LARGE_INTEGER,
+ UserName: UNICODE_STRING,
+ Workstation: UNICODE_STRING,
+}}
+pub type PNETLOGON_LOGON_IDENTITY_INFO = *mut NETLOGON_LOGON_IDENTITY_INFO;
+STRUCT!{struct NETLOGON_INTERACTIVE_INFO {
+ Identity: NETLOGON_LOGON_IDENTITY_INFO,
+ LmOwfPassword: LM_OWF_PASSWORD,
+ NtOwfPassword: NT_OWF_PASSWORD,
+}}
+pub type PNETLOGON_INTERACTIVE_INFO = *mut NETLOGON_INTERACTIVE_INFO;
+STRUCT!{struct NETLOGON_SERVICE_INFO {
+ Identity: NETLOGON_LOGON_IDENTITY_INFO,
+ LmOwfPassword: LM_OWF_PASSWORD,
+ NtOwfPassword: NT_OWF_PASSWORD,
+}}
+pub type PNETLOGON_SERVICE_INFO = *mut NETLOGON_SERVICE_INFO;
+STRUCT!{struct NETLOGON_NETWORK_INFO {
+ Identity: NETLOGON_LOGON_IDENTITY_INFO,
+ LmChallenge: LM_CHALLENGE,
+ NtChallengeResponse: STRING,
+ LmChallengeResponse: STRING,
+}}
+pub type PNETLOGON_NETWORK_INFO = *mut NETLOGON_NETWORK_INFO;
+STRUCT!{struct NETLOGON_GENERIC_INFO {
+ Identity: NETLOGON_LOGON_IDENTITY_INFO,
+ PackageName: UNICODE_STRING,
+ DataLength: ULONG,
+ LogonData: PUCHAR,
+}}
+pub type PNETLOGON_GENERIC_INFO = *mut NETLOGON_GENERIC_INFO;
+pub const MSV1_0_PASSTHRU: ULONG = 0x01;
+pub const MSV1_0_GUEST_LOGON: ULONG = 0x02;
+STRUCT!{struct MSV1_0_VALIDATION_INFO {
+ LogoffTime: LARGE_INTEGER,
+ KickoffTime: LARGE_INTEGER,
+ LogonServer: UNICODE_STRING,
+ LogonDomainName: UNICODE_STRING,
+ SessionKey: USER_SESSION_KEY,
+ Authoritative: BOOLEAN,
+ UserFlags: ULONG,
+ WhichFields: ULONG,
+ UserId: ULONG,
+}}
+pub type PMSV1_0_VALIDATION_INFO = *mut MSV1_0_VALIDATION_INFO;
+pub const MSV1_0_VALIDATION_LOGOFF_TIME: ULONG = 0x00000001;
+pub const MSV1_0_VALIDATION_KICKOFF_TIME: ULONG = 0x00000002;
+pub const MSV1_0_VALIDATION_LOGON_SERVER: ULONG = 0x00000004;
+pub const MSV1_0_VALIDATION_LOGON_DOMAIN: ULONG = 0x00000008;
+pub const MSV1_0_VALIDATION_SESSION_KEY: ULONG = 0x00000010;
+pub const MSV1_0_VALIDATION_USER_FLAGS: ULONG = 0x00000020;
+pub const MSV1_0_VALIDATION_USER_ID: ULONG = 0x00000040;
+pub const MSV1_0_SUBAUTH_ACCOUNT_DISABLED: ULONG = 0x00000001;
+pub const MSV1_0_SUBAUTH_PASSWORD: ULONG = 0x00000002;
+pub const MSV1_0_SUBAUTH_WORKSTATIONS: ULONG = 0x00000004;
+pub const MSV1_0_SUBAUTH_LOGON_HOURS: ULONG = 0x00000008;
+pub const MSV1_0_SUBAUTH_ACCOUNT_EXPIRY: ULONG = 0x00000010;
+pub const MSV1_0_SUBAUTH_PASSWORD_EXPIRY: ULONG = 0x00000020;
+pub const MSV1_0_SUBAUTH_ACCOUNT_TYPE: ULONG = 0x00000040;
+pub const MSV1_0_SUBAUTH_LOCKOUT: ULONG = 0x00000080;
+// STATUS_*
diff --git a/vendor/winapi/src/um/synchapi.rs b/vendor/winapi/src/um/synchapi.rs
new file mode 100644
index 000000000..205579e66
--- /dev/null
+++ b/vendor/winapi/src/um/synchapi.rs
@@ -0,0 +1,349 @@
+// 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.
+//! ApiSet Contract for api-ms-win-core-synch-l1
+use shared::basetsd::SIZE_T;
+use shared::minwindef::{BOOL, DWORD, LPLONG, LPVOID, PBOOL, ULONG};
+use um::minwinbase::{
+ LPCRITICAL_SECTION, LPSECURITY_ATTRIBUTES, PCRITICAL_SECTION, PREASON_CONTEXT,
+};
+use um::winnt::{
+ BOOLEAN, HANDLE, LARGE_INTEGER, LONG, LPCSTR, LPCWSTR, PRTL_BARRIER, PRTL_RUN_ONCE,
+ PVOID, RTL_BARRIER, RTL_CONDITION_VARIABLE, RTL_CONDITION_VARIABLE_INIT,
+ RTL_RUN_ONCE, RTL_SRWLOCK, RTL_SRWLOCK_INIT, VOID
+};
+pub const SRWLOCK_INIT: SRWLOCK = RTL_SRWLOCK_INIT;
+pub type SRWLOCK = RTL_SRWLOCK;
+pub type PSRWLOCK = *mut RTL_SRWLOCK;
+extern "system" {
+ pub fn InitializeSRWLock(
+ SRWLock: PSRWLOCK,
+ );
+ pub fn ReleaseSRWLockExclusive(
+ SRWLock: PSRWLOCK,
+ );
+ pub fn ReleaseSRWLockShared(
+ SRWLock: PSRWLOCK,
+ );
+ pub fn AcquireSRWLockExclusive(
+ SRWLock: PSRWLOCK,
+ );
+ pub fn AcquireSRWLockShared(
+ SRWLock: PSRWLOCK,
+ );
+ pub fn TryAcquireSRWLockExclusive(
+ SRWLock: PSRWLOCK,
+ ) -> BOOLEAN;
+ pub fn TryAcquireSRWLockShared(
+ SRWLock: PSRWLOCK,
+ ) -> BOOLEAN;
+ pub fn InitializeCriticalSection(
+ lpCriticalSection: LPCRITICAL_SECTION,
+ );
+ pub fn EnterCriticalSection(
+ lpCriticalSection: LPCRITICAL_SECTION,
+ );
+ pub fn LeaveCriticalSection(
+ lpCriticalSection: LPCRITICAL_SECTION,
+ );
+ pub fn InitializeCriticalSectionAndSpinCount(
+ lpCriticalSection: LPCRITICAL_SECTION,
+ dwSpinCount: DWORD,
+ ) -> BOOL;
+ pub fn InitializeCriticalSectionEx(
+ lpCriticalSection: LPCRITICAL_SECTION,
+ dwSpinCount: DWORD,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn SetCriticalSectionSpinCount(
+ lpCriticalSection: LPCRITICAL_SECTION,
+ dwSpinCount: DWORD,
+ ) -> DWORD;
+ pub fn TryEnterCriticalSection(
+ lpCriticalSection: LPCRITICAL_SECTION,
+ ) -> BOOL;
+ pub fn DeleteCriticalSection(
+ lpCriticalSection: LPCRITICAL_SECTION,
+ );
+}
+pub type INIT_ONCE = RTL_RUN_ONCE;
+pub type PINIT_ONCE = PRTL_RUN_ONCE;
+pub type LPINIT_ONCE = PRTL_RUN_ONCE;
+//pub const INIT_ONCE_STATIC_INIT: INIT_ONCE = RTL_RUN_ONCE_INIT;
+//pub const INIT_ONCE_CHECK_ONLY: ULONG = RTL_RUN_ONCE_CHECK_ONLY;
+//pub const INIT_ONCE_ASYNC: ULONG = RTL_RUN_ONCE_ASYNC;
+//pub const INIT_ONCE_INIT_FAILED: ULONG = RTL_RUN_ONCE_INIT_FAILED;
+//pub const INIT_ONCE_CTX_RESERVED_BITS: usize = RTL_RUN_ONCE_CTX_RESERVED_BITS;
+FN!{stdcall PINIT_ONCE_FN(
+ InitOnce: PINIT_ONCE,
+ Parameter: PVOID,
+ Context: *mut PVOID,
+) -> BOOL}
+extern "system" {
+ pub fn InitOnceInitialize(
+ InitOnce: PINIT_ONCE,
+ );
+ pub fn InitOnceExecuteOnce(
+ InitOnce: PINIT_ONCE,
+ InitFn: PINIT_ONCE_FN,
+ Parameter: PVOID,
+ Context: *mut LPVOID,
+ ) -> BOOL;
+ pub fn InitOnceBeginInitialize(
+ lpInitOnce: LPINIT_ONCE,
+ dwFlags: DWORD,
+ fPending: PBOOL,
+ lpContext: *mut LPVOID,
+ ) -> BOOL;
+ pub fn InitOnceComplete(
+ lpInitOnce: LPINIT_ONCE,
+ dwFlags: DWORD,
+ lpContext: LPVOID,
+ ) -> BOOL;
+}
+pub type CONDITION_VARIABLE = RTL_CONDITION_VARIABLE;
+pub type PCONDITION_VARIABLE = *mut CONDITION_VARIABLE;
+pub const CONDITION_VARIABLE_INIT: CONDITION_VARIABLE = RTL_CONDITION_VARIABLE_INIT;
+//pub const CONDITION_VARIABLE_LOCKMODE_SHARED: ULONG = RTL_CONDITION_VARIABLE_LOCKMODE_SHARED;
+extern "system" {
+ pub fn InitializeConditionVariable(
+ ConditionVariable: PCONDITION_VARIABLE,
+ );
+ pub fn WakeConditionVariable(
+ ConditionVariable: PCONDITION_VARIABLE,
+ );
+ pub fn WakeAllConditionVariable(
+ ConditionVariable: PCONDITION_VARIABLE,
+ );
+ pub fn SleepConditionVariableCS(
+ ConditionVariable: PCONDITION_VARIABLE,
+ CriticalSection: PCRITICAL_SECTION,
+ dwMilliseconds: DWORD,
+ ) -> BOOL;
+ pub fn SleepConditionVariableSRW(
+ ConditionVariable: PCONDITION_VARIABLE,
+ SRWLock: PSRWLOCK,
+ dwMilliseconds: DWORD,
+ Flags: ULONG,
+ ) -> BOOL;
+ pub fn SetEvent(
+ hEvent: HANDLE,
+ ) -> BOOL;
+ pub fn ResetEvent(
+ hEvent: HANDLE,
+ ) -> BOOL;
+ pub fn ReleaseSemaphore(
+ hSemaphore: HANDLE,
+ lReleaseCount: LONG,
+ lpPreviousCount: LPLONG,
+ ) -> BOOL;
+ pub fn ReleaseMutex(
+ hMutex: HANDLE,
+ ) -> BOOL;
+ pub fn WaitForSingleObject(
+ hHandle: HANDLE,
+ dwMilliseconds: DWORD,
+ ) -> DWORD;
+ pub fn SleepEx(
+ dwMilliseconds: DWORD,
+ bAlertable: BOOL,
+ ) -> DWORD;
+ pub fn WaitForSingleObjectEx(
+ hHandle: HANDLE,
+ dwMilliseconds: DWORD,
+ bAlertable: BOOL,
+ ) -> DWORD;
+ pub fn WaitForMultipleObjectsEx(
+ nCount: DWORD,
+ lpHandles: *const HANDLE,
+ bWaitAll: BOOL,
+ dwMilliseconds: DWORD,
+ bAlertable: BOOL,
+ ) -> DWORD;
+}
+//pub const MUTEX_MODIFY_STATE: DWORD = MUTANT_QUERY_STATE;
+//pub const MUTEX_ALL_ACCESS: DWORD = MUTANT_ALL_ACCESS;
+extern "system" {
+ pub fn CreateMutexA(
+ lpMutexAttributes: LPSECURITY_ATTRIBUTES,
+ bInitialOwner: BOOL,
+ lpName: LPCSTR,
+ ) -> HANDLE;
+ pub fn CreateMutexW(
+ lpMutexAttributes: LPSECURITY_ATTRIBUTES,
+ bInitialOwner: BOOL,
+ lpName: LPCWSTR,
+ ) -> HANDLE;
+ pub fn OpenMutexW(
+ dwDesiredAccess: DWORD,
+ bInheritHandle: BOOL,
+ lpName: LPCWSTR,
+ ) -> HANDLE;
+ pub fn CreateEventA(
+ lpEventAttributes: LPSECURITY_ATTRIBUTES,
+ bManualReset: BOOL,
+ bInitialState: BOOL,
+ lpName: LPCSTR,
+ ) -> HANDLE;
+ pub fn CreateEventW(
+ lpEventAttributes: LPSECURITY_ATTRIBUTES,
+ bManualReset: BOOL,
+ bInitialState: BOOL,
+ lpName: LPCWSTR,
+ ) -> HANDLE;
+ pub fn OpenEventA(
+ dwDesiredAccess: DWORD,
+ bInheritHandle: BOOL,
+ lpName: LPCSTR,
+ ) -> HANDLE;
+ pub fn OpenEventW(
+ dwDesiredAccess: DWORD,
+ bInheritHandle: BOOL,
+ lpName: LPCWSTR,
+ ) -> HANDLE;
+ pub fn OpenSemaphoreW(
+ dwDesiredAccess: DWORD,
+ bInheritHandle: BOOL,
+ lpName: LPCWSTR,
+ ) -> HANDLE;
+}
+FN!{stdcall PTIMERAPCROUTINE(
+ lpArgToCompletionRoutine: LPVOID,
+ dwTimerLowValue: DWORD,
+ dwTimerHighValue: DWORD,
+) -> ()}
+extern "system" {
+ pub fn OpenWaitableTimerW(
+ dwDesiredAccess: DWORD,
+ bInheritHandle: BOOL,
+ lpTimerName: LPCWSTR,
+ ) -> HANDLE;
+ pub fn SetWaitableTimerEx(
+ hTimer: HANDLE,
+ lpDueTime: *const LARGE_INTEGER,
+ lPeriod: LONG,
+ pfnCompletionRoutine: PTIMERAPCROUTINE,
+ lpArgToCompletionRoutine: LPVOID,
+ WakeContext: PREASON_CONTEXT,
+ TolerableDelay: ULONG,
+ ) -> BOOL;
+ pub fn SetWaitableTimer(
+ hTimer: HANDLE,
+ lpDueTime: *const LARGE_INTEGER,
+ lPeriod: LONG,
+ pfnCompletionRoutine: PTIMERAPCROUTINE,
+ lpArgToCompletionRoutine: LPVOID,
+ fResume: BOOL,
+ ) -> BOOL;
+ pub fn CancelWaitableTimer(
+ hTimer: HANDLE,
+ ) -> BOOL;
+}
+pub const CREATE_MUTEX_INITIAL_OWNER: DWORD = 0x00000001;
+extern "system" {
+ pub fn CreateMutexExA(
+ lpMutexAttributes: LPSECURITY_ATTRIBUTES,
+ lpName: LPCSTR,
+ dwFlags: DWORD,
+ dwDesiredAccess: DWORD,
+ ) -> HANDLE;
+ pub fn CreateMutexExW(
+ lpMutexAttributes: LPSECURITY_ATTRIBUTES,
+ lpName: LPCWSTR,
+ dwFlags: DWORD,
+ dwDesiredAccess: DWORD,
+ ) -> HANDLE;
+}
+pub const CREATE_EVENT_MANUAL_RESET: DWORD = 0x00000001;
+pub const CREATE_EVENT_INITIAL_SET: DWORD = 0x00000002;
+extern "system" {
+ pub fn CreateEventExA(
+ lpEventAttributes: LPSECURITY_ATTRIBUTES,
+ lpName: LPCSTR,
+ dwFlags: DWORD,
+ dwDesiredAccess: DWORD,
+ ) -> HANDLE;
+ pub fn CreateEventExW(
+ lpEventAttributes: LPSECURITY_ATTRIBUTES,
+ lpName: LPCWSTR,
+ dwFlags: DWORD,
+ dwDesiredAccess: DWORD,
+ ) -> HANDLE;
+ pub fn CreateSemaphoreExW(
+ lpSemaphoreAttributes: LPSECURITY_ATTRIBUTES,
+ lInitialCount: LONG,
+ lMaximumCount: LONG,
+ lpName: LPCWSTR,
+ dwFlags: DWORD,
+ dwDesiredAccess: DWORD,
+ ) -> HANDLE;
+}
+pub const CREATE_WAITABLE_TIMER_MANUAL_RESET: DWORD = 0x00000001;
+extern "system" {
+ pub fn CreateWaitableTimerExW(
+ lpTimerAttributes: LPSECURITY_ATTRIBUTES,
+ lpTimerName: LPCWSTR,
+ dwFlags: DWORD,
+ dwDesiredAccess: DWORD,
+ ) -> HANDLE;
+}
+pub type SYNCHRONIZATION_BARRIER = RTL_BARRIER;
+pub type PSYNCHRONIZATION_BARRIER = PRTL_BARRIER;
+pub type LPSYNCHRONIZATION_BARRIER = PRTL_BARRIER;
+pub const SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY: DWORD = 0x01;
+pub const SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY: DWORD = 0x02;
+pub const SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE: DWORD = 0x04;
+extern "system" {
+ pub fn EnterSynchronizationBarrier(
+ lpBarrier: LPSYNCHRONIZATION_BARRIER,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn InitializeSynchronizationBarrier(
+ lpBarrier: LPSYNCHRONIZATION_BARRIER,
+ lTotalThreads: LONG,
+ lSpinCount: LONG,
+ ) -> BOOL;
+ pub fn DeleteSynchronizationBarrier(
+ lpBarrier: LPSYNCHRONIZATION_BARRIER,
+ ) -> BOOL;
+ pub fn Sleep(
+ dwMilliseconds: DWORD,
+ );
+ pub fn WaitOnAddress(
+ Address: *mut VOID,
+ CompareAddress: PVOID,
+ AddressSize: SIZE_T,
+ dwMilliseconds: DWORD,
+ ) -> BOOL;
+ pub fn WakeByAddressSingle(
+ Address: PVOID,
+ );
+ pub fn WakeByAddressAll(
+ Address: PVOID,
+ );
+ pub fn SignalObjectAndWait(
+ hObjectToSignal: HANDLE,
+ hObjectToWaitOn: HANDLE,
+ dwMilliseconds: DWORD,
+ bAlertable: BOOL,
+ ) -> DWORD;
+ pub fn WaitForMultipleObjects(
+ nCount: DWORD,
+ lpHandles: *const HANDLE,
+ bWaitAll: BOOL,
+ dwMilliseconds: DWORD,
+ ) -> DWORD;
+ pub fn CreateSemaphoreW(
+ lpSemaphoreAttributes: LPSECURITY_ATTRIBUTES,
+ lInitialCount: LONG,
+ lMaximumCount: LONG,
+ lpName: LPCWSTR,
+ ) -> HANDLE;
+ pub fn CreateWaitableTimerW(
+ lpTimerAttributes: LPSECURITY_ATTRIBUTES,
+ bManualReset: BOOL,
+ lpTimerName: LPCWSTR,
+ ) -> HANDLE;
+}
diff --git a/vendor/winapi/src/um/sysinfoapi.rs b/vendor/winapi/src/um/sysinfoapi.rs
new file mode 100644
index 000000000..03bdb47d1
--- /dev/null
+++ b/vendor/winapi/src/um/sysinfoapi.rs
@@ -0,0 +1,217 @@
+// 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.
+//! ApiSet Contract for api-ms-win-core-sysinfo-l1.
+use shared::basetsd::DWORD_PTR;
+use shared::minwindef::{
+ BOOL, BYTE, DWORD, LPDWORD, LPFILETIME, LPVOID, PBOOL, PDWORD, UINT, USHORT, WORD,
+};
+use um::minwinbase::{LPSYSTEMTIME, SYSTEMTIME};
+use um::winnt::{
+ DWORDLONG, HANDLE, LOGICAL_PROCESSOR_RELATIONSHIP, LPCSTR, LPCWSTR, LPOSVERSIONINFOA,
+ LPOSVERSIONINFOW, LPSTR, LPWSTR, PSYSTEM_LOGICAL_PROCESSOR_INFORMATION,
+ PSYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION, PULONGLONG, PVOID, ULONGLONG,
+};
+STRUCT!{struct SYSTEM_INFO_u_s {
+ wProcessorArchitecture: WORD,
+ wReserved: WORD,
+}}
+UNION!{union SYSTEM_INFO_u {
+ [u32; 1],
+ dwOemId dwOemId_mut: DWORD,
+ s s_mut: SYSTEM_INFO_u_s,
+}}
+STRUCT!{struct SYSTEM_INFO {
+ u: SYSTEM_INFO_u,
+ dwPageSize: DWORD,
+ lpMinimumApplicationAddress: LPVOID,
+ lpMaximumApplicationAddress: LPVOID,
+ dwActiveProcessorMask: DWORD_PTR,
+ dwNumberOfProcessors: DWORD,
+ dwProcessorType: DWORD,
+ dwAllocationGranularity: DWORD,
+ wProcessorLevel: WORD,
+ wProcessorRevision: WORD,
+}}
+pub type LPSYSTEM_INFO = *mut SYSTEM_INFO;
+STRUCT!{struct MEMORYSTATUSEX {
+ dwLength: DWORD,
+ dwMemoryLoad: DWORD,
+ ullTotalPhys: DWORDLONG,
+ ullAvailPhys: DWORDLONG,
+ ullTotalPageFile: DWORDLONG,
+ ullAvailPageFile: DWORDLONG,
+ ullTotalVirtual: DWORDLONG,
+ ullAvailVirtual: DWORDLONG,
+ ullAvailExtendedVirtual: DWORDLONG,
+}}
+pub type LPMEMORYSTATUSEX = *mut MEMORYSTATUSEX;
+extern "system" {
+ pub fn GlobalMemoryStatusEx(
+ lpBuffer: LPMEMORYSTATUSEX,
+ ) -> BOOL;
+ pub fn GetSystemInfo(
+ lpSystemInfo: LPSYSTEM_INFO,
+ );
+ pub fn GetSystemTime(
+ lpSystemTime: LPSYSTEMTIME,
+ );
+ pub fn GetSystemTimeAsFileTime(
+ lpSystemTimeAsFileTime: LPFILETIME,
+ );
+ pub fn GetLocalTime(
+ lpSystemTime: LPSYSTEMTIME,
+ );
+ pub fn GetVersion() -> DWORD;
+ pub fn SetLocalTime(
+ lpSystemTime: *const SYSTEMTIME,
+ ) -> BOOL;
+ pub fn GetTickCount() -> DWORD;
+ pub fn GetTickCount64() -> ULONGLONG;
+ pub fn GetSystemTimeAdjustment(
+ lpTimeAdjustment: PDWORD,
+ lpTimeIncrement: PDWORD,
+ lpTimeAdjustmentDisabled: PBOOL,
+ ) -> BOOL;
+ pub fn GetSystemDirectoryA(
+ lpBuffer: LPSTR,
+ uSize: UINT,
+ ) -> UINT;
+ pub fn GetSystemDirectoryW(
+ lpBuffer: LPWSTR,
+ uSize: UINT,
+ ) -> UINT;
+ pub fn GetWindowsDirectoryA(
+ lpBuffer: LPSTR,
+ uSize: UINT,
+ ) -> UINT;
+ pub fn GetWindowsDirectoryW(
+ lpBuffer: LPWSTR,
+ uSize: UINT,
+ ) -> UINT;
+ pub fn GetSystemWindowsDirectoryA(
+ lpBuffer: LPSTR,
+ uSize: UINT,
+ ) -> UINT;
+ pub fn GetSystemWindowsDirectoryW(
+ lpBuffer: LPWSTR,
+ uSize: UINT,
+ ) -> UINT;
+}
+ENUM!{enum COMPUTER_NAME_FORMAT {
+ ComputerNameNetBIOS,
+ ComputerNameDnsHostname,
+ ComputerNameDnsDomain,
+ ComputerNameDnsFullyQualified,
+ ComputerNamePhysicalNetBIOS,
+ ComputerNamePhysicalDnsHostname,
+ ComputerNamePhysicalDnsDomain,
+ ComputerNamePhysicalDnsFullyQualified,
+ ComputerNameMax,
+}}
+extern "system" {
+ pub fn GetComputerNameExA(
+ NameType: COMPUTER_NAME_FORMAT,
+ lpBuffer: LPSTR,
+ nSize: LPDWORD,
+ ) -> BOOL;
+ pub fn GetComputerNameExW(
+ NameType: COMPUTER_NAME_FORMAT,
+ lpBuffer: LPWSTR,
+ nSize: LPDWORD,
+ ) -> BOOL;
+ pub fn SetComputerNameExW(
+ NameType: COMPUTER_NAME_FORMAT,
+ lpBuffer: LPCWSTR,
+ ) -> BOOL;
+ pub fn SetSystemTime(
+ lpSystemTime: *const SYSTEMTIME,
+ ) -> BOOL;
+ pub fn GetVersionExA(
+ lpVersionInformation: LPOSVERSIONINFOA,
+ ) -> BOOL;
+ pub fn GetVersionExW(
+ lpVersionInformation: LPOSVERSIONINFOW,
+ ) -> BOOL;
+ pub fn GetLogicalProcessorInformation(
+ Buffer: PSYSTEM_LOGICAL_PROCESSOR_INFORMATION,
+ ReturnedLength: PDWORD,
+ ) -> BOOL;
+ pub fn GetLogicalProcessorInformationEx(
+ RelationshipType: LOGICAL_PROCESSOR_RELATIONSHIP,
+ Buffer: PSYSTEM_LOGICAL_PROCESSOR_INFORMATION,
+ ReturnedLength: PDWORD,
+ ) -> BOOL;
+ pub fn GetNativeSystemInfo(
+ lpSystemInfo: LPSYSTEM_INFO,
+ );
+ pub fn GetSystemTimePreciseAsFileTime(
+ lpSystemTimeAsFileTime: LPFILETIME,
+ );
+ pub fn GetProductInfo(
+ dwOSMajorVersion: DWORD,
+ dwOSMinorVersion: DWORD,
+ dwSpMajorVersion: DWORD,
+ dwSpMinorVersion: DWORD,
+ pdwReturnedProductType: PDWORD,
+ ) -> BOOL;
+ pub fn VerSetConditionMask(
+ ConditionMask: ULONGLONG,
+ TypeMask: DWORD,
+ Condition: BYTE,
+ ) -> ULONGLONG;
+ // pub fn GetOsSafeBootMode();
+ pub fn EnumSystemFirmwareTables(
+ FirmwareTableProviderSignature: DWORD,
+ pFirmwareTableEnumBuffer: PVOID,
+ BufferSize: DWORD,
+ ) -> UINT;
+ pub fn GetSystemFirmwareTable(
+ FirmwareTableProviderSignature: DWORD,
+ FirmwareTableID: DWORD,
+ pFirmwareTableBuffer: PVOID,
+ BufferSize: DWORD,
+ ) -> UINT;
+ pub fn DnsHostnameToComputerNameExW(
+ Hostname: LPCWSTR,
+ ComputerName: LPWSTR,
+ nSize: LPDWORD,
+ ) -> BOOL;
+ pub fn GetPhysicallyInstalledSystemMemory(
+ TotalMemoryInKilobytes: PULONGLONG,
+ ) -> BOOL;
+}
+pub const SCEX2_ALT_NETBIOS_NAME: DWORD = 0x00000001;
+extern "system" {
+ pub fn SetComputerNameEx2W(
+ NameType: COMPUTER_NAME_FORMAT,
+ Flags: DWORD,
+ lpBuffer: LPCWSTR,
+ ) -> BOOL;
+ pub fn SetSystemTimeAdjustment(
+ dwTimeAdjustment: DWORD,
+ bTimeAdjustmentDisabled: BOOL,
+ ) -> BOOL;
+ pub fn InstallELAMCertificateInfo(
+ ELAMFile: HANDLE,
+ ) -> BOOL;
+ pub fn GetProcessorSystemCycleTime(
+ Group: USHORT,
+ Buffer: PSYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION,
+ ReturnedLength: PDWORD,
+ ) -> BOOL;
+ // pub fn GetOsManufacturingMode();
+ // pub fn GetIntegratedDisplaySize();
+ pub fn SetComputerNameA(
+ lpComputerName: LPCSTR,
+ ) -> BOOL;
+ pub fn SetComputerNameW(
+ lpComputerName: LPCWSTR,
+ ) -> BOOL;
+ pub fn SetComputerNameExA(
+ NameType: COMPUTER_NAME_FORMAT,
+ lpBuffer: LPCSTR,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/systemtopologyapi.rs b/vendor/winapi/src/um/systemtopologyapi.rs
new file mode 100644
index 000000000..8591fac8d
--- /dev/null
+++ b/vendor/winapi/src/um/systemtopologyapi.rs
@@ -0,0 +1,20 @@
+// 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::minwindef::{BOOL, PULONG, PUSHORT, ULONG, USHORT};
+use um::winnt::PGROUP_AFFINITY;
+extern "system" {
+ pub fn GetNumaHighestNodeNumber(
+ HighestNodeNumber: PULONG,
+ ) -> BOOL;
+ pub fn GetNumaNodeProcessorMaskEx(
+ Node: USHORT,
+ ProcessorMask: PGROUP_AFFINITY,
+ ) -> BOOL;
+ pub fn GetNumaProximityNodeEx(
+ ProximityId: ULONG,
+ NodeNumber: PUSHORT,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/taskschd.rs b/vendor/winapi/src/um/taskschd.rs
new file mode 100644
index 000000000..d73786cd3
--- /dev/null
+++ b/vendor/winapi/src/um/taskschd.rs
@@ -0,0 +1,1233 @@
+// 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 ctypes::{c_long, c_short};
+use shared::minwindef::{DWORD, INT};
+use shared::wtypes::{BSTR, DATE, VARIANT_BOOL};
+use um::minwinbase::SYSTEMTIME;
+use um::oaidl::{IDispatch, IDispatchVtbl, SAFEARRAY, VARIANT};
+use um::unknwnbase::{IUnknown, IUnknownVtbl, LPUNKNOWN};
+use um::winnt::{HRESULT, LONG};
+RIDL!{#[uuid(0x0f87369f, 0xa4e5, 0x4cfc, 0xbd, 0x3e, 0x73, 0xe6, 0x15, 0x45, 0x72, 0xdd)]
+class TaskScheduler;}
+RIDL!{#[uuid(0xf2a69db7, 0xda2c, 0x4352, 0x90, 0x66, 0x86, 0xfe, 0xe6, 0xda, 0xca, 0xc9)]
+class TaskHandlerPS;}
+RIDL!{#[uuid(0x9f15266d, 0xd7ba, 0x48f0, 0x93, 0xc1, 0xe6, 0x89, 0x5f, 0x6f, 0xe5, 0xac)]
+class TaskHandlerStatusPS;}
+RIDL!{#[uuid(0x79184a66, 0x8664, 0x423f, 0x97, 0xf1, 0x63, 0x73, 0x56, 0xa5, 0xd8, 0x12)]
+interface ITaskFolderCollection(ITaskFolderCollectionVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Count(
+ pCount: *mut LONG,
+ ) -> HRESULT,
+ fn get_Item(
+ index: VARIANT,
+ ppFolder: *mut *mut ITaskFolder,
+ ) -> HRESULT,
+ fn get__NewEnum(
+ ppEnum: *mut LPUNKNOWN,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8cfac062, 0xa080, 0x4c15, 0x9a, 0x88, 0xaa, 0x7c, 0x2a, 0xf8, 0x0d, 0xfc)]
+interface ITaskFolder(ITaskFolderVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Name(
+ pName: *mut BSTR,
+ ) -> HRESULT,
+ fn get_Path(
+ pPath: *mut BSTR,
+ ) -> HRESULT,
+ fn GetFolder(
+ Path: BSTR,
+ ppFolder: *mut *mut ITaskFolder,
+ ) -> HRESULT,
+ fn GetFolders(
+ flags: LONG,
+ ppFolders: *mut *mut ITaskFolderCollection,
+ ) -> HRESULT,
+ fn CreateFolder(
+ subFolderName: BSTR,
+ sddl: VARIANT,
+ ppFolder: *mut *mut ITaskFolder,
+ ) -> HRESULT,
+ fn DeleteFolder(
+ subFolderName: BSTR,
+ flags: LONG,
+ ) -> HRESULT,
+ fn GetTask(
+ Path: BSTR,
+ ppTask: *mut *mut IRegisteredTask,
+ ) -> HRESULT,
+ fn GetTasks(
+ flags: LONG,
+ ppTasks: *mut *mut IRegisteredTaskCollection,
+ ) -> HRESULT,
+ fn DeleteTask(
+ Name: BSTR,
+ flags: LONG,
+ ) -> HRESULT,
+ fn RegisterTask(
+ Path: BSTR,
+ XmlText: BSTR,
+ flags: LONG,
+ UserId: VARIANT,
+ password: VARIANT,
+ LogonType: TASK_LOGON_TYPE,
+ sddl: VARIANT,
+ ppTask: *mut *mut IRegisteredTask,
+ ) -> HRESULT,
+ fn RegisterTaskDefinition(
+ Path: BSTR,
+ pDefinition: *const ITaskDefinition,
+ flags: LONG,
+ UserId: VARIANT,
+ password: VARIANT,
+ LogonType: TASK_LOGON_TYPE,
+ sddl: VARIANT,
+ ppTask: *mut *mut IRegisteredTask,
+ ) -> HRESULT,
+ fn GetSecurityDescriptor(
+ securityInformation: LONG,
+ pSddl: *mut BSTR,
+ ) -> HRESULT,
+ fn SetSecurityDescriptor(
+ sddl: BSTR,
+ flags: LONG,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x9c86f320, 0xdee3, 0x4dd1, 0xb9, 0x72, 0xa3, 0x03, 0xf2, 0x6b, 0x06, 0x1e)]
+interface IRegisteredTask(IRegisteredTaskVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Name(
+ pName: *mut BSTR,
+ ) -> HRESULT,
+ fn get_Path(
+ pPath: *mut BSTR,
+ ) -> HRESULT,
+ fn get_State(
+ pState: *mut TASK_STATE,
+ ) -> HRESULT,
+ fn get_Enabled(
+ pEnabled: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_Enabled(
+ pEnabled: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn Run(
+ params: VARIANT,
+ ppRunningTask: *mut *mut IRunningTask,
+ ) -> HRESULT,
+ fn RunEx(
+ params: VARIANT,
+ flags: LONG,
+ sessionID: LONG,
+ user: BSTR,
+ ppRunningTask: *mut *mut IRunningTask,
+ ) -> HRESULT,
+ fn GetInstances(
+ flags: LONG,
+ ppRunningTasks: *mut *mut IRunningTaskCollection,
+ ) -> HRESULT,
+ fn get_LastRunTime(
+ pLastRunTime: *mut DATE,
+ ) -> HRESULT,
+ fn get_LastTaskResult(
+ pLastTaskResult: *mut LONG,
+ ) -> HRESULT,
+ fn get_NumberOfMissedRuns(
+ pNumberOfMissedRuns: *mut LONG,
+ ) -> HRESULT,
+ fn get_NextRunTime(
+ pNextRunTime: *mut DATE,
+ ) -> HRESULT,
+ fn get_Definition(
+ ppDefinition: *mut *mut ITaskDefinition,
+ ) -> HRESULT,
+ fn get_Xml(
+ pXml: *mut BSTR,
+ ) -> HRESULT,
+ fn GetSecurityDescriptor(
+ securityInformation: LONG,
+ pSddl: *mut BSTR,
+ ) -> HRESULT,
+ fn SetSecurityDescriptor(
+ sddl: BSTR,
+ flags: LONG,
+ ) -> HRESULT,
+ fn Stop(
+ flags: LONG,
+ ) -> HRESULT,
+ fn GetRunTimes(
+ pstStart: *const SYSTEMTIME,
+ pstEnd: *const SYSTEMTIME,
+ pCount: *mut DWORD,
+ pRunTimes: *mut *mut SYSTEMTIME,
+ ) -> HRESULT,
+}}
+ENUM!{enum TASK_STATE {
+ TASK_STATE_UNKNOWN = 0,
+ TASK_STATE_DISABLED = 1,
+ TASK_STATE_QUEUED = 2,
+ TASK_STATE_READY = 3,
+ TASK_STATE_RUNNING = 4,
+}}
+RIDL!{#[uuid(0x653758fb, 0x7b9a, 0x4f1e, 0xa4, 0x71, 0xbe, 0xeb, 0x8e, 0x9b, 0x83, 0x4e)]
+interface IRunningTask(IRunningTaskVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Name(
+ pName: *mut BSTR,
+ ) -> HRESULT,
+ fn get_InstanceGuid(
+ pGuid: *mut BSTR,
+ ) -> HRESULT,
+ fn get_Path(
+ pPath: *mut BSTR,
+ ) -> HRESULT,
+ fn get_State(
+ pState: *mut TASK_STATE,
+ ) -> HRESULT,
+ fn get_CurrentAction(
+ pName: *mut BSTR,
+ ) -> HRESULT,
+ fn Stop() -> HRESULT,
+ fn Refresh() -> HRESULT,
+ fn get_EnginePID(
+ pPID: *mut DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x6a67614b, 0x6828, 0x4fec, 0xaa, 0x54, 0x6d, 0x52, 0xe8, 0xf1, 0xf2, 0xdb)]
+interface IRunningTaskCollection(IRunningTaskCollectionVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Count(
+ pCount: *mut LONG,
+ ) -> HRESULT,
+ fn get_Item(
+ index: VARIANT,
+ ppRunningTask: *mut *mut IRunningTask,
+ ) -> HRESULT,
+ fn get__NewEnum(
+ ppEnum: *mut LPUNKNOWN,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xf5bc8fc5, 0x536d, 0x4f77, 0xb8, 0x52, 0xfb, 0xc1, 0x35, 0x6f, 0xde, 0xb6)]
+interface ITaskDefinition(ITaskDefinitionVtbl): IDispatch(IDispatchVtbl) {
+ fn get_RegistrationInfo(
+ ppRegistrationInfo: *mut *mut IRegistrationInfo,
+ ) -> HRESULT,
+ fn put_RegistrationInfo(
+ ppRegistrationInfo: *const IRegistrationInfo,
+ ) -> HRESULT,
+ fn get_Triggers(
+ ppTriggers: *mut *mut ITriggerCollection,
+ ) -> HRESULT,
+ fn put_Triggers(
+ ppTriggers: *const ITriggerCollection,
+ ) -> HRESULT,
+ fn get_Settings(
+ ppSettings: *mut *mut ITaskSettings,
+ ) -> HRESULT,
+ fn put_Settings(
+ ppSettings: *const ITaskSettings,
+ ) -> HRESULT,
+ fn get_Data(
+ pData: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Data(
+ pData: BSTR,
+ ) -> HRESULT,
+ fn get_Principal(
+ ppPrincipal: *mut *mut IPrincipal,
+ ) -> HRESULT,
+ fn put_Principal(
+ ppPrincipal: *const IPrincipal,
+ ) -> HRESULT,
+ fn get_Actions(
+ ppActions: *mut *mut IActionCollection,
+ ) -> HRESULT,
+ fn put_Actions(
+ ppActions: *const IActionCollection,
+ ) -> HRESULT,
+ fn get_XmlText(
+ pXml: *mut BSTR,
+ ) -> HRESULT,
+ fn put_XmlText(
+ pXml: BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x416d8b73, 0xcb41, 0x4ea1, 0x80, 0x5c, 0x9b, 0xe9, 0xa5, 0xac, 0x4a, 0x74)]
+interface IRegistrationInfo(IRegistrationInfoVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Description(
+ pDescription: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Description(
+ pDescription: BSTR,
+ ) -> HRESULT,
+ fn get_Author(
+ pAuthor: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Author(
+ pAuthor: BSTR,
+ ) -> HRESULT,
+ fn get_Version(
+ pVersion: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Version(
+ pVersion: BSTR,
+ ) -> HRESULT,
+ fn get_Date(
+ pDate: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Date(
+ pDate: BSTR,
+ ) -> HRESULT,
+ fn get_Documentation(
+ pDocumentation: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Documentation(
+ pDocumentation: BSTR,
+ ) -> HRESULT,
+ fn get_XmlText(
+ pText: *mut BSTR,
+ ) -> HRESULT,
+ fn put_XmlText(
+ pText: BSTR,
+ ) -> HRESULT,
+ fn get_URI(
+ pUri: *mut BSTR,
+ ) -> HRESULT,
+ fn put_URI(
+ pUri: BSTR,
+ ) -> HRESULT,
+ fn get_SecurityDescriptor(
+ pSddl: *mut VARIANT,
+ ) -> HRESULT,
+ fn put_SecurityDescriptor(
+ pSddl: VARIANT,
+ ) -> HRESULT,
+ fn get_Source(
+ pSource: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Source(
+ pSource: BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x85df5081, 0x1b24, 0x4f32, 0x87, 0x8a, 0xd9, 0xd1, 0x4d, 0xf4, 0xcb, 0x77)]
+interface ITriggerCollection(ITriggerCollectionVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Count(
+ pCount: *mut c_long,
+ ) -> HRESULT,
+ fn get_Item(
+ index: c_long,
+ ppTrigger: *mut *mut ITrigger,
+ ) -> HRESULT,
+ fn get__NewEnum(
+ ppEnum: *mut LPUNKNOWN,
+ ) -> HRESULT,
+ fn Create(
+ Type: TASK_TRIGGER_TYPE2,
+ ppTrigger: *mut *mut ITrigger,
+ ) -> HRESULT,
+ fn Remove(
+ index: VARIANT,
+ ) -> HRESULT,
+ fn Clear() -> HRESULT,
+}}
+RIDL!{#[uuid(0x09941815, 0xea89, 0x4b5b, 0x89, 0xe0, 0x2a, 0x77, 0x38, 0x01, 0xfa, 0xc3)]
+interface ITrigger(ITriggerVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Type(
+ pType: *mut TASK_TRIGGER_TYPE2,
+ ) -> HRESULT,
+ fn get_Id(
+ pId: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Id(
+ pId: BSTR,
+ ) -> HRESULT,
+ fn get_Repetition(
+ ppRepeat: *mut *mut IRepetitionPattern,
+ ) -> HRESULT,
+ fn put_Repetition(
+ ppRepeat: *const IRepetitionPattern,
+ ) -> HRESULT,
+ fn get_ExecutionTimeLimit(
+ pTimeLimit: *mut BSTR,
+ ) -> HRESULT,
+ fn put_ExecutionTimeLimit(
+ pTimeLimit: BSTR,
+ ) -> HRESULT,
+ fn get_StartBoundary(
+ pStart: *mut BSTR,
+ ) -> HRESULT,
+ fn put_StartBoundary(
+ pStart: BSTR,
+ ) -> HRESULT,
+ fn get_EndBoundary(
+ pEnd: *mut BSTR,
+ ) -> HRESULT,
+ fn put_EndBoundary(
+ pEnd: BSTR,
+ ) -> HRESULT,
+ fn get_Enabled(
+ pEnabled: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_Enabled(
+ pEnabled: VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+ENUM!{enum TASK_TRIGGER_TYPE2 {
+ TASK_TRIGGER_EVENT = 0,
+ TASK_TRIGGER_TIME = 1,
+ TASK_TRIGGER_DAILY = 2,
+ TASK_TRIGGER_WEEKLY = 3,
+ TASK_TRIGGER_MONTHLY = 4,
+ TASK_TRIGGER_MONTHLYDOW = 5,
+ TASK_TRIGGER_IDLE = 6,
+ TASK_TRIGGER_REGISTRATION = 7,
+ TASK_TRIGGER_BOOT = 8,
+ TASK_TRIGGER_LOGON = 9,
+ TASK_TRIGGER_SESSION_STATE_CHANGE = 11,
+ TASK_TRIGGER_CUSTOM_TRIGGER_01 = 12,
+}}
+RIDL!{#[uuid(0x7fb9acf1, 0x26be, 0x400e, 0x85, 0xb5, 0x29, 0x4b, 0x9c, 0x75, 0xdf, 0xd6)]
+interface IRepetitionPattern(IRepetitionPatternVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Interval(
+ pInterval: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Interval(
+ pInterval: BSTR,
+ ) -> HRESULT,
+ fn get_Duration(
+ pDuration: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Duration(
+ pDuration: BSTR,
+ ) -> HRESULT,
+ fn get_StopAtDurationEnd(
+ pStop: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_StopAtDurationEnd(
+ pStop: VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8fd4711d, 0x2d02, 0x4c8c, 0x87, 0xe3, 0xef, 0xf6, 0x99, 0xde, 0x12, 0x7e)]
+interface ITaskSettings(ITaskSettingsVtbl): IDispatch(IDispatchVtbl) {
+ fn get_AllowDemandStart(
+ pAllowDemandStart: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_AllowDemandStart(
+ pAllowDemandStart: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_RestartInterval(
+ pRestartInterval: *mut BSTR,
+ ) -> HRESULT,
+ fn put_RestartInterval(
+ pRestartInterval: BSTR,
+ ) -> HRESULT,
+ fn get_RestartCount(
+ pRestartCount: *mut INT,
+ ) -> HRESULT,
+ fn put_RestartCount(
+ pRestartCount: INT,
+ ) -> HRESULT,
+ fn get_MultipleInstances(
+ pPolicy: *mut TASK_INSTANCES_POLICY,
+ ) -> HRESULT,
+ fn put_MultipleInstances(
+ pPolicy: TASK_INSTANCES_POLICY,
+ ) -> HRESULT,
+ fn get_StopIfGoingOnBatteries(
+ pStopIfOnBatteries: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_StopIfGoingOnBatteries(
+ pStopIfOnBatteries: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_DisallowStartIfOnBatteries(
+ pDisallowStart: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_DisallowStartIfOnBatteries(
+ pDisallowStart: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_AllowHardTerminate(
+ pAllowHardTerminate: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_AllowHardTerminate(
+ pAllowHardTerminate: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_StartWhenAvailable(
+ pStartWhenAvailable: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_StartWhenAvailable(
+ pStartWhenAvailable: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_XmlText(
+ pText: *mut BSTR,
+ ) -> HRESULT,
+ fn put_XmlText(
+ pText: BSTR,
+ ) -> HRESULT,
+ fn get_RunOnlyIfNetworkAvailable(
+ pRunOnlyIfNetworkAvailable: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_RunOnlyIfNetworkAvailable(
+ pRunOnlyIfNetworkAvailable: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_ExecutionTimeLimit(
+ pExecutionTimeLimit: *mut BSTR,
+ ) -> HRESULT,
+ fn put_ExecutionTimeLimit(
+ pExecutionTimeLimit: BSTR,
+ ) -> HRESULT,
+ fn get_Enabled(
+ pEnabled: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_Enabled(
+ pEnabled: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_DeleteExpiredTaskAfter(
+ pExpirationDelay: *mut BSTR,
+ ) -> HRESULT,
+ fn put_DeleteExpiredTaskAfter(
+ pExpirationDelay: BSTR,
+ ) -> HRESULT,
+ fn get_Priority(
+ pPriority: *mut INT,
+ ) -> HRESULT,
+ fn put_Priority(
+ pPriority: INT,
+ ) -> HRESULT,
+ fn get_Compatibility(
+ pCompatLevel: *mut TASK_COMPATIBILITY,
+ ) -> HRESULT,
+ fn put_Compatibility(
+ pCompatLevel: TASK_COMPATIBILITY,
+ ) -> HRESULT,
+ fn get_Hidden(
+ pHidden: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_Hidden(
+ pHidden: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_IdleSettings(
+ ppIdleSettings: *mut *mut IIdleSettings,
+ ) -> HRESULT,
+ fn put_IdleSettings(
+ ppIdleSettings: *const IIdleSettings,
+ ) -> HRESULT,
+ fn get_RunOnlyIfIdle(
+ pRunOnlyIfIdle: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_RunOnlyIfIdle(
+ pRunOnlyIfIdle: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_WakeToRun(
+ pWake: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_WakeToRun(
+ pWake: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_NetworkSettings(
+ ppNetworkSettings: *mut *mut INetworkSettings,
+ ) -> HRESULT,
+ fn put_NetworkSettings(
+ ppNetworkSettings: *const INetworkSettings,
+ ) -> HRESULT,
+}}
+ENUM!{enum TASK_INSTANCES_POLICY {
+ TASK_INSTANCES_PARALLEL = 0,
+ TASK_INSTANCES_QUEUE = 1,
+ TASK_INSTANCES_IGNORE_NEW = 2,
+ TASK_INSTANCES_STOP_EXISTING = 3,
+}}
+ENUM!{enum TASK_COMPATIBILITY {
+ TASK_COMPATIBILITY_AT = 0,
+ TASK_COMPATIBILITY_V1 = 1,
+ TASK_COMPATIBILITY_V2 = 2,
+ TASK_COMPATIBILITY_V2_1 = 3,
+ TASK_COMPATIBILITY_V2_2 = 4,
+ TASK_COMPATIBILITY_V2_3 = 5,
+ TASK_COMPATIBILITY_V2_4 = 6,
+}}
+RIDL!{#[uuid(0x84594461, 0x0053, 0x4342, 0xa8, 0xfd, 0x08, 0x8f, 0xab, 0xf1, 0x1f, 0x32)]
+interface IIdleSettings(IIdleSettingsVtbl): IDispatch(IDispatchVtbl) {
+ fn get_IdleDuration(
+ pDelay: *mut BSTR,
+ ) -> HRESULT,
+ fn put_IdleDuration(
+ pDelay: BSTR,
+ ) -> HRESULT,
+ fn get_WaitTimeout(
+ pTimeout: *mut BSTR,
+ ) -> HRESULT,
+ fn put_WaitTimeout(
+ pTimeout: BSTR,
+ ) -> HRESULT,
+ fn get_StopOnIdleEnd(
+ pStop: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_StopOnIdleEnd(
+ pStop: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_RestartOnIdle(
+ pRestart: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_RestartOnIdle(
+ pRestart: VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x9f7dea84, 0xc30b, 0x4245, 0x80, 0xb6, 0x00, 0xe9, 0xf6, 0x46, 0xf1, 0xb4)]
+interface INetworkSettings(INetworkSettingsVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Name(
+ pName: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Name(
+ pName: BSTR,
+ ) -> HRESULT,
+ fn get_Id(
+ pId: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Id(
+ pId: BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xd98d51e5, 0xc9b4, 0x496a, 0xa9, 0xc1, 0x18, 0x98, 0x02, 0x61, 0xcf, 0x0f)]
+interface IPrincipal(IPrincipalVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Id(
+ pId: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Id(
+ pId: BSTR,
+ ) -> HRESULT,
+ fn get_DisplayName(
+ pName: *mut BSTR,
+ ) -> HRESULT,
+ fn put_DisplayName(
+ pName: BSTR,
+ ) -> HRESULT,
+ fn get_UserId(
+ pUser: *mut BSTR,
+ ) -> HRESULT,
+ fn put_UserId(
+ pUser: BSTR,
+ ) -> HRESULT,
+ fn get_LogonType(
+ pLogon: *mut TASK_LOGON_TYPE,
+ ) -> HRESULT,
+ fn put_LogonType(
+ pLogon: TASK_LOGON_TYPE,
+ ) -> HRESULT,
+ fn get_GroupId(
+ pGroup: *mut BSTR,
+ ) -> HRESULT,
+ fn put_GroupId(
+ pGroup: BSTR,
+ ) -> HRESULT,
+ fn get_RunLevel(
+ pRunLevel: *mut TASK_RUNLEVEL,
+ ) -> HRESULT,
+ fn put_RunLevel(
+ pRunLevel: TASK_RUNLEVEL,
+ ) -> HRESULT,
+}}
+ENUM!{enum TASK_LOGON_TYPE {
+ TASK_LOGON_NONE = 0,
+ TASK_LOGON_PASSWORD = 1,
+ TASK_LOGON_S4U = 2,
+ TASK_LOGON_INTERACTIVE_TOKEN = 3,
+ TASK_LOGON_GROUP = 4,
+ TASK_LOGON_SERVICE_ACCOUNT = 5,
+ TASK_LOGON_INTERACTIVE_TOKEN_OR_PASSWORD = 6,
+}}
+ENUM!{enum TASK_RUNLEVEL {
+ TASK_RUNLEVEL_LUA = 0,
+ TASK_RUNLEVEL_HIGHEST = 1,
+}}
+RIDL!{#[uuid(0x02820e19, 0x7b98, 0x4ed2, 0xb2, 0xe8, 0xfd, 0xcc, 0xce, 0xff, 0x61, 0x9b)]
+interface IActionCollection(IActionCollectionVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Count(
+ pCount: *mut c_long,
+ ) -> HRESULT,
+ fn get_Item(
+ index: c_long,
+ ppAction: *mut *mut IAction,
+ ) -> HRESULT,
+ fn get__NewEnum(
+ ppEnum: *mut LPUNKNOWN,
+ ) -> HRESULT,
+ fn get_XmlText(
+ pText: *mut BSTR,
+ ) -> HRESULT,
+ fn put_XmlText(
+ pText: BSTR,
+ ) -> HRESULT,
+ fn Create(
+ Type: TASK_ACTION_TYPE,
+ ppAction: *mut *mut IAction,
+ ) -> HRESULT,
+ fn Remove(
+ index: VARIANT,
+ ) -> HRESULT,
+ fn Clear() -> HRESULT,
+ fn get_Context(
+ pContext: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Context(
+ pContext: BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xbae54997, 0x48b1, 0x4cbe, 0x99, 0x65, 0xd6, 0xbe, 0x26, 0x3e, 0xbe, 0xa4)]
+interface IAction(IActionVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Id(
+ pId: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Id(
+ pId: BSTR,
+ ) -> HRESULT,
+ fn get_Type(
+ pType: *mut TASK_ACTION_TYPE,
+ ) -> HRESULT,
+}}
+ENUM!{enum TASK_ACTION_TYPE {
+ TASK_ACTION_EXEC = 0,
+ TASK_ACTION_COM_HANDLER = 5,
+ TASK_ACTION_SEND_EMAIL = 6,
+ TASK_ACTION_SHOW_MESSAGE = 7,
+}}
+RIDL!{#[uuid(0x86627eb4, 0x42a7, 0x41e4, 0xa4, 0xd9, 0xac, 0x33, 0xa7, 0x2f, 0x2d, 0x52)]
+interface IRegisteredTaskCollection(IRegisteredTaskCollectionVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Count(
+ pCount: *mut LONG,
+ ) -> HRESULT,
+ fn get_Item(
+ index: VARIANT,
+ ppRegisteredTask: *mut *mut IRegisteredTask,
+ ) -> HRESULT,
+ fn get__NewEnum(
+ ppEnum: *mut LPUNKNOWN,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x2faba4c7, 0x4da9, 0x4013, 0x96, 0x97, 0x20, 0xcc, 0x3f, 0xd4, 0x0f, 0x85)]
+interface ITaskService(ITaskServiceVtbl): IDispatch(IDispatchVtbl) {
+ fn GetFolder(
+ Path: BSTR,
+ ppFolder: *mut *mut ITaskFolder,
+ ) -> HRESULT,
+ fn GetRunningTasks(
+ flags: LONG,
+ ppRunningTasks: *mut *mut IRunningTaskCollection,
+ ) -> HRESULT,
+ fn NewTask(
+ flags: DWORD,
+ ppDefinition: *mut *mut ITaskDefinition,
+ ) -> HRESULT,
+ fn Connect(
+ serverName: VARIANT,
+ user: VARIANT,
+ domain: VARIANT,
+ password: VARIANT,
+ ) -> HRESULT,
+ fn get_Connected(
+ pConnected: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_TargetServer(
+ pServer: *mut BSTR,
+ ) -> HRESULT,
+ fn get_ConnectedUser(
+ pUser: *mut BSTR,
+ ) -> HRESULT,
+ fn get_ConnectedDomain(
+ pDomain: *mut BSTR,
+ ) -> HRESULT,
+ fn get_HighestVersion(
+ pVersion: *mut DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x839d7762, 0x5121, 0x4009, 0x92, 0x34, 0x4f, 0x0d, 0x19, 0x39, 0x4f, 0x04)]
+interface ITaskHandler(ITaskHandlerVtbl): IUnknown(IUnknownVtbl) {
+ fn Start(
+ pHandlerServices: LPUNKNOWN,
+ Data: BSTR,
+ ) -> HRESULT,
+ fn Stop(
+ pRetCode: *mut HRESULT,
+ ) -> HRESULT,
+ fn Pause() -> HRESULT,
+ fn Resume() -> HRESULT,
+}}
+RIDL!{#[uuid(0xeaec7a8f, 0x27a0, 0x4ddc, 0x86, 0x75, 0x14, 0x72, 0x6a, 0x01, 0xa3, 0x8a)]
+interface ITaskHandlerStatus(ITaskHandlerStatusVtbl): IUnknown(IUnknownVtbl) {
+ fn UpdateStatus(
+ percentComplete: c_short,
+ statusMessage: BSTR,
+ ) -> HRESULT,
+ fn TaskCompleted(
+ taskErrCode: HRESULT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3e4c9351, 0xd966, 0x4b8b, 0xbb, 0x87, 0xce, 0xba, 0x68, 0xbb, 0x01, 0x07)]
+interface ITaskVariables(ITaskVariablesVtbl): IUnknown(IUnknownVtbl) {
+ fn GetInput(
+ pInput: *mut BSTR,
+ ) -> HRESULT,
+ fn SetOutput(
+ input: BSTR,
+ ) -> HRESULT,
+ fn GetContext(
+ pContext: *mut BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x39038068, 0x2b46, 0x4afd, 0x86, 0x62, 0x7b, 0xb6, 0xf8, 0x68, 0xd2, 0x21)]
+interface ITaskNamedValuePair(ITaskNamedValuePairVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Name(
+ pName: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Name(
+ pName: BSTR,
+ ) -> HRESULT,
+ fn get_Value(
+ pValue: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Value(
+ pValue: BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xb4ef826b, 0x63c3, 0x46e4, 0xa5, 0x04, 0xef, 0x69, 0xe4, 0xf7, 0xea, 0x4d)]
+interface ITaskNamedValueCollection(ITaskNamedValueCollectionVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Count(
+ pCount: *mut c_long,
+ ) -> HRESULT,
+ fn get_Item(
+ index: LONG,
+ ppPair: *mut *mut ITaskNamedValuePair,
+ ) -> HRESULT,
+ fn get__NewEnum(
+ ppEnum: *mut LPUNKNOWN,
+ ) -> HRESULT,
+ fn Create(
+ Name: BSTR,
+ Value: BSTR,
+ ppPair: *mut *mut ITaskNamedValuePair,
+ ) -> HRESULT,
+ fn Remove(
+ index: LONG,
+ ) -> HRESULT,
+ fn Clear() -> HRESULT,
+}}
+RIDL!{#[uuid(0xd537d2b0, 0x9fb3, 0x4d34, 0x97, 0x39, 0x1f, 0xf5, 0xce, 0x7b, 0x1e, 0xf3)]
+interface IIdleTrigger(IIdleTriggerVtbl): ITrigger(ITriggerVtbl) {}}
+RIDL!{#[uuid(0x72dade38, 0xfae4, 0x4b3e, 0xba, 0xf4, 0x5d, 0x00, 0x9a, 0xf0, 0x2b, 0x1c)]
+interface ILogonTrigger(ILogonTriggerVtbl): ITrigger(ITriggerVtbl) {
+ fn get_Delay(
+ pDelay: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Delay(
+ pDelay: BSTR,
+ ) -> HRESULT,
+ fn get_UserId(
+ pUser: *mut BSTR,
+ ) -> HRESULT,
+ fn put_UserId(
+ pUser: BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x754da71b, 0x4385, 0x4475, 0x9d, 0xd9, 0x59, 0x82, 0x94, 0xfa, 0x36, 0x41)]
+interface ISessionStateChangeTrigger(ISessionStateChangeTriggerVtbl): ITrigger(ITriggerVtbl) {
+ fn get_Delay(
+ pDelay: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Delay(
+ pDelay: BSTR,
+ ) -> HRESULT,
+ fn get_UserId(
+ pUser: *mut BSTR,
+ ) -> HRESULT,
+ fn put_UserId(
+ pUser: BSTR,
+ ) -> HRESULT,
+ fn get_StateChange(
+ pType: *mut TASK_SESSION_STATE_CHANGE_TYPE,
+ ) -> HRESULT,
+ fn put_StateChange(
+ pType: TASK_SESSION_STATE_CHANGE_TYPE,
+ ) -> HRESULT,
+}}
+ENUM!{enum TASK_SESSION_STATE_CHANGE_TYPE {
+ TASK_CONSOLE_CONNECT = 1,
+ TASK_CONSOLE_DISCONNECT = 2,
+ TASK_REMOTE_CONNECT = 3,
+ TASK_REMOTE_DISCONNECT = 4,
+ TASK_SESSION_LOCK = 7,
+ TASK_SESSION_UNLOCK = 8,
+}}
+RIDL!{#[uuid(0xd45b0167, 0x9653, 0x4eef, 0xb9, 0x4f, 0x07, 0x32, 0xca, 0x7a, 0xf2, 0x51)]
+interface IEventTrigger(IEventTriggerVtbl): ITrigger(ITriggerVtbl) {
+ fn get_Subscription(
+ pQuery: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Subscription(
+ pQuery: BSTR,
+ ) -> HRESULT,
+ fn get_Delay(
+ pDelay: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Delay(
+ pDelay: BSTR,
+ ) -> HRESULT,
+ fn get_ValueQueries(
+ ppNamedXPaths: *mut *mut ITaskNamedValueCollection,
+ ) -> HRESULT,
+ fn put_ValueQueries(
+ ppNamedXPaths: *const ITaskNamedValueCollection,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xb45747e0, 0xeba7, 0x4276, 0x9f, 0x29, 0x85, 0xc5, 0xbb, 0x30, 0x00, 0x06)]
+interface ITimeTrigger(ITimeTriggerVtbl): ITrigger(ITriggerVtbl) {
+ fn get_RandomDelay(
+ pRandomDelay: *mut BSTR,
+ ) -> HRESULT,
+ fn put_RandomDelay(
+ pRandomDelay: BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x126c5cd8, 0xb288, 0x41d5, 0x8d, 0xbf, 0xe4, 0x91, 0x44, 0x6a, 0xdc, 0x5c)]
+interface IDailyTrigger(IDailyTriggerVtbl): ITrigger(ITriggerVtbl) {
+ fn get_DaysInterval(
+ pDays: *mut c_short,
+ ) -> HRESULT,
+ fn put_DaysInterval(
+ pDays: c_short,
+ ) -> HRESULT,
+ fn get_RandomDelay(
+ pRandomDelay: *mut BSTR,
+ ) -> HRESULT,
+ fn put_RandomDelay(
+ pRandomDelay: BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x5038fc98, 0x82ff, 0x436d, 0x87, 0x28, 0xa5, 0x12, 0xa5, 0x7c, 0x9d, 0xc1)]
+interface IWeeklyTrigger(IWeeklyTriggerVtbl): ITrigger(ITriggerVtbl) {
+ fn get_DaysOfWeek(
+ pDays: *mut c_short,
+ ) -> HRESULT,
+ fn put_DaysOfWeek(
+ pDays: c_short,
+ ) -> HRESULT,
+ fn get_WeeksInterval(
+ pWeeks: *mut c_short,
+ ) -> HRESULT,
+ fn put_WeeksInterval(
+ pWeeks: c_short,
+ ) -> HRESULT,
+ fn get_RandomDelay(
+ pRandomDelay: *mut BSTR,
+ ) -> HRESULT,
+ fn put_RandomDelay(
+ pRandomDelay: BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x97c45ef1, 0x6b02, 0x4a1a, 0x9c, 0x0e, 0x1e, 0xbf, 0xba, 0x15, 0x00, 0xac)]
+interface IMonthlyTrigger(IMonthlyTriggerVtbl): ITrigger(ITriggerVtbl) {
+ fn get_DaysOfMonth(
+ pDays: *mut c_long,
+ ) -> HRESULT,
+ fn put_DaysOfMonth(
+ pDays: c_long,
+ ) -> HRESULT,
+ fn get_MonthsOfYear(
+ pMonths: *mut c_short,
+ ) -> HRESULT,
+ fn put_MonthsOfYear(
+ pMonths: c_short,
+ ) -> HRESULT,
+ fn get_RunOnLastDayOfMonth(
+ pLastDay: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_RunOnLastDayOfMonth(
+ pLastDay: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_RandomDelay(
+ pRandomDelay: *mut BSTR,
+ ) -> HRESULT,
+ fn put_RandomDelay(
+ pRandomDelay: BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x77d025a3, 0x90fa, 0x43aa, 0xb5, 0x2e, 0xcd, 0xa5, 0x49, 0x9b, 0x94, 0x6a)]
+interface IMonthlyDOWTrigger(IMonthlyDOWTriggerVtbl): ITrigger(ITriggerVtbl) {
+ fn get_DaysOfWeek(
+ pDays: *mut c_short,
+ ) -> HRESULT,
+ fn put_DaysOfWeek(
+ pDays: c_short,
+ ) -> HRESULT,
+ fn get_WeeksOfMonth(
+ pWeeks: *mut c_short,
+ ) -> HRESULT,
+ fn put_WeeksOfMonth(
+ pWeeks: c_short,
+ ) -> HRESULT,
+ fn get_MonthsOfYear(
+ pMonths: *mut c_short,
+ ) -> HRESULT,
+ fn put_MonthsOfYear(
+ pMonths: c_short,
+ ) -> HRESULT,
+ fn get_RunOnLastWeekOfMonth(
+ pLastWeek: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_RunOnLastWeekOfMonth(
+ pLastWeek: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_RandomDelay(
+ pRandomDelay: *mut BSTR,
+ ) -> HRESULT,
+ fn put_RandomDelay(
+ pRandomDelay: BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x2a9c35da, 0xd357, 0x41f4, 0xbb, 0xc1, 0x20, 0x7a, 0xc1, 0xb1, 0xf3, 0xcb)]
+interface IBootTrigger(IBootTriggerVtbl): ITrigger(ITriggerVtbl) {
+ fn get_Delay(
+ pDelay: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Delay(
+ pDelay: BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x4c8fec3a, 0xc218, 0x4e0c, 0xb2, 0x3d, 0x62, 0x90, 0x24, 0xdb, 0x91, 0xa2)]
+interface IRegistrationTrigger(IRegistrationTriggerVtbl): ITrigger(ITriggerVtbl) {
+ fn get_Delay(
+ pDelay: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Delay(
+ pDelay: BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x4c3d624d, 0xfd6b, 0x49a3, 0xb9, 0xb7, 0x09, 0xcb, 0x3c, 0xd3, 0xf0, 0x47)]
+interface IExecAction(IExecActionVtbl): IAction(IActionVtbl) {
+ fn get_Path(
+ pPath: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Path(
+ pPath: BSTR,
+ ) -> HRESULT,
+ fn get_Arguments(
+ pArgument: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Arguments(
+ pArgument: BSTR,
+ ) -> HRESULT,
+ fn get_WorkingDirectory(
+ pWorkingDirectory: *mut BSTR,
+ ) -> HRESULT,
+ fn put_WorkingDirectory(
+ pWorkingDirectory: BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xf2a82542, 0xbda5, 0x4e6b, 0x91, 0x43, 0xe2, 0xbf, 0x4f, 0x89, 0x87, 0xb6)]
+interface IExecAction2(IExecAction2Vtbl): IExecAction(IExecActionVtbl) {
+ fn get_HideAppWindow(
+ pHideAppWindow: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_HideAppWindow(
+ pHideAppWindow: VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x505e9e68, 0xaf89, 0x46b8, 0xa3, 0x0f, 0x56, 0x16, 0x2a, 0x83, 0xd5, 0x37)]
+interface IShowMessageAction(IShowMessageActionVtbl): IAction(IActionVtbl) {
+ fn get_Title(
+ pTitle: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Title(
+ pTitle: BSTR,
+ ) -> HRESULT,
+ fn get_MessageBody(
+ pMessageBody: *mut BSTR,
+ ) -> HRESULT,
+ fn put_MessageBody(
+ pMessageBody: BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x6d2fd252, 0x75c5, 0x4f66, 0x90, 0xba, 0x2a, 0x7d, 0x8c, 0xc3, 0x03, 0x9f)]
+interface IComHandlerAction(IComHandlerActionVtbl): IAction(IActionVtbl) {
+ fn get_ClassId(
+ pClsid: *mut BSTR,
+ ) -> HRESULT,
+ fn put_ClassId(
+ pClsid: BSTR,
+ ) -> HRESULT,
+ fn get_Data(
+ pData: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Data(
+ pData: BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x10f62c64, 0x7e16, 0x4314, 0xa0, 0xc2, 0x0c, 0x36, 0x83, 0xf9, 0x9d, 0x40)]
+interface IEmailAction(IEmailActionVtbl): IAction(IActionVtbl) {
+ fn get_Server(
+ pServer: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Server(
+ pServer: BSTR,
+ ) -> HRESULT,
+ fn get_Subject(
+ pSubject: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Subject(
+ pSubject: BSTR,
+ ) -> HRESULT,
+ fn get_To(
+ pTo: *mut BSTR,
+ ) -> HRESULT,
+ fn put_To(
+ pTo: BSTR,
+ ) -> HRESULT,
+ fn get_Cc(
+ pCc: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Cc(
+ pCc: BSTR,
+ ) -> HRESULT,
+ fn get_Bcc(
+ pBcc: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Bcc(
+ pBcc: BSTR,
+ ) -> HRESULT,
+ fn get_ReplyTo(
+ pReplyTo: *mut BSTR,
+ ) -> HRESULT,
+ fn put_ReplyTo(
+ pReplyTo: BSTR,
+ ) -> HRESULT,
+ fn get_From(
+ pFrom: *mut BSTR,
+ ) -> HRESULT,
+ fn put_From(
+ pFrom: BSTR,
+ ) -> HRESULT,
+ fn get_HeaderFields(
+ ppHeaderFields: *mut *mut ITaskNamedValueCollection,
+ ) -> HRESULT,
+ fn put_HeaderFields(
+ ppHeaderFields: *const ITaskNamedValueCollection,
+ ) -> HRESULT,
+ fn get_Body(
+ pBody: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Body(
+ pBody: BSTR,
+ ) -> HRESULT,
+ fn get_Attachments(
+ pAttachements: *mut SAFEARRAY,
+ ) -> HRESULT,
+ fn put_Attachments(
+ pAttachements: SAFEARRAY,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x248919ae, 0xe345, 0x4a6d, 0x8a, 0xeb, 0xe0, 0xd3, 0x16, 0x5c, 0x90, 0x4e)]
+interface IPrincipal2(IPrincipal2Vtbl): IDispatch(IDispatchVtbl) {
+ fn get_ProcessTokenSidType(
+ pProcessTokenSidType: *mut TASK_PROCESSTOKENSID,
+ ) -> HRESULT,
+ fn put_ProcessTokenSidType(
+ pProcessTokenSidType: TASK_PROCESSTOKENSID,
+ ) -> HRESULT,
+ fn get_RequiredPrivilegeCount(
+ pCount: *mut c_long,
+ ) -> HRESULT,
+ fn get_RequiredPrivilege(
+ index: c_long,
+ pPrivilege: *mut BSTR,
+ ) -> HRESULT,
+ fn AddRequiredPrivilege(
+ privilege: BSTR,
+ ) -> HRESULT,
+}}
+ENUM!{enum TASK_PROCESSTOKENSID {
+ TASK_PROCESSTOKENSID_NONE = 0,
+ TASK_PROCESSTOKENSID_UNRESTRICTED = 1,
+ TASK_PROCESSTOKENSID_DEFAULT = 2,
+}}
+RIDL!{#[uuid(0x2c05c3f0, 0x6eed, 0x4c05, 0xa1, 0x5f, 0xed, 0x7d, 0x7a, 0x98, 0xa3, 0x69)]
+interface ITaskSettings2(ITaskSettings2Vtbl): IDispatch(IDispatchVtbl) {
+ fn get_DisallowStartOnRemoteAppSession(
+ pDisallowStart: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_DisallowStartOnRemoteAppSession(
+ pDisallowStart: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_UseUnifiedSchedulingEngine(
+ pUseUnifiedEngine: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_UseUnifiedSchedulingEngine(
+ pUseUnifiedEngine: VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x0ad9d0d7, 0x0c7f, 0x4ebb, 0x9a, 0x5f, 0xd1, 0xc6, 0x48, 0xdc, 0xa5, 0x28)]
+interface ITaskSettings3(ITaskSettings3Vtbl): ITaskSettings(ITaskSettingsVtbl) {
+ fn get_DisallowStartOnRemoteAppSession(
+ pDisallowStart: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_DisallowStartOnRemoteAppSession(
+ pDisallowStart: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_UseUnifiedSchedulingEngine(
+ pUseUnifiedEngine: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_UseUnifiedSchedulingEngine(
+ pUseUnifiedEngine: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_MaintenanceSettings(
+ ppMaintenanceSettings: *mut *mut IMaintenanceSettings,
+ ) -> HRESULT,
+ fn put_MaintenanceSettings(
+ ppMaintenanceSettings: *const IMaintenanceSettings,
+ ) -> HRESULT,
+ fn CreateMaintenanceSettings(
+ ppMaintenanceSettings: *mut *mut IMaintenanceSettings,
+ ) -> HRESULT,
+ fn get_Volatile(
+ pVolatile: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_Volatile(
+ pVolatile: VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa6024fa8, 0x9652, 0x4adb, 0xa6, 0xbf, 0x5c, 0xfc, 0xd8, 0x77, 0xa7, 0xba)]
+interface IMaintenanceSettings(IMaintenanceSettingsVtbl): IDispatch(IDispatchVtbl) {
+ fn put_Period(
+ target: BSTR,
+ ) -> HRESULT,
+ fn get_Period(
+ target: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Deadline(
+ target: BSTR,
+ ) -> HRESULT,
+ fn get_Deadline(
+ target: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Exclusive(
+ target: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_Exclusive(
+ target: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+ENUM!{enum TASK_RUN_FLAGS {
+ TASK_RUN_NO_FLAGS = 0,
+ TASK_RUN_AS_SELF = 1,
+ TASK_RUN_IGNORE_CONSTRAINTS = 2,
+ TASK_RUN_USE_SESSION_ID = 4,
+ TASK_RUN_USER_SID = 8,
+}}
+ENUM!{enum TASK_ENUM_FLAGS {
+ TASK_ENUM_HIDDEN = 1,
+}}
+ENUM!{enum TASK_CREATION {
+ TASK_VALIDATE_ONLY = 1,
+ TASK_CREATE = 2,
+ TASK_UPDATE = 4,
+ TASK_CREATE_OR_UPDATE = 6,
+ TASK_DISABLE = 8,
+ TASK_DONT_ADD_PRINCIPAL_ACE = 16,
+ TASK_IGNORE_REGISTRATION_TRIGGERS = 32,
+}}
diff --git a/vendor/winapi/src/um/textstor.rs b/vendor/winapi/src/um/textstor.rs
new file mode 100644
index 000000000..7e2d60218
--- /dev/null
+++ b/vendor/winapi/src/um/textstor.rs
@@ -0,0 +1,11 @@
+// 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.
+DEFINE_GUID!{GUID_TS_SERVICE_DATAOBJECT,
+ 0x6086fbb5, 0xe225, 0x46ce, 0xa7, 0x70, 0xc1, 0xbb, 0xd3, 0xe0, 0x5d, 0x7b}
+DEFINE_GUID!{GUID_TS_SERVICE_ACCESSIBLE,
+ 0xf9786200, 0xa5bf, 0x4a0f, 0x8c, 0x24, 0xfb, 0x16, 0xf5, 0xd1, 0xaa, 0xbb}
+DEFINE_GUID!{GUID_TS_SERVICE_ACTIVEX,
+ 0xea937a50, 0xc9a6, 0x4b7d, 0x89, 0x4a, 0x49, 0xd9, 0x9b, 0x78, 0x48, 0x34}
diff --git a/vendor/winapi/src/um/threadpoolapiset.rs b/vendor/winapi/src/um/threadpoolapiset.rs
new file mode 100644
index 000000000..13a1e7a40
--- /dev/null
+++ b/vendor/winapi/src/um/threadpoolapiset.rs
@@ -0,0 +1,171 @@
+// 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.
+//! ApiSet Contract for api-ms-win-core-threadpool-l1.
+use shared::basetsd::ULONG_PTR;
+use shared::minwindef::{BOOL, DWORD, HMODULE, PFILETIME, ULONG};
+use um::minwinbase::PCRITICAL_SECTION;
+use um::winnt::{
+ HANDLE, PTP_CALLBACK_ENVIRON, PTP_CALLBACK_INSTANCE, PTP_CLEANUP_GROUP, PTP_IO, PTP_POOL,
+ PTP_POOL_STACK_INFORMATION, PTP_SIMPLE_CALLBACK, PTP_TIMER, PTP_TIMER_CALLBACK, PTP_WAIT,
+ PTP_WAIT_CALLBACK, PTP_WORK, PTP_WORK_CALLBACK, PVOID,
+};
+FN!{stdcall PTP_WIN32_IO_CALLBACK(
+ Instance: PTP_CALLBACK_INSTANCE,
+ Context: PVOID,
+ Overlapped: PVOID,
+ IoResult: ULONG,
+ NumberOfBytesTransferred: ULONG_PTR,
+ Io: PTP_IO,
+) -> ()}
+extern "system" {
+ pub fn CreateThreadpool(
+ reserved: PVOID,
+ ) -> PTP_POOL;
+ pub fn SetThreadpoolThreadMaximum(
+ ptpp: PTP_POOL,
+ cthrdMost: DWORD,
+ ) -> ();
+ pub fn SetThreadpoolThreadMinimum(
+ ptpp: PTP_POOL,
+ cthrdMic: DWORD,
+ ) -> BOOL;
+ pub fn SetThreadpoolStackInformation(
+ ptpp: PTP_POOL,
+ ptpsi: PTP_POOL_STACK_INFORMATION,
+ ) -> BOOL;
+ pub fn QueryThreadpoolStackInformation(
+ ptpp: PTP_POOL,
+ ptpsi: PTP_POOL_STACK_INFORMATION,
+ ) -> BOOL;
+ pub fn CloseThreadpool(
+ ptpp: PTP_POOL,
+ ) -> ();
+ pub fn CreateThreadpoolCleanupGroup() -> PTP_CLEANUP_GROUP;
+ pub fn CloseThreadpoolCleanupGroupMembers(
+ ptpcg: PTP_CLEANUP_GROUP,
+ fCancelPendingCallbacks: BOOL,
+ pvCleanupContext: PVOID,
+ ) -> ();
+ pub fn CloseThreadpoolCleanupGroup(
+ ptpcg: PTP_CLEANUP_GROUP,
+ ) -> ();
+ pub fn SetEventWhenCallbackReturns(
+ pci: PTP_CALLBACK_INSTANCE,
+ evt: HANDLE,
+ ) -> ();
+ pub fn ReleaseSemaphoreWhenCallbackReturns(
+ pci: PTP_CALLBACK_INSTANCE,
+ sem: HANDLE,
+ crel: DWORD,
+ ) -> ();
+ pub fn ReleaseMutexWhenCallbackReturns(
+ pci: PTP_CALLBACK_INSTANCE,
+ mut_: HANDLE,
+ ) -> ();
+ pub fn LeaveCriticalSectionWhenCallbackReturns(
+ pci: PTP_CALLBACK_INSTANCE,
+ pcs: PCRITICAL_SECTION,
+ ) -> ();
+ pub fn FreeLibraryWhenCallbackReturns(
+ pci: PTP_CALLBACK_INSTANCE,
+ mod_: HMODULE,
+ ) -> ();
+ pub fn CallbackMayRunLong(
+ pci: PTP_CALLBACK_INSTANCE,
+ ) -> BOOL;
+ pub fn DisassociateCurrentThreadFromCallback(
+ pci: PTP_CALLBACK_INSTANCE,
+ ) -> ();
+ pub fn TrySubmitThreadpoolCallback(
+ pfns: PTP_SIMPLE_CALLBACK,
+ pv: PVOID,
+ pcbe: PTP_CALLBACK_ENVIRON,
+ ) -> BOOL;
+ pub fn CreateThreadpoolWork(
+ pfnwk: PTP_WORK_CALLBACK,
+ pv: PVOID,
+ pcbe: PTP_CALLBACK_ENVIRON,
+ ) -> PTP_WORK;
+ pub fn SubmitThreadpoolWork(
+ pwk: PTP_WORK,
+ ) -> ();
+ pub fn WaitForThreadpoolWorkCallbacks(
+ pwk: PTP_WORK,
+ fCancelPendingCallbacks: BOOL,
+ ) -> ();
+ pub fn CloseThreadpoolWork(
+ pwk: PTP_WORK,
+ ) -> ();
+ pub fn CreateThreadpoolTimer(
+ pfnti: PTP_TIMER_CALLBACK,
+ pv: PVOID,
+ pcbe: PTP_CALLBACK_ENVIRON,
+ ) -> PTP_TIMER;
+ pub fn SetThreadpoolTimer(
+ pti: PTP_TIMER,
+ pftDueTime: PFILETIME,
+ msPeriod: DWORD,
+ msWindowLength: DWORD,
+ ) -> ();
+ pub fn IsThreadpoolTimerSet(
+ pti: PTP_TIMER,
+ ) -> BOOL;
+ pub fn WaitForThreadpoolTimerCallbacks(
+ pti: PTP_TIMER,
+ fCancelPendingCallbacks: BOOL,
+ ) -> ();
+ pub fn CloseThreadpoolTimer(
+ pti: PTP_TIMER,
+ ) -> ();
+ pub fn CreateThreadpoolWait(
+ pfnwa: PTP_WAIT_CALLBACK,
+ pv: PVOID,
+ pcbe: PTP_CALLBACK_ENVIRON,
+ ) -> PTP_WAIT;
+ pub fn SetThreadpoolWait(
+ pwa: PTP_WAIT,
+ h: HANDLE,
+ pftTimeout: PFILETIME,
+ ) -> ();
+ pub fn WaitForThreadpoolWaitCallbacks(
+ pwa: PTP_WAIT,
+ fCancelPendingCallbacks: BOOL,
+ ) -> ();
+ pub fn CloseThreadpoolWait(
+ pwa: PTP_WAIT,
+ ) -> ();
+ pub fn CreateThreadpoolIo(
+ fl: HANDLE,
+ pfnio: PTP_WIN32_IO_CALLBACK,
+ pv: PVOID,
+ pcbe: PTP_CALLBACK_ENVIRON,
+ ) -> PTP_IO;
+ pub fn StartThreadpoolIo(
+ pio: PTP_IO,
+ ) -> ();
+ pub fn CancelThreadpoolIo(
+ pio: PTP_IO,
+ ) -> ();
+ pub fn WaitForThreadpoolIoCallbacks(
+ pio: PTP_IO,
+ fCancelPendingCallbacks: BOOL,
+ ) -> ();
+ pub fn CloseThreadpoolIo(
+ pio: PTP_IO,
+ ) -> ();
+ pub fn SetThreadpoolTimerEx(
+ pti: PTP_TIMER,
+ pftDueTime: PFILETIME,
+ msPeriod: DWORD,
+ msWindowLength: DWORD,
+ ) -> BOOL;
+ pub fn SetThreadpoolWaitEx(
+ pwa: PTP_WAIT,
+ h: HANDLE,
+ pftTimeout: PFILETIME,
+ Reserved: PVOID,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/threadpoollegacyapiset.rs b/vendor/winapi/src/um/threadpoollegacyapiset.rs
new file mode 100644
index 000000000..dc306c4e4
--- /dev/null
+++ b/vendor/winapi/src/um/threadpoollegacyapiset.rs
@@ -0,0 +1,44 @@
+// 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::minwindef::{BOOL, DWORD, ULONG};
+use um::minwinbase::LPTHREAD_START_ROUTINE;
+use um::winnt::{HANDLE, PHANDLE, PVOID, WAITORTIMERCALLBACK};
+extern "system" {
+ pub fn QueueUserWorkItem(
+ Function: LPTHREAD_START_ROUTINE,
+ Context: PVOID,
+ Flags: ULONG,
+ ) -> BOOL;
+ pub fn UnregisterWaitEx(
+ WaitHandle: HANDLE,
+ CompletionEvent: HANDLE,
+ ) -> BOOL;
+ pub fn CreateTimerQueue() -> HANDLE;
+ pub fn CreateTimerQueueTimer(
+ phNewTimer: PHANDLE,
+ TimerQueue: HANDLE,
+ Callback: WAITORTIMERCALLBACK,
+ Parameter: PVOID,
+ DueTime: DWORD,
+ Period: DWORD,
+ Flags: ULONG,
+ ) -> BOOL;
+ pub fn ChangeTimerQueueTimer(
+ TimerQueue: HANDLE,
+ Timer: HANDLE,
+ DueTime: ULONG,
+ Period: ULONG,
+ ) -> BOOL;
+ pub fn DeleteTimerQueueTimer(
+ TimerQueue: HANDLE,
+ Timer: HANDLE,
+ CompletionEvent: HANDLE,
+ ) -> BOOL;
+ pub fn DeleteTimerQueueEx(
+ TimerQueue: HANDLE,
+ CompletionEvent: HANDLE,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/timeapi.rs b/vendor/winapi/src/um/timeapi.rs
new file mode 100644
index 000000000..dae647067
--- /dev/null
+++ b/vendor/winapi/src/um/timeapi.rs
@@ -0,0 +1,20 @@
+// 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::minwindef::{DWORD, UINT};
+use um::mmsystem::{LPTIMECAPS, MMRESULT};
+extern "system" {
+ pub fn timeGetTime() -> DWORD;
+ pub fn timeGetDevCaps(
+ ptc: LPTIMECAPS,
+ cbtc: UINT,
+ ) -> MMRESULT;
+ pub fn timeBeginPeriod(
+ uPeriod: UINT,
+ ) -> MMRESULT;
+ pub fn timeEndPeriod(
+ uPeriod: UINT,
+ ) -> MMRESULT;
+}
diff --git a/vendor/winapi/src/um/timezoneapi.rs b/vendor/winapi/src/um/timezoneapi.rs
new file mode 100644
index 000000000..b7d99f778
--- /dev/null
+++ b/vendor/winapi/src/um/timezoneapi.rs
@@ -0,0 +1,89 @@
+// 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.
+//! ApiSet Contract for api-ms-win-core-timezone-l1
+use shared::minwindef::{BOOL, DWORD, FILETIME, LPDWORD, LPFILETIME, USHORT};
+use um::minwinbase::{LPSYSTEMTIME, SYSTEMTIME};
+use um::winnt::{BOOLEAN, LONG, WCHAR};
+pub const TIME_ZONE_ID_INVALID: DWORD = 0xFFFFFFFF;
+STRUCT!{struct TIME_ZONE_INFORMATION {
+ Bias: LONG,
+ StandardName: [WCHAR; 32],
+ StandardDate: SYSTEMTIME,
+ StandardBias: LONG,
+ DaylightName: [WCHAR; 32],
+ DaylightDate: SYSTEMTIME,
+ DaylightBias: LONG,
+}}
+pub type PTIME_ZONE_INFORMATION = *mut TIME_ZONE_INFORMATION;
+pub type LPTIME_ZONE_INFORMATION = *mut TIME_ZONE_INFORMATION;
+STRUCT!{struct DYNAMIC_TIME_ZONE_INFORMATION {
+ Bias: LONG,
+ StandardName: [WCHAR; 32],
+ StandardDate: SYSTEMTIME,
+ StandardBias: LONG,
+ DaylightName: [WCHAR; 32],
+ DaylightDate: SYSTEMTIME,
+ DaylightBias: LONG,
+ TimeZoneKeyName: [WCHAR; 128],
+ DynamicDaylightTimeDisabled: BOOLEAN,
+}}
+pub type PDYNAMIC_TIME_ZONE_INFORMATION = *mut DYNAMIC_TIME_ZONE_INFORMATION;
+extern "system" {
+ pub fn SystemTimeToTzSpecificLocalTime(
+ lpTimeZoneInformation: *const TIME_ZONE_INFORMATION,
+ lpUniversalTime: *const SYSTEMTIME,
+ lpLocalTime: LPSYSTEMTIME,
+ ) -> BOOL;
+ pub fn TzSpecificLocalTimeToSystemTime(
+ lpTimeZoneInformation: *const TIME_ZONE_INFORMATION,
+ lpLocalTime: *const SYSTEMTIME,
+ lpUniversalTime: LPSYSTEMTIME,
+ ) -> BOOL;
+ pub fn FileTimeToSystemTime(
+ lpFileTime: *const FILETIME,
+ lpSystemTime: LPSYSTEMTIME,
+ ) -> BOOL;
+ pub fn SystemTimeToFileTime(
+ lpSystemTime: *const SYSTEMTIME,
+ lpFileTime: LPFILETIME,
+ ) -> BOOL;
+ pub fn GetTimeZoneInformation(
+ lpTimeZoneInformation: LPTIME_ZONE_INFORMATION,
+ ) -> DWORD;
+ pub fn SetTimeZoneInformation(
+ lpTimeZoneInformation: *const TIME_ZONE_INFORMATION,
+ ) -> BOOL;
+ pub fn SetDynamicTimeZoneInformation(
+ lpTimeZoneInformation: *const DYNAMIC_TIME_ZONE_INFORMATION,
+ ) -> BOOL;
+ pub fn GetDynamicTimeZoneInformation(
+ pTimeZoneInformation: PDYNAMIC_TIME_ZONE_INFORMATION,
+ ) -> DWORD;
+ pub fn GetTimeZoneInformationForYear(
+ wYear: USHORT,
+ pdtzi: PDYNAMIC_TIME_ZONE_INFORMATION,
+ ptzi: LPTIME_ZONE_INFORMATION,
+ ) -> BOOL;
+ pub fn EnumDynamicTimeZoneInformation(
+ dwIndex: DWORD,
+ lpTimeZoneInformation: PDYNAMIC_TIME_ZONE_INFORMATION,
+ ) -> DWORD;
+ pub fn GetDynamicTimeZoneInformationEffectiveYears(
+ lpTimeZoneInformation: PDYNAMIC_TIME_ZONE_INFORMATION,
+ FirstYear: LPDWORD,
+ LastYear: LPDWORD,
+ ) -> DWORD;
+ pub fn SystemTimeToTzSpecificLocalTimeEx(
+ lpTimeZoneInformation: *const DYNAMIC_TIME_ZONE_INFORMATION,
+ lpUniversalTime: *const SYSTEMTIME,
+ lpLocalTime: LPSYSTEMTIME,
+ ) -> BOOL;
+ pub fn TzSpecificLocalTimeToSystemTimeEx(
+ lpTimeZoneInformation: *const DYNAMIC_TIME_ZONE_INFORMATION,
+ lpLocalTime: *const SYSTEMTIME,
+ lpUniversalTime: LPSYSTEMTIME,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/tlhelp32.rs b/vendor/winapi/src/um/tlhelp32.rs
new file mode 100644
index 000000000..5900ab6e4
--- /dev/null
+++ b/vendor/winapi/src/um/tlhelp32.rs
@@ -0,0 +1,194 @@
+// 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.
+//! WIN32 tool help functions, types, and definitions
+use shared::basetsd::{SIZE_T, ULONG_PTR};
+use shared::minwindef::{BOOL, BYTE, DWORD, HMODULE, LPCVOID, LPVOID, MAX_PATH};
+use um::winnt::{CHAR, HANDLE, LONG, WCHAR};
+pub const MAX_MODULE_NAME32: usize = 255;
+extern "system" {
+ pub fn CreateToolhelp32Snapshot(
+ dwFlags: DWORD,
+ th32ProcessID: DWORD,
+ ) -> HANDLE;
+}
+pub const TH32CS_SNAPHEAPLIST: DWORD = 0x00000001;
+pub const TH32CS_SNAPPROCESS: DWORD = 0x00000002;
+pub const TH32CS_SNAPTHREAD: DWORD = 0x00000004;
+pub const TH32CS_SNAPMODULE: DWORD = 0x00000008;
+pub const TH32CS_SNAPMODULE32: DWORD = 0x00000010;
+pub const TH32CS_SNAPALL: DWORD =
+ TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE;
+pub const TH32CS_INHERIT: DWORD = 0x80000000;
+STRUCT!{struct HEAPLIST32 {
+ dwSize: SIZE_T,
+ th32ProcessID: DWORD,
+ th32HeapID: ULONG_PTR,
+ dwFlags: DWORD,
+}}
+pub type PHEAPLIST32 = *mut HEAPLIST32;
+pub type LPHEAPLIST32 = *mut HEAPLIST32;
+pub const HF32_DEFAULT: DWORD = 1;
+pub const HF32_SHARED: DWORD = 2;
+extern "system" {
+ pub fn Heap32ListFirst(
+ hSnapshot: HANDLE,
+ lphl: LPHEAPLIST32,
+ ) -> BOOL;
+ pub fn Heap32ListNext(
+ hSnapshot: HANDLE,
+ lphl: LPHEAPLIST32,
+ ) -> BOOL;
+}
+STRUCT!{struct HEAPENTRY32 {
+ dwSize: SIZE_T,
+ hHandle: HANDLE,
+ dwAddress: ULONG_PTR,
+ dwBlockSize: SIZE_T,
+ dwFlags: DWORD,
+ dwLockCount: DWORD,
+ dwResvd: DWORD,
+ th32ProcessID: DWORD,
+ th32HeapID: ULONG_PTR,
+}}
+pub type PHEAPENTRY32 = *mut HEAPENTRY32;
+pub type LPHEAPENTRY32 = *mut HEAPENTRY32;
+pub const LF32_FIXED: DWORD = 0x00000001;
+pub const LF32_FREE: DWORD = 0x00000002;
+pub const LF32_MOVEABLE: DWORD = 0x00000004;
+extern "system" {
+ pub fn Heap32First(
+ lphe: LPHEAPENTRY32,
+ th32ProcessID: DWORD,
+ th32HeapID: ULONG_PTR,
+ ) -> BOOL;
+ pub fn Heap32Next(
+ lphe: LPHEAPENTRY32,
+ ) -> BOOL;
+ pub fn Toolhelp32ReadProcessMemory(
+ th32ProcessID: DWORD,
+ lpBaseAddress: LPCVOID,
+ lpBuffer: LPVOID,
+ cbRead: SIZE_T,
+ lpNumberOfBytesRead: *mut SIZE_T,
+ ) -> BOOL;
+}
+STRUCT!{struct PROCESSENTRY32W {
+ dwSize: DWORD,
+ cntUsage: DWORD,
+ th32ProcessID: DWORD,
+ th32DefaultHeapID: ULONG_PTR,
+ th32ModuleID: DWORD,
+ cntThreads: DWORD,
+ th32ParentProcessID: DWORD,
+ pcPriClassBase: LONG,
+ dwFlags: DWORD,
+ szExeFile: [WCHAR; MAX_PATH],
+}}
+pub type PPROCESSENTRY32W = *mut PROCESSENTRY32W;
+pub type LPPROCESSENTRY32W = *mut PROCESSENTRY32W;
+extern "system" {
+ pub fn Process32FirstW(
+ hSnapshot: HANDLE,
+ lppe: LPPROCESSENTRY32W,
+ ) -> BOOL;
+ pub fn Process32NextW(
+ hSnapshot: HANDLE,
+ lppe: LPPROCESSENTRY32W,
+ ) -> BOOL;
+}
+STRUCT!{struct PROCESSENTRY32 {
+ dwSize: DWORD,
+ cntUsage: DWORD,
+ th32ProcessID: DWORD,
+ th32DefaultHeapID: ULONG_PTR,
+ th32ModuleID: DWORD,
+ cntThreads: DWORD,
+ th32ParentProcessID: DWORD,
+ pcPriClassBase: LONG,
+ dwFlags: DWORD,
+ szExeFile: [CHAR; MAX_PATH],
+}}
+pub type PPROCESSENTRY32 = *mut PROCESSENTRY32;
+pub type LPPROCESSENTRY32 = *mut PROCESSENTRY32;
+extern "system" {
+ pub fn Process32First(
+ hSnapshot: HANDLE,
+ lppe: LPPROCESSENTRY32,
+ ) -> BOOL;
+ pub fn Process32Next(
+ hSnapshot: HANDLE,
+ lppe: LPPROCESSENTRY32,
+ ) -> BOOL;
+}
+STRUCT!{struct THREADENTRY32 {
+ dwSize: DWORD,
+ cntUsage: DWORD,
+ th32ThreadID: DWORD,
+ th32OwnerProcessID: DWORD,
+ tpBasePri: LONG,
+ tpDeltaPri: LONG,
+ dwFlags: DWORD,
+}}
+pub type PTHREADENTRY32 = *mut THREADENTRY32;
+pub type LPTHREADENTRY32 = *mut THREADENTRY32;
+extern "system" {
+ pub fn Thread32First(
+ hSnapshot: HANDLE,
+ lpte: LPTHREADENTRY32,
+ ) -> BOOL;
+ pub fn Thread32Next(
+ hSnapshot: HANDLE,
+ lpte: LPTHREADENTRY32,
+ ) -> BOOL;
+}
+STRUCT!{struct MODULEENTRY32W {
+ dwSize: DWORD,
+ th32ModuleID: DWORD,
+ th32ProcessID: DWORD,
+ GlblcntUsage: DWORD,
+ ProccntUsage: DWORD,
+ modBaseAddr: *mut BYTE,
+ modBaseSize: DWORD,
+ hModule: HMODULE,
+ szModule: [WCHAR; MAX_MODULE_NAME32 + 1],
+ szExePath: [WCHAR; MAX_PATH],
+}}
+pub type PMODULEENTRY32W = *mut MODULEENTRY32W;
+pub type LPMODULEENTRY32W = *mut MODULEENTRY32W;
+extern "system" {
+ pub fn Module32FirstW(
+ hSnapshot: HANDLE,
+ lpme: LPMODULEENTRY32W,
+ ) -> BOOL;
+ pub fn Module32NextW(
+ hSnapshot: HANDLE,
+ lpme: LPMODULEENTRY32W,
+ ) -> BOOL;
+}
+STRUCT!{struct MODULEENTRY32 {
+ dwSize: DWORD,
+ th32ModuleID: DWORD,
+ th32ProcessID: DWORD,
+ GlblcntUsage: DWORD,
+ ProccntUsage: DWORD,
+ modBaseAddr: *mut BYTE,
+ modBaseSize: DWORD,
+ hModule: HMODULE,
+ szModule: [CHAR; MAX_MODULE_NAME32 + 1],
+ szExePath: [CHAR; MAX_PATH],
+}}
+pub type PMODULEENTRY32 = *mut MODULEENTRY32;
+pub type LPMODULEENTRY32 = *mut MODULEENTRY32;
+extern "system" {
+ pub fn Module32First(
+ hSnapshot: HANDLE,
+ lpme: LPMODULEENTRY32,
+ ) -> BOOL;
+ pub fn Module32Next(
+ hSnapshot: HANDLE,
+ lpme: LPMODULEENTRY32,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/unknwnbase.rs b/vendor/winapi/src/um/unknwnbase.rs
new file mode 100644
index 000000000..4162fc109
--- /dev/null
+++ b/vendor/winapi/src/um/unknwnbase.rs
@@ -0,0 +1,43 @@
+// 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 ctypes::c_void;
+use shared::guiddef::REFIID;
+use shared::minwindef::{BOOL, ULONG};
+use um::winnt::HRESULT;
+RIDL!{#[uuid(0x00000000, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IUnknown(IUnknownVtbl) {
+ fn QueryInterface(
+ riid: REFIID,
+ ppvObject: *mut *mut c_void,
+ ) -> HRESULT,
+ fn AddRef() -> ULONG,
+ fn Release() -> ULONG,
+}}
+pub type LPUNKNOWN = *mut IUnknown;
+RIDL!{#[uuid(0x000e0000, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface AsyncIUnknown(AsyncIUnknownVtbl): IUnknown(IUnknownVtbl) {
+ fn Begin_QueryInterface(
+ riid: REFIID,
+ ) -> HRESULT,
+ fn Finish_QueryInterface(
+ ppvObject: *mut *mut c_void,
+ ) -> HRESULT,
+ fn Begin_AddRef() -> HRESULT,
+ fn Finish_AddRef() -> ULONG,
+ fn Begin_Release() -> HRESULT,
+ fn Finish_Release() -> ULONG,
+}}
+RIDL!{#[uuid(0x00000001, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
+interface IClassFactory(IClassFactoryVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateInstance(
+ pUnkOuter: *mut IUnknown,
+ riid: REFIID,
+ ppvObject: *mut *mut c_void,
+ ) -> HRESULT,
+ fn LockServer(
+ fLock: BOOL,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/urlhist.rs b/vendor/winapi/src/um/urlhist.rs
new file mode 100644
index 000000000..f35e55029
--- /dev/null
+++ b/vendor/winapi/src/um/urlhist.rs
@@ -0,0 +1,97 @@
+// 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.
+//! Url History Interfaces
+use ctypes::c_void;
+use shared::guiddef::REFIID;
+use shared::minwindef::{BOOL, DWORD, FILETIME, ULONG};
+use shared::wtypesbase::LPCOLESTR;
+use um::docobj::{IOleCommandTarget, IOleCommandTargetVtbl};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPWSTR};
+pub const STATURL_QUERYFLAG_ISCACHED: DWORD = 0x00010000;
+pub const STATURL_QUERYFLAG_NOURL: DWORD = 0x00020000;
+pub const STATURL_QUERYFLAG_NOTITLE: DWORD = 0x00040000;
+pub const STATURL_QUERYFLAG_TOPLEVEL: DWORD = 0x00080000;
+pub const STATURLFLAG_ISCACHED: DWORD = 0x00000001;
+pub const STATURLFLAG_ISTOPLEVEL: DWORD = 0x00000002;
+ENUM!{enum ADDURL_FLAG {
+ ADDURL_FIRST = 0,
+ ADDURL_ADDTOHISTORYANDCACHE = 0,
+ ADDURL_ADDTOCACHE = 1,
+ ADDURL_Max = 2147483647,
+}}
+pub type LPENUMSTATURL = *mut IEnumSTATURL;
+STRUCT!{struct STATURL {
+ cbSize: DWORD,
+ pwcsUrl: LPWSTR,
+ pwcsTitle: LPWSTR,
+ ftLastVisited: FILETIME,
+ ftLastUpdated: FILETIME,
+ ftExpires: FILETIME,
+ dwFlags: DWORD,
+}}
+pub type LPSTATURL = *mut STATURL;
+RIDL!{#[uuid(0x3c374a42, 0xbae4, 0x11cf, 0xbf, 0x7d, 0x00, 0xaa, 0x00, 0x69, 0x46, 0xee)]
+interface IEnumSTATURL(IEnumSTATURLVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ celt: ULONG,
+ rgelt: LPSTATURL,
+ pceltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ celt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppenum: *mut *mut IEnumSTATURL,
+ ) -> HRESULT,
+ fn SetFilter(
+ poszFilter: LPCOLESTR,
+ dwFlags: DWORD,
+ ) -> HRESULT,
+}}
+pub type LPURLHISTORYSTG = *mut IUrlHistoryStg;
+RIDL!{#[uuid(0x3c374a41, 0xbae4, 0x11cf, 0xbf, 0x7d, 0x00, 0xaa, 0x00, 0x69, 0x46, 0xee)]
+interface IUrlHistoryStg(IUrlHistoryStgVtbl): IUnknown(IUnknownVtbl) {
+ fn AddUrl(
+ pocsUrl: LPCOLESTR,
+ ) -> HRESULT,
+ fn DeleteUrl(
+ pocsUrl: LPCOLESTR,
+ dwFlags: DWORD,
+ ) -> HRESULT,
+ fn QueryUrl(
+ pocsUrl: LPCOLESTR,
+ dwFlags: DWORD,
+ lpSTATURL: LPSTATURL,
+ ) -> HRESULT,
+ fn BindToObject(
+ pocsUrl: LPCOLESTR,
+ riid: REFIID,
+ ppvOut: *mut *mut c_void,
+ ) -> HRESULT,
+ fn EnumUrls(
+ ppEnum: *mut *mut IEnumSTATURL,
+ ) -> HRESULT,
+}}
+pub type LPURLHISTORYSTG2 = *mut IUrlHistoryStg2;
+RIDL!{#[uuid(0xafa0dc11, 0xc313, 0x11d0, 0x83, 0x1a, 0x00, 0xc0, 0x4f, 0xd5, 0xae, 0x38)]
+interface IUrlHistoryStg2(IUrlHistoryStg2Vtbl): IUrlHistoryStg(IUrlHistoryStgVtbl) {
+ fn AddUrlAndNotify(
+ pocsUrl: LPCOLESTR,
+ pocsTitle: LPCOLESTR,
+ dwFlags: DWORD,
+ fWriteHistory: BOOL,
+ poctNotify: *mut IOleCommandTarget,
+ punkISFolder: *mut IUnknown,
+ ) -> HRESULT,
+ fn ClearHistory() -> HRESULT,
+}}
+pub type LPURLHISTORYNOTIFY = *mut IUrlHistoryNotify;
+RIDL!{#[uuid(0xbc40bec1, 0xc493, 0x11d0, 0x83, 0x1b, 0x00, 0xc0, 0x4f, 0xd5, 0xae, 0x38)]
+interface IUrlHistoryNotify(IUrlHistoryNotifyVtbl):
+ IOleCommandTarget(IOleCommandTargetVtbl) {}
+}
diff --git a/vendor/winapi/src/um/urlmon.rs b/vendor/winapi/src/um/urlmon.rs
new file mode 100644
index 000000000..bdcbada51
--- /dev/null
+++ b/vendor/winapi/src/um/urlmon.rs
@@ -0,0 +1,21 @@
+// 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.
+//! URL Moniker interfaces
+use shared::minwindef::DWORD;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LPCWSTR};
+RIDL!{#[uuid(0x79eac9ee, 0xbaf9, 0x11ce, 0x8c, 0x82, 0x00, 0xaa, 0x00, 0x4b, 0xa9, 0x0b)]
+interface IInternetSecurityManager(IInternetSecurityManagerVtbl): IUnknown(IUnknownVtbl) {
+ fn SetSecuritySite() -> HRESULT,
+ fn GetSecuritySite() -> HRESULT,
+ fn MapUrlToZone(
+ pwszUrl: LPCWSTR,
+ pdwZone: *mut DWORD,
+ dwFlags: DWORD,
+ ) -> HRESULT,
+ // TODO: the rest
+}}
+// TODO: the rest
diff --git a/vendor/winapi/src/um/userenv.rs b/vendor/winapi/src/um/userenv.rs
new file mode 100644
index 000000000..ea0af96ff
--- /dev/null
+++ b/vendor/winapi/src/um/userenv.rs
@@ -0,0 +1,159 @@
+// 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.
+//! Definitions for the user environment API
+use shared::minwindef::{BOOL, DWORD, LPDWORD, LPVOID, PHKEY};
+use um::winnt::{
+ HANDLE, HRESULT, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PCWSTR, PSID, PSID_AND_ATTRIBUTES, PWSTR
+};
+use um::winreg::REGSAM;
+extern "system" {
+ // pub fn LoadUserProfileA(
+ // hToken: HANDLE,
+ // lpProfileInfo: LPPROFILEINFOA,
+ // ) -> BOOL;
+ // pub fn LoadUserProfileW(
+ // hToken: HANDLE,
+ // lpProfileInfo: LPPROFILEINFOW,
+ // ) -> BOOL;
+ pub fn UnloadUserProfile(
+ hToken: HANDLE,
+ hProfile: HANDLE,
+ ) -> BOOL;
+ pub fn GetProfilesDirectoryA(
+ lpProfileDir: LPSTR,
+ lpcchSize: LPDWORD,
+ ) -> BOOL;
+ pub fn GetProfilesDirectoryW(
+ lpProfileDir: LPWSTR,
+ lpcchSize: LPDWORD,
+ ) -> BOOL;
+ pub fn GetProfileType(
+ dwFlags: *mut DWORD,
+ ) -> BOOL;
+ pub fn DeleteProfileA(
+ lpSidString: LPCSTR,
+ lpProfilePath: LPCSTR,
+ lpComputerName: LPCSTR,
+ ) -> BOOL;
+ pub fn DeleteProfileW(
+ lpSidString: LPCWSTR,
+ lpProfilePath: LPCWSTR,
+ lpComputerName: LPCWSTR,
+ ) -> BOOL;
+ pub fn CreateProfile(
+ pszUserSid: LPCWSTR,
+ pszUserName: LPCWSTR,
+ pszProfilePath: LPWSTR,
+ cchProfilePath: DWORD,
+ ) -> HRESULT;
+ pub fn GetDefaultUserProfileDirectoryA(
+ lpProfileDir: LPSTR,
+ lpcchSize: LPDWORD,
+ ) -> BOOL;
+ pub fn GetDefaultUserProfileDirectoryW(
+ lpProfileDir: LPWSTR,
+ lpcchSize: LPDWORD,
+ ) -> BOOL;
+ pub fn GetAllUsersProfileDirectoryA(
+ lpProfileDir: LPSTR,
+ lpcchSize: LPDWORD,
+ ) -> BOOL;
+ pub fn GetAllUsersProfileDirectoryW(
+ lpProfileDir: LPWSTR,
+ lpcchSize: LPDWORD,
+ ) -> BOOL;
+ pub fn GetUserProfileDirectoryA(
+ hToken: HANDLE,
+ lpProfileDir: LPSTR,
+ lpcchSize: LPDWORD,
+ ) -> BOOL;
+ pub fn GetUserProfileDirectoryW(
+ hToken: HANDLE,
+ lpProfileDir: LPWSTR,
+ lpcchSize: LPDWORD,
+ ) -> BOOL;
+ pub fn CreateEnvironmentBlock(
+ lpEnvironment: *mut LPVOID,
+ hToken: HANDLE,
+ bInherit: BOOL,
+ ) -> BOOL;
+ pub fn DestroyEnvironmentBlock(
+ lpEnvironment: LPVOID,
+ ) -> BOOL;
+ pub fn ExpandEnvironmentStringsForUserA(
+ hToken: HANDLE,
+ lpSrc: LPCSTR,
+ lpDest: LPSTR,
+ dwSize: DWORD,
+ ) -> BOOL;
+ pub fn ExpandEnvironmentStringsForUserW(
+ hToken: HANDLE,
+ lpSrc: LPCWSTR,
+ lpDest: LPWSTR,
+ dwSize: DWORD,
+ ) -> BOOL;
+ pub fn RefreshPolicy(
+ bMachine: BOOL,
+ ) -> BOOL;
+ pub fn RefreshPolicyEx(
+ bMachine: BOOL,
+ dwOptions: DWORD,
+ ) -> BOOL;
+ pub fn EnterCriticalPolicySection(
+ bMachine: BOOL,
+ ) -> HANDLE;
+ pub fn LeaveCriticalPolicySection(
+ hSection: HANDLE,
+ ) -> BOOL;
+ pub fn RegisterGPNotification(
+ hEvent: HANDLE,
+ bMachine: BOOL,
+ ) -> BOOL;
+ pub fn UnregisterGPNotification(
+ hEvent: HANDLE,
+ ) -> BOOL;
+ // pub fn GetGPOListA();
+ // pub fn GetGPOListW();
+ // pub fn FreeGPOListA();
+ // pub fn FreeGPOListW();
+ // pub fn GetAppliedGPOListA();
+ // pub fn GetAppliedGPOListW();
+ // pub fn ProcessGroupPolicyCompleted();
+ // pub fn ProcessGroupPolicyCompletedEx();
+ // pub fn RsopAccessCheckByType();
+ // pub fn RsopFileAccessCheck();
+ // pub fn RsopSetPolicySettingStatus();
+ // pub fn RsopResetPolicySettingStatus();
+ // pub fn GenerateGPNotification();
+ pub fn CreateAppContainerProfile(
+ pszAppContainerName: PCWSTR,
+ pszDisplayName: PCWSTR,
+ pszDescription: PCWSTR,
+ pCapabilities: PSID_AND_ATTRIBUTES,
+ dwCapabilityCount: DWORD,
+ ppSidAppContainerSid: *mut PSID,
+ ) -> HRESULT;
+ pub fn DeleteAppContainerProfile(
+ pszAppContainerName: PCWSTR,
+ ) -> HRESULT;
+ pub fn GetAppContainerRegistryLocation(
+ desiredAccess: REGSAM,
+ phAppContainerKey: PHKEY,
+ ) -> HRESULT;
+ pub fn GetAppContainerFolderPath(
+ pszAppContainerSid: PCWSTR,
+ ppszPath: *mut PWSTR,
+ ) -> HRESULT;
+ pub fn DeriveAppContainerSidFromAppContainerName(
+ pszAppContainerName: PCWSTR,
+ ppsidAppContainerSid: *mut PSID,
+ ) -> HRESULT;
+ pub fn DeriveRestrictedAppContainerSidFromAppContainerSidAndRestrictedName(
+ psidAppContainerSid: PSID,
+ pszRestrictedAppContainerName: PCWSTR,
+ ppsidRestrictedAppContainerSid: *mut PSID,
+ ) -> HRESULT;
+}
diff --git a/vendor/winapi/src/um/usp10.rs b/vendor/winapi/src/um/usp10.rs
new file mode 100644
index 000000000..b2f24be06
--- /dev/null
+++ b/vendor/winapi/src/um/usp10.rs
@@ -0,0 +1,560 @@
+// 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.
+//! Unicode Complex Script processor API declarations
+use ctypes::{c_int, c_long, c_void};
+use shared::minwindef::{BOOL, BYTE, DWORD, UINT, ULONG, WORD};
+use shared::ntdef::LCID;
+use shared::windef::{HDC, RECT, SIZE};
+use shared::winerror::{FACILITY_ITF, SEVERITY_ERROR};
+use um::wingdi::ABC;
+use um::winnt::{HRESULT, LONG, WCHAR};
+pub const SCRIPT_UNDEFINED: WORD = 0;
+pub const USP_E_SCRIPT_NOT_IN_FONT: HRESULT = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_ITF, 0x200);
+DECLARE_HANDLE!{SCRIPT_CACHE, SCRIPT_CACHE__}
+extern "system" {
+ pub fn ScriptFreeCache(
+ psc: *mut SCRIPT_CACHE,
+ ) -> HRESULT;
+}
+STRUCT!{struct SCRIPT_CONTROL {
+ bit_fields: DWORD,
+}}
+BITFIELD!{SCRIPT_CONTROL bit_fields: DWORD [
+ uDefaultLanguage set_uDefaultLanguage[0..16],
+ fContextDigits set_fContextDigits[16..17],
+ fInvertPreBoundDir set_fInvertPreBoundDir[17..18],
+ fInvertPostBoundDir set_fInvertPostBoundDir[18..19],
+ fLinkStringBefore set_fLinkStringBefore[19..20],
+ fLinkStringAfter set_fLinkStringAfter[20..21],
+ fNeutralOverride set_fNeutralOverride[21..22],
+ fNumericOverride set_fNumericOverride[22..23],
+ fLegacyBidiClass set_fLegacyBidiClass[23..24],
+ fMergeNeutralItems set_fMergeNeutralItems[24..25],
+ fReserved set_fReserved[25..32],
+]}
+STRUCT!{struct SCRIPT_STATE {
+ bit_fields: WORD,
+}}
+BITFIELD!{SCRIPT_STATE bit_fields: WORD [
+ uBidiLevel set_uBidiLevel[0..5],
+ fOverrideDirection set_fOverrideDirection[5..6],
+ fInhibitSymSwap set_fInhibitSymSwap[6..7],
+ fCharShape set_fCharShape[7..8],
+ fDigitSubstitute set_fDigitSubstitute[8..9],
+ fInhibitLigate set_fInhibitLigate[9..10],
+ fDisplayZWG set_fDisplayZWG[10..11],
+ fArabicNumContext set_fArabicNumContext[11..12],
+ fGcpClusters set_fGcpClusters[12..13],
+ fReserved set_fReserved[13..14],
+ fEngineReserved set_fEngineReserved[14..16],
+]}
+STRUCT!{struct SCRIPT_ANALYSIS {
+ bit_fields: WORD,
+ s: SCRIPT_STATE,
+}}
+BITFIELD!{SCRIPT_ANALYSIS bit_fields: WORD [
+ eScript set_eScript[0..10],
+ fRTL set_fRTL[10..11],
+ fLayoutRTL set_fLayoutRTL[11..12],
+ fLinkBefore set_fLinkBefore[12..13],
+ fLinkAfter set_fLinkAfter[13..14],
+ fLogicalOrder set_fLogicalOrder[14..15],
+ fNoGlyphIndex set_fNoGlyphIndex[15..16],
+]}
+STRUCT!{struct SCRIPT_ITEM {
+ iCharPos: c_int,
+ a: SCRIPT_ANALYSIS,
+}}
+extern "system" {
+ pub fn ScriptItemize(
+ pwcInChars: *const WCHAR,
+ cInChars: c_int,
+ cMaxItems: c_int,
+ psControl: *const SCRIPT_CONTROL,
+ psState: *const SCRIPT_STATE,
+ pItems: *mut SCRIPT_ITEM,
+ pcItems: *mut c_int,
+ ) -> HRESULT;
+ pub fn ScriptLayout(
+ cRuns: c_int,
+ pbLevel: *const BYTE,
+ piVisualToLogical: *mut c_int,
+ piLogicalToVisual: *mut c_int,
+ ) -> HRESULT;
+}
+pub const SCRIPT_JUSTIFY_NONE: WORD = 0;
+pub const SCRIPT_JUSTIFY_ARABIC_BLANK: WORD = 1;
+pub const SCRIPT_JUSTIFY_CHARACTER: WORD = 2;
+pub const SCRIPT_JUSTIFY_RESERVED1: WORD = 3;
+pub const SCRIPT_JUSTIFY_BLANK: WORD = 4;
+pub const SCRIPT_JUSTIFY_RESERVED2: WORD = 5;
+pub const SCRIPT_JUSTIFY_RESERVED3: WORD = 6;
+pub const SCRIPT_JUSTIFY_ARABIC_NORMAL: WORD = 7;
+pub const SCRIPT_JUSTIFY_ARABIC_KASHIDA: WORD = 8;
+pub const SCRIPT_JUSTIFY_ARABIC_ALEF: WORD = 9;
+pub const SCRIPT_JUSTIFY_ARABIC_HA: WORD = 10;
+pub const SCRIPT_JUSTIFY_ARABIC_RA: WORD = 11;
+pub const SCRIPT_JUSTIFY_ARABIC_BA: WORD = 12;
+pub const SCRIPT_JUSTIFY_ARABIC_BARA: WORD = 13;
+pub const SCRIPT_JUSTIFY_ARABIC_SEEN: WORD = 14;
+pub const SCRIPT_JUSTIFY_ARABIC_SEEN_M: WORD = 15;
+STRUCT!{struct SCRIPT_VISATTR {
+ bit_fields: WORD,
+}}
+BITFIELD!{SCRIPT_VISATTR bit_fields: WORD [
+ uJustification set_uJustification[0..4],
+ fClusterStart set_fClusterStart[4..5],
+ fDiacritic set_fDiacritic[5..6],
+ fZeroWidth set_fZeroWidth[6..7],
+ fReserved set_fReserved[7..8],
+ fShapeReserved set_fShapeReserved[8..16],
+]}
+extern "system" {
+ pub fn ScriptShape(
+ hdc: HDC,
+ psc: *mut SCRIPT_CACHE,
+ pwcChars: *const WCHAR,
+ cChars: c_int,
+ cMaxGlyphs: c_int,
+ psa: *mut SCRIPT_ANALYSIS,
+ pwOutGlyphs: *mut WORD,
+ pwLogClust: *mut WORD,
+ psva: *mut SCRIPT_VISATTR,
+ pcGlyphs: *mut c_int,
+ ) -> HRESULT;
+}
+STRUCT!{struct GOFFSET {
+ du: LONG,
+ dv: LONG,
+}}
+extern "system" {
+ pub fn ScriptPlace(
+ hdc: HDC,
+ psc: *mut SCRIPT_CACHE,
+ pwGlyphs: *const WORD,
+ cGlyphs: c_int,
+ psva: *const SCRIPT_VISATTR,
+ psa: *mut SCRIPT_ANALYSIS,
+ piAdvance: *mut c_int,
+ pGoffset: *mut GOFFSET,
+ pABC: *mut ABC,
+ ) -> HRESULT;
+ pub fn ScriptTextOut(
+ hdc: HDC,
+ psc: *mut SCRIPT_CACHE,
+ x: c_int,
+ y: c_int,
+ fuOptions: UINT,
+ lprc: *const RECT,
+ psa: *const SCRIPT_ANALYSIS,
+ pwcReserved: *const WCHAR,
+ iReserved: c_int,
+ pwGlyphs: *const WORD,
+ cGlyphs: c_int,
+ piAdvance: *const c_int,
+ piJustify: *const c_int,
+ pGoffset: *const GOFFSET,
+ ) -> HRESULT;
+ pub fn ScriptJustify(
+ psva: *const SCRIPT_VISATTR,
+ piAdvance: *const c_int,
+ cGlyphs: c_int,
+ iDx: c_int,
+ iMinKashida: c_int,
+ piJustify: *mut c_int,
+ ) -> HRESULT;
+}
+STRUCT!{struct SCRIPT_LOGATTR {
+ bit_fields: BYTE,
+}}
+BITFIELD!{SCRIPT_LOGATTR bit_fields: BYTE [
+ fSoftBreak set_fSoftBreak[0..1],
+ fWhiteSpace set_fWhiteSpace[1..2],
+ fCharStop set_fCharStop[2..3],
+ fWordStop set_fWordStop[3..4],
+ fInvalid set_fInvalid[4..5],
+ fReserved set_fReserved[5..8],
+]}
+extern "system" {
+ pub fn ScriptBreak(
+ pwcChars: *const WCHAR,
+ cChars: c_int,
+ psa: *const SCRIPT_ANALYSIS,
+ psla: *mut SCRIPT_LOGATTR,
+ ) -> HRESULT;
+ pub fn ScriptCPtoX(
+ iCP: c_int,
+ fTrailing: BOOL,
+ cChars: c_int,
+ cGlyphs: c_int,
+ pwLogClust: *const WORD,
+ psva: *const SCRIPT_VISATTR,
+ piAdvance: *const c_int,
+ psa: *const SCRIPT_ANALYSIS,
+ piX: *mut c_int,
+ ) -> HRESULT;
+ pub fn ScriptXtoCP(
+ iX: c_int,
+ cChars: c_int,
+ cGlyphs: c_int,
+ pwLogClust: *const WORD,
+ psva: *const SCRIPT_VISATTR,
+ piAdvance: *const c_int,
+ psa: *const SCRIPT_ANALYSIS,
+ piCP: *mut c_int,
+ piTrailing: *mut c_int,
+ ) -> HRESULT;
+ pub fn ScriptGetLogicalWidths(
+ psa: *const SCRIPT_ANALYSIS,
+ cChars: c_int,
+ cGlyphs: c_int,
+ piGlyphWidth: *const c_int,
+ pwLogClust: *const WORD,
+ psva: *const SCRIPT_VISATTR,
+ piDx: *mut c_int,
+ ) -> HRESULT;
+ pub fn ScriptApplyLogicalWidth(
+ piDx: *const c_int,
+ cChars: c_int,
+ cGlyphs: c_int,
+ pwLogClust: *const WORD,
+ psva: *const SCRIPT_VISATTR,
+ piAdvance: *const c_int,
+ psa: *const SCRIPT_ANALYSIS,
+ pABC: *mut ABC,
+ piJustify: *mut c_int,
+ ) -> HRESULT;
+}
+pub const SGCM_RTL: DWORD = 0x00000001;
+extern "system" {
+ pub fn ScriptGetCMap(
+ hdc: HDC,
+ psc: *mut SCRIPT_CACHE,
+ pwcInChars: *const WCHAR,
+ cChars: c_int,
+ dwFlags: DWORD,
+ pwOutGlyphs: *mut WORD,
+ ) -> HRESULT;
+ pub fn ScriptGetGlyphABCWidth(
+ hdc: HDC,
+ psc: *mut SCRIPT_CACHE,
+ wGlyph: WORD,
+ pABC: *mut ABC,
+ ) -> HRESULT;
+}
+STRUCT!{struct SCRIPT_PROPERTIES {
+ bit_fields1: DWORD,
+ bit_fields2: DWORD,
+}}
+BITFIELD!{SCRIPT_PROPERTIES bit_fields1: DWORD [
+ langid set_langid[0..16],
+ fNumeric set_fNumeric[16..17],
+ fComplex set_fComplex[17..18],
+ fNeedsWordBreaking set_fNeedsWordBreaking[18..19],
+ fNeedsCaretInfo set_fNeedsCaretInfo[19..20],
+ bCharSet set_bCharSet[20..28],
+ fControl set_fControl[28..29],
+ fPrivateUseArea set_fPrivateUseArea[29..30],
+ fNeedsCharacterJustify set_fNeedsCharacterJustify[30..31],
+ fInvalidGlyph set_fInvalidGlyph[31..32],
+]}
+BITFIELD!{SCRIPT_PROPERTIES bit_fields2: DWORD [
+ fInvalidLogAttr set_fInvalidLogAttr[0..1],
+ fCDM set_fCDM[1..2],
+ fAmbiguousCharSet set_fAmbiguousCharSet[2..3],
+ fClusterSizeVaries set_fClusterSizeVaries[3..4],
+ fRejectInvalid set_fRejectInvalid[4..5],
+]}
+extern "system" {
+ pub fn ScriptGetProperties(
+ ppSp: *mut *mut *const SCRIPT_PROPERTIES,
+ piNumScripts: *mut c_int,
+ ) -> HRESULT;
+}
+STRUCT!{struct SCRIPT_FONTPROPERTIES {
+ cBytes: c_int,
+ wgBlank: WORD,
+ wgDefault: WORD,
+ wgInvalid: WORD,
+ wgKashida: WORD,
+ iKashidaWidth: c_int,
+}}
+extern "system" {
+ pub fn ScriptGetFontProperties(
+ hdc: HDC,
+ psc: *mut SCRIPT_CACHE,
+ sfp: *mut SCRIPT_FONTPROPERTIES,
+ ) -> HRESULT;
+ pub fn ScriptCacheGetHeight(
+ hdc: HDC,
+ psc: *mut SCRIPT_CACHE,
+ tmHeight: *mut c_long,
+ ) -> HRESULT;
+}
+pub const SSA_PASSWORD: DWORD = 0x00000001;
+pub const SSA_TAB: DWORD = 0x00000002;
+pub const SSA_CLIP: DWORD = 0x00000004;
+pub const SSA_FIT: DWORD = 0x00000008;
+pub const SSA_DZWG: DWORD = 0x00000010;
+pub const SSA_FALLBACK: DWORD = 0x00000020;
+pub const SSA_BREAK: DWORD = 0x00000040;
+pub const SSA_GLYPHS: DWORD = 0x00000080;
+pub const SSA_RTL: DWORD = 0x00000100;
+pub const SSA_GCP: DWORD = 0x00000200;
+pub const SSA_HOTKEY: DWORD = 0x00000400;
+pub const SSA_METAFILE: DWORD = 0x00000800;
+pub const SSA_LINK: DWORD = 0x00001000;
+pub const SSA_HIDEHOTKEY: DWORD = 0x00002000;
+pub const SSA_HOTKEYONLY: DWORD = 0x00002400;
+pub const SSA_FULLMEASURE: DWORD = 0x04000000;
+pub const SSA_LPKANSIFALLBACK: DWORD = 0x08000000;
+pub const SSA_PIDX: DWORD = 0x10000000;
+pub const SSA_LAYOUTRTL: DWORD = 0x20000000;
+pub const SSA_DONTGLYPH: DWORD = 0x40000000;
+pub const SSA_NOKASHIDA: DWORD = 0x80000000;
+STRUCT!{struct SCRIPT_TABDEF {
+ cTabStops: c_int,
+ iScale: c_int,
+ pTabStops: *mut c_int,
+ iTabOrigin: c_int,
+}}
+DECLARE_HANDLE!{SCRIPT_STRING_ANALYSIS, SCRIPT_STRING_ANALYSIS__}
+extern "system" {
+ pub fn ScriptStringAnalyse(
+ hdc: HDC,
+ pString: *const c_void,
+ cString: c_int,
+ cGlyphs: c_int,
+ iCharset: c_int,
+ dwFlags: DWORD,
+ iReqWidth: c_int,
+ psControl: *mut SCRIPT_CONTROL,
+ psState: *mut SCRIPT_STATE,
+ piDx: *const c_int,
+ pTabdef: *mut SCRIPT_TABDEF,
+ pbInClass: *const BYTE,
+ pssa: *mut SCRIPT_STRING_ANALYSIS,
+ ) -> HRESULT;
+ pub fn ScriptStringFree(
+ pssa: *mut SCRIPT_STRING_ANALYSIS,
+ ) -> HRESULT;
+ pub fn ScriptString_pSize(
+ ssa: SCRIPT_STRING_ANALYSIS,
+ ) -> *const SIZE;
+ pub fn ScriptString_pcOutChars(
+ ssa: SCRIPT_STRING_ANALYSIS,
+ ) -> *const c_int;
+ pub fn ScriptString_pLogAttr(
+ ssa: SCRIPT_STRING_ANALYSIS,
+ ) -> *const SCRIPT_LOGATTR;
+ pub fn ScriptStringGetOrder(
+ ssa: SCRIPT_STRING_ANALYSIS,
+ puOrder: *mut UINT,
+ ) -> HRESULT;
+ pub fn ScriptStringCPtoX(
+ ssa: SCRIPT_STRING_ANALYSIS,
+ icp: c_int,
+ fTrailing: BOOL,
+ pX: *mut c_int,
+ ) -> HRESULT;
+ pub fn ScriptStringXtoCP(
+ ssa: SCRIPT_STRING_ANALYSIS,
+ iX: c_int,
+ piCh: *mut c_int,
+ piTrailing: *mut c_int,
+ ) -> HRESULT;
+ pub fn ScriptStringGetLogicalWidths(
+ ssa: SCRIPT_STRING_ANALYSIS,
+ dpiDx: *mut c_int,
+ ) -> HRESULT;
+ pub fn ScriptStringValidate(
+ ssa: SCRIPT_STRING_ANALYSIS,
+ ) -> HRESULT;
+ pub fn ScriptStringOut(
+ ssa: SCRIPT_STRING_ANALYSIS,
+ iX: c_int,
+ iY: c_int,
+ uOptions: UINT,
+ prc: *const RECT,
+ iMinSel: c_int,
+ iMaxSel: c_int,
+ fDisabled: BOOL,
+ ) -> HRESULT;
+}
+pub const SIC_COMPLEX: DWORD = 1;
+pub const SIC_ASCIIDIGIT: DWORD = 2;
+pub const SIC_NEUTRAL: DWORD = 4;
+extern "system" {
+ pub fn ScriptIsComplex(
+ pwcInChars: *const WCHAR,
+ cInChars: c_int,
+ dwFlags: DWORD,
+ ) -> HRESULT;
+}
+STRUCT!{struct SCRIPT_DIGITSUBSTITUTE {
+ bit_fields1: DWORD,
+ bit_fields2: DWORD,
+ dwReserved: DWORD,
+}}
+BITFIELD!{SCRIPT_DIGITSUBSTITUTE bit_fields1: DWORD [
+ NationalDigitLanguage set_NationalDigitLanguage[0..16],
+ TraditionalDigitLanguage set_TraditionalDigitLanguage[16..32],
+]}
+BITFIELD!{SCRIPT_DIGITSUBSTITUTE bit_fields2: DWORD [
+ DigitSubstitute set_DigitSubstitute[0..8],
+]}
+extern "system" {
+ pub fn ScriptRecordDigitSubstitution(
+ Locale: LCID,
+ psds: *mut SCRIPT_DIGITSUBSTITUTE,
+ ) -> HRESULT;
+}
+pub const SCRIPT_DIGITSUBSTITUTE_CONTEXT: BYTE = 0;
+pub const SCRIPT_DIGITSUBSTITUTE_NONE: BYTE = 1;
+pub const SCRIPT_DIGITSUBSTITUTE_NATIONAL: BYTE = 2;
+pub const SCRIPT_DIGITSUBSTITUTE_TRADITIONAL: BYTE = 3;
+extern "system" {
+ pub fn ScriptApplyDigitSubstitution(
+ psds: *const SCRIPT_DIGITSUBSTITUTE,
+ psc: *mut SCRIPT_CONTROL,
+ pss: *mut SCRIPT_STATE,
+ ) -> HRESULT;
+}
+pub type OPENTYPE_TAG = ULONG;
+pub const SCRIPT_TAG_UNKNOWN: OPENTYPE_TAG = 0x00000000;
+STRUCT!{struct OPENTYPE_FEATURE_RECORD {
+ tagFeature: OPENTYPE_TAG,
+ lParameter: LONG,
+}}
+STRUCT!{struct TEXTRANGE_PROPERTIES {
+ potfRecords: *mut OPENTYPE_FEATURE_RECORD,
+ cotfRecords: c_int,
+}}
+STRUCT!{struct SCRIPT_CHARPROP {
+ bit_fields: WORD,
+}}
+BITFIELD!{SCRIPT_CHARPROP bit_fields: WORD [
+ fCanGlyphAlone set_fCanGlyphAlone[0..1],
+ reserved set_reserved[1..16],
+]}
+STRUCT!{struct SCRIPT_GLYPHPROP {
+ sva: SCRIPT_VISATTR,
+ reserved: WORD,
+}}
+extern "system" {
+ pub fn ScriptShapeOpenType(
+ hdc: HDC,
+ psc: *mut SCRIPT_CACHE,
+ psa: *mut SCRIPT_ANALYSIS,
+ tagScript: OPENTYPE_TAG,
+ tagLangSys: OPENTYPE_TAG,
+ rcRangeChars: *mut c_int,
+ rpRangeProperties: *mut *mut TEXTRANGE_PROPERTIES,
+ cRanges: c_int,
+ pwcChars: *const WCHAR,
+ cChars: c_int,
+ cMaxGlyphs: c_int,
+ pwLogClust: *mut WORD,
+ pCharProps: *mut SCRIPT_CHARPROP,
+ pwOutGlyphs: *mut WORD,
+ pOutGlyphProps: *mut SCRIPT_GLYPHPROP,
+ pcGlyphs: *mut c_int,
+ ) -> HRESULT;
+ pub fn ScriptPlaceOpenType(
+ hdc: HDC,
+ psc: *mut SCRIPT_CACHE,
+ psa: *mut SCRIPT_ANALYSIS,
+ tagScript: OPENTYPE_TAG,
+ tagLangSys: OPENTYPE_TAG,
+ rcRangeChars: *mut c_int,
+ rpRangeProperties: *mut *mut TEXTRANGE_PROPERTIES,
+ cRanges: c_int,
+ pwcChars: *const WCHAR,
+ pwLogClust: *mut WORD,
+ pCharProps: *mut SCRIPT_CHARPROP,
+ cChars: c_int,
+ pwGlyphs: *const WORD,
+ pGlyphProps: *const SCRIPT_GLYPHPROP,
+ cGlyphs: c_int,
+ piAdvance: *mut c_int,
+ pGoffset: *mut GOFFSET,
+ pABC: *mut ABC,
+ ) -> HRESULT;
+ pub fn ScriptItemizeOpenType(
+ pwcInChars: *const WCHAR,
+ cInChars: c_int,
+ cMaxItems: c_int,
+ psControl: *const SCRIPT_CONTROL,
+ psState: *const SCRIPT_STATE,
+ pItems: *mut SCRIPT_ITEM,
+ pScriptTags: *mut OPENTYPE_TAG,
+ pcItems: *mut c_int,
+ ) -> HRESULT;
+ pub fn ScriptGetFontScriptTags(
+ hdc: HDC,
+ psc: *mut SCRIPT_CACHE,
+ psa: *mut SCRIPT_ANALYSIS,
+ cMaxTags: c_int,
+ pScriptTags: *mut OPENTYPE_TAG,
+ pcTags: *mut c_int,
+ ) -> HRESULT;
+ pub fn ScriptGetFontLanguageTags(
+ hdc: HDC,
+ psc: *mut SCRIPT_CACHE,
+ psa: *mut SCRIPT_ANALYSIS,
+ tagScript: OPENTYPE_TAG,
+ cMaxTags: c_int,
+ pLangsysTags: *mut OPENTYPE_TAG,
+ pcTags: *mut c_int,
+ ) -> HRESULT;
+ pub fn ScriptGetFontFeatureTags(
+ hdc: HDC,
+ psc: *mut SCRIPT_CACHE,
+ psa: *mut SCRIPT_ANALYSIS,
+ tagScript: OPENTYPE_TAG,
+ tagLangSys: OPENTYPE_TAG,
+ cMaxTags: c_int,
+ pFeatureTags: *mut OPENTYPE_TAG,
+ pcTags: *mut c_int,
+ ) -> HRESULT;
+ pub fn ScriptGetFontAlternateGlyphs(
+ hdc: HDC,
+ psc: *mut SCRIPT_CACHE,
+ psa: *mut SCRIPT_ANALYSIS,
+ tagScript: OPENTYPE_TAG,
+ tagLangSys: OPENTYPE_TAG,
+ tagFeature: OPENTYPE_TAG,
+ wGlyphId: WORD,
+ cMaxAlternates: c_int,
+ pAlternateGlyphs: *mut WORD,
+ pcAlternates: *mut c_int,
+ ) -> HRESULT;
+ pub fn ScriptSubstituteSingleGlyph(
+ hdc: HDC,
+ psc: *mut SCRIPT_CACHE,
+ psa: *mut SCRIPT_ANALYSIS,
+ tagScript: OPENTYPE_TAG,
+ tagLangSys: OPENTYPE_TAG,
+ tagFeature: OPENTYPE_TAG,
+ lParameter: LONG,
+ wGlyphId: WORD,
+ pwOutGlyphId: *mut WORD,
+ ) -> HRESULT;
+ pub fn ScriptPositionSingleGlyph(
+ hdc: HDC,
+ psc: *mut SCRIPT_CACHE,
+ psa: *mut SCRIPT_ANALYSIS,
+ tagScript: OPENTYPE_TAG,
+ tagLangSys: OPENTYPE_TAG,
+ tagFeature: OPENTYPE_TAG,
+ lParameter: LONG,
+ wGlyphId: WORD,
+ iAdvance: c_int,
+ GOffset: GOFFSET,
+ piOutAdvance: *mut c_int,
+ pOutGoffset: *mut GOFFSET,
+ ) -> HRESULT;
+}
diff --git a/vendor/winapi/src/um/utilapiset.rs b/vendor/winapi/src/um/utilapiset.rs
new file mode 100644
index 000000000..0ef86e359
--- /dev/null
+++ b/vendor/winapi/src/um/utilapiset.rs
@@ -0,0 +1,25 @@
+// 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::minwindef::{BOOL, DWORD};
+use shared::ntdef::PVOID;
+extern "system" {
+ pub fn EncodePointer(
+ Ptr: PVOID,
+ ) -> PVOID;
+ pub fn DecodePointer(
+ Ptr: PVOID,
+ ) -> PVOID;
+ pub fn EncodeSystemPointer(
+ Ptr: PVOID,
+ ) -> PVOID;
+ pub fn DecodeSystemPointer(
+ Ptr: PVOID,
+ ) -> PVOID;
+ pub fn Beep(
+ dwFreq: DWORD,
+ dwDuration: DWORD,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/uxtheme.rs b/vendor/winapi/src/um/uxtheme.rs
new file mode 100644
index 000000000..0e046a356
--- /dev/null
+++ b/vendor/winapi/src/um/uxtheme.rs
@@ -0,0 +1,772 @@
+// 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.
+//! theming API
+use ctypes::{c_float, c_int, c_void};
+use shared::minwindef::{BOOL, BYTE, DWORD, HINSTANCE, HRGN, LPARAM, UINT, ULONG, WORD};
+use shared::windef::{COLORREF, HBITMAP, HBRUSH, HDC, HWND, LPCRECT, LPRECT, POINT, RECT, SIZE};
+use um::commctrl::HIMAGELIST;
+use um::wingdi::{BLENDFUNCTION, LOGFONTW, RGBQUAD, TEXTMETRICW};
+use um::winnt::{HANDLE, HRESULT, LONG, LPCWSTR, LPWSTR, PVOID, VOID};
+pub type HTHEME = HANDLE;
+//pub const MAX_THEMECOLOR: u32 = 64;
+//pub const MAX_THEMESIZE: u32 = 64;
+extern "system" {
+ pub fn BeginPanningFeedback(
+ hwnd: HWND,
+ ) -> BOOL;
+ pub fn UpdatePanningFeedback(
+ hwnd: HWND,
+ lTotalOverpanOffsetX: LONG,
+ lTotalOverpanOffsetY: LONG,
+ fInInertia: BOOL,
+ ) -> BOOL;
+ pub fn EndPanningFeedback(
+ hwnd: HWND,
+ fAnimateBack: BOOL,
+ ) -> BOOL;
+}
+ENUM!{enum TA_PROPERTY {
+ TAP_FLAGS = 0,
+ TAP_TRANSFORMCOUNT = 1,
+ TAP_STAGGERDELAY = 2,
+ TAP_STAGGERDELAYCAP = 3,
+ TAP_STAGGERDELAYFACTOR = 4,
+ TAP_ZORDER = 5,
+}}
+ENUM!{enum TA_PROPERTY_FLAG {
+ TAPF_NONE = 0x0,
+ TAPF_HASSTAGGER = 0x1,
+ TAPF_ISRTLAWARE = 0x2,
+ TAPF_ALLOWCOLLECTION = 0x4,
+ TAPF_HASBACKGROUND = 0x8,
+ TAPF_HASPERSPECTIVE = 0x10,
+}}
+extern "system" {
+ pub fn GetThemeAnimationProperty(
+ hTheme: HTHEME,
+ iStoryboardId: c_int,
+ iTargetId: c_int,
+ eProperty: TA_PROPERTY,
+ pvProperty: *mut VOID,
+ cbSize: DWORD,
+ pcbSizeOut: *mut DWORD,
+ ) -> HRESULT;
+}
+ENUM!{enum TA_TRANSFORM_TYPE {
+ TATT_TRANSLATE_2D = 0,
+ TATT_SCALE_2D = 1,
+ TATT_OPACITY = 2,
+ TATT_CLIP = 3,
+}}
+ENUM!{enum TA_TRANSFORM_FLAG {
+ TATF_NONE = 0x0,
+ TATF_TARGETVALUES_USER = 0x1,
+ TATF_HASINITIALVALUES = 0x2,
+ TATF_HASORIGINVALUES = 0x4,
+}}
+STRUCT!{struct TA_TRANSFORM {
+ eTransformType: TA_TRANSFORM_TYPE,
+ dwTimingFunctionId: DWORD,
+ dwStartTime: DWORD,
+ dwDurationTime: DWORD,
+ eFlags: TA_TRANSFORM_FLAG,
+}}
+pub type PTA_TRANSFORM = *mut TA_TRANSFORM;
+STRUCT!{struct TA_TRANSFORM_2D {
+ header: TA_TRANSFORM,
+ rX: c_float,
+ rY: c_float,
+ rInitialX: c_float,
+ rInitialY: c_float,
+ rOriginX: c_float,
+ rOriginY: c_float,
+}}
+pub type PTA_TRANSFORM_2D = *mut TA_TRANSFORM_2D;
+STRUCT!{struct TA_TRANSFORM_OPACITY {
+ header: TA_TRANSFORM,
+ rOpacity: c_float,
+ rInitialOpacity: c_float,
+}}
+pub type PTA_TRANSFORM_OPACITY = *mut TA_TRANSFORM_OPACITY;
+STRUCT!{struct TA_TRANSFORM_CLIP {
+ header: TA_TRANSFORM,
+ rLeft: c_float,
+ rTop: c_float,
+ rRight: c_float,
+ rBottom: c_float,
+ rInitialLeft: c_float,
+ rInitialTop: c_float,
+ rInitialRight: c_float,
+ rInitialBottom: c_float,
+}}
+pub type PTA_TRANSFORM_CLIP = *mut TA_TRANSFORM_CLIP;
+extern "system" {
+ pub fn GetThemeAnimationTransform(
+ hTheme: HTHEME,
+ iStoryboardId: c_int,
+ iTargetId: c_int,
+ dwTransformIndex: DWORD,
+ pTransform: *mut TA_TRANSFORM,
+ cbSize: DWORD,
+ pcbSizeOut: *mut DWORD,
+ ) -> HRESULT;
+}
+ENUM!{enum TA_TIMINGFUNCTION_TYPE {
+ TTFT_UNDEFINED = 0,
+ TTFT_CUBIC_BEZIER = 1,
+}}
+STRUCT!{struct TA_TIMINGFUNCTION {
+ eTimingFunctionType: TA_TIMINGFUNCTION_TYPE,
+}}
+pub type PTA_TIMINGFUNCTION = *mut TA_TIMINGFUNCTION;
+STRUCT!{struct TA_CUBIC_BEZIER {
+ header: TA_TIMINGFUNCTION,
+ rX0: c_float,
+ rY0: c_float,
+ rX1: c_float,
+ rY1: c_float,
+}}
+pub type PTA_CUBIC_BEZIER = *mut TA_CUBIC_BEZIER;
+extern "system" {
+ pub fn GetThemeTimingFunction(
+ hTheme: HTHEME,
+ iTimingFunctionId: c_int,
+ pTimingFunction: *mut TA_TIMINGFUNCTION,
+ cbSize: DWORD,
+ pcbSizeOut: *mut DWORD,
+ ) -> HRESULT;
+ pub fn OpenThemeData(
+ hwnd: HWND,
+ pszClassList: LPCWSTR,
+ ) -> HTHEME;
+}
+pub const OTD_FORCE_RECT_SIZING: DWORD = 0x00000001;
+pub const OTD_NONCLIENT: DWORD = 0x00000002;
+pub const OTD_VALIDBITS: DWORD = OTD_FORCE_RECT_SIZING | OTD_NONCLIENT;
+extern "system" {
+ pub fn OpenThemeDataForDpi(
+ hwnd: HWND,
+ pszClassList: LPCWSTR,
+ dpi: UINT,
+ ) -> HTHEME;
+ pub fn OpenThemeDataEx(
+ hwnd: HWND,
+ pszClassList: LPCWSTR,
+ dwFlags: DWORD,
+ ) -> HTHEME;
+ pub fn CloseThemeData(
+ hTheme: HTHEME,
+ ) -> HRESULT;
+ pub fn DrawThemeBackground(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pRect: LPCRECT,
+ pClipRect: LPCRECT,
+ ) -> HRESULT;
+}
+pub const DTBG_CLIPRECT: DWORD = 0x00000001;
+pub const DTBG_DRAWSOLID: DWORD = 0x00000002;
+pub const DTBG_OMITBORDER: DWORD = 0x00000004;
+pub const DTBG_OMITCONTENT: DWORD = 0x00000008;
+pub const DTBG_COMPUTINGREGION: DWORD = 0x00000010;
+pub const DTBG_MIRRORDC: DWORD = 0x00000020;
+pub const DTBG_NOMIRROR: DWORD = 0x00000040;
+pub const DTBG_VALIDBITS: DWORD = DTBG_CLIPRECT | DTBG_DRAWSOLID | DTBG_OMITBORDER
+ | DTBG_OMITCONTENT | DTBG_COMPUTINGREGION | DTBG_MIRRORDC | DTBG_NOMIRROR;
+STRUCT!{struct DTBGOPTS {
+ dwSize: DWORD,
+ dwFlags: DWORD,
+ rcClip: RECT,
+}}
+pub type PDTBGOPTS = *mut DTBGOPTS;
+extern "system" {
+ pub fn DrawThemeBackgroundEx(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pRect: LPCRECT,
+ pOptions: *const DTBGOPTS,
+ ) -> HRESULT;
+}
+//pub const DTT_GRAYED: u32 = 0x00000001;
+//pub const DTT_FLAGS2VALIDBITS: u32 = DTT_GRAYED;
+extern "system" {
+ pub fn DrawThemeText(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pszText: LPCWSTR,
+ cchText: c_int,
+ dwTextFlags: DWORD,
+ dwTextFlags2: DWORD,
+ pRect: LPCRECT,
+ ) -> HRESULT;
+ pub fn GetThemeBackgroundContentRect(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pBoundingRect: LPCRECT,
+ pContentRect: LPRECT,
+ ) -> HRESULT;
+ pub fn GetThemeBackgroundExtent(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pContentRect: LPCRECT,
+ pExtentRect: LPRECT,
+ ) -> HRESULT;
+ pub fn GetThemeBackgroundRegion(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pRect: LPCRECT,
+ pRegion: *mut HRGN,
+ ) -> HRESULT;
+}
+ENUM!{enum THEMESIZE {
+ TS_MIN = 0,
+ TS_TRUE = 1,
+ TS_DRAW = 2,
+}}
+extern "system" {
+ pub fn GetThemePartSize(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ prc: LPCRECT,
+ eSize: THEMESIZE,
+ psz: *mut SIZE,
+ ) -> HRESULT;
+ pub fn GetThemeTextExtent(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pszText: LPCWSTR,
+ cchCharCount: c_int,
+ dwTextFlags: DWORD,
+ pBoundingRect: LPCRECT,
+ pExtentRect: LPRECT,
+ ) -> HRESULT;
+ pub fn GetThemeTextMetrics(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ ptm: *mut TEXTMETRICW,
+ ) -> HRESULT;
+}
+pub const HTTB_BACKGROUNDSEG: DWORD = 0x00000000;
+pub const HTTB_FIXEDBORDER: DWORD = 0x00000002;
+pub const HTTB_CAPTION: DWORD = 0x00000004;
+pub const HTTB_RESIZINGBORDER_LEFT: DWORD = 0x00000010;
+pub const HTTB_RESIZINGBORDER_TOP: DWORD = 0x00000020;
+pub const HTTB_RESIZINGBORDER_RIGHT: DWORD = 0x00000040;
+pub const HTTB_RESIZINGBORDER_BOTTOM: DWORD = 0x00000080;
+pub const HTTB_RESIZINGBORDER: DWORD = HTTB_RESIZINGBORDER_LEFT | HTTB_RESIZINGBORDER_TOP
+ | HTTB_RESIZINGBORDER_RIGHT | HTTB_RESIZINGBORDER_BOTTOM;
+pub const HTTB_SIZINGTEMPLATE: DWORD = 0x00000100;
+pub const HTTB_SYSTEMSIZINGMARGINS: DWORD = 0x00000200;
+extern "system" {
+ pub fn HitTestThemeBackground(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ dwOptions: DWORD,
+ pRect: LPCRECT,
+ hrgn: HRGN,
+ ptTest: POINT,
+ pwHitTestCode: *mut WORD,
+ ) -> HRESULT;
+ pub fn DrawThemeEdge(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pDestRect: LPCRECT,
+ uEdge: UINT,
+ uFlags: UINT,
+ pContentRect: LPRECT,
+ ) -> HRESULT;
+ pub fn DrawThemeIcon(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pRect: LPCRECT,
+ himl: HIMAGELIST,
+ iImageIndex: c_int,
+ ) -> HRESULT;
+ pub fn IsThemePartDefined(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ ) -> BOOL;
+ pub fn IsThemeBackgroundPartiallyTransparent(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ ) -> BOOL;
+ pub fn GetThemeColor(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pColor: *mut COLORREF,
+ ) -> HRESULT;
+ pub fn GetThemeMetric(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ piVal: *mut c_int,
+ ) -> HRESULT;
+ pub fn GetThemeString(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pszBuff: LPWSTR,
+ cchMaxBuffChars: c_int,
+ ) -> HRESULT;
+ pub fn GetThemeBool(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pfVal: *mut BOOL,
+ ) -> HRESULT;
+ pub fn GetThemeInt(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ piVal: *mut c_int,
+ ) -> HRESULT;
+ pub fn GetThemeEnumValue(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ piVal: *mut c_int,
+ ) -> HRESULT;
+ pub fn GetThemePosition(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pPoint: *mut POINT,
+ ) -> HRESULT;
+ pub fn GetThemeFont(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pFont: *mut LOGFONTW,
+ ) -> HRESULT;
+ pub fn GetThemeRect(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pRect: LPRECT,
+ ) -> HRESULT;
+}
+STRUCT!{struct MARGINS {
+ cxLeftWidth: c_int,
+ cxRightWidth: c_int,
+ cyTopHeight: c_int,
+ cyBottomHeight: c_int,
+}}
+pub type PMARGINS = *mut MARGINS;
+extern "system" {
+ pub fn GetThemeMargins(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ prc: LPCRECT,
+ pMargins: *mut MARGINS,
+ ) -> HRESULT;
+}
+pub const MAX_INTLIST_COUNT: usize = 402;
+STRUCT!{struct INTLIST {
+ iValueCount: c_int,
+ iValues: [c_int; MAX_INTLIST_COUNT],
+}}
+pub type PINTLIST = *mut INTLIST;
+extern "system" {
+ pub fn GetThemeIntList(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pIntList: *mut INTLIST,
+ ) -> HRESULT;
+}
+ENUM!{enum PROPERTYORIGIN {
+ PO_STATE = 0,
+ PO_PART = 1,
+ PO_CLASS = 2,
+ PO_GLOBAL = 3,
+ PO_NOTFOUND = 4,
+}}
+extern "system" {
+ pub fn GetThemePropertyOrigin(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pOrigin: *mut PROPERTYORIGIN,
+ ) -> HRESULT;
+ pub fn SetWindowTheme(
+ hwnd: HWND,
+ pszSubAppName: LPCWSTR,
+ pszSubIdList: LPCWSTR,
+ ) -> HRESULT;
+ pub fn GetThemeFilename(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pszThemeFileName: LPWSTR,
+ cchMaxBuffChars: c_int,
+ ) -> HRESULT;
+ pub fn GetThemeSysColor(
+ hTheme: HTHEME,
+ iColorId: c_int,
+ ) -> COLORREF;
+ pub fn GetThemeSysColorBrush(
+ hTheme: HTHEME,
+ iColorId: c_int,
+ ) -> HBRUSH;
+ pub fn GetThemeSysBool(
+ hTheme: HTHEME,
+ iBoolId: c_int,
+ ) -> BOOL;
+ pub fn GetThemeSysSize(
+ hTheme: HTHEME,
+ iSizeId: c_int,
+ ) -> c_int;
+ pub fn GetThemeSysFont(
+ hTheme: HTHEME,
+ iFontId: c_int,
+ plf: *mut LOGFONTW,
+ ) -> HRESULT;
+ pub fn GetThemeSysString(
+ hTheme: HTHEME,
+ iStringId: c_int,
+ pszStringBuff: LPWSTR,
+ cchMaxStringChars: c_int,
+ ) -> HRESULT;
+ pub fn GetThemeSysInt(
+ hTheme: HTHEME,
+ iIntId: c_int,
+ piValue: *mut c_int,
+ ) -> HRESULT;
+ pub fn IsThemeActive() -> BOOL;
+ pub fn IsAppThemed() -> BOOL;
+ pub fn GetWindowTheme(
+ hwnd: HWND,
+ ) -> HTHEME;
+}
+pub const ETDT_DISABLE: DWORD = 0x00000001;
+pub const ETDT_ENABLE: DWORD = 0x00000002;
+pub const ETDT_USETABTEXTURE: DWORD = 0x00000004;
+pub const ETDT_ENABLETAB: DWORD = ETDT_ENABLE | ETDT_USETABTEXTURE;
+pub const ETDT_USEAEROWIZARDTABTEXTURE: DWORD = 0x00000008;
+pub const ETDT_ENABLEAEROWIZARDTAB: DWORD = ETDT_ENABLE | ETDT_USEAEROWIZARDTABTEXTURE;
+pub const ETDT_VALIDBITS: DWORD = ETDT_DISABLE | ETDT_ENABLE | ETDT_USETABTEXTURE
+ | ETDT_USEAEROWIZARDTABTEXTURE;
+extern "system" {
+ pub fn EnableThemeDialogTexture(
+ hwnd: HWND,
+ dwFlags: DWORD,
+ ) -> HRESULT;
+ pub fn IsThemeDialogTextureEnabled(
+ hwnd: HWND,
+ ) -> BOOL;
+}
+pub const STAP_ALLOW_NONCLIENT: DWORD = 1 << 0;
+pub const STAP_ALLOW_CONTROLS: DWORD = 1 << 1;
+pub const STAP_ALLOW_WEBCONTENT: DWORD = 1 << 2;
+pub const STAP_VALIDBITS: DWORD = STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS
+ | STAP_ALLOW_WEBCONTENT;
+extern "system" {
+ pub fn GetThemeAppProperties() -> DWORD;
+ pub fn SetThemeAppProperties(
+ dwFlags: DWORD,
+ );
+ pub fn GetCurrentThemeName(
+ pszThemeFileName: LPWSTR,
+ cchMaxNameChars: c_int,
+ pszColorBuff: LPWSTR,
+ cchMaxColorChars: c_int,
+ pszSizeBuff: LPWSTR,
+ cchMaxSizeChars: c_int,
+ ) -> HRESULT;
+}
+pub const SZ_THDOCPROP_DISPLAYNAME: &'static str = "DisplayName";
+pub const SZ_THDOCPROP_CANONICALNAME: &'static str = "ThemeName";
+pub const SZ_THDOCPROP_TOOLTIP: &'static str = "ToolTip";
+pub const SZ_THDOCPROP_AUTHOR: &'static str = "author";
+extern "system" {
+ pub fn GetThemeDocumentationProperty(
+ pszThemeName: LPCWSTR,
+ pszPropertyName: LPCWSTR,
+ pszValueBuff: LPWSTR,
+ cchMaxValChars: c_int,
+ ) -> HRESULT;
+ pub fn DrawThemeParentBackground(
+ hwnd: HWND,
+ hdc: HDC,
+ prc: *const RECT,
+ ) -> HRESULT;
+ pub fn EnableTheming(
+ fEnable: BOOL,
+ ) -> HRESULT;
+}
+pub const GBF_DIRECT: ULONG = 0x00000001;
+pub const GBF_COPY: ULONG = 0x00000002;
+pub const GBF_VALIDBITS: ULONG = GBF_DIRECT | GBF_COPY;
+pub const DTPB_WINDOWDC: DWORD = 0x00000001;
+pub const DTPB_USECTLCOLORSTATIC: DWORD = 0x00000002;
+pub const DTPB_USEERASEBKGND: DWORD = 0x00000004;
+extern "system" {
+ pub fn DrawThemeParentBackgroundEx(
+ hwnd: HWND,
+ hdc: HDC,
+ dwFlags: DWORD,
+ prc: *const RECT,
+ ) -> HRESULT;
+}
+ENUM!{enum WINDOWTHEMEATTRIBUTETYPE {
+ WTA_NONCLIENT = 1,
+}}
+STRUCT!{struct WTA_OPTIONS {
+ dwFlags: DWORD,
+ dwMask: DWORD,
+}}
+pub type PWTA_OPTIONS = *mut WTA_OPTIONS;
+pub const WTNCA_NODRAWCAPTION: DWORD = 0x00000001;
+pub const WTNCA_NODRAWICON: DWORD = 0x00000002;
+pub const WTNCA_NOSYSMENU: DWORD = 0x00000004;
+pub const WTNCA_NOMIRRORHELP: DWORD = 0x00000008;
+pub const WTNCA_VALIDBITS: DWORD = WTNCA_NODRAWCAPTION | WTNCA_NODRAWICON | WTNCA_NOSYSMENU
+ | WTNCA_NOMIRRORHELP;
+extern "system" {
+ pub fn SetWindowThemeAttribute(
+ hwnd: HWND,
+ eAttribute: WINDOWTHEMEATTRIBUTETYPE,
+ pvAttribute: PVOID,
+ cbAttribute: DWORD,
+ ) -> HRESULT;
+}
+#[inline]
+pub unsafe fn SetWindowThemeNonClientAttributes(
+ hwnd: HWND,
+ dwMask: DWORD,
+ dwAttributes: DWORD,
+) -> HRESULT {
+ use core::mem::{size_of, zeroed};
+ let mut wta: WTA_OPTIONS = zeroed();
+ wta.dwFlags = dwAttributes;
+ wta.dwMask = dwMask;
+ SetWindowThemeAttribute(
+ hwnd,
+ WTA_NONCLIENT,
+ &mut wta as *mut WTA_OPTIONS as *mut c_void,
+ size_of::<WTA_OPTIONS>() as u32,
+ )
+}
+FN!{stdcall DTT_CALLBACK_PROC(
+ hdc: HDC,
+ pszText: LPWSTR,
+ cchText: c_int,
+ prc: LPRECT,
+ dwFlags: UINT,
+ lParam: LPARAM,
+) -> c_int}
+pub const DTT_TEXTCOLOR: DWORD = 1 << 0;
+pub const DTT_BORDERCOLOR: DWORD = 1 << 1;
+pub const DTT_SHADOWCOLOR: DWORD = 1 << 2;
+pub const DTT_SHADOWTYPE: DWORD = 1 << 3;
+pub const DTT_SHADOWOFFSET: DWORD = 1 << 4;
+pub const DTT_BORDERSIZE: DWORD = 1 << 5;
+pub const DTT_FONTPROP: DWORD = 1 << 6;
+pub const DTT_COLORPROP: DWORD = 1 << 7;
+pub const DTT_STATEID: DWORD = 1 << 8;
+pub const DTT_CALCRECT: DWORD = 1 << 9;
+pub const DTT_APPLYOVERLAY: DWORD = 1 << 10;
+pub const DTT_GLOWSIZE: DWORD = 1 << 11;
+pub const DTT_CALLBACK: DWORD = 1 << 12;
+pub const DTT_COMPOSITED: DWORD = 1 << 13;
+pub const DTT_VALIDBITS: DWORD = DTT_TEXTCOLOR | DTT_BORDERCOLOR | DTT_SHADOWCOLOR
+ | DTT_SHADOWTYPE | DTT_SHADOWOFFSET | DTT_BORDERSIZE | DTT_FONTPROP | DTT_COLORPROP
+ | DTT_STATEID | DTT_CALCRECT | DTT_APPLYOVERLAY | DTT_GLOWSIZE | DTT_COMPOSITED;
+STRUCT!{struct DTTOPTS {
+ dwSize: DWORD,
+ dwFlags: DWORD,
+ crText: COLORREF,
+ crBorder: COLORREF,
+ crShadow: COLORREF,
+ iTextShadowType: c_int,
+ ptShadowOffset: POINT,
+ iBorderSize: c_int,
+ iFontPropId: c_int,
+ iColorPropId: c_int,
+ iStateId: c_int,
+ fApplyOverlay: BOOL,
+ iGlowSize: c_int,
+ pfnDrawTextCallback: DTT_CALLBACK_PROC,
+ lParam: LPARAM,
+}}
+pub type PDTTOPTS = *mut DTTOPTS;
+extern "system" {
+ pub fn DrawThemeTextEx(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pszText: LPCWSTR,
+ cchText: c_int,
+ dwTextFlags: DWORD,
+ pRect: LPRECT,
+ pOptions: *const DTTOPTS,
+ ) -> HRESULT;
+ pub fn GetThemeBitmap(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ dwFlags: ULONG,
+ phBitmap: *mut HBITMAP,
+ ) -> HRESULT;
+ pub fn GetThemeStream(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ ppvStream: *mut *mut VOID,
+ pcbStream: *mut DWORD,
+ hInst: HINSTANCE,
+ ) -> HRESULT;
+ pub fn BufferedPaintInit() -> HRESULT;
+ pub fn BufferedPaintUnInit() -> HRESULT;
+}
+pub type HPAINTBUFFER = HANDLE;
+ENUM!{enum BP_BUFFERFORMAT {
+ BPBF_COMPATIBLEBITMAP = 0,
+ BPBF_DIB = 1,
+ BPBF_TOPDOWNDIB = 2,
+ BPBF_TOPDOWNMONODIB = 3,
+}}
+pub const BPBF_COMPOSITED: BP_BUFFERFORMAT = BPBF_TOPDOWNDIB;
+ENUM!{enum BP_ANIMATIONSTYLE {
+ BPAS_NONE = 0,
+ BPAS_LINEAR = 1,
+ BPAS_CUBIC = 2,
+ BPAS_SINE = 3,
+}}
+STRUCT!{struct BP_ANIMATIONPARAMS {
+ cbSize: DWORD,
+ dwFlags: DWORD,
+ style: BP_ANIMATIONSTYLE,
+ dwDuration: DWORD,
+}}
+pub type PBP_ANIMATIONPARAMS = *mut BP_ANIMATIONPARAMS;
+pub const BPPF_ERASE: DWORD = 0x0001;
+pub const BPPF_NOCLIP: DWORD = 0x0002;
+pub const BPPF_NONCLIENT: DWORD = 0x0004;
+STRUCT!{struct BP_PAINTPARAMS {
+ cbSize: DWORD,
+ dwFlags: DWORD,
+ prcExclude: *const RECT,
+ pBlendFunction: *const BLENDFUNCTION,
+}}
+pub type PBP_PAINTPARAMS = *mut BP_PAINTPARAMS;
+extern "system" {
+ pub fn BeginBufferedPaint(
+ hdcTarget: HDC,
+ prcTarget: *const RECT,
+ dwFormat: BP_BUFFERFORMAT,
+ pPaintParams: *mut BP_PAINTPARAMS,
+ phdc: *mut HDC,
+ ) -> HPAINTBUFFER;
+ pub fn EndBufferedPaint(
+ hBufferedPaint: HPAINTBUFFER,
+ fUpdateTarget: BOOL,
+ ) -> HRESULT;
+ pub fn GetBufferedPaintTargetRect(
+ hBufferedPaint: HPAINTBUFFER,
+ prc: *mut RECT,
+ ) -> HRESULT;
+ pub fn GetBufferedPaintTargetDC(
+ hBufferedPaint: HPAINTBUFFER,
+ ) -> HDC;
+ pub fn GetBufferedPaintDC(
+ hBufferedPaint: HPAINTBUFFER,
+ ) -> HDC;
+ pub fn GetBufferedPaintBits(
+ hBufferedPaint: HPAINTBUFFER,
+ ppbBuffer: *mut *mut RGBQUAD,
+ pcxRow: *mut c_int,
+ ) -> HRESULT;
+ pub fn BufferedPaintClear(
+ hBufferedPaint: HPAINTBUFFER,
+ prc: *const RECT,
+ ) -> HRESULT;
+ pub fn BufferedPaintSetAlpha(
+ hBufferedPaint: HPAINTBUFFER,
+ prc: *const RECT,
+ alpha: BYTE,
+ ) -> HRESULT;
+ pub fn BufferedPaintStopAllAnimations(
+ hwnd: HWND,
+ ) -> HRESULT;
+}
+pub type HANIMATIONBUFFER = HANDLE;
+extern "system" {
+ pub fn BeginBufferedAnimation(
+ hwnd: HWND,
+ hdcTarget: HDC,
+ prcTarget: *const RECT,
+ dwFormat: BP_BUFFERFORMAT,
+ pPaintParams: *mut BP_PAINTPARAMS,
+ pAnimationParams: *mut BP_ANIMATIONPARAMS,
+ phdcFrom: *mut HDC,
+ phdcTo: *mut HDC,
+ ) -> HANIMATIONBUFFER;
+ pub fn EndBufferedAnimation(
+ hbpAnimation: HANIMATIONBUFFER,
+ fUpdateTarget: BOOL,
+ ) -> HRESULT;
+ pub fn BufferedPaintRenderAnimation(
+ hwnd: HWND,
+ hdcTarget: HDC,
+ ) -> BOOL;
+ pub fn IsCompositionActive() -> BOOL;
+ pub fn GetThemeTransitionDuration(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateIdFrom: c_int,
+ iStateIdTo: c_int,
+ iPropId: c_int,
+ pdwDuration: *mut DWORD,
+ ) -> HRESULT;
+}
diff --git a/vendor/winapi/src/um/vsbackup.rs b/vendor/winapi/src/um/vsbackup.rs
new file mode 100644
index 000000000..0a7f2602c
--- /dev/null
+++ b/vendor/winapi/src/um/vsbackup.rs
@@ -0,0 +1,520 @@
+// 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.
+//! Declaration of backup interfaces.
+use ctypes::c_void;
+use shared::guiddef::IID;
+use shared::minwindef::{BOOL, BYTE, DWORD, UINT};
+use shared::wtypes::BSTR;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::vss::{
+ IVssAsync, IVssEnumObject, VSS_BACKUP_TYPE, VSS_ID, VSS_OBJECT_TYPE, VSS_PWSZ,
+ VSS_RESTORE_TYPE, VSS_ROLLFORWARD_TYPE, VSS_SNAPSHOT_PROP, VSS_WRITER_STATE
+};
+use um::vswriter::{
+ IVssWMDependency, IVssWMFiledesc, IVssWriterComponentsVtbl, VSS_COMPONENT_TYPE,
+ VSS_FILE_RESTORE_STATUS, VSS_RESTOREMETHOD_ENUM, VSS_SOURCE_TYPE, VSS_USAGE_TYPE,
+ VSS_WRITERRESTORE_ENUM
+};
+use um::winnt::{HRESULT, LONG, LPCWSTR};
+DEFINE_GUID!{IID_IVssExamineWriterMetadata,
+ 0x902fcf7f, 0xb7fd, 0x42f8, 0x81, 0xf1, 0xb2, 0xe4, 0x00, 0xb1, 0xe5, 0xbd}
+DEFINE_GUID!{IID_IVssExamineWriterMetadataEx,
+ 0x0c0e5ec0, 0xca44, 0x472b, 0xb7, 0x02, 0xe6, 0x52, 0xdb, 0x1c, 0x04, 0x51}
+DEFINE_GUID!{IID_IVssBackupComponents,
+ 0x665c1d5f, 0xc218, 0x414d, 0xa0, 0x5d, 0x7f, 0xef, 0x5f, 0x9d, 0x5c, 0x86}
+DEFINE_GUID!{IID_IVssBackupComponentsEx,
+ 0x963f03ad, 0x9e4c, 0x4a34, 0xac, 0x15, 0xe4, 0xb6, 0x17, 0x4e, 0x50, 0x36}
+STRUCT!{struct VSS_COMPONENTINFO {
+ type_: VSS_COMPONENT_TYPE, // type is a keyword in rust
+ bstrLogicalPath: BSTR,
+ bstrComponentName: BSTR,
+ bstrCaption: BSTR,
+ pbIcon: *mut BYTE,
+ cbIcon: UINT,
+ bRestoreMetadata: bool,
+ bNotifyOnBackupComplete: bool,
+ bSelectable: bool,
+ bSelectableForRestore: bool,
+ dwComponentFlags: DWORD,
+ cFileCount: UINT,
+ cDatabases: UINT,
+ cLogFiles: UINT,
+ cDependencies: UINT,
+}}
+pub type PVSSCOMPONENTINFO = *const VSS_COMPONENTINFO;
+RIDL!{#[uuid(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)]
+interface IVssWMComponent(IVssWMComponentVtbl): IUnknown(IUnknownVtbl) {
+ fn GetComponentInfo(
+ ppInfo: *mut PVSSCOMPONENTINFO,
+ ) -> HRESULT,
+ fn FreeComponentInfo(
+ pInfo: PVSSCOMPONENTINFO,
+ ) -> HRESULT,
+ fn GetFile(
+ iFile: UINT,
+ ppFiledesc: *mut *mut IVssWMFiledesc,
+ ) -> HRESULT,
+ fn GetDatabaseFile(
+ iDBFile: UINT,
+ ppFiledesc: *mut *mut IVssWMFiledesc,
+ ) -> HRESULT,
+ fn GetDatabaseLogFile(
+ iDbLogFile: UINT,
+ ppFiledesc: *mut *mut IVssWMFiledesc,
+ ) -> HRESULT,
+ fn GetDependency(
+ iDependency: UINT,
+ ppDependency: *mut *mut IVssWMDependency,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x902fcf7f, 0xb7fd, 0x42f8, 0x81, 0xf1, 0xb2, 0xe4, 0x00, 0xb1, 0xe5, 0xbd)]
+interface IVssExamineWriterMetadata(IVssExamineWriterMetadataVtbl): IUnknown(IUnknownVtbl) {
+ fn GetIdentity(
+ pidInstance: *mut VSS_ID,
+ pidWriter: *mut VSS_ID,
+ pbstrWriterName: *mut BSTR,
+ pUsage: *mut VSS_USAGE_TYPE,
+ pSource: *mut VSS_SOURCE_TYPE,
+ ) -> HRESULT,
+ fn GetFileCounts(
+ pcIncludeFiles: *mut UINT,
+ pcExcludeFiles: *mut UINT,
+ pcComponents: *mut UINT,
+ ) -> HRESULT,
+ fn GetIncludeFile(
+ iFile: UINT,
+ ppFiledesc: *mut *mut IVssWMFiledesc,
+ ) -> HRESULT,
+ fn GetExcludeFile(
+ iFile: UINT,
+ ppFiledesc: *mut *mut IVssWMFiledesc,
+ ) -> HRESULT,
+ fn GetComponent(
+ iComponent: UINT,
+ ppComponent: *mut *mut IVssWMComponent,
+ ) -> HRESULT,
+ fn GetRestoreMethod(
+ pMethod: *mut VSS_RESTOREMETHOD_ENUM,
+ pbstrService: *mut BSTR,
+ pbstrUserProcedure: *mut BSTR,
+ pwriterRestore: *mut VSS_WRITERRESTORE_ENUM,
+ pbRebootRequired: *mut bool,
+ pcMappings: *mut UINT,
+ ) -> HRESULT,
+ fn GetAlternateLocationMapping(
+ iMapping: UINT,
+ ppFiledesc: *mut *mut IVssWMFiledesc,
+ ) -> HRESULT,
+ fn GetBackupSchema(
+ pdwSchemaMask: *mut DWORD,
+ ) -> HRESULT,
+ fn GetDocument(
+ pDoc: *mut c_void,
+ ) -> HRESULT, //TODO IXMLDOMDocument,
+ fn SaveAsXML(
+ pbstrXML: *mut BSTR,
+ ) -> HRESULT,
+ fn LoadFromXML(
+ pbstrXML: *mut BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x0c0e5ec0, 0xca44, 0x472b, 0xb7, 0x02, 0xe6, 0x52, 0xdb, 0x1c, 0x04, 0x51)]
+interface IVssExamineWriterMetadataEx(IVssExamineWriterMetadataExVtbl):
+ IVssExamineWriterMetadata(IVssExamineWriterMetadataVtbl) {
+ fn GetIdentityEx(
+ pidInstance: *mut VSS_ID,
+ pidWriter: *mut VSS_ID,
+ pbstrWriterName: *mut BSTR,
+ pbstrInstanceName: *mut BSTR,
+ pUsage: *mut VSS_USAGE_TYPE,
+ pSource: *mut VSS_SOURCE_TYPE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xce115780, 0xa611, 0x431b, 0xb5, 0x7f, 0xc3, 0x83, 0x03, 0xab, 0x6a, 0xee)]
+interface IVssExamineWriterMetadataEx2(IVssExamineWriterMetadataEx2Vtbl):
+ IVssExamineWriterMetadataEx(IVssExamineWriterMetadataExVtbl) {
+ fn GetVersion(
+ pdwMajorVersion: *mut DWORD,
+ pdwMinorVersion: *mut DWORD,
+ ) -> HRESULT,
+ fn GetExcludeFromSnapshotCount(
+ pcExcludedFromSnapshot: *mut UINT,
+ ) -> HRESULT,
+ fn GetExcludeFromSnapshotFile(
+ iFile: UINT,
+ ppFiledesc: *mut *mut IVssWMFiledesc,
+ ) -> HRESULT,
+}}
+#[repr(C)]
+pub struct IVssWriterComponentsExt {
+ pub lpVtbl: *const IVssWriterComponentsExtVtbl,
+}
+#[repr(C)]
+pub struct IVssWriterComponentsExtVtbl {
+ pub parent1: IVssWriterComponentsVtbl,
+ pub parent2: IUnknownVtbl,
+}
+RIDL!{#[uuid(0x665c1d5f, 0xc218, 0x414d, 0xa0, 0x5d, 0x7f, 0xef, 0x5f, 0x9d, 0x5c, 0x86)]
+interface IVssBackupComponents(IVssBackupComponentsVtbl): IUnknown(IUnknownVtbl) {
+ fn GetWriterComponentsCount(
+ pcComponents: *mut UINT,
+ ) -> HRESULT,
+ fn GetWriterComponents(
+ iWriter: UINT,
+ ppWriter: *mut *mut IVssWriterComponentsExt,
+ ) -> HRESULT,
+ fn InitializeForBackup(
+ bstrXML: BSTR,
+ ) -> HRESULT,
+ fn SetBackupState(
+ bSelectComponents: bool,
+ bBackupBootableSystemState: bool,
+ backupType: VSS_BACKUP_TYPE,
+ bPartialFileSupport: bool,
+ ) -> HRESULT,
+ fn InitializeForRestore(
+ bstrXML: BSTR,
+ ) -> HRESULT,
+ fn SetRestoreState(
+ restoreType: VSS_RESTORE_TYPE,
+ ) -> HRESULT,
+ fn GatherWriterMetadata(
+ pAsync: *mut *mut IVssAsync,
+ ) -> HRESULT,
+ fn GetWriterMetadataCount(
+ pcWriters: *mut UINT,
+ ) -> HRESULT,
+ fn GetWriterMetadata(
+ iWriter: UINT,
+ pidInstance: *mut VSS_ID,
+ ppMetadata: *mut *mut IVssExamineWriterMetadata,
+ ) -> HRESULT,
+ fn FreeWriterMetadata() -> HRESULT,
+ fn AddComponent(
+ instanceId: VSS_ID,
+ writerId: VSS_ID,
+ ct: VSS_COMPONENT_TYPE,
+ wszLogicalPath: LPCWSTR,
+ wszComponentName: LPCWSTR,
+ ) -> HRESULT,
+ fn PrepareForBackup(
+ ppAsync: *mut *mut IVssAsync,
+ ) -> HRESULT,
+ fn AbortBackup() -> HRESULT,
+ fn GatherWriterStatus(
+ ppAsync: *mut *mut IVssAsync,
+ ) -> HRESULT,
+ fn GetWriterStatusCount(
+ pcWriters: *mut UINT,
+ ) -> HRESULT,
+ fn FreeWriterStatus() -> HRESULT,
+ fn GetWriterStatus(
+ iWriter: UINT,
+ pidInstance: *mut VSS_ID,
+ pidWriter: *mut VSS_ID,
+ pbstrWriter: *mut BSTR,
+ pnStatus: *mut VSS_WRITER_STATE,
+ phResultFailure: *mut HRESULT,
+ ) -> HRESULT,
+ fn SetBackupSucceeded(
+ instanceId: VSS_ID,
+ writerId: VSS_ID,
+ ct: VSS_COMPONENT_TYPE,
+ wszLogicalPath: LPCWSTR,
+ wszComponentName: LPCWSTR,
+ bSucceded: bool,
+ ) -> HRESULT,
+ fn SetBackupOptions(
+ writerId: VSS_ID,
+ ct: VSS_COMPONENT_TYPE,
+ wszLogicalPath: LPCWSTR,
+ wszComponentName: LPCWSTR,
+ wszBackupOptions: LPCWSTR,
+ ) -> HRESULT,
+ fn SetSelectedForRestore(
+ writerId: VSS_ID,
+ ct: VSS_COMPONENT_TYPE,
+ wszLogicalPath: LPCWSTR,
+ wszComponentName: LPCWSTR,
+ bSelectedForRestore: bool,
+ ) -> HRESULT,
+ fn SetRestoreOptions(
+ writerId: VSS_ID,
+ ct: VSS_COMPONENT_TYPE,
+ wszLogicalPath: LPCWSTR,
+ wszComponentName: LPCWSTR,
+ wszRestoreOptions: LPCWSTR,
+ ) -> HRESULT,
+ fn SetAdditionalRestores(
+ writerId: VSS_ID,
+ ct: VSS_COMPONENT_TYPE,
+ wszLogicalPath: LPCWSTR,
+ wszComponentName: LPCWSTR,
+ bAdditionalRestores: bool,
+ ) -> HRESULT,
+ fn SetPreviousBackupStamp(
+ writerId: VSS_ID,
+ ct: VSS_COMPONENT_TYPE,
+ wszLogicalPath: LPCWSTR,
+ wszComponentName: LPCWSTR,
+ wszPreviousBackupStamp: LPCWSTR,
+ ) -> HRESULT,
+ fn SaveAsXML(
+ pbstrXML: *mut BSTR,
+ ) -> HRESULT,
+ fn BackupComplete(
+ ppAsync: *mut *mut IVssAsync,
+ ) -> HRESULT,
+ fn AddAlternativeLocationMapping(
+ writerId: VSS_ID,
+ ct: VSS_COMPONENT_TYPE,
+ wszLogicalPath: LPCWSTR,
+ wszComponentName: LPCWSTR,
+ wszPath: LPCWSTR,
+ wszFilespec: LPCWSTR,
+ bRecursive: bool,
+ wszDestination: LPCWSTR,
+ ) -> HRESULT,
+ fn AddRestoreSubcomponent(
+ writerId: VSS_ID,
+ ct: VSS_COMPONENT_TYPE,
+ wszLogicalPath: LPCWSTR,
+ wszComponentName: LPCWSTR,
+ wszSubComponentLogicalPath: LPCWSTR,
+ wszSubComponentName: LPCWSTR,
+ bRepair: bool,
+ ) -> HRESULT,
+ fn SetFileRestoreStatus(
+ writerId: VSS_ID,
+ ct: VSS_COMPONENT_TYPE,
+ wszLogicalPath: LPCWSTR,
+ wszComponentName: LPCWSTR,
+ status: VSS_FILE_RESTORE_STATUS,
+ ) -> HRESULT,
+ fn AddNewTarget(
+ writerId: VSS_ID,
+ ct: VSS_COMPONENT_TYPE,
+ wszLogicalPath: LPCWSTR,
+ wszComponentName: LPCWSTR,
+ wszPath: LPCWSTR,
+ wszFileName: LPCWSTR,
+ bRecursive: bool,
+ wszAlternatePath: LPCWSTR,
+ ) -> HRESULT,
+ fn SetRangesFilePath(
+ writerId: VSS_ID,
+ ct: VSS_COMPONENT_TYPE,
+ wszLogicalPath: LPCWSTR,
+ wszComponentName: LPCWSTR,
+ iPartialFile: UINT,
+ wszRangesFile: LPCWSTR,
+ ) -> HRESULT,
+ fn PreRestore(
+ ppAsync: *mut *mut IVssAsync,
+ ) -> HRESULT,
+ fn PostRestore(
+ ppAsync: *mut *mut IVssAsync,
+ ) -> HRESULT,
+ fn SetContext(
+ lContext: LONG,
+ ) -> HRESULT,
+ fn StartSnapshotSet(
+ pSnapshotSetId: *mut VSS_ID,
+ ) -> HRESULT,
+ fn AddToSnapshotSet(
+ pwszVolumeName: VSS_PWSZ,
+ ProviderId: VSS_ID,
+ pidSnapshot: *mut VSS_ID,
+ ) -> HRESULT,
+ fn DoSnapshotSet(
+ ppAsync: *mut *mut IVssAsync,
+ ) -> HRESULT,
+ fn DeleteSnapshots(
+ SourceObjectId: VSS_ID,
+ eSourceObjectType: VSS_OBJECT_TYPE,
+ bForceDelete: BOOL,
+ plDeletedSnapshots: *mut LONG,
+ pNondeletedSnapshotID: *mut VSS_ID,
+ ) -> HRESULT,
+ fn ImportSnapshots(
+ ppAsync: *mut *mut IVssAsync,
+ ) -> HRESULT,
+ fn BreakSnapshotSet(
+ SnapshotSetId: VSS_ID,
+ ) -> HRESULT,
+ fn GetSnapshotProperties(
+ SnapshotId: VSS_ID,
+ pProp: *mut VSS_SNAPSHOT_PROP,
+ ) -> HRESULT,
+ fn Query(
+ QueriedObjectId: VSS_ID,
+ eQueriedObjectType: VSS_OBJECT_TYPE,
+ eReturnedObjectsType: VSS_OBJECT_TYPE,
+ ppEnum: *mut *mut IVssEnumObject,
+ ) -> HRESULT,
+ fn IsVolumeSupported(
+ ProviderId: VSS_ID,
+ pwszVolumeName: VSS_PWSZ,
+ pbSupportedByThisProvider: *mut BOOL,
+ ) -> HRESULT,
+ fn DisableWriterClasses(
+ rgWriterClassId: *const VSS_ID,
+ cClassId: UINT,
+ ) -> HRESULT,
+ fn EnableWriterClasses(
+ rgWriterClassId: *const VSS_ID,
+ cClassId: UINT,
+ ) -> HRESULT,
+ fn DisableWriterInstances(
+ rgWriterInstanceId: *const VSS_ID,
+ cInstanceId: UINT,
+ ) -> HRESULT,
+ fn ExposeSnapshot(
+ SnapshotId: VSS_ID,
+ wszPathFromRoot: VSS_PWSZ,
+ lAttributes: LONG,
+ wszExpose: VSS_PWSZ,
+ pwszExposed: VSS_PWSZ,
+ ) -> HRESULT,
+ fn RevertToSnapshot(
+ SnapshotId: VSS_ID,
+ bForceDismount: BOOL,
+ ) -> HRESULT,
+ fn QueryRevertStatus(
+ pwszVolume: VSS_PWSZ,
+ ppAsync: *mut *mut IVssAsync,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x963f03ad, 0x9e4c, 0x4a34, 0xac, 0x15, 0xe4, 0xb6, 0x17, 0x4e, 0x50, 0x36)]
+interface IVssBackupComponentsEx(IVssBackupComponentsExVtbl):
+ IVssBackupComponents(IVssBackupComponentsVtbl) {
+ fn GetWriterMetadataEx(
+ iWriter: UINT,
+ pidInstance: *mut VSS_ID,
+ ppMetadata: *mut *mut IVssExamineWriterMetadataEx,
+ ) -> HRESULT,
+ fn SetSelectedForRestoreEx(
+ writerId: VSS_ID,
+ ct: VSS_COMPONENT_TYPE,
+ wszLogicalPath: LPCWSTR,
+ wszComponentName: LPCWSTR,
+ bSelectedForRestore: bool,
+ instanceId: VSS_ID,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xacfe2b3a, 0x22c9, 0x4ef8, 0xbd, 0x03, 0x2f, 0x9c, 0xa2, 0x30, 0x08, 0x4e)]
+interface IVssBackupComponentsEx2(IVssBackupComponentsEx2Vtbl):
+ IVssBackupComponentsEx(IVssBackupComponentsExVtbl) {
+ fn UnexposeSnapshot(
+ snapshotId: VSS_ID,
+ ) -> HRESULT,
+ fn SetAuthoritativeRestore(
+ writerId: VSS_ID,
+ ct: VSS_COMPONENT_TYPE,
+ wszLogicalPath: LPCWSTR,
+ wszComponentName: LPCWSTR,
+ bAuth: bool,
+ ) -> HRESULT,
+ fn SetRollForward(
+ writerId: VSS_ID,
+ ct: VSS_COMPONENT_TYPE,
+ wszLogicalPath: LPCWSTR,
+ wszComponentName: LPCWSTR,
+ rollType: VSS_ROLLFORWARD_TYPE,
+ wszRollForwardPoint: LPCWSTR,
+ ) -> HRESULT,
+ fn SetRestoreName(
+ writerId: VSS_ID,
+ ct: VSS_COMPONENT_TYPE,
+ wszLogicalPath: LPCWSTR,
+ wszComponentName: LPCWSTR,
+ wszRestoreName: LPCWSTR,
+ ) -> HRESULT,
+ fn BreakSnapshotSetEx(
+ SnapshotSetID: VSS_ID,
+ dwBreakFlags: DWORD,
+ ppAsync: *mut *mut IVssAsync,
+ ) -> HRESULT,
+ fn PreFastRecovery(
+ SnapshotSetID: VSS_ID,
+ dwPreFastRecoveryFlags: DWORD,
+ ppAsync: *mut *mut IVssAsync,
+ ) -> HRESULT,
+ fn FastRecovery(
+ SnapshotSetID: VSS_ID,
+ dwFastRecoveryFlags: DWORD,
+ ppAsync: *mut *mut IVssAsync,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xc191bfbc, 0xb602, 0x4675, 0x8b, 0xd1, 0x67, 0xd6, 0x42, 0xf5, 0x29, 0xd5)]
+interface IVssBackupComponentsEx3(IVssBackupComponentsEx3Vtbl):
+ IVssBackupComponentsEx2(IVssBackupComponentsEx2Vtbl) {
+ fn GetWriterStatusEx(
+ iWriter: UINT,
+ pidInstance: *mut VSS_ID,
+ pidWriter: *mut VSS_ID,
+ pbstrWriter: *mut BSTR,
+ pnStatus: *mut VSS_WRITER_STATE,
+ phrFailureWriter: *mut HRESULT,
+ phrApplication: *mut HRESULT,
+ pbstrApplicationMessage: *mut BSTR,
+ ) -> HRESULT,
+ fn AddSnapshotToRecoverySet(
+ snapshotId: VSS_ID,
+ dwFlags: DWORD,
+ pwszDestinationVolume: VSS_PWSZ,
+ ) -> HRESULT,
+ fn RecoverSet(
+ dwFlags: DWORD,
+ ppAsync: *mut *mut IVssAsync,
+ ) -> HRESULT,
+ fn GetSessionId(
+ idSession: *mut VSS_ID,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xf434c2fd, 0xb553, 0x4961, 0xa9, 0xf9, 0xa8, 0xe9, 0x0b, 0x67, 0x3e, 0x53)]
+interface IVssBackupComponentsEx4(IVssBackupComponentsEx4Vtbl):
+ IVssBackupComponentsEx3(IVssBackupComponentsEx3Vtbl) {
+ fn GetRootAndLogicalPrefixPaths(
+ pwszFilePath: VSS_PWSZ,
+ ppwszRootPath: *mut VSS_PWSZ,
+ ppwszLogicalPrefix: *mut VSS_PWSZ,
+ bNormalizeFQDNforRootPath: BOOL,
+ ) -> HRESULT,
+}}
+pub const VSS_SW_BOOTABLE_STATE: DWORD = 1;
+extern "system" {
+ #[link_name="CreateVssBackupComponentsInternal"]
+ pub fn CreateVssBackupComponents(
+ ppBackup: *mut *mut IVssBackupComponents,
+ ) -> HRESULT;
+ #[link_name="CreateVssExamineWriterMetadataInternal"]
+ pub fn CreateVssExamineWriterMetadata(
+ bstrXML: BSTR,
+ ppMetadata: *mut *mut IVssExamineWriterMetadata,
+ ) -> HRESULT;
+ #[link_name="IsVolumeSnapshottedInternal"]
+ pub fn IsVolumeSnapshotted(
+ pwszVolumeName: VSS_PWSZ,
+ pbSnapshotsPresent: *mut BOOL,
+ plSnapshotCapability: *mut LONG,
+ ) -> HRESULT;
+ #[link_name="VssFreeSnapshotPropertiesInternal"]
+ pub fn VssFreeSnapshotProperties(
+ pProp: *mut VSS_SNAPSHOT_PROP,
+ );
+ #[link_name="GetProviderMgmtInterfaceInternal"]
+ pub fn GetProviderMgmtInterface(
+ ProviderId: VSS_ID,
+ InterfaceId: IID,
+ ppItf: *mut *mut IUnknown,
+ ) -> HRESULT;
+ #[link_name="ShouldBlockRevertInternal"]
+ pub fn ShouldBlockRevert(
+ wszVolumeName: LPCWSTR,
+ pbBlock: *mut bool,
+ ) -> HRESULT;
+}
diff --git a/vendor/winapi/src/um/vss.rs b/vendor/winapi/src/um/vss.rs
new file mode 100644
index 000000000..7038f0376
--- /dev/null
+++ b/vendor/winapi/src/um/vss.rs
@@ -0,0 +1,284 @@
+// 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.
+//! VSS header file
+use shared::guiddef::{CLSID, GUID};
+use shared::minwindef::{DWORD, INT, ULONG};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HRESULT, LONG, LONGLONG, WCHAR};
+ENUM!{enum VSS_OBJECT_TYPE {
+ VSS_OBJECT_UNKNOWN = 0,
+ VSS_OBJECT_NONE = 1,
+ VSS_OBJECT_SNAPSHOT_SET = 2,
+ VSS_OBJECT_SNAPSHOT = 3,
+ VSS_OBJECT_PROVIDER = 4,
+ VSS_OBJECT_TYPE_COUNT = 5,
+}}
+pub type PVSS_OBJECT_TYPE = *mut VSS_OBJECT_TYPE;
+ENUM!{enum VSS_SNAPSHOT_STATE {
+ VSS_SS_UNKNOWN = 0x00,
+ VSS_SS_PREPARING = 0x01,
+ VSS_SS_PROCESSING_PREPARE = 0x02,
+ VSS_SS_PREPARED = 0x03,
+ VSS_SS_PROCESSING_PRECOMMIT = 0x04,
+ VSS_SS_PRECOMMITTED = 0x05,
+ VSS_SS_PROCESSING_COMMIT = 0x06,
+ VSS_SS_COMMITTED = 0x07,
+ VSS_SS_PROCESSING_POSTCOMMIT = 0x08,
+ VSS_SS_PROCESSING_PREFINALCOMMIT = 0x09,
+ VSS_SS_PREFINALCOMMITTED = 0x0a,
+ VSS_SS_PROCESSING_POSTFINALCOMMIT = 0x0b,
+ VSS_SS_CREATED = 0x0c,
+ VSS_SS_ABORTED = 0x0d,
+ VSS_SS_DELETED = 0x0e,
+ VSS_SS_POSTCOMMITTED = 0x0f,
+ VSS_SS_COUNT = 0x10,
+}}
+pub type PVSS_SNAPSHOT_STATE = *mut VSS_SNAPSHOT_STATE;
+ENUM!{enum VSS_VOLUME_SNAPSHOT_ATTRIBUTES {
+ VSS_VOLSNAP_ATTR_PERSISTENT = 0x00000001,
+ VSS_VOLSNAP_ATTR_NO_AUTORECOVERY = 0x00000002,
+ VSS_VOLSNAP_ATTR_CLIENT_ACCESSIBLE = 0x00000004,
+ VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE = 0x00000008,
+ VSS_VOLSNAP_ATTR_NO_WRITERS = 0x00000010,
+ VSS_VOLSNAP_ATTR_TRANSPORTABLE = 0x00000020,
+ VSS_VOLSNAP_ATTR_NOT_SURFACED = 0x00000040,
+ VSS_VOLSNAP_ATTR_NOT_TRANSACTED = 0x00000080,
+ VSS_VOLSNAP_ATTR_HARDWARE_ASSISTED = 0x00010000,
+ VSS_VOLSNAP_ATTR_DIFFERENTIAL = 0x00020000,
+ VSS_VOLSNAP_ATTR_PLEX = 0x00040000,
+ VSS_VOLSNAP_ATTR_IMPORTED = 0x00080000,
+ VSS_VOLSNAP_ATTR_EXPOSED_LOCALLY = 0x00100000,
+ VSS_VOLSNAP_ATTR_EXPOSED_REMOTELY = 0x00200000,
+ VSS_VOLSNAP_ATTR_AUTORECOVER = 0x00400000,
+ VSS_VOLSNAP_ATTR_ROLLBACK_RECOVERY = 0x00800000,
+ VSS_VOLSNAP_ATTR_DELAYED_POSTSNAPSHOT = 0x01000000,
+ VSS_VOLSNAP_ATTR_TXF_RECOVERY = 0x02000000,
+ VSS_VOLSNAP_ATTR_FILE_SHARE = 0x04000000,
+}}
+pub type PVSS_VOLUME_SNAPSHOT_ATTRIBUTES = *mut VSS_VOLUME_SNAPSHOT_ATTRIBUTES;
+ENUM!{enum VSS_SNAPSHOT_CONTEXT {
+ VSS_CTX_BACKUP = 0,
+ VSS_CTX_FILE_SHARE_BACKUP = VSS_VOLSNAP_ATTR_NO_WRITERS,
+ VSS_CTX_NAS_ROLLBACK = VSS_VOLSNAP_ATTR_PERSISTENT
+ | VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE | VSS_VOLSNAP_ATTR_NO_WRITERS,
+ VSS_CTX_APP_ROLLBACK = VSS_VOLSNAP_ATTR_PERSISTENT
+ | VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE,
+ VSS_CTX_CLIENT_ACCESSIBLE = VSS_VOLSNAP_ATTR_PERSISTENT
+ | VSS_VOLSNAP_ATTR_CLIENT_ACCESSIBLE | VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE
+ | VSS_VOLSNAP_ATTR_NO_WRITERS,
+ VSS_CTX_CLIENT_ACCESSIBLE_WRITERS = VSS_VOLSNAP_ATTR_PERSISTENT
+ | VSS_VOLSNAP_ATTR_CLIENT_ACCESSIBLE | VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE,
+ VSS_CTX_ALL = 0xffffffff,
+}}
+pub type PVSS_SNAPSHOT_CONTEXT = *mut VSS_SNAPSHOT_CONTEXT;
+ENUM!{enum VSS_PROVIDER_CAPABILITIES {
+ VSS_PRV_CAPABILITY_LEGACY = 0x1,
+ VSS_PRV_CAPABILITY_COMPLIANT = 0x2,
+ VSS_PRV_CAPABILITY_LUN_REPOINT = 0x4,
+ VSS_PRV_CAPABILITY_LUN_RESYNC = 0x8,
+ VSS_PRV_CAPABILITY_OFFLINE_CREATION = 0x10,
+ VSS_PRV_CAPABILITY_MULTIPLE_IMPORT = 0x20,
+ VSS_PRV_CAPABILITY_RECYCLING = 0x40,
+ VSS_PRV_CAPABILITY_PLEX = 0x80,
+ VSS_PRV_CAPABILITY_DIFFERENTIAL = 0x100,
+ VSS_PRV_CAPABILITY_CLUSTERED = 0x200,
+}}
+pub type PVSS_PROVIDER_CAPABILITIES = *mut VSS_PROVIDER_CAPABILITIES;
+ENUM!{enum VSS_HARDWARE_OPTIONS {
+ VSS_BREAKEX_FLAG_MASK_LUNS = 0x1,
+ VSS_BREAKEX_FLAG_MAKE_READ_WRITE = 0x2,
+ VSS_BREAKEX_FLAG_REVERT_IDENTITY_ALL = 0x4,
+ VSS_BREAKEX_FLAG_REVERT_IDENTITY_NONE = 0x8,
+ VSS_ONLUNSTATECHANGE_NOTIFY_READ_WRITE = 0x100,
+ VSS_ONLUNSTATECHANGE_NOTIFY_LUN_PRE_RECOVERY = 0x200,
+ VSS_ONLUNSTATECHANGE_NOTIFY_LUN_POST_RECOVERY = 0x400,
+ VSS_ONLUNSTATECHANGE_DO_MASK_LUNS = 0x800,
+}}
+pub type PVSS_HARDWARE_OPTIONS = *mut VSS_HARDWARE_OPTIONS;
+ENUM!{enum VSS_RECOVERY_OPTIONS {
+ VSS_RECOVERY_REVERT_IDENTITY_ALL = 0x00000100,
+ VSS_RECOVERY_NO_VOLUME_CHECK = 0x00000200,
+}}
+pub type PVSS_RECOVERY_OPTIONS = *mut VSS_RECOVERY_OPTIONS;
+ENUM!{enum VSS_WRITER_STATE {
+ VSS_WS_UNKNOWN = 0,
+ VSS_WS_STABLE = 1,
+ VSS_WS_WAITING_FOR_FREEZE = 2,
+ VSS_WS_WAITING_FOR_THAW = 3,
+ VSS_WS_WAITING_FOR_POST_SNAPSHOT = 4,
+ VSS_WS_WAITING_FOR_BACKUP_COMPLETE = 5,
+ VSS_WS_FAILED_AT_IDENTIFY = 6,
+ VSS_WS_FAILED_AT_PREPARE_BACKUP = 7,
+ VSS_WS_FAILED_AT_PREPARE_SNAPSHOT = 8,
+ VSS_WS_FAILED_AT_FREEZE = 9,
+ VSS_WS_FAILED_AT_THAW = 10,
+ VSS_WS_FAILED_AT_POST_SNAPSHOT = 11,
+ VSS_WS_FAILED_AT_BACKUP_COMPLETE = 12,
+ VSS_WS_FAILED_AT_PRE_RESTORE = 13,
+ VSS_WS_FAILED_AT_POST_RESTORE = 14,
+ VSS_WS_FAILED_AT_BACKUPSHUTDOWN = 15,
+ VSS_WS_COUNT = 16,
+}}
+pub type PVSS_WRITER_STATE = *mut VSS_WRITER_STATE;
+ENUM!{enum VSS_BACKUP_TYPE {
+ VSS_BT_UNDEFINED = 0,
+ VSS_BT_FULL = 1,
+ VSS_BT_INCREMENTAL = 2,
+ VSS_BT_DIFFERENTIAL = 3,
+ VSS_BT_LOG = 4,
+ VSS_BT_COPY = 5,
+ VSS_BT_OTHER = 6,
+}}
+pub type PVSS_BACKUP_TYPE = *mut VSS_BACKUP_TYPE;
+ENUM!{enum VSS_RESTORE_TYPE {
+ VSS_RTYPE_UNDEFINED = 0,
+ VSS_RTYPE_BY_COPY = 1,
+ VSS_RTYPE_IMPORT = 2,
+ VSS_RTYPE_OTHER = 3,
+}}
+pub type PVSS_RESTORE_TYPE = *mut VSS_RESTORE_TYPE;
+ENUM!{enum VSS_ROLLFORWARD_TYPE {
+ VSS_RF_UNDEFINED = 0,
+ VSS_RF_NONE = 1,
+ VSS_RF_ALL = 2,
+ VSS_RF_PARTIAL = 3,
+}}
+pub type PVSS_ROLLFORWARD_TYPE = *mut VSS_ROLLFORWARD_TYPE;
+ENUM!{enum VSS_PROVIDER_TYPE {
+ VSS_PROV_UNKNOWN = 0,
+ VSS_PROV_SYSTEM = 1,
+ VSS_PROV_SOFTWARE = 2,
+ VSS_PROV_HARDWARE = 3,
+ VSS_PROV_FILESHARE = 4,
+}}
+pub type PVSS_PROVIDER_TYPE = *mut VSS_PROVIDER_TYPE;
+ENUM!{enum VSS_APPLICATION_LEVEL {
+ VSS_APP_UNKNOWN = 0,
+ VSS_APP_SYSTEM = 1,
+ VSS_APP_BACK_END = 2,
+ VSS_APP_FRONT_END = 3,
+ VSS_APP_SYSTEM_RM = 4,
+ VSS_APP_AUTO = -1i32 as u32,
+}}
+pub type PVSS_APPLICATION_LEVEL = *mut VSS_APPLICATION_LEVEL;
+ENUM!{enum _VSS_SNAPSHOT_COMPATIBILITY {
+ VSS_SC_DISABLE_DEFRAG = 0x1,
+ VSS_SC_DISABLE_CONTENTINDEX = 0x2,
+}}
+ENUM!{enum VSS_SNAPSHOT_PROPERTY_ID {
+ VSS_SPROPID_UNKNOWN = 0,
+ VSS_SPROPID_SNAPSHOT_ID = 0x1,
+ VSS_SPROPID_SNAPSHOT_SET_ID = 0x2,
+ VSS_SPROPID_SNAPSHOTS_COUNT = 0x3,
+ VSS_SPROPID_SNAPSHOT_DEVICE = 0x4,
+ VSS_SPROPID_ORIGINAL_VOLUME = 0x5,
+ VSS_SPROPID_ORIGINATING_MACHINE = 0x6,
+ VSS_SPROPID_SERVICE_MACHINE = 0x7,
+ VSS_SPROPID_EXPOSED_NAME = 0x8,
+ VSS_SPROPID_EXPOSED_PATH = 0x9,
+ VSS_SPROPID_PROVIDER_ID = 0xa,
+ VSS_SPROPID_SNAPSHOT_ATTRIBUTES = 0xb,
+ VSS_SPROPID_CREATION_TIMESTAMP = 0xc,
+ VSS_SPROPID_STATUS = 0xd,
+}}
+pub type PVSS_SNAPSHOT_PROPERTY_ID = *mut VSS_SNAPSHOT_PROPERTY_ID;
+ENUM!{enum VSS_FILE_SPEC_BACKUP_TYPE {
+ VSS_FSBT_FULL_BACKUP_REQUIRED = 0x1,
+ VSS_FSBT_DIFFERENTIAL_BACKUP_REQUIRED = 0x2,
+ VSS_FSBT_INCREMENTAL_BACKUP_REQUIRED = 0x4,
+ VSS_FSBT_LOG_BACKUP_REQUIRED = 0x8,
+ VSS_FSBT_FULL_SNAPSHOT_REQUIRED = 0x100,
+ VSS_FSBT_DIFFERENTIAL_SNAPSHOT_REQUIRED = 0x200,
+ VSS_FSBT_INCREMENTAL_SNAPSHOT_REQUIRED = 0x400,
+ VSS_FSBT_LOG_SNAPSHOT_REQUIRED = 0x800,
+ VSS_FSBT_CREATED_DURING_BACKUP = 0x10000,
+ VSS_FSBT_ALL_BACKUP_REQUIRED = 0xf,
+ VSS_FSBT_ALL_SNAPSHOT_REQUIRED = 0xf00,
+}}
+pub type PVSS_FILE_SPEC_BACKUP_TYPE = *mut VSS_FILE_SPEC_BACKUP_TYPE;
+ENUM!{enum VSS_BACKUP_SCHEMA {
+ VSS_BS_UNDEFINED = 0,
+ VSS_BS_DIFFERENTIAL = 0x1,
+ VSS_BS_INCREMENTAL = 0x2,
+ VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL = 0x4,
+ VSS_BS_LOG = 0x8,
+ VSS_BS_COPY = 0x10,
+ VSS_BS_TIMESTAMPED = 0x20,
+ VSS_BS_LAST_MODIFY = 0x40,
+ VSS_BS_LSN = 0x80,
+ VSS_BS_WRITER_SUPPORTS_NEW_TARGET = 0x100,
+ VSS_BS_WRITER_SUPPORTS_RESTORE_WITH_MOVE = 0x200,
+ VSS_BS_INDEPENDENT_SYSTEM_STATE = 0x400,
+ VSS_BS_ROLLFORWARD_RESTORE = 0x1000,
+ VSS_BS_RESTORE_RENAME = 0x2000,
+ VSS_BS_AUTHORITATIVE_RESTORE = 0x4000,
+ VSS_BS_WRITER_SUPPORTS_PARALLEL_RESTORES = 0x8000,
+}}
+pub type PVSS_BACKUP_SCHEMA = *mut VSS_BACKUP_SCHEMA;
+pub type VSS_ID = GUID;
+pub type VSS_PWSZ = *mut WCHAR;
+pub type VSS_TIMESTAMP = LONGLONG;
+STRUCT!{struct VSS_SNAPSHOT_PROP {
+ m_SnapshotId: VSS_ID,
+ m_SnapshotSetId: VSS_ID,
+ m_lSnapshotsCount: LONG,
+ m_pwszSnapshotDeviceObject: VSS_PWSZ,
+ m_pwszOriginalVolumeName: VSS_PWSZ,
+ m_pwszOriginatingMachine: VSS_PWSZ,
+ m_pwszServiceMachine: VSS_PWSZ,
+ m_pwszExposedName: VSS_PWSZ,
+ m_pwszExposedPath: VSS_PWSZ,
+ m_ProviderId: VSS_ID,
+ m_lSnapshotAttributes: LONG,
+ m_tsCreationTimestamp: VSS_TIMESTAMP,
+ m_eStatus: VSS_SNAPSHOT_STATE,
+}}
+pub type PVSS_SNAPSHOT_PROP = *mut VSS_SNAPSHOT_PROP;
+STRUCT!{struct VSS_PROVIDER_PROP {
+ m_ProviderId: VSS_ID,
+ m_pwszProviderName: VSS_PWSZ,
+ m_eProviderType: VSS_PROVIDER_TYPE,
+ m_pwszProviderVersion: VSS_PWSZ,
+ m_ProviderVersionId: VSS_ID,
+ m_ClassId: CLSID,
+}}
+pub type PVSS_PROVIDER_PROP = *mut VSS_PROVIDER_PROP;
+UNION!{union VSS_OBJECT_UNION {
+ [u64; 12] [u64; 16],
+ Snap Snap_mut: VSS_SNAPSHOT_PROP,
+ Prov Prov_mut: VSS_PROVIDER_PROP,
+}}
+STRUCT!{struct VSS_OBJECT_PROP {
+ Type: VSS_OBJECT_TYPE,
+ Obj: VSS_OBJECT_UNION,
+}}
+pub type PVSS_OBJECT_PROP = *mut VSS_OBJECT_PROP;
+RIDL!{#[uuid(0xae1c7110, 0x2f60, 0x11d3, 0x8a, 0x39, 0x00, 0xc0, 0x4f, 0x72, 0xd8, 0xe3)]
+interface IVssEnumObject(IVssEnumObjectVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ celt: ULONG,
+ rgelt: *mut VSS_OBJECT_PROP,
+ pceltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ celt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppenum: *mut *mut IVssEnumObject,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x507c37b4, 0xcf5b, 0x4e95, 0xb0, 0xaf, 0x14, 0xeb, 0x97, 0x67, 0x46, 0x7e)]
+interface IVssAsync(IVssAsyncVtbl): IUnknown(IUnknownVtbl) {
+ fn Cancel() -> HRESULT,
+ fn Wait(
+ dwMilliseconds: DWORD,
+ ) -> HRESULT,
+ fn QueryStatus(
+ pHrResult: *mut HRESULT,
+ pReserved: *mut INT,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/vsserror.rs b/vendor/winapi/src/um/vsserror.rs
new file mode 100644
index 000000000..1a295509d
--- /dev/null
+++ b/vendor/winapi/src/um/vsserror.rs
@@ -0,0 +1,89 @@
+// 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.
+//! VSS Error header file
+use um::winnt::HRESULT;
+pub const VSS_E_BAD_STATE: HRESULT = 0x80042301;
+pub const VSS_E_UNEXPECTED: HRESULT = 0x80042302;
+pub const VSS_E_PROVIDER_ALREADY_REGISTERED: HRESULT = 0x80042303;
+pub const VSS_E_PROVIDER_NOT_REGISTERED: HRESULT = 0x80042304;
+pub const VSS_E_PROVIDER_VETO: HRESULT = 0x80042306;
+pub const VSS_E_PROVIDER_IN_USE: HRESULT = 0x80042307;
+pub const VSS_E_OBJECT_NOT_FOUND: HRESULT = 0x80042308;
+pub const VSS_S_ASYNC_PENDING: HRESULT = 0x00042309;
+pub const VSS_S_ASYNC_FINISHED: HRESULT = 0x0004230A;
+pub const VSS_S_ASYNC_CANCELLED: HRESULT = 0x0004230B;
+pub const VSS_E_VOLUME_NOT_SUPPORTED: HRESULT = 0x8004230C;
+pub const VSS_E_VOLUME_NOT_SUPPORTED_BY_PROVIDER: HRESULT = 0x8004230E;
+pub const VSS_E_OBJECT_ALREADY_EXISTS: HRESULT = 0x8004230D;
+pub const VSS_E_UNEXPECTED_PROVIDER_ERROR: HRESULT = 0x8004230F;
+pub const VSS_E_CORRUPT_XML_DOCUMENT: HRESULT = 0x80042310;
+pub const VSS_E_INVALID_XML_DOCUMENT: HRESULT = 0x80042311;
+pub const VSS_E_MAXIMUM_NUMBER_OF_VOLUMES_REACHED: HRESULT = 0x80042312;
+pub const VSS_E_FLUSH_WRITES_TIMEOUT: HRESULT = 0x80042313;
+pub const VSS_E_HOLD_WRITES_TIMEOUT: HRESULT = 0x80042314;
+pub const VSS_E_UNEXPECTED_WRITER_ERROR: HRESULT = 0x80042315;
+pub const VSS_E_SNAPSHOT_SET_IN_PROGRESS: HRESULT = 0x80042316;
+pub const VSS_E_MAXIMUM_NUMBER_OF_SNAPSHOTS_REACHED: HRESULT = 0x80042317;
+pub const VSS_E_WRITER_INFRASTRUCTURE: HRESULT = 0x80042318;
+pub const VSS_E_WRITER_NOT_RESPONDING: HRESULT = 0x80042319;
+pub const VSS_E_WRITER_ALREADY_SUBSCRIBED: HRESULT = 0x8004231A;
+pub const VSS_E_UNSUPPORTED_CONTEXT: HRESULT = 0x8004231B;
+pub const VSS_E_VOLUME_IN_USE: HRESULT = 0x8004231D;
+pub const VSS_E_MAXIMUM_DIFFAREA_ASSOCIATIONS_REACHED: HRESULT = 0x8004231E;
+pub const VSS_E_INSUFFICIENT_STORAGE: HRESULT = 0x8004231F;
+pub const VSS_E_NO_SNAPSHOTS_IMPORTED: HRESULT = 0x80042320;
+pub const VSS_S_SOME_SNAPSHOTS_NOT_IMPORTED: HRESULT = 0x00042321;
+pub const VSS_E_SOME_SNAPSHOTS_NOT_IMPORTED: HRESULT = 0x80042321;
+pub const VSS_E_MAXIMUM_NUMBER_OF_REMOTE_MACHINES_REACHED: HRESULT = 0x80042322;
+pub const VSS_E_REMOTE_SERVER_UNAVAILABLE: HRESULT = 0x80042323;
+pub const VSS_E_REMOTE_SERVER_UNSUPPORTED: HRESULT = 0x80042324;
+pub const VSS_E_REVERT_IN_PROGRESS: HRESULT = 0x80042325;
+pub const VSS_E_REVERT_VOLUME_LOST: HRESULT = 0x80042326;
+pub const VSS_E_REBOOT_REQUIRED: HRESULT = 0x80042327;
+pub const VSS_E_TRANSACTION_FREEZE_TIMEOUT: HRESULT = 0x80042328;
+pub const VSS_E_TRANSACTION_THAW_TIMEOUT: HRESULT = 0x80042329;
+pub const VSS_E_VOLUME_NOT_LOCAL: HRESULT = 0x8004232D;
+pub const VSS_E_CLUSTER_TIMEOUT: HRESULT = 0x8004232E;
+pub const VSS_E_WRITERERROR_INCONSISTENTSNAPSHOT: HRESULT = 0x800423F0;
+pub const VSS_E_WRITERERROR_OUTOFRESOURCES: HRESULT = 0x800423F1;
+pub const VSS_E_WRITERERROR_TIMEOUT: HRESULT = 0x800423F2;
+pub const VSS_E_WRITERERROR_RETRYABLE: HRESULT = 0x800423F3;
+pub const VSS_E_WRITERERROR_NONRETRYABLE: HRESULT = 0x800423F4;
+pub const VSS_E_WRITERERROR_RECOVERY_FAILED: HRESULT = 0x800423F5;
+pub const VSS_E_BREAK_REVERT_ID_FAILED: HRESULT = 0x800423F6;
+pub const VSS_E_LEGACY_PROVIDER: HRESULT = 0x800423F7;
+pub const VSS_E_MISSING_DISK: HRESULT = 0x800423F8;
+pub const VSS_E_MISSING_HIDDEN_VOLUME: HRESULT = 0x800423F9;
+pub const VSS_E_MISSING_VOLUME: HRESULT = 0x800423FA;
+pub const VSS_E_AUTORECOVERY_FAILED: HRESULT = 0x800423FB;
+pub const VSS_E_DYNAMIC_DISK_ERROR: HRESULT = 0x800423FC;
+pub const VSS_E_NONTRANSPORTABLE_BCD: HRESULT = 0x800423FD;
+pub const VSS_E_CANNOT_REVERT_DISKID: HRESULT = 0x800423FE;
+pub const VSS_E_RESYNC_IN_PROGRESS: HRESULT = 0x800423FF;
+pub const VSS_E_CLUSTER_ERROR: HRESULT = 0x80042400;
+pub const VSS_E_UNSELECTED_VOLUME: HRESULT = 0x8004232A;
+pub const VSS_E_SNAPSHOT_NOT_IN_SET: HRESULT = 0x8004232B;
+pub const VSS_E_NESTED_VOLUME_LIMIT: HRESULT = 0x8004232C;
+pub const VSS_E_NOT_SUPPORTED: HRESULT = 0x8004232F;
+pub const VSS_E_WRITERERROR_PARTIAL_FAILURE: HRESULT = 0x80042336;
+pub const VSS_E_ASRERROR_DISK_ASSIGNMENT_FAILED: HRESULT = 0x80042401;
+pub const VSS_E_ASRERROR_DISK_RECREATION_FAILED: HRESULT = 0x80042402;
+pub const VSS_E_ASRERROR_NO_ARCPATH: HRESULT = 0x80042403;
+pub const VSS_E_ASRERROR_MISSING_DYNDISK: HRESULT = 0x80042404;
+pub const VSS_E_ASRERROR_SHARED_CRIDISK: HRESULT = 0x80042405;
+pub const VSS_E_ASRERROR_DATADISK_RDISK0: HRESULT = 0x80042406;
+pub const VSS_E_ASRERROR_RDISK0_TOOSMALL: HRESULT = 0x80042407;
+pub const VSS_E_ASRERROR_CRITICAL_DISKS_TOO_SMALL: HRESULT = 0x80042408;
+pub const VSS_E_WRITER_STATUS_NOT_AVAILABLE: HRESULT = 0x80042409;
+pub const VSS_E_ASRERROR_DYNAMIC_VHD_NOT_SUPPORTED: HRESULT = 0x8004240A;
+pub const VSS_E_CRITICAL_VOLUME_ON_INVALID_DISK: HRESULT = 0x80042411;
+pub const VSS_E_ASRERROR_RDISK_FOR_SYSTEM_DISK_NOT_FOUND: HRESULT = 0x80042412;
+pub const VSS_E_ASRERROR_NO_PHYSICAL_DISK_AVAILABLE: HRESULT = 0x80042413;
+pub const VSS_E_ASRERROR_FIXED_PHYSICAL_DISK_AVAILABLE_AFTER_DISK_EXCLUSION: HRESULT =
+ 0x80042414;
+pub const VSS_E_ASRERROR_CRITICAL_DISK_CANNOT_BE_EXCLUDED: HRESULT = 0x80042415;
+pub const VSS_E_ASRERROR_SYSTEM_PARTITION_HIDDEN: HRESULT = 0x80042416;
+pub const VSS_E_FSS_TIMEOUT: HRESULT = 0x80042417;
diff --git a/vendor/winapi/src/um/vswriter.rs b/vendor/winapi/src/um/vswriter.rs
new file mode 100644
index 000000000..43d6000ec
--- /dev/null
+++ b/vendor/winapi/src/um/vswriter.rs
@@ -0,0 +1,397 @@
+// 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.
+//! Declaration of Writer
+use shared::minwindef::{BOOL, BYTE, DWORD, FILETIME, UINT};
+use shared::wtypes::BSTR;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::vss::{VSS_ID, VSS_ROLLFORWARD_TYPE};
+use um::winnt::{HRESULT, LPCWSTR, VOID};
+ENUM!{enum VSS_USAGE_TYPE {
+ VSS_UT_UNDEFINED = 0,
+ VSS_UT_BOOTABLESYSTEMSTATE = 1,
+ VSS_UT_SYSTEMSERVICE = 2,
+ VSS_UT_USERDATA = 3,
+ VSS_UT_OTHER = 4,
+}}
+ENUM!{enum VSS_SOURCE_TYPE {
+ VSS_ST_UNDEFINED = 0,
+ VSS_ST_TRANSACTEDDB = 1,
+ VSS_ST_NONTRANSACTEDDB = 2,
+ VSS_ST_OTHER = 3,
+}}
+ENUM!{enum VSS_RESTOREMETHOD_ENUM {
+ VSS_RME_UNDEFINED = 0,
+ VSS_RME_RESTORE_IF_NOT_THERE = 1,
+ VSS_RME_RESTORE_IF_CAN_REPLACE = 2,
+ VSS_RME_STOP_RESTORE_START = 3,
+ VSS_RME_RESTORE_TO_ALTERNATE_LOCATION = 4,
+ VSS_RME_RESTORE_AT_REBOOT = 5,
+ VSS_RME_RESTORE_AT_REBOOT_IF_CANNOT_REPLACE = 6,
+ VSS_RME_CUSTOM = 7,
+ VSS_RME_RESTORE_STOP_START = 8,
+}}
+ENUM!{enum VSS_WRITERRESTORE_ENUM {
+ VSS_WRE_UNDEFINED = 0,
+ VSS_WRE_NEVER = 1,
+ VSS_WRE_IF_REPLACE_FAILS = 2,
+ VSS_WRE_ALWAYS = 3,
+}}
+ENUM!{enum VSS_COMPONENT_TYPE {
+ VSS_CT_UNDEFINED = 0,
+ VSS_CT_DATABASE = 1,
+ VSS_CT_FILEGROUP = 2,
+}}
+ENUM!{enum VSS_ALTERNATE_WRITER_STATE {
+ VSS_AWS_UNDEFINED = 0,
+ VSS_AWS_NO_ALTERNATE_WRITER = 1,
+ VSS_AWS_ALTERNATE_WRITER_EXISTS = 2,
+ VSS_AWS_THIS_IS_ALTERNATE_WRITER = 3,
+}}
+ENUM!{enum VSS_SUBSCRIBE_MASK {
+ VSS_SM_POST_SNAPSHOT_FLAG = 0x00000001,
+ VSS_SM_BACKUP_EVENTS_FLAG = 0x00000002,
+ VSS_SM_RESTORE_EVENTS_FLAG = 0x00000004,
+ VSS_SM_IO_THROTTLING_FLAG = 0x00000008,
+ VSS_SM_ALL_FLAGS = 0xffffffff,
+}}
+ENUM!{enum VSS_RESTORE_TARGET {
+ VSS_RT_UNDEFINED = 0,
+ VSS_RT_ORIGINAL = 1,
+ VSS_RT_ALTERNATE = 2,
+ VSS_RT_DIRECTED = 3,
+ VSS_RT_ORIGINAL_LOCATION = 4,
+}}
+ENUM!{enum VSS_FILE_RESTORE_STATUS {
+ VSS_RS_UNDEFINED = 0,
+ VSS_RS_NONE = 1,
+ VSS_RS_ALL = 2,
+ VSS_RS_FAILED = 3,
+}}
+ENUM!{enum VSS_COMPONENT_FLAGS {
+ VSS_CF_BACKUP_RECOVERY = 0x00000001,
+ VSS_CF_APP_ROLLBACK_RECOVERY = 0x00000002,
+ VSS_CF_NOT_SYSTEM_STATE = 0x00000004,
+}}
+RIDL!{#[uuid(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)]
+interface IVssWMFiledesc(IVssWMFiledescVtbl): IUnknown(IUnknownVtbl) {
+ fn GetPath(
+ pbstrPath: *mut BSTR,
+ ) -> HRESULT,
+ fn GetFilespec(
+ pbstrFilespec: *mut BSTR,
+ ) -> HRESULT,
+ fn GetRecursive(
+ pbRecursive: *mut bool,
+ ) -> HRESULT,
+ fn GetAlternateLocation(
+ pbstrAlternateLocation: *mut BSTR,
+ ) -> HRESULT,
+ fn GetBackupTypeMask(
+ pdwTypeMask: *mut DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)]
+interface IVssWMDependency(IVssWMDependencyVtbl): IUnknown(IUnknownVtbl) {
+ fn GetWriterId(
+ pWriterId: *mut VSS_ID,
+ ) -> HRESULT,
+ fn GetLogicalPath(
+ pbstrLogicalPath: *mut BSTR,
+ ) -> HRESULT,
+ fn GetComponentName(
+ pbstrComponentName: *mut BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xd2c72c96, 0xc121, 0x4518, 0xb6, 0x27, 0xe5, 0xa9, 0x3d, 0x01, 0x0e, 0xad)]
+interface IVssComponent(IVssComponentVtbl): IUnknown(IUnknownVtbl) {
+ fn GetLogicalPath(
+ pbstrPath: *mut BSTR,
+ ) -> HRESULT,
+ fn GetComponentType(
+ pct: *mut VSS_COMPONENT_TYPE,
+ ) -> HRESULT,
+ fn GetComponentName(
+ pbstrName: *mut BSTR,
+ ) -> HRESULT,
+ fn GetBackupSucceeded(
+ pbSucceeded: *mut bool,
+ ) -> HRESULT,
+ fn GetAlternateLocationMappingCount(
+ pcMappings: *mut UINT,
+ ) -> HRESULT,
+ fn GetAlternateLocationMapping(
+ iMapping: UINT,
+ ppFiledesc: *mut *mut IVssWMFiledesc,
+ ) -> HRESULT,
+ fn SetBackupMetadata(
+ wszData: LPCWSTR,
+ ) -> HRESULT,
+ fn GetBackupMetadata(
+ pbstrData: *mut BSTR,
+ ) -> HRESULT,
+ fn AddPartialFile(
+ wszPath: LPCWSTR,
+ wszFilename: LPCWSTR,
+ wszRanges: LPCWSTR,
+ wszMetadata: LPCWSTR,
+ ) -> HRESULT,
+ fn GetPartialFileCount(
+ pcPartialFiles: *mut UINT,
+ ) -> HRESULT,
+ fn GetPartialFile(
+ iPartialFile: UINT,
+ pbstrPath: *mut BSTR,
+ pbstrFilename: *mut BSTR,
+ pbstrRange: *mut BSTR,
+ pbstrMetadata: *mut BSTR,
+ ) -> HRESULT,
+ fn IsSelectedForRestore(
+ pbSelectedForRestore: *mut bool,
+ ) -> HRESULT,
+ fn GetAdditionalRestores(
+ pbAdditionalRestores: *mut bool,
+ ) -> HRESULT,
+ fn GetNewTargetCount(
+ pcNewTarget: *mut UINT,
+ ) -> HRESULT,
+ fn GetNewTarget(
+ iNewTarget: UINT,
+ ppFiledesc: *mut *mut IVssWMFiledesc,
+ ) -> HRESULT,
+ fn AddDirectedTarget(
+ wszSourcePath: LPCWSTR,
+ wszSourceFilename: LPCWSTR,
+ wszSourceRangeList: LPCWSTR,
+ wszDestinationPath: LPCWSTR,
+ wszDestinationFilename: LPCWSTR,
+ wszDestinationRangeList: LPCWSTR,
+ ) -> HRESULT,
+ fn GetDirectedTargetCount(
+ pcDirectedTarget: *mut UINT,
+ ) -> HRESULT,
+ fn GetDirectedTarget(
+ iDirectedTarget: UINT,
+ pbstrSourcePath: *mut BSTR,
+ pbstrSourceFileName: *mut BSTR,
+ pbstrSourceRangeList: *mut BSTR,
+ pbstrDestinationPath: *mut BSTR,
+ pbstrDestinationFilename: *mut BSTR,
+ pbstrDestinationRangeList: *mut BSTR,
+ ) -> HRESULT,
+ fn SetRestoreMetadata(
+ wszRestoreMetadata: LPCWSTR,
+ ) -> HRESULT,
+ fn GetRestoreMetadata(
+ pbstrRestoreMetadata: *mut BSTR,
+ ) -> HRESULT,
+ fn SetRestoreTarget(
+ target: VSS_RESTORE_TARGET,
+ ) -> HRESULT,
+ fn GetRestoreTarget(
+ pTarget: *mut VSS_RESTORE_TARGET,
+ ) -> HRESULT,
+ fn SetPreRestoreFailureMsg(
+ wszPreRestoreFailureMsg: LPCWSTR,
+ ) -> HRESULT,
+ fn GetPreRestoreFailureMsg(
+ pbstrPreRestoreFailureMsg: *mut BSTR,
+ ) -> HRESULT,
+ fn SetPostRestoreFailureMsg(
+ wszPostRestoreFailureMsg: LPCWSTR,
+ ) -> HRESULT,
+ fn GetPostRestoreFailureMsg(
+ pbstrPostRestoreFailureMsg: *mut BSTR,
+ ) -> HRESULT,
+ fn SetBackupStamp(
+ wszBackupStamp: LPCWSTR,
+ ) -> HRESULT,
+ fn GetBackupStamp(
+ pbstrBackupStamp: *mut BSTR,
+ ) -> HRESULT,
+ fn GetPreviousBackupStamp(
+ pbstrBackupStamp: *mut BSTR,
+ ) -> HRESULT,
+ fn GetBackupOptions(
+ pbstrBackupOptions: *mut BSTR,
+ ) -> HRESULT,
+ fn GetRestoreOptions(
+ pbstrRestoreOptions: *mut BSTR,
+ ) -> HRESULT,
+ fn GetRestoreSubcomponentCount(
+ pcRestoreSubcomponent: *mut UINT,
+ ) -> HRESULT,
+ fn GetRestoreSubcomponent(
+ iComponent: UINT,
+ pbstrLogicalPath: *mut BSTR,
+ pbstrComponentName: *mut BSTR,
+ pbRepair: *mut bool,
+ ) -> HRESULT,
+ fn GetFileRestoreStatus(
+ pStatus: *mut VSS_FILE_RESTORE_STATUS,
+ ) -> HRESULT,
+ fn AddDifferencedFilesByLastModifyTime(
+ wszPath: LPCWSTR,
+ wszFilespec: LPCWSTR,
+ bRecursive: BOOL,
+ ftLastModifyTime: FILETIME,
+ ) -> HRESULT,
+ fn AddDifferencedFilesByLastModifyLSN(
+ wszPath: LPCWSTR,
+ wszFilespec: LPCWSTR,
+ bRecursive: BOOL,
+ bstrLsnString: BSTR,
+ ) -> HRESULT,
+ fn GetDifferencedFilesCount(
+ pcDifferencedFiles: *mut UINT,
+ ) -> HRESULT,
+ fn GetDifferencedFile(
+ iDifferencedFile: UINT,
+ pbstrPath: *mut BSTR,
+ pbstrFilespec: *mut BSTR,
+ pbRecursive: *mut BOOL,
+ pbstrLsnString: *mut BSTR,
+ pftLastModifyTime: *mut FILETIME,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)]
+interface IVssWriterComponents(IVssWriterComponentsVtbl) {
+ fn GetComponentCount(
+ pcComponents: *mut UINT,
+ ) -> HRESULT,
+ fn GetWriterInfo(
+ pidInstance: *mut VSS_ID,
+ pidWriter: *mut VSS_ID,
+ ) -> HRESULT,
+ fn GetComponent(
+ iComponent: UINT,
+ ppComponent: *mut *mut IVssComponent,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x156c8b5e, 0xf131, 0x4bd7, 0x9c, 0x97, 0xd1, 0x92, 0x3b, 0xe7, 0xe1, 0xfa)]
+interface IVssComponentEx(IVssComponentExVtbl): IVssComponent(IVssComponentVtbl) {
+ fn SetPrepareForBackupFailureMsg(
+ wszFailureMsg: LPCWSTR,
+ ) -> HRESULT,
+ fn SetPostSnapshotFailureMsg(
+ wszFailureMsg: LPCWSTR,
+ ) -> HRESULT,
+ fn GetPrepareForBackupFailureMsg(
+ pbstrFailureMsg: *mut BSTR,
+ ) -> HRESULT,
+ fn GetPostSnapshotFailureMsg(
+ pbstrFailureMsg: *mut BSTR,
+ ) -> HRESULT,
+ fn GetAuthoritativeRestore(
+ pbAuth: *mut bool,
+ ) -> HRESULT,
+ fn GetRollForward(
+ pRollType: *mut VSS_ROLLFORWARD_TYPE,
+ pbstrPoint: *mut BSTR,
+ ) -> HRESULT,
+ fn GetRestoreName(
+ pbstrName: *mut BSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3b5be0f2, 0x07a9, 0x4e4b, 0xbd, 0xd3, 0xcf, 0xdc, 0x8e, 0x2c, 0x0d, 0x2d)]
+interface IVssComponentEx2(IVssComponentEx2Vtbl): IVssComponentEx(IVssComponentExVtbl) {
+ fn SetFailure(
+ hr: HRESULT,
+ hrApplication: HRESULT,
+ wszApplicationMessage: LPCWSTR,
+ dwReserved: DWORD,
+ ) -> HRESULT,
+ fn GetFailure(
+ phr: *mut HRESULT,
+ phrApplication: *mut HRESULT,
+ pbstrApplicationMessage: *mut BSTR,
+ pdwReserved: *mut DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)]
+interface IVssCreateWriterMetadata(IVssCreateWriterMetadataVtbl) {
+ fn AddIncludeFiles(
+ wszPath: LPCWSTR,
+ wszFilespec: LPCWSTR,
+ bRecursive: bool,
+ wszAlternateLocation: LPCWSTR,
+ ) -> HRESULT,
+ fn AddExcludeFiles(
+ wszPath: LPCWSTR,
+ wszFilespec: LPCWSTR,
+ bRecursive: bool,
+ ) -> HRESULT,
+ fn AddComponent(
+ ct: VSS_COMPONENT_TYPE,
+ wszLogicalPath: LPCWSTR,
+ wszComponentName: LPCWSTR,
+ wszCaption: LPCWSTR,
+ pbIcon: *const BYTE,
+ cbIcon: UINT,
+ bRestoreMetadata: bool,
+ bNotifyOnBackupComplete: bool,
+ bSelectableForRestore: bool,
+ dwComponentFlags: DWORD,
+ ) -> HRESULT,
+ fn AddDatabaseFiles(
+ wszLogicalPath: LPCWSTR,
+ wszDatabaseName: LPCWSTR,
+ wszPath: LPCWSTR,
+ wszFilespec: LPCWSTR,
+ dwBackupTypeMask: DWORD,
+ ) -> HRESULT,
+ fn AddDatabaseLogFiles(
+ wszLogicalPath: LPCWSTR,
+ wszDatabaseName: LPCWSTR,
+ wszPath: LPCWSTR,
+ wszFilespec: LPCWSTR,
+ dwBackupTypeMask: DWORD,
+ ) -> HRESULT,
+ fn AddFilesToFileGroup(
+ wszLogicalPath: LPCWSTR,
+ wszGroupName: LPCWSTR,
+ wszPath: LPCWSTR,
+ wszFilespec: LPCWSTR,
+ bRecursive: bool,
+ wszAlternateLocation: LPCWSTR,
+ dwBackupTypeMask: DWORD,
+ ) -> HRESULT,
+ fn SetRestoreMethod(
+ method: VSS_RESTOREMETHOD_ENUM,
+ wszService: LPCWSTR,
+ wszUserProcedure: LPCWSTR,
+ writerRestore: VSS_WRITERRESTORE_ENUM,
+ bRebootRequired: bool,
+ ) -> HRESULT,
+ fn AddAlternateLocationMapping(
+ wszSourcePath: LPCWSTR,
+ wszSourceFilespec: LPCWSTR,
+ bRecursive: bool,
+ wszDestination: LPCWSTR,
+ ) -> HRESULT,
+ fn AddComponentDependency(
+ wszForLogicalPath: LPCWSTR,
+ wszForComponentName: LPCWSTR,
+ onWriterId: VSS_ID,
+ wszOnLogicalPath: LPCWSTR,
+ wszOnComponentName: LPCWSTR,
+ ) -> HRESULT,
+ fn SetBackupSchema(
+ dwSchemaMask: DWORD,
+ ) -> HRESULT,
+ fn GetDocument(
+ pDoc: *mut *mut VOID,
+ ) -> HRESULT, //TODO IXMLDOMDocument,
+ fn SaveAsXML(
+ pbstrXML: *mut BSTR,
+ ) -> HRESULT,
+}}
+//IVssCreateWriterMetadataEx
+//IVssWriterImpl
+//IVssCreateExpressWriterMetadata
+//IVssExpressWriter
+//CVssWriter
+//CVssWriterEx
+//CVssWriterEx2
diff --git a/vendor/winapi/src/um/wbemads.rs b/vendor/winapi/src/um/wbemads.rs
new file mode 100644
index 000000000..5ba09e6eb
--- /dev/null
+++ b/vendor/winapi/src/um/wbemads.rs
@@ -0,0 +1,41 @@
+// 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::winerror::HRESULT;
+use shared::wtypes::BSTR;
+use um::oaidl::{IDispatch, IDispatchVtbl};
+use um::wbemdisp::{ISWbemObject, ISWbemServices};
+// extern RPC_IF_HANDLE __MIDL_itf_wbemads_0000_0000_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemads_0000_0000_v0_0_s_ifspec;
+// EXTERN_C const IID LIBID_WMIEXTENSIONLib;
+// EXTERN_C const IID IID_IWMIExtension;
+DEFINE_GUID!{IID_IWMIExtension,
+ 0xadc1f06e, 0x5c7e, 0x11d2, 0x8b, 0x74, 0x00, 0x10, 0x4b, 0x2a, 0xfb, 0x41}
+RIDL!{#[uuid(0xadc1f06e, 0x5c7e, 0x11d2, 0x8b, 0x74, 0x00, 0x10, 0x4b, 0x2a, 0xfb, 0x41)]
+interface IWMIExtension(IWMIExtensionVtbl): IDispatch(IDispatchVtbl) {
+ fn get_WMIObjectPath(
+ strWMIObjectPath: *mut BSTR,
+ ) -> HRESULT,
+ fn GetWMIObject(
+ objWMIObject: *mut *mut ISWbemObject,
+ ) -> HRESULT,
+ fn GetWMIServices(
+ objWMIServices: *mut *mut ISWbemServices,
+ ) -> HRESULT,
+}}
+DEFINE_GUID!{CLSID_WMIExtension,
+ 0xf0975afe, 0x5c7f, 0x11d2, 0x8b, 0x74, 0x00, 0x10, 0x4b, 0x2a, 0xfb, 0x41}
+// class DECLSPEC_UUID("f0975afe-5c7f-11d2-8b74-00104b2afb41")
+// WMIExtension;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemads_0000_0002_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemads_0000_0002_v0_0_s_ifspec;
+// unsigned long __RPC_USER BSTR_UserSize( __RPC__in unsigned long *, unsigned long , __RPC__in BSTR * );
+// unsigned char * __RPC_USER BSTR_UserMarshal( __RPC__in unsigned long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in BSTR * );
+// unsigned char * __RPC_USER BSTR_UserUnmarshal(__RPC__in unsigned long *, __RPC__in_xcount(0) unsigned char *, __RPC__out BSTR * );
+// void __RPC_USER BSTR_UserFree( __RPC__in unsigned long *, __RPC__in BSTR * );
+// unsigned long __RPC_USER BSTR_UserSize64( __RPC__in unsigned long *, unsigned long , __RPC__in BSTR * );
+// unsigned char * __RPC_USER BSTR_UserMarshal64( __RPC__in unsigned long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in BSTR * );
+// unsigned char * __RPC_USER BSTR_UserUnmarshal64(__RPC__in unsigned long *, __RPC__in_xcount(0) unsigned char *, __RPC__out BSTR * );
+// void __RPC_USER BSTR_UserFree64( __RPC__in unsigned long *, __RPC__in BSTR * );
diff --git a/vendor/winapi/src/um/wbemcli.rs b/vendor/winapi/src/um/wbemcli.rs
new file mode 100644
index 000000000..9320a80e4
--- /dev/null
+++ b/vendor/winapi/src/um/wbemcli.rs
@@ -0,0 +1,1174 @@
+// 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 ctypes::{__uint64, c_long, c_uchar};
+use shared::minwindef::{BYTE, DWORD, ULONG};
+use shared::rpcndr::byte;
+use shared::winerror::HRESULT;
+use shared::wtypes::BSTR;
+use um::oaidl::{SAFEARRAY, VARIANT};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{LCID, LONG, LPCWSTR, LPWSTR};
+// extern RPC_IF_HANDLE __MIDL_itf_wbemcli_0000_0000_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemcli_0000_0000_v0_0_s_ifspec;
+ENUM!{enum WBEM_GENUS_TYPE {
+ WBEM_GENUS_CLASS = 1,
+ WBEM_GENUS_INSTANCE = 2,
+}}
+ENUM!{enum WBEM_CHANGE_FLAG_TYPE {
+ WBEM_FLAG_CREATE_OR_UPDATE = 0,
+ WBEM_FLAG_UPDATE_ONLY = 0x1,
+ WBEM_FLAG_CREATE_ONLY = 0x2,
+ WBEM_FLAG_UPDATE_COMPATIBLE = 0,
+ WBEM_FLAG_UPDATE_SAFE_MODE = 0x20,
+ WBEM_FLAG_UPDATE_FORCE_MODE = 0x40,
+ WBEM_MASK_UPDATE_MODE = 0x60,
+ WBEM_FLAG_ADVISORY = 0x10000,
+}}
+ENUM!{enum WBEM_GENERIC_FLAG_TYPE {
+ WBEM_FLAG_RETURN_IMMEDIATELY = 0x10,
+ WBEM_FLAG_RETURN_WBEM_COMPLETE = 0,
+ WBEM_FLAG_BIDIRECTIONAL = 0,
+ WBEM_FLAG_FORWARD_ONLY = 0x20,
+ WBEM_FLAG_NO_ERROR_OBJECT = 0x40,
+ WBEM_FLAG_RETURN_ERROR_OBJECT = 0,
+ WBEM_FLAG_SEND_STATUS = 0x80,
+ WBEM_FLAG_DONT_SEND_STATUS = 0,
+ WBEM_FLAG_ENSURE_LOCATABLE = 0x100,
+ WBEM_FLAG_DIRECT_READ = 0x200,
+ WBEM_FLAG_SEND_ONLY_SELECTED = 0,
+ WBEM_RETURN_WHEN_COMPLETE = 0,
+ WBEM_RETURN_IMMEDIATELY = 0x10,
+ WBEM_MASK_RESERVED_FLAGS = 0x1f000,
+ WBEM_FLAG_USE_AMENDED_QUALIFIERS = 0x20000,
+ WBEM_FLAG_STRONG_VALIDATION = 0x100000,
+}}
+ENUM!{enum WBEM_STATUS_TYPE {
+ WBEM_STATUS_COMPLETE = 0,
+ WBEM_STATUS_REQUIREMENTS = 1,
+ WBEM_STATUS_PROGRESS = 2,
+ WBEM_STATUS_LOGGING_INFORMATION = 0x100,
+ WBEM_STATUS_LOGGING_INFORMATION_PROVIDER = 0x200,
+ WBEM_STATUS_LOGGING_INFORMATION_HOST = 0x400,
+ WBEM_STATUS_LOGGING_INFORMATION_REPOSITORY = 0x800,
+ WBEM_STATUS_LOGGING_INFORMATION_ESS = 0x1000,
+}}
+ENUM!{enum WBEM_TIMEOUT_TYPE {
+ WBEM_NO_WAIT = 0,
+ WBEM_INFINITE = 0xffffffff,
+}}
+ENUM!{enum WBEM_CONDITION_FLAG_TYPE {
+ WBEM_FLAG_ALWAYS = 0,
+ WBEM_FLAG_ONLY_IF_TRUE = 0x1,
+ WBEM_FLAG_ONLY_IF_FALSE = 0x2,
+ WBEM_FLAG_ONLY_IF_IDENTICAL = 0x3,
+ WBEM_MASK_PRIMARY_CONDITION = 0x3,
+ WBEM_FLAG_KEYS_ONLY = 0x4,
+ WBEM_FLAG_REFS_ONLY = 0x8,
+ WBEM_FLAG_LOCAL_ONLY = 0x10,
+ WBEM_FLAG_PROPAGATED_ONLY = 0x20,
+ WBEM_FLAG_SYSTEM_ONLY = 0x30,
+ WBEM_FLAG_NONSYSTEM_ONLY = 0x40,
+ WBEM_MASK_CONDITION_ORIGIN = 0x70,
+ WBEM_FLAG_CLASS_OVERRIDES_ONLY = 0x100,
+ WBEM_FLAG_CLASS_LOCAL_AND_OVERRIDES = 0x200,
+ WBEM_MASK_CLASS_CONDITION = 0x300,
+}}
+ENUM!{enum WBEM_FLAVOR_TYPE {
+ WBEM_FLAVOR_DONT_PROPAGATE = 0,
+ WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE = 0x1,
+ WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS = 0x2,
+ WBEM_FLAVOR_MASK_PROPAGATION = 0xf,
+ WBEM_FLAVOR_OVERRIDABLE = 0,
+ WBEM_FLAVOR_NOT_OVERRIDABLE = 0x10,
+ WBEM_FLAVOR_MASK_PERMISSIONS = 0x10,
+ WBEM_FLAVOR_ORIGIN_LOCAL = 0,
+ WBEM_FLAVOR_ORIGIN_PROPAGATED = 0x20,
+ WBEM_FLAVOR_ORIGIN_SYSTEM = 0x40,
+ WBEM_FLAVOR_MASK_ORIGIN = 0x60,
+ WBEM_FLAVOR_NOT_AMENDED = 0,
+ WBEM_FLAVOR_AMENDED = 0x80,
+ WBEM_FLAVOR_MASK_AMENDED = 0x80,
+}}
+ENUM!{enum WBEM_QUERY_FLAG_TYPE {
+ WBEM_FLAG_DEEP = 0,
+ WBEM_FLAG_SHALLOW = 1,
+ WBEM_FLAG_PROTOTYPE = 2,
+}}
+ENUM!{enum WBEM_SECURITY_FLAGS {
+ WBEM_ENABLE = 1,
+ WBEM_METHOD_EXECUTE = 2,
+ WBEM_FULL_WRITE_REP = 4,
+ WBEM_PARTIAL_WRITE_REP = 8,
+ WBEM_WRITE_PROVIDER = 0x10,
+ WBEM_REMOTE_ACCESS = 0x20,
+ WBEM_RIGHT_SUBSCRIBE = 0x40,
+ WBEM_RIGHT_PUBLISH = 0x80,
+}}
+ENUM!{enum WBEM_LIMITATION_FLAG_TYPE {
+ WBEM_FLAG_EXCLUDE_OBJECT_QUALIFIERS = 0x10,
+ WBEM_FLAG_EXCLUDE_PROPERTY_QUALIFIERS = 0x20,
+}}
+ENUM!{enum WBEM_TEXT_FLAG_TYPE {
+ WBEM_FLAG_NO_FLAVORS = 0x1,
+}}
+ENUM!{enum WBEM_COMPARISON_FLAG {
+ WBEM_COMPARISON_INCLUDE_ALL = 0,
+ WBEM_FLAG_IGNORE_QUALIFIERS = 0x1,
+ WBEM_FLAG_IGNORE_OBJECT_SOURCE = 0x2,
+ WBEM_FLAG_IGNORE_DEFAULT_VALUES = 0x4,
+ WBEM_FLAG_IGNORE_CLASS = 0x8,
+ WBEM_FLAG_IGNORE_CASE = 0x10,
+ WBEM_FLAG_IGNORE_FLAVOR = 0x20,
+}}
+ENUM!{enum WBEM_LOCKING_FLAG_TYPE {
+ WBEM_FLAG_ALLOW_READ = 0x1,
+}}
+ENUM!{enum CIMTYPE_ENUMERATION {
+ CIM_ILLEGAL = 0xfff,
+ CIM_EMPTY = 0,
+ CIM_SINT8 = 16,
+ CIM_UINT8 = 17,
+ CIM_SINT16 = 2,
+ CIM_UINT16 = 18,
+ CIM_SINT32 = 3,
+ CIM_UINT32 = 19,
+ CIM_SINT64 = 20,
+ CIM_UINT64 = 21,
+ CIM_REAL32 = 4,
+ CIM_REAL64 = 5,
+ CIM_BOOLEAN = 11,
+ CIM_STRING = 8,
+ CIM_DATETIME = 101,
+ CIM_REFERENCE = 102,
+ CIM_CHAR16 = 103,
+ CIM_OBJECT = 13,
+ CIM_FLAG_ARRAY = 0x2000,
+}}
+ENUM!{enum WBEM_BACKUP_RESTORE_FLAGS {
+ WBEM_FLAG_BACKUP_RESTORE_DEFAULT = 0,
+ WBEM_FLAG_BACKUP_RESTORE_FORCE_SHUTDOWN = 1,
+}}
+ENUM!{enum WBEM_REFRESHER_FLAGS {
+ WBEM_FLAG_REFRESH_AUTO_RECONNECT = 0,
+ WBEM_FLAG_REFRESH_NO_AUTO_RECONNECT = 1,
+}}
+ENUM!{enum WBEM_SHUTDOWN_FLAGS {
+ WBEM_SHUTDOWN_UNLOAD_COMPONENT = 1,
+ WBEM_SHUTDOWN_WMI = 2,
+ WBEM_SHUTDOWN_OS = 3,
+}}
+pub type CIMTYPE = c_long;
+ENUM!{enum WBEMSTATUS_FORMAT {
+ WBEMSTATUS_FORMAT_NEWLINE = 0,
+ WBEMSTATUS_FORMAT_NO_NEWLINE = 1,
+}}
+ENUM!{enum WBEM_LIMITS {
+ WBEM_MAX_IDENTIFIER = 0x1000,
+ WBEM_MAX_QUERY = 0x4000,
+ WBEM_MAX_PATH = 0x2000,
+ WBEM_MAX_OBJECT_NESTING = 64,
+ WBEM_MAX_USER_PROPERTIES = 1024,
+}}
+ENUM!{enum WBEMSTATUS {
+ WBEM_NO_ERROR = 0,
+ WBEM_S_NO_ERROR = 0,
+ WBEM_S_SAME = 0,
+ WBEM_S_FALSE = 1,
+ WBEM_S_ALREADY_EXISTS = 0x40001,
+ WBEM_S_RESET_TO_DEFAULT = 0x40002,
+ WBEM_S_DIFFERENT = 0x40003,
+ WBEM_S_TIMEDOUT = 0x40004,
+ WBEM_S_NO_MORE_DATA = 0x40005,
+ WBEM_S_OPERATION_CANCELLED = 0x40006,
+ WBEM_S_PENDING = 0x40007,
+ WBEM_S_DUPLICATE_OBJECTS = 0x40008,
+ WBEM_S_ACCESS_DENIED = 0x40009,
+ WBEM_S_PARTIAL_RESULTS = 0x40010,
+ WBEM_S_SOURCE_NOT_AVAILABLE = 0x40017,
+ WBEM_E_FAILED = 0x80041001,
+ WBEM_E_NOT_FOUND = 0x80041002,
+ WBEM_E_ACCESS_DENIED = 0x80041003,
+ WBEM_E_PROVIDER_FAILURE = 0x80041004,
+ WBEM_E_TYPE_MISMATCH = 0x80041005,
+ WBEM_E_OUT_OF_MEMORY = 0x80041006,
+ WBEM_E_INVALID_CONTEXT = 0x80041007,
+ WBEM_E_INVALID_PARAMETER = 0x80041008,
+ WBEM_E_NOT_AVAILABLE = 0x80041009,
+ WBEM_E_CRITICAL_ERROR = 0x8004100a,
+ WBEM_E_INVALID_STREAM = 0x8004100b,
+ WBEM_E_NOT_SUPPORTED = 0x8004100c,
+ WBEM_E_INVALID_SUPERCLASS = 0x8004100d,
+ WBEM_E_INVALID_NAMESPACE = 0x8004100e,
+ WBEM_E_INVALID_OBJECT = 0x8004100f,
+ WBEM_E_INVALID_CLASS = 0x80041010,
+ WBEM_E_PROVIDER_NOT_FOUND = 0x80041011,
+ WBEM_E_INVALID_PROVIDER_REGISTRATION = 0x80041012,
+ WBEM_E_PROVIDER_LOAD_FAILURE = 0x80041013,
+ WBEM_E_INITIALIZATION_FAILURE = 0x80041014,
+ WBEM_E_TRANSPORT_FAILURE = 0x80041015,
+ WBEM_E_INVALID_OPERATION = 0x80041016,
+ WBEM_E_INVALID_QUERY = 0x80041017,
+ WBEM_E_INVALID_QUERY_TYPE = 0x80041018,
+ WBEM_E_ALREADY_EXISTS = 0x80041019,
+ WBEM_E_OVERRIDE_NOT_ALLOWED = 0x8004101a,
+ WBEM_E_PROPAGATED_QUALIFIER = 0x8004101b,
+ WBEM_E_PROPAGATED_PROPERTY = 0x8004101c,
+ WBEM_E_UNEXPECTED = 0x8004101d,
+ WBEM_E_ILLEGAL_OPERATION = 0x8004101e,
+ WBEM_E_CANNOT_BE_KEY = 0x8004101f,
+ WBEM_E_INCOMPLETE_CLASS = 0x80041020,
+ WBEM_E_INVALID_SYNTAX = 0x80041021,
+ WBEM_E_NONDECORATED_OBJECT = 0x80041022,
+ WBEM_E_READ_ONLY = 0x80041023,
+ WBEM_E_PROVIDER_NOT_CAPABLE = 0x80041024,
+ WBEM_E_CLASS_HAS_CHILDREN = 0x80041025,
+ WBEM_E_CLASS_HAS_INSTANCES = 0x80041026,
+ WBEM_E_QUERY_NOT_IMPLEMENTED = 0x80041027,
+ WBEM_E_ILLEGAL_NULL = 0x80041028,
+ WBEM_E_INVALID_QUALIFIER_TYPE = 0x80041029,
+ WBEM_E_INVALID_PROPERTY_TYPE = 0x8004102a,
+ WBEM_E_VALUE_OUT_OF_RANGE = 0x8004102b,
+ WBEM_E_CANNOT_BE_SINGLETON = 0x8004102c,
+ WBEM_E_INVALID_CIM_TYPE = 0x8004102d,
+ WBEM_E_INVALID_METHOD = 0x8004102e,
+ WBEM_E_INVALID_METHOD_PARAMETERS = 0x8004102f,
+ WBEM_E_SYSTEM_PROPERTY = 0x80041030,
+ WBEM_E_INVALID_PROPERTY = 0x80041031,
+ WBEM_E_CALL_CANCELLED = 0x80041032,
+ WBEM_E_SHUTTING_DOWN = 0x80041033,
+ WBEM_E_PROPAGATED_METHOD = 0x80041034,
+ WBEM_E_UNSUPPORTED_PARAMETER = 0x80041035,
+ WBEM_E_MISSING_PARAMETER_ID = 0x80041036,
+ WBEM_E_INVALID_PARAMETER_ID = 0x80041037,
+ WBEM_E_NONCONSECUTIVE_PARAMETER_IDS = 0x80041038,
+ WBEM_E_PARAMETER_ID_ON_RETVAL = 0x80041039,
+ WBEM_E_INVALID_OBJECT_PATH = 0x8004103a,
+ WBEM_E_OUT_OF_DISK_SPACE = 0x8004103b,
+ WBEM_E_BUFFER_TOO_SMALL = 0x8004103c,
+ WBEM_E_UNSUPPORTED_PUT_EXTENSION = 0x8004103d,
+ WBEM_E_UNKNOWN_OBJECT_TYPE = 0x8004103e,
+ WBEM_E_UNKNOWN_PACKET_TYPE = 0x8004103f,
+ WBEM_E_MARSHAL_VERSION_MISMATCH = 0x80041040,
+ WBEM_E_MARSHAL_INVALID_SIGNATURE = 0x80041041,
+ WBEM_E_INVALID_QUALIFIER = 0x80041042,
+ WBEM_E_INVALID_DUPLICATE_PARAMETER = 0x80041043,
+ WBEM_E_TOO_MUCH_DATA = 0x80041044,
+ WBEM_E_SERVER_TOO_BUSY = 0x80041045,
+ WBEM_E_INVALID_FLAVOR = 0x80041046,
+ WBEM_E_CIRCULAR_REFERENCE = 0x80041047,
+ WBEM_E_UNSUPPORTED_CLASS_UPDATE = 0x80041048,
+ WBEM_E_CANNOT_CHANGE_KEY_INHERITANCE = 0x80041049,
+ WBEM_E_CANNOT_CHANGE_INDEX_INHERITANCE = 0x80041050,
+ WBEM_E_TOO_MANY_PROPERTIES = 0x80041051,
+ WBEM_E_UPDATE_TYPE_MISMATCH = 0x80041052,
+ WBEM_E_UPDATE_OVERRIDE_NOT_ALLOWED = 0x80041053,
+ WBEM_E_UPDATE_PROPAGATED_METHOD = 0x80041054,
+ WBEM_E_METHOD_NOT_IMPLEMENTED = 0x80041055,
+ WBEM_E_METHOD_DISABLED = 0x80041056,
+ WBEM_E_REFRESHER_BUSY = 0x80041057,
+ WBEM_E_UNPARSABLE_QUERY = 0x80041058,
+ WBEM_E_NOT_EVENT_CLASS = 0x80041059,
+ WBEM_E_MISSING_GROUP_WITHIN = 0x8004105a,
+ WBEM_E_MISSING_AGGREGATION_LIST = 0x8004105b,
+ WBEM_E_PROPERTY_NOT_AN_OBJECT = 0x8004105c,
+ WBEM_E_AGGREGATING_BY_OBJECT = 0x8004105d,
+ WBEM_E_UNINTERPRETABLE_PROVIDER_QUERY = 0x8004105f,
+ WBEM_E_BACKUP_RESTORE_WINMGMT_RUNNING = 0x80041060,
+ WBEM_E_QUEUE_OVERFLOW = 0x80041061,
+ WBEM_E_PRIVILEGE_NOT_HELD = 0x80041062,
+ WBEM_E_INVALID_OPERATOR = 0x80041063,
+ WBEM_E_LOCAL_CREDENTIALS = 0x80041064,
+ WBEM_E_CANNOT_BE_ABSTRACT = 0x80041065,
+ WBEM_E_AMENDED_OBJECT = 0x80041066,
+ WBEM_E_CLIENT_TOO_SLOW = 0x80041067,
+ WBEM_E_NULL_SECURITY_DESCRIPTOR = 0x80041068,
+ WBEM_E_TIMED_OUT = 0x80041069,
+ WBEM_E_INVALID_ASSOCIATION = 0x8004106a,
+ WBEM_E_AMBIGUOUS_OPERATION = 0x8004106b,
+ WBEM_E_QUOTA_VIOLATION = 0x8004106c,
+ WBEM_E_RESERVED_001 = 0x8004106d,
+ WBEM_E_RESERVED_002 = 0x8004106e,
+ WBEM_E_UNSUPPORTED_LOCALE = 0x8004106f,
+ WBEM_E_HANDLE_OUT_OF_DATE = 0x80041070,
+ WBEM_E_CONNECTION_FAILED = 0x80041071,
+ WBEM_E_INVALID_HANDLE_REQUEST = 0x80041072,
+ WBEM_E_PROPERTY_NAME_TOO_WIDE = 0x80041073,
+ WBEM_E_CLASS_NAME_TOO_WIDE = 0x80041074,
+ WBEM_E_METHOD_NAME_TOO_WIDE = 0x80041075,
+ WBEM_E_QUALIFIER_NAME_TOO_WIDE = 0x80041076,
+ WBEM_E_RERUN_COMMAND = 0x80041077,
+ WBEM_E_DATABASE_VER_MISMATCH = 0x80041078,
+ WBEM_E_VETO_DELETE = 0x80041079,
+ WBEM_E_VETO_PUT = 0x8004107a,
+ WBEM_E_INVALID_LOCALE = 0x80041080,
+ WBEM_E_PROVIDER_SUSPENDED = 0x80041081,
+ WBEM_E_SYNCHRONIZATION_REQUIRED = 0x80041082,
+ WBEM_E_NO_SCHEMA = 0x80041083,
+ WBEM_E_PROVIDER_ALREADY_REGISTERED = 0x80041084,
+ WBEM_E_PROVIDER_NOT_REGISTERED = 0x80041085,
+ WBEM_E_FATAL_TRANSPORT_ERROR = 0x80041086,
+ WBEM_E_ENCRYPTED_CONNECTION_REQUIRED = 0x80041087,
+ WBEM_E_PROVIDER_TIMED_OUT = 0x80041088,
+ WBEM_E_NO_KEY = 0x80041089,
+ WBEM_E_PROVIDER_DISABLED = 0x8004108a,
+ WBEMESS_E_REGISTRATION_TOO_BROAD = 0x80042001,
+ WBEMESS_E_REGISTRATION_TOO_PRECISE = 0x80042002,
+ WBEMESS_E_AUTHZ_NOT_PRIVILEGED = 0x80042003,
+ WBEMMOF_E_EXPECTED_QUALIFIER_NAME = 0x80044001,
+ WBEMMOF_E_EXPECTED_SEMI = 0x80044002,
+ WBEMMOF_E_EXPECTED_OPEN_BRACE = 0x80044003,
+ WBEMMOF_E_EXPECTED_CLOSE_BRACE = 0x80044004,
+ WBEMMOF_E_EXPECTED_CLOSE_BRACKET = 0x80044005,
+ WBEMMOF_E_EXPECTED_CLOSE_PAREN = 0x80044006,
+ WBEMMOF_E_ILLEGAL_CONSTANT_VALUE = 0x80044007,
+ WBEMMOF_E_EXPECTED_TYPE_IDENTIFIER = 0x80044008,
+ WBEMMOF_E_EXPECTED_OPEN_PAREN = 0x80044009,
+ WBEMMOF_E_UNRECOGNIZED_TOKEN = 0x8004400a,
+ WBEMMOF_E_UNRECOGNIZED_TYPE = 0x8004400b,
+ WBEMMOF_E_EXPECTED_PROPERTY_NAME = 0x8004400c,
+ WBEMMOF_E_TYPEDEF_NOT_SUPPORTED = 0x8004400d,
+ WBEMMOF_E_UNEXPECTED_ALIAS = 0x8004400e,
+ WBEMMOF_E_UNEXPECTED_ARRAY_INIT = 0x8004400f,
+ WBEMMOF_E_INVALID_AMENDMENT_SYNTAX = 0x80044010,
+ WBEMMOF_E_INVALID_DUPLICATE_AMENDMENT = 0x80044011,
+ WBEMMOF_E_INVALID_PRAGMA = 0x80044012,
+ WBEMMOF_E_INVALID_NAMESPACE_SYNTAX = 0x80044013,
+ WBEMMOF_E_EXPECTED_CLASS_NAME = 0x80044014,
+ WBEMMOF_E_TYPE_MISMATCH = 0x80044015,
+ WBEMMOF_E_EXPECTED_ALIAS_NAME = 0x80044016,
+ WBEMMOF_E_INVALID_CLASS_DECLARATION = 0x80044017,
+ WBEMMOF_E_INVALID_INSTANCE_DECLARATION = 0x80044018,
+ WBEMMOF_E_EXPECTED_DOLLAR = 0x80044019,
+ WBEMMOF_E_CIMTYPE_QUALIFIER = 0x8004401a,
+ WBEMMOF_E_DUPLICATE_PROPERTY = 0x8004401b,
+ WBEMMOF_E_INVALID_NAMESPACE_SPECIFICATION = 0x8004401c,
+ WBEMMOF_E_OUT_OF_RANGE = 0x8004401d,
+ WBEMMOF_E_INVALID_FILE = 0x8004401e,
+ WBEMMOF_E_ALIASES_IN_EMBEDDED = 0x8004401f,
+ WBEMMOF_E_NULL_ARRAY_ELEM = 0x80044020,
+ WBEMMOF_E_DUPLICATE_QUALIFIER = 0x80044021,
+ WBEMMOF_E_EXPECTED_FLAVOR_TYPE = 0x80044022,
+ WBEMMOF_E_INCOMPATIBLE_FLAVOR_TYPES = 0x80044023,
+ WBEMMOF_E_MULTIPLE_ALIASES = 0x80044024,
+ WBEMMOF_E_INCOMPATIBLE_FLAVOR_TYPES2 = 0x80044025,
+ WBEMMOF_E_NO_ARRAYS_RETURNED = 0x80044026,
+ WBEMMOF_E_MUST_BE_IN_OR_OUT = 0x80044027,
+ WBEMMOF_E_INVALID_FLAGS_SYNTAX = 0x80044028,
+ WBEMMOF_E_EXPECTED_BRACE_OR_BAD_TYPE = 0x80044029,
+ WBEMMOF_E_UNSUPPORTED_CIMV22_QUAL_VALUE = 0x8004402a,
+ WBEMMOF_E_UNSUPPORTED_CIMV22_DATA_TYPE = 0x8004402b,
+ WBEMMOF_E_INVALID_DELETEINSTANCE_SYNTAX = 0x8004402c,
+ WBEMMOF_E_INVALID_QUALIFIER_SYNTAX = 0x8004402d,
+ WBEMMOF_E_QUALIFIER_USED_OUTSIDE_SCOPE = 0x8004402e,
+ WBEMMOF_E_ERROR_CREATING_TEMP_FILE = 0x8004402f,
+ WBEMMOF_E_ERROR_INVALID_INCLUDE_FILE = 0x80044030,
+ WBEMMOF_E_INVALID_DELETECLASS_SYNTAX = 0x80044031,
+}}
+// EXTERN_C const IID LIBID_WbemClient_v1;
+// EXTERN_C const IID IID_IWbemClassObject;
+DEFINE_GUID!{IID_IWbemClassObject,
+ 0xdc12a681, 0x737f, 0x11cf, 0x88, 0x4d, 0x00, 0xaa, 0x00, 0x4b, 0x2e, 0x24}
+RIDL!{#[uuid(0xdc12a681, 0x737f, 0x11cf, 0x88, 0x4d, 0x00, 0xaa, 0x00, 0x4b, 0x2e, 0x24)]
+interface IWbemClassObject(IWbemClassObjectVtbl): IUnknown(IUnknownVtbl) {
+ fn GetQualifierSet(
+ ppQualSet: *mut *mut IWbemQualifierSet,
+ ) -> HRESULT,
+ fn Get(
+ wszName: LPCWSTR,
+ lFlags: c_long,
+ pVal: *mut VARIANT,
+ pType: *mut CIMTYPE,
+ plFlavor: *mut c_long,
+ ) -> HRESULT,
+ fn Put(
+ wszName: LPCWSTR,
+ lFlags: c_long,
+ pVal: *mut VARIANT,
+ Type: CIMTYPE,
+ ) -> HRESULT,
+ fn Delete(
+ wszName: LPCWSTR,
+ ) -> HRESULT,
+ fn GetNames(
+ wszQualifierName: LPCWSTR,
+ lFlags: c_long,
+ pQualifierVal: *mut VARIANT,
+ pNames: *mut *mut SAFEARRAY,
+ ) -> HRESULT,
+ fn BeginEnumeration(
+ lEnumFlags: c_long,
+ ) -> HRESULT,
+ fn Next(
+ lFlags: c_long,
+ strName: *mut BSTR,
+ pVal: *mut VARIANT,
+ pType: *mut CIMTYPE,
+ plFlavor: *mut c_long,
+ ) -> HRESULT,
+ fn EndEnumeration() -> HRESULT,
+ fn GetPropertyQualifierSet(
+ wszProperty: LPCWSTR,
+ ppQualSet: *mut *mut IWbemQualifierSet,
+ ) -> HRESULT,
+ fn Clone(
+ ppCopy: *mut *mut IWbemClassObject,
+ ) -> HRESULT,
+ fn GetObjectText(
+ lFlags: c_long,
+ pstrObjectText: *mut BSTR,
+ ) -> HRESULT,
+ fn SpawnDerivedClass(
+ lFlags: c_long,
+ ppNewClass: *mut *mut IWbemClassObject,
+ ) -> HRESULT,
+ fn SpawnInstance(
+ lFlags: c_long,
+ ppNewInstance: *mut *mut IWbemClassObject,
+ ) -> HRESULT,
+ fn CompareTo(
+ lFlags: c_long,
+ pCompareTo: *mut IWbemClassObject,
+ ) -> HRESULT,
+ fn GetPropertyOrigin(
+ wszName: LPCWSTR,
+ pstrClassName: *mut BSTR,
+ ) -> HRESULT,
+ fn InheritsFrom(
+ strAncestor: LPCWSTR,
+ ) -> HRESULT,
+ fn GetMethod(
+ wszName: LPCWSTR,
+ lFlags: c_long,
+ ppInSignature: *mut *mut IWbemClassObject,
+ ppOutSignature: *mut *mut IWbemClassObject,
+ ) -> HRESULT,
+ fn PutMethod(
+ wszName: LPCWSTR,
+ lFlags: c_long,
+ pInSignature: *mut IWbemClassObject,
+ pOutSignature: *mut IWbemClassObject,
+ ) -> HRESULT,
+ fn DeleteMethod(
+ wszName: LPCWSTR,
+ ) -> HRESULT,
+ fn BeginMethodEnumeration(
+ lEnumFlags: c_long,
+ ) -> HRESULT,
+ fn NextMethod(
+ lFlags: c_long,
+ pstrName: *mut BSTR,
+ ppInSignature: *mut *mut IWbemClassObject,
+ ppOutSignature: *mut *mut IWbemClassObject,
+ ) -> HRESULT,
+ fn EndMethodEnumeration() -> HRESULT,
+ fn GetMethodQualifierSet(
+ wszMethod: LPCWSTR,
+ ppQualSet: *mut *mut IWbemQualifierSet,
+ ) -> HRESULT,
+ fn GetMethodOrigin(
+ wszMethodName: LPCWSTR,
+ pstrClassName: *mut BSTR,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemObjectAccess;
+DEFINE_GUID!{IID_IWbemObjectAccess,
+ 0x49353c9a, 0x516b, 0x11d1, 0xae, 0xa6, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20}
+RIDL!{#[uuid(0x49353c9a, 0x516b, 0x11d1, 0xae, 0xa6, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20)]
+interface IWbemObjectAccess(IWbemObjectAccessVtbl): IWbemClassObject(IWbemClassObjectVtbl) {
+ fn GetPropertyHandle(
+ wszPropertyName: LPCWSTR,
+ pType: *mut CIMTYPE,
+ plHandle: *mut c_long,
+ ) -> HRESULT,
+ fn WritePropertyValue(
+ lHandle: c_long,
+ lNumBytes: c_long,
+ aData: *const byte,
+ ) -> HRESULT,
+ fn ReadPropertyValue(
+ lHandle: c_long,
+ lBufferSize: c_long,
+ plNumBytes: *mut c_long,
+ aData: *mut byte,
+ ) -> HRESULT,
+ fn ReadDWORD(
+ lHandle: c_long,
+ pdw: *mut DWORD,
+ ) -> HRESULT,
+ fn WriteDWORD(
+ lHandle: c_long,
+ dw: DWORD,
+ ) -> HRESULT,
+ fn ReadQWORD(
+ lHandle: c_long,
+ pqw: *mut __uint64,
+ ) -> HRESULT,
+ fn WriteQWORD(
+ lHandle: c_long,
+ pw: __uint64,
+ ) -> HRESULT,
+ fn GetPropertyInfoByHandle(
+ lHandle: c_long,
+ pstrName: *mut BSTR,
+ pType: *mut CIMTYPE,
+ ) -> HRESULT,
+ fn Lock(
+ lFlags: c_long,
+ ) -> HRESULT,
+ fn Unlock(
+ lFlags: c_long,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemQualifierSet;
+DEFINE_GUID!{IID_IWbemQualifierSet,
+ 0xdc12a680, 0x737f, 0x11cf, 0x88, 0x4d, 0x00, 0xaa, 0x00, 0x4b, 0x2e, 0x24}
+RIDL!{#[uuid(0xdc12a680, 0x737f, 0x11cf, 0x88, 0x4d, 0x00, 0xaa, 0x00, 0x4b, 0x2e, 0x24)]
+interface IWbemQualifierSet(IWbemQualifierSetVtbl): IUnknown(IUnknownVtbl) {
+ fn Get(
+ wszName: LPCWSTR,
+ lFlags: c_long,
+ pVal: *mut VARIANT,
+ plFlavor: *mut c_long,
+ ) -> HRESULT,
+ fn Put(
+ wszName: LPCWSTR,
+ pVal: *mut VARIANT,
+ lFlavor: c_long,
+ ) -> HRESULT,
+ fn Delete(
+ wszName: LPCWSTR,
+ ) -> HRESULT,
+ fn GetNames(
+ lFlags: c_long,
+ pNames: *mut *mut SAFEARRAY,
+ ) -> HRESULT,
+ fn BeginEnumeration(
+ lFlags: c_long,
+ ) -> HRESULT,
+ fn Next(
+ lFlags: c_long,
+ pstrName: *mut BSTR,
+ pVal: *mut VARIANT,
+ plFlavor: *mut c_long,
+ ) -> HRESULT,
+ fn EndEnumeration() -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemServices;
+DEFINE_GUID!{IID_IWbemServices,
+ 0x9556dc99, 0x828c, 0x11cf, 0xa3, 0x7e, 0x00, 0xaa, 0x00, 0x32, 0x40, 0xc7}
+RIDL!{#[uuid(0x9556dc99, 0x828c, 0x11cf, 0xa3, 0x7e, 0x00, 0xaa, 0x00, 0x32, 0x40, 0xc7)]
+interface IWbemServices(IWbemServicesVtbl): IUnknown(IUnknownVtbl) {
+ fn OpenNamespace(
+ strNamespace: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ ppWorkingNamespace: *mut *mut IWbemServices,
+ ppResult: *mut *mut IWbemCallResult,
+ ) -> HRESULT,
+ fn CancelAsyncCall(
+ pSink: *mut IWbemObjectSink,
+ ) -> HRESULT,
+ fn QueryObjectSink(
+ lFlags: c_long,
+ ppResponseHandler: *mut *mut IWbemObjectSink,
+ ) -> HRESULT,
+ fn GetObject(
+ strObjectPath: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ ppObject: *mut *mut IWbemClassObject,
+ ppCallResult: *mut *mut IWbemCallResult,
+ ) -> HRESULT,
+ fn GetObjectAsync(
+ strObjectPath: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ pResponseHandler: *mut IWbemObjectSink,
+ ) -> HRESULT,
+ fn PutClass(
+ pObject: *mut IWbemClassObject,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ ppCallResult: *mut *mut IWbemCallResult,
+ ) -> HRESULT,
+ fn PutClassAsync(
+ pObject: *mut IWbemClassObject,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ pResponseHandler: *mut IWbemObjectSink,
+ ) -> HRESULT,
+ fn DeleteClass(
+ strClass: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ ppCallResult: *mut *mut IWbemCallResult,
+ ) -> HRESULT,
+ fn DeleteClassAsync(
+ strClass: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ pResponseHandler: *mut IWbemObjectSink,
+ ) -> HRESULT,
+ fn CreateClassEnum(
+ strSuperclass: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ ppEnum: *mut *mut IEnumWbemClassObject,
+ ) -> HRESULT,
+ fn CreateClassEnumAsync(
+ strSuperclass: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ pResponseHandler: *mut IWbemObjectSink,
+ ) -> HRESULT,
+ fn PutInstance(
+ pInst: *mut IWbemClassObject,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ ppCallResult: *mut *mut IWbemCallResult,
+ ) -> HRESULT,
+ fn PutInstanceAsync(
+ pInst: *mut IWbemClassObject,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ pResponseHandler: *mut IWbemObjectSink,
+ ) -> HRESULT,
+ fn DeleteInstance(
+ strObjectPath: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ ppCallResult: *mut *mut IWbemCallResult,
+ ) -> HRESULT,
+ fn DeleteInstanceAsync(
+ strObjectPath: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ pResponseHandler: *mut IWbemObjectSink,
+ ) -> HRESULT,
+ fn CreateInstanceEnum(
+ strFilter: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ ppEnum: *mut *mut IEnumWbemClassObject,
+ ) -> HRESULT,
+ fn CreateInstanceEnumAsync(
+ strFilter: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ pResponseHandler: *mut IWbemObjectSink,
+ ) -> HRESULT,
+ fn ExecQuery(
+ strQueryLanguage: BSTR,
+ strQuery: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ ppEnum: *mut *mut IEnumWbemClassObject,
+ ) -> HRESULT,
+ fn ExecQueryAsync(
+ strQueryLanguage: BSTR,
+ strQuery: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ pResponseHandler: *mut IWbemObjectSink,
+ ) -> HRESULT,
+ fn ExecNotificationQuery(
+ strQueryLanguage: BSTR,
+ strQuery: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ ppEnum: *mut *mut IEnumWbemClassObject,
+ ) -> HRESULT,
+ fn ExecNotificationQueryAsync(
+ strQueryLanguage: BSTR,
+ strQuery: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ pResponseHandler: *mut IWbemObjectSink,
+ ) -> HRESULT,
+ fn ExecMethod(
+ strObjectPath: BSTR,
+ strMethodName: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ pInParams: *mut IWbemClassObject,
+ ppOutParams: *mut *mut IWbemClassObject,
+ ppCallResult: *mut *mut IWbemCallResult,
+ ) -> HRESULT,
+ fn ExecMethodAsync(
+ strObjectPath: BSTR,
+ strMethodName: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ pInParams: *mut IWbemClassObject,
+ pResponseHandler: *mut IWbemObjectSink,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemLocator;
+DEFINE_GUID!{IID_IWbemLocator,
+ 0xdc12a687, 0x737f, 0x11cf, 0x88, 0x4d, 0x00, 0xaa, 0x00, 0x4b, 0x2e, 0x24}
+RIDL!{#[uuid(0xdc12a687, 0x737f, 0x11cf, 0x88, 0x4d, 0x00, 0xaa, 0x00, 0x4b, 0x2e, 0x24)]
+interface IWbemLocator(IWbemLocatorVtbl): IUnknown(IUnknownVtbl) {
+ fn ConnectServer(
+ strNetworkResource: BSTR,
+ strUser: BSTR,
+ strPassword: BSTR,
+ strLocale: BSTR,
+ lSecurityFlags: c_long,
+ strAuthority: BSTR,
+ pCtx: *mut IWbemContext,
+ ppNamespace: *mut *mut IWbemServices,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemObjectSink;
+DEFINE_GUID!{IID_IWbemObjectSink,
+ 0x7c857801, 0x7381, 0x11cf, 0x88, 0x4d, 0x00, 0xaa, 0x00, 0x4b, 0x2e, 0x24}
+RIDL!{#[uuid(0x7c857801, 0x7381, 0x11cf, 0x88, 0x4d, 0x00, 0xaa, 0x00, 0x4b, 0x2e, 0x24)]
+interface IWbemObjectSink(IWbemObjectSinkVtbl): IUnknown(IUnknownVtbl) {
+ fn Indicate(
+ lObjectCount: c_long,
+ apObjArray: *mut *mut IWbemClassObject,
+ ) -> HRESULT,
+ fn SetStatus(
+ lFlags: c_long,
+ hResult: HRESULT,
+ strParam: BSTR,
+ pObjParam: *mut IWbemClassObject,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IEnumWbemClassObject;
+DEFINE_GUID!{IID_IEnumWbemClassObject,
+ 0x027947e1, 0xd731, 0x11ce, 0xa3, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}
+RIDL!{#[uuid(0x027947e1, 0xd731, 0x11ce, 0xa3, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01)]
+interface IEnumWbemClassObject(IEnumWbemClassObjectVtbl): IUnknown(IUnknownVtbl) {
+ fn Reset() -> HRESULT,
+ fn Next(
+ lTimeout: c_long,
+ uCount: ULONG,
+ apObjects: *mut *mut IWbemClassObject,
+ puReturned: *mut ULONG,
+ ) -> HRESULT,
+ fn NextAsync(
+ uCount: ULONG,
+ pSink: *mut IWbemObjectSink,
+ ) -> HRESULT,
+ fn Clone(
+ ppEnum: *mut *mut IEnumWbemClassObject,
+ ) -> HRESULT,
+ fn Skip(
+ lTimeout: c_long,
+ nCount: ULONG,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemCallResult;
+DEFINE_GUID!{IID_IWbemCallResult,
+ 0x44aca675, 0xe8fc, 0x11d0, 0xa0, 0x7c, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20}
+RIDL!{#[uuid(0x44aca675, 0xe8fc, 0x11d0, 0xa0, 0x7c, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20)]
+interface IWbemCallResult(IWbemCallResultVtbl): IUnknown(IUnknownVtbl) {
+ fn GetResultObject(
+ lTimeout: c_long,
+ ppResultObject: *mut *mut IWbemClassObject,
+ ) -> HRESULT,
+ fn GetResultString(
+ lTimeout: c_long,
+ pstrResultString: *mut BSTR,
+ ) -> HRESULT,
+ fn GetResultServices(
+ lTimeout: c_long,
+ ppServices: *mut *mut IWbemServices,
+ ) -> HRESULT,
+ fn GetCallStatus(
+ lTimeout: c_long,
+ plStatus: *mut c_long,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemContext;
+DEFINE_GUID!{IID_IWbemContext,
+ 0x44aca674, 0xe8fc, 0x11d0, 0xa0, 0x7c, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20}
+RIDL!{#[uuid(0x44aca674, 0xe8fc, 0x11d0, 0xa0, 0x7c, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20)]
+interface IWbemContext(IWbemContextVtbl): IUnknown(IUnknownVtbl) {
+ fn Clone(
+ ppNewCopy: *mut *mut IWbemContext,
+ ) -> HRESULT,
+ fn GetNames(
+ lFlags: c_long,
+ pNames: *mut *mut SAFEARRAY,
+ ) -> HRESULT,
+ fn BeginEnumeration(
+ lFlags: c_long,
+ ) -> HRESULT,
+ fn Next(
+ lFlags: c_long,
+ pstrName: *mut BSTR,
+ pValue: *mut VARIANT,
+ ) -> HRESULT,
+ fn EndEnumeration() -> HRESULT,
+ fn SetValue(
+ wszName: LPCWSTR,
+ lFlags: c_long,
+ pValue: *mut VARIANT,
+ ) -> HRESULT,
+ fn GetValue(
+ wszName: LPCWSTR,
+ lFlags: c_long,
+ pValue: *mut VARIANT,
+ ) -> HRESULT,
+ fn DeleteValue(
+ wszName: LPCWSTR,
+ lFlags: c_long,
+ ) -> HRESULT,
+ fn DeleteAll() -> HRESULT,
+}}
+// EXTERN_C const IID IID_IUnsecuredApartment;
+DEFINE_GUID!{IID_IUnsecuredApartment,
+ 0x1cfaba8c, 0x1523, 0x11d1, 0xad, 0x79, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff}
+RIDL!{#[uuid(0x1cfaba8c, 0x1523, 0x11d1, 0xad, 0x79, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff)]
+interface IUnsecuredApartment(IUnsecuredApartmentVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateObjectStub(
+ pObject: *mut IUnknown,
+ ppStub: *mut *mut IUnknown,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemUnsecuredApartment;
+DEFINE_GUID!{IID_IWbemUnsecuredApartment,
+ 0x31739d04, 0x3471, 0x4cf4, 0x9a, 0x7c, 0x57, 0xa4, 0x4a, 0xe7, 0x19, 0x56}
+RIDL!{#[uuid(0x31739d04, 0x3471, 0x4cf4, 0x9a, 0x7c, 0x57, 0xa4, 0x4a, 0xe7, 0x19, 0x56)]
+interface IWbemUnsecuredApartment(IWbemUnsecuredApartmentVtbl):
+IUnsecuredApartment(IUnsecuredApartmentVtbl) {
+ fn CreateSinkStub(
+ pSink: *mut IWbemObjectSink,
+ dwFlags: DWORD,
+ wszReserved: LPCWSTR,
+ ppStub: *mut *mut IWbemObjectSink,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemStatusCodeText;
+DEFINE_GUID!{IID_IWbemStatusCodeText,
+ 0xeb87e1bc, 0x3233, 0x11d2, 0xae, 0xc9, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20}
+RIDL!{#[uuid(0xeb87e1bc, 0x3233, 0x11d2, 0xae, 0xc9, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20)]
+interface IWbemStatusCodeText(IWbemStatusCodeTextVtbl): IUnknown(IUnknownVtbl) {
+ fn GetErrorCodeText(
+ hRes: HRESULT,
+ LocaleId: LCID,
+ lFlags: c_long,
+ MessageText: *mut BSTR,
+ ) -> HRESULT,
+ fn GetFacilityCodeText(
+ hRes: HRESULT,
+ LocaleId: LCID,
+ lFlags: c_long,
+ MessageText: *mut BSTR,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemBackupRestore;
+DEFINE_GUID!{IID_IWbemBackupRestore,
+ 0xc49e32c7, 0xbc8b, 0x11d2, 0x85, 0xd4, 0x00, 0x10, 0x5a, 0x1f, 0x83, 0x04}
+RIDL!{#[uuid(0xc49e32c7, 0xbc8b, 0x11d2, 0x85, 0xd4, 0x00, 0x10, 0x5a, 0x1f, 0x83, 0x04)]
+interface IWbemBackupRestore(IWbemBackupRestoreVtbl): IUnknown(IUnknownVtbl) {
+ fn Backup(
+ strBackupToFile: LPCWSTR,
+ lFlags: c_long,
+ ) -> HRESULT,
+ fn Restore(
+ strRestoreFromFile: LPCWSTR,
+ lFlags: c_long,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemBackupRestoreEx;
+DEFINE_GUID!{IID_IWbemBackupRestoreEx,
+ 0xa359dec5, 0xe813, 0x4834, 0x8a, 0x2a, 0xba, 0x7f, 0x1d, 0x77, 0x7d, 0x76}
+RIDL!{#[uuid(0xa359dec5, 0xe813, 0x4834, 0x8a, 0x2a, 0xba, 0x7f, 0x1d, 0x77, 0x7d, 0x76)]
+interface IWbemBackupRestoreEx(IWbemBackupRestoreExVtbl):
+IWbemBackupRestore(IWbemBackupRestoreVtbl) {
+ fn Pause() -> HRESULT,
+ fn Resume() -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemRefresher;
+DEFINE_GUID!{IID_IWbemRefresher,
+ 0x49353c99, 0x516b, 0x11d1, 0xae, 0xa6, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20}
+RIDL!{#[uuid(0x49353c99, 0x516b, 0x11d1, 0xae, 0xa6, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20)]
+interface IWbemRefresher(IWbemRefresherVtbl): IUnknown(IUnknownVtbl) {
+ fn Refresh(
+ lFlags: c_long,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemHiPerfEnum;
+DEFINE_GUID!{IID_IWbemHiPerfEnum,
+ 0x2705c288, 0x79ae, 0x11d2, 0xb3, 0x48, 0x00, 0x10, 0x5a, 0x1f, 0x81, 0x77}
+RIDL!{#[uuid(0x2705c288, 0x79ae, 0x11d2, 0xb3, 0x48, 0x00, 0x10, 0x5a, 0x1f, 0x81, 0x77)]
+interface IWbemHiPerfEnum(IWbemHiPerfEnumVtbl): IUnknown(IUnknownVtbl) {
+ fn AddObjects(
+ lFlags: c_long,
+ uNumObjects: ULONG,
+ apIds: *mut c_long,
+ apObj: *mut *mut IWbemObjectAccess,
+ ) -> HRESULT,
+ fn RemoveObjects(
+ lFlags: c_long,
+ uNumObjects: ULONG,
+ apIds: *mut c_long,
+ ) -> HRESULT,
+ fn GetObjects(
+ lFlags: c_long,
+ uNumObjects: ULONG,
+ apObj: *mut *mut IWbemObjectAccess,
+ puReturned: *mut ULONG,
+ ) -> HRESULT,
+ fn RemoveAll(
+ lFlags: c_long,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemConfigureRefresher;
+DEFINE_GUID!{IID_IWbemConfigureRefresher,
+ 0x49353c92, 0x516b, 0x11d1, 0xae, 0xa6, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20}
+RIDL!{#[uuid(0x49353c92, 0x516b, 0x11d1, 0xae, 0xa6, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20)]
+interface IWbemConfigureRefresher(IWbemConfigureRefresherVtbl): IUnknown(IUnknownVtbl) {
+ fn AddObjectByPath(
+ pNamespace: *mut IWbemServices,
+ wszPath: LPCWSTR,
+ lFlags: c_long,
+ pContext: *mut IWbemContext,
+ ppRefreshable: *mut *mut IWbemClassObject,
+ plId: *mut c_long,
+ ) -> HRESULT,
+ fn AddObjectByTemplate(
+ pNamespace: *mut IWbemServices,
+ pTemplate: *mut IWbemClassObject,
+ lFlags: c_long,
+ pContext: *mut IWbemContext,
+ ppRefreshable: *mut *mut IWbemClassObject,
+ plId: *mut c_long,
+ ) -> HRESULT,
+ fn AddRefresher(
+ pRefresher: *mut IWbemRefresher,
+ lFlags: c_long,
+ plId: *mut c_long,
+ ) -> HRESULT,
+ fn Remove(
+ lId: c_long,
+ lFlags: c_long,
+ ) -> HRESULT,
+ fn AddEnum(
+ pNamespace: *mut IWbemServices,
+ wszClassName: LPCWSTR,
+ lFlags: c_long,
+ pContext: *mut IWbemContext,
+ ppEnum: *mut *mut IWbemHiPerfEnum,
+ plId: *mut c_long,
+ ) -> HRESULT,
+}}
+DEFINE_GUID!{CLSID_WbemLocator,
+ 0x4590f811, 0x1d3a, 0x11d0, 0x89, 0x1f, 0x00, 0xaa, 0x00, 0x4b, 0x2e, 0x24}
+RIDL!{#[uuid(0x4590f811, 0x1d3a, 0x11d0, 0x89, 0x1f, 0x00, 0xaa, 0x00, 0x4b, 0x2e, 0x24)]
+class WbemLocator;}
+DEFINE_GUID!{CLSID_WbemContext,
+ 0x674B6698, 0xEE92, 0x11d0, 0xAD, 0x71, 0x00, 0xC0, 0x4F, 0xD8, 0xFD, 0xFF}
+// class DECLSPEC_UUID("674B6698-EE92-11d0-AD71-00C04FD8FDFF")
+// WbemContext;
+DEFINE_GUID!{CLSID_UnsecuredApartment,
+ 0x49bd2028, 0x1523, 0x11d1, 0xad, 0x79, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff}
+// class DECLSPEC_UUID("49bd2028-1523-11d1-ad79-00c04fd8fdff")
+// UnsecuredApartment;
+DEFINE_GUID!{CLSID_WbemClassObject,
+ 0x9A653086, 0x174F, 0x11d2, 0xB5, 0xF9, 0x00, 0x10, 0x4B, 0x70, 0x3E, 0xFD}
+// class DECLSPEC_UUID("9A653086-174F-11d2-B5F9-00104B703EFD")
+// WbemClassObject;
+DEFINE_GUID!{CLSID_MofCompiler,
+ 0x6daf9757, 0x2e37, 0x11d2, 0xae, 0xc9, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20}
+// class DECLSPEC_UUID("6daf9757-2e37-11d2-aec9-00c04fb68820")
+// MofCompiler;
+DEFINE_GUID!{CLSID_WbemStatusCodeText,
+ 0xeb87e1bd, 0x3233, 0x11d2, 0xae, 0xc9, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20}
+// class DECLSPEC_UUID("eb87e1bd-3233-11d2-aec9-00c04fb68820")
+// WbemStatusCodeText;
+DEFINE_GUID!{CLSID_WbemBackupRestore,
+ 0xC49E32C6, 0xBC8B, 0x11d2, 0x85, 0xD4, 0x00, 0x10, 0x5A, 0x1F, 0x83, 0x04}
+// class DECLSPEC_UUID("C49E32C6-BC8B-11d2-85D4-00105A1F8304")
+// WbemBackupRestore;
+DEFINE_GUID!{CLSID_WbemRefresher,
+ 0xc71566f2, 0x561e, 0x11d1, 0xad, 0x87, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff}
+// class DECLSPEC_UUID("c71566f2-561e-11d1-ad87-00c04fd8fdff")
+// WbemRefresher;
+DEFINE_GUID!{CLSID_WbemObjectTextSrc,
+ 0x8D1C559D, 0x84F0, 0x4bb3, 0xA7, 0xD5, 0x56, 0xA7, 0x43, 0x5A, 0x9B, 0xA6}
+// class DECLSPEC_UUID("8D1C559D-84F0-4bb3-A7D5-56A7435A9BA6")
+// WbemObjectTextSrc;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemcli_0000_0001_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemcli_0000_0001_v0_0_s_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemcli_0000_0003_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemcli_0000_0003_v0_0_s_ifspec;
+// EXTERN_C const IID IID_IWbemObjectSinkEx;
+DEFINE_GUID!{IID_IWbemObjectSinkEx,
+ 0xe7d35cfa, 0x348b, 0x485e, 0xb5, 0x24, 0x25, 0x27, 0x25, 0xd6, 0x97, 0xca}
+RIDL!{#[uuid(0xe7d35cfa, 0x348b, 0x485e, 0xb5, 0x24, 0x25, 0x27, 0x25, 0xd6, 0x97, 0xca)]
+interface IWbemObjectSinkEx(IWbemObjectSinkExVtbl): IWbemObjectSink(IWbemObjectSinkVtbl) {
+ fn WriteMessage(
+ uChannel: ULONG,
+ strMessage: BSTR,
+ ) -> HRESULT,
+ fn WriteError(
+ pObjError: *mut IWbemClassObject,
+ puReturned: *mut c_uchar,
+ ) -> HRESULT,
+ fn PromptUser(
+ strMessage: BSTR,
+ uPromptType: c_uchar,
+ puReturned: *mut c_uchar,
+ ) -> HRESULT,
+ fn WriteProgress(
+ strActivity: BSTR,
+ strCurrentOperation: BSTR,
+ strStatusDescription: BSTR,
+ uPercentComplete: ULONG,
+ uSecondsRemaining: ULONG,
+ ) -> HRESULT,
+ fn WriteStreamParameter(
+ strName: BSTR,
+ vtValue: *mut VARIANT,
+ ulType: ULONG,
+ ulFlags: ULONG,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemShutdown;
+DEFINE_GUID!{IID_IWbemShutdown,
+ 0xb7b31df9, 0xd515, 0x11d3, 0xa1, 0x1c, 0x00, 0x10, 0x5a, 0x1f, 0x51, 0x5a}
+RIDL!{#[uuid(0xb7b31df9, 0xd515, 0x11d3, 0xa1, 0x1c, 0x00, 0x10, 0x5a, 0x1f, 0x51, 0x5a)]
+interface IWbemShutdown(IWbemShutdownVtbl): IUnknown(IUnknownVtbl) {
+ fn Shutdown(
+ uReason: LONG,
+ uMaxMilliseconds: ULONG,
+ pCtx: *mut IWbemContext,
+ ) -> HRESULT,
+}}
+ENUM!{enum WMI_OBJ_TEXT {
+ WMI_OBJ_TEXT_CIM_DTD_2_0 = 1,
+ WMI_OBJ_TEXT_WMI_DTD_2_0 = 2,
+ WMI_OBJ_TEXT_WMI_EXT1 = 3,
+ WMI_OBJ_TEXT_WMI_EXT2 = 4,
+ WMI_OBJ_TEXT_WMI_EXT3 = 5,
+ WMI_OBJ_TEXT_WMI_EXT4 = 6,
+ WMI_OBJ_TEXT_WMI_EXT5 = 7,
+ WMI_OBJ_TEXT_WMI_EXT6 = 8,
+ WMI_OBJ_TEXT_WMI_EXT7 = 9,
+ WMI_OBJ_TEXT_WMI_EXT8 = 10,
+ WMI_OBJ_TEXT_WMI_EXT9 = 11,
+ WMI_OBJ_TEXT_WMI_EXT10 = 12,
+ WMI_OBJ_TEXT_LAST = 13,
+}}
+// extern RPC_IF_HANDLE __MIDL_itf_wbemcli_0000_0011_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemcli_0000_0011_v0_0_s_ifspec;
+// EXTERN_C const IID IID_IWbemObjectTextSrc;
+DEFINE_GUID!{IID_IWbemObjectTextSrc,
+ 0xbfbf883a, 0xcad7, 0x11d3, 0xa1, 0x1b, 0x00, 0x10, 0x5a, 0x1f, 0x51, 0x5a}
+RIDL!{#[uuid(0xbfbf883a, 0xcad7, 0x11d3, 0xa1, 0x1b, 0x00, 0x10, 0x5a, 0x1f, 0x51, 0x5a)]
+interface IWbemObjectTextSrc(IWbemObjectTextSrcVtbl): IUnknown(IUnknownVtbl) {
+ fn GetText(
+ lFlags: c_long,
+ pObj: *mut IWbemClassObject,
+ uObjTextFormat: ULONG,
+ pCtx: *mut IWbemContext,
+ strText: *mut BSTR,
+ ) -> HRESULT,
+ fn CreateFromText(
+ lFlags: c_long,
+ strText: BSTR,
+ uObjTextFormat: ULONG,
+ pCtx: *mut IWbemContext,
+ pNewObj: *mut *mut IWbemClassObject,
+ ) -> HRESULT,
+}}
+STRUCT!{struct WBEM_COMPILE_STATUS_INFO {
+ lPhaseError: c_long,
+ hRes: HRESULT,
+ ObjectNum: c_long,
+ FirstLine: c_long,
+ LastLine: c_long,
+ dwOutFlags: DWORD,
+}}
+ENUM!{enum WBEM_COMPILER_OPTIONS {
+ WBEM_FLAG_CHECK_ONLY = 0x1,
+ WBEM_FLAG_AUTORECOVER = 0x2,
+ WBEM_FLAG_WMI_CHECK = 0x4,
+ WBEM_FLAG_CONSOLE_PRINT = 0x8,
+ WBEM_FLAG_DONT_ADD_TO_LIST = 0x10,
+ WBEM_FLAG_SPLIT_FILES = 0x20,
+ WBEM_FLAG_STORE_FILE = 0x100,
+}}
+ENUM!{enum WBEM_CONNECT_OPTIONS {
+ WBEM_FLAG_CONNECT_REPOSITORY_ONLY = 0x40,
+ WBEM_FLAG_CONNECT_USE_MAX_WAIT = 0x80,
+ WBEM_FLAG_CONNECT_PROVIDERS = 0x100,
+}}
+// extern RPC_IF_HANDLE __MIDL_itf_wbemcli_0000_0013_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemcli_0000_0013_v0_0_s_ifspec;
+// EXTERN_C const IID IID_IMofCompiler;
+DEFINE_GUID!{IID_IMofCompiler,
+ 0x6daf974e, 0x2e37, 0x11d2, 0xae, 0xc9, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20}
+RIDL!{#[uuid(0x6daf974e, 0x2e37, 0x11d2, 0xae, 0xc9, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20)]
+interface IMofCompiler(IMofCompilerVtbl): IUnknown(IUnknownVtbl) {
+ fn CompileFile(
+ FileName: LPWSTR,
+ ServerAndNamespace: LPWSTR,
+ User: LPWSTR,
+ Authority: LPWSTR,
+ Password: LPWSTR,
+ lOptionFlags: LONG,
+ lClassFlags: LONG,
+ lInstanceFlags: LONG,
+ pInfo: *mut WBEM_COMPILE_STATUS_INFO,
+ ) -> HRESULT,
+ fn CompileBuffer(
+ BuffSize: c_long,
+ pBuffer: *mut BYTE,
+ ServerAndNamespace: LPWSTR,
+ User: LPWSTR,
+ Authority: LPWSTR,
+ Password: LPWSTR,
+ lOptionFlags: LONG,
+ lClassFlags: LONG,
+ lInstanceFlags: LONG,
+ pInfo: *mut WBEM_COMPILE_STATUS_INFO,
+ ) -> HRESULT,
+ fn CreateBMOF(
+ TextFileName: LPWSTR,
+ BMOFFileName: LPWSTR,
+ ServerAndNamespace: LPWSTR,
+ lOptionFlags: LONG,
+ lClassFlags: LONG,
+ lInstanceFlags: LONG,
+ pInfo: *mut WBEM_COMPILE_STATUS_INFO,
+ ) -> HRESULT,
+}}
+ENUM!{enum WBEM_UNSECAPP_FLAG_TYPE {
+ WBEM_FLAG_UNSECAPP_DEFAULT_CHECK_ACCESS = 0,
+ WBEM_FLAG_UNSECAPP_CHECK_ACCESS = 1,
+ WBEM_FLAG_UNSECAPP_DONT_CHECK_ACCESS = 2,
+}}
+// extern RPC_IF_HANDLE __MIDL_itf_wbemcli_0000_0015_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemcli_0000_0015_v0_0_s_ifspec;
+ENUM!{enum WBEM_INFORMATION_FLAG_TYPE {
+ WBEM_FLAG_SHORT_NAME = 0x1,
+ WBEM_FLAG_LONG_NAME = 0x2,
+}}
+// extern RPC_IF_HANDLE __MIDL_itf_wbemcli_0000_0016_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemcli_0000_0016_v0_0_s_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemcli_0000_0022_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemcli_0000_0022_v0_0_s_ifspec;
+// unsigned c_long __RPC_USER BSTR_UserSize( __RPC__in unsigned c_long *, unsigned c_long , __RPC__in BSTR * );
+// unsigned char * __RPC_USER BSTR_UserMarshal( __RPC__in unsigned c_long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in BSTR * );
+// unsigned char * __RPC_USER BSTR_UserUnmarshal(__RPC__in unsigned c_long *, __RPC__in_xcount(0) unsigned char *, __RPC__out BSTR * );
+// void __RPC_USER BSTR_UserFree( __RPC__in unsigned c_long *, __RPC__in BSTR * );
+// unsigned c_long __RPC_USER VARIANT_UserSize( __RPC__in unsigned c_long *, unsigned c_long , __RPC__in VARIANT * );
+// unsigned char * __RPC_USER VARIANT_UserMarshal( __RPC__in unsigned c_long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in VARIANT * );
+// unsigned char * __RPC_USER VARIANT_UserUnmarshal(__RPC__in unsigned c_long *, __RPC__in_xcount(0) unsigned char *, __RPC__out VARIANT * );
+// void __RPC_USER VARIANT_UserFree( __RPC__in unsigned c_long *, __RPC__in VARIANT * );
+// unsigned c_long __RPC_USER BSTR_UserSize64( __RPC__in unsigned c_long *, unsigned c_long , __RPC__in BSTR * );
+// unsigned char * __RPC_USER BSTR_UserMarshal64( __RPC__in unsigned c_long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in BSTR * );
+// unsigned char * __RPC_USER BSTR_UserUnmarshal64(__RPC__in unsigned c_long *, __RPC__in_xcount(0) unsigned char *, __RPC__out BSTR * );
+// void __RPC_USER BSTR_UserFree64( __RPC__in unsigned c_long *, __RPC__in BSTR * );
+// unsigned c_long __RPC_USER VARIANT_UserSize64( __RPC__in unsigned c_long *, unsigned c_long , __RPC__in VARIANT * );
+// unsigned char * __RPC_USER VARIANT_UserMarshal64( __RPC__in unsigned c_long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in VARIANT * );
+// unsigned char * __RPC_USER VARIANT_UserUnmarshal64(__RPC__in unsigned c_long *, __RPC__in_xcount(0) unsigned char *, __RPC__out VARIANT * );
+// void __RPC_USER VARIANT_UserFree64( __RPC__in unsigned c_long *, __RPC__in VARIANT * );
diff --git a/vendor/winapi/src/um/wbemdisp.rs b/vendor/winapi/src/um/wbemdisp.rs
new file mode 100644
index 000000000..8e3ec7736
--- /dev/null
+++ b/vendor/winapi/src/um/wbemdisp.rs
@@ -0,0 +1,1344 @@
+// 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 ctypes::c_long;
+use shared::winerror::HRESULT;
+use shared::wtypes::{BSTR, DATE, VARIANT_BOOL};
+use um::oaidl::{DISPID, IDispatch, IDispatchVtbl, VARIANT};
+use um::unknwnbase::IUnknown;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemdisp_0000_0000_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemdisp_0000_0000_v0_0_s_ifspec;
+ENUM!{enum WbemChangeFlagEnum {
+ wbemChangeFlagCreateOrUpdate = 0,
+ wbemChangeFlagUpdateOnly = 0x1,
+ wbemChangeFlagCreateOnly = 0x2,
+ wbemChangeFlagUpdateCompatible = 0,
+ wbemChangeFlagUpdateSafeMode = 0x20,
+ wbemChangeFlagUpdateForceMode = 0x40,
+ wbemChangeFlagStrongValidation = 0x80,
+ wbemChangeFlagAdvisory = 0x10000,
+}}
+ENUM!{enum WbemFlagEnum {
+ wbemFlagReturnImmediately = 0x10,
+ wbemFlagReturnWhenComplete = 0,
+ wbemFlagBidirectional = 0,
+ wbemFlagForwardOnly = 0x20,
+ wbemFlagNoErrorObject = 0x40,
+ wbemFlagReturnErrorObject = 0,
+ wbemFlagSendStatus = 0x80,
+ wbemFlagDontSendStatus = 0,
+ wbemFlagEnsureLocatable = 0x100,
+ wbemFlagDirectRead = 0x200,
+ wbemFlagSendOnlySelected = 0,
+ wbemFlagUseAmendedQualifiers = 0x20000,
+ wbemFlagGetDefault = 0,
+ wbemFlagSpawnInstance = 0x1,
+ wbemFlagUseCurrentTime = 0x1,
+}}
+ENUM!{enum WbemQueryFlagEnum {
+ wbemQueryFlagDeep = 0,
+ wbemQueryFlagShallow = 1,
+ wbemQueryFlagPrototype = 2,
+}}
+ENUM!{enum WbemTextFlagEnum {
+ wbemTextFlagNoFlavors = 0x1,
+}}
+ENUM!{enum WbemTimeout {
+ wbemTimeoutInfinite = 0xffffffff,
+}}
+ENUM!{enum WbemComparisonFlagEnum {
+ wbemComparisonFlagIncludeAll = 0,
+ wbemComparisonFlagIgnoreQualifiers = 0x1,
+ wbemComparisonFlagIgnoreObjectSource = 0x2,
+ wbemComparisonFlagIgnoreDefaultValues = 0x4,
+ wbemComparisonFlagIgnoreClass = 0x8,
+ wbemComparisonFlagIgnoreCase = 0x10,
+ wbemComparisonFlagIgnoreFlavor = 0x20,
+}}
+ENUM!{enum WbemCimtypeEnum {
+ wbemCimtypeSint8 = 16,
+ wbemCimtypeUint8 = 17,
+ wbemCimtypeSint16 = 2,
+ wbemCimtypeUint16 = 18,
+ wbemCimtypeSint32 = 3,
+ wbemCimtypeUint32 = 19,
+ wbemCimtypeSint64 = 20,
+ wbemCimtypeUint64 = 21,
+ wbemCimtypeReal32 = 4,
+ wbemCimtypeReal64 = 5,
+ wbemCimtypeBoolean = 11,
+ wbemCimtypeString = 8,
+ wbemCimtypeDatetime = 101,
+ wbemCimtypeReference = 102,
+ wbemCimtypeChar16 = 103,
+ wbemCimtypeObject = 13,
+}}
+ENUM!{enum WbemErrorEnum {
+ wbemNoErr = 0,
+ wbemErrFailed = 0x80041001,
+ wbemErrNotFound = 0x80041002,
+ wbemErrAccessDenied = 0x80041003,
+ wbemErrProviderFailure = 0x80041004,
+ wbemErrTypeMismatch = 0x80041005,
+ wbemErrOutOfMemory = 0x80041006,
+ wbemErrInvalidContext = 0x80041007,
+ wbemErrInvalidParameter = 0x80041008,
+ wbemErrNotAvailable = 0x80041009,
+ wbemErrCriticalError = 0x8004100a,
+ wbemErrInvalidStream = 0x8004100b,
+ wbemErrNotSupported = 0x8004100c,
+ wbemErrInvalidSuperclass = 0x8004100d,
+ wbemErrInvalidNamespace = 0x8004100e,
+ wbemErrInvalidObject = 0x8004100f,
+ wbemErrInvalidClass = 0x80041010,
+ wbemErrProviderNotFound = 0x80041011,
+ wbemErrInvalidProviderRegistration = 0x80041012,
+ wbemErrProviderLoadFailure = 0x80041013,
+ wbemErrInitializationFailure = 0x80041014,
+ wbemErrTransportFailure = 0x80041015,
+ wbemErrInvalidOperation = 0x80041016,
+ wbemErrInvalidQuery = 0x80041017,
+ wbemErrInvalidQueryType = 0x80041018,
+ wbemErrAlreadyExists = 0x80041019,
+ wbemErrOverrideNotAllowed = 0x8004101a,
+ wbemErrPropagatedQualifier = 0x8004101b,
+ wbemErrPropagatedProperty = 0x8004101c,
+ wbemErrUnexpected = 0x8004101d,
+ wbemErrIllegalOperation = 0x8004101e,
+ wbemErrCannotBeKey = 0x8004101f,
+ wbemErrIncompleteClass = 0x80041020,
+ wbemErrInvalidSyntax = 0x80041021,
+ wbemErrNondecoratedObject = 0x80041022,
+ wbemErrReadOnly = 0x80041023,
+ wbemErrProviderNotCapable = 0x80041024,
+ wbemErrClassHasChildren = 0x80041025,
+ wbemErrClassHasInstances = 0x80041026,
+ wbemErrQueryNotImplemented = 0x80041027,
+ wbemErrIllegalNull = 0x80041028,
+ wbemErrInvalidQualifierType = 0x80041029,
+ wbemErrInvalidPropertyType = 0x8004102a,
+ wbemErrValueOutOfRange = 0x8004102b,
+ wbemErrCannotBeSingleton = 0x8004102c,
+ wbemErrInvalidCimType = 0x8004102d,
+ wbemErrInvalidMethod = 0x8004102e,
+ wbemErrInvalidMethodParameters = 0x8004102f,
+ wbemErrSystemProperty = 0x80041030,
+ wbemErrInvalidProperty = 0x80041031,
+ wbemErrCallCancelled = 0x80041032,
+ wbemErrShuttingDown = 0x80041033,
+ wbemErrPropagatedMethod = 0x80041034,
+ wbemErrUnsupportedParameter = 0x80041035,
+ wbemErrMissingParameter = 0x80041036,
+ wbemErrInvalidParameterId = 0x80041037,
+ wbemErrNonConsecutiveParameterIds = 0x80041038,
+ wbemErrParameterIdOnRetval = 0x80041039,
+ wbemErrInvalidObjectPath = 0x8004103a,
+ wbemErrOutOfDiskSpace = 0x8004103b,
+ wbemErrBufferTooSmall = 0x8004103c,
+ wbemErrUnsupportedPutExtension = 0x8004103d,
+ wbemErrUnknownObjectType = 0x8004103e,
+ wbemErrUnknownPacketType = 0x8004103f,
+ wbemErrMarshalVersionMismatch = 0x80041040,
+ wbemErrMarshalInvalidSignature = 0x80041041,
+ wbemErrInvalidQualifier = 0x80041042,
+ wbemErrInvalidDuplicateParameter = 0x80041043,
+ wbemErrTooMuchData = 0x80041044,
+ wbemErrServerTooBusy = 0x80041045,
+ wbemErrInvalidFlavor = 0x80041046,
+ wbemErrCircularReference = 0x80041047,
+ wbemErrUnsupportedClassUpdate = 0x80041048,
+ wbemErrCannotChangeKeyInheritance = 0x80041049,
+ wbemErrCannotChangeIndexInheritance = 0x80041050,
+ wbemErrTooManyProperties = 0x80041051,
+ wbemErrUpdateTypeMismatch = 0x80041052,
+ wbemErrUpdateOverrideNotAllowed = 0x80041053,
+ wbemErrUpdatePropagatedMethod = 0x80041054,
+ wbemErrMethodNotImplemented = 0x80041055,
+ wbemErrMethodDisabled = 0x80041056,
+ wbemErrRefresherBusy = 0x80041057,
+ wbemErrUnparsableQuery = 0x80041058,
+ wbemErrNotEventClass = 0x80041059,
+ wbemErrMissingGroupWithin = 0x8004105a,
+ wbemErrMissingAggregationList = 0x8004105b,
+ wbemErrPropertyNotAnObject = 0x8004105c,
+ wbemErrAggregatingByObject = 0x8004105d,
+ wbemErrUninterpretableProviderQuery = 0x8004105f,
+ wbemErrBackupRestoreWinmgmtRunning = 0x80041060,
+ wbemErrQueueOverflow = 0x80041061,
+ wbemErrPrivilegeNotHeld = 0x80041062,
+ wbemErrInvalidOperator = 0x80041063,
+ wbemErrLocalCredentials = 0x80041064,
+ wbemErrCannotBeAbstract = 0x80041065,
+ wbemErrAmendedObject = 0x80041066,
+ wbemErrClientTooSlow = 0x80041067,
+ wbemErrNullSecurityDescriptor = 0x80041068,
+ wbemErrTimeout = 0x80041069,
+ wbemErrInvalidAssociation = 0x8004106a,
+ wbemErrAmbiguousOperation = 0x8004106b,
+ wbemErrQuotaViolation = 0x8004106c,
+ wbemErrTransactionConflict = 0x8004106d,
+ wbemErrForcedRollback = 0x8004106e,
+ wbemErrUnsupportedLocale = 0x8004106f,
+ wbemErrHandleOutOfDate = 0x80041070,
+ wbemErrConnectionFailed = 0x80041071,
+ wbemErrInvalidHandleRequest = 0x80041072,
+ wbemErrPropertyNameTooWide = 0x80041073,
+ wbemErrClassNameTooWide = 0x80041074,
+ wbemErrMethodNameTooWide = 0x80041075,
+ wbemErrQualifierNameTooWide = 0x80041076,
+ wbemErrRerunCommand = 0x80041077,
+ wbemErrDatabaseVerMismatch = 0x80041078,
+ wbemErrVetoPut = 0x80041079,
+ wbemErrVetoDelete = 0x8004107a,
+ wbemErrInvalidLocale = 0x80041080,
+ wbemErrProviderSuspended = 0x80041081,
+ wbemErrSynchronizationRequired = 0x80041082,
+ wbemErrNoSchema = 0x80041083,
+ wbemErrProviderAlreadyRegistered = 0x80041084,
+ wbemErrProviderNotRegistered = 0x80041085,
+ wbemErrFatalTransportError = 0x80041086,
+ wbemErrEncryptedConnectionRequired = 0x80041087,
+ wbemErrRegistrationTooBroad = 0x80042001,
+ wbemErrRegistrationTooPrecise = 0x80042002,
+ wbemErrTimedout = 0x80043001,
+ wbemErrResetToDefault = 0x80043002,
+}}
+ENUM!{enum WbemAuthenticationLevelEnum {
+ wbemAuthenticationLevelDefault = 0,
+ wbemAuthenticationLevelNone = 1,
+ wbemAuthenticationLevelConnect = 2,
+ wbemAuthenticationLevelCall = 3,
+ wbemAuthenticationLevelPkt = 4,
+ wbemAuthenticationLevelPktIntegrity = 5,
+ wbemAuthenticationLevelPktPrivacy = 6,
+}}
+ENUM!{enum WbemImpersonationLevelEnum {
+ wbemImpersonationLevelAnonymous = 1,
+ wbemImpersonationLevelIdentify = 2,
+ wbemImpersonationLevelImpersonate = 3,
+ wbemImpersonationLevelDelegate = 4,
+}}
+ENUM!{enum WbemPrivilegeEnum {
+ wbemPrivilegeCreateToken = 1,
+ wbemPrivilegePrimaryToken = 2,
+ wbemPrivilegeLockMemory = 3,
+ wbemPrivilegeIncreaseQuota = 4,
+ wbemPrivilegeMachineAccount = 5,
+ wbemPrivilegeTcb = 6,
+ wbemPrivilegeSecurity = 7,
+ wbemPrivilegeTakeOwnership = 8,
+ wbemPrivilegeLoadDriver = 9,
+ wbemPrivilegeSystemProfile = 10,
+ wbemPrivilegeSystemtime = 11,
+ wbemPrivilegeProfileSingleProcess = 12,
+ wbemPrivilegeIncreaseBasePriority = 13,
+ wbemPrivilegeCreatePagefile = 14,
+ wbemPrivilegeCreatePermanent = 15,
+ wbemPrivilegeBackup = 16,
+ wbemPrivilegeRestore = 17,
+ wbemPrivilegeShutdown = 18,
+ wbemPrivilegeDebug = 19,
+ wbemPrivilegeAudit = 20,
+ wbemPrivilegeSystemEnvironment = 21,
+ wbemPrivilegeChangeNotify = 22,
+ wbemPrivilegeRemoteShutdown = 23,
+ wbemPrivilegeUndock = 24,
+ wbemPrivilegeSyncAgent = 25,
+ wbemPrivilegeEnableDelegation = 26,
+ wbemPrivilegeManageVolume = 27,
+}}
+ENUM!{enum WbemObjectTextFormatEnum {
+ wbemObjectTextFormatCIMDTD20 = 1,
+ wbemObjectTextFormatWMIDTD20 = 2,
+}}
+ENUM!{enum WbemConnectOptionsEnum {
+ wbemConnectFlagUseMaxWait = 0x80,
+}}
+// EXTERN_C const IID LIBID_WbemScripting;
+// EXTERN_C const IID IID_ISWbemServices;
+DEFINE_GUID!{IID_ISWbemServices,
+ 0x76a6415c, 0xcb41, 0x11d1, 0x8b, 0x02, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}
+RIDL!{#[uuid(0x76a6415c, 0xcb41, 0x11d1, 0x8b, 0x02, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6)]
+interface ISWbemServices(ISWbemServicesVtbl): IDispatch(IDispatchVtbl) {
+ fn Get(
+ strObjectPath: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemObject: *mut *mut ISWbemObject,
+ ) -> HRESULT,
+ fn GetAsync(
+ objWbemSink: *mut IDispatch,
+ strObjectPath: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemAsyncContext: *mut IDispatch,
+ ) -> HRESULT,
+ fn Delete(
+ strObjectPath: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ ) -> HRESULT,
+ fn DeleteAsync(
+ objWbemSink: *mut IDispatch,
+ strObjectPath: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemAsyncContext: *mut IDispatch,
+ ) -> HRESULT,
+ fn InstancesOf(
+ strClass: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemObjectSet: *mut *mut ISWbemObjectSet,
+ ) -> HRESULT,
+ fn InstancesOfAsync(
+ objWbemSink: *mut IDispatch,
+ strClass: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemAsyncContext: *mut IDispatch,
+ ) -> HRESULT,
+ fn SubclassesOf(
+ strSuperclass: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemObjectSet: *mut *mut ISWbemObjectSet,
+ ) -> HRESULT,
+ fn SubclassesOfAsync(
+ objWbemSink: *mut IDispatch,
+ strSuperclass: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemAsyncContext: *mut IDispatch,
+ ) -> HRESULT,
+ fn ExecQuery(
+ strQuery: BSTR,
+ strQueryLanguage: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemObjectSet: *mut *mut ISWbemObjectSet,
+ ) -> HRESULT,
+ fn ExecQueryAsync(
+ objWbemSink: *mut IDispatch,
+ strQuery: BSTR,
+ strQueryLanguage: BSTR,
+ lFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemAsyncContext: *mut IDispatch,
+ ) -> HRESULT,
+ fn AssociatorsOf(
+ strObjectPath: BSTR,
+ strAssocClass: BSTR,
+ strResultClass: BSTR,
+ strResultRole: BSTR,
+ strRole: BSTR,
+ bClassesOnly: VARIANT_BOOL,
+ bSchemaOnly: VARIANT_BOOL,
+ strRequiredAssocQualifier: BSTR,
+ strRequiredQualifier: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemObjectSet: *mut *mut ISWbemObjectSet,
+ ) -> HRESULT,
+ fn AssociatorsOfAsync(
+ objWbemSink: *mut IDispatch,
+ strObjectPath: BSTR,
+ strAssocClass: BSTR,
+ strResultClass: BSTR,
+ strResultRole: BSTR,
+ strRole: BSTR,
+ bClassesOnly: VARIANT_BOOL,
+ bSchemaOnly: VARIANT_BOOL,
+ strRequiredAssocQualifier: BSTR,
+ strRequiredQualifier: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemAsyncContext: *mut IDispatch,
+ ) -> HRESULT,
+ fn ReferencesTo(
+ strObjectPath: BSTR,
+ strResultClass: BSTR,
+ strRole: BSTR,
+ bClassesOnly: VARIANT_BOOL,
+ bSchemaOnly: VARIANT_BOOL,
+ strRequiredQualifier: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemObjectSet: *mut *mut ISWbemObjectSet,
+ ) -> HRESULT,
+ fn ReferencesToAsync(
+ objWbemSink: *mut IDispatch,
+ strObjectPath: BSTR,
+ strResultClass: BSTR,
+ strRole: BSTR,
+ bClassesOnly: VARIANT_BOOL,
+ bSchemaOnly: VARIANT_BOOL,
+ strRequiredQualifier: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemAsyncContext: *mut IDispatch,
+ ) -> HRESULT,
+ fn ExecNotificationQuery(
+ strQuery: BSTR,
+ strQueryLanguage: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemEventSource: *mut *mut ISWbemEventSource,
+ ) -> HRESULT,
+ fn ExecNotificationQueryAsync(
+ objWbemSink: *mut IDispatch,
+ strQuery: BSTR,
+ strQueryLanguage: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemAsyncContext: *mut IDispatch,
+ ) -> HRESULT,
+ fn ExecMethod(
+ strObjectPath: BSTR,
+ strMethodName: BSTR,
+ objWbemInParameters: *mut IDispatch,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemOutParameters: *mut *mut ISWbemObject,
+ ) -> HRESULT,
+ fn ExecMethodAsync(
+ objWbemSink: *mut IDispatch,
+ strObjectPath: BSTR,
+ strMethodName: BSTR,
+ objWbemInParameters: *mut IDispatch,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemAsyncContext: *mut IDispatch,
+ ) -> HRESULT,
+ fn get_Security_(
+ objWbemSecurity: *mut *mut ISWbemSecurity,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemLocator;
+DEFINE_GUID!{IID_ISWbemLocator,
+ 0x76a6415b, 0xcb41, 0x11d1, 0x8b, 0x02, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}
+RIDL!{#[uuid(0x76a6415b, 0xcb41, 0x11d1, 0x8b, 0x02, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6)]
+interface ISWbemLocator(ISWbemLocatorVtbl): IDispatch(IDispatchVtbl) {
+ fn ConnectServer(
+ strServer: BSTR,
+ strNamespace: BSTR,
+ strUser: BSTR,
+ strPassword: BSTR,
+ strLocale: BSTR,
+ strAuthority: BSTR,
+ iSecurityFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemServices: *mut *mut ISWbemServices,
+ ) -> HRESULT,
+ fn get_Security_(
+ objWbemSecurity: *mut *mut ISWbemSecurity,
+ ) -> HRESULT,
+}}
+pub const WBEMS_DISPID_DERIVATION: DISPID = 23;
+// EXTERN_C const IID IID_ISWbemObject;
+DEFINE_GUID!{IID_ISWbemObject,
+ 0x76a6415a, 0xcb41, 0x11d1, 0x8b, 0x02, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}
+RIDL!{#[uuid(0x76a6415a, 0xcb41, 0x11d1, 0x8b, 0x02, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6)]
+interface ISWbemObject(ISWbemObjectVtbl): IDispatch(IDispatchVtbl) {
+ fn Put_(
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemObjectPath: *mut *mut ISWbemObjectPath,
+ ) -> HRESULT,
+ fn PutAsync_(
+ objWbemSink: *mut IDispatch,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemAsyncContext: *mut IDispatch,
+ ) -> HRESULT,
+ fn Delete_(
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ ) -> HRESULT,
+ fn DeleteAsync_(
+ objWbemSink: *mut IDispatch,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemAsyncContext: *mut IDispatch,
+ ) -> HRESULT,
+ fn Instances_(
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemObjectSet: *mut *mut ISWbemObjectSet,
+ ) -> HRESULT,
+ fn InstancesAsync_(
+ objWbemSink: *mut IDispatch,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemAsyncContext: *mut IDispatch,
+ ) -> HRESULT,
+ fn Subclasses_(
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemObjectSet: *mut *mut ISWbemObjectSet,
+ ) -> HRESULT,
+ fn SubclassesAsync_(
+ objWbemSink: *mut IDispatch,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemAsyncContext: *mut IDispatch,
+ ) -> HRESULT,
+ fn Associators_(
+ strAssocClass: BSTR,
+ strResultClass: BSTR,
+ strResultRole: BSTR,
+ strRole: BSTR,
+ bClassesOnly: VARIANT_BOOL,
+ bSchemaOnly: VARIANT_BOOL,
+ strRequiredAssocQualifier: BSTR,
+ strRequiredQualifier: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemObjectSet: *mut *mut ISWbemObjectSet,
+ ) -> HRESULT,
+ fn AssociatorsAsync_(
+ objWbemSink: *mut IDispatch,
+ strAssocClass: BSTR,
+ strResultClass: BSTR,
+ strResultRole: BSTR,
+ strRole: BSTR,
+ bClassesOnly: VARIANT_BOOL,
+ bSchemaOnly: VARIANT_BOOL,
+ strRequiredAssocQualifier: BSTR,
+ strRequiredQualifier: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemAsyncContext: *mut IDispatch,
+ ) -> HRESULT,
+ fn References_(
+ strResultClass: BSTR,
+ strRole: BSTR,
+ bClassesOnly: VARIANT_BOOL,
+ bSchemaOnly: VARIANT_BOOL,
+ strRequiredQualifier: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemObjectSet: *mut *mut ISWbemObjectSet,
+ ) -> HRESULT,
+ fn ReferencesAsync_(
+ objWbemSink: *mut IDispatch,
+ strResultClass: BSTR,
+ strRole: BSTR,
+ bClassesOnly: VARIANT_BOOL,
+ bSchemaOnly: VARIANT_BOOL,
+ strRequiredQualifier: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemAsyncContext: *mut IDispatch,
+ ) -> HRESULT,
+ fn ExecMethod_(
+ strMethodName: BSTR,
+ objWbemInParameters: *mut IDispatch,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemOutParameters: *mut *mut ISWbemObject,
+ ) -> HRESULT,
+ fn ExecMethodAsync_(
+ objWbemSink: *mut IDispatch,
+ strMethodName: BSTR,
+ objWbemInParameters: *mut IDispatch,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemAsyncContext: *mut IDispatch,
+ ) -> HRESULT,
+ fn Clone_(
+ objWbemObject: *mut *mut ISWbemObject,
+ ) -> HRESULT,
+ fn GetObjectText_(
+ iFlags: c_long,
+ strObjectText: *mut BSTR,
+ ) -> HRESULT,
+ fn SpawnDerivedClass_(
+ iFlags: c_long,
+ objWbemObject: *mut *mut ISWbemObject,
+ ) -> HRESULT,
+ fn SpawnInstance_(
+ iFlags: c_long,
+ objWbemObject: *mut *mut ISWbemObject,
+ ) -> HRESULT,
+ fn CompareTo_(
+ objWbemObject: *mut IDispatch,
+ iFlags: c_long,
+ bResult: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_Qualifiers_(
+ objWbemQualifierSet: *mut *mut ISWbemQualifierSet,
+ ) -> HRESULT,
+ fn get_Properties_(
+ objWbemPropertySet: *mut *mut ISWbemPropertySet,
+ ) -> HRESULT,
+ fn get_Methods_(
+ objWbemMethodSet: *mut *mut ISWbemMethodSet,
+ ) -> HRESULT,
+ fn get_Derivation_(
+ strClassNameArray: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_Path_(
+ objWbemObjectPath: *mut *mut ISWbemObjectPath,
+ ) -> HRESULT,
+ fn get_Security_(
+ objWbemSecurity: *mut *mut ISWbemSecurity,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemObjectSet;
+DEFINE_GUID!{IID_ISWbemObjectSet,
+ 0x76a6415f, 0xcb41, 0x11d1, 0x8b, 0x02, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}
+RIDL!{#[uuid(0x76a6415f, 0xcb41, 0x11d1, 0x8b, 0x02, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6)]
+interface ISWbemObjectSet(ISWbemObjectSetVtbl): IDispatch(IDispatchVtbl) {
+ fn get__NewEnum(
+ pUnk: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn Item(
+ strObjectPath: BSTR,
+ iFlags: c_long,
+ objWbemObject: *mut *mut ISWbemObject,
+ ) -> HRESULT,
+ fn get_Count(
+ iCount: *mut c_long,
+ ) -> HRESULT,
+ fn get_Security_(
+ objWbemSecurity: *mut *mut ISWbemSecurity,
+ ) -> HRESULT,
+ fn ItemIndex(
+ lIndex: c_long,
+ objWbemObject: *mut *mut ISWbemObject,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemNamedValue;
+DEFINE_GUID!{IID_ISWbemNamedValue,
+ 0x76a64164, 0xcb41, 0x11d1, 0x8b, 0x02, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}
+RIDL!{#[uuid(0x76a64164, 0xcb41, 0x11d1, 0x8b, 0x02, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6)]
+interface ISWbemNamedValue(ISWbemNamedValueVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Value(
+ varValue: *mut VARIANT,
+ ) -> HRESULT,
+ fn put_Value(
+ varValue: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_Name(
+ strName: *mut BSTR,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemNamedValueSet;
+DEFINE_GUID!{IID_ISWbemNamedValueSet,
+ 0xcf2376ea, 0xce8c, 0x11d1, 0x8b, 0x05, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}
+RIDL!{#[uuid(0xcf2376ea, 0xce8c, 0x11d1, 0x8b, 0x05, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6)]
+interface ISWbemNamedValueSet(ISWbemNamedValueSetVtbl): IDispatch(IDispatchVtbl) {
+ fn get__NewEnum(
+ pUnk: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn Item(
+ strName: BSTR,
+ iFlags: c_long,
+ objWbemNamedValue: *mut *mut ISWbemNamedValue,
+ ) -> HRESULT,
+ fn get_Count(
+ iCount: *mut c_long,
+ ) -> HRESULT,
+ fn Add(
+ strName: BSTR,
+ varValue: *mut VARIANT,
+ iFlags: c_long,
+ objWbemNamedValue: *mut *mut ISWbemNamedValue,
+ ) -> HRESULT,
+ fn Remove(
+ strName: BSTR,
+ iFlags: c_long,
+ ) -> HRESULT,
+ fn Clone(
+ objWbemNamedValueSet: *mut *mut ISWbemNamedValueSet,
+ ) -> HRESULT,
+ fn DeleteAll() -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemQualifier;
+DEFINE_GUID!{IID_ISWbemQualifier,
+ 0x79b05932, 0xd3b7, 0x11d1, 0x8b, 0x06, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}
+RIDL!{#[uuid(0x79b05932, 0xd3b7, 0x11d1, 0x8b, 0x06, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6)]
+interface ISWbemQualifier(ISWbemQualifierVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Value(
+ varValue: *mut VARIANT,
+ ) -> HRESULT,
+ fn put_Value(
+ varValue: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_Name(
+ strName: *mut BSTR,
+ ) -> HRESULT,
+ fn get_IsLocal(
+ bIsLocal: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_PropagatesToSubclass(
+ bPropagatesToSubclass: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_PropagatesToSubclass(
+ bPropagatesToSubclass: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_PropagatesToInstance(
+ bPropagatesToInstance: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_PropagatesToInstance(
+ bPropagatesToInstance: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_IsOverridable(
+ bIsOverridable: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_IsOverridable(
+ bIsOverridable: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_IsAmended(
+ bIsAmended: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemQualifierSet;
+DEFINE_GUID!{IID_ISWbemQualifierSet,
+ 0x9b16ed16, 0xd3df, 0x11d1, 0x8b, 0x08, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}
+RIDL!{#[uuid(0x9b16ed16, 0xd3df, 0x11d1, 0x8b, 0x08, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6)]
+interface ISWbemQualifierSet(ISWbemQualifierSetVtbl): IDispatch(IDispatchVtbl) {
+ fn get__NewEnum(
+ pUnk: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn Item(
+ name: BSTR,
+ iFlags: c_long,
+ objWbemQualifier: *mut *mut ISWbemQualifier,
+ ) -> HRESULT,
+ fn get_Count(
+ iCount: *mut c_long,
+ ) -> HRESULT,
+ fn Add(
+ strName: BSTR,
+ varVal: *mut VARIANT,
+ bPropagatesToSubclass: VARIANT_BOOL,
+ bPropagatesToInstance: VARIANT_BOOL,
+ bIsOverridable: VARIANT_BOOL,
+ iFlags: c_long,
+ objWbemQualifier: *mut *mut ISWbemQualifier,
+ ) -> HRESULT,
+ fn Remove(
+ strName: BSTR,
+ iFlags: c_long,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemProperty;
+DEFINE_GUID!{IID_ISWbemProperty,
+ 0x1a388f98, 0xd4ba, 0x11d1, 0x8b, 0x09, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}
+RIDL!{#[uuid(0x1a388f98, 0xd4ba, 0x11d1, 0x8b, 0x09, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6)]
+interface ISWbemProperty(ISWbemPropertyVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Value(
+ varValue: *mut VARIANT,
+ ) -> HRESULT,
+ fn put_Value(
+ varValue: *mut VARIANT,
+ ) -> HRESULT,
+ fn get_Name(
+ strName: *mut BSTR,
+ ) -> HRESULT,
+ fn get_IsLocal(
+ bIsLocal: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_Origin(
+ strOrigin: *mut BSTR,
+ ) -> HRESULT,
+ fn get_CIMType(
+ iCimType: *mut WbemCimtypeEnum,
+ ) -> HRESULT,
+ fn get_Qualifiers_(
+ objWbemQualifierSet: *mut *mut ISWbemQualifierSet,
+ ) -> HRESULT,
+ fn get_IsArray(
+ bIsArray: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemPropertySet;
+DEFINE_GUID!{IID_ISWbemPropertySet,
+ 0xdea0a7b2, 0xd4ba, 0x11d1, 0x8b, 0x09, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}
+RIDL!{#[uuid(0xdea0a7b2, 0xd4ba, 0x11d1, 0x8b, 0x09, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6)]
+interface ISWbemPropertySet(ISWbemPropertySetVtbl): IDispatch(IDispatchVtbl) {
+ fn get__NewEnum(
+ pUnk: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn Item(
+ strName: BSTR,
+ iFlags: c_long,
+ objWbemProperty: *mut *mut ISWbemProperty,
+ ) -> HRESULT,
+ fn get_Count(
+ iCount: *mut c_long,
+ ) -> HRESULT,
+ fn Add(
+ strName: BSTR,
+ iCIMType: WbemCimtypeEnum,
+ bIsArray: VARIANT_BOOL,
+ iFlags: c_long,
+ objWbemProperty: *mut *mut ISWbemProperty,
+ ) -> HRESULT,
+ fn Remove(
+ strName: BSTR,
+ iFlags: c_long,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemMethod;
+DEFINE_GUID!{IID_ISWbemMethod,
+ 0x422e8e90, 0xd955, 0x11d1, 0x8b, 0x09, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}
+RIDL!{#[uuid(0x422e8e90, 0xd955, 0x11d1, 0x8b, 0x09, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6)]
+interface ISWbemMethod(ISWbemMethodVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Name(
+ strName: *mut BSTR,
+ ) -> HRESULT,
+ fn get_Origin(
+ strOrigin: *mut BSTR,
+ ) -> HRESULT,
+ fn get_InParameters(
+ objWbemInParameters: *mut *mut ISWbemObject,
+ ) -> HRESULT,
+ fn get_OutParameters(
+ objWbemOutParameters: *mut *mut ISWbemObject,
+ ) -> HRESULT,
+ fn get_Qualifiers_(
+ objWbemQualifierSet: *mut *mut ISWbemQualifierSet,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemMethodSet;
+DEFINE_GUID!{IID_ISWbemMethodSet,
+ 0xc93ba292, 0xd955, 0x11d1, 0x8b, 0x09, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}
+RIDL!{#[uuid(0xc93ba292, 0xd955, 0x11d1, 0x8b, 0x09, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6)]
+interface ISWbemMethodSet(ISWbemMethodSetVtbl): IDispatch(IDispatchVtbl) {
+ fn get__NewEnum(
+ pUnk: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn Item(
+ strName: BSTR,
+ iFlags: c_long,
+ objWbemMethod: *mut *mut ISWbemMethod,
+ ) -> HRESULT,
+ fn get_Count(
+ iCount: *mut c_long,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemEventSource;
+DEFINE_GUID!{IID_ISWbemEventSource,
+ 0x27d54d92, 0x0ebe, 0x11d2, 0x8b, 0x22, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}
+RIDL!{#[uuid(0x27d54d92, 0x0ebe, 0x11d2, 0x8b, 0x22, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6)]
+interface ISWbemEventSource(ISWbemEventSourceVtbl): IDispatch(IDispatchVtbl) {
+ fn NextEvent(
+ iTimeoutMs: c_long,
+ objWbemObject: *mut *mut ISWbemObject,
+ ) -> HRESULT,
+ fn get_Security_(
+ objWbemSecurity: *mut *mut ISWbemSecurity,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemObjectPath;
+DEFINE_GUID!{IID_ISWbemObjectPath,
+ 0x5791bc27, 0xce9c, 0x11d1, 0x97, 0xbf, 0x00, 0x00, 0xf8, 0x1e, 0x84, 0x9c}
+RIDL!{#[uuid(0x5791bc27, 0xce9c, 0x11d1, 0x97, 0xbf, 0x00, 0x00, 0xf8, 0x1e, 0x84, 0x9c)]
+interface ISWbemObjectPath(ISWbemObjectPathVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Path(
+ strPath: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Path(
+ strPath: BSTR,
+ ) -> HRESULT,
+ fn get_RelPath(
+ strRelPath: *mut BSTR,
+ ) -> HRESULT,
+ fn put_RelPath(
+ strRelPath: BSTR,
+ ) -> HRESULT,
+ fn get_Server(
+ strServer: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Server(
+ strServer: BSTR,
+ ) -> HRESULT,
+ fn get_Namespace(
+ strNamespace: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Namespace(
+ strNamespace: BSTR,
+ ) -> HRESULT,
+ fn get_ParentNamespace(
+ strParentNamespace: *mut BSTR,
+ ) -> HRESULT,
+ fn get_DisplayName(
+ strDisplayName: *mut BSTR,
+ ) -> HRESULT,
+ fn put_DisplayName(
+ strDisplayName: BSTR,
+ ) -> HRESULT,
+ fn get_Class(
+ strClass: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Class(
+ strClass: BSTR,
+ ) -> HRESULT,
+ fn get_IsClass(
+ bIsClass: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn SetAsClass() -> HRESULT,
+ fn get_IsSingleton(
+ bIsSingleton: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn SetAsSingleton() -> HRESULT,
+ fn get_Keys(
+ objWbemNamedValueSet: *mut *mut ISWbemNamedValueSet,
+ ) -> HRESULT,
+ fn get_Security_(
+ objWbemSecurity: *mut *mut ISWbemSecurity,
+ ) -> HRESULT,
+ fn get_Locale(
+ strLocale: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Locale(
+ strLocale: BSTR,
+ ) -> HRESULT,
+ fn get_Authority(
+ strAuthority: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Authority(
+ strAuthority: BSTR,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemLastError;
+DEFINE_GUID!{IID_ISWbemLastError,
+ 0xd962db84, 0xd4bb, 0x11d1, 0x8b, 0x09, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}
+RIDL!{#[uuid(0xd962db84, 0xd4bb, 0x11d1, 0x8b, 0x09, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6)]
+interface ISWbemLastError(ISWbemLastErrorVtbl): ISWbemObject(ISWbemObjectVtbl) {}}
+// EXTERN_C const IID DIID_ISWbemSinkEvents;
+DEFINE_GUID!{IID_ISWbemSinkEvents,
+ 0x75718ca0, 0xf029, 0x11d1, 0xa1, 0xac, 0x00, 0xc0, 0x4f, 0xb6, 0xc2, 0x23}
+RIDL!{#[uuid(0x75718ca0, 0xf029, 0x11d1, 0xa1, 0xac, 0x00, 0xc0, 0x4f, 0xb6, 0xc2, 0x23)]
+interface ISWbemSinkEvents(ISWbemSinkEventsVtbl): IDispatch(IDispatchVtbl) {}}
+// EXTERN_C const IID IID_ISWbemSink;
+DEFINE_GUID!{IID_ISWbemSink,
+ 0x75718c9f, 0xf029, 0x11d1, 0xa1, 0xac, 0x00, 0xc0, 0x4f, 0xb6, 0xc2, 0x23}
+RIDL!{#[uuid(0x75718c9f, 0xf029, 0x11d1, 0xa1, 0xac, 0x00, 0xc0, 0x4f, 0xb6, 0xc2, 0x23)]
+interface ISWbemSink(ISWbemSinkVtbl): IDispatch(IDispatchVtbl) {
+ fn Cancel() -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemSecurity;
+DEFINE_GUID!{IID_ISWbemSecurity,
+ 0xb54d66e6, 0x2287, 0x11d2, 0x8b, 0x33, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}
+RIDL!{#[uuid(0xb54d66e6, 0x2287, 0x11d2, 0x8b, 0x33, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6)]
+interface ISWbemSecurity(ISWbemSecurityVtbl): IDispatch(IDispatchVtbl) {
+ fn get_ImpersonationLevel(
+ iImpersonationLevel: *mut WbemImpersonationLevelEnum,
+ ) -> HRESULT,
+ fn put_ImpersonationLevel(
+ iImpersonationLevel: WbemImpersonationLevelEnum,
+ ) -> HRESULT,
+ fn get_AuthenticationLevel(
+ iAuthenticationLevel: *mut WbemAuthenticationLevelEnum,
+ ) -> HRESULT,
+ fn put_AuthenticationLevel(
+ iAuthenticationLevel: WbemAuthenticationLevelEnum,
+ ) -> HRESULT,
+ fn get_Privileges(
+ objWbemPrivilegeSet: *mut *mut ISWbemPrivilegeSet,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemPrivilege;
+DEFINE_GUID!{IID_ISWbemPrivilege,
+ 0x26ee67bd, 0x5804, 0x11d2, 0x8b, 0x4a, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}
+RIDL!{#[uuid(0x26ee67bd, 0x5804, 0x11d2, 0x8b, 0x4a, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6)]
+interface ISWbemPrivilege(ISWbemPrivilegeVtbl): IDispatch(IDispatchVtbl) {
+ fn get_IsEnabled(
+ bIsEnabled: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_IsEnabled(
+ bIsEnabled: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_Name(
+ strDisplayName: *mut BSTR,
+ ) -> HRESULT,
+ fn get_DisplayName(
+ strDisplayName: *mut BSTR,
+ ) -> HRESULT,
+ fn get_Identifier(
+ iPrivilege: *mut WbemPrivilegeEnum,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemPrivilegeSet;
+DEFINE_GUID!{IID_ISWbemPrivilegeSet,
+ 0x26ee67bf, 0x5804, 0x11d2, 0x8b, 0x4a, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}
+RIDL!{#[uuid(0x26ee67bf, 0x5804, 0x11d2, 0x8b, 0x4a, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6)]
+interface ISWbemPrivilegeSet(ISWbemPrivilegeSetVtbl): IDispatch(IDispatchVtbl) {
+ fn get__NewEnum(
+ pUnk: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn Item(
+ iPrivilege: WbemPrivilegeEnum,
+ objWbemPrivilege: *mut *mut ISWbemPrivilege,
+ ) -> HRESULT,
+ fn get_Count(
+ iCount: *mut c_long,
+ ) -> HRESULT,
+ fn Add(
+ iPrivilege: WbemPrivilegeEnum,
+ bIsEnabled: VARIANT_BOOL,
+ objWbemPrivilege: *mut *mut ISWbemPrivilege,
+ ) -> HRESULT,
+ fn Remove(
+ iPrivilege: WbemPrivilegeEnum,
+ ) -> HRESULT,
+ fn DeleteAll() -> HRESULT,
+ fn AddAsString(
+ strPrivilege: BSTR,
+ bIsEnabled: VARIANT_BOOL,
+ objWbemPrivilege: *mut *mut ISWbemPrivilege,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemServicesEx;
+DEFINE_GUID!{IID_ISWbemServicesEx,
+ 0xd2f68443, 0x85dc, 0x427e, 0x91, 0xd8, 0x36, 0x65, 0x54, 0xcc, 0x75, 0x4c}
+RIDL!{#[uuid(0xd2f68443, 0x85dc, 0x427e, 0x91, 0xd8, 0x36, 0x65, 0x54, 0xcc, 0x75, 0x4c)]
+interface ISWbemServicesEx(ISWbemServicesExVtbl): ISWbemServices(ISWbemServicesVtbl) {
+ fn Put(
+ objWbemObject: *mut ISWbemObjectEx,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemObjectPath: *mut *mut ISWbemObjectPath,
+ ) -> HRESULT,
+ fn PutAsync(
+ objWbemSink: *mut ISWbemSink,
+ objWbemObject: *mut ISWbemObjectEx,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemAsyncContext: *mut IDispatch,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemObjectEx;
+DEFINE_GUID!{IID_ISWbemObjectEx,
+ 0x269ad56a, 0x8a67, 0x4129, 0xbc, 0x8c, 0x05, 0x06, 0xdc, 0xfe, 0x98, 0x80}
+RIDL!{#[uuid(0x269ad56a, 0x8a67, 0x4129, 0xbc, 0x8c, 0x05, 0x06, 0xdc, 0xfe, 0x98, 0x80)]
+interface ISWbemObjectEx(ISWbemObjectExVtbl): ISWbemObject(ISWbemObjectVtbl) {
+ fn Refresh_(
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ ) -> HRESULT,
+ fn get_SystemProperties_(
+ objWbemPropertySet: *mut *mut ISWbemPropertySet,
+ ) -> HRESULT,
+ fn GetText_(
+ iObjectTextFormat: WbemObjectTextFormatEnum,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ bsText: *mut BSTR,
+ ) -> HRESULT,
+ fn SetFromText_(
+ bsText: BSTR,
+ iObjectTextFormat: WbemObjectTextFormatEnum,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemDateTime;
+DEFINE_GUID!{IID_ISWbemDateTime,
+ 0x5e97458a, 0xcf77, 0x11d3, 0xb3, 0x8f, 0x00, 0x10, 0x5a, 0x1f, 0x47, 0x3a}
+RIDL!{#[uuid(0x5e97458a, 0xcf77, 0x11d3, 0xb3, 0x8f, 0x00, 0x10, 0x5a, 0x1f, 0x47, 0x3a)]
+interface ISWbemDateTime(ISWbemDateTimeVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Value(
+ strValue: *mut BSTR,
+ ) -> HRESULT,
+ fn put_Value(
+ strValue: BSTR,
+ ) -> HRESULT,
+ fn get_Year(
+ iYear: *mut c_long,
+ ) -> HRESULT,
+ fn put_Year(
+ iYear: c_long,
+ ) -> HRESULT,
+ fn get_YearSpecified(
+ bYearSpecified: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_YearSpecified(
+ bYearSpecified: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_Month(
+ iMonth: *mut c_long,
+ ) -> HRESULT,
+ fn put_Month(
+ iMonth: c_long,
+ ) -> HRESULT,
+ fn get_MonthSpecified(
+ bMonthSpecified: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_MonthSpecified(
+ bMonthSpecified: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_Day(
+ iDay: *mut c_long,
+ ) -> HRESULT,
+ fn put_Day(
+ iDay: c_long,
+ ) -> HRESULT,
+ fn get_DaySpecified(
+ bDaySpecified: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_DaySpecified(
+ bDaySpecified: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_Hours(
+ iHours: *mut c_long,
+ ) -> HRESULT,
+ fn put_Hours(
+ iHours: c_long,
+ ) -> HRESULT,
+ fn get_HoursSpecified(
+ bHoursSpecified: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_HoursSpecified(
+ bHoursSpecified: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_Minutes(
+ iMinutes: *mut c_long,
+ ) -> HRESULT,
+ fn put_Minutes(
+ iMinutes: c_long,
+ ) -> HRESULT,
+ fn get_MinutesSpecified(
+ bMinutesSpecified: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_MinutesSpecified(
+ bMinutesSpecified: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_Seconds(
+ iSeconds: *mut c_long,
+ ) -> HRESULT,
+ fn put_Seconds(
+ iSeconds: c_long,
+ ) -> HRESULT,
+ fn get_SecondsSpecified(
+ bSecondsSpecified: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_SecondsSpecified(
+ bSecondsSpecified: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_Microseconds(
+ iMicroseconds: *mut c_long,
+ ) -> HRESULT,
+ fn put_Microseconds(
+ iMicroseconds: c_long,
+ ) -> HRESULT,
+ fn get_MicrosecondsSpecified(
+ bMicrosecondsSpecified: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_MicrosecondsSpecified(
+ bMicrosecondsSpecified: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_UTC(
+ iUTC: *mut c_long,
+ ) -> HRESULT,
+ fn put_UTC(
+ iUTC: c_long,
+ ) -> HRESULT,
+ fn get_UTCSpecified(
+ bUTCSpecified: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_UTCSpecified(
+ bUTCSpecified: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_IsInterval(
+ bIsInterval: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_IsInterval(
+ bIsInterval: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn GetVarDate(
+ bIsLocal: VARIANT_BOOL,
+ dVarDate: *mut DATE,
+ ) -> HRESULT,
+ fn SetVarDate(
+ dVarDate: DATE,
+ bIsLocal: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn GetFileTime(
+ bIsLocal: VARIANT_BOOL,
+ strFileTime: *mut BSTR,
+ ) -> HRESULT,
+ fn SetFileTime(
+ strFileTime: BSTR,
+ bIsLocal: VARIANT_BOOL,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemRefresher;
+DEFINE_GUID!{IID_ISWbemRefresher,
+ 0x14d8250e, 0xd9c2, 0x11d3, 0xb3, 0x8f, 0x00, 0x10, 0x5a, 0x1f, 0x47, 0x3a}
+RIDL!{#[uuid(0x14d8250e, 0xd9c2, 0x11d3, 0xb3, 0x8f, 0x00, 0x10, 0x5a, 0x1f, 0x47, 0x3a)]
+interface ISWbemRefresher(ISWbemRefresherVtbl): IDispatch(IDispatchVtbl) {
+ fn get__NewEnum(
+ pUnk: *mut *mut IUnknown,
+ ) -> HRESULT,
+ fn Item(
+ iIndex: c_long,
+ objWbemRefreshableItem: *mut *mut ISWbemRefreshableItem,
+ ) -> HRESULT,
+ fn get_Count(
+ iCount: *mut c_long,
+ ) -> HRESULT,
+ fn Add(
+ objWbemServices: *mut ISWbemServicesEx,
+ bsInstancePath: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemRefreshableItem: *mut *mut ISWbemRefreshableItem,
+ ) -> HRESULT,
+ fn AddEnum(
+ objWbemServices: *mut ISWbemServicesEx,
+ bsClassName: BSTR,
+ iFlags: c_long,
+ objWbemNamedValueSet: *mut IDispatch,
+ objWbemRefreshableItem: *mut *mut ISWbemRefreshableItem,
+ ) -> HRESULT,
+ fn Remove(
+ iIndex: c_long,
+ iFlags: c_long,
+ ) -> HRESULT,
+ fn Refresh(
+ iFlags: c_long,
+ ) -> HRESULT,
+ fn get_AutoReconnect(
+ bCount: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn put_AutoReconnect(
+ bCount: VARIANT_BOOL,
+ ) -> HRESULT,
+ fn DeleteAll() -> HRESULT,
+}}
+// EXTERN_C const IID IID_ISWbemRefreshableItem;
+DEFINE_GUID!{IID_ISWbemRefreshableItem,
+ 0x5ad4bf92, 0xdaab, 0x11d3, 0xb3, 0x8f, 0x00, 0x10, 0x5a, 0x1f, 0x47, 0x3a}
+RIDL!{#[uuid(0x5ad4bf92, 0xdaab, 0x11d3, 0xb3, 0x8f, 0x00, 0x10, 0x5a, 0x1f, 0x47, 0x3a)]
+interface ISWbemRefreshableItem(ISWbemRefreshableItemVtbl): IDispatch(IDispatchVtbl) {
+ fn get_Index(
+ iIndex: *mut c_long,
+ ) -> HRESULT,
+ fn get_Refresher(
+ objWbemRefresher: *mut *mut ISWbemRefresher,
+ ) -> HRESULT,
+ fn get_IsSet(
+ bIsSet: *mut VARIANT_BOOL,
+ ) -> HRESULT,
+ fn get_Object(
+ objWbemObject: *mut *mut ISWbemObjectEx,
+ ) -> HRESULT,
+ fn get_ObjectSet(
+ objWbemObjectSet: *mut *mut ISWbemObjectSet,
+ ) -> HRESULT,
+ fn Remove(
+ iFlags: c_long,
+ ) -> HRESULT,
+}}
+DEFINE_GUID!{CLSID_SWbemLocator,
+ 0x76A64158, 0xCB41, 0x11d1, 0x8B, 0x02, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6}
+// class DECLSPEC_UUID("76A64158-CB41-11d1-8B02-00600806D9B6")
+// SWbemLocator;
+DEFINE_GUID!{CLSID_SWbemNamedValueSet,
+ 0x9AED384E, 0xCE8B, 0x11d1, 0x8B, 0x05, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6}
+// class DECLSPEC_UUID("9AED384E-CE8B-11d1-8B05-00600806D9B6")
+// SWbemNamedValueSet;
+DEFINE_GUID!{CLSID_SWbemObjectPath,
+ 0x5791BC26, 0xCE9C, 0x11d1, 0x97, 0xBF, 0x00, 0x00, 0xF8, 0x1E, 0x84, 0x9C}
+// class DECLSPEC_UUID("5791BC26-CE9C-11d1-97BF-0000F81E849C")
+// SWbemObjectPath;
+DEFINE_GUID!{CLSID_SWbemLastError,
+ 0xC2FEEEAC, 0xCFCD, 0x11d1, 0x8B, 0x05, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6}
+// class DECLSPEC_UUID("C2FEEEAC-CFCD-11d1-8B05-00600806D9B6")
+// SWbemLastError;
+DEFINE_GUID!{CLSID_SWbemSink,
+ 0x75718C9A, 0xF029, 0x11d1, 0xA1, 0xAC, 0x00, 0xC0, 0x4F, 0xB6, 0xC2, 0x23}
+// class DECLSPEC_UUID("75718C9A-F029-11d1-A1AC-00C04FB6C223")
+// SWbemSink;
+DEFINE_GUID!{CLSID_SWbemDateTime,
+ 0x47DFBE54, 0xCF76, 0x11d3, 0xB3, 0x8F, 0x00, 0x10, 0x5A, 0x1F, 0x47, 0x3A}
+// class DECLSPEC_UUID("47DFBE54-CF76-11d3-B38F-00105A1F473A")
+// SWbemDateTime;
+DEFINE_GUID!{CLSID_SWbemRefresher,
+ 0xD269BF5C, 0xD9C1, 0x11d3, 0xB3, 0x8F, 0x00, 0x10, 0x5A, 0x1F, 0x47, 0x3A}
+// class DECLSPEC_UUID("D269BF5C-D9C1-11d3-B38F-00105A1F473A")
+// SWbemRefresher;
+DEFINE_GUID!{CLSID_SWbemServices,
+ 0x04B83D63, 0x21AE, 0x11d2, 0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6}
+// class DECLSPEC_UUID("04B83D63-21AE-11d2-8B33-00600806D9B6")
+// SWbemServices;
+DEFINE_GUID!{CLSID_SWbemServicesEx,
+ 0x62E522DC, 0x8CF3, 0x40a8, 0x8B, 0x2E, 0x37, 0xD5, 0x95, 0x65, 0x1E, 0x40}
+// class DECLSPEC_UUID("62E522DC-8CF3-40a8-8B2E-37D595651E40")
+// SWbemServicesEx;
+DEFINE_GUID!{CLSID_SWbemObject,
+ 0x04B83D62, 0x21AE, 0x11d2, 0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6}
+// class DECLSPEC_UUID("04B83D62-21AE-11d2-8B33-00600806D9B6")
+// SWbemObject;
+DEFINE_GUID!{CLSID_SWbemObjectEx,
+ 0xD6BDAFB2, 0x9435, 0x491f, 0xBB, 0x87, 0x6A, 0xA0, 0xF0, 0xBC, 0x31, 0xA2}
+// class DECLSPEC_UUID("D6BDAFB2-9435-491f-BB87-6AA0F0BC31A2")
+// SWbemObjectEx;
+DEFINE_GUID!{CLSID_SWbemObjectSet,
+ 0x04B83D61, 0x21AE, 0x11d2, 0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6}
+// class DECLSPEC_UUID("04B83D61-21AE-11d2-8B33-00600806D9B6")
+// SWbemObjectSet;
+DEFINE_GUID!{CLSID_SWbemNamedValue,
+ 0x04B83D60, 0x21AE, 0x11d2, 0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6}
+// class DECLSPEC_UUID("04B83D60-21AE-11d2-8B33-00600806D9B6")
+// SWbemNamedValue;
+DEFINE_GUID!{CLSID_SWbemQualifier,
+ 0x04B83D5F, 0x21AE, 0x11d2, 0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6}
+// class DECLSPEC_UUID("04B83D5F-21AE-11d2-8B33-00600806D9B6")
+// SWbemQualifier;
+DEFINE_GUID!{CLSID_SWbemQualifierSet,
+ 0x04B83D5E, 0x21AE, 0x11d2, 0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6}
+// class DECLSPEC_UUID("04B83D5E-21AE-11d2-8B33-00600806D9B6")
+// SWbemQualifierSet;
+DEFINE_GUID!{CLSID_SWbemProperty,
+ 0x04B83D5D, 0x21AE, 0x11d2, 0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6}
+// class DECLSPEC_UUID("04B83D5D-21AE-11d2-8B33-00600806D9B6")
+// SWbemProperty;
+DEFINE_GUID!{CLSID_SWbemPropertySet,
+ 0x04B83D5C, 0x21AE, 0x11d2, 0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6}
+// class DECLSPEC_UUID("04B83D5C-21AE-11d2-8B33-00600806D9B6")
+// SWbemPropertySet;
+DEFINE_GUID!{CLSID_SWbemMethod,
+ 0x04B83D5B, 0x21AE, 0x11d2, 0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6}
+// class DECLSPEC_UUID("04B83D5B-21AE-11d2-8B33-00600806D9B6")
+// SWbemMethod;
+DEFINE_GUID!{CLSID_SWbemMethodSet,
+ 0x04B83D5A, 0x21AE, 0x11d2, 0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6}
+// class DECLSPEC_UUID("04B83D5A-21AE-11d2-8B33-00600806D9B6")
+// SWbemMethodSet;
+DEFINE_GUID!{CLSID_SWbemEventSource,
+ 0x04B83D58, 0x21AE, 0x11d2, 0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6}
+// class DECLSPEC_UUID("04B83D58-21AE-11d2-8B33-00600806D9B6")
+// SWbemEventSource;
+DEFINE_GUID!{CLSID_SWbemSecurity,
+ 0xB54D66E9, 0x2287, 0x11d2, 0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6}
+// class DECLSPEC_UUID("B54D66E9-2287-11d2-8B33-00600806D9B6")
+// SWbemSecurity;
+DEFINE_GUID!{CLSID_SWbemPrivilege,
+ 0x26EE67BC, 0x5804, 0x11d2, 0x8B, 0x4A, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6}
+// class DECLSPEC_UUID("26EE67BC-5804-11d2-8B4A-00600806D9B6")
+// SWbemPrivilege;
+DEFINE_GUID!{CLSID_SWbemPrivilegeSet,
+ 0x26EE67BE, 0x5804, 0x11d2, 0x8B, 0x4A, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6}
+// class DECLSPEC_UUID("26EE67BE-5804-11d2-8B4A-00600806D9B6")
+// SWbemPrivilegeSet;
+DEFINE_GUID!{CLSID_SWbemRefreshableItem,
+ 0x8C6854BC, 0xDE4B, 0x11d3, 0xB3, 0x90, 0x00, 0x10, 0x5A, 0x1F, 0x47, 0x3A}
+// class DECLSPEC_UUID("8C6854BC-DE4B-11d3-B390-00105A1F473A")
+// SWbemRefreshableItem;
+pub const WBEMS_DISPID_OBJECT_READY: DISPID = 1;
+pub const WBEMS_DISPID_COMPLETED: DISPID = 2;
+pub const WBEMS_DISPID_PROGRESS: DISPID = 3;
+pub const WBEMS_DISPID_OBJECT_PUT: DISPID = 4;
+pub const WBEMS_DISPID_CONNECTION_READY: DISPID = 5;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemdisp_0000_0018_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemdisp_0000_0018_v0_0_s_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemdisp_0000_0026_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemdisp_0000_0026_v0_0_s_ifspec;
diff --git a/vendor/winapi/src/um/wbemprov.rs b/vendor/winapi/src/um/wbemprov.rs
new file mode 100644
index 000000000..4ba60eedc
--- /dev/null
+++ b/vendor/winapi/src/um/wbemprov.rs
@@ -0,0 +1,302 @@
+// 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 ctypes::{c_long, c_ulong};
+use shared::minwindef::{BYTE, DWORD};
+use shared::winerror::HRESULT;
+use shared::wtypes::BSTR;
+use um::oaidl::{VARIANT};
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::wbemcli::{
+ IWbemClassObject, IWbemContext, IWbemHiPerfEnum, IWbemObjectAccess, IWbemObjectSink,
+ IWbemObjectSinkVtbl, IWbemRefresher, IWbemServices
+};
+use um::winnt::{LONG, LPCWSTR, LPWSTR, WCHAR};
+pub type WBEM_VARIANT = VARIANT;
+pub type WBEM_WSTR = LPWSTR;
+pub type WBEM_CWSTR = LPCWSTR;
+ENUM!{enum WBEM_PROVIDER_REQUIREMENTS_TYPE {
+ WBEM_REQUIREMENTS_START_POSTFILTER = 0,
+ WBEM_REQUIREMENTS_STOP_POSTFILTER = 1,
+ WBEM_REQUIREMENTS_RECHECK_SUBSCRIPTIONS = 2,
+}}
+// extern RPC_IF_HANDLE __MIDL_itf_wbemprov_0000_0000_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemprov_0000_0000_v0_0_s_ifspec;
+// EXTERN_C const IID LIBID_WbemProviders_v1;
+// EXTERN_C const IID IID_IWbemPropertyProvider;
+DEFINE_GUID!{IID_IWbemPropertyProvider,
+ 0xce61e841, 0x65bc, 0x11d0, 0xb6, 0xbd, 0x00, 0xaa, 0x00, 0x32, 0x40, 0xc7}
+RIDL!{#[uuid(0xce61e841, 0x65bc, 0x11d0, 0xb6, 0xbd, 0x00, 0xaa, 0x00, 0x32, 0x40, 0xc7)]
+interface IWbemPropertyProvider(IWbemPropertyProviderVtbl): IUnknown(IUnknownVtbl) {
+ fn GetProperty(
+ lFlags: c_long,
+ strLocale: BSTR,
+ strClassMapping: BSTR,
+ strInstMapping: BSTR,
+ strPropMapping: BSTR,
+ pvValue: *mut VARIANT,
+ ) -> HRESULT,
+ fn PutProperty(
+ lFlags: c_long,
+ strLocale: BSTR,
+ strClassMapping: BSTR,
+ strInstMapping: BSTR,
+ strPropMapping: BSTR,
+ pvValue: *const VARIANT,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemUnboundObjectSink;
+DEFINE_GUID!{IID_IWbemUnboundObjectSink,
+ 0xe246107b, 0xb06e, 0x11d0, 0xad, 0x61, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff}
+RIDL!{#[uuid(0xe246107b, 0xb06e, 0x11d0, 0xad, 0x61, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff)]
+interface IWbemUnboundObjectSink(IWbemUnboundObjectSinkVtbl): IUnknown(IUnknownVtbl) {
+ fn IndicateToConsumer(
+ pLogicalConsumer: *mut IWbemClassObject,
+ lNumObjects: c_long,
+ apObjects: *mut *mut IWbemClassObject,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemEventProvider;
+DEFINE_GUID!{IID_IWbemEventProvider,
+ 0xe245105b, 0xb06e, 0x11d0, 0xad, 0x61, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff}
+RIDL!{#[uuid(0xe245105b, 0xb06e, 0x11d0, 0xad, 0x61, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff)]
+interface IWbemEventProvider(IWbemEventProviderVtbl): IUnknown(IUnknownVtbl) {
+ fn ProvideEvents(
+ pSink: *mut IWbemObjectSink,
+ lFlags: c_long,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemEventProviderQuerySink;
+DEFINE_GUID!{IID_IWbemEventProviderQuerySink,
+ 0x580acaf8, 0xfa1c, 0x11d0, 0xad, 0x72, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff}
+RIDL!{#[uuid(0x580acaf8, 0xfa1c, 0x11d0, 0xad, 0x72, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff)]
+interface IWbemEventProviderQuerySink(IWbemEventProviderQuerySinkVtbl): IUnknown(IUnknownVtbl) {
+ fn NewQuery(
+ dwId: c_ulong,
+ wszQueryLanguage: WBEM_WSTR,
+ wszQuery: WBEM_WSTR,
+ ) -> HRESULT,
+ fn CancelQuery(
+ dwId: c_ulong,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemEventProviderSecurity;
+DEFINE_GUID!{IID_IWbemEventProviderSecurity,
+ 0x631f7d96, 0xd993, 0x11d2, 0xb3, 0x39, 0x00, 0x10, 0x5a, 0x1f, 0x4a, 0xaf}
+RIDL!{#[uuid(0x631f7d96, 0xd993, 0x11d2, 0xb3, 0x39, 0x00, 0x10, 0x5a, 0x1f, 0x4a, 0xaf)]
+interface IWbemEventProviderSecurity(IWbemEventProviderSecurityVtbl): IUnknown(IUnknownVtbl) {
+ fn AccessCheck(
+ wszQueryLanguage: WBEM_CWSTR,
+ wszQuery: WBEM_CWSTR,
+ lSidLength: c_long,
+ pSid: *const BYTE,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemEventConsumerProvider;
+DEFINE_GUID!{IID_IWbemEventConsumerProvider,
+ 0xe246107a, 0xb06e, 0x11d0, 0xad, 0x61, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff}
+RIDL!{#[uuid(0xe246107a, 0xb06e, 0x11d0, 0xad, 0x61, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff)]
+interface IWbemEventConsumerProvider(IWbemEventConsumerProviderVtbl): IUnknown(IUnknownVtbl) {
+ fn FindConsumer(
+ pLogicalConsumer: *mut IWbemClassObject,
+ ppConsumer: *mut *mut IWbemUnboundObjectSink,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemProviderInitSink;
+DEFINE_GUID!{IID_IWbemProviderInitSink,
+ 0x1be41571, 0x91dd, 0x11d1, 0xae, 0xb2, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20}
+RIDL!{#[uuid(0x1be41571, 0x91dd, 0x11d1, 0xae, 0xb2, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20)]
+interface IWbemProviderInitSink(IWbemProviderInitSinkVtbl): IUnknown(IUnknownVtbl) {
+ fn SetStatus(
+ lStatus: LONG,
+ lFlags: LONG,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemProviderInit;
+DEFINE_GUID!{IID_IWbemProviderInit,
+ 0x1be41572, 0x91dd, 0x11d1, 0xae, 0xb2, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20}
+RIDL!{#[uuid(0x1be41572, 0x91dd, 0x11d1, 0xae, 0xb2, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20)]
+interface IWbemProviderInit(IWbemProviderInitVtbl): IUnknown(IUnknownVtbl) {
+ fn Initialize(
+ wszUser: LPWSTR,
+ lFlags: LONG,
+ wszNamespace: LPWSTR,
+ wszLocale: LPWSTR,
+ pNamespace: *mut IWbemServices,
+ pCtx: *mut IWbemContext,
+ pInitSink: *mut IWbemProviderInitSink,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemHiPerfProvider;
+DEFINE_GUID!{IID_IWbemHiPerfProvider,
+ 0x49353c93, 0x516b, 0x11d1, 0xae, 0xa6, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20}
+RIDL!{#[uuid(0x49353c93, 0x516b, 0x11d1, 0xae, 0xa6, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20)]
+interface IWbemHiPerfProvider(IWbemHiPerfProviderVtbl): IUnknown(IUnknownVtbl) {
+ fn QueryInstances(
+ pNamespace: *mut IWbemServices,
+ wszClass: *mut WCHAR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ pSink: *mut IWbemObjectSink,
+ ) -> HRESULT,
+ fn CreateRefresher(
+ pNamespace: *mut IWbemServices,
+ lFlags: c_long,
+ ppRefresher: *mut *mut IWbemRefresher,
+ ) -> HRESULT,
+ fn CreateRefreshableObject(
+ pNamespace: *mut IWbemServices,
+ pTemplate: *mut IWbemObjectAccess,
+ pRefresher: *mut IWbemRefresher,
+ lFlags: c_long,
+ pContext: *mut IWbemContext,
+ ppRefreshable: *mut *mut IWbemObjectAccess,
+ plId: *mut c_long,
+ ) -> HRESULT,
+ fn StopRefreshing(
+ pRefresher: *mut IWbemRefresher,
+ lId: c_long,
+ lFlags: c_long,
+ ) -> HRESULT,
+ fn CreateRefreshableEnum(
+ pNamespace: *mut IWbemServices,
+ wszClass: LPCWSTR,
+ pRefresher: *mut IWbemRefresher,
+ lFlags: c_long,
+ pContext: *mut IWbemContext,
+ pHiPerfEnum: *mut IWbemHiPerfEnum,
+ plId: *mut c_long,
+ ) -> HRESULT,
+ fn GetObjects(
+ pNamespace: *mut IWbemServices,
+ lNumObjects: c_long,
+ apObj: *mut *mut IWbemObjectAccess,
+ lFlags: c_long,
+ pContext: *mut IWbemContext,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemDecoupledRegistrar;
+DEFINE_GUID!{IID_IWbemDecoupledRegistrar,
+ 0x1005cbcf, 0xe64f, 0x4646, 0xbc, 0xd3, 0x3a, 0x08, 0x9d, 0x8a, 0x84, 0xb4}
+RIDL!{#[uuid(0x1005cbcf, 0xe64f, 0x4646, 0xbc, 0xd3, 0x3a, 0x08, 0x9d, 0x8a, 0x84, 0xb4)]
+interface IWbemDecoupledRegistrar(IWbemDecoupledRegistrarVtbl): IUnknown(IUnknownVtbl) {
+ fn Register(
+ a_Flags: c_long,
+ a_Context: *mut IWbemContext,
+ a_User: LPCWSTR,
+ a_Locale: LPCWSTR,
+ a_Scope: LPCWSTR,
+ a_Registration: LPCWSTR,
+ pIUnknown: *mut IUnknown,
+ ) -> HRESULT,
+ fn UnRegister() -> HRESULT,
+}}
+DEFINE_GUID!{CLSID_WbemAdministrativeLocator,
+ 0xcb8555cc, 0x9128, 0x11d1, 0xad, 0x9b, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff}
+// class DECLSPEC_UUID("cb8555cc-9128-11d1-ad9b-00c04fd8fdff")
+// WbemAdministrativeLocator;
+DEFINE_GUID!{CLSID_WbemAuthenticatedLocator,
+ 0xcd184336, 0x9128, 0x11d1, 0xad, 0x9b, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff}
+// class DECLSPEC_UUID("cd184336-9128-11d1-ad9b-00c04fd8fdff")
+// WbemAuthenticatedLocator;
+DEFINE_GUID!{CLSID_WbemUnauthenticatedLocator,
+ 0x443E7B79, 0xDE31, 0x11d2, 0xB3, 0x40, 0x00, 0x10, 0x4B, 0xCC, 0x4B, 0x4A}
+// class DECLSPEC_UUID("443E7B79-DE31-11d2-B340-00104BCC4B4A")
+// WbemUnauthenticatedLocator;
+DEFINE_GUID!{CLSID_WbemDecoupledRegistrar,
+ 0x4cfc7932, 0x0f9d, 0x4bef, 0x9c, 0x32, 0x8e, 0xa2, 0xa6, 0xb5, 0x6f, 0xcb}
+// class DECLSPEC_UUID("4cfc7932-0f9d-4bef-9c32-8ea2a6b56fcb")
+// WbemDecoupledRegistrar;
+DEFINE_GUID!{CLSID_WbemDecoupledBasicEventProvider,
+ 0xf5f75737, 0x2843, 0x4f22, 0x93, 0x3d, 0xc7, 0x6a, 0x97, 0xcd, 0xa6, 0x2f}
+// class DECLSPEC_UUID("f5f75737-2843-4f22-933d-c76a97cda62f")
+// WbemDecoupledBasicEventProvider;
+// EXTERN_C const IID IID_IWbemProviderIdentity;
+DEFINE_GUID!{IID_IWbemProviderIdentity,
+ 0x631f7d97, 0xd993, 0x11d2, 0xb3, 0x39, 0x00, 0x10, 0x5a, 0x1f, 0x4a, 0xaf}
+RIDL!{#[uuid(0x631f7d97, 0xd993, 0x11d2, 0xb3, 0x39, 0x00, 0x10, 0x5a, 0x1f, 0x4a, 0xaf)]
+interface IWbemProviderIdentity(IWbemProviderIdentityVtbl): IUnknown(IUnknownVtbl) {
+ fn SetRegistrationObject(
+ lFlags: c_long,
+ pProvReg: *mut IWbemClassObject,
+ ) -> HRESULT,
+}}
+ENUM!{enum WBEM_EXTRA_RETURN_CODES {
+ WBEM_S_INITIALIZED = 0,
+ WBEM_S_LIMITED_SERVICE = 0x43001,
+ WBEM_S_INDIRECTLY_UPDATED = WBEM_S_LIMITED_SERVICE + 1,
+ WBEM_S_SUBJECT_TO_SDS = WBEM_S_INDIRECTLY_UPDATED + 1,
+ WBEM_E_RETRY_LATER = 0x80043001,
+ WBEM_E_RESOURCE_CONTENTION = WBEM_E_RETRY_LATER + 1,
+}}
+ENUM!{enum WBEM_PROVIDER_FLAGS {
+ WBEM_FLAG_OWNER_UPDATE = 0x10000,
+}}
+// extern RPC_IF_HANDLE __MIDL_itf_wbemprov_0000_0008_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemprov_0000_0008_v0_0_s_ifspec;
+// EXTERN_C const IID IID_IWbemDecoupledBasicEventProvider;
+DEFINE_GUID!{IID_IWbemDecoupledBasicEventProvider,
+ 0x86336d20, 0xca11, 0x4786, 0x9e, 0xf1, 0xbc, 0x8a, 0x94, 0x6b, 0x42, 0xfc}
+RIDL!{#[uuid(0x86336d20, 0xca11, 0x4786, 0x9e, 0xf1, 0xbc, 0x8a, 0x94, 0x6b, 0x42, 0xfc)]
+interface IWbemDecoupledBasicEventProvider(IWbemDecoupledBasicEventProviderVtbl):
+ IWbemDecoupledRegistrar(IWbemDecoupledRegistrarVtbl) {
+ fn GetSink(
+ a_Flags: c_long,
+ a_Context: *mut IWbemContext,
+ a_Sink: *mut *mut IWbemObjectSink,
+ ) -> HRESULT,
+ fn GetService(
+ a_Flags: c_long,
+ a_Context: *mut IWbemContext,
+ a_Service: *mut *mut IWbemServices,
+ ) -> HRESULT,
+}}
+ENUM!{enum WBEM_BATCH_TYPE {
+ WBEM_FLAG_BATCH_IF_NEEDED = 0,
+ WBEM_FLAG_MUST_BATCH = 0x1,
+ WBEM_FLAG_MUST_NOT_BATCH = 0x2,
+}}
+// extern RPC_IF_HANDLE __MIDL_itf_wbemprov_0000_0013_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemprov_0000_0013_v0_0_s_ifspec;
+// EXTERN_C const IID IID_IWbemEventSink;
+DEFINE_GUID!{IID_IWbemEventSink,
+ 0x3ae0080a, 0x7e3a, 0x4366, 0xbf, 0x89, 0x0f, 0xee, 0xdc, 0x93, 0x16, 0x59}
+RIDL!{#[uuid(0x3ae0080a, 0x7e3a, 0x4366, 0xbf, 0x89, 0x0f, 0xee, 0xdc, 0x93, 0x16, 0x59)]
+interface IWbemEventSink(IWbemEventSinkVtbl): IWbemObjectSink(IWbemObjectSinkVtbl) {
+ fn SetSinkSecurity(
+ lSDLength: c_long,
+ pSD: *mut BYTE,
+ ) -> HRESULT,
+ fn IsActive() -> HRESULT,
+ fn GetRestrictedSink(
+ lNumQueries: c_long,
+ awszQueries: *const LPCWSTR,
+ pCallback: *mut IUnknown,
+ ppSink: *mut *mut IWbemEventSink,
+ ) -> HRESULT,
+ fn SetBatchingParameters(
+ lFlags: LONG,
+ dwMaxBufferSize: DWORD,
+ dwMaxSendLatency: DWORD,
+ ) -> HRESULT,
+}}
+// extern RPC_IF_HANDLE __MIDL_itf_wbemprov_0000_0014_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemprov_0000_0014_v0_0_s_ifspec;
+// unsigned c_long __RPC_USER BSTR_UserSize( __RPC__in unsigned c_long *, unsigned c_long, __RPC__in BSTR * );
+// unsigned char * __RPC_USER BSTR_UserMarshal( __RPC__in unsigned c_long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in BSTR * );
+// unsigned char * __RPC_USER BSTR_UserUnmarshal(__RPC__in unsigned c_long *, __RPC__in_xcount(0) unsigned char *, __RPC__out BSTR * );
+// void __RPC_USER BSTR_UserFree( __RPC__in unsigned c_long *, __RPC__in BSTR * );
+// unsigned c_long __RPC_USER VARIANT_UserSize( __RPC__in unsigned c_long *, unsigned c_long, __RPC__in VARIANT * );
+// unsigned char * __RPC_USER VARIANT_UserMarshal( __RPC__in unsigned c_long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in VARIANT * );
+// unsigned char * __RPC_USER VARIANT_UserUnmarshal(__RPC__in unsigned c_long *, __RPC__in_xcount(0) unsigned char *, __RPC__out VARIANT * );
+// void __RPC_USER VARIANT_UserFree( __RPC__in unsigned c_long *, __RPC__in VARIANT * );
+// unsigned c_long __RPC_USER BSTR_UserSize64( __RPC__in unsigned c_long *, unsigned c_long, __RPC__in BSTR * );
+// unsigned char * __RPC_USER BSTR_UserMarshal64( __RPC__in unsigned c_long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in BSTR * );
+// unsigned char * __RPC_USER BSTR_UserUnmarshal64(__RPC__in unsigned c_long *, __RPC__in_xcount(0) unsigned char *, __RPC__out BSTR * );
+// void __RPC_USER BSTR_UserFree64( __RPC__in unsigned c_long *, __RPC__in BSTR * );
+// unsigned c_long __RPC_USER VARIANT_UserSize64( __RPC__in unsigned c_long *, unsigned c_long, __RPC__in VARIANT * );
+// unsigned char * __RPC_USER VARIANT_UserMarshal64( __RPC__in unsigned c_long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in VARIANT * );
+// unsigned char * __RPC_USER VARIANT_UserUnmarshal64(__RPC__in unsigned c_long *, __RPC__in_xcount(0) unsigned char *, __RPC__out VARIANT * );
+// void __RPC_USER VARIANT_UserFree64( __RPC__in unsigned c_long *, __RPC__in VARIANT * );
diff --git a/vendor/winapi/src/um/wbemtran.rs b/vendor/winapi/src/um/wbemtran.rs
new file mode 100644
index 000000000..6f9d4a6ed
--- /dev/null
+++ b/vendor/winapi/src/um/wbemtran.rs
@@ -0,0 +1,184 @@
+// 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 ctypes::{c_long, c_void};
+use shared::guiddef::REFIID;
+use shared::minwindef::{BYTE, DWORD};
+use shared::winerror::HRESULT;
+use shared::wtypes::BSTR;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::wbemcli::{IWbemCallResult, IWbemContext, IWbemObjectSink, IWbemServices};
+use um::winnt::{LPCWSTR, LPWSTR};
+// extern RPC_IF_HANDLE __MIDL_itf_wbemtran_0000_0000_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemtran_0000_0000_v0_0_s_ifspec;
+ENUM!{enum WBEM_LOGIN_TYPE {
+ WBEM_FLAG_INPROC_LOGIN = 0,
+ WBEM_FLAG_LOCAL_LOGIN = 1,
+ WBEM_FLAG_REMOTE_LOGIN = 2,
+ WBEM_AUTHENTICATION_METHOD_MASK = 0xf,
+ WBEM_FLAG_USE_MULTIPLE_CHALLENGES = 0x10,
+}}
+pub type WBEM_128BITS = *mut BYTE;
+// EXTERN_C const IID LIBID_WbemTransports_v1;
+// EXTERN_C const IID IID_IWbemTransport;
+DEFINE_GUID!{IID_IWbemTransport,
+ 0x553fe584, 0x2156, 0x11d0, 0xb6, 0xae, 0x00, 0xaa, 0x00, 0x32, 0x40, 0xc7}
+RIDL!{#[uuid(0x553fe584, 0x2156, 0x11d0, 0xb6, 0xae, 0x00, 0xaa, 0x00, 0x32, 0x40, 0xc7)]
+interface IWbemTransport(IWbemTransportVtbl): IUnknown(IUnknownVtbl) {
+ fn Initialize() -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemLevel1Login;
+DEFINE_GUID!{IID_IWbemLevel1Login,
+ 0xf309ad18, 0xd86a, 0x11d0, 0xa0, 0x75, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20}
+RIDL!{#[uuid(0xf309ad18, 0xd86a, 0x11d0, 0xa0, 0x75, 0x00, 0xc0, 0x4f, 0xb6, 0x88, 0x20)]
+interface IWbemLevel1Login(IWbemLevel1LoginVtbl): IUnknown(IUnknownVtbl) {
+ fn EstablishPosition(
+ wszLocaleList: LPWSTR,
+ dwNumLocales: DWORD,
+ reserved: *mut DWORD,
+ ) -> HRESULT,
+ fn RequestChallenge(
+ wszNetworkResource: LPWSTR,
+ wszUser: LPWSTR,
+ Nonce: WBEM_128BITS,
+ ) -> HRESULT,
+ fn WBEMLogin(
+ wszPreferredLocale: LPWSTR,
+ AccessToken: WBEM_128BITS,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ ppNamespace: *mut *mut IWbemServices,
+ ) -> HRESULT,
+ fn NTLMLogin(
+ wszNetworkResource: LPWSTR,
+ wszPreferredLocale: LPWSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ ppNamespace: *mut *mut IWbemServices,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemConnectorLogin;
+DEFINE_GUID!{IID_IWbemConnectorLogin,
+ 0xd8ec9cb1, 0xb135, 0x4f10, 0x8b, 0x1b, 0xc7, 0x18, 0x8b, 0xb0, 0xd1, 0x86}
+RIDL!{#[uuid(0xd8ec9cb1, 0xb135, 0x4f10, 0x8b, 0x1b, 0xc7, 0x18, 0x8b, 0xb0, 0xd1, 0x86)]
+interface IWbemConnectorLogin(IWbemConnectorLoginVtbl): IUnknown(IUnknownVtbl) {
+ fn ConnectorLogin(
+ wszNetworkResource: LPWSTR,
+ wszPreferredLocale: LPWSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ riid: REFIID,
+ pInterface: *mut *mut c_void,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemAddressResolution;
+DEFINE_GUID!{IID_IWbemAddressResolution,
+ 0xf7ce2e12, 0x8c90, 0x11d1, 0x9e, 0x7b, 0x00, 0xc0, 0x4f, 0xc3, 0x24, 0xa8}
+RIDL!{#[uuid(0xf7ce2e12, 0x8c90, 0x11d1, 0x9e, 0x7b, 0x00, 0xc0, 0x4f, 0xc3, 0x24, 0xa8)]
+interface IWbemAddressResolution(IWbemAddressResolutionVtbl): IUnknown(IUnknownVtbl) {
+ fn Resolve(
+ wszNamespacePath: LPWSTR,
+ wszAddressType: LPWSTR,
+ pdwAddressLength: *mut DWORD,
+ pabBinaryAddress: *mut *mut BYTE,
+ ) -> HRESULT,
+}}
+DEFINE_GUID!{CLSID_WbemLevel1Login,
+ 0x8BC3F05E, 0xD86B, 0x11d0, 0xA0, 0x75, 0x00, 0xC0, 0x4F, 0xB6, 0x88, 0x20}
+// class DECLSPEC_UUID("8BC3F05E-D86B-11d0-A075-00C04FB68820")
+// WbemLevel1Login;
+DEFINE_GUID!{CLSID_WbemLocalAddrRes,
+ 0xA1044801, 0x8F7E, 0x11d1, 0x9E, 0x7C, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8}
+// class DECLSPEC_UUID("A1044801-8F7E-11d1-9E7C-00C04FC324A8")
+// WbemLocalAddrRes;
+DEFINE_GUID!{CLSID_WbemUninitializedClassObject,
+ 0x7a0227f6, 0x7108, 0x11d1, 0xad, 0x90, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff}
+// class DECLSPEC_UUID("7a0227f6-7108-11d1-ad90-00c04fd8fdff")
+// WbemUninitializedClassObject;
+// EXTERN_C const IID IID_IWbemClientTransport;
+DEFINE_GUID!{IID_IWbemClientTransport,
+ 0xf7ce2e11, 0x8c90, 0x11d1, 0x9e, 0x7b, 0x00, 0xc0, 0x4f, 0xc3, 0x24, 0xa8}
+RIDL!{#[uuid(0xf7ce2e11, 0x8c90, 0x11d1, 0x9e, 0x7b, 0x00, 0xc0, 0x4f, 0xc3, 0x24, 0xa8)]
+interface IWbemClientTransport(IWbemClientTransportVtbl): IUnknown(IUnknownVtbl) {
+ fn ConnectServer(
+ strAddressType: BSTR,
+ dwBinaryAddressLength: DWORD,
+ abBinaryAddress: *mut BYTE,
+ strNetworkResource: BSTR,
+ strUser: BSTR,
+ strPassword: BSTR,
+ strLocale: BSTR,
+ lSecurityFlags: c_long,
+ strAuthority: BSTR,
+ pCtx: *mut IWbemContext,
+ ppNamespace: *mut *mut IWbemServices,
+ ) -> HRESULT,
+}}
+// EXTERN_C const IID IID_IWbemClientConnectionTransport;
+DEFINE_GUID!{IID_IWbemClientConnectionTransport,
+ 0xa889c72a, 0xfcc1, 0x4a9e, 0xaf, 0x61, 0xed, 0x07, 0x13, 0x33, 0xfb, 0x5b}
+RIDL!{#[uuid(0xa889c72a, 0xfcc1, 0x4a9e, 0xaf, 0x61, 0xed, 0x07, 0x13, 0x33, 0xfb, 0x5b)]
+interface IWbemClientConnectionTransport(IWbemClientConnectionTransportVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn Open(
+ strAddressType: BSTR,
+ dwBinaryAddressLength: DWORD,
+ abBinaryAddress: *mut BYTE,
+ strObject: BSTR,
+ strUser: BSTR,
+ strPassword: BSTR,
+ strLocale: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ riid: REFIID,
+ pInterface: *mut *mut c_void,
+ pCallRes: *mut *mut IWbemCallResult,
+ ) -> HRESULT,
+ fn OpenAsync(
+ strAddressType: BSTR,
+ dwBinaryAddressLength: DWORD,
+ abBinaryAddress: *mut BYTE,
+ strObject: BSTR,
+ strUser: BSTR,
+ strPassword: BSTR,
+ strLocale: BSTR,
+ lFlags: c_long,
+ pCtx: *mut IWbemContext,
+ riid: REFIID,
+ pResponseHandler: *mut IWbemObjectSink,
+ ) -> HRESULT,
+ fn Cancel(
+ lFlags: c_long,
+ pHandler: *mut IWbemObjectSink,
+ ) -> HRESULT,
+}}
+DEFINE_GUID!{CLSID_WbemDCOMTransport,
+ 0xF7CE2E13, 0x8C90, 0x11d1, 0x9E, 0x7B, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8}
+// class DECLSPEC_UUID("F7CE2E13-8C90-11d1-9E7B-00C04FC324A8")
+// WbemDCOMTransport;
+// EXTERN_C const IID IID_IWbemConstructClassObject;
+DEFINE_GUID!{IID_IWbemConstructClassObject,
+ 0x9ef76194, 0x70d5, 0x11d1, 0xad, 0x90, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff}
+RIDL!{#[uuid(0x9ef76194, 0x70d5, 0x11d1, 0xad, 0x90, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff)]
+interface IWbemConstructClassObject(IWbemConstructClassObjectVtbl): IUnknown(IUnknownVtbl) {
+ fn SetInheritanceChain(
+ lNumAntecedents: c_long,
+ awszAntecedents: *mut LPWSTR,
+ ) -> HRESULT,
+ fn SetPropertyOrigin(
+ wszPropertyName: LPCWSTR,
+ lOriginIndex: c_long,
+ ) -> HRESULT,
+ fn SetMethodOrigin(
+ wszMethodName: LPCWSTR,
+ lOriginIndex: c_long,
+ ) -> HRESULT,
+ fn SetServerNamespace(
+ wszServer: LPCWSTR,
+ wszNamespace: LPCWSTR,
+ ) -> HRESULT,
+}}
+// extern RPC_IF_HANDLE __MIDL_itf_wbemtran_0000_0008_v0_0_c_ifspec;
+// extern RPC_IF_HANDLE __MIDL_itf_wbemtran_0000_0008_v0_0_s_ifspec;
diff --git a/vendor/winapi/src/um/wct.rs b/vendor/winapi/src/um/wct.rs
new file mode 100644
index 000000000..0c3fae910
--- /dev/null
+++ b/vendor/winapi/src/um/wct.rs
@@ -0,0 +1,114 @@
+// 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 ctypes::c_int;
+use shared::basetsd::{DWORD_PTR, SIZE_T};
+use shared::guiddef::GUID;
+use shared::minwindef::{BOOL, DWORD, LPBOOL, LPDWORD, PULONG};
+use um::winnt::{HRESULT, LARGE_INTEGER, WCHAR};
+ENUM!{enum WCT_OBJECT_TYPE {
+ WctCriticalSectionType = 1,
+ WctSendMessageType,
+ WctMutexType,
+ WctAlpcType,
+ WctComType,
+ WctThreadWaitType,
+ WctProcessWaitType,
+ WctThreadType,
+ WctComActivationType,
+ WctUnknownType,
+ WctSocketIoType,
+ WctSmbIoType,
+ WctMaxType,
+}}
+ENUM!{enum WCT_OBJECT_STATUS {
+ WctStatusNoAccess = 1,
+ WctStatusRunning,
+ WctStatusBlocked,
+ WctStatusPidOnly,
+ WctStatusPidOnlyRpcss,
+ WctStatusOwned,
+ WctStatusNotOwned,
+ WctStatusAbandoned,
+ WctStatusUnknown,
+ WctStatusError,
+ WctStatusMax,
+}}
+pub const WCT_MAX_NODE_COUNT: SIZE_T = 16;
+pub const WCT_OBJNAME_LENGTH: SIZE_T = 128;
+STRUCT!{struct WAITCHAIN_NODE_INFO_LOCK_OBJECT {
+ ObjectName: [WCHAR; WCT_OBJNAME_LENGTH],
+ Timeout: LARGE_INTEGER,
+ Alertable: BOOL,
+}}
+STRUCT!{struct WAITCHAIN_NODE_INFO_THREAD_OBJECT {
+ ProcessId: DWORD,
+ ThreadId: DWORD,
+ WaitTime: DWORD,
+ ContextSwitches: DWORD,
+}}
+UNION!{union WAITCHAIN_NODE_INFO_u {
+ [u64; 34],
+ LockObject LockObject_mut: WAITCHAIN_NODE_INFO_LOCK_OBJECT,
+ ThreadObject ThreadObject_mut: WAITCHAIN_NODE_INFO_THREAD_OBJECT,
+}}
+STRUCT!{struct WAITCHAIN_NODE_INFO {
+ ObjectType: WCT_OBJECT_TYPE,
+ ObjectStatus: WCT_OBJECT_STATUS,
+ u: WAITCHAIN_NODE_INFO_u,
+}}
+pub type PWAITCHAIN_NODE_INFO = *mut WAITCHAIN_NODE_INFO;
+DECLARE_HANDLE!{HWCT, HWCT__}
+FN!{cdecl PWAITCHAINCALLBACK(
+ WctHandle: HWCT,
+ Context: DWORD_PTR,
+ CallbackStatus: DWORD,
+ NodeCount: LPDWORD,
+ NodeInfoArray: PWAITCHAIN_NODE_INFO,
+ IsCycle: LPBOOL,
+) -> ()}
+pub const WCT_ASYNC_OPEN_FLAG: DWORD = 1;
+pub const WCTP_OPEN_ALL_FLAGS: DWORD = WCT_ASYNC_OPEN_FLAG;
+extern "system" {
+ pub fn OpenThreadWaitChainSession(
+ Flags: DWORD,
+ callback: PWAITCHAINCALLBACK,
+ ) -> HWCT;
+ pub fn CloseThreadWaitChainSession(
+ WctHandle: HWCT,
+ );
+}
+pub const WCT_OUT_OF_PROC_FLAG: DWORD = 0x1;
+pub const WCT_OUT_OF_PROC_COM_FLAG: DWORD = 0x2;
+pub const WCT_OUT_OF_PROC_CS_FLAG: DWORD = 0x4;
+pub const WCT_NETWORK_IO_FLAG: DWORD = 0x8;
+pub const WCTP_GETINFO_ALL_FLAGS: DWORD = WCT_OUT_OF_PROC_FLAG | WCT_OUT_OF_PROC_COM_FLAG
+ | WCT_OUT_OF_PROC_CS_FLAG;
+extern "system" {
+ pub fn GetThreadWaitChain(
+ WctHandle: HWCT,
+ Context: DWORD_PTR,
+ Flags: DWORD,
+ ThreadId: DWORD,
+ NodeCount: LPDWORD,
+ NodeInfoArray: PWAITCHAIN_NODE_INFO,
+ IsCycle: LPBOOL,
+ ) -> BOOL;
+}
+FN!{cdecl PCOGETCALLSTATE(
+ c_int,
+ PULONG,
+) -> HRESULT}
+FN!{cdecl PCOGETACTIVATIONSTATE(
+ GUID,
+ DWORD,
+ *mut DWORD,
+) -> HRESULT}
+extern "system" {
+ pub fn RegisterWaitChainCOMCallback(
+ CallStateCallback: PCOGETCALLSTATE,
+ ActivationStateCallback: PCOGETACTIVATIONSTATE,
+ );
+}
diff --git a/vendor/winapi/src/um/werapi.rs b/vendor/winapi/src/um/werapi.rs
new file mode 100644
index 000000000..f6dcf103e
--- /dev/null
+++ b/vendor/winapi/src/um/werapi.rs
@@ -0,0 +1,64 @@
+// 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.
+//! Function prototypes for Windows Error Reporting (WER)
+use shared::minwindef::{BOOL, DWORD, PDWORD};
+use um::winnt::{HANDLE, HRESULT, PCWSTR, PVOID};
+pub const WER_FAULT_REPORTING_FLAG_NOHEAP: DWORD = 1;
+pub const WER_FAULT_REPORTING_FLAG_QUEUE: DWORD = 2;
+pub const WER_FAULT_REPORTING_FLAG_DISABLE_THREAD_SUSPENSION: DWORD = 4;
+pub const WER_FAULT_REPORTING_FLAG_QUEUE_UPLOAD: DWORD = 8;
+pub const WER_FAULT_REPORTING_ALWAYS_SHOW_UI: DWORD = 16;
+pub const WER_FAULT_REPORTING_NO_UI: DWORD = 32;
+pub const WER_FAULT_REPORTING_FLAG_NO_HEAP_ON_QUEUE: DWORD = 64;
+pub const WER_FAULT_REPORTING_DISABLE_SNAPSHOT_CRASH: DWORD = 128;
+pub const WER_FAULT_REPORTING_DISABLE_SNAPSHOT_HANG: DWORD = 256;
+pub const WER_FAULT_REPORTING_CRITICAL: DWORD = 512;
+pub const WER_FAULT_REPORTING_DURABLE: DWORD = 1024;
+ENUM!{enum WER_REGISTER_FILE_TYPE {
+ WerRegFileTypeUserDocument = 1,
+ WerRegFileTypeOther = 2,
+ WerRegFileTypeMax,
+}}
+extern "system" {
+ pub fn WerRegisterFile(
+ pwzFile: PCWSTR,
+ regFileType: WER_REGISTER_FILE_TYPE,
+ dwFlags: DWORD,
+ ) -> HRESULT;
+ pub fn WerUnregisterFile(
+ pwzFilePath: PCWSTR,
+ ) -> HRESULT;
+ pub fn WerRegisterMemoryBlock(
+ pvAddress: PVOID,
+ dwSize: DWORD,
+ ) -> HRESULT;
+ pub fn WerUnregisterMemoryBlock(
+ pvAddress: PVOID,
+ ) -> HRESULT;
+ pub fn WerSetFlags(
+ dwFlags: DWORD,
+ ) -> HRESULT;
+ pub fn WerGetFlags(
+ hProcess: HANDLE,
+ pdwFlags: PDWORD,
+ ) -> HRESULT;
+ pub fn WerAddExcludedApplication(
+ pwzExeName: PCWSTR,
+ bAllUsers: BOOL,
+ ) -> HRESULT;
+ pub fn WerRemoveExcludedApplication(
+ pwzExeName: PCWSTR,
+ bAllUsers: BOOL,
+ ) -> HRESULT;
+ pub fn WerRegisterRuntimeExceptionModule(
+ pwszOutOfProcessCallbackDll: PCWSTR,
+ pContext: PVOID,
+ ) -> HRESULT;
+ pub fn WerUnregisterRuntimeExceptionModule(
+ pwszOutOfProcessCallbackDll: PCWSTR,
+ pContext: PVOID,
+ ) -> HRESULT;
+}
diff --git a/vendor/winapi/src/um/winbase.rs b/vendor/winapi/src/um/winbase.rs
new file mode 100644
index 000000000..1891738e2
--- /dev/null
+++ b/vendor/winapi/src/um/winbase.rs
@@ -0,0 +1,2854 @@
+// 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.
+//! This module defines the 32-Bit Windows Base APIs
+use ctypes::{c_char, c_int, c_long, c_void};
+use shared::basetsd::{
+ DWORD64, DWORD_PTR, LONG_PTR, PDWORD64, PDWORD_PTR, PSIZE_T, PULONG_PTR, SIZE_T, UINT_PTR,
+ ULONG_PTR,
+};
+use shared::guiddef::GUID;
+use shared::minwindef::{
+ ATOM, BOOL, BYTE, DWORD, FARPROC, FILETIME, HFILE, HGLOBAL, HLOCAL, HMODULE, HRSRC, LPBOOL,
+ LPBYTE, LPCVOID, LPDWORD, LPFILETIME, LPVOID, LPWORD, PBOOL, PDWORD, PUCHAR, PULONG, PUSHORT,
+ UCHAR, UINT, ULONG, USHORT, WORD,
+};
+use shared::windef::HWND;
+use um::cfgmgr32::MAX_PROFILE_LEN;
+use um::fileapi::STREAM_INFO_LEVELS;
+use um::libloaderapi::{
+ ENUMRESLANGPROCA, ENUMRESLANGPROCW, ENUMRESNAMEPROCA, ENUMRESTYPEPROCA, ENUMRESTYPEPROCW,
+};
+use um::minwinbase::{
+ FILE_INFO_BY_HANDLE_CLASS, FINDEX_INFO_LEVELS, FINDEX_SEARCH_OPS, GET_FILEEX_INFO_LEVELS,
+ LPOVERLAPPED, LPOVERLAPPED_COMPLETION_ROUTINE, LPSECURITY_ATTRIBUTES, PREASON_CONTEXT,
+};
+use um::processthreadsapi::{
+ LPPROCESS_INFORMATION, LPPROC_THREAD_ATTRIBUTE_LIST, LPSTARTUPINFOA, LPSTARTUPINFOW,
+ STARTUPINFOA, STARTUPINFOW,
+};
+use um::winnt::{
+ BOOLEAN, CHAR, DWORDLONG, EXECUTION_STATE, FILE_ID_128, HANDLE, HRESULT, INT, LANGID,
+ LARGE_INTEGER, LATENCY_TIME, LONG, LPCCH, LPCH, LPCSTR, LPCWSTR, LPOSVERSIONINFOEXA,
+ LPOSVERSIONINFOEXW, LPSTR, LPWSTR, MAXLONG, PBOOLEAN, PCONTEXT, PCWSTR, PFIRMWARE_TYPE,
+ PHANDLE, PIO_COUNTERS, PJOB_SET_ARRAY, PLUID, POWER_REQUEST_TYPE, PPERFORMANCE_DATA,
+ PPROCESSOR_NUMBER, PQUOTA_LIMITS, PRTL_UMS_SCHEDULER_ENTRY_POINT,
+ PSECURE_MEMORY_CACHE_CALLBACK, PSID, PSID_NAME_USE, PULONGLONG, PVOID, PWOW64_CONTEXT,
+ PWOW64_LDT_ENTRY, PWSTR, RTL_UMS_THREAD_INFO_CLASS, STATUS_ABANDONED_WAIT_0, STATUS_USER_APC,
+ STATUS_WAIT_0, SecurityAnonymous, SecurityDelegation, SecurityIdentification,
+ SecurityImpersonation, THREAD_BASE_PRIORITY_IDLE, THREAD_BASE_PRIORITY_LOWRT,
+ THREAD_BASE_PRIORITY_MAX, THREAD_BASE_PRIORITY_MIN, ULARGE_INTEGER, VOID, WAITORTIMERCALLBACK,
+ WCHAR, WOW64_CONTEXT,
+};
+#[cfg(target_arch = "x86")]
+use um::winnt::PLDT_ENTRY;
+use vc::vadefs::va_list;
+pub const FILE_BEGIN: DWORD = 0;
+pub const FILE_CURRENT: DWORD = 1;
+pub const FILE_END: DWORD = 2;
+pub const WAIT_FAILED: DWORD = 0xFFFFFFFF;
+pub const WAIT_OBJECT_0: DWORD = STATUS_WAIT_0 as u32;
+pub const WAIT_ABANDONED: DWORD = STATUS_ABANDONED_WAIT_0 as u32;
+pub const WAIT_ABANDONED_0: DWORD = STATUS_ABANDONED_WAIT_0 as u32;
+pub const WAIT_IO_COMPLETION: DWORD = STATUS_USER_APC as u32;
+pub const FILE_FLAG_WRITE_THROUGH: DWORD = 0x80000000;
+pub const FILE_FLAG_OVERLAPPED: DWORD = 0x40000000;
+pub const FILE_FLAG_NO_BUFFERING: DWORD = 0x20000000;
+pub const FILE_FLAG_RANDOM_ACCESS: DWORD = 0x10000000;
+pub const FILE_FLAG_SEQUENTIAL_SCAN: DWORD = 0x08000000;
+pub const FILE_FLAG_DELETE_ON_CLOSE: DWORD = 0x04000000;
+pub const FILE_FLAG_BACKUP_SEMANTICS: DWORD = 0x02000000;
+pub const FILE_FLAG_POSIX_SEMANTICS: DWORD = 0x01000000;
+pub const FILE_FLAG_SESSION_AWARE: DWORD = 0x00800000;
+pub const FILE_FLAG_OPEN_REPARSE_POINT: DWORD = 0x00200000;
+pub const FILE_FLAG_OPEN_NO_RECALL: DWORD = 0x00100000;
+pub const FILE_FLAG_FIRST_PIPE_INSTANCE: DWORD = 0x00080000;
+pub const FILE_FLAG_OPEN_REQUIRING_OPLOCK: DWORD = 0x00040000;
+pub const PROGRESS_CONTINUE: DWORD = 0;
+pub const PROGRESS_CANCEL: DWORD = 1;
+pub const PROGRESS_STOP: DWORD = 2;
+pub const PROGRESS_QUIET: DWORD = 3;
+pub const CALLBACK_CHUNK_FINISHED: DWORD = 0x00000000;
+pub const CALLBACK_STREAM_SWITCH: DWORD = 0x00000001;
+pub const COPY_FILE_FAIL_IF_EXISTS: DWORD = 0x00000001;
+pub const COPY_FILE_RESTARTABLE: DWORD = 0x00000002;
+pub const COPY_FILE_OPEN_SOURCE_FOR_WRITE: DWORD = 0x00000004;
+pub const COPY_FILE_ALLOW_DECRYPTED_DESTINATION: DWORD = 0x00000008;
+pub const COPY_FILE_COPY_SYMLINK: DWORD = 0x00000800;
+pub const COPY_FILE_NO_BUFFERING: DWORD = 0x00001000;
+pub const COPY_FILE_REQUEST_SECURITY_PRIVILEGES: DWORD = 0x00002000;
+pub const COPY_FILE_RESUME_FROM_PAUSE: DWORD = 0x00004000;
+pub const COPY_FILE_NO_OFFLOAD: DWORD = 0x00040000;
+pub const COPY_FILE_IGNORE_EDP_BLOCK: DWORD = 0x00400000;
+pub const COPY_FILE_IGNORE_SOURCE_ENCRYPTION: DWORD = 0x00800000;
+pub const REPLACEFILE_WRITE_THROUGH: DWORD = 0x00000001;
+pub const REPLACEFILE_IGNORE_MERGE_ERRORS: DWORD = 0x00000002;
+pub const REPLACEFILE_IGNORE_ACL_ERRORS: DWORD = 0x00000004;
+pub const PIPE_ACCESS_INBOUND: DWORD = 0x00000001;
+pub const PIPE_ACCESS_OUTBOUND: DWORD = 0x00000002;
+pub const PIPE_ACCESS_DUPLEX: DWORD = 0x00000003;
+pub const PIPE_CLIENT_END: DWORD = 0x00000000;
+pub const PIPE_SERVER_END: DWORD = 0x00000001;
+pub const PIPE_WAIT: DWORD = 0x00000000;
+pub const PIPE_NOWAIT: DWORD = 0x00000001;
+pub const PIPE_READMODE_BYTE: DWORD = 0x00000000;
+pub const PIPE_READMODE_MESSAGE: DWORD = 0x00000002;
+pub const PIPE_TYPE_BYTE: DWORD = 0x00000000;
+pub const PIPE_TYPE_MESSAGE: DWORD = 0x00000004;
+pub const PIPE_ACCEPT_REMOTE_CLIENTS: DWORD = 0x00000000;
+pub const PIPE_REJECT_REMOTE_CLIENTS: DWORD = 0x00000008;
+pub const PIPE_UNLIMITED_INSTANCES: DWORD = 255;
+pub const SECURITY_ANONYMOUS: DWORD = SecurityAnonymous << 16;
+pub const SECURITY_IDENTIFICATION: DWORD = SecurityIdentification << 16;
+pub const SECURITY_IMPERSONATION: DWORD = SecurityImpersonation << 16;
+pub const SECURITY_DELEGATION: DWORD = SecurityDelegation << 16;
+pub const SECURITY_CONTEXT_TRACKING: DWORD = 0x00040000;
+pub const SECURITY_EFFECTIVE_ONLY: DWORD = 0x00080000;
+pub const SECURITY_SQOS_PRESENT: DWORD = 0x00100000;
+pub const SECURITY_VALID_SQOS_FLAGS: DWORD = 0x001F0000;
+FN!{stdcall PFIBER_START_ROUTINE(
+ lpFiberParameter: LPVOID,
+) -> ()}
+pub type LPFIBER_START_ROUTINE = PFIBER_START_ROUTINE;
+FN!{stdcall PFIBER_CALLOUT_ROUTINE(
+ lpParameter: LPVOID,
+) -> LPVOID}
+// FAIL_FAST_*
+#[cfg(target_arch = "x86")]
+pub type LPLDT_ENTRY = PLDT_ENTRY;
+#[cfg(not(target_arch = "x86"))]
+pub type LPLDT_ENTRY = LPVOID; // TODO - fix this for 32-bit
+//SP_SERIALCOMM
+//PST_*
+// PCF_*
+// SP_*
+// BAUD_*
+// DATABITS_*
+// STOPBITS_*
+// PARITY_*
+STRUCT!{struct COMMPROP {
+ wPacketLength: WORD,
+ wPacketVersion: WORD,
+ dwServiceMask: DWORD,
+ dwReserved1: DWORD,
+ dwMaxTxQueue: DWORD,
+ dwMaxRxQueue: DWORD,
+ dwMaxBaud: DWORD,
+ dwProvSubType: DWORD,
+ dwProvCapabilities: DWORD,
+ dwSettableParams: DWORD,
+ dwSettableBaud: DWORD,
+ wSettableData: WORD,
+ wSettableStopParity: WORD,
+ dwCurrentTxQueue: DWORD,
+ dwCurrentRxQueue: DWORD,
+ dwProvSpec1: DWORD,
+ dwProvSpec2: DWORD,
+ wcProvChar: [WCHAR; 1],
+}}
+pub type LPCOMMPROP = *mut COMMPROP;
+STRUCT!{struct COMSTAT {
+ BitFields: DWORD,
+ cbInQue: DWORD,
+ cbOutQue: DWORD,
+}}
+BITFIELD!{COMSTAT BitFields: DWORD [
+ fCtsHold set_fCtsHold[0..1],
+ fDsrHold set_fDsrHold[1..2],
+ fRlsdHold set_fRlsdHold[2..3],
+ fXoffHold set_fXoffHold[3..4],
+ fXoffSent set_fXoffSent[4..5],
+ fEof set_fEof[5..6],
+ fTxim set_fTxim[6..7],
+ fReserved set_fReserved[7..32],
+]}
+pub type LPCOMSTAT = *mut COMSTAT;
+pub const DTR_CONTROL_DISABLE: DWORD = 0x00;
+pub const DTR_CONTROL_ENABLE: DWORD = 0x01;
+pub const DTR_CONTROL_HANDSHAKE: DWORD = 0x02;
+pub const RTS_CONTROL_DISABLE: DWORD = 0x00;
+pub const RTS_CONTROL_ENABLE: DWORD = 0x01;
+pub const RTS_CONTROL_HANDSHAKE: DWORD = 0x02;
+pub const RTS_CONTROL_TOGGLE: DWORD = 0x03;
+STRUCT!{struct DCB {
+ DCBlength: DWORD,
+ BaudRate: DWORD,
+ BitFields: DWORD,
+ wReserved: WORD,
+ XonLim: WORD,
+ XoffLim: WORD,
+ ByteSize: BYTE,
+ Parity: BYTE,
+ StopBits: BYTE,
+ XonChar: c_char,
+ XoffChar: c_char,
+ ErrorChar: c_char,
+ EofChar: c_char,
+ EvtChar: c_char,
+ wReserved1: WORD,
+}}
+BITFIELD!{DCB BitFields: DWORD [
+ fBinary set_fBinary[0..1],
+ fParity set_fParity[1..2],
+ fOutxCtsFlow set_fOutxCtsFlow[2..3],
+ fOutxDsrFlow set_fOutxDsrFlow[3..4],
+ fDtrControl set_fDtrControl[4..6],
+ fDsrSensitivity set_fDsrSensitivity[6..7],
+ fTXContinueOnXoff set_fTXContinueOnXoff[7..8],
+ fOutX set_fOutX[8..9],
+ fInX set_fInX[9..10],
+ fErrorChar set_fErrorChar[10..11],
+ fNull set_fNull[11..12],
+ fRtsControl set_fRtsControl[12..14],
+ fAbortOnError set_fAbortOnError[14..15],
+ fDummy2 set_fDummy2[15..32],
+]}
+pub type LPDCB = *mut DCB;
+STRUCT!{struct COMMTIMEOUTS {
+ ReadIntervalTimeout: DWORD,
+ ReadTotalTimeoutMultiplier: DWORD,
+ ReadTotalTimeoutConstant: DWORD,
+ WriteTotalTimeoutMultiplier: DWORD,
+ WriteTotalTimeoutConstant: DWORD,
+}}
+pub type LPCOMMTIMEOUTS = *mut COMMTIMEOUTS;
+STRUCT!{struct COMMCONFIG {
+ dwSize: DWORD,
+ wVersion: WORD,
+ wReserved: WORD,
+ dcb: DCB,
+ dwProviderSubType: DWORD,
+ dwProviderOffset: DWORD,
+ dwProviderSize: DWORD,
+ wcProviderData: [WCHAR; 1],
+}}
+pub type LPCOMMCONFIG = *mut COMMCONFIG;
+pub const GMEM_FIXED: UINT = 0x0000;
+pub const GMEM_MOVEABLE: UINT = 0x0002;
+pub const GMEM_NOCOMPACT: UINT = 0x0010;
+pub const GMEM_NODISCARD: UINT = 0x0020;
+pub const GMEM_ZEROINIT: UINT = 0x0040;
+pub const GMEM_MODIFY: UINT = 0x0080;
+pub const GMEM_DISCARDABLE: UINT = 0x0100;
+pub const GMEM_NOT_BANKED: UINT = 0x1000;
+pub const GMEM_SHARE: UINT = 0x2000;
+pub const GMEM_DDESHARE: UINT = 0x2000;
+pub const GMEM_NOTIFY: UINT = 0x4000;
+pub const GMEM_LOWER: UINT = GMEM_NOT_BANKED;
+pub const GMEM_VALID_FLAGS: UINT = 0x7F72;
+pub const GMEM_INVALID_HANDLE: UINT = 0x8000;
+pub const GHND: UINT = GMEM_MOVEABLE | GMEM_ZEROINIT;
+pub const GPTR: UINT = GMEM_FIXED | GMEM_ZEROINIT;
+pub const GMEM_DISCARDED: UINT = 0x4000;
+pub const GMEM_LOCKCOUNT: UINT = 0x00FF;
+STRUCT!{struct MEMORYSTATUS {
+ dwLength: DWORD,
+ dwMemoryLoad: DWORD,
+ dwTotalPhys: SIZE_T,
+ dwAvailPhys: SIZE_T,
+ dwTotalPageFile: SIZE_T,
+ dwAvailPageFile: SIZE_T,
+ dwTotalVirtual: SIZE_T,
+ dwAvailVirtual: SIZE_T,
+}}
+pub type LPMEMORYSTATUS = *mut MEMORYSTATUS;
+// NUMA_NO_PREFERRED_NODE
+pub const DEBUG_PROCESS: DWORD = 0x00000001;
+pub const DEBUG_ONLY_THIS_PROCESS: DWORD = 0x00000002;
+pub const CREATE_SUSPENDED: DWORD = 0x00000004;
+pub const DETACHED_PROCESS: DWORD = 0x00000008;
+pub const CREATE_NEW_CONSOLE: DWORD = 0x00000010;
+pub const NORMAL_PRIORITY_CLASS: DWORD = 0x00000020;
+pub const IDLE_PRIORITY_CLASS: DWORD = 0x00000040;
+pub const HIGH_PRIORITY_CLASS: DWORD = 0x00000080;
+pub const REALTIME_PRIORITY_CLASS: DWORD = 0x00000100;
+pub const CREATE_NEW_PROCESS_GROUP: DWORD = 0x00000200;
+pub const CREATE_UNICODE_ENVIRONMENT: DWORD = 0x00000400;
+pub const CREATE_SEPARATE_WOW_VDM: DWORD = 0x00000800;
+pub const CREATE_SHARED_WOW_VDM: DWORD = 0x00001000;
+pub const CREATE_FORCEDOS: DWORD = 0x00002000;
+pub const BELOW_NORMAL_PRIORITY_CLASS: DWORD = 0x00004000;
+pub const ABOVE_NORMAL_PRIORITY_CLASS: DWORD = 0x00008000;
+pub const INHERIT_PARENT_AFFINITY: DWORD = 0x00010000;
+pub const INHERIT_CALLER_PRIORITY: DWORD = 0x00020000;
+pub const CREATE_PROTECTED_PROCESS: DWORD = 0x00040000;
+pub const EXTENDED_STARTUPINFO_PRESENT: DWORD = 0x00080000;
+pub const PROCESS_MODE_BACKGROUND_BEGIN: DWORD = 0x00100000;
+pub const PROCESS_MODE_BACKGROUND_END: DWORD = 0x00200000;
+pub const CREATE_BREAKAWAY_FROM_JOB: DWORD = 0x01000000;
+pub const CREATE_PRESERVE_CODE_AUTHZ_LEVEL: DWORD = 0x02000000;
+pub const CREATE_DEFAULT_ERROR_MODE: DWORD = 0x04000000;
+pub const CREATE_NO_WINDOW: DWORD = 0x08000000;
+pub const PROFILE_USER: DWORD = 0x10000000;
+pub const PROFILE_KERNEL: DWORD = 0x20000000;
+pub const PROFILE_SERVER: DWORD = 0x40000000;
+pub const CREATE_IGNORE_SYSTEM_DEFAULT: DWORD = 0x80000000;
+// STACK_SIZE_PARAM_IS_A_RESERVATION
+pub const THREAD_PRIORITY_LOWEST: DWORD = THREAD_BASE_PRIORITY_MIN;
+pub const THREAD_PRIORITY_BELOW_NORMAL: DWORD = THREAD_PRIORITY_LOWEST + 1;
+pub const THREAD_PRIORITY_NORMAL: DWORD = 0;
+pub const THREAD_PRIORITY_HIGHEST: DWORD = THREAD_BASE_PRIORITY_MAX;
+pub const THREAD_PRIORITY_ABOVE_NORMAL: DWORD = THREAD_PRIORITY_HIGHEST - 1;
+pub const THREAD_PRIORITY_ERROR_RETURN: DWORD = MAXLONG as u32;
+pub const THREAD_PRIORITY_TIME_CRITICAL: DWORD = THREAD_BASE_PRIORITY_LOWRT;
+pub const THREAD_PRIORITY_IDLE: DWORD = THREAD_BASE_PRIORITY_IDLE;
+pub const THREAD_MODE_BACKGROUND_BEGIN: DWORD = 0x00010000;
+pub const THREAD_MODE_BACKGROUND_END: DWORD = 0x00020000;
+pub const VOLUME_NAME_DOS: DWORD = 0x0;
+// VOLUME_NAME_*
+// FILE_NAME_*
+// JIT_DEBUG_*
+pub const DRIVE_UNKNOWN: DWORD = 0;
+pub const DRIVE_NO_ROOT_DIR: DWORD = 1;
+pub const DRIVE_REMOVABLE: DWORD = 2;
+pub const DRIVE_FIXED: DWORD = 3;
+pub const DRIVE_REMOTE: DWORD = 4;
+pub const DRIVE_CDROM: DWORD = 5;
+pub const DRIVE_RAMDISK: DWORD = 6;
+// pub fn GetFreeSpace();
+pub const FILE_TYPE_UNKNOWN: DWORD = 0x0000;
+pub const FILE_TYPE_DISK: DWORD = 0x0001;
+pub const FILE_TYPE_CHAR: DWORD = 0x0002;
+pub const FILE_TYPE_PIPE: DWORD = 0x0003;
+pub const FILE_TYPE_REMOTE: DWORD = 0x8000;
+pub const STD_INPUT_HANDLE: DWORD = -10i32 as u32;
+pub const STD_OUTPUT_HANDLE: DWORD = -11i32 as u32;
+pub const STD_ERROR_HANDLE: DWORD = -12i32 as u32;
+pub const NOPARITY: BYTE = 0;
+pub const ODDPARITY: BYTE = 1;
+pub const EVENPARITY: BYTE = 2;
+pub const MARKPARITY: BYTE = 3;
+pub const SPACEPARITY: BYTE = 4;
+pub const ONESTOPBIT: BYTE = 0;
+pub const ONE5STOPBITS: BYTE = 1;
+pub const TWOSTOPBITS: BYTE = 2;
+pub const IGNORE: DWORD = 0;
+pub const INFINITE: DWORD = 0xFFFFFFFF;
+pub const CBR_110: DWORD = 110;
+pub const CBR_300: DWORD = 300;
+pub const CBR_600: DWORD = 600;
+pub const CBR_1200: DWORD = 1200;
+pub const CBR_2400: DWORD = 2400;
+pub const CBR_4800: DWORD = 4800;
+pub const CBR_9600: DWORD = 9600;
+pub const CBR_14400: DWORD = 14400;
+pub const CBR_19200: DWORD = 19200;
+pub const CBR_38400: DWORD = 38400;
+pub const CBR_56000: DWORD = 56000;
+pub const CBR_57600: DWORD = 57600;
+pub const CBR_115200: DWORD = 115200;
+pub const CBR_128000: DWORD = 128000;
+pub const CBR_256000: DWORD = 256000;
+// CE_*
+// IE_*
+// EV_*
+pub const SETXOFF: DWORD = 1;
+pub const SETXON: DWORD = 2;
+pub const SETRTS: DWORD = 3;
+pub const CLRRTS: DWORD = 4;
+pub const SETDTR: DWORD = 5;
+pub const CLRDTR: DWORD = 6;
+pub const RESETDEV: DWORD = 7;
+pub const SETBREAK: DWORD = 8;
+pub const CLRBREAK: DWORD = 9;
+pub const PURGE_TXABORT: DWORD = 0x0001;
+pub const PURGE_RXABORT: DWORD = 0x0002;
+pub const PURGE_TXCLEAR: DWORD = 0x0004;
+pub const PURGE_RXCLEAR: DWORD = 0x0008;
+pub const MS_CTS_ON: DWORD = 0x0010;
+pub const MS_DSR_ON: DWORD = 0x0020;
+pub const MS_RING_ON: DWORD = 0x0040;
+pub const MS_RLSD_ON: DWORD = 0x0080;
+// S_*
+// NMPWAIT_*
+// FS_*
+// OF_*
+pub const OFS_MAXPATHNAME: usize = 128;
+STRUCT!{struct OFSTRUCT {
+ cBytes: BYTE,
+ fFixedDisk: BYTE,
+ nErrCode: WORD,
+ Reserved1: WORD,
+ Reserved2: WORD,
+ szPathName: [CHAR; OFS_MAXPATHNAME],
+}}
+pub type POFSTRUCT = *mut OFSTRUCT;
+pub type LPOFSTRUCT = *mut OFSTRUCT;
+extern "system" {
+ pub fn GlobalAlloc(
+ uFlags: UINT,
+ dwBytes: SIZE_T,
+ ) -> HGLOBAL;
+ pub fn GlobalReAlloc(
+ hMem: HGLOBAL,
+ dwBytes: SIZE_T,
+ uFlags: UINT,
+ ) -> HGLOBAL;
+ pub fn GlobalSize(
+ hMem: HGLOBAL,
+ ) -> SIZE_T;
+ pub fn GlobalFlags(
+ hMem: HGLOBAL,
+ ) -> UINT;
+ pub fn GlobalLock(
+ hMem: HGLOBAL,
+ ) -> LPVOID;
+ pub fn GlobalHandle(
+ pMem: LPCVOID,
+ ) -> HGLOBAL;
+ pub fn GlobalUnlock(
+ hMem: HGLOBAL,
+ ) -> BOOL;
+ pub fn GlobalFree(
+ hMem: HGLOBAL,
+ ) -> HGLOBAL;
+ pub fn GlobalCompact(
+ dwMinFree: DWORD,
+ ) -> SIZE_T;
+ pub fn GlobalFix(
+ hMem: HGLOBAL,
+ );
+ pub fn GlobalUnfix(
+ hMem: HGLOBAL,
+ );
+ pub fn GlobalWire(
+ hMem: HGLOBAL,
+ ) -> LPVOID;
+ pub fn GlobalUnWire(
+ hMem: HGLOBAL,
+ ) -> BOOL;
+ pub fn GlobalMemoryStatus(
+ lpBuffer: LPMEMORYSTATUS,
+ );
+ pub fn LocalAlloc(
+ uFlags: UINT,
+ uBytes: SIZE_T,
+ ) -> HLOCAL;
+ pub fn LocalReAlloc(
+ hMem: HLOCAL,
+ uBytes: SIZE_T,
+ uFlags: UINT,
+ ) -> HLOCAL;
+ pub fn LocalLock(
+ hMem: HLOCAL,
+ ) -> LPVOID;
+ pub fn LocalHandle(
+ pMem: LPCVOID,
+ ) -> HLOCAL;
+ pub fn LocalUnlock(
+ hMem: HLOCAL,
+ ) -> BOOL;
+ pub fn LocalSize(
+ hMem: HLOCAL,
+ ) -> SIZE_T;
+ pub fn LocalFlags(
+ hMem: HLOCAL,
+ ) -> UINT;
+ pub fn LocalFree(
+ hMem: HLOCAL,
+ ) -> HLOCAL;
+ pub fn LocalShrink(
+ hMem: HLOCAL,
+ cbNewSize: UINT,
+ ) -> SIZE_T;
+ pub fn LocalCompact(
+ uMinFree: UINT,
+ ) -> SIZE_T;
+}
+// SCS_*
+extern "system" {
+ pub fn GetBinaryTypeA(
+ lpApplicationName: LPCSTR,
+ lpBinaryType: LPDWORD,
+ ) -> BOOL;
+ pub fn GetBinaryTypeW(
+ lpApplicationName: LPCWSTR,
+ lpBinaryType: LPDWORD,
+ ) -> BOOL;
+ pub fn GetShortPathNameA(
+ lpszLongPath: LPCSTR,
+ lpszShortPath: LPSTR,
+ cchBuffer: DWORD,
+ ) -> DWORD;
+ pub fn GetLongPathNameTransactedA(
+ lpszShortPath: LPCSTR,
+ lpszLongPath: LPSTR,
+ cchBuffer: DWORD,
+ hTransaction: HANDLE,
+ ) -> DWORD;
+ pub fn GetLongPathNameTransactedW(
+ lpszShortPath: LPCWSTR,
+ lpszLongPath: LPWSTR,
+ cchBuffer: DWORD,
+ hTransaction: HANDLE,
+ ) -> DWORD;
+ pub fn GetProcessAffinityMask(
+ hProcess: HANDLE,
+ lpProcessAffinityMask: PDWORD_PTR,
+ lpSystemAffinityMask: PDWORD_PTR,
+ ) -> BOOL;
+ pub fn SetProcessAffinityMask(
+ hProcess: HANDLE,
+ dwProcessAffinityMask: DWORD,
+ ) -> BOOL;
+ pub fn GetProcessIoCounters(
+ hProcess: HANDLE,
+ lpIoCounters: PIO_COUNTERS,
+ ) -> BOOL;
+ pub fn GetProcessWorkingSetSize(
+ hProcess: HANDLE,
+ lpMinimumWorkingSetSize: PSIZE_T,
+ lpMaximumWorkingSetSize: PSIZE_T,
+ ) -> BOOL;
+ pub fn SetProcessWorkingSetSize(
+ hProcess: HANDLE,
+ dwMinimumWorkingSetSize: SIZE_T,
+ dwMaximumWorkingSetSize: SIZE_T,
+ ) -> BOOL;
+ pub fn FatalExit(
+ ExitCode: c_int,
+ );
+ pub fn SetEnvironmentStringsA(
+ NewEnvironment: LPCH,
+ ) -> BOOL;
+ pub fn SwitchToFiber(
+ lpFiber: LPVOID,
+ );
+ pub fn DeleteFiber(
+ lpFiber: LPVOID,
+ );
+ pub fn ConvertFiberToThread() -> BOOL;
+ pub fn CreateFiberEx(
+ dwStackCommitSize: SIZE_T,
+ dwStackReserveSize: SIZE_T,
+ dwFlags: DWORD,
+ lpStartAddress: LPFIBER_START_ROUTINE,
+ lpParameter: LPVOID,
+ ) -> LPVOID;
+ pub fn ConvertThreadToFiberEx(
+ lpParameter: LPVOID,
+ dwFlags: DWORD,
+ ) -> LPVOID;
+ pub fn CreateFiber(
+ dwStackSize: SIZE_T,
+ lpStartAddress: LPFIBER_START_ROUTINE,
+ lpParameter: LPVOID,
+ ) -> LPVOID;
+ pub fn ConvertThreadToFiber(
+ lpParameter: LPVOID,
+ ) -> LPVOID;
+}
+pub type PUMS_CONTEXT = *mut c_void;
+pub type PUMS_COMPLETION_LIST = *mut c_void;
+pub type UMS_THREAD_INFO_CLASS = RTL_UMS_THREAD_INFO_CLASS;
+pub type PUMS_THREAD_INFO_CLASS = *mut UMS_THREAD_INFO_CLASS;
+pub type PUMS_SCHEDULER_ENTRY_POINT = PRTL_UMS_SCHEDULER_ENTRY_POINT;
+STRUCT!{struct UMS_SCHEDULER_STARTUP_INFO {
+ UmsVersion: ULONG,
+ CompletionList: PUMS_COMPLETION_LIST,
+ SchedulerProc: PUMS_SCHEDULER_ENTRY_POINT,
+ SchedulerParam: PVOID,
+}}
+pub type PUMS_SCHEDULER_STARTUP_INFO = *mut UMS_SCHEDULER_STARTUP_INFO;
+STRUCT!{struct UMS_SYSTEM_THREAD_INFORMATION {
+ UmsVersion: ULONG,
+ ThreadUmsFlags: ULONG,
+}}
+BITFIELD!{UMS_SYSTEM_THREAD_INFORMATION ThreadUmsFlags: ULONG [
+ IsUmsSchedulerThread set_IsUmsSchedulerThread[0..1],
+ IsUmsWorkerThread set_IsUmsWorkerThread[1..2],
+]}
+pub type PUMS_SYSTEM_THREAD_INFORMATION = *mut UMS_SYSTEM_THREAD_INFORMATION;
+extern "system" {
+ #[cfg(target_pointer_width = "64")]
+ pub fn CreateUmsCompletionList(
+ UmsCompletionList: *mut PUMS_COMPLETION_LIST,
+ ) -> BOOL;
+ #[cfg(target_pointer_width = "64")]
+ pub fn DequeueUmsCompletionListItems(
+ UmsCompletionList: PUMS_COMPLETION_LIST,
+ WaitTimeOut: DWORD,
+ UmsThreadList: *mut PUMS_CONTEXT,
+ ) -> BOOL;
+ #[cfg(target_pointer_width = "64")]
+ pub fn GetUmsCompletionListEvent(
+ UmsCompletionList: PUMS_COMPLETION_LIST,
+ UmsCompletionEvent: PHANDLE,
+ ) -> BOOL;
+ #[cfg(target_pointer_width = "64")]
+ pub fn ExecuteUmsThread(
+ UmsThread: PUMS_CONTEXT,
+ ) -> BOOL;
+ #[cfg(target_pointer_width = "64")]
+ pub fn UmsThreadYield(
+ SchedulerParam: PVOID,
+ ) -> BOOL;
+ #[cfg(target_pointer_width = "64")]
+ pub fn DeleteUmsCompletionList(
+ UmsCompletionList: PUMS_COMPLETION_LIST,
+ ) -> BOOL;
+ #[cfg(target_pointer_width = "64")]
+ pub fn GetCurrentUmsThread() -> PUMS_CONTEXT;
+ #[cfg(target_pointer_width = "64")]
+ pub fn GetNextUmsListItem(
+ UmsContext: PUMS_CONTEXT,
+ ) -> PUMS_CONTEXT;
+ #[cfg(target_pointer_width = "64")]
+ pub fn QueryUmsThreadInformation(
+ UmsThread: PUMS_CONTEXT,
+ UmsThreadInfoClass: UMS_THREAD_INFO_CLASS,
+ UmsThreadInformation: PVOID,
+ UmsThreadInformationLength: ULONG,
+ ReturnLength: PULONG,
+ ) -> BOOL;
+ #[cfg(target_pointer_width = "64")]
+ pub fn SetUmsThreadInformation(
+ UmsThread: PUMS_CONTEXT,
+ UmsThreadInfoClass: UMS_THREAD_INFO_CLASS,
+ UmsThreadInformation: PVOID,
+ UmsThreadInformationLength: ULONG,
+ ) -> BOOL;
+ #[cfg(target_pointer_width = "64")]
+ pub fn DeleteUmsThreadContext(
+ UmsThread: PUMS_CONTEXT,
+ ) -> BOOL;
+ #[cfg(target_pointer_width = "64")]
+ pub fn CreateUmsThreadContext(
+ lpUmsThread: *mut PUMS_CONTEXT,
+ ) -> BOOL;
+ #[cfg(target_pointer_width = "64")]
+ pub fn EnterUmsSchedulingMode(
+ SchedulerStartupInfo: PUMS_SCHEDULER_STARTUP_INFO,
+ ) -> BOOL;
+ #[cfg(target_pointer_width = "64")]
+ pub fn GetUmsSystemThreadInformation(
+ ThreadHandle: HANDLE,
+ SystemThreadInfo: PUMS_SYSTEM_THREAD_INFORMATION,
+ ) -> BOOL;
+ pub fn SetThreadAffinityMask(
+ hThread: HANDLE,
+ dwThreadAffinityMask: DWORD_PTR,
+ ) -> DWORD_PTR;
+ pub fn SetProcessDEPPolicy(
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn GetProcessDEPPolicy(
+ hProcess: HANDLE,
+ lpFlags: LPDWORD,
+ lpPermanent: PBOOL,
+ ) -> BOOL;
+ pub fn RequestWakeupLatency(
+ latency: LATENCY_TIME,
+ ) -> BOOL;
+ pub fn IsSystemResumeAutomatic() -> BOOL;
+ pub fn GetThreadSelectorEntry(
+ hThread: HANDLE,
+ dwSelector: DWORD,
+ lpSelectorEntry: LPLDT_ENTRY,
+ ) -> BOOL;
+ pub fn SetThreadExecutionState(
+ esFlags: EXECUTION_STATE,
+ ) -> EXECUTION_STATE;
+ pub fn PowerCreateRequest(
+ Context: PREASON_CONTEXT,
+ ) -> HANDLE;
+ pub fn PowerSetRequest(
+ PowerRequest: HANDLE,
+ RequestType: POWER_REQUEST_TYPE,
+ ) -> BOOL;
+ pub fn PowerClearRequest(
+ PowerRequest: HANDLE,
+ RequestType: POWER_REQUEST_TYPE,
+ ) -> BOOL;
+ pub fn RestoreLastError(
+ dwErrCode: DWORD,
+ );
+}
+pub const FILE_SKIP_COMPLETION_PORT_ON_SUCCESS: UCHAR = 0x1;
+pub const FILE_SKIP_SET_EVENT_ON_HANDLE: UCHAR = 0x2;
+extern "system" {
+ pub fn SetFileCompletionNotificationModes(
+ FileHandle: HANDLE,
+ Flags: UCHAR,
+ ) -> BOOL;
+}
+pub const SEM_FAILCRITICALERRORS: UINT = 0x0001;
+pub const SEM_NOGPFAULTERRORBOX: UINT = 0x0002;
+pub const SEM_NOALIGNMENTFAULTEXCEPT: UINT = 0x0004;
+pub const SEM_NOOPENFILEERRORBOX: UINT = 0x8000;
+extern "system" {
+ pub fn Wow64GetThreadContext(
+ hThread: HANDLE,
+ lpContext: PWOW64_CONTEXT,
+ ) -> BOOL;
+ pub fn Wow64SetThreadContext(
+ hThread: HANDLE,
+ lpContext: *const WOW64_CONTEXT,
+ ) -> BOOL;
+ pub fn Wow64GetThreadSelectorEntry(
+ hThread: HANDLE,
+ dwSelector: DWORD,
+ lpSelectorEntry: PWOW64_LDT_ENTRY,
+ ) -> BOOL;
+ pub fn Wow64SuspendThread(
+ hThread: HANDLE,
+ ) -> DWORD;
+ pub fn DebugSetProcessKillOnExit(
+ KillOnExit: BOOL,
+ ) -> BOOL;
+ pub fn DebugBreakProcess(
+ Process: HANDLE,
+ ) -> BOOL;
+ pub fn PulseEvent(
+ hEvent: HANDLE,
+ ) -> BOOL;
+ pub fn GlobalDeleteAtom(
+ nAtom: ATOM,
+ ) -> ATOM;
+ pub fn InitAtomTable(
+ nSize: DWORD,
+ ) -> BOOL;
+ pub fn DeleteAtom(
+ nAtom: ATOM,
+ ) -> ATOM;
+ pub fn SetHandleCount(
+ uNumber: UINT,
+ ) -> UINT;
+ pub fn RequestDeviceWakeup(
+ hDevice: HANDLE,
+ ) -> BOOL;
+ pub fn CancelDeviceWakeupRequest(
+ hDevice: HANDLE,
+ ) -> BOOL;
+ pub fn GetDevicePowerState(
+ hDevice: HANDLE,
+ pfOn: *mut BOOL,
+ ) -> BOOL;
+ pub fn SetMessageWaitingIndicator(
+ hMsgIndicator: HANDLE,
+ ulMsgCount: ULONG,
+ ) -> BOOL;
+ pub fn SetFileShortNameA(
+ hFile: HANDLE,
+ lpShortName: LPCSTR,
+ ) -> BOOL;
+ pub fn SetFileShortNameW(
+ hFile: HANDLE,
+ lpShortName: LPCWSTR,
+ ) -> BOOL;
+}
+pub const HANDLE_FLAG_INHERIT: DWORD = 0x00000001;
+pub const HANDLE_FLAG_PROTECT_FROM_CLOSE: DWORD = 0x00000002;
+extern "system" {
+ pub fn LoadModule(
+ lpModuleName: LPCSTR,
+ lpParameterBlock: LPVOID,
+ ) -> DWORD;
+ pub fn WinExec(
+ lpCmdLine: LPCSTR,
+ uCmdShow: UINT,
+ ) -> UINT;
+ // ClearCommBreak
+ // ClearCommError
+ // SetupComm
+ // EscapeCommFunction
+ // GetCommConfig
+ // GetCommMask
+ // GetCommProperties
+ // GetCommModemStatus
+ // GetCommState
+ // GetCommTimeouts
+ // PurgeComm
+ // SetCommBreak
+ // SetCommConfig
+ // SetCommMask
+ // SetCommState
+ // SetCommTimeouts
+ // TransmitCommChar
+ // WaitCommEvent
+ pub fn SetTapePosition(
+ hDevice: HANDLE,
+ dwPositionMethod: DWORD,
+ dwPartition: DWORD,
+ dwOffsetLow: DWORD,
+ dwOffsetHigh: DWORD,
+ bImmediate: BOOL,
+ ) -> DWORD;
+ pub fn GetTapePosition(
+ hDevice: HANDLE,
+ dwPositionType: DWORD,
+ lpdwPartition: LPDWORD,
+ lpdwOffsetLow: LPDWORD,
+ lpdwOffsetHigh: LPDWORD,
+ ) -> DWORD;
+ pub fn PrepareTape(
+ hDevice: HANDLE,
+ dwOperation: DWORD,
+ bImmediate: BOOL,
+ ) -> DWORD;
+ pub fn EraseTape(
+ hDevice: HANDLE,
+ dwEraseType: DWORD,
+ bImmediate: BOOL,
+ ) -> DWORD;
+ pub fn CreateTapePartition(
+ hDevice: HANDLE,
+ dwPartitionMethod: DWORD,
+ dwCount: DWORD,
+ dwSize: DWORD,
+ ) -> DWORD;
+ pub fn WriteTapemark(
+ hDevice: HANDLE,
+ dwTapemarkType: DWORD,
+ dwTapemarkCount: DWORD,
+ bImmediate: BOOL,
+ ) -> DWORD;
+ pub fn GetTapeStatus(
+ hDevice: HANDLE,
+ ) -> DWORD;
+ pub fn GetTapeParameters(
+ hDevice: HANDLE,
+ dwOperation: DWORD,
+ lpdwSize: LPDWORD,
+ lpTapeInformation: LPVOID,
+ ) -> DWORD;
+ pub fn SetTapeParameters(
+ hDevice: HANDLE,
+ dwOperation: DWORD,
+ lpTapeInformation: LPVOID,
+ ) -> DWORD;
+ pub fn MulDiv(
+ nNumber: c_int,
+ nNumerator: c_int,
+ nDenominator: c_int,
+ ) -> c_int;
+}
+ENUM!{enum DEP_SYSTEM_POLICY_TYPE {
+ DEPPolicyAlwaysOff = 0,
+ DEPPolicyAlwaysOn,
+ DEPPolicyOptIn,
+ DEPPolicyOptOut,
+ DEPTotalPolicyCount,
+}}
+extern "system" {
+ pub fn GetSystemDEPPolicy() -> DEP_SYSTEM_POLICY_TYPE;
+ pub fn GetSystemRegistryQuota(
+ pdwQuotaAllowed: PDWORD,
+ pdwQuotaUsed: PDWORD,
+ ) -> BOOL;
+ pub fn FileTimeToDosDateTime(
+ lpFileTime: *const FILETIME,
+ lpFatDate: LPWORD,
+ lpFatTime: LPWORD,
+ ) -> BOOL;
+ pub fn DosDateTimeToFileTime(
+ wFatDate: WORD,
+ wFatTime: WORD,
+ lpFileTime: LPFILETIME,
+ ) -> BOOL;
+ pub fn FormatMessageA(
+ dwFlags: DWORD,
+ lpSource: LPCVOID,
+ dwMessageId: DWORD,
+ dwLanguageId: DWORD,
+ lpBuffer: LPSTR,
+ nSize: DWORD,
+ Arguments: *mut va_list,
+ ) -> DWORD;
+ pub fn FormatMessageW(
+ dwFlags: DWORD,
+ lpSource: LPCVOID,
+ dwMessageId: DWORD,
+ dwLanguageId: DWORD,
+ lpBuffer: LPWSTR,
+ nSize: DWORD,
+ Arguments: *mut va_list,
+ ) -> DWORD;
+}
+pub const FORMAT_MESSAGE_IGNORE_INSERTS: DWORD = 0x00000200;
+pub const FORMAT_MESSAGE_FROM_STRING: DWORD = 0x00000400;
+pub const FORMAT_MESSAGE_FROM_HMODULE: DWORD = 0x00000800;
+pub const FORMAT_MESSAGE_FROM_SYSTEM: DWORD = 0x00001000;
+pub const FORMAT_MESSAGE_ARGUMENT_ARRAY: DWORD = 0x00002000;
+pub const FORMAT_MESSAGE_MAX_WIDTH_MASK: DWORD = 0x000000FF;
+pub const FORMAT_MESSAGE_ALLOCATE_BUFFER: DWORD = 0x00000100;
+extern "system" {
+ pub fn CreateMailslotA(
+ lpName: LPCSTR,
+ nMaxMessageSize: DWORD,
+ lReadTimeout: DWORD,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ ) -> HANDLE;
+ pub fn CreateMailslotW(
+ lpName: LPCWSTR,
+ nMaxMessageSize: DWORD,
+ lReadTimeout: DWORD,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ ) -> HANDLE;
+ pub fn GetMailslotInfo(
+ hMailslot: HANDLE,
+ lpMaxMessageSize: LPDWORD,
+ lpNextSize: LPDWORD,
+ lpMessageCount: LPDWORD,
+ lpReadTimeout: LPDWORD,
+ ) -> BOOL;
+ pub fn SetMailslotInfo(
+ hMailslot: HANDLE,
+ lReadTimeout: DWORD,
+ ) -> BOOL;
+ // pub fn EncryptFileA();
+ // pub fn EncryptFileW();
+ // pub fn DecryptFileA();
+ // pub fn DecryptFileW();
+ // pub fn FileEncryptionStatusA();
+ // pub fn FileEncryptionStatusW();
+ // pub fn OpenEncryptedFileRawA();
+ // pub fn OpenEncryptedFileRawW();
+ // pub fn ReadEncryptedFileRaw();
+ // pub fn WriteEncryptedFileRaw();
+ // pub fn CloseEncryptedFileRaw();
+ pub fn lstrcmpA(
+ lpString1: LPCSTR,
+ lpString2: LPCSTR,
+ ) -> c_int;
+ pub fn lstrcmpW(
+ lpString1: LPCWSTR,
+ lpString2: LPCWSTR,
+ ) -> c_int;
+ pub fn lstrcmpiA(
+ lpString1: LPCSTR,
+ lpString2: LPCSTR,
+ ) -> c_int;
+ pub fn lstrcmpiW(
+ lpString1: LPCWSTR,
+ lpString2: LPCWSTR,
+ ) -> c_int;
+ pub fn lstrcpynA(
+ lpString1: LPSTR,
+ lpString2: LPCSTR,
+ iMaxLength: c_int,
+ ) -> LPSTR;
+ pub fn lstrcpynW(
+ lpString1: LPWSTR,
+ lpString2: LPCWSTR,
+ iMaxLength: c_int,
+ ) -> LPWSTR;
+ pub fn lstrcpyA(
+ lpString1: LPSTR,
+ lpString2: LPCSTR,
+ ) -> LPSTR;
+ pub fn lstrcpyW(
+ lpString1: LPWSTR,
+ lpString2: LPCWSTR,
+ ) -> LPWSTR;
+ pub fn lstrcatA(
+ lpString1: LPSTR,
+ lpString2: LPCSTR,
+ ) -> LPSTR;
+ pub fn lstrcatW(
+ lpString1: LPWSTR,
+ lpString2: LPCWSTR,
+ ) -> LPWSTR;
+ pub fn lstrlenA(
+ lpString: LPCSTR,
+ ) -> c_int;
+ pub fn lstrlenW(
+ lpString: LPCWSTR,
+ ) -> c_int;
+ pub fn OpenFile(
+ lpFileName: LPCSTR,
+ lpReOpenBuff: LPOFSTRUCT,
+ uStyle: UINT,
+ ) -> HFILE;
+ pub fn _lopen(
+ lpPathName: LPCSTR,
+ iReadWrite: c_int,
+ ) -> HFILE;
+ pub fn _lcreat(
+ lpPathName: LPCSTR,
+ iAttrubute: c_int,
+ ) -> HFILE;
+ pub fn _lread(
+ hFile: HFILE,
+ lpBuffer: LPVOID,
+ uBytes: UINT,
+ ) -> UINT;
+ pub fn _lwrite(
+ hFile: HFILE,
+ lpBuffer: LPCCH,
+ uBytes: UINT,
+ ) -> UINT;
+ pub fn _hread(
+ hFile: HFILE,
+ lpBuffer: LPVOID,
+ lBytes: c_long,
+ ) -> c_long;
+ pub fn _hwrite(
+ hFile: HFILE,
+ lpBuffer: LPCCH,
+ lBytes: c_long,
+ ) -> c_long;
+ pub fn _lclose(
+ hFile: HFILE,
+ ) -> HFILE;
+ pub fn _llseek(
+ hFile: HFILE,
+ lOffset: LONG,
+ iOrigin: c_int,
+ ) -> LONG;
+ // pub fn IsTextUnicode();
+ // pub fn SignalObjectAndWait();
+ pub fn BackupRead(
+ hFile: HANDLE,
+ lpBuffer: LPBYTE,
+ nNumberOfBytesToRead: DWORD,
+ lpNumberOfBytesRead: LPDWORD,
+ bAbort: BOOL,
+ bProcessSecurity: BOOL,
+ lpContext: *mut LPVOID,
+ ) -> BOOL;
+ pub fn BackupSeek(
+ hFile: HANDLE,
+ dwLowBytesToSeek: DWORD,
+ dwHighBytesToSeek: DWORD,
+ lpdwLowByteSeeked: LPDWORD,
+ lpdwHighByteSeeked: LPDWORD,
+ lpContext: *mut LPVOID,
+ ) -> BOOL;
+ pub fn BackupWrite(
+ hFile: HANDLE,
+ lpBuffer: LPBYTE,
+ nNumberOfBytesToWrite: DWORD,
+ lpNumberOfBytesWritten: LPDWORD,
+ bAbort: BOOL,
+ bProcessSecurity: BOOL,
+ lpContext: *mut LPVOID,
+ ) -> BOOL;
+}
+//2886
+pub const STARTF_USESHOWWINDOW: DWORD = 0x00000001;
+pub const STARTF_USESIZE: DWORD = 0x00000002;
+pub const STARTF_USEPOSITION: DWORD = 0x00000004;
+pub const STARTF_USECOUNTCHARS: DWORD = 0x00000008;
+pub const STARTF_USEFILLATTRIBUTE: DWORD = 0x00000010;
+pub const STARTF_RUNFULLSCREEN: DWORD = 0x00000020;
+pub const STARTF_FORCEONFEEDBACK: DWORD = 0x00000040;
+pub const STARTF_FORCEOFFFEEDBACK: DWORD = 0x00000080;
+pub const STARTF_USESTDHANDLES: DWORD = 0x00000100;
+pub const STARTF_USEHOTKEY: DWORD = 0x00000200;
+pub const STARTF_TITLEISLINKNAME: DWORD = 0x00000800;
+pub const STARTF_TITLEISAPPID: DWORD = 0x00001000;
+pub const STARTF_PREVENTPINNING: DWORD = 0x00002000;
+pub const STARTF_UNTRUSTEDSOURCE: DWORD = 0x00008000;
+STRUCT!{struct STARTUPINFOEXA {
+ StartupInfo: STARTUPINFOA,
+ lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST,
+}}
+pub type LPSTARTUPINFOEXA = *mut STARTUPINFOEXA;
+STRUCT!{struct STARTUPINFOEXW {
+ StartupInfo: STARTUPINFOW,
+ lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST,
+}}
+pub type LPSTARTUPINFOEXW = *mut STARTUPINFOEXW;
+extern "system" {
+ pub fn OpenMutexA(
+ dwDesiredAccess: DWORD,
+ bInheritHandle: BOOL,
+ lpName: LPCSTR,
+ ) -> HANDLE;
+ pub fn CreateSemaphoreA(
+ lpSemaphoreAttributes: LPSECURITY_ATTRIBUTES,
+ lInitialCount: LONG,
+ lMaximumCount: LONG,
+ lpName: LPCSTR,
+ ) -> HANDLE;
+ pub fn OpenSemaphoreA(
+ dwDesiredAccess: DWORD,
+ bInheritHandle: BOOL,
+ lpName: LPCSTR,
+ ) -> HANDLE;
+ pub fn CreateWaitableTimerA(
+ lpTimerAttributes: LPSECURITY_ATTRIBUTES,
+ bManualReset: BOOL,
+ lpTimerName: LPCSTR,
+ ) -> HANDLE;
+ pub fn OpenWaitableTimerA(
+ dwDesiredAccess: DWORD,
+ bInheritHandle: BOOL,
+ lpTimerName: LPCSTR,
+ ) -> HANDLE;
+ pub fn CreateSemaphoreExA(
+ lpSemaphoreAttributes: LPSECURITY_ATTRIBUTES,
+ lInitialCount: LONG,
+ lMaximumCount: LONG,
+ lpName: LPCSTR,
+ dwFlags: DWORD,
+ dwDesiredAccess: DWORD,
+ ) -> HANDLE;
+ pub fn CreateWaitableTimerExA(
+ lpTimerAttributes: LPSECURITY_ATTRIBUTES,
+ lpTimerName: LPCSTR,
+ dwFlags: DWORD,
+ dwDesiredAccess: DWORD,
+ ) -> HANDLE;
+ pub fn CreateFileMappingA(
+ hFile: HANDLE,
+ lpAttributes: LPSECURITY_ATTRIBUTES,
+ flProtect: DWORD,
+ dwMaximumSizeHigh: DWORD,
+ dwMaximumSizeLow: DWORD,
+ lpName: LPCSTR,
+ ) -> HANDLE;
+ pub fn CreateFileMappingNumaA(
+ hFile: HANDLE,
+ lpFileMappingAttributes: LPSECURITY_ATTRIBUTES,
+ flProtect: DWORD,
+ dwMaximumSizeHigh: DWORD,
+ dwMaximumSizeLow: DWORD,
+ lpName: LPCSTR,
+ nndPreferred: DWORD,
+ ) -> HANDLE;
+ pub fn OpenFileMappingA(
+ dwDesiredAccess: DWORD,
+ bInheritHandle: BOOL,
+ lpName: LPCSTR,
+ ) -> HANDLE;
+ pub fn GetLogicalDriveStringsA(
+ nBufferLength: DWORD,
+ lpBuffer: LPSTR,
+ ) -> DWORD;
+ pub fn LoadPackagedLibrary(
+ lpwLibFileName: LPCWSTR,
+ Reserved: DWORD,
+ ) -> HMODULE;
+ pub fn QueryFullProcessImageNameA(
+ hProcess: HANDLE,
+ dwFlags: DWORD,
+ lpExeName: LPSTR,
+ lpdwSize: PDWORD,
+ ) -> BOOL;
+ pub fn QueryFullProcessImageNameW(
+ hProcess: HANDLE,
+ dwFlags: DWORD,
+ lpExeName: LPWSTR,
+ lpdwSize: PDWORD,
+ ) -> BOOL;
+}
+//3233
+extern "system" {
+ pub fn GetStartupInfoA(
+ lpStartupInfo: LPSTARTUPINFOA,
+ );
+ pub fn GetFirmwareEnvironmentVariableA(
+ lpName: LPCSTR,
+ lpGuid: LPCSTR,
+ pBuffer: PVOID,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetFirmwareEnvironmentVariableW(
+ lpName: LPCWSTR,
+ lpGuid: LPCWSTR,
+ pBuffer: PVOID,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetFirmwareEnvironmentVariableExA(
+ lpName: LPCSTR,
+ lpGuid: LPCSTR,
+ pBuffer: PVOID,
+ nSize: DWORD,
+ pdwAttribubutes: PDWORD,
+ ) -> DWORD;
+ pub fn GetFirmwareEnvironmentVariableExW(
+ lpName: LPCWSTR,
+ lpGuid: LPCWSTR,
+ pBuffer: PVOID,
+ nSize: DWORD,
+ pdwAttribubutes: PDWORD,
+ ) -> DWORD;
+ pub fn SetFirmwareEnvironmentVariableA(
+ lpName: LPCSTR,
+ lpGuid: LPCSTR,
+ pValue: PVOID,
+ nSize: DWORD,
+ ) -> BOOL;
+ pub fn SetFirmwareEnvironmentVariableW(
+ lpName: LPCWSTR,
+ lpGuid: LPCWSTR,
+ pValue: PVOID,
+ nSize: DWORD,
+ ) -> BOOL;
+ pub fn SetFirmwareEnvironmentVariableExA(
+ lpName: LPCSTR,
+ lpGuid: LPCSTR,
+ pValue: PVOID,
+ nSize: DWORD,
+ dwAttributes: DWORD,
+ ) -> BOOL;
+ pub fn SetFirmwareEnvironmentVariableExW(
+ lpName: LPCWSTR,
+ lpGuid: LPCWSTR,
+ pValue: PVOID,
+ nSize: DWORD,
+ dwAttributes: DWORD,
+ ) -> BOOL;
+ pub fn GetFirmwareType(
+ FirmwareType: PFIRMWARE_TYPE,
+ ) -> BOOL;
+ pub fn IsNativeVhdBoot(
+ NativeVhdBoot: PBOOL,
+ ) -> BOOL;
+ pub fn FindResourceA(
+ hModule: HMODULE,
+ lpName: LPCSTR,
+ lpType: LPCSTR,
+ ) -> HRSRC;
+ pub fn FindResourceExA(
+ hModule: HMODULE,
+ lpName: LPCSTR,
+ lpType: LPCSTR,
+ wLanguage: WORD,
+ ) -> HRSRC;
+ pub fn EnumResourceTypesA(
+ hModule: HMODULE,
+ lpEnumFunc: ENUMRESTYPEPROCA,
+ lParam: LONG_PTR,
+ ) -> BOOL;
+ pub fn EnumResourceTypesW(
+ hModule: HMODULE,
+ lpEnumFunc: ENUMRESTYPEPROCW,
+ lParam: LONG_PTR,
+ ) -> BOOL;
+ pub fn EnumResourceNamesA(
+ hModule: HMODULE,
+ lpType: LPCSTR,
+ lpEnumFunc: ENUMRESNAMEPROCA,
+ lParam: LONG_PTR,
+ ) -> BOOL;
+ pub fn EnumResourceLanguagesA(
+ hModule: HMODULE,
+ lpType: LPCSTR,
+ lpName: LPCSTR,
+ lpEnumFunc: ENUMRESLANGPROCA,
+ lParam: LONG_PTR,
+ ) -> BOOL;
+ pub fn EnumResourceLanguagesW(
+ hModule: HMODULE,
+ lpType: LPCWSTR,
+ lpName: LPCWSTR,
+ lpEnumFunc: ENUMRESLANGPROCW,
+ lParam: LONG_PTR,
+ ) -> BOOL;
+ pub fn BeginUpdateResourceA(
+ pFileName: LPCSTR,
+ bDeleteExistingResources: BOOL,
+ ) -> HANDLE;
+ pub fn BeginUpdateResourceW(
+ pFileName: LPCWSTR,
+ bDeleteExistingResources: BOOL,
+ ) -> HANDLE;
+ pub fn UpdateResourceA(
+ hUpdate: HANDLE,
+ lpType: LPCSTR,
+ lpName: LPCSTR,
+ wLanguage: WORD,
+ lpData: LPVOID,
+ cb: DWORD,
+ ) -> BOOL;
+ pub fn UpdateResourceW(
+ hUpdate: HANDLE,
+ lpType: LPCWSTR,
+ lpName: LPCWSTR,
+ wLanguage: WORD,
+ lpData: LPVOID,
+ cb: DWORD,
+ ) -> BOOL;
+ pub fn EndUpdateResourceA(
+ hUpdate: HANDLE,
+ fDiscard: BOOL,
+ ) -> BOOL;
+ pub fn EndUpdateResourceW(
+ hUpdate: HANDLE,
+ fDiscard: BOOL,
+ ) -> BOOL;
+ pub fn GlobalAddAtomA(
+ lpString: LPCSTR,
+ ) -> ATOM;
+ pub fn GlobalAddAtomW(
+ lpString: LPCWSTR,
+ ) -> ATOM;
+ pub fn GlobalAddAtomExA(
+ lpString: LPCSTR,
+ Flags: DWORD,
+ ) -> ATOM;
+ pub fn GlobalAddAtomExW(
+ lpString: LPCWSTR,
+ Flags: DWORD,
+ ) -> ATOM;
+ pub fn GlobalFindAtomA(
+ lpString: LPCSTR,
+ ) -> ATOM;
+ pub fn GlobalFindAtomW(
+ lpString: LPCWSTR,
+ ) -> ATOM;
+ pub fn GlobalGetAtomNameA(
+ nAtom: ATOM,
+ lpBuffer: LPSTR,
+ nSize: c_int,
+ ) -> UINT;
+ pub fn GlobalGetAtomNameW(
+ nAtom: ATOM,
+ lpBuffer: LPWSTR,
+ nSize: c_int,
+ ) -> UINT;
+ pub fn AddAtomA(
+ lpString: LPCSTR,
+ ) -> ATOM;
+ pub fn AddAtomW(
+ lpString: LPCWSTR,
+ ) -> ATOM;
+ pub fn FindAtomA(
+ lpString: LPCSTR,
+ ) -> ATOM;
+ pub fn FindAtomW(
+ lpString: LPCWSTR,
+ ) -> ATOM;
+ pub fn GetAtomNameA(
+ nAtom: ATOM,
+ lpBuffer: LPSTR,
+ nSize: c_int,
+ ) -> UINT;
+ pub fn GetAtomNameW(
+ nAtom: ATOM,
+ lpBuffer: LPWSTR,
+ nSize: c_int,
+ ) -> UINT;
+ pub fn GetProfileIntA(
+ lpAppName: LPCSTR,
+ lpKeyName: LPCSTR,
+ nDefault: INT,
+ ) -> UINT;
+ pub fn GetProfileIntW(
+ lpAppName: LPCWSTR,
+ lpKeyName: LPCWSTR,
+ nDefault: INT,
+ ) -> UINT;
+ pub fn GetProfileStringA(
+ lpAppName: LPCSTR,
+ lpKeyName: LPCSTR,
+ lpDefault: LPCSTR,
+ lpReturnedString: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetProfileStringW(
+ lpAppName: LPCWSTR,
+ lpKeyName: LPCWSTR,
+ lpDefault: LPCWSTR,
+ lpReturnedString: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn WriteProfileStringA(
+ lpAppName: LPCSTR,
+ lpKeyName: LPCSTR,
+ lpString: LPCSTR,
+ ) -> BOOL;
+ pub fn WriteProfileStringW(
+ lpAppName: LPCWSTR,
+ lpKeyName: LPCWSTR,
+ lpString: LPCWSTR,
+ ) -> BOOL;
+ pub fn GetProfileSectionA(
+ lpAppName: LPCSTR,
+ lpReturnedString: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetProfileSectionW(
+ lpAppName: LPCWSTR,
+ lpReturnedString: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn WriteProfileSectionA(
+ lpAppName: LPCSTR,
+ lpString: LPCSTR,
+ ) -> BOOL;
+ pub fn WriteProfileSectionW(
+ lpAppName: LPCWSTR,
+ lpString: LPCWSTR,
+ ) -> BOOL;
+ pub fn GetPrivateProfileIntA(
+ lpAppName: LPCSTR,
+ lpKeyName: LPCSTR,
+ nDefault: INT,
+ lpFileName: LPCSTR,
+ ) -> UINT;
+ pub fn GetPrivateProfileIntW(
+ lpAppName: LPCWSTR,
+ lpKeyName: LPCWSTR,
+ nDefault: INT,
+ lpFileName: LPCWSTR,
+ ) -> UINT;
+ pub fn GetPrivateProfileStringA(
+ lpAppName: LPCSTR,
+ lpKeyName: LPCSTR,
+ lpDefault: LPCSTR,
+ lpReturnedString: LPSTR,
+ nSize: DWORD,
+ lpFileName: LPCSTR,
+ ) -> DWORD;
+ pub fn GetPrivateProfileStringW(
+ lpAppName: LPCWSTR,
+ lpKeyName: LPCWSTR,
+ lpDefault: LPCWSTR,
+ lpReturnedString: LPWSTR,
+ nSize: DWORD,
+ lpFileName: LPCWSTR,
+ ) -> DWORD;
+ pub fn WritePrivateProfileStringA(
+ lpAppName: LPCSTR,
+ lpKeyName: LPCSTR,
+ lpString: LPCSTR,
+ lpFileName: LPCSTR,
+ ) -> BOOL;
+ pub fn WritePrivateProfileStringW(
+ lpAppName: LPCWSTR,
+ lpKeyName: LPCWSTR,
+ lpString: LPCWSTR,
+ lpFileName: LPCWSTR,
+ ) -> BOOL;
+ pub fn GetPrivateProfileSectionA(
+ lpAppName: LPCSTR,
+ lpReturnedString: LPSTR,
+ nSize: DWORD,
+ lpFileName: LPCSTR,
+ ) -> DWORD;
+ pub fn GetPrivateProfileSectionW(
+ lpAppName: LPCWSTR,
+ lpReturnedString: LPWSTR,
+ nSize: DWORD,
+ lpFileName: LPCWSTR,
+ ) -> DWORD;
+ pub fn WritePrivateProfileSectionA(
+ lpAppName: LPCSTR,
+ lpString: LPCSTR,
+ lpFileName: LPCSTR,
+ ) -> BOOL;
+ pub fn WritePrivateProfileSectionW(
+ lpAppName: LPCWSTR,
+ lpString: LPCWSTR,
+ lpFileName: LPCWSTR,
+ ) -> BOOL;
+ pub fn GetPrivateProfileSectionNamesA(
+ lpszReturnBuffer: LPSTR,
+ nSize: DWORD,
+ lpFileName: LPCSTR,
+ ) -> DWORD;
+ pub fn GetPrivateProfileSectionNamesW(
+ lpszReturnBuffer: LPWSTR,
+ nSize: DWORD,
+ lpFileName: LPCWSTR,
+ ) -> DWORD;
+ pub fn GetPrivateProfileStructA(
+ lpszSection: LPCSTR,
+ lpszKey: LPCSTR,
+ lpStruct: LPVOID,
+ uSizeStruct: UINT,
+ szFile: LPCSTR,
+ ) -> BOOL;
+ pub fn GetPrivateProfileStructW(
+ lpszSection: LPCWSTR,
+ lpszKey: LPCWSTR,
+ lpStruct: LPVOID,
+ uSizeStruct: UINT,
+ szFile: LPCWSTR,
+ ) -> BOOL;
+ pub fn WritePrivateProfileStructA(
+ lpszSection: LPCSTR,
+ lpszKey: LPCSTR,
+ lpStruct: LPVOID,
+ uSizeStruct: UINT,
+ szFile: LPCSTR,
+ ) -> BOOL;
+ pub fn WritePrivateProfileStructW(
+ lpszSection: LPCWSTR,
+ lpszKey: LPCWSTR,
+ lpStruct: LPVOID,
+ uSizeStruct: UINT,
+ szFile: LPCWSTR,
+ ) -> BOOL;
+ pub fn Wow64EnableWow64FsRedirection(
+ Wow64FsEnableRedirection: BOOLEAN,
+ ) -> BOOLEAN;
+ pub fn SetDllDirectoryA(
+ lpPathName: LPCSTR,
+ ) -> BOOL;
+ pub fn SetDllDirectoryW(
+ lpPathName: LPCWSTR,
+ ) -> BOOL;
+ pub fn GetDllDirectoryA(
+ nBufferLength: DWORD,
+ lpBuffer: LPSTR,
+ ) -> DWORD;
+ pub fn GetDllDirectoryW(
+ nBufferLength: DWORD,
+ lpBuffer: LPWSTR,
+ ) -> DWORD;
+ pub fn SetSearchPathMode(
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn CreateDirectoryExA(
+ lpTemplateDirectory: LPCSTR,
+ lpNewDirectory: LPCSTR,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ ) -> BOOL;
+ pub fn CreateDirectoryExW(
+ lpTemplateDirectory: LPCWSTR,
+ lpNewDirectory: LPCWSTR,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ ) -> BOOL;
+ pub fn CreateDirectoryTransactedA(
+ lpTemplateDirectory: LPCSTR,
+ lpNewDirectory: LPCSTR,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ hTransaction: HANDLE,
+ ) -> BOOL;
+ pub fn CreateDirectoryTransactedW(
+ lpTemplateDirectory: LPCWSTR,
+ lpNewDirectory: LPCWSTR,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ hTransaction: HANDLE,
+ ) -> BOOL;
+ pub fn RemoveDirectoryTransactedA(
+ lpPathName: LPCSTR,
+ hTransaction: HANDLE,
+ ) -> BOOL;
+ pub fn RemoveDirectoryTransactedW(
+ lpPathName: LPCWSTR,
+ hTransaction: HANDLE,
+ ) -> BOOL;
+ pub fn GetFullPathNameTransactedA(
+ lpFileName: LPCSTR,
+ nBufferLength: DWORD,
+ lpBuffer: LPSTR,
+ lpFilePart: *mut LPSTR,
+ hTransaction: HANDLE,
+ ) -> DWORD;
+ pub fn GetFullPathNameTransactedW(
+ lpFileName: LPCWSTR,
+ nBufferLength: DWORD,
+ lpBuffer: LPWSTR,
+ lpFilePart: *mut LPWSTR,
+ hTransaction: HANDLE,
+ );
+ pub fn DefineDosDeviceA(
+ dwFlags: DWORD,
+ lpDeviceName: LPCSTR,
+ lpTargetPath: LPCSTR,
+ ) -> BOOL;
+ pub fn QueryDosDeviceA(
+ lpDeviceName: LPCSTR,
+ lpTargetPath: LPSTR,
+ ucchMax: DWORD,
+ ) -> DWORD;
+ pub fn CreateFileTransactedA(
+ lpFileName: LPCSTR,
+ dwDesiredAccess: DWORD,
+ dwShareMode: DWORD,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ dwCreationDisposition: DWORD,
+ dwFlagsAndAttributes: DWORD,
+ hTemplateFile: HANDLE,
+ hTransaction: HANDLE,
+ pusMiniVersion: PUSHORT,
+ lpExtendedParameter: PVOID,
+ ) -> HANDLE;
+ pub fn CreateFileTransactedW(
+ lpFileName: LPCWSTR,
+ dwDesiredAccess: DWORD,
+ dwShareMode: DWORD,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ dwCreationDisposition: DWORD,
+ dwFlagsAndAttributes: DWORD,
+ hTemplateFile: HANDLE,
+ hTransaction: HANDLE,
+ pusMiniVersion: PUSHORT,
+ lpExtendedParameter: PVOID,
+ ) -> HANDLE;
+ pub fn ReOpenFile(
+ hOriginalFile: HANDLE,
+ dwDesiredAccess: DWORD,
+ dwShareMode: DWORD,
+ dwFlags: DWORD,
+ ) -> HANDLE;
+ pub fn SetFileAttributesTransactedA(
+ lpFileName: LPCSTR,
+ dwFileAttributes: DWORD,
+ hTransaction: HANDLE,
+ ) -> BOOL;
+ pub fn SetFileAttributesTransactedW(
+ lpFileName: LPCWSTR,
+ dwFileAttributes: DWORD,
+ hTransaction: HANDLE,
+ ) -> BOOL;
+ pub fn GetFileAttributesTransactedA(
+ lpFileName: LPCSTR,
+ fInfoLevelId: GET_FILEEX_INFO_LEVELS,
+ lpFileInformation: LPVOID,
+ hTransaction: HANDLE,
+ ) -> BOOL;
+ pub fn GetFileAttributesTransactedW(
+ lpFileName: LPCWSTR,
+ fInfoLevelId: GET_FILEEX_INFO_LEVELS,
+ lpFileInformation: LPVOID,
+ hTransaction: HANDLE,
+ ) -> BOOL;
+ pub fn GetCompressedFileSizeTransactedA(
+ lpFileName: LPCSTR,
+ lpFileSizeHigh: LPDWORD,
+ hTransaction: HANDLE,
+ ) -> DWORD;
+ pub fn GetCompressedFileSizeTransactedW(
+ lpFileName: LPCWSTR,
+ lpFileSizeHigh: LPDWORD,
+ hTransaction: HANDLE,
+ );
+ pub fn DeleteFileTransactedA(
+ lpFileName: LPCSTR,
+ hTransaction: HANDLE,
+ ) -> BOOL;
+ pub fn DeleteFileTransactedW(
+ lpFileName: LPCWSTR,
+ hTransaction: HANDLE,
+ ) -> BOOL;
+ pub fn CheckNameLegalDOS8Dot3A(
+ lpName: LPCSTR,
+ lpOemName: LPSTR,
+ OemNameSize: DWORD,
+ pbNameContainsSpaces: PBOOL,
+ pbNameLegal: PBOOL,
+ ) -> BOOL;
+ pub fn CheckNameLegalDOS8Dot3W(
+ lpName: LPCWSTR,
+ lpOemName: LPSTR,
+ OemNameSize: DWORD,
+ pbNameContainsSpaces: PBOOL,
+ pbNameLegal: PBOOL,
+ ) -> BOOL;
+ pub fn FindFirstFileTransactedA(
+ lpFileName: LPCSTR,
+ fInfoLevelId: FINDEX_INFO_LEVELS,
+ lpFindFileData: LPVOID,
+ fSearchOp: FINDEX_SEARCH_OPS,
+ lpSearchFilter: LPVOID,
+ dwAdditionalFlags: DWORD,
+ hTransaction: HANDLE,
+ ) -> HANDLE;
+ pub fn FindFirstFileTransactedW(
+ lpFileName: LPCWSTR,
+ fInfoLevelId: FINDEX_INFO_LEVELS,
+ lpFindFileData: LPVOID,
+ fSearchOp: FINDEX_SEARCH_OPS,
+ lpSearchFilter: LPVOID,
+ dwAdditionalFlags: DWORD,
+ hTransaction: HANDLE,
+ ) -> HANDLE;
+ pub fn CopyFileA(
+ lpExistingFileName: LPCSTR,
+ lpNewFileName: LPCSTR,
+ bFailIfExists: BOOL,
+ ) -> BOOL;
+ pub fn CopyFileW(
+ lpExistingFileName: LPCWSTR,
+ lpNewFileName: LPCWSTR,
+ bFailIfExists: BOOL,
+ ) -> BOOL;
+}
+FN!{stdcall LPPROGRESS_ROUTINE(
+ TotalFileSize: LARGE_INTEGER,
+ TotalBytesTransferred: LARGE_INTEGER,
+ StreamSize: LARGE_INTEGER,
+ StreamBytesTransferred: LARGE_INTEGER,
+ dwStreamNumber: DWORD,
+ dwCallbackReason: DWORD,
+ hSourceFile: HANDLE,
+ hDestinationFile: HANDLE,
+ lpData: LPVOID,
+) -> DWORD}
+extern "system" {
+ pub fn CopyFileExA(
+ lpExistingFileName: LPCSTR,
+ lpNewFileName: LPCSTR,
+ lpProgressRoutine: LPPROGRESS_ROUTINE,
+ lpData: LPVOID,
+ pbCancel: LPBOOL,
+ dwCopyFlags: DWORD,
+ ) -> BOOL;
+ pub fn CopyFileExW(
+ lpExistingFileName: LPCWSTR,
+ lpNewFileName: LPCWSTR,
+ lpProgressRoutine: LPPROGRESS_ROUTINE,
+ lpData: LPVOID,
+ pbCancel: LPBOOL,
+ dwCopyFlags: DWORD,
+ ) -> BOOL;
+ pub fn CopyFileTransactedA(
+ lpExistingFileName: LPCWSTR,
+ lpNewFileName: LPCWSTR,
+ lpProgressRoutine: LPPROGRESS_ROUTINE,
+ lpData: LPVOID,
+ pbCancel: LPBOOL,
+ dwCopyFlags: DWORD,
+ hTransaction: HANDLE,
+ ) -> BOOL;
+ pub fn CopyFileTransactedW(
+ lpExistingFileName: LPCWSTR,
+ lpNewFileName: LPCWSTR,
+ lpProgressRoutine: LPPROGRESS_ROUTINE,
+ lpData: LPVOID,
+ pbCancel: LPBOOL,
+ dwCopyFlags: DWORD,
+ hTransaction: HANDLE,
+ ) -> BOOL;
+}
+ENUM!{enum COPYFILE2_MESSAGE_TYPE {
+ COPYFILE2_CALLBACK_NONE = 0,
+ COPYFILE2_CALLBACK_CHUNK_STARTED,
+ COPYFILE2_CALLBACK_CHUNK_FINISHED,
+ COPYFILE2_CALLBACK_STREAM_STARTED,
+ COPYFILE2_CALLBACK_STREAM_FINISHED,
+ COPYFILE2_CALLBACK_POLL_CONTINUE,
+ COPYFILE2_CALLBACK_ERROR,
+ COPYFILE2_CALLBACK_MAX,
+}}
+ENUM!{enum COPYFILE2_MESSAGE_ACTION {
+ COPYFILE2_PROGRESS_CONTINUE = 0,
+ COPYFILE2_PROGRESS_CANCEL,
+ COPYFILE2_PROGRESS_STOP,
+ COPYFILE2_PROGRESS_QUIET,
+ COPYFILE2_PROGRESS_PAUSE,
+}}
+ENUM!{enum COPYFILE2_COPY_PHASE {
+ COPYFILE2_PHASE_NONE = 0,
+ COPYFILE2_PHASE_PREPARE_SOURCE,
+ COPYFILE2_PHASE_PREPARE_DEST,
+ COPYFILE2_PHASE_READ_SOURCE,
+ COPYFILE2_PHASE_WRITE_DESTINATION,
+ COPYFILE2_PHASE_SERVER_COPY,
+ COPYFILE2_PHASE_NAMEGRAFT_COPY,
+ COPYFILE2_PHASE_MAX,
+}}
+STRUCT!{struct COPYFILE2_MESSAGE_ChunkStarted {
+ dwStreamNumber: DWORD,
+ dwReserved: DWORD,
+ hSourceFile: HANDLE,
+ hDestinationFile: HANDLE,
+ uliChunkNumber: ULARGE_INTEGER,
+ uliChunkSize: ULARGE_INTEGER,
+ uliStreamSize: ULARGE_INTEGER,
+ uliTotalFileSize: ULARGE_INTEGER,
+}}
+STRUCT!{struct COPYFILE2_MESSAGE_ChunkFinished {
+ dwStreamNumber: DWORD,
+ dwFlags: DWORD,
+ hSourceFile: HANDLE,
+ hDestinationFile: HANDLE,
+ uliChunkNumber: ULARGE_INTEGER,
+ uliChunkSize: ULARGE_INTEGER,
+ uliStreamSize: ULARGE_INTEGER,
+ uliStreamBytesTransferred: ULARGE_INTEGER,
+ uliTotalFileSize: ULARGE_INTEGER,
+ uliTotalBytesTransferred: ULARGE_INTEGER,
+}}
+STRUCT!{struct COPYFILE2_MESSAGE_StreamStarted {
+ dwStreamNumber: DWORD,
+ dwReserved: DWORD,
+ hSourceFile: HANDLE,
+ hDestinationFile: HANDLE,
+ uliStreamSize: ULARGE_INTEGER,
+ uliTotalFileSize: ULARGE_INTEGER,
+}}
+STRUCT!{struct COPYFILE2_MESSAGE_StreamFinished {
+ dwStreamNumber: DWORD,
+ dwReserved: DWORD,
+ hSourceFile: HANDLE,
+ hDestinationFile: HANDLE,
+ uliStreamSize: ULARGE_INTEGER,
+ uliStreamBytesTransferred: ULARGE_INTEGER,
+ uliTotalFileSize: ULARGE_INTEGER,
+ uliTotalBytesTransferred: ULARGE_INTEGER,
+}}
+STRUCT!{struct COPYFILE2_MESSAGE_PollContinue {
+ dwReserved: DWORD,
+}}
+STRUCT!{struct COPYFILE2_MESSAGE_Error {
+ CopyPhase: COPYFILE2_COPY_PHASE,
+ dwStreamNumber: DWORD,
+ hrFailure: HRESULT,
+ dwReserved: DWORD,
+ uliChunkNumber: ULARGE_INTEGER,
+ uliStreamSize: ULARGE_INTEGER,
+ uliStreamBytesTransferred: ULARGE_INTEGER,
+ uliTotalFileSize: ULARGE_INTEGER,
+ uliTotalBytesTransferred: ULARGE_INTEGER,
+}}
+UNION!{union COPYFILE2_MESSAGE_Info {
+ [u64; 8] [u64; 9],
+ ChunkStarted ChunkStarted_mut: COPYFILE2_MESSAGE_ChunkStarted,
+ ChunkFinished ChunkFinished_mut: COPYFILE2_MESSAGE_ChunkFinished,
+ StreamStarted StreamStarted_mut: COPYFILE2_MESSAGE_StreamStarted,
+ StreamFinished StreamFinished_mut: COPYFILE2_MESSAGE_StreamFinished,
+ PollContinue PollContinue_mut: COPYFILE2_MESSAGE_PollContinue,
+ Error Error_mut: COPYFILE2_MESSAGE_Error,
+}}
+STRUCT!{struct COPYFILE2_MESSAGE {
+ Type: COPYFILE2_MESSAGE_TYPE,
+ dwPadding: DWORD,
+ Info: COPYFILE2_MESSAGE_Info,
+}}
+FN!{stdcall PCOPYFILE2_PROGRESS_ROUTINE(
+ pMessage: *const COPYFILE2_MESSAGE,
+ pvCallbackContext: PVOID,
+) -> COPYFILE2_MESSAGE_ACTION}
+STRUCT!{struct COPYFILE2_EXTENDED_PARAMETERS {
+ dwSize: DWORD,
+ dwCopyFlags: DWORD,
+ pfCancel: *mut BOOL,
+ pProgressRoutine: PCOPYFILE2_PROGRESS_ROUTINE,
+ pvCallbackContext: PVOID,
+}}
+extern "system" {
+ pub fn CopyFile2(
+ pwszExistingFileName: PCWSTR,
+ pwszNewFileName: PCWSTR,
+ pExtendedParameters: *mut COPYFILE2_EXTENDED_PARAMETERS,
+ ) -> HRESULT;
+ pub fn MoveFileA(
+ lpExistingFileName: LPCSTR,
+ lpNewFileName: LPCSTR,
+ ) -> BOOL;
+ pub fn MoveFileW(
+ lpExistingFileName: LPCWSTR,
+ lpNewFileName: LPCWSTR,
+ ) -> BOOL;
+ pub fn MoveFileExA(
+ lpExistingFileName: LPCSTR,
+ lpNewFileName: LPCSTR,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn MoveFileExW(
+ lpExistingFileName: LPCWSTR,
+ lpNewFileName: LPCWSTR,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn MoveFileWithProgressA(
+ lpExistingFileName: LPCSTR,
+ lpNewFileName: LPCSTR,
+ lpProgressRoutine: LPPROGRESS_ROUTINE,
+ lpData: LPVOID,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn MoveFileWithProgressW(
+ lpExistingFileName: LPCWSTR,
+ lpNewFileName: LPCWSTR,
+ lpProgressRoutine: LPPROGRESS_ROUTINE,
+ lpData: LPVOID,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn MoveFileTransactedA(
+ lpExistingFileName: LPCSTR,
+ lpNewFileName: LPCSTR,
+ lpProgressRoutine: LPPROGRESS_ROUTINE,
+ lpData: LPVOID,
+ dwFlags: DWORD,
+ hTransaction: HANDLE,
+ ) -> BOOL;
+ pub fn MoveFileTransactedW(
+ lpExistingFileName: LPCWSTR,
+ lpNewFileName: LPCWSTR,
+ lpProgressRoutine: LPPROGRESS_ROUTINE,
+ lpData: LPVOID,
+ dwFlags: DWORD,
+ hTransaction: HANDLE,
+ ) -> BOOL;
+}
+pub const MOVEFILE_REPLACE_EXISTING: DWORD = 0x00000001;
+pub const MOVEFILE_COPY_ALLOWED: DWORD = 0x00000002;
+pub const MOVEFILE_DELAY_UNTIL_REBOOT: DWORD = 0x00000004;
+pub const MOVEFILE_WRITE_THROUGH: DWORD = 0x00000008;
+pub const MOVEFILE_CREATE_HARDLINK: DWORD = 0x00000010;
+pub const MOVEFILE_FAIL_IF_NOT_TRACKABLE: DWORD = 0x00000020;
+extern "system" {
+ pub fn ReplaceFileA(
+ lpReplacedFileName: LPCSTR,
+ lpReplacementFileName: LPCSTR,
+ lpBackupFileName: LPCSTR,
+ dwReplaceFlags: DWORD,
+ lpExclude: LPVOID,
+ lpReserved: LPVOID,
+ );
+ pub fn ReplaceFileW(
+ lpReplacedFileName: LPCWSTR,
+ lpReplacementFileName: LPCWSTR,
+ lpBackupFileName: LPCWSTR,
+ dwReplaceFlags: DWORD,
+ lpExclude: LPVOID,
+ lpReserved: LPVOID,
+ );
+ pub fn CreateHardLinkA(
+ lpFileName: LPCSTR,
+ lpExistingFileName: LPCSTR,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ ) -> BOOL;
+ pub fn CreateHardLinkW(
+ lpFileName: LPCWSTR,
+ lpExistingFileName: LPCWSTR,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ ) -> BOOL;
+ pub fn CreateHardLinkTransactedA(
+ lpFileName: LPCSTR,
+ lpExistingFileName: LPCSTR,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ hTransaction: HANDLE,
+ ) -> BOOL;
+ pub fn CreateHardLinkTransactedW(
+ lpFileName: LPCWSTR,
+ lpExistingFileName: LPCWSTR,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ hTransaction: HANDLE,
+ );
+ pub fn FindFirstStreamTransactedW(
+ lpFileName: LPCWSTR,
+ InfoLevel: STREAM_INFO_LEVELS,
+ lpFindStreamData: LPVOID,
+ dwFlags: DWORD,
+ hTransaction: HANDLE,
+ ) -> HANDLE;
+ pub fn FindFirstFileNameTransactedW(
+ lpFileName: LPCWSTR,
+ dwFlags: DWORD,
+ StringLength: LPDWORD,
+ LinkName: PWSTR,
+ hTransaction: HANDLE,
+ ) -> HANDLE;
+ pub fn CreateNamedPipeA(
+ lpName: LPCSTR,
+ dwOpenMode: DWORD,
+ dwPipeMode: DWORD,
+ nMaxInstances: DWORD,
+ nOutBufferSize: DWORD,
+ nInBufferSize: DWORD,
+ nDefaultTimeOut: DWORD,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ ) -> HANDLE;
+ pub fn GetNamedPipeHandleStateA(
+ hNamedPipe: HANDLE,
+ lpState: LPDWORD,
+ lpCurInstances: LPDWORD,
+ lpMaxCollectionCount: LPDWORD,
+ lpCollectDataTimeout: LPDWORD,
+ lpUserName: LPSTR,
+ nMaxUserNameSize: DWORD,
+ ) -> BOOL;
+ pub fn CallNamedPipeA(
+ lpNamedPipeName: LPCSTR,
+ lpInBuffer: LPVOID,
+ nInBufferSize: DWORD,
+ lpOutBuffer: LPVOID,
+ nOutBufferSize: DWORD,
+ lpBytesRead: LPDWORD,
+ nTimeOut: DWORD,
+ ) -> BOOL;
+ pub fn WaitNamedPipeA(
+ lpNamedPipeName: LPCSTR,
+ nTimeOut: DWORD,
+ ) -> BOOL;
+ pub fn GetNamedPipeClientComputerNameA(
+ Pipe: HANDLE,
+ ClientComputerName: LPSTR,
+ ClientComputerNameLength: ULONG,
+ ) -> BOOL;
+ pub fn GetNamedPipeClientProcessId(
+ Pipe: HANDLE,
+ ClientProcessId: PULONG,
+ ) -> BOOL;
+ pub fn GetNamedPipeClientSessionId(
+ Pipe: HANDLE,
+ ClientSessionId: PULONG,
+ ) -> BOOL;
+ pub fn GetNamedPipeServerProcessId(
+ Pipe: HANDLE,
+ ServerProcessId: PULONG,
+ ) -> BOOL;
+ pub fn GetNamedPipeServerSessionId(
+ Pipe: HANDLE,
+ ServerSessionId: PULONG,
+ ) -> BOOL;
+ pub fn SetVolumeLabelA(
+ lpRootPathName: LPCSTR,
+ lpVolumeName: LPCSTR,
+ ) -> BOOL;
+ pub fn SetVolumeLabelW(
+ lpRootPathName: LPCWSTR,
+ lpVolumeName: LPCWSTR,
+ ) -> BOOL;
+ pub fn SetFileBandwidthReservation(
+ hFile: HANDLE,
+ nPeriodMilliseconds: DWORD,
+ nBytesPerPeriod: DWORD,
+ bDiscardable: BOOL,
+ lpTransferSize: LPDWORD,
+ lpNumOutstandingRequests: LPDWORD,
+ ) -> BOOL;
+ pub fn GetFileBandwidthReservation(
+ hFile: HANDLE,
+ lpPeriodMilliseconds: LPDWORD,
+ lpBytesPerPeriod: LPDWORD,
+ pDiscardable: LPBOOL,
+ lpTransferSize: LPDWORD,
+ lpNumOutstandingRequests: LPDWORD,
+ ) -> BOOL;
+ // pub fn ClearEventLogA();
+ // pub fn ClearEventLogW();
+ // pub fn BackupEventLogA();
+ // pub fn BackupEventLogW();
+ // pub fn CloseEventLog();
+ pub fn DeregisterEventSource(
+ hEventLog: HANDLE,
+ ) -> BOOL;
+ // pub fn NotifyChangeEventLog();
+ // pub fn GetNumberOfEventLogRecords();
+ // pub fn GetOldestEventLogRecord();
+ // pub fn OpenEventLogA();
+ // pub fn OpenEventLogW();
+ pub fn RegisterEventSourceA(
+ lpUNCServerName: LPCSTR,
+ lpSourceName: LPCSTR,
+ ) -> HANDLE;
+ pub fn RegisterEventSourceW(
+ lpUNCServerName: LPCWSTR,
+ lpSourceName: LPCWSTR,
+ ) -> HANDLE;
+ // pub fn OpenBackupEventLogA();
+ // pub fn OpenBackupEventLogW();
+ // pub fn ReadEventLogA();
+ // pub fn ReadEventLogW();
+ pub fn ReportEventA(
+ hEventLog: HANDLE,
+ wType: WORD,
+ wCategory: WORD,
+ dwEventID: DWORD,
+ lpUserSid: PSID,
+ wNumStrings: WORD,
+ dwDataSize: DWORD,
+ lpStrings: *mut LPCSTR,
+ lpRawData: LPVOID,
+ ) -> BOOL;
+ pub fn ReportEventW(
+ hEventLog: HANDLE,
+ wType: WORD,
+ wCategory: WORD,
+ dwEventID: DWORD,
+ lpUserSid: PSID,
+ wNumStrings: WORD,
+ dwDataSize: DWORD,
+ lpStrings: *mut LPCWSTR,
+ lpRawData: LPVOID,
+ ) -> BOOL;
+ // pub fn GetEventLogInformation();
+ // pub fn OperationStart();
+ // pub fn OperationEnd();
+ // pub fn AccessCheckAndAuditAlarmA();
+ // pub fn AccessCheckByTypeAndAuditAlarmA();
+ // pub fn AccessCheckByTypeResultListAndAuditAlarmA();
+ // pub fn AccessCheckByTypeResultListAndAuditAlarmByHandleA();
+ // pub fn ObjectOpenAuditAlarmA();
+ // pub fn ObjectPrivilegeAuditAlarmA();
+ // pub fn ObjectCloseAuditAlarmA();
+ // pub fn ObjectDeleteAuditAlarmA();
+ // pub fn PrivilegedServiceAuditAlarmA();
+ // pub fn AddConditionalAce();
+ // pub fn SetFileSecurityA();
+ // pub fn GetFileSecurityA();
+ pub fn ReadDirectoryChangesW(
+ hDirectory: HANDLE,
+ lpBuffer: LPVOID,
+ nBufferLength: DWORD,
+ bWatchSubtree: BOOL,
+ dwNotifyFilter: DWORD,
+ lpBytesReturned: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+ lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE,
+ ) -> BOOL;
+ pub fn MapViewOfFileExNuma(
+ hFileMappingObject: HANDLE,
+ dwDesiredAccess: DWORD,
+ dwFileOffsetHigh: DWORD,
+ dwFileOffsetLow: DWORD,
+ dwNumberOfBytesToMap: SIZE_T,
+ lpBaseAddress: LPVOID,
+ nndPreferred: DWORD,
+ ) -> LPVOID;
+ pub fn IsBadReadPtr(
+ lp: *const VOID,
+ ucb: UINT_PTR,
+ ) -> BOOL;
+ pub fn IsBadWritePtr(
+ lp: LPVOID,
+ ucb: UINT_PTR,
+ ) -> BOOL;
+ pub fn IsBadHugeReadPtr(
+ lp: *const VOID,
+ ucb: UINT_PTR,
+ ) -> BOOL;
+ pub fn IsBadHugeWritePtr(
+ lp: LPVOID,
+ ucb: UINT_PTR,
+ ) -> BOOL;
+ pub fn IsBadCodePtr(
+ lpfn: FARPROC,
+ ) -> BOOL;
+ pub fn IsBadStringPtrA(
+ lpsz: LPCSTR,
+ ucchMax: UINT_PTR,
+ ) -> BOOL;
+ pub fn IsBadStringPtrW(
+ lpsz: LPCWSTR,
+ ucchMax: UINT_PTR,
+ ) -> BOOL;
+ pub fn LookupAccountSidA(
+ lpSystemName: LPCSTR,
+ Sid: PSID,
+ Name: LPSTR,
+ cchName: LPDWORD,
+ ReferencedDomainName: LPSTR,
+ cchReferencedDomainName: LPDWORD,
+ peUse: PSID_NAME_USE,
+ ) -> BOOL;
+ pub fn LookupAccountSidW(
+ lpSystemName: LPCWSTR,
+ Sid: PSID,
+ Name: LPWSTR,
+ cchName: LPDWORD,
+ ReferencedDomainName: LPWSTR,
+ cchReferencedDomainName: LPDWORD,
+ peUse: PSID_NAME_USE,
+ ) -> BOOL;
+ pub fn LookupAccountNameA(
+ lpSystemName: LPCSTR,
+ lpAccountName: LPCSTR,
+ Sid: PSID,
+ cbSid: LPDWORD,
+ ReferencedDomainName: LPCSTR,
+ cchReferencedDomainName: LPDWORD,
+ peUse: PSID_NAME_USE,
+ ) -> BOOL;
+ pub fn LookupAccountNameW(
+ lpSystemName: LPCWSTR,
+ lpAccountName: LPCWSTR,
+ Sid: PSID,
+ cbSid: LPDWORD,
+ ReferencedDomainName: LPCWSTR,
+ cchReferencedDomainName: LPDWORD,
+ peUse: PSID_NAME_USE,
+ ) -> BOOL;
+ // pub fn LookupAccountNameLocalA();
+ // pub fn LookupAccountNameLocalW();
+ // pub fn LookupAccountSidLocalA();
+ // pub fn LookupAccountSidLocalW();
+ pub fn LookupPrivilegeValueA(
+ lpSystemName: LPCSTR,
+ lpName: LPCSTR,
+ lpLuid: PLUID,
+ ) -> BOOL;
+ pub fn LookupPrivilegeValueW(
+ lpSystemName: LPCWSTR,
+ lpName: LPCWSTR,
+ lpLuid: PLUID,
+ ) -> BOOL;
+ pub fn LookupPrivilegeNameA(
+ lpSystemName: LPCSTR,
+ lpLuid: PLUID,
+ lpName: LPSTR,
+ cchName: LPDWORD,
+ ) -> BOOL;
+ pub fn LookupPrivilegeNameW(
+ lpSystemName: LPCWSTR,
+ lpLuid: PLUID,
+ lpName: LPWSTR,
+ cchName: LPDWORD,
+ ) -> BOOL;
+ // pub fn LookupPrivilegeDisplayNameA();
+ // pub fn LookupPrivilegeDisplayNameW();
+ pub fn BuildCommDCBA(
+ lpDef: LPCSTR,
+ lpDCB: LPDCB,
+ ) -> BOOL;
+ pub fn BuildCommDCBW(
+ lpDef: LPCWSTR,
+ lpDCB: LPDCB,
+ ) -> BOOL;
+ pub fn BuildCommDCBAndTimeoutsA(
+ lpDef: LPCSTR,
+ lpDCB: LPDCB,
+ lpCommTimeouts: LPCOMMTIMEOUTS,
+ ) -> BOOL;
+ pub fn BuildCommDCBAndTimeoutsW(
+ lpDef: LPCWSTR,
+ lpDCB: LPDCB,
+ lpCommTimeouts: LPCOMMTIMEOUTS,
+ ) -> BOOL;
+ pub fn CommConfigDialogA(
+ lpszName: LPCSTR,
+ hWnd: HWND,
+ lpCC: LPCOMMCONFIG,
+ ) -> BOOL;
+ pub fn CommConfigDialogW(
+ lpszName: LPCWSTR,
+ hWnd: HWND,
+ lpCC: LPCOMMCONFIG,
+ ) -> BOOL;
+ pub fn GetDefaultCommConfigA(
+ lpszName: LPCSTR,
+ lpCC: LPCOMMCONFIG,
+ lpdwSize: LPDWORD,
+ ) -> BOOL;
+ pub fn GetDefaultCommConfigW(
+ lpszName: LPCWSTR,
+ lpCC: LPCOMMCONFIG,
+ lpdwSize: LPDWORD,
+ ) -> BOOL;
+ pub fn SetDefaultCommConfigA(
+ lpszName: LPCSTR,
+ lpCC: LPCOMMCONFIG,
+ dwSize: DWORD,
+ ) -> BOOL;
+ pub fn SetDefaultCommConfigW(
+ lpszName: LPCWSTR,
+ lpCC: LPCOMMCONFIG,
+ dwSize: DWORD,
+ ) -> BOOL;
+ pub fn GetComputerNameA(
+ lpBuffer: LPSTR,
+ nSize: LPDWORD,
+ ) -> BOOL;
+ pub fn GetComputerNameW(
+ lpBuffer: LPWSTR,
+ nSize: LPDWORD,
+ ) -> BOOL;
+ pub fn DnsHostnameToComputerNameA(
+ Hostname: LPCSTR,
+ ComputerName: LPCSTR,
+ nSize: LPDWORD,
+ ) -> BOOL;
+ pub fn DnsHostnameToComputerNameW(
+ Hostname: LPCWSTR,
+ ComputerName: LPWSTR,
+ nSize: LPDWORD,
+ ) -> BOOL;
+ pub fn GetUserNameA(
+ lpBuffer: LPSTR,
+ pcbBuffer: LPDWORD,
+ ) -> BOOL;
+ pub fn GetUserNameW(
+ lpBuffer: LPWSTR,
+ pcbBuffer: LPDWORD,
+ ) -> BOOL;
+}
+pub const LOGON32_LOGON_INTERACTIVE: DWORD = 2;
+pub const LOGON32_LOGON_NETWORK: DWORD = 3;
+pub const LOGON32_LOGON_BATCH: DWORD = 4;
+pub const LOGON32_LOGON_SERVICE: DWORD = 5;
+pub const LOGON32_LOGON_UNLOCK: DWORD = 7;
+pub const LOGON32_LOGON_NETWORK_CLEARTEXT: DWORD = 8;
+pub const LOGON32_LOGON_NEW_CREDENTIALS: DWORD = 9;
+pub const LOGON32_PROVIDER_DEFAULT: DWORD = 0;
+pub const LOGON32_PROVIDER_WINNT35: DWORD = 1;
+pub const LOGON32_PROVIDER_WINNT40: DWORD = 2;
+pub const LOGON32_PROVIDER_WINNT50: DWORD = 3;
+pub const LOGON32_PROVIDER_VIRTUAL: DWORD = 4;
+extern "system" {
+ pub fn LogonUserA(
+ lpUsername: LPCSTR,
+ lpDomain: LPCSTR,
+ lpPassword: LPCSTR,
+ dwLogonType: DWORD,
+ dwLogonProvider: DWORD,
+ phToken: PHANDLE,
+ ) -> BOOL;
+ pub fn LogonUserW(
+ lpUsername: LPCWSTR,
+ lpDomain: LPCWSTR,
+ lpPassword: LPCWSTR,
+ dwLogonType: DWORD,
+ dwLogonProvider: DWORD,
+ phToken: PHANDLE,
+ ) -> BOOL;
+ pub fn LogonUserExA(
+ lpUsername: LPCSTR,
+ lpDomain: LPCSTR,
+ lpPassword: LPCSTR,
+ dwLogonType: DWORD,
+ dwLogonProvider: DWORD,
+ phToken: PHANDLE,
+ ppLogonSid: *mut PSID,
+ ppProfileBuffer: *mut PVOID,
+ pdwProfileLength: LPDWORD,
+ pQuotaLimits: PQUOTA_LIMITS,
+ ) -> BOOL;
+ pub fn LogonUserExW(
+ lpUsername: LPCWSTR,
+ lpDomain: LPCWSTR,
+ lpPassword: LPCWSTR,
+ dwLogonType: DWORD,
+ dwLogonProvider: DWORD,
+ phToken: PHANDLE,
+ ppLogonSid: *mut PSID,
+ ppProfileBuffer: *mut PVOID,
+ pdwProfileLength: LPDWORD,
+ pQuotaLimits: PQUOTA_LIMITS,
+ ) -> BOOL;
+}
+pub const LOGON_WITH_PROFILE: DWORD = 0x00000001;
+pub const LOGON_NETCREDENTIALS_ONLY: DWORD = 0x00000002;
+extern "system" {
+ pub fn CreateProcessWithLogonW(
+ lpUsername: LPCWSTR,
+ lpDomain: LPCWSTR,
+ lpPassword: LPCWSTR,
+ dwLogonFlags: DWORD,
+ lpApplicationName: LPCWSTR,
+ lpCommandLine: LPWSTR,
+ dwCreationFlags: DWORD,
+ lpEnvironment: LPVOID,
+ lpCurrentDirectory: LPCWSTR,
+ lpStartupInfo: LPSTARTUPINFOW,
+ lpProcessInformation: LPPROCESS_INFORMATION,
+ ) -> BOOL;
+ pub fn CreateProcessWithTokenW(
+ hToken: HANDLE,
+ dwLogonFlags: DWORD,
+ lpApplicationName: LPCWSTR,
+ lpCommandLine: LPWSTR,
+ dwCreationFlags: DWORD,
+ lpEnvironment: LPVOID,
+ lpCurrentDirectory: LPCWSTR,
+ lpStartupInfo: LPSTARTUPINFOW,
+ lpProcessInformation: LPPROCESS_INFORMATION,
+ ) -> BOOL;
+ pub fn IsTokenUntrusted(
+ TokenHandle: HANDLE,
+ ) -> BOOL;
+ pub fn RegisterWaitForSingleObject(
+ phNewWaitObject: PHANDLE,
+ hObject: HANDLE,
+ Callback: WAITORTIMERCALLBACK,
+ Context: PVOID,
+ dwMilliseconds: ULONG,
+ dwFlags: ULONG,
+ ) -> BOOL;
+ pub fn UnregisterWait(
+ WaitHandle: HANDLE,
+ ) -> BOOL;
+ pub fn BindIoCompletionCallback(
+ FileHandle: HANDLE,
+ Function: LPOVERLAPPED_COMPLETION_ROUTINE,
+ Flags: ULONG,
+ ) -> BOOL;
+ pub fn SetTimerQueueTimer(
+ TimerQueue: HANDLE,
+ Callback: WAITORTIMERCALLBACK,
+ Parameter: PVOID,
+ DueTime: DWORD,
+ Period: DWORD,
+ PreferIo: BOOL,
+ ) -> HANDLE;
+ pub fn CancelTimerQueueTimer(
+ TimerQueue: HANDLE,
+ Timer: HANDLE,
+ ) -> BOOL;
+ pub fn DeleteTimerQueue(
+ TimerQueue: HANDLE,
+ ) -> BOOL;
+ // pub fn InitializeThreadpoolEnvironment();
+ // pub fn SetThreadpoolCallbackPool();
+ // pub fn SetThreadpoolCallbackCleanupGroup();
+ // pub fn SetThreadpoolCallbackRunsLong();
+ // pub fn SetThreadpoolCallbackLibrary();
+ // pub fn SetThreadpoolCallbackPriority();
+ // pub fn DestroyThreadpoolEnvironment();
+ // pub fn SetThreadpoolCallbackPersistent();
+ pub fn CreatePrivateNamespaceA(
+ lpPrivateNamespaceAttributes: LPSECURITY_ATTRIBUTES,
+ lpBoundaryDescriptor: LPVOID,
+ lpAliasPrefix: LPCSTR,
+ ) -> HANDLE;
+ pub fn OpenPrivateNamespaceA(
+ lpBoundaryDescriptor: LPVOID,
+ lpAliasPrefix: LPCSTR,
+ ) -> HANDLE;
+ pub fn CreateBoundaryDescriptorA(
+ Name: LPCSTR,
+ Flags: ULONG,
+ ) -> HANDLE;
+ pub fn AddIntegrityLabelToBoundaryDescriptor(
+ BoundaryDescriptor: *mut HANDLE,
+ IntegrityLabel: PSID,
+ ) -> BOOL;
+}
+pub const HW_PROFILE_GUIDLEN: usize = 39;
+// MAX_PROFILE_LEN
+pub const DOCKINFO_UNDOCKED: DWORD = 0x1;
+pub const DOCKINFO_DOCKED: DWORD = 0x2;
+pub const DOCKINFO_USER_SUPPLIED: DWORD = 0x4;
+pub const DOCKINFO_USER_UNDOCKED: DWORD = DOCKINFO_USER_SUPPLIED | DOCKINFO_UNDOCKED;
+pub const DOCKINFO_USER_DOCKED: DWORD = DOCKINFO_USER_SUPPLIED | DOCKINFO_DOCKED;
+STRUCT!{struct HW_PROFILE_INFOA {
+ dwDockInfo: DWORD,
+ szHwProfileGuid: [CHAR; HW_PROFILE_GUIDLEN],
+ szHwProfileName: [CHAR; MAX_PROFILE_LEN],
+}}
+pub type LPHW_PROFILE_INFOA = *mut HW_PROFILE_INFOA;
+STRUCT!{struct HW_PROFILE_INFOW {
+ dwDockInfo: DWORD,
+ szHwProfileGuid: [WCHAR; HW_PROFILE_GUIDLEN],
+ szHwProfileName: [WCHAR; MAX_PROFILE_LEN],
+}}
+pub type LPHW_PROFILE_INFOW = *mut HW_PROFILE_INFOW;
+extern "system" {
+ pub fn GetCurrentHwProfileA(
+ lpHwProfileInfo: LPHW_PROFILE_INFOA,
+ ) -> BOOL;
+ pub fn GetCurrentHwProfileW(
+ lpHwProfileInfo: LPHW_PROFILE_INFOW,
+ ) -> BOOL;
+ pub fn VerifyVersionInfoA(
+ lpVersionInformation: LPOSVERSIONINFOEXA,
+ dwTypeMask: DWORD,
+ dwlConditionMask: DWORDLONG,
+ ) -> BOOL;
+ pub fn VerifyVersionInfoW(
+ lpVersionInformation: LPOSVERSIONINFOEXW,
+ dwTypeMask: DWORD,
+ dwlConditionMask: DWORDLONG,
+ ) -> BOOL;
+}
+STRUCT!{struct SYSTEM_POWER_STATUS {
+ ACLineStatus: BYTE,
+ BatteryFlag: BYTE,
+ BatteryLifePercent: BYTE,
+ Reserved1: BYTE,
+ BatteryLifeTime: DWORD,
+ BatteryFullLifeTime: DWORD,
+}}
+pub type LPSYSTEM_POWER_STATUS = *mut SYSTEM_POWER_STATUS;
+extern "system" {
+ pub fn GetSystemPowerStatus(
+ lpSystemPowerStatus: LPSYSTEM_POWER_STATUS,
+ ) -> BOOL;
+ pub fn SetSystemPowerState(
+ fSuspend: BOOL,
+ fForce: BOOL,
+ ) -> BOOL;
+ pub fn MapUserPhysicalPagesScatter(
+ VirtualAddresses: *mut PVOID,
+ NumberOfPages: ULONG_PTR,
+ PageArray: PULONG_PTR,
+ ) -> BOOL;
+ pub fn CreateJobObjectA(
+ lpJobAttributes: LPSECURITY_ATTRIBUTES,
+ lpName: LPCSTR,
+ ) -> HANDLE;
+ pub fn OpenJobObjectA(
+ dwDesiredAccess: DWORD,
+ bInheritHandle: BOOL,
+ lpName: LPCSTR,
+ ) -> HANDLE;
+ pub fn CreateJobSet(
+ NumJob: ULONG,
+ UserJobSet: PJOB_SET_ARRAY,
+ Flags: ULONG,
+ ) -> BOOL;
+ pub fn FindFirstVolumeA(
+ lpszVolumeName: LPSTR,
+ cchBufferLength: DWORD,
+ ) -> HANDLE;
+ pub fn FindNextVolumeA(
+ hFindVolume: HANDLE,
+ lpszVolumeName: LPSTR,
+ cchBufferLength: DWORD,
+ ) -> BOOL;
+ pub fn FindFirstVolumeMountPointA(
+ lpszRootPathName: LPCSTR,
+ lpszVolumeMountPoint: LPSTR,
+ cchBufferLength: DWORD,
+ ) -> HANDLE;
+ pub fn FindFirstVolumeMountPointW(
+ lpszRootPathName: LPCWSTR,
+ lpszVolumeMountPoint: LPWSTR,
+ cchBufferLength: DWORD,
+ ) -> HANDLE;
+ pub fn FindNextVolumeMountPointA(
+ hFindVolumeMountPoint: HANDLE,
+ lpszVolumeMountPoint: LPSTR,
+ cchBufferLength: DWORD,
+ ) -> BOOL;
+ pub fn FindNextVolumeMountPointW(
+ hFindVolumeMountPoint: HANDLE,
+ lpszVolumeMountPoint: LPWSTR,
+ cchBufferLength: DWORD,
+ ) -> BOOL;
+ pub fn FindVolumeMountPointClose(
+ hFindVolumeMountPoint: HANDLE,
+ ) -> BOOL;
+ pub fn SetVolumeMountPointA(
+ lpszVolumeMountPoint: LPCSTR,
+ lpszVolumeName: LPCSTR,
+ ) -> BOOL;
+ pub fn SetVolumeMountPointW(
+ lpszVolumeMountPoint: LPCWSTR,
+ lpszVolumeName: LPCWSTR,
+ ) -> BOOL;
+ pub fn DeleteVolumeMountPointA(
+ lpszVolumeMountPoint: LPCSTR,
+ ) -> BOOL;
+ pub fn GetVolumeNameForVolumeMountPointA(
+ lpszVolumeMountPoint: LPCSTR,
+ lpszVolumeName: LPSTR,
+ cchBufferLength: DWORD,
+ ) -> BOOL;
+ pub fn GetVolumePathNameA(
+ lpszFileName: LPCSTR,
+ lpszVolumePathName: LPSTR,
+ cchBufferLength: DWORD,
+ ) -> BOOL;
+ pub fn GetVolumePathNamesForVolumeNameA(
+ lpszVolumeName: LPCSTR,
+ lpszVolumePathNames: LPCH,
+ cchBufferLength: DWORD,
+ lpcchReturnLength: PDWORD,
+ ) -> BOOL;
+}
+// ACTCTX_FLAG_*
+STRUCT!{struct ACTCTXA {
+ cbSize: ULONG,
+ dwFlags: DWORD,
+ lpSource: LPCSTR,
+ wProcessorArchitecture: USHORT,
+ wLangId: LANGID,
+ lpAssemblyDirectory: LPCSTR,
+ lpResourceName: LPCSTR,
+ lpApplicationName: LPCSTR,
+ hModule: HMODULE,
+}}
+pub type PACTCTXA = *mut ACTCTXA;
+STRUCT!{struct ACTCTXW {
+ cbSize: ULONG,
+ dwFlags: DWORD,
+ lpSource: LPCWSTR,
+ wProcessorArchitecture: USHORT,
+ wLangId: LANGID,
+ lpAssemblyDirectory: LPCWSTR,
+ lpResourceName: LPCWSTR,
+ lpApplicationName: LPCWSTR,
+ hModule: HMODULE,
+}}
+pub type PACTCTXW = *mut ACTCTXW;
+pub type PCACTCTXA = *const ACTCTXA;
+pub type PCACTCTXW = *const ACTCTXW;
+extern "system" {
+ pub fn CreateActCtxA(
+ pActCtx: PCACTCTXA,
+ ) -> HANDLE;
+ pub fn CreateActCtxW(
+ pActCtx: PCACTCTXW,
+ ) -> HANDLE;
+ pub fn AddRefActCtx(
+ hActCtx: HANDLE,
+ );
+ pub fn ReleaseActCtx(
+ hActCtx: HANDLE,
+ );
+ pub fn ZombifyActCtx(
+ hActCtx: HANDLE,
+ ) -> BOOL;
+ pub fn ActivateActCtx(
+ hActCtx: HANDLE,
+ lpCookie: *mut ULONG_PTR,
+ ) -> BOOL;
+ pub fn DeactivateActCtx(
+ dwFlags: DWORD,
+ ulCookie: ULONG_PTR,
+ ) -> BOOL;
+ pub fn GetCurrentActCtx(
+ lphActCtx: *mut HANDLE,
+ ) -> BOOL;
+}
+STRUCT!{struct ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA {
+ lpInformation: PVOID,
+ lpSectionBase: PVOID,
+ ulSectionLength: ULONG,
+ lpSectionGlobalDataBase: PVOID,
+ ulSectionGlobalDataLength: ULONG,
+}}
+pub type PACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA =
+ *mut ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
+pub type PCACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA =
+ *const ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
+STRUCT!{struct ACTCTX_SECTION_KEYED_DATA {
+ cbSize: ULONG,
+ ulDataFormatVersion: ULONG,
+ lpData: PVOID,
+ ulLength: ULONG,
+ lpSectionGlobalData: PVOID,
+ ulSectionGlobalDataLength: ULONG,
+ lpSectionBase: PVOID,
+ ulSectionTotalLength: ULONG,
+ hActCtx: HANDLE,
+ ulAssemblyRosterIndex: ULONG,
+ ulFlags: ULONG,
+ AssemblyMetadata: ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA,
+}}
+pub type PACTCTX_SECTION_KEYED_DATA = *mut ACTCTX_SECTION_KEYED_DATA;
+pub type PCACTCTX_SECTION_KEYED_DATA = *const ACTCTX_SECTION_KEYED_DATA;
+extern "system" {
+ pub fn FindActCtxSectionStringA(
+ dwFlags: DWORD,
+ lpExtensionGuid: *const GUID,
+ ulSectionId: ULONG,
+ lpStringToFind: LPCSTR,
+ ReturnedData: PACTCTX_SECTION_KEYED_DATA,
+ ) -> BOOL;
+ pub fn FindActCtxSectionStringW(
+ dwFlags: DWORD,
+ lpExtensionGuid: *const GUID,
+ ulSectionId: ULONG,
+ lpStringToFind: LPCWSTR,
+ ReturnedData: PACTCTX_SECTION_KEYED_DATA,
+ ) -> BOOL;
+ pub fn FindActCtxSectionGuid(
+ dwFlags: DWORD,
+ lpExtensionGuid: *const GUID,
+ ulSectionId: ULONG,
+ lpGuidToFind: *const GUID,
+ ReturnedData: PACTCTX_SECTION_KEYED_DATA,
+ ) -> BOOL;
+ pub fn QueryActCtxW(
+ dwFlags: DWORD,
+ hActCtx: HANDLE,
+ pvSubInstance: PVOID,
+ ulInfoClass: ULONG,
+ pvBuffer: PVOID,
+ cbBuffer: SIZE_T,
+ pcbWrittenOrRequired: *mut SIZE_T,
+ ) -> BOOL;
+ pub fn WTSGetActiveConsoleSessionId() -> DWORD;
+ // pub fn WTSGetServiceSessionId();
+ // pub fn WTSIsServerContainer();
+ pub fn GetActiveProcessorGroupCount() -> WORD;
+ pub fn GetMaximumProcessorGroupCount() -> WORD;
+ pub fn GetActiveProcessorCount(
+ GroupNumber: WORD,
+ ) -> DWORD;
+ pub fn GetMaximumProcessorCount(
+ GroupNumber: WORD,
+ ) -> DWORD;
+ pub fn GetNumaProcessorNode(
+ Processor: UCHAR,
+ NodeNumber: PUCHAR,
+ ) -> BOOL;
+ pub fn GetNumaNodeNumberFromHandle(
+ hFile: HANDLE,
+ NodeNumber: PUSHORT,
+ ) -> BOOL;
+ pub fn GetNumaProcessorNodeEx(
+ Processor: PPROCESSOR_NUMBER,
+ NodeNumber: PUSHORT,
+ ) -> BOOL;
+ pub fn GetNumaNodeProcessorMask(
+ Node: UCHAR,
+ ProcessorMask: PULONGLONG,
+ ) -> BOOL;
+ pub fn GetNumaAvailableMemoryNode(
+ Node: UCHAR,
+ AvailableBytes: PULONGLONG,
+ ) -> BOOL;
+ pub fn GetNumaAvailableMemoryNodeEx(
+ Node: USHORT,
+ AvailableBytes: PULONGLONG,
+ ) -> BOOL;
+ pub fn GetNumaProximityNode(
+ ProximityId: ULONG,
+ NodeNumber: PUCHAR,
+ ) -> BOOL;
+}
+FN!{stdcall APPLICATION_RECOVERY_CALLBACK(
+ pvParameter: PVOID,
+) -> DWORD}
+// RESTART_*
+// RECOVERY_*
+extern "system" {
+ pub fn RegisterApplicationRecoveryCallback(
+ pRecoveyCallback: APPLICATION_RECOVERY_CALLBACK,
+ pvParameter: PVOID,
+ dwPingInterval: DWORD,
+ dwFlags: DWORD,
+ ) -> HRESULT;
+ pub fn UnregisterApplicationRecoveryCallback() -> HRESULT;
+ pub fn RegisterApplicationRestart(
+ pwzCommandline: PCWSTR,
+ dwFlags: DWORD,
+ ) -> HRESULT;
+ pub fn UnregisterApplicationRestart() -> HRESULT;
+ pub fn GetApplicationRecoveryCallback(
+ hProcess: HANDLE,
+ pRecoveryCallback: *mut APPLICATION_RECOVERY_CALLBACK,
+ ppvParameter: *mut PVOID,
+ pdwPingInterval: PDWORD,
+ pdwFlags: PDWORD,
+ ) -> HRESULT;
+ pub fn GetApplicationRestartSettings(
+ hProcess: HANDLE,
+ pwzCommandline: PWSTR,
+ pcchSize: PDWORD,
+ pdwFlags: PDWORD,
+ ) -> HRESULT;
+ pub fn ApplicationRecoveryInProgress(
+ pbCancelled: PBOOL,
+ ) -> HRESULT;
+ pub fn ApplicationRecoveryFinished(
+ bSuccess: BOOL,
+ );
+}
+// FILE_BASIC_INFO, etc.
+extern "system" {
+ pub fn GetFileInformationByHandleEx(
+ hFile: HANDLE,
+ FileInformationClass: FILE_INFO_BY_HANDLE_CLASS,
+ lpFileInformation: LPVOID,
+ dwBufferSize: DWORD,
+ ) -> BOOL;
+}
+ENUM!{enum FILE_ID_TYPE {
+ FileIdType,
+ ObjectIdType,
+ ExtendedFileIdType,
+ MaximumFileIdType,
+}}
+UNION!{union FILE_ID_DESCRIPTOR_u {
+ [u64; 2],
+ FileId FileId_mut: LARGE_INTEGER,
+ ObjectId ObjectId_mut: GUID,
+ ExtendedFileId ExtendedFileId_mut: FILE_ID_128,
+}}
+STRUCT!{struct FILE_ID_DESCRIPTOR {
+ dwSize: DWORD,
+ Type: FILE_ID_TYPE,
+ u: FILE_ID_DESCRIPTOR_u,
+}}
+pub type LPFILE_ID_DESCRIPTOR = *mut FILE_ID_DESCRIPTOR;
+extern "system" {
+ pub fn OpenFileById(
+ hVolumeHint: HANDLE,
+ lpFileId: LPFILE_ID_DESCRIPTOR,
+ dwDesiredAccess: DWORD,
+ dwShareMode: DWORD,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ dwFlagsAndAttributes: DWORD,
+ ) -> HANDLE;
+ pub fn CreateSymbolicLinkA(
+ lpSymlinkFileName: LPCSTR,
+ lpTargetFileName: LPCSTR,
+ dwFlags: DWORD,
+ ) -> BOOLEAN;
+ pub fn CreateSymbolicLinkW(
+ lpSymlinkFileName: LPCWSTR,
+ lpTargetFileName: LPCWSTR,
+ dwFlags: DWORD,
+ ) -> BOOLEAN;
+ pub fn QueryActCtxSettingsW(
+ dwFlags: DWORD,
+ hActCtx: HANDLE,
+ settingsNameSpace: PCWSTR,
+ settingName: PCWSTR,
+ pvBuffer: PWSTR,
+ dwBuffer: SIZE_T,
+ pdwWrittenOrRequired: *mut SIZE_T,
+ ) -> BOOL;
+ pub fn CreateSymbolicLinkTransactedA(
+ lpSymlinkFileName: LPCSTR,
+ lpTargetFileName: LPCSTR,
+ dwFlags: DWORD,
+ hTransaction: HANDLE,
+ ) -> BOOLEAN;
+ pub fn CreateSymbolicLinkTransactedW(
+ lpSymlinkFileName: LPCWSTR,
+ lpTargetFileName: LPCWSTR,
+ dwFlags: DWORD,
+ hTransaction: HANDLE,
+ ) -> BOOLEAN;
+ pub fn ReplacePartitionUnit(
+ TargetPartition: PWSTR,
+ SparePartition: PWSTR,
+ Flags: ULONG,
+ ) -> BOOL;
+ pub fn AddSecureMemoryCacheCallback(
+ pfnCallBack: PSECURE_MEMORY_CACHE_CALLBACK,
+ ) -> BOOL;
+ pub fn RemoveSecureMemoryCacheCallback(
+ pfnCallBack: PSECURE_MEMORY_CACHE_CALLBACK,
+ ) -> BOOL;
+ pub fn CopyContext(
+ Destination: PCONTEXT,
+ ContextFlags: DWORD,
+ Source: PCONTEXT,
+ ) -> BOOL;
+ pub fn InitializeContext(
+ Buffer: PVOID,
+ ContextFlags: DWORD,
+ Context: *mut PCONTEXT,
+ ContextLength: PDWORD,
+ ) -> BOOL;
+ pub fn GetEnabledXStateFeatures() -> DWORD64;
+ pub fn GetXStateFeaturesMask(
+ Context: PCONTEXT,
+ FeatureMask: PDWORD64,
+ ) -> BOOL;
+ #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
+ pub fn LocateXStateFeature(
+ Context: PCONTEXT,
+ FeatureId: DWORD,
+ Length: PDWORD,
+ ) -> PVOID;
+ #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
+ pub fn SetXStateFeaturesMask(
+ Context: PCONTEXT,
+ FeatureMask: DWORD64,
+ ) -> BOOL;
+ pub fn EnableThreadProfiling(
+ ThreadHandle: HANDLE,
+ Flags: DWORD,
+ HardwareCounters: DWORD64,
+ PerformanceDataHandle: *mut HANDLE,
+ ) -> BOOL;
+ pub fn DisableThreadProfiling(
+ PerformanceDataHandle: HANDLE,
+ ) -> DWORD;
+ pub fn QueryThreadProfiling(
+ ThreadHandle: HANDLE,
+ Enabled: PBOOLEAN,
+ ) -> DWORD;
+ pub fn ReadThreadProfilingData(
+ PerformanceDataHandle: HANDLE,
+ Flags: DWORD,
+ PerformanceData: PPERFORMANCE_DATA,
+ ) -> DWORD;
+ // intrinsic InterlockedIncrement
+ // intrinsic InterlockedDecrement
+ // intrinsic InterlockedExchange
+ // intrinsic InterlockedExchangeAdd
+ // intrinsic InterlockedExchangeSubtract
+ // intrinsic InterlockedCompareExchange
+ // intrinsic InterlockedAnd
+ // intrinsic InterlockedOr
+ // intrinsic InterlockedXor
+}
diff --git a/vendor/winapi/src/um/wincodec.rs b/vendor/winapi/src/um/wincodec.rs
new file mode 100644
index 000000000..dbe8a4456
--- /dev/null
+++ b/vendor/winapi/src/um/wincodec.rs
@@ -0,0 +1,1861 @@
+// 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 wincodec.h
+use ctypes::c_double;
+use shared::basetsd::{UINT32, ULONG_PTR};
+use shared::dxgiformat::DXGI_FORMAT;
+use shared::dxgitype::{
+ DXGI_JPEG_AC_HUFFMAN_TABLE, DXGI_JPEG_DC_HUFFMAN_TABLE,
+ DXGI_JPEG_QUANTIZATION_TABLE
+};
+use shared::guiddef::{CLSID, GUID, REFCLSID, REFGUID};
+use shared::minwindef::{BOOL, BYTE, DWORD, FLOAT, INT, LPVOID, UINT, ULONG};
+use shared::ntdef::{LPCWSTR, LPWSTR, PCWSTR, WCHAR};
+use shared::windef::{HBITMAP, HICON, HPALETTE};
+use shared::winerror::{
+ E_ABORT, E_ACCESSDENIED, E_FAIL, E_INVALIDARG, E_NOTIMPL, E_OUTOFMEMORY, HRESULT,
+ SEVERITY_ERROR
+};
+use um::d2d1::ID2D1Image;
+use um::d2d1_1::ID2D1Device;
+use um::dcommon::D2D1_PIXEL_FORMAT;
+use um::objidlbase::{IEnumString, IEnumUnknown, IStream, IStreamVtbl};
+use um::ocidl::IPropertyBag2;
+use um::propidl::PROPVARIANT;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::winnt::{HANDLE, ULARGE_INTEGER};
+DEFINE_GUID!{CLSID_WICImagingFactory,
+ 0xcacaf262, 0x9370, 0x4615, 0xa1, 0x3b, 0x9f, 0x55, 0x39, 0xda, 0x4c, 0xa}
+DEFINE_GUID!{CLSID_WICImagingFactory1,
+ 0xcacaf262, 0x9370, 0x4615, 0xa1, 0x3b, 0x9f, 0x55, 0x39, 0xda, 0x4c, 0xa}
+DEFINE_GUID!{CLSID_WICImagingFactory2,
+ 0x317d06e8, 0x5f24, 0x433d, 0xbd, 0xf7, 0x79, 0xce, 0x68, 0xd8, 0xab, 0xc2}
+DEFINE_GUID!{GUID_VendorMicrosoft,
+ 0xf0e749ca, 0xedef, 0x4589, 0xa7, 0x3a, 0xee, 0xe, 0x62, 0x6a, 0x2a, 0x2b}
+DEFINE_GUID!{GUID_VendorMicrosoftBuiltIn,
+ 0x257a30fd, 0x6b6, 0x462b, 0xae, 0xa4, 0x63, 0xf7, 0xb, 0x86, 0xe5, 0x33}
+DEFINE_GUID!{CLSID_WICPngDecoder,
+ 0x389ea17b, 0x5078, 0x4cde, 0xb6, 0xef, 0x25, 0xc1, 0x51, 0x75, 0xc7, 0x51}
+DEFINE_GUID!{CLSID_WICPngDecoder1,
+ 0x389ea17b, 0x5078, 0x4cde, 0xb6, 0xef, 0x25, 0xc1, 0x51, 0x75, 0xc7, 0x51}
+DEFINE_GUID!{CLSID_WICPngDecoder2,
+ 0xe018945b, 0xaa86, 0x4008, 0x9b, 0xd4, 0x67, 0x77, 0xa1, 0xe4, 0x0c, 0x11}
+DEFINE_GUID!{CLSID_WICBmpDecoder,
+ 0x6b462062, 0x7cbf, 0x400d, 0x9f, 0xdb, 0x81, 0x3d, 0xd1, 0x0f, 0x27, 0x78}
+DEFINE_GUID!{CLSID_WICIcoDecoder,
+ 0xc61bfcdf, 0x2e0f, 0x4aad, 0xa8, 0xd7, 0xe0, 0x6b, 0xaf, 0xeb, 0xcd, 0xfe}
+DEFINE_GUID!{CLSID_WICJpegDecoder,
+ 0x9456a480, 0xe88b, 0x43ea, 0x9e, 0x73, 0x0b, 0x2d, 0x9b, 0x71, 0xb1, 0xca}
+DEFINE_GUID!{CLSID_WICGifDecoder,
+ 0x381dda3c, 0x9ce9, 0x4834, 0xa2, 0x3e, 0x1f, 0x98, 0xf8, 0xfc, 0x52, 0xbe}
+DEFINE_GUID!{CLSID_WICTiffDecoder,
+ 0xb54e85d9, 0xfe23, 0x499f, 0x8b, 0x88, 0x6a, 0xce, 0xa7, 0x13, 0x75, 0x2b}
+DEFINE_GUID!{CLSID_WICWmpDecoder,
+ 0xa26cec36, 0x234c, 0x4950, 0xae, 0x16, 0xe3, 0x4a, 0xac, 0xe7, 0x1d, 0x0d}
+DEFINE_GUID!{CLSID_WICDdsDecoder,
+ 0x9053699f, 0xa341, 0x429d, 0x9e, 0x90, 0xee, 0x43, 0x7c, 0xf8, 0x0c, 0x73}
+DEFINE_GUID!{CLSID_WICBmpEncoder,
+ 0x69be8bb4, 0xd66d, 0x47c8, 0x86, 0x5a, 0xed, 0x15, 0x89, 0x43, 0x37, 0x82}
+DEFINE_GUID!{CLSID_WICPngEncoder,
+ 0x27949969, 0x876a, 0x41d7, 0x94, 0x47, 0x56, 0x8f, 0x6a, 0x35, 0xa4, 0xdc}
+DEFINE_GUID!{CLSID_WICJpegEncoder,
+ 0x1a34f5c1, 0x4a5a, 0x46dc, 0xb6, 0x44, 0x1f, 0x45, 0x67, 0xe7, 0xa6, 0x76}
+DEFINE_GUID!{CLSID_WICGifEncoder,
+ 0x114f5598, 0x0b22, 0x40a0, 0x86, 0xa1, 0xc8, 0x3e, 0xa4, 0x95, 0xad, 0xbd}
+DEFINE_GUID!{CLSID_WICTiffEncoder,
+ 0x0131be10, 0x2001, 0x4c5f, 0xa9, 0xb0, 0xcc, 0x88, 0xfa, 0xb6, 0x4c, 0xe8}
+DEFINE_GUID!{CLSID_WICWmpEncoder,
+ 0xac4ce3cb, 0xe1c1, 0x44cd, 0x82, 0x15, 0x5a, 0x16, 0x65, 0x50, 0x9e, 0xc2}
+DEFINE_GUID!{CLSID_WICDdsEncoder,
+ 0xa61dde94, 0x66ce, 0x4ac1, 0x88, 0x1b, 0x71, 0x68, 0x05, 0x88, 0x89, 0x5e}
+DEFINE_GUID!{CLSID_WICAdngDecoder,
+ 0x981d9411, 0x909e, 0x42a7, 0x8f, 0x5d, 0xa7, 0x47, 0xff, 0x05, 0x2e, 0xdb}
+DEFINE_GUID!{CLSID_WICJpegQualcommPhoneEncoder,
+ 0x68ed5c62, 0xf534, 0x4979, 0xb2, 0xb3, 0x68, 0x6a, 0x12, 0xb2, 0xb3, 0x4c}
+DEFINE_GUID!{GUID_ContainerFormatBmp,
+ 0x0af1d87e, 0xfcfe, 0x4188, 0xbd, 0xeb, 0xa7, 0x90, 0x64, 0x71, 0xcb, 0xe3}
+DEFINE_GUID!{GUID_ContainerFormatPng,
+ 0x1b7cfaf4, 0x713f, 0x473c, 0xbb, 0xcd, 0x61, 0x37, 0x42, 0x5f, 0xae, 0xaf}
+DEFINE_GUID!{GUID_ContainerFormatIco,
+ 0xa3a860c4, 0x338f, 0x4c17, 0x91, 0x9a, 0xfb, 0xa4, 0xb5, 0x62, 0x8f, 0x21}
+DEFINE_GUID!{GUID_ContainerFormatJpeg,
+ 0x19e4a5aa, 0x5662, 0x4fc5, 0xa0, 0xc0, 0x17, 0x58, 0x02, 0x8e, 0x10, 0x57}
+DEFINE_GUID!{GUID_ContainerFormatTiff,
+ 0x163bcc30, 0xe2e9, 0x4f0b, 0x96, 0x1d, 0xa3, 0xe9, 0xfd, 0xb7, 0x88, 0xa3}
+DEFINE_GUID!{GUID_ContainerFormatGif,
+ 0x1f8a5601, 0x7d4d, 0x4cbd, 0x9c, 0x82, 0x1b, 0xc8, 0xd4, 0xee, 0xb9, 0xa5}
+DEFINE_GUID!{GUID_ContainerFormatWmp,
+ 0x57a37caa, 0x367a, 0x4540, 0x91, 0x6b, 0xf1, 0x83, 0xc5, 0x09, 0x3a, 0x4b}
+DEFINE_GUID!{GUID_ContainerFormatDds,
+ 0x9967cb95, 0x2e85, 0x4ac8, 0x8c, 0xa2, 0x83, 0xd7, 0xcc, 0xd4, 0x25, 0xc9}
+DEFINE_GUID!{GUID_ContainerFormatAdng,
+ 0xf3ff6d0d, 0x38c0, 0x41c4, 0xb1, 0xfe, 0x1f, 0x38, 0x24, 0xf1, 0x7b, 0x84}
+DEFINE_GUID!{CLSID_WICImagingCategories,
+ 0xfae3d380, 0xfea4, 0x4623, 0x8c, 0x75, 0xc6, 0xb6, 0x11, 0x10, 0xb6, 0x81}
+DEFINE_GUID!{CATID_WICBitmapDecoders,
+ 0x7ed96837, 0x96f0, 0x4812, 0xb2, 0x11, 0xf1, 0x3c, 0x24, 0x11, 0x7e, 0xd3}
+DEFINE_GUID!{CATID_WICBitmapEncoders,
+ 0xac757296, 0x3522, 0x4e11, 0x98, 0x62, 0xc1, 0x7b, 0xe5, 0xa1, 0x76, 0x7e}
+DEFINE_GUID!{CATID_WICPixelFormats,
+ 0x2b46e70f, 0xcda7, 0x473e, 0x89, 0xf6, 0xdc, 0x96, 0x30, 0xa2, 0x39, 0x0b}
+DEFINE_GUID!{CATID_WICFormatConverters,
+ 0x7835eae8, 0xbf14, 0x49d1, 0x93, 0xce, 0x53, 0x3a, 0x40, 0x7b, 0x22, 0x48}
+DEFINE_GUID!{CATID_WICMetadataReader,
+ 0x05af94d8, 0x7174, 0x4cd2, 0xbe, 0x4a, 0x41, 0x24, 0xb8, 0x0e, 0xe4, 0xb8}
+DEFINE_GUID!{CATID_WICMetadataWriter,
+ 0xabe3b9a4, 0x257d, 0x4b97, 0xbd, 0x1a, 0x29, 0x4a, 0xf4, 0x96, 0x22, 0x2e}
+DEFINE_GUID!{CLSID_WICDefaultFormatConverter,
+ 0x1a3f11dc, 0xb514, 0x4b17, 0x8c, 0x5f, 0x21, 0x54, 0x51, 0x38, 0x52, 0xf1}
+DEFINE_GUID!{CLSID_WICFormatConverterHighColor,
+ 0xac75d454, 0x9f37, 0x48f8, 0xb9, 0x72, 0x4e, 0x19, 0xbc, 0x85, 0x60, 0x11}
+DEFINE_GUID!{CLSID_WICFormatConverterNChannel,
+ 0xc17cabb2, 0xd4a3, 0x47d7, 0xa5, 0x57, 0x33, 0x9b, 0x2e, 0xfb, 0xd4, 0xf1}
+DEFINE_GUID!{CLSID_WICFormatConverterWMPhoto,
+ 0x9cb5172b, 0xd600, 0x46ba, 0xab, 0x77, 0x77, 0xbb, 0x7e, 0x3a, 0x00, 0xd9}
+DEFINE_GUID!{CLSID_WICPlanarFormatConverter,
+ 0x184132b8, 0x32f8, 0x4784, 0x91, 0x31, 0xdd, 0x72, 0x24, 0xb2, 0x34, 0x38}
+pub type WICColor = UINT32;
+STRUCT!{struct WICRect {
+ X: INT,
+ Y: INT,
+ Width: INT,
+ Height: INT,
+}}
+pub type WICInProcPointer = *mut BYTE;
+ENUM!{enum WICColorContextType {
+ WICColorContextUninitialized = 0x00000000,
+ WICColorContextProfile = 0x00000001,
+ WICColorContextExifColorSpace = 0x00000002,
+}}
+pub const CODEC_FORCE_DWORD: DWORD = 0x7FFFFFFF;
+pub const WIC_JPEG_MAX_COMPONENT_COUNT: UINT = 4;
+pub const WIC_JPEG_MAX_TABLE_INDEX: UINT = 3;
+pub const WIC_JPEG_SAMPLE_FACTORS_ONE: DWORD = 0x00000011;
+pub const WIC_JPEG_SAMPLE_FACTORS_THREE_420: DWORD = 0x00111122;
+pub const WIC_JPEG_SAMPLE_FACTORS_THREE_422: DWORD = 0x00111121;
+pub const WIC_JPEG_SAMPLE_FACTORS_THREE_440: DWORD = 0x00111112;
+pub const WIC_JPEG_SAMPLE_FACTORS_THREE_444: DWORD = 0x00111111;
+pub const WIC_JPEG_QUANTIZATION_BASELINE_ONE: DWORD = 0x00000000;
+pub const WIC_JPEG_QUANTIZATION_BASELINE_THREE: DWORD = 0x00010100;
+pub const WIC_JPEG_HUFFMAN_BASELINE_ONE: DWORD = 0x00000000;
+pub const WIC_JPEG_HUFFMAN_BASELINE_THREE: DWORD = 0x00111100;
+pub type REFWICPixelFormatGUID = REFGUID;
+pub type WICPixelFormatGUID = GUID;
+DEFINE_GUID!{GUID_WICPixelFormatDontCare,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x00}
+DEFINE_GUID!{GUID_WICPixelFormat1bppIndexed,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x01}
+DEFINE_GUID!{GUID_WICPixelFormat2bppIndexed,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x02}
+DEFINE_GUID!{GUID_WICPixelFormat4bppIndexed,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x03}
+DEFINE_GUID!{GUID_WICPixelFormat8bppIndexed,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x04}
+DEFINE_GUID!{GUID_WICPixelFormatBlackWhite,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x05}
+DEFINE_GUID!{GUID_WICPixelFormat2bppGray,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x06}
+DEFINE_GUID!{GUID_WICPixelFormat4bppGray,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x07}
+DEFINE_GUID!{GUID_WICPixelFormat8bppGray,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x08}
+DEFINE_GUID!{GUID_WICPixelFormat8bppAlpha,
+ 0xe6cd0116, 0xeeba, 0x4161, 0xaa, 0x85, 0x27, 0xdd, 0x9f, 0xb3, 0xa8, 0x95}
+DEFINE_GUID!{GUID_WICPixelFormat16bppBGR555,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x09}
+DEFINE_GUID!{GUID_WICPixelFormat16bppBGR565,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0a}
+DEFINE_GUID!{GUID_WICPixelFormat16bppBGRA5551,
+ 0x05ec7c2b, 0xf1e6, 0x4961, 0xad, 0x46, 0xe1, 0xcc, 0x81, 0x0a, 0x87, 0xd2}
+DEFINE_GUID!{GUID_WICPixelFormat16bppGray,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0b}
+DEFINE_GUID!{GUID_WICPixelFormat24bppBGR,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0c}
+DEFINE_GUID!{GUID_WICPixelFormat24bppRGB,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0d}
+DEFINE_GUID!{GUID_WICPixelFormat32bppBGR,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0e}
+DEFINE_GUID!{GUID_WICPixelFormat32bppBGRA,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0f}
+DEFINE_GUID!{GUID_WICPixelFormat32bppPBGRA,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x10}
+DEFINE_GUID!{GUID_WICPixelFormat32bppGrayFloat,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x11}
+DEFINE_GUID!{GUID_WICPixelFormat32bppRGB,
+ 0xd98c6b95, 0x3efe, 0x47d6, 0xbb, 0x25, 0xeb, 0x17, 0x48, 0xab, 0x0c, 0xf1}
+DEFINE_GUID!{GUID_WICPixelFormat32bppRGBA,
+ 0xf5c7ad2d, 0x6a8d, 0x43dd, 0xa7, 0xa8, 0xa2, 0x99, 0x35, 0x26, 0x1a, 0xe9}
+DEFINE_GUID!{GUID_WICPixelFormat32bppPRGBA,
+ 0x3cc4a650, 0xa527, 0x4d37, 0xa9, 0x16, 0x31, 0x42, 0xc7, 0xeb, 0xed, 0xba}
+DEFINE_GUID!{GUID_WICPixelFormat48bppRGB,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x15}
+DEFINE_GUID!{GUID_WICPixelFormat48bppBGR,
+ 0xe605a384, 0xb468, 0x46ce, 0xbb, 0x2e, 0x36, 0xf1, 0x80, 0xe6, 0x43, 0x13}
+DEFINE_GUID!{GUID_WICPixelFormat64bppRGB,
+ 0xa1182111, 0x186d, 0x4d42, 0xbc, 0x6a, 0x9c, 0x83, 0x03, 0xa8, 0xdf, 0xf9}
+DEFINE_GUID!{GUID_WICPixelFormat64bppRGBA,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x16}
+DEFINE_GUID!{GUID_WICPixelFormat64bppBGRA,
+ 0x1562ff7c, 0xd352, 0x46f9, 0x97, 0x9e, 0x42, 0x97, 0x6b, 0x79, 0x22, 0x46}
+DEFINE_GUID!{GUID_WICPixelFormat64bppPRGBA,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x17}
+DEFINE_GUID!{GUID_WICPixelFormat64bppPBGRA,
+ 0x8c518e8e, 0xa4ec, 0x468b, 0xae, 0x70, 0xc9, 0xa3, 0x5a, 0x9c, 0x55, 0x30}
+DEFINE_GUID!{GUID_WICPixelFormat16bppGrayFixedPoint,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x13}
+DEFINE_GUID!{GUID_WICPixelFormat32bppBGR101010,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x14}
+DEFINE_GUID!{GUID_WICPixelFormat48bppRGBFixedPoint,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x12}
+DEFINE_GUID!{GUID_WICPixelFormat48bppBGRFixedPoint,
+ 0x49ca140e, 0xcab6, 0x493b, 0x9d, 0xdf, 0x60, 0x18, 0x7c, 0x37, 0x53, 0x2a}
+DEFINE_GUID!{GUID_WICPixelFormat96bppRGBFixedPoint,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x18}
+DEFINE_GUID!{GUID_WICPixelFormat96bppRGBFloat,
+ 0xe3fed78f, 0xe8db, 0x4acf, 0x84, 0xc1, 0xe9, 0x7f, 0x61, 0x36, 0xb3, 0x27}
+DEFINE_GUID!{GUID_WICPixelFormat128bppRGBAFloat,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x19}
+DEFINE_GUID!{GUID_WICPixelFormat128bppPRGBAFloat,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1a}
+DEFINE_GUID!{GUID_WICPixelFormat128bppRGBFloat,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1b}
+DEFINE_GUID!{GUID_WICPixelFormat32bppCMYK,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1c}
+DEFINE_GUID!{GUID_WICPixelFormat64bppRGBAFixedPoint,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1d}
+DEFINE_GUID!{GUID_WICPixelFormat64bppBGRAFixedPoint,
+ 0x356de33c, 0x54d2, 0x4a23, 0xbb, 0x4, 0x9b, 0x7b, 0xf9, 0xb1, 0xd4, 0x2d}
+DEFINE_GUID!{GUID_WICPixelFormat64bppRGBFixedPoint,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x40}
+DEFINE_GUID!{GUID_WICPixelFormat128bppRGBAFixedPoint,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1e}
+DEFINE_GUID!{GUID_WICPixelFormat128bppRGBFixedPoint,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x41}
+DEFINE_GUID!{GUID_WICPixelFormat64bppRGBAHalf,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3a}
+DEFINE_GUID!{GUID_WICPixelFormat64bppPRGBAHalf,
+ 0x58ad26c2, 0xc623, 0x4d9d, 0xb3, 0x20, 0x38, 0x7e, 0x49, 0xf8, 0xc4, 0x42}
+DEFINE_GUID!{GUID_WICPixelFormat64bppRGBHalf,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x42}
+DEFINE_GUID!{GUID_WICPixelFormat48bppRGBHalf,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3b}
+DEFINE_GUID!{GUID_WICPixelFormat32bppRGBE,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3d}
+DEFINE_GUID!{GUID_WICPixelFormat16bppGrayHalf,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3e}
+DEFINE_GUID!{GUID_WICPixelFormat32bppGrayFixedPoint,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x3f}
+DEFINE_GUID!{GUID_WICPixelFormat32bppRGBA1010102,
+ 0x25238D72, 0xFCF9, 0x4522, 0xb5, 0x14, 0x55, 0x78, 0xe5, 0xad, 0x55, 0xe0}
+DEFINE_GUID!{GUID_WICPixelFormat32bppRGBA1010102XR,
+ 0x00DE6B9A, 0xC101, 0x434b, 0xb5, 0x02, 0xd0, 0x16, 0x5e, 0xe1, 0x12, 0x2c}
+DEFINE_GUID!{GUID_WICPixelFormat64bppCMYK,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x1f}
+DEFINE_GUID!{GUID_WICPixelFormat24bpp3Channels,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x20}
+DEFINE_GUID!{GUID_WICPixelFormat32bpp4Channels,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x21}
+DEFINE_GUID!{GUID_WICPixelFormat40bpp5Channels,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x22}
+DEFINE_GUID!{GUID_WICPixelFormat48bpp6Channels,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x23}
+DEFINE_GUID!{GUID_WICPixelFormat56bpp7Channels,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x24}
+DEFINE_GUID!{GUID_WICPixelFormat64bpp8Channels,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x25}
+DEFINE_GUID!{GUID_WICPixelFormat48bpp3Channels,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x26}
+DEFINE_GUID!{GUID_WICPixelFormat64bpp4Channels,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x27}
+DEFINE_GUID!{GUID_WICPixelFormat80bpp5Channels,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x28}
+DEFINE_GUID!{GUID_WICPixelFormat96bpp6Channels,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x29}
+DEFINE_GUID!{GUID_WICPixelFormat112bpp7Channels,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2a}
+DEFINE_GUID!{GUID_WICPixelFormat128bpp8Channels,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2b}
+DEFINE_GUID!{GUID_WICPixelFormat40bppCMYKAlpha,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2c}
+DEFINE_GUID!{GUID_WICPixelFormat80bppCMYKAlpha,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2d}
+DEFINE_GUID!{GUID_WICPixelFormat32bpp3ChannelsAlpha,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2e}
+DEFINE_GUID!{GUID_WICPixelFormat40bpp4ChannelsAlpha,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x2f}
+DEFINE_GUID!{GUID_WICPixelFormat48bpp5ChannelsAlpha,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x30}
+DEFINE_GUID!{GUID_WICPixelFormat56bpp6ChannelsAlpha,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x31}
+DEFINE_GUID!{GUID_WICPixelFormat64bpp7ChannelsAlpha,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x32}
+DEFINE_GUID!{GUID_WICPixelFormat72bpp8ChannelsAlpha,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x33}
+DEFINE_GUID!{GUID_WICPixelFormat64bpp3ChannelsAlpha,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x34}
+DEFINE_GUID!{GUID_WICPixelFormat80bpp4ChannelsAlpha,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x35}
+DEFINE_GUID!{GUID_WICPixelFormat96bpp5ChannelsAlpha,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x36}
+DEFINE_GUID!{GUID_WICPixelFormat112bpp6ChannelsAlpha,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x37}
+DEFINE_GUID!{GUID_WICPixelFormat128bpp7ChannelsAlpha,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x38}
+DEFINE_GUID!{GUID_WICPixelFormat144bpp8ChannelsAlpha,
+ 0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x39}
+DEFINE_GUID!{GUID_WICPixelFormat8bppY,
+ 0x91B4DB54, 0x2DF9, 0x42F0, 0xB4, 0x49, 0x29, 0x09, 0xBB, 0x3D, 0xF8, 0x8E}
+DEFINE_GUID!{GUID_WICPixelFormat8bppCb,
+ 0x1339F224, 0x6BFE, 0x4C3E, 0x93, 0x02, 0xE4, 0xF3, 0xA6, 0xD0, 0xCA, 0x2A}
+DEFINE_GUID!{GUID_WICPixelFormat8bppCr,
+ 0xB8145053, 0x2116, 0x49F0, 0x88, 0x35, 0xED, 0x84, 0x4B, 0x20, 0x5C, 0x51}
+DEFINE_GUID!{GUID_WICPixelFormat16bppCbCr,
+ 0xFF95BA6E, 0x11E0, 0x4263, 0xBB, 0x45, 0x01, 0x72, 0x1F, 0x34, 0x60, 0xA4}
+DEFINE_GUID!{GUID_WICPixelFormat16bppYQuantizedDctCoefficients,
+ 0xA355F433, 0x48E8, 0x4A42, 0x84, 0xD8, 0xE2, 0xAA, 0x26, 0xCA, 0x80, 0xA4}
+DEFINE_GUID!{GUID_WICPixelFormat16bppCbQuantizedDctCoefficients,
+ 0xD2C4FF61, 0x56A5, 0x49C2, 0x8B, 0x5C, 0x4C, 0x19, 0x25, 0x96, 0x48, 0x37}
+DEFINE_GUID!{GUID_WICPixelFormat16bppCrQuantizedDctCoefficients,
+ 0x2FE354F0, 0x1680, 0x42D8, 0x92, 0x31, 0xE7, 0x3C, 0x05, 0x65, 0xBF, 0xC1}
+ENUM!{enum WICBitmapCreateCacheOption {
+ WICBitmapNoCache = 0x00000000,
+ WICBitmapCacheOnDemand = 0x00000001,
+ WICBitmapCacheOnLoad = 0x00000002,
+ WICBITMAPCREATECACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICDecodeOptions {
+ WICDecodeMetadataCacheOnDemand = 0x00000000,
+ WICDecodeMetadataCacheOnLoad = 0x00000001,
+ WICMETADATACACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICBitmapEncoderCacheOption {
+ WICBitmapEncoderCacheInMemory = 0x00000000,
+ WICBitmapEncoderCacheTempFile = 0x00000001,
+ WICBitmapEncoderNoCache = 0x00000002,
+ WICBITMAPENCODERCACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICComponentType {
+ WICDecoder = 0x00000001,
+ WICEncoder = 0x00000002,
+ WICPixelFormatConverter = 0x00000004,
+ WICMetadataReader = 0x00000008,
+ WICMetadataWriter = 0x00000010,
+ WICPixelFormat = 0x00000020,
+ WICAllComponents = 0x0000003F,
+ WICCOMPONENTTYPE_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICComponentEnumerateOptions {
+ WICComponentEnumerateDefault = 0x00000000,
+ WICComponentEnumerateRefresh = 0x00000001,
+ WICComponentEnumerateDisabled = 0x80000000,
+ WICComponentEnumerateUnsigned = 0x40000000,
+ WICComponentEnumerateBuiltInOnly = 0x20000000,
+ WICCOMPONENTENUMERATEOPTIONS_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+STRUCT!{struct WICBitmapPattern {
+ Position: ULARGE_INTEGER,
+ Length: ULONG,
+ Pattern: *mut BYTE,
+ Mask: *mut BYTE,
+ EndOfStream: BOOL,
+}}
+ENUM!{enum WICBitmapInterpolationMode {
+ WICBitmapInterpolationModeNearestNeighbor = 0x00000000,
+ WICBitmapInterpolationModeLinear = 0x00000001,
+ WICBitmapInterpolationModeCubic = 0x00000002,
+ WICBitmapInterpolationModeFant = 0x00000003,
+ WICBitmapInterpolationModeHighQualityCubic = 0x00000004,
+ WICBITMAPINTERPOLATIONMODE_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICBitmapPaletteType {
+ WICBitmapPaletteTypeCustom = 0x00000000,
+ WICBitmapPaletteTypeMedianCut = 0x00000001,
+ WICBitmapPaletteTypeFixedBW = 0x00000002,
+ WICBitmapPaletteTypeFixedHalftone8 = 0x00000003,
+ WICBitmapPaletteTypeFixedHalftone27 = 0x00000004,
+ WICBitmapPaletteTypeFixedHalftone64 = 0x00000005,
+ WICBitmapPaletteTypeFixedHalftone125 = 0x00000006,
+ WICBitmapPaletteTypeFixedHalftone216 = 0x00000007,
+ WICBitmapPaletteTypeFixedWebPalette = WICBitmapPaletteTypeFixedHalftone216,
+ WICBitmapPaletteTypeFixedHalftone252 = 0x00000008,
+ WICBitmapPaletteTypeFixedHalftone256 = 0x00000009,
+ WICBitmapPaletteTypeFixedGray4 = 0x0000000A,
+ WICBitmapPaletteTypeFixedGray16 = 0x0000000B,
+ WICBitmapPaletteTypeFixedGray256 = 0x0000000C,
+ WICBITMAPPALETTETYPE_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICBitmapDitherType {
+ WICBitmapDitherTypeNone = 0x00000000,
+ WICBitmapDitherTypeSolid = 0x00000000,
+ WICBitmapDitherTypeOrdered4x4 = 0x00000001,
+ WICBitmapDitherTypeOrdered8x8 = 0x00000002,
+ WICBitmapDitherTypeOrdered16x16 = 0x00000003,
+ WICBitmapDitherTypeSpiral4x4 = 0x00000004,
+ WICBitmapDitherTypeSpiral8x8 = 0x00000005,
+ WICBitmapDitherTypeDualSpiral4x4 = 0x00000006,
+ WICBitmapDitherTypeDualSpiral8x8 = 0x00000007,
+ WICBitmapDitherTypeErrorDiffusion = 0x00000008,
+ WICBITMAPDITHERTYPE_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICBitmapAlphaChannelOption {
+ WICBitmapUseAlpha = 0x00000000,
+ WICBitmapUsePremultipliedAlpha = 0x00000001,
+ WICBitmapIgnoreAlpha = 0x00000002,
+ WICBITMAPALPHACHANNELOPTIONS_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICBitmapTransformOptions {
+ WICBitmapTransformRotate0 = 0x00000000,
+ WICBitmapTransformRotate90 = 0x00000001,
+ WICBitmapTransformRotate180 = 0x00000002,
+ WICBitmapTransformRotate270 = 0x00000003,
+ WICBitmapTransformFlipHorizontal = 0x00000008,
+ WICBitmapTransformFlipVertical = 0x00000010,
+ WICBITMAPTRANSFORMOPTIONS_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICBitmapLockFlags {
+ WICBitmapLockRead = 0x00000001,
+ WICBitmapLockWrite = 0x00000002,
+ WICBITMAPLOCKFLAGS_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICBitmapDecoderCapabilities {
+ WICBitmapDecoderCapabilitySameEncoder = 0x00000001,
+ WICBitmapDecoderCapabilityCanDecodeAllImages = 0x00000002,
+ WICBitmapDecoderCapabilityCanDecodeSomeImages = 0x00000004,
+ WICBitmapDecoderCapabilityCanEnumerateMetadata = 0x00000008,
+ WICBitmapDecoderCapabilityCanDecodeThumbnail = 0x00000010,
+ WICBITMAPDECODERCAPABILITIES_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICProgressOperation {
+ WICProgressOperationCopyPixels = 0x00000001,
+ WICProgressOperationWritePixels = 0x00000002,
+ WICProgressOperationAll = 0x0000FFFF,
+ WICPROGRESSOPERATION_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICProgressNotification {
+ WICProgressNotificationBegin = 0x00010000,
+ WICProgressNotificationEnd = 0x00020000,
+ WICProgressNotificationFrequent = 0x00040000,
+ WICProgressNotificationAll = 0xFFFF0000,
+ WICPROGRESSNOTIFICATION_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICComponentSigning {
+ WICComponentSigned = 0x00000001,
+ WICComponentUnsigned = 0x00000002,
+ WICComponentSafe = 0x00000004,
+ WICComponentDisabled = 0x80000000,
+ WICCOMPONENTSIGNING_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICGifLogicalScreenDescriptorProperties {
+ WICGifLogicalScreenSignature = 0x00000001,
+ WICGifLogicalScreenDescriptorWidth = 0x00000002,
+ WICGifLogicalScreenDescriptorHeight = 0x00000003,
+ WICGifLogicalScreenDescriptorGlobalColorTableFlag = 0x00000004,
+ WICGifLogicalScreenDescriptorColorResolution = 0x00000005,
+ WICGifLogicalScreenDescriptorSortFlag = 0x00000006,
+ WICGifLogicalScreenDescriptorGlobalColorTableSize = 0x00000007,
+ WICGifLogicalScreenDescriptorBackgroundColorIndex = 0x00000008,
+ WICGifLogicalScreenDescriptorPixelAspectRatio = 0x00000009,
+ WICGifLogicalScreenDescriptorProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICGifImageDescriptorProperties {
+ WICGifImageDescriptorLeft = 0x00000001,
+ WICGifImageDescriptorTop = 0x00000002,
+ WICGifImageDescriptorWidth = 0x00000003,
+ WICGifImageDescriptorHeight = 0x00000004,
+ WICGifImageDescriptorLocalColorTableFlag = 0x00000005,
+ WICGifImageDescriptorInterlaceFlag = 0x00000006,
+ WICGifImageDescriptorSortFlag = 0x00000007,
+ WICGifImageDescriptorLocalColorTableSize = 0x00000008,
+ WICGifImageDescriptorProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICGifGraphicControlExtensionProperties {
+ WICGifGraphicControlExtensionDisposal = 0x00000001,
+ WICGifGraphicControlExtensionUserInputFlag = 0x00000002,
+ WICGifGraphicControlExtensionTransparencyFlag = 0x00000003,
+ WICGifGraphicControlExtensionDelay = 0x00000004,
+ WICGifGraphicControlExtensionTransparentColorIndex = 0x00000005,
+ WICGifGraphicControlExtensionProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICGifApplicationExtensionProperties {
+ WICGifApplicationExtensionApplication = 0x00000001,
+ WICGifApplicationExtensionData = 0x00000002,
+ WICGifApplicationExtensionProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICGifCommentExtensionProperties {
+ WICGifCommentExtensionText = 0x00000001,
+ WICGifCommentExtensionProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICJpegCommentProperties {
+ WICJpegCommentText = 0x00000001,
+ WICJpegCommentProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICJpegLuminanceProperties {
+ WICJpegLuminanceTable = 0x00000001,
+ WICJpegLuminanceProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICJpegChrominanceProperties {
+ WICJpegChrominanceTable = 0x00000001,
+ WICJpegChrominanceProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WIC8BIMIptcProperties {
+ WIC8BIMIptcPString = 0x00000000,
+ WIC8BIMIptcEmbeddedIPTC = 0x00000001,
+ WIC8BIMIptcProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WIC8BIMResolutionInfoProperties {
+ WIC8BIMResolutionInfoPString = 0x00000001,
+ WIC8BIMResolutionInfoHResolution = 0x00000002,
+ WIC8BIMResolutionInfoHResolutionUnit = 0x00000003,
+ WIC8BIMResolutionInfoWidthUnit = 0x00000004,
+ WIC8BIMResolutionInfoVResolution = 0x00000005,
+ WIC8BIMResolutionInfoVResolutionUnit = 0x00000006,
+ WIC8BIMResolutionInfoHeightUnit = 0x00000007,
+ WIC8BIMResolutionInfoProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WIC8BIMIptcDigestProperties {
+ WIC8BIMIptcDigestPString = 0x00000001,
+ WIC8BIMIptcDigestIptcDigest = 0x00000002,
+ WIC8BIMIptcDigestProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICPngGamaProperties {
+ WICPngGamaGamma = 0x00000001,
+ WICPngGamaProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICPngBkgdProperties {
+ WICPngBkgdBackgroundColor = 0x00000001,
+ WICPngBkgdProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICPngItxtProperties {
+ WICPngItxtKeyword = 0x00000001,
+ WICPngItxtCompressionFlag = 0x00000002,
+ WICPngItxtLanguageTag = 0x00000003,
+ WICPngItxtTranslatedKeyword = 0x00000004,
+ WICPngItxtText = 0x00000005,
+ WICPngItxtProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICPngChrmProperties {
+ WICPngChrmWhitePointX = 0x00000001,
+ WICPngChrmWhitePointY = 0x00000002,
+ WICPngChrmRedX = 0x00000003,
+ WICPngChrmRedY = 0x00000004,
+ WICPngChrmGreenX = 0x00000005,
+ WICPngChrmGreenY = 0x00000006,
+ WICPngChrmBlueX = 0x00000007,
+ WICPngChrmBlueY = 0x0000008,
+ WICPngChrmProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICPngHistProperties {
+ WICPngHistFrequencies = 0x00000001,
+ WICPngHistProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICPngIccpProperties {
+ WICPngIccpProfileName = 0x00000001,
+ WICPngIccpProfileData = 0x00000002,
+ WICPngIccpProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICPngSrgbProperties {
+ WICPngSrgbRenderingIntent = 0x00000001,
+ WICPngSrgbProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICPngTimeProperties {
+ WICPngTimeYear = 0x00000001,
+ WICPngTimeMonth = 0x00000002,
+ WICPngTimeDay = 0x00000003,
+ WICPngTimeHour = 0x00000004,
+ WICPngTimeMinute = 0x00000005,
+ WICPngTimeSecond = 0x00000006,
+ WICPngTimeProperties_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICSectionAccessLevel {
+ WICSectionAccessLevelRead = 0x00000001,
+ WICSectionAccessLevelReadWrite = 0x00000003,
+ WICSectionAccessLevel_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICPixelFormatNumericRepresentation {
+ WICPixelFormatNumericRepresentationUnspecified = 0x00000000,
+ WICPixelFormatNumericRepresentationIndexed = 0x00000001,
+ WICPixelFormatNumericRepresentationUnsignedInteger = 0x00000002,
+ WICPixelFormatNumericRepresentationSignedInteger = 0x00000003,
+ WICPixelFormatNumericRepresentationFixed = 0x00000004,
+ WICPixelFormatNumericRepresentationFloat = 0x00000005,
+ WICPixelFormatNumericRepresentation_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICPlanarOptions {
+ WICPlanarOptionsDefault = 0x00000000,
+ WICPlanarOptionsPreserveSubsampling = 0x00000001,
+ WICPLANAROPTIONS_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICJpegIndexingOptions {
+ WICJpegIndexingOptionsGenerateOnDemand = 0x00000000,
+ WICJpegIndexingOptionsGenerateOnLoad = 0x00000001,
+ WICJpegIndexingOptions_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICJpegTransferMatrix {
+ WICJpegTransferMatrixIdentity = 0x00000000,
+ WICJpegTransferMatrixBT601 = 0x00000001,
+ WICJpegTransferMatrix_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICJpegScanType {
+ WICJpegScanTypeInterleaved = 0x00000000,
+ WICJpegScanTypePlanarComponents = 0x00000001,
+ WICJpegScanTypeProgressive = 0x00000002,
+ WICJpegScanType_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+STRUCT!{struct WICImageParameters {
+ PixelFormat: D2D1_PIXEL_FORMAT,
+ DpiX: FLOAT,
+ DpiY: FLOAT,
+ Top: FLOAT,
+ Left: FLOAT,
+ PixelWidth: UINT32,
+ PixelHeight: UINT32,
+}}
+STRUCT!{struct WICBitmapPlaneDescription {
+ Format: WICPixelFormatGUID,
+ Width: UINT,
+ Height: UINT,
+}}
+STRUCT!{struct WICBitmapPlane {
+ Format: WICPixelFormatGUID,
+ pbBuffer: *mut BYTE,
+ cbStride: UINT,
+ cbBufferSize: UINT,
+}}
+STRUCT!{struct WICJpegFrameHeader {
+ Width: UINT,
+ Height: UINT,
+ TransferMatrix: WICJpegTransferMatrix,
+ ScanType: WICJpegScanType,
+ cComponents: UINT,
+ ComponentIdentifiers: DWORD,
+ SampleFactors: DWORD,
+ QuantizationTableIndices: DWORD,
+}}
+STRUCT!{struct WICJpegScanHeader {
+ cComponents: UINT,
+ RestartInterval: UINT,
+ ComponentSelectors: DWORD,
+ HuffmanTableIndices: DWORD,
+ StartSpectralSelection: BYTE,
+ EndSpectralSelection: BYTE,
+ SuccessiveApproximationHigh: BYTE,
+ SuccessiveApproximationLow: BYTE,
+}}
+RIDL!{#[uuid(0x00000040, 0xa8f2, 0x4877, 0xba, 0x0a, 0xfd, 0x2b, 0x66, 0x45, 0xfb, 0x94)]
+interface IWICPalette(IWICPaletteVtbl): IUnknown(IUnknownVtbl) {
+ fn InitializePredefined(
+ ePaletteType: WICBitmapPaletteType,
+ fAddTransparentColor: BOOL,
+ ) -> HRESULT,
+ fn InitializeCustom(
+ pColors: *const WICColor,
+ cCount: UINT,
+ ) -> HRESULT,
+ fn InitializeFromBitmap(
+ pISurface: *const IWICBitmapSource,
+ cCount: UINT,
+ fAddTransparentColor: BOOL,
+ ) -> HRESULT,
+ fn InitializeFromPalette(
+ pIPalette: *const IWICPalette,
+ ) -> HRESULT,
+ fn GetType(
+ pePaletteType: *mut WICBitmapPaletteType,
+ ) -> HRESULT,
+ fn GetColorCount(
+ pcCount: *mut UINT,
+ ) -> HRESULT,
+ fn GetColors(
+ cCount: UINT,
+ pColors: *mut WICColor,
+ pcActualColors: *mut UINT,
+ ) -> HRESULT,
+ fn IsBlackWhite(
+ pfIsBlackWhite: *mut BOOL,
+ ) -> HRESULT,
+ fn IsGrayscale(
+ pfIsGrayscale: *mut BOOL,
+ ) -> HRESULT,
+ fn HasAlpha(
+ pfHasAlpha: *mut BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000120, 0xa8f2, 0x4877, 0xba, 0x0a, 0xfd, 0x2b, 0x66, 0x45, 0xfb, 0x94)]
+interface IWICBitmapSource(IWICBitmapSourceVtbl): IUnknown(IUnknownVtbl) {
+ fn GetSize(
+ puiWidth: *mut UINT,
+ puiHeight: *mut UINT,
+ ) -> HRESULT,
+ fn GetPixelFormat(
+ pPixelFormat: *mut WICPixelFormatGUID,
+ ) -> HRESULT,
+ fn GetResolution(
+ pDpiX: *mut c_double,
+ pDpiY: *mut c_double,
+ ) -> HRESULT,
+ fn CopyPalette(
+ pIPalette: *mut IWICPalette,
+ ) -> HRESULT,
+ fn CopyPixels(
+ prc: *const WICRect,
+ cbStride: UINT,
+ cbBufferSize: UINT,
+ pbBuffer: *mut BYTE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000301, 0xa8f2, 0x4877, 0xba, 0x0a, 0xfd, 0x2b, 0x66, 0x45, 0xfb, 0x94)]
+interface IWICFormatConverter(IWICFormatConverterVtbl): IWICBitmapSource(IWICBitmapSourceVtbl) {
+ fn Initialize(
+ pISource: *const IWICBitmapSource,
+ dstFormat: REFWICPixelFormatGUID,
+ dither: WICBitmapDitherType,
+ pIPalette: *const IWICPalette,
+ alphaThresholdPercent: c_double,
+ paletteTranslate: WICBitmapPaletteType,
+ ) -> HRESULT,
+ fn CanConvert(
+ srcPixelFormat: REFWICPixelFormatGUID,
+ dstPixelFormat: REFWICPixelFormatGUID,
+ pfCanConvert: *mut BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xbebee9cb, 0x83b0, 0x4dcc, 0x81, 0x32, 0xb0, 0xaa, 0xa5, 0x5e, 0xac, 0x96)]
+interface IWICPlanarFormatConverter(IWICPlanarFormatConverterVtbl):
+ IWICBitmapSource(IWICBitmapSourceVtbl) {
+ fn Initialize(
+ ppPlanes: *const *const IWICBitmapSource,
+ cPlanes: UINT,
+ dstFormat: REFWICPixelFormatGUID,
+ dither: WICBitmapDitherType,
+ pIPalette: *const IWICPalette,
+ alphaThresholdPercent: c_double,
+ paletteTranslate: WICBitmapPaletteType,
+ ) -> HRESULT,
+ fn CanConvert(
+ pSrcPixelFormats: *const WICPixelFormatGUID,
+ cSrcPlanes: UINT,
+ dstPixelFormat: REFWICPixelFormatGUID,
+ pfCanConvert: *mut BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000302, 0xa8f2, 0x4877, 0xba, 0x0a, 0xfd, 0x2b, 0x66, 0x45, 0xfb, 0x94)]
+interface IWICBitmapScaler(IWICBitmapScalerVtbl): IWICBitmapSource(IWICBitmapSourceVtbl) {
+ fn Initialize(
+ pISource: *const IWICBitmapSource,
+ uiWidth: UINT,
+ uiHeight: UINT,
+ mode: WICBitmapInterpolationMode,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xe4fbcf03, 0x223d, 0x4e81, 0x93, 0x33, 0xd6, 0x35, 0x55, 0x6d, 0xd1, 0xb5)]
+interface IWICBitmapClipper(IWICBitmapClipperVtbl): IWICBitmapSource(IWICBitmapSourceVtbl) {
+ fn Initialize(
+ pISource: *const IWICBitmapSource,
+ prc: *const WICRect,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x5009834f, 0x2d6a, 0x41ce, 0x9e, 0x1b, 0x17, 0xc5, 0xaf, 0xf7, 0xa7, 0x82)]
+interface IWICBitmapFlipRotator(IWICBitmapFlipRotatorVtbl):
+ IWICBitmapSource(IWICBitmapSourceVtbl) {
+ fn Initialize(
+ pISource: *const IWICBitmapSource,
+ options: WICBitmapTransformOptions,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000123, 0xa8f2, 0x4877, 0xba, 0x0a, 0xfd, 0x2b, 0x66, 0x45, 0xfb, 0x94)]
+interface IWICBitmapLock(IWICBitmapLockVtbl): IUnknown(IUnknownVtbl) {
+ fn GetSize(
+ puiWidth: *mut UINT,
+ puiHeight: *mut UINT,
+ ) -> HRESULT,
+ fn GetStride(
+ pcbStride: *mut UINT,
+ ) -> HRESULT,
+ fn GetDataPointer(
+ pcbBufferSize: *mut UINT,
+ ppbData: *mut WICInProcPointer,
+ ) -> HRESULT,
+ fn GetPixelFormat(
+ pPixelFormat: *mut WICPixelFormatGUID,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000121, 0xa8f2, 0x4877, 0xba, 0x0a, 0xfd, 0x2b, 0x66, 0x45, 0xfb, 0x94)]
+interface IWICBitmap(IWICBitmapVtbl): IWICBitmapSource(IWICBitmapSourceVtbl) {
+ fn Lock(
+ prcLock: *const WICRect,
+ flags: DWORD,
+ ppILock: *mut *mut IWICBitmapLock,
+ ) -> HRESULT,
+ fn SetPalette(
+ pIPalette: *const IWICPalette,
+ ) -> HRESULT,
+ fn SetResolution(
+ dpiX: c_double,
+ dpiY: c_double,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3c613a02, 0x34b2, 0x44ea, 0x9a, 0x7c, 0x45, 0xae, 0xa9, 0xc6, 0xfd, 0x6d)]
+interface IWICColorContext(IWICColorContextVtbl): IUnknown(IUnknownVtbl) {
+ fn InitializeFromFilename(
+ wzFilename: LPCWSTR,
+ ) -> HRESULT,
+ fn InitializeFromMemory(
+ pbBuffer: *const BYTE,
+ cbBufferSize: UINT,
+ ) -> HRESULT,
+ fn InitializeFromExifColorSpace(
+ value: UINT,
+ ) -> HRESULT,
+ fn GetType(
+ pType: *mut WICColorContextType,
+ ) -> HRESULT,
+ fn GetProfileBytes(
+ cbBuffer: UINT,
+ pbBuffer: *mut BYTE,
+ pcbActual: *mut UINT,
+ ) -> HRESULT,
+ fn GetExifColorSpace(
+ pValue: *mut UINT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xb66f034f, 0xd0e2, 0x40ab, 0xb4, 0x36, 0x6d, 0xe3, 0x9e, 0x32, 0x1a, 0x94)]
+interface IWICColorTransform(IWICColorTransformVtbl): IWICBitmapSource(IWICBitmapSourceVtbl) {
+ fn Initialize(
+ pIBitmapSource: *const IWICBitmapSource,
+ pIContextSource: *const IWICColorContext,
+ pIContextDest: *const IWICColorContext,
+ pixelFmtDest: REFWICPixelFormatGUID,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xb84e2c09, 0x78c9, 0x4ac4, 0x8b, 0xd3, 0x52, 0x4a, 0xe1, 0x66, 0x3a, 0x2f)]
+interface IWICFastMetadataEncoder(IWICFastMetadataEncoderVtbl): IUnknown(IUnknownVtbl) {
+ fn Commit() -> HRESULT,
+ fn GetMetadataQueryWriter(
+ ppIMetadataQueryWriter: *mut *mut IWICMetadataQueryWriter,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x135ff860, 0x22b7, 0x4ddf, 0xb0, 0xf6, 0x21, 0x8f, 0x4f, 0x29, 0x9a, 0x43)]
+interface IWICStream(IWICStreamVtbl): IStream(IStreamVtbl) {
+ fn InitializeFromIStream(
+ pIStream: *const IStream,
+ ) -> HRESULT,
+ fn InitializeFromFilename(
+ wzFileName: LPCWSTR,
+ dwDesiredAccess: DWORD,
+ ) -> HRESULT,
+ fn InitializeFromMemory(
+ pbBuffer: WICInProcPointer,
+ cbBufferSize: DWORD,
+ ) -> HRESULT,
+ fn InitializeFromIStreamRegion(
+ pIStream: *const IStream,
+ ulOffset: ULARGE_INTEGER,
+ ulMaxSize: ULARGE_INTEGER,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xdc2bb46d, 0x3f07, 0x481e, 0x86, 0x25, 0x22, 0x0c, 0x4a, 0xed, 0xbb, 0x33)]
+interface IWICEnumMetadataItem(IWICEnumMetadataItemVtbl): IUnknown(IUnknownVtbl) {
+ fn Next(
+ celt: ULONG,
+ rgeltSchema: *mut PROPVARIANT,
+ rgeltId: *mut PROPVARIANT,
+ rgeltValue: *mut PROPVARIANT,
+ pceltFetched: *mut ULONG,
+ ) -> HRESULT,
+ fn Skip(
+ celt: ULONG,
+ ) -> HRESULT,
+ fn Reset() -> HRESULT,
+ fn Clone(
+ ppIEnumMetadataItem: *mut *mut IWICEnumMetadataItem,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x30989668, 0xe1c9, 0x4597, 0xb3, 0x95, 0x45, 0x8e, 0xed, 0xb8, 0x08, 0xdf)]
+interface IWICMetadataQueryReader(IWICMetadataQueryReaderVtbl): IUnknown(IUnknownVtbl) {
+ fn GetContainerFormat(
+ pguidContainerFormat: *mut GUID,
+ ) -> HRESULT,
+ fn GetLocation(
+ cchMaxLength: UINT,
+ wzNamespace: *mut WCHAR,
+ pcchActualLength: *mut UINT,
+ ) -> HRESULT,
+ fn GetMetadataByName(
+ wzName: LPCWSTR,
+ pvarValue: *mut PROPVARIANT,
+ ) -> HRESULT,
+ fn GetEnumerator(
+ ppIEnumString: *mut *mut IEnumString,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa721791a, 0x0def, 0x4d06, 0xbd, 0x91, 0x21, 0x18, 0xbf, 0x1d, 0xb1, 0x0b)]
+interface IWICMetadataQueryWriter(IWICMetadataQueryWriterVtbl):
+ IWICMetadataQueryReader(IWICMetadataQueryReaderVtbl) {
+ fn SetMetadataByName(
+ wzName: LPCWSTR,
+ pvarValue: *const PROPVARIANT,
+ ) -> HRESULT,
+ fn RemoveMetadataByName(
+ wzName: LPCWSTR,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000103, 0xa8f2, 0x4877, 0xba, 0x0a, 0xfd, 0x2b, 0x66, 0x45, 0xfb, 0x94)]
+interface IWICBitmapEncoder(IWICBitmapEncoderVtbl): IUnknown(IUnknownVtbl) {
+ fn Initialize(
+ pIStream: *const IStream,
+ cacheOption: WICBitmapEncoderCacheOption,
+ ) -> HRESULT,
+ fn GetContainerFormat(
+ pguidContainerFormat: *mut GUID,
+ ) -> HRESULT,
+ fn GetEncoderInfo(
+ ppIEncoderInfo: *mut *mut IWICBitmapEncoderInfo,
+ ) -> HRESULT,
+ fn SetColorContexts(
+ cCount: UINT,
+ ppIColorContext: *const *const IWICColorContext,
+ ) -> HRESULT,
+ fn SetPalette(
+ pIPalette: *const IWICPalette,
+ ) -> HRESULT,
+ fn SetThumbnail(
+ pIThumbnail: *const IWICBitmapSource,
+ ) -> HRESULT,
+ fn SetPreview(
+ pIPreview: *const IWICBitmapSource,
+ ) -> HRESULT,
+ fn CreateNewFrame(
+ ppIFrameEncode: *mut *mut IWICBitmapFrameEncode,
+ ppIEncoderOptions: *mut *mut IPropertyBag2,
+ ) -> HRESULT,
+ fn Commit() -> HRESULT,
+ fn GetMetadataQueryWriter(
+ ppIMetadataQueryWriter: *mut *mut IWICMetadataQueryWriter,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x00000105, 0xa8f2, 0x4877, 0xba, 0x0a, 0xfd, 0x2b, 0x66, 0x45, 0xfb, 0x94)]
+interface IWICBitmapFrameEncode(IWICBitmapFrameEncodeVtbl): IUnknown(IUnknownVtbl) {
+ fn Initialize(
+ pIEncoderOptions: *const IPropertyBag2,
+ ) -> HRESULT,
+ fn SetSize(
+ uiWidth: UINT,
+ uiHeight: UINT,
+ ) -> HRESULT,
+ fn SetResolution(
+ dpiX: c_double,
+ dpiY: c_double,
+ ) -> HRESULT,
+ fn SetPixelFormat(
+ pPixelFormat: *mut WICPixelFormatGUID,
+ ) -> HRESULT,
+ fn SetColorContexts(
+ cCount: UINT,
+ ppIColorContext: *const *const IWICColorContext,
+ ) -> HRESULT,
+ fn SetPalette(
+ pIPalette: *const IWICPalette,
+ ) -> HRESULT,
+ fn SetThumbnail(
+ pIThumbnail: *const IWICBitmapSource,
+ ) -> HRESULT,
+ fn WritePixels(
+ lineCount: UINT,
+ cbStride: UINT,
+ cbBufferSize: UINT,
+ pbPixels: *const BYTE,
+ ) -> HRESULT,
+ fn WriteSource(
+ pIBitmapSource: *const IWICBitmapSource,
+ prc: *const WICRect,
+ ) -> HRESULT,
+ fn Commit() -> HRESULT,
+ fn GetMetadataQueryWriter(
+ ppIMetadataQueryWriter: *mut *mut IWICMetadataQueryWriter,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xf928b7b8, 0x2221, 0x40c1, 0xb7, 0x2e, 0x7e, 0x82, 0xf1, 0x97, 0x4d, 0x1a)]
+interface IWICPlanarBitmapFrameEncode(IWICPlanarBitmapFrameEncodeVtbl): IUnknown(IUnknownVtbl) {
+ fn WritePixels(
+ lineCount: UINT,
+ pPlanes: *const WICBitmapPlane,
+ cPlanes: UINT,
+ ) -> HRESULT,
+ fn WriteSource(
+ ppPlanes: *const *const IWICBitmapSource,
+ cPlanes: UINT,
+ prcSource: *const WICRect,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x04c75bf8, 0x3ce1, 0x473b, 0xac, 0xc5, 0x3c, 0xc4, 0xf5, 0xe9, 0x49, 0x99)]
+interface IWICImageEncoder(IWICImageEncoderVtbl): IUnknown(IUnknownVtbl) {
+ fn WriteFrame(
+ pImage: *const ID2D1Image,
+ pFrameEncode: *const IWICBitmapFrameEncode,
+ pImageParameters: *const WICImageParameters,
+ ) -> HRESULT,
+ fn WriteFrameThumbnail(
+ pImage: *const ID2D1Image,
+ pFrameEncode: *const IWICBitmapFrameEncode,
+ pImageParameters: *const WICImageParameters,
+ ) -> HRESULT,
+ fn WriteThumbnail(
+ pImage: *const ID2D1Image,
+ pEncoder: *const IWICBitmapEncoder,
+ pImageParameters: *const WICImageParameters,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x9edde9e7, 0x8dee, 0x47ea, 0x99, 0xdf, 0xe6, 0xfa, 0xf2, 0xed, 0x44, 0xbf)]
+interface IWICBitmapDecoder(IWICBitmapDecoderVtbl): IUnknown(IUnknownVtbl) {
+ fn QueryCapability(
+ pIStream: *const IStream,
+ pdwCapability: *mut DWORD,
+ ) -> HRESULT,
+ fn Initialize(
+ pIStream: *const IStream,
+ cacheOptions: WICDecodeOptions,
+ ) -> HRESULT,
+ fn GetContainerFormat(
+ pguidContainerFormat: *mut GUID,
+ ) -> HRESULT,
+ fn GetDecoderInfo(
+ ppIDecoderInfo: *mut *mut IWICBitmapDecoderInfo,
+ ) -> HRESULT,
+ fn CopyPalette(
+ pIPalette: *const IWICPalette,
+ ) -> HRESULT,
+ fn GetMetadataQueryReader(
+ ppIMetadataQueryReader: *mut *mut IWICMetadataQueryReader,
+ ) -> HRESULT,
+ fn GetPreview(
+ ppIBitmapSource: *mut *mut IWICBitmapSource,
+ ) -> HRESULT,
+ fn GetColorContexts(
+ cCount: UINT,
+ ppIColorContexts: *mut *mut IWICColorContext,
+ pcActualCount: *mut UINT,
+ ) -> HRESULT,
+ fn GetThumbnail(
+ ppIThumbnail: *mut *mut IWICBitmapSource,
+ ) -> HRESULT,
+ fn GetFrameCount(
+ pCount: *mut UINT,
+ ) -> HRESULT,
+ fn GetFrame(
+ index: UINT,
+ ppIBitmapFrame: *mut *mut IWICBitmapFrameDecode,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3b16811b, 0x6a43, 0x4ec9, 0xb7, 0x13, 0x3d, 0x5a, 0x0c, 0x13, 0xb9, 0x40)]
+interface IWICBitmapSourceTransform(IWICBitmapSourceTransformVtbl): IUnknown(IUnknownVtbl) {
+ fn CopyPixels(
+ prc: *const WICRect,
+ uiWidth: UINT,
+ uiHeight: UINT,
+ pguidDstFormat: *const WICPixelFormatGUID,
+ dstTransform: WICBitmapTransformOptions,
+ nStride: UINT,
+ cbBufferSize: UINT,
+ pbBuffer: *mut BYTE,
+ ) -> HRESULT,
+ fn GetClosestSize(
+ puiWidth: *mut UINT,
+ puiHeight: *mut UINT,
+ ) -> HRESULT,
+ fn GetClosestPixelFormat(
+ pguidDstFormat: *mut WICPixelFormatGUID,
+ ) -> HRESULT,
+ fn DoesSupportTransform(
+ dstTransform: WICBitmapTransformOptions,
+ pfIsSupported: *mut BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3aff9cce, 0xbe95, 0x4303, 0xb9, 0x27, 0xe7, 0xd1, 0x6f, 0xf4, 0xa6, 0x13)]
+interface IWICPlanarBitmapSourceTransform(IWICPlanarBitmapSourceTransformVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn DoesSupportTransform(
+ puiWidth: *mut UINT,
+ puiHeight: *mut UINT,
+ dstTransform: WICBitmapTransformOptions,
+ dstPlanarOptions: WICPlanarOptions,
+ pguidDstFormats: *const WICPixelFormatGUID,
+ pPlaneDescriptions: *mut WICBitmapPlaneDescription,
+ cPlanes: UINT,
+ pfIsSupported: *mut BOOL,
+ ) -> HRESULT,
+ fn CopyPixels(
+ prcSource: *const WICRect,
+ uiWidth: UINT,
+ uiHeight: UINT,
+ dstTransform: WICBitmapTransformOptions,
+ dstPlanarOptions: WICPlanarOptions,
+ pDstPlanes: *const WICBitmapPlane,
+ cPlanes: UINT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x3b16811b, 0x6a43, 0x4ec9, 0xa8, 0x13, 0x3d, 0x93, 0x0c, 0x13, 0xb9, 0x40)]
+interface IWICBitmapFrameDecode(IWICBitmapFrameDecodeVtbl):
+ IWICBitmapSource(IWICBitmapSourceVtbl) {
+ fn GetMetadataQueryReader(
+ ppIMetadataQueryReader: *mut *mut IWICMetadataQueryReader,
+ ) -> HRESULT,
+ fn GetColorContexts(
+ cCount: UINT,
+ ppIColorContexts: *mut *mut IWICColorContext,
+ pcActualCount: *mut UINT,
+ ) -> HRESULT,
+ fn GetThumbnail(
+ ppIThumbnail: *mut *mut IWICBitmapSource,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xdaac296f, 0x7aa5, 0x4dbf, 0x8d, 0x15, 0x22, 0x5c, 0x59, 0x76, 0xf8, 0x91)]
+interface IWICProgressiveLevelControl(IWICProgressiveLevelControlVtbl): IUnknown(IUnknownVtbl) {
+ fn GetLevelCount(
+ pcLevels: *mut UINT,
+ ) -> HRESULT,
+ fn GetCurrentLevel(
+ pnLevel: *mut UINT,
+ ) -> HRESULT,
+ fn SetCurrentLevel(
+ nLevel: UINT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x4776f9cd, 0x9517, 0x45fa, 0xbf, 0x24, 0xe8, 0x9c, 0x5e, 0xc5, 0xc6, 0x0c)]
+interface IWICProgressCallback(IWICProgressCallbackVtbl): IUnknown(IUnknownVtbl) {
+ fn Notify(
+ uFrameNum: ULONG,
+ operation: WICProgressOperation,
+ dblProgress: c_double,
+ ) -> HRESULT,
+}}
+FN!{stdcall PFNProgressNotification(
+ pvData: LPVOID,
+ uFrameNum: ULONG,
+ operation: WICProgressOperation,
+ dblProgress: c_double,
+) -> HRESULT}
+RIDL!{#[uuid(0x64c1024e, 0xc3cf, 0x4462, 0x80, 0x78, 0x88, 0xc2, 0xb1, 0x1c, 0x46, 0xd9)]
+interface IWICBitmapCodecProgressNotification(IWICBitmapCodecProgressNotificationVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn RegisterProgressNotification(
+ pfnProgressNotification: PFNProgressNotification,
+ pvData: LPVOID,
+ dwProgressFlags: DWORD,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x23bc3f0a, 0x698b, 0x4357, 0x88, 0x6b, 0xf2, 0x4d, 0x50, 0x67, 0x13, 0x34)]
+interface IWICComponentInfo(IWICComponentInfoVtbl): IUnknown(IUnknownVtbl) {
+ fn GetComponentType(
+ pType: *mut WICComponentType,
+ ) -> HRESULT,
+ fn GetCLSID(
+ pclsid: *mut CLSID,
+ ) -> HRESULT,
+ fn GetSigningStatus(
+ pStatus: *mut DWORD,
+ ) -> HRESULT,
+ fn GetAuthor(
+ cchAuthor: UINT,
+ wzAuthor: *mut WCHAR,
+ pcchActual: *mut UINT,
+ ) -> HRESULT,
+ fn GetVendorGUID(
+ pguidVendor: *mut GUID,
+ ) -> HRESULT,
+ fn GetVersion(
+ cchVersion: UINT,
+ wzVersion: *mut WCHAR,
+ pcchActual: *mut UINT,
+ ) -> HRESULT,
+ fn GetSpecVersion(
+ cchSpecVersion: UINT,
+ wzSpecVersion: *mut WCHAR,
+ pcchActual: *mut UINT,
+ ) -> HRESULT,
+ fn GetFriendlyName(
+ cchFriendlyName: UINT,
+ wzFriendlyName: *mut WCHAR,
+ pcchActual: *mut UINT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x9f34fb65, 0x13f4, 0x4f15, 0xbc, 0x57, 0x37, 0x26, 0xb5, 0xe5, 0x3d, 0x9f)]
+interface IWICFormatConverterInfo(IWICFormatConverterInfoVtbl):
+ IWICComponentInfo(IWICComponentInfoVtbl) {
+ fn GetPixelFormats(
+ cFormats: UINT,
+ pPixelFormatGUIDs: *mut WICPixelFormatGUID,
+ pcActual: *mut UINT,
+ ) -> HRESULT,
+ fn CreateInstance(
+ ppIConverter: *mut *mut IWICFormatConverter,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xe87a44c4, 0xb76e, 0x4c47, 0x8b, 0x09, 0x29, 0x8e, 0xb1, 0x2a, 0x27, 0x14)]
+interface IWICBitmapCodecInfo(IWICBitmapCodecInfoVtbl): IWICComponentInfo(IWICComponentInfoVtbl) {
+ fn GetContainerFormat(
+ pguidContainerFormat: *mut GUID,
+ ) -> HRESULT,
+ fn GetPixelFormats(
+ cFormats: UINT,
+ pguidPixelFormats: *mut GUID,
+ pcActual: *mut UINT,
+ ) -> HRESULT,
+ fn GetColorManagementVersion(
+ cchColorManagementVersion: UINT,
+ wzColorManagementVersion: *mut WCHAR,
+ pcchActual: *mut UINT,
+ ) -> HRESULT,
+ fn GetDeviceManufacturer(
+ cchDeviceManufacturer: UINT,
+ wzDeviceManufacturer: *mut WCHAR,
+ pcchActual: *mut UINT,
+ ) -> HRESULT,
+ fn GetDeviceModels(
+ cchDeviceModels: UINT,
+ wzDeviceModels: *mut WCHAR,
+ pcchActual: *mut UINT,
+ ) -> HRESULT,
+ fn GetMimeTypes(
+ cchMimeTypes: UINT,
+ wzMimeTypes: *mut WCHAR,
+ pcchActual: *mut UINT,
+ ) -> HRESULT,
+ fn GetFileExtensions(
+ cchFileExtensions: UINT,
+ wzFileExtensions: *mut WCHAR,
+ pcchActual: *mut UINT,
+ ) -> HRESULT,
+ fn DoesSupportAnimation(
+ pfSupportAnimation: *mut BOOL,
+ ) -> HRESULT,
+ fn DoesSupportChromakey(
+ pfSupportChromakey: *mut BOOL,
+ ) -> HRESULT,
+ fn DoesSupportLossless(
+ pfSupportLossless: *mut BOOL,
+ ) -> HRESULT,
+ fn DoesSupportMultiframe(
+ pfSupportMultiframe: *mut BOOL,
+ ) -> HRESULT,
+ fn MatchesMimeType(
+ wzMimeType: LPCWSTR,
+ pfMatches: *mut BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x94c9b4ee, 0xa09f, 0x4f92, 0x8a, 0x1e, 0x4a, 0x9b, 0xce, 0x7e, 0x76, 0xfb)]
+interface IWICBitmapEncoderInfo(IWICBitmapEncoderInfoVtbl):
+ IWICBitmapCodecInfo(IWICBitmapCodecInfoVtbl) {
+ fn CreateInstance(
+ ppIBitmapEncoder: *mut *mut IWICBitmapEncoder,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xd8cd007f, 0xd08f, 0x4191, 0x9b, 0xfc, 0x23, 0x6e, 0xa7, 0xf0, 0xe4, 0xb5)]
+interface IWICBitmapDecoderInfo(IWICBitmapDecoderInfoVtbl):
+ IWICBitmapCodecInfo(IWICBitmapCodecInfoVtbl) {
+ fn GetPatterns(
+ cbSizePatterns: UINT,
+ pPatterns: *mut WICBitmapPattern,
+ pcPatterns: *mut UINT,
+ pcbPatternsActual: *mut UINT,
+ ) -> HRESULT,
+ fn MatchesPattern(
+ pIStream: *const IStream,
+ pfMatches: *mut BOOL,
+ ) -> HRESULT,
+ fn CreateInstance(
+ ppIBitmapDecoder: *mut *mut IWICBitmapDecoder,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xe8eda601, 0x3d48, 0x431a, 0xab, 0x44, 0x69, 0x05, 0x9b, 0xe8, 0x8b, 0xbe)]
+interface IWICPixelFormatInfo(IWICPixelFormatInfoVtbl): IWICComponentInfo(IWICComponentInfoVtbl) {
+ fn GetFormatGUID(
+ pFormat: *mut GUID,
+ ) -> HRESULT,
+ fn GetColorContext(
+ ppIColorContext: *mut *mut IWICColorContext,
+ ) -> HRESULT,
+ fn GetBitsPerPixel(
+ puiBitsPerPixel: *mut UINT,
+ ) -> HRESULT,
+ fn GetChannelCount(
+ puiChannelCount: *mut UINT,
+ ) -> HRESULT,
+ fn GetChannelMask(
+ uiChannelIndex: UINT,
+ cbMaskBuffer: UINT,
+ pbMaskBuffer: *mut BYTE,
+ pcbActual: *mut UINT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xa9db33a2, 0xaf5f, 0x43c7, 0xb6, 0x79, 0x74, 0xf5, 0x98, 0x4b, 0x5a, 0xa4)]
+interface IWICPixelFormatInfo2(IWICPixelFormatInfo2Vtbl):
+ IWICPixelFormatInfo(IWICPixelFormatInfoVtbl) {
+ fn SupportsTransparency(
+ pfSupportsTransparency: *mut BOOL,
+ ) -> HRESULT,
+ fn GetNumericRepresentation(
+ pNumericRepresentation: *mut WICPixelFormatNumericRepresentation,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xec5ec8a9, 0xc395, 0x4314, 0x9c, 0x77, 0x54, 0xd7, 0xa9, 0x35, 0xff, 0x70)]
+interface IWICImagingFactory(IWICImagingFactoryVtbl): IUnknown(IUnknownVtbl) {
+ fn CreateDecoderFromFilename(
+ wzFilename: LPCWSTR,
+ pguidVendor: *const GUID,
+ dwDesiredAccess: DWORD,
+ metadataOptions: WICDecodeOptions,
+ ppIDecoder: *mut *mut IWICBitmapDecoder,
+ ) -> HRESULT,
+ fn CreateDecoderFromStream(
+ pIStream: *const IStream,
+ pguidVendor: *const GUID,
+ metadataOptions: WICDecodeOptions,
+ ppIDecoder: *mut *mut IWICBitmapDecoder,
+ ) -> HRESULT,
+ fn CreateDecoderFromFileHandle(
+ hFile: ULONG_PTR,
+ pguidVendor: *const GUID,
+ metadataOptions: WICDecodeOptions,
+ ppIDecoder: *mut *mut IWICBitmapDecoder,
+ ) -> HRESULT,
+ fn CreateComponentInfo(
+ clsidComponent: REFCLSID,
+ ppIInfo: *mut *mut IWICComponentInfo,
+ ) -> HRESULT,
+ fn CreateDecoder(
+ guidContainerFormat: REFGUID,
+ pguidVendor: *const GUID,
+ ppIDecoder: *mut *mut IWICBitmapDecoder,
+ ) -> HRESULT,
+ fn CreateEncoder(
+ guidContainerFormat: REFGUID,
+ pguidVendor: *const GUID,
+ ppIEncoder: *mut *mut IWICBitmapEncoder,
+ ) -> HRESULT,
+ fn CreatePalette(
+ ppIPalette: *mut *mut IWICPalette,
+ ) -> HRESULT,
+ fn CreateFormatConverter(
+ ppIFormatConverter: *mut *mut IWICFormatConverter,
+ ) -> HRESULT,
+ fn CreateBitmapScaler(
+ ppIBitmapScaler: *mut *mut IWICBitmapScaler,
+ ) -> HRESULT,
+ fn CreateBitmapClipper(
+ ppIBitmapClipper: *mut *mut IWICBitmapClipper,
+ ) -> HRESULT,
+ fn CreateBitmapFlipRotator(
+ ppIBitmapFlipRotator: *mut *mut IWICBitmapFlipRotator,
+ ) -> HRESULT,
+ fn CreateStream(
+ ppIWICStream: *mut *mut IWICStream,
+ ) -> HRESULT,
+ fn CreateColorContext(
+ ppIWICColorContext: *mut *mut IWICColorContext,
+ ) -> HRESULT,
+ fn CreateColorTransformer(
+ ppIWICColorTransform: *mut *mut IWICColorTransform,
+ ) -> HRESULT,
+ fn CreateBitmap(
+ uiWidth: UINT,
+ uiHeight: UINT,
+ pixelFormat: REFWICPixelFormatGUID,
+ option: WICBitmapCreateCacheOption,
+ ppIBitmap: *mut *mut IWICBitmap,
+ ) -> HRESULT,
+ fn CreateBitmapFromSource(
+ pIBitmapSource: *const IWICBitmapSource,
+ option: WICBitmapCreateCacheOption,
+ ppIBitmap: *mut *mut IWICBitmap,
+ ) -> HRESULT,
+ fn CreateBitmapFromSourceRect(
+ pIBitmapSource: *const IWICBitmapSource,
+ x: UINT,
+ y: UINT,
+ width: UINT,
+ height: UINT,
+ ppIBitmap: *mut *mut IWICBitmap,
+ ) -> HRESULT,
+ fn CreateBitmapFromMemory(
+ uiWidth: UINT,
+ uiHeight: UINT,
+ pixelFormat: REFWICPixelFormatGUID,
+ cbStride: UINT,
+ cbBufferSize: UINT,
+ pbBuffer: *const BYTE,
+ ppIBitmap: *mut *mut IWICBitmap,
+ ) -> HRESULT,
+ fn CreateBitmapFromHBITMAP(
+ hBitmap: HBITMAP,
+ hPalette: HPALETTE,
+ options: WICBitmapAlphaChannelOption,
+ ppIBitmap: *mut *mut IWICBitmap,
+ ) -> HRESULT,
+ fn CreateBitmapFromHICON(
+ hIcon: HICON,
+ ppIBitmap: *mut *mut IWICBitmap,
+ ) -> HRESULT,
+ fn CreateComponentEnumerator(
+ componentTypes: DWORD,
+ options: DWORD,
+ ppIEnumUnknown: *mut *mut IEnumUnknown,
+ ) -> HRESULT,
+ fn CreateFastMetadataEncoderFromDecoder(
+ pIDecoder: *const IWICBitmapDecoder,
+ ppIFastEncoder: *mut *mut IWICFastMetadataEncoder,
+ ) -> HRESULT,
+ fn CreateFastMetadataEncoderFromFrameDecode(
+ pIFrameDecoder: *const IWICBitmapFrameDecode,
+ ppIFastEncoder: *mut *mut IWICFastMetadataEncoder,
+ ) -> HRESULT,
+ fn CreateQueryWriter(
+ guidMetadataFormat: REFGUID,
+ pguidVendor: *const GUID,
+ ppIQueryWriter: *mut *mut IWICMetadataQueryWriter,
+ ) -> HRESULT,
+ fn CreateQueryWriterFromReader(
+ pIQueryReader: *const IWICMetadataQueryReader,
+ pguidVendor: *const GUID,
+ ppIQueryWriter: *mut *mut IWICMetadataQueryWriter,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x7b816b45, 0x1996, 0x4476, 0xb1, 0x32, 0xde, 0x9e, 0x24, 0x7c, 0x8a, 0xf0)]
+interface IWICImagingFactory2(IWICImagingFactory2Vtbl):
+ IWICImagingFactory(IWICImagingFactoryVtbl) {
+ fn CreateImageEncoder(
+ pD2DDevice: *const ID2D1Device,
+ ppWICImageEncoder: *mut *mut IWICImageEncoder,
+ ) -> HRESULT,
+}}
+extern "system" {
+ pub fn WICConvertBitmapSource(
+ dstFormat: REFWICPixelFormatGUID,
+ pISrc: *const IWICBitmapSource,
+ ppIDst: *mut *mut IWICBitmapSource,
+ ) -> HRESULT;
+ pub fn WICCreateBitmapFromSection(
+ width: UINT,
+ height: UINT,
+ pixelFormat: REFWICPixelFormatGUID,
+ hSection: HANDLE,
+ stride: UINT,
+ offset: UINT,
+ ppIBitmap: *mut *mut IWICBitmap,
+ ) -> HRESULT;
+ pub fn WICCreateBitmapFromSectionEx(
+ width: UINT,
+ height: UINT,
+ pixelFormat: REFWICPixelFormatGUID,
+ hSection: HANDLE,
+ stride: UINT,
+ offset: UINT,
+ desiredAccessLevel: WICSectionAccessLevel,
+ ppIBitmap: *mut *mut IWICBitmap,
+ ) -> HRESULT;
+ pub fn WICMapGuidToShortName(
+ guid: REFGUID,
+ cchName: UINT,
+ wzName: *mut WCHAR,
+ pcchActual: *mut UINT,
+ ) -> HRESULT;
+ pub fn WICMapShortNameToGuid(
+ wzName: PCWSTR,
+ pguid: *mut GUID,
+ ) -> HRESULT;
+ pub fn WICMapSchemaToName(
+ guidMetadataFormat: REFGUID,
+ pwzSchema: LPWSTR,
+ cchName: UINT,
+ wzName: *mut WCHAR,
+ pcchActual: *mut UINT,
+ ) -> HRESULT;
+}
+pub const FACILITY_WINCODEC_ERR: HRESULT = 0x898;
+pub const WINCODEC_ERR_BASE: HRESULT = 0x2000;
+/// intsafe.h, 0x216 = 534 = ERROR_ARITHMETIC_OVERFLOW
+pub const INTSAFE_E_ARITHMETIC_OVERFLOW: HRESULT = 0x80070216;
+#[inline]
+pub fn MAKE_WINCODECHR(severity: HRESULT, code: HRESULT) -> HRESULT {
+ MAKE_HRESULT!(severity, FACILITY_WINCODEC_ERR, WINCODEC_ERR_BASE + code)
+}
+#[inline]
+pub fn MAKE_WINCODECHR_ERR(code: HRESULT) -> HRESULT {
+ MAKE_WINCODECHR(SEVERITY_ERROR, code)
+}
+pub const WINCODEC_ERR_GENERIC_ERROR: HRESULT = E_FAIL;
+pub const WINCODEC_ERR_INVALIDPARAMETER: HRESULT = E_INVALIDARG;
+pub const WINCODEC_ERR_OUTOFMEMORY: HRESULT = E_OUTOFMEMORY;
+pub const WINCODEC_ERR_NOTIMPLEMENTED: HRESULT = E_NOTIMPL;
+pub const WINCODEC_ERR_ABORTED: HRESULT = E_ABORT;
+pub const WINCODEC_ERR_ACCESSDENIED: HRESULT = E_ACCESSDENIED;
+pub const WINCODEC_ERR_VALUEOVERFLOW: HRESULT = INTSAFE_E_ARITHMETIC_OVERFLOW;
+ENUM!{enum WICTiffCompressionOption {
+ WICTiffCompressionDontCare = 0x00000000,
+ WICTiffCompressionNone = 0x00000001,
+ WICTiffCompressionCCITT3 = 0x00000002,
+ WICTiffCompressionCCITT4 = 0x00000003,
+ WICTiffCompressionLZW = 0x00000004,
+ WICTiffCompressionRLE = 0x00000005,
+ WICTiffCompressionZIP = 0x00000006,
+ WICTiffCompressionLZWHDifferencing = 0x00000007,
+ WICTIFFCOMPRESSIONOPTION_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICJpegYCrCbSubsamplingOption {
+ WICJpegYCrCbSubsamplingDefault = 0x00000000,
+ WICJpegYCrCbSubsampling420 = 0x00000001,
+ WICJpegYCrCbSubsampling422 = 0x00000002,
+ WICJpegYCrCbSubsampling444 = 0x00000003,
+ WICJpegYCrCbSubsampling440 = 0x00000004,
+ WICJPEGYCRCBSUBSAMPLING_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICPngFilterOption {
+ WICPngFilterUnspecified = 0x00000000,
+ WICPngFilterNone = 0x00000001,
+ WICPngFilterSub = 0x00000002,
+ WICPngFilterUp = 0x00000003,
+ WICPngFilterAverage = 0x00000004,
+ WICPngFilterPaeth = 0x00000005,
+ WICPngFilterAdaptive = 0x00000006,
+ WICPNGFILTEROPTION_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICNamedWhitePoint {
+ WICWhitePointDefault = 0x00000001,
+ WICWhitePointDaylight = 0x00000002,
+ WICWhitePointCloudy = 0x00000004,
+ WICWhitePointShade = 0x00000008,
+ WICWhitePointTungsten = 0x00000010,
+ WICWhitePointFluorescent = 0x00000020,
+ WICWhitePointFlash = 0x00000040,
+ WICWhitePointUnderwater = 0x00000080,
+ WICWhitePointCustom = 0x00000100,
+ WICWhitePointAutoWhiteBalance = 0x00000200,
+ WICWhitePointAsShot = WICWhitePointDefault,
+ WICNAMEDWHITEPOINT_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICRawCapabilities {
+ WICRawCapabilityNotSupported = 0x00000000,
+ WICRawCapabilityGetSupported = 0x00000001,
+ WICRawCapabilityFullySupported = 0x00000002,
+ WICRAWCAPABILITIES_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICRawRotationCapabilities {
+ WICRawRotationCapabilityNotSupported = 0x00000000,
+ WICRawRotationCapabilityGetSupported = 0x00000001,
+ WICRawRotationCapabilityNinetyDegreesSupported = 0x00000002,
+ WICRawRotationCapabilityFullySupported = 0x00000003,
+ WICRAWROTATIONCAPABILITIES_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+STRUCT!{struct WICRawCapabilitiesInfo {
+ cbSize: UINT,
+ CodecMajorVersion: UINT,
+ CodecMinorVersion: UINT,
+ ExposureCompensationSupport: WICRawCapabilities,
+ ContrastSupport: WICRawCapabilities,
+ RGBWhitePointSupport: WICRawCapabilities,
+ NamedWhitePointSupport: WICRawCapabilities,
+ NamedWhitePointSupportMask: UINT,
+ KelvinWhitePointSupport: WICRawCapabilities,
+ GammaSupport: WICRawCapabilities,
+ TintSupport: WICRawCapabilities,
+ SaturationSupport: WICRawCapabilities,
+ SharpnessSupport: WICRawCapabilities,
+ NoiseReductionSupport: WICRawCapabilities,
+ DestinationColorProfileSupport: WICRawCapabilities,
+ ToneCurveSupport: WICRawCapabilities,
+ RotationSupport: WICRawRotationCapabilities,
+ RenderModeSupport: WICRawCapabilities,
+}}
+ENUM!{enum WICRawParameterSet {
+ WICAsShotParameterSet = 0x00000001,
+ WICUserAdjustedParameterSet = 0x00000002,
+ WICAutoAdjustedParameterSet = 0x00000003,
+ WICRAWPARAMETERSET_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICRawRenderMode {
+ WICRawRenderModeDraft = 0x00000001,
+ WICRawRenderModeNormal = 0x00000002,
+ WICRawRenderModeBestQuality = 0x00000003,
+ WICRAWRENDERMODE_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+STRUCT!{struct WICRawToneCurvePoint {
+ Input: c_double,
+ Output: c_double,
+}}
+STRUCT!{struct WICRawToneCurve {
+ cPoints: UINT,
+ aPoints: [WICRawToneCurvePoint; 1],
+}}
+pub const WICRawChangeNotification_ExposureCompensation: UINT = 0x00000001;
+pub const WICRawChangeNotification_NamedWhitePoint: UINT = 0x00000002;
+pub const WICRawChangeNotification_KelvinWhitePoint: UINT = 0x00000004;
+pub const WICRawChangeNotification_RGBWhitePoint: UINT = 0x00000008;
+pub const WICRawChangeNotification_Contrast: UINT = 0x00000010;
+pub const WICRawChangeNotification_Gamma: UINT = 0x00000020;
+pub const WICRawChangeNotification_Sharpness: UINT = 0x00000040;
+pub const WICRawChangeNotification_Saturation: UINT = 0x00000080;
+pub const WICRawChangeNotification_Tint: UINT = 0x00000100;
+pub const WICRawChangeNotification_NoiseReduction: UINT = 0x00000200;
+pub const WICRawChangeNotification_DestinationColorContext: UINT = 0x00000400;
+pub const WICRawChangeNotification_ToneCurve: UINT = 0x00000800;
+pub const WICRawChangeNotification_Rotation: UINT = 0x00001000;
+pub const WICRawChangeNotification_RenderMode: UINT = 0x00002000;
+RIDL!{#[uuid(0x95c75a6e, 0x3e8c, 0x4ec2, 0x85, 0xa8, 0xae, 0xbc, 0xc5, 0x51, 0xe5, 0x9b)]
+interface IWICDevelopRawNotificationCallback(IWICDevelopRawNotificationCallbackVtbl):
+ IUnknown(IUnknownVtbl) {
+ fn Notify(
+ NotificationMask: UINT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xfbec5e44, 0xf7be, 0x4b65, 0xb7, 0xf8, 0xc0, 0xc8, 0x1f, 0xef, 0x02, 0x6d)]
+interface IWICDevelopRaw(IWICDevelopRawVtbl): IWICBitmapFrameDecode(IWICBitmapFrameDecodeVtbl) {
+ fn QueryRawCapabilitiesInfo(
+ pInfo: *mut WICRawCapabilitiesInfo,
+ ) -> HRESULT,
+ fn LoadParameterSet(
+ ParameterSet: WICRawParameterSet,
+ ) -> HRESULT,
+ fn GetCurrentParameterSet(
+ ppCurrentParameterSet: *mut *mut IPropertyBag2,
+ ) -> HRESULT,
+ fn SetExposureCompensation(
+ ev: c_double,
+ ) -> HRESULT,
+ fn GetExposureCompensation(
+ pEV: *mut c_double,
+ ) -> HRESULT,
+ fn SetWhitePointRGB(
+ Red: UINT,
+ Green: UINT,
+ Blue: UINT,
+ ) -> HRESULT,
+ fn GetWhitePointRGB(
+ pRed: *mut UINT,
+ pGreen: *mut UINT,
+ pBlue: *mut UINT,
+ ) -> HRESULT,
+ fn SetNamedWhitePoint(
+ WhitePoint: WICNamedWhitePoint,
+ ) -> HRESULT,
+ fn GetNamedWhitePoint(
+ pWhitePoint: *mut WICNamedWhitePoint,
+ ) -> HRESULT,
+ fn SetWhitePointKelvin(
+ WhitePointKelvin: UINT,
+ ) -> HRESULT,
+ fn GetWhitePointKelvin(
+ pWhitePointKelvin: *mut UINT,
+ ) -> HRESULT,
+ fn GetKelvinRangeInfo(
+ pMinKelvinTemp: *mut UINT,
+ pMaxKelvinTemp: *mut UINT,
+ pKelvinTempStepValue: *mut UINT,
+ ) -> HRESULT,
+ fn SetContrast(
+ Contrast: c_double,
+ ) -> HRESULT,
+ fn GetContrast(
+ pContrast: *mut c_double,
+ ) -> HRESULT,
+ fn SetGamma(
+ Gamma: c_double,
+ ) -> HRESULT,
+ fn GetGamma(
+ pGamma: *mut c_double,
+ ) -> HRESULT,
+ fn SetSharpness(
+ Sharpness: c_double,
+ ) -> HRESULT,
+ fn GetSharpness(
+ pSharpness: *mut c_double,
+ ) -> HRESULT,
+ fn SetSaturation(
+ Saturation: c_double,
+ ) -> HRESULT,
+ fn GetSaturation(
+ pSaturation: *mut c_double,
+ ) -> HRESULT,
+ fn SetTint(
+ Tint: c_double,
+ ) -> HRESULT,
+ fn GetTint(
+ pTint: *mut c_double,
+ ) -> HRESULT,
+ fn SetNoiseReduction(
+ NoiseReduction: c_double,
+ ) -> HRESULT,
+ fn GetNoiseReduction(
+ pNoiseReduction: *mut c_double,
+ ) -> HRESULT,
+ fn SetDestinationColorContext(
+ pColorContext: *const IWICColorContext,
+ ) -> HRESULT,
+ fn SetToneCurve(
+ cbToneCurveSize: UINT,
+ pToneCurve: *const WICRawToneCurve,
+ ) -> HRESULT,
+ fn GetToneCurve(
+ cbToneCurveBufferSize: UINT,
+ pToneCurve: *mut WICRawToneCurve,
+ pcbActualToneCurveBufferSize: *mut UINT,
+ ) -> HRESULT,
+ fn SetRotation(
+ Rotation: c_double,
+ ) -> HRESULT,
+ fn GetRotation(
+ pRotation: *mut c_double,
+ ) -> HRESULT,
+ fn SetRenderMode(
+ RenderMode: WICRawRenderMode,
+ ) -> HRESULT,
+ fn GetRenderMode(
+ pRenderMode: *mut WICRawRenderMode,
+ ) -> HRESULT,
+ fn SetNotificationCallback(
+ pCallback: *const IWICDevelopRawNotificationCallback,
+ ) -> HRESULT,
+}}
+ENUM!{enum WICDdsDimension {
+ WICDdsTexture1D = 0x00000000,
+ WICDdsTexture2D = 0x00000001,
+ WICDdsTexture3D = 0x00000002,
+ WICDdsTextureCube = 0x00000003,
+ WICDDSTEXTURE_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+ENUM!{enum WICDdsAlphaMode {
+ WICDdsAlphaModeUnknown = 0x00000000,
+ WICDdsAlphaModeStraight = 0x00000001,
+ WICDdsAlphaModePremultiplied = 0x00000002,
+ WICDdsAlphaModeOpaque = 0x00000003,
+ WICDdsAlphaModeCustom = 0x00000004,
+ WICDDSALPHAMODE_FORCE_DWORD = CODEC_FORCE_DWORD,
+}}
+STRUCT!{struct WICDdsParameters {
+ Width: UINT,
+ Height: UINT,
+ Depth: UINT,
+ MipLevels: UINT,
+ ArraySize: UINT,
+ DxgiFormat: DXGI_FORMAT,
+ Dimension: WICDdsDimension,
+ AlphaMode: WICDdsAlphaMode,
+}}
+RIDL!{#[uuid(0x409cd537, 0x8532, 0x40cb, 0x97, 0x74, 0xe2, 0xfe, 0xb2, 0xdf, 0x4e, 0x9c)]
+interface IWICDdsDecoder(IWICDdsDecoderVtbl): IUnknown(IUnknownVtbl) {
+ fn GetParameters(
+ pParameters: *mut WICDdsParameters,
+ ) -> HRESULT,
+ fn GetFrame(
+ arrayIndex: UINT,
+ mipLevel: UINT,
+ sliceIndex: UINT,
+ ppIBitmapFrame: *mut *mut IWICBitmapFrameDecode,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x5cacdb4c, 0x407e, 0x41b3, 0xb9, 0x36, 0xd0, 0xf0, 0x10, 0xcd, 0x67, 0x32)]
+interface IWICDdsEncoder(IWICDdsEncoderVtbl): IUnknown(IUnknownVtbl) {
+ fn SetParameters(
+ pParameters: *const WICDdsParameters,
+ ) -> HRESULT,
+ fn GetParameters(
+ pParameters: *mut WICDdsParameters,
+ ) -> HRESULT,
+ fn CreateNewFrame(
+ ppIFrameEncode: *mut *mut IWICBitmapFrameEncode,
+ pArrayIndex: *mut UINT,
+ pMipLevel: *mut UINT,
+ pSliceIndex: *mut UINT,
+ ) -> HRESULT,
+}}
+STRUCT!{struct WICDdsFormatInfo {
+ DxgiFormat: DXGI_FORMAT,
+ BytesPerBlock: UINT,
+ BlockWidth: UINT,
+ BlockHeight: UINT,
+}}
+RIDL!{#[uuid(0x3d4c0c61, 0x18a4, 0x41e4, 0xbd, 0x80, 0x48, 0x1a, 0x4f, 0xc9, 0xf4, 0x64)]
+interface IWICDdsFrameDecode(IWICDdsFrameDecodeVtbl): IUnknown(IUnknownVtbl) {
+ fn GetSizeInBlocks(
+ pWidthInBlocks: *mut UINT,
+ pHeightInBlocks: *mut UINT,
+ ) -> HRESULT,
+ fn GetFormatInfo(
+ pFormatInfo: *mut WICDdsFormatInfo,
+ ) -> HRESULT,
+ fn CopyBlocks(
+ prcBoundsInBlocks: *const WICRect,
+ cbStride: UINT,
+ cbBufferSize: UINT,
+ pbBuffer: *mut BYTE,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x8939f66e, 0xc46a, 0x4c21, 0xa9, 0xd1, 0x98, 0xb3, 0x27, 0xce, 0x16, 0x79)]
+interface IWICJpegFrameDecode(IWICJpegFrameDecodeVtbl): IUnknown(IUnknownVtbl) {
+ fn DoesSupportIndexing(
+ pfIndexingSupported: *mut BOOL,
+ ) -> HRESULT,
+ fn SetIndexing(
+ options: WICJpegIndexingOptions,
+ horizontalIntervalSize: UINT,
+ ) -> HRESULT,
+ fn ClearIndexing() -> HRESULT,
+ fn GetAcHuffmanTable(
+ scanIndex: UINT,
+ tableIndex: UINT,
+ pAcHuffmanTable: *mut DXGI_JPEG_AC_HUFFMAN_TABLE,
+ ) -> HRESULT,
+ fn GetDcHuffmanTable(
+ scanIndex: UINT,
+ tableIndex: UINT,
+ pDcHuffmanTable: *mut DXGI_JPEG_DC_HUFFMAN_TABLE,
+ ) -> HRESULT,
+ fn GetQuantizationTable(
+ scanIndex: UINT,
+ tableIndex: UINT,
+ pQuantizationTable: *mut DXGI_JPEG_QUANTIZATION_TABLE,
+ ) -> HRESULT,
+ fn GetFrameHeader(
+ pFrameHeader: *mut WICJpegFrameHeader,
+ ) -> HRESULT,
+ fn GetScanHeader(
+ scanIndex: UINT,
+ pScanHeader: *mut WICJpegScanHeader,
+ ) -> HRESULT,
+ fn CopyScan(
+ scanIndex: UINT,
+ scanOffset: UINT,
+ cbScanData: UINT,
+ pbScanData: *mut BYTE,
+ pcbScanDataActual: *mut UINT,
+ ) -> HRESULT,
+ fn CopyMinimalStream(
+ streamOffset: UINT,
+ cbStreamData: UINT,
+ pbStreamData: *mut BYTE,
+ pcbStreamDataActual: *mut UINT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x2f0c601f, 0xd2c6, 0x468c, 0xab, 0xfa, 0x49, 0x49, 0x5d, 0x98, 0x3e, 0xd1)]
+interface IWICJpegFrameEncode(IWICJpegFrameEncodeVtbl): IUnknown(IUnknownVtbl) {
+ fn GetAcHuffmanTable(
+ scanIndex: UINT,
+ tableIndex: UINT,
+ pAcHuffmanTable: *mut DXGI_JPEG_AC_HUFFMAN_TABLE,
+ ) -> HRESULT,
+ fn GetDcHuffmanTable(
+ scanIndex: UINT,
+ tableIndex: UINT,
+ pDcHuffmanTable: *mut DXGI_JPEG_DC_HUFFMAN_TABLE,
+ ) -> HRESULT,
+ fn GetQuantizationTable(
+ scanIndex: UINT,
+ tableIndex: UINT,
+ pQuantizationTable: *mut DXGI_JPEG_QUANTIZATION_TABLE,
+ ) -> HRESULT,
+ fn WriteScan(
+ cbScanData: UINT,
+ pbScanData: *const BYTE,
+ ) -> HRESULT,
+}}
diff --git a/vendor/winapi/src/um/wincodecsdk.rs b/vendor/winapi/src/um/wincodecsdk.rs
new file mode 100644
index 000000000..f71bf72aa
--- /dev/null
+++ b/vendor/winapi/src/um/wincodecsdk.rs
@@ -0,0 +1,564 @@
+// 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 ctypes::{c_uchar, c_ulong};
+use shared::guiddef::{GUID, REFGUID};
+use shared::minwindef::{BOOL, BYTE, DWORD, UINT, ULONG};
+use shared::wtypes::{BSTR, CLIPFORMAT};
+use um::oaidl::LPSAFEARRAY;
+use um::objidl::{IPersistStream, IPersistStreamVtbl};
+use um::objidlbase::{IEnumUnknown, IStream};
+use um::ocidl::{IPropertyBag2, PROPBAG2};
+use um::propidl::PROPVARIANT;
+use um::unknwnbase::{IUnknown, IUnknownVtbl};
+use um::wincodec::{
+ IWICComponentInfo, IWICComponentInfoVtbl, IWICEnumMetadataItem, IWICImagingFactory,
+ IWICImagingFactoryVtbl, IWICMetadataQueryReader, IWICMetadataQueryWriter,
+};
+use um::winnt::{HRESULT, ULARGE_INTEGER, WCHAR};
+DEFINE_GUID!{GUID_MetadataFormatUnknown,
+ 0xa45e592f, 0x9078, 0x4a7c, 0xad, 0xb5, 0x4e, 0xdc, 0x4f, 0xd6, 0x1b, 0x1f}
+DEFINE_GUID!{GUID_MetadataFormatIfd,
+ 0x537396c6, 0x2d8a, 0x4bb6, 0x9b, 0xf8, 0x2f, 0x0a, 0x8e, 0x2a, 0x3a, 0xdf}
+DEFINE_GUID!{GUID_MetadataFormatSubIfd,
+ 0x58a2e128, 0x2db9, 0x4e57, 0xbb, 0x14, 0x51, 0x77, 0x89, 0x1e, 0xd3, 0x31}
+DEFINE_GUID!{GUID_MetadataFormatExif,
+ 0x1c3c4f9d, 0xb84a, 0x467d, 0x94, 0x93, 0x36, 0xcf, 0xbd, 0x59, 0xea, 0x57}
+DEFINE_GUID!{GUID_MetadataFormatGps,
+ 0x7134ab8a, 0x9351, 0x44ad, 0xaf, 0x62, 0x44, 0x8d, 0xb6, 0xb5, 0x02, 0xec}
+DEFINE_GUID!{GUID_MetadataFormatInterop,
+ 0xed686f8e, 0x681f, 0x4c8b, 0xbd, 0x41, 0xa8, 0xad, 0xdb, 0xf6, 0xb3, 0xfc}
+DEFINE_GUID!{GUID_MetadataFormatApp0,
+ 0x79007028, 0x268d, 0x45d6, 0xa3, 0xc2, 0x35, 0x4e, 0x6a, 0x50, 0x4b, 0xc9}
+DEFINE_GUID!{GUID_MetadataFormatApp1,
+ 0x8fd3dfc3, 0xf951, 0x492b, 0x81, 0x7f, 0x69, 0xc2, 0xe6, 0xd9, 0xa5, 0xb0}
+DEFINE_GUID!{GUID_MetadataFormatApp13,
+ 0x326556a2, 0xf502, 0x4354, 0x9c, 0xc0, 0x8e, 0x3f, 0x48, 0xea, 0xf6, 0xb5}
+DEFINE_GUID!{GUID_MetadataFormatIPTC,
+ 0x4fab0914, 0xe129, 0x4087, 0xa1, 0xd1, 0xbc, 0x81, 0x2d, 0x45, 0xa7, 0xb5}
+DEFINE_GUID!{GUID_MetadataFormatIRB,
+ 0x16100d66, 0x8570, 0x4bb9, 0xb9, 0x2d, 0xfd, 0xa4, 0xb2, 0x3e, 0xce, 0x67}
+DEFINE_GUID!{GUID_MetadataFormat8BIMIPTC,
+ 0x0010568c, 0x0852, 0x4e6a, 0xb1, 0x91, 0x5c, 0x33, 0xac, 0x5b, 0x04, 0x30}
+DEFINE_GUID!{GUID_MetadataFormat8BIMResolutionInfo,
+ 0x739f305d, 0x81db, 0x43cb, 0xac, 0x5e, 0x55, 0x01, 0x3e, 0xf9, 0xf0, 0x03}
+DEFINE_GUID!{GUID_MetadataFormat8BIMIPTCDigest,
+ 0x1ca32285, 0x9ccd, 0x4786, 0x8b, 0xd8, 0x79, 0x53, 0x9d, 0xb6, 0xa0, 0x06}
+DEFINE_GUID!{GUID_MetadataFormatXMP,
+ 0xbb5acc38, 0xf216, 0x4cec, 0xa6, 0xc5, 0x5f, 0x6e, 0x73, 0x97, 0x63, 0xa9}
+DEFINE_GUID!{GUID_MetadataFormatThumbnail,
+ 0x243dcee9, 0x8703, 0x40ee, 0x8e, 0xf0, 0x22, 0xa6, 0x00, 0xb8, 0x05, 0x8c}
+DEFINE_GUID!{GUID_MetadataFormatChunktEXt,
+ 0x568d8936, 0xc0a9, 0x4923, 0x90, 0x5d, 0xdf, 0x2b, 0x38, 0x23, 0x8f, 0xbc}
+DEFINE_GUID!{GUID_MetadataFormatXMPStruct,
+ 0x22383cf1, 0xed17, 0x4e2e, 0xaf, 0x17, 0xd8, 0x5b, 0x8f, 0x6b, 0x30, 0xd0}
+DEFINE_GUID!{GUID_MetadataFormatXMPBag,
+ 0x833cca5f, 0xdcb7, 0x4516, 0x80, 0x6f, 0x65, 0x96, 0xab, 0x26, 0xdc, 0xe4}
+DEFINE_GUID!{GUID_MetadataFormatXMPSeq,
+ 0x63e8df02, 0xeb6c, 0x456c, 0xa2, 0x24, 0xb2, 0x5e, 0x79, 0x4f, 0xd6, 0x48}
+DEFINE_GUID!{GUID_MetadataFormatXMPAlt,
+ 0x7b08a675, 0x91aa, 0x481b, 0xa7, 0x98, 0x4d, 0xa9, 0x49, 0x08, 0x61, 0x3b}
+DEFINE_GUID!{GUID_MetadataFormatLSD,
+ 0xe256031e, 0x6299, 0x4929, 0xb9, 0x8d, 0x5a, 0xc8, 0x84, 0xaf, 0xba, 0x92}
+DEFINE_GUID!{GUID_MetadataFormatIMD,
+ 0xbd2bb086, 0x4d52, 0x48dd, 0x96, 0x77, 0xdb, 0x48, 0x3e, 0x85, 0xae, 0x8f}
+DEFINE_GUID!{GUID_MetadataFormatGCE,
+ 0x2a25cad8, 0xdeeb, 0x4c69, 0xa7, 0x88, 0x0e, 0xc2, 0x26, 0x6d, 0xca, 0xfd}
+DEFINE_GUID!{GUID_MetadataFormatAPE,
+ 0x2e043dc2, 0xc967, 0x4e05, 0x87, 0x5e, 0x61, 0x8b, 0xf6, 0x7e, 0x85, 0xc3}
+DEFINE_GUID!{GUID_MetadataFormatJpegChrominance,
+ 0xf73d0dcf, 0xcec6, 0x4f85, 0x9b, 0x0e, 0x1c, 0x39, 0x56, 0xb1, 0xbe, 0xf7}
+DEFINE_GUID!{GUID_MetadataFormatJpegLuminance,
+ 0x86908007, 0xedfc, 0x4860, 0x8d, 0x4b, 0x4e, 0xe6, 0xe8, 0x3e, 0x60, 0x58}
+DEFINE_GUID!{GUID_MetadataFormatJpegComment,
+ 0x220e5f33, 0xafd3, 0x474e, 0x9d, 0x31, 0x7d, 0x4f, 0xe7, 0x30, 0xf5, 0x57}
+DEFINE_GUID!{GUID_MetadataFormatGifComment,
+ 0xc4b6e0e0, 0xcfb4, 0x4ad3, 0xab, 0x33, 0x9a, 0xad, 0x23, 0x55, 0xa3, 0x4a}
+DEFINE_GUID!{GUID_MetadataFormatChunkgAMA,
+ 0xf00935a5, 0x1d5d, 0x4cd1, 0x81, 0xb2, 0x93, 0x24, 0xd7, 0xec, 0xa7, 0x81}
+DEFINE_GUID!{GUID_MetadataFormatChunkbKGD,
+ 0xe14d3571, 0x6b47, 0x4dea, 0xb6, 0x0a, 0x87, 0xce, 0x0a, 0x78, 0xdf, 0xb7}
+DEFINE_GUID!{GUID_MetadataFormatChunkiTXt,
+ 0xc2bec729, 0x0b68, 0x4b77, 0xaa, 0x0e, 0x62, 0x95, 0xa6, 0xac, 0x18, 0x14}
+DEFINE_GUID!{GUID_MetadataFormatChunkcHRM,
+ 0x9db3655b, 0x2842, 0x44b3, 0x80, 0x67, 0x12, 0xe9, 0xb3, 0x75, 0x55, 0x6a}
+DEFINE_GUID!{GUID_MetadataFormatChunkhIST,
+ 0xc59a82da, 0xdb74, 0x48a4, 0xbd, 0x6a, 0xb6, 0x9c, 0x49, 0x31, 0xef, 0x95}
+DEFINE_GUID!{GUID_MetadataFormatChunkiCCP,
+ 0xeb4349ab, 0xb685, 0x450f, 0x91, 0xb5, 0xe8, 0x02, 0xe8, 0x92, 0x53, 0x6c}
+DEFINE_GUID!{GUID_MetadataFormatChunksRGB,
+ 0xc115fd36, 0xcc6f, 0x4e3f, 0x83, 0x63, 0x52, 0x4b, 0x87, 0xc6, 0xb0, 0xd9}
+DEFINE_GUID!{GUID_MetadataFormatChunktIME,
+ 0x6b00ae2d, 0xe24b, 0x460a, 0x98, 0xb6, 0x87, 0x8b, 0xd0, 0x30, 0x72, 0xfd}
+DEFINE_GUID!{GUID_MetadataFormatDds,
+ 0x4a064603, 0x8c33, 0x4e60, 0x9c, 0x29, 0x13, 0x62, 0x31, 0x70, 0x2d, 0x08}
+DEFINE_GUID!{CLSID_WICUnknownMetadataReader,
+ 0x699745c2, 0x5066, 0x4b82, 0xa8, 0xe3, 0xd4, 0x04, 0x78, 0xdb, 0xec, 0x8c}
+DEFINE_GUID!{CLSID_WICUnknownMetadataWriter,
+ 0xa09cca86, 0x27ba, 0x4f39, 0x90, 0x53, 0x12, 0x1f, 0xa4, 0xdc, 0x08, 0xfc}
+DEFINE_GUID!{CLSID_WICApp0MetadataWriter,
+ 0xf3c633a2, 0x46c8, 0x498e, 0x8f, 0xbb, 0xcc, 0x6f, 0x72, 0x1b, 0xbc, 0xde}
+DEFINE_GUID!{CLSID_WICApp0MetadataReader,
+ 0x43324b33, 0xa78f, 0x480f, 0x91, 0x11, 0x96, 0x38, 0xaa, 0xcc, 0xc8, 0x32}
+DEFINE_GUID!{CLSID_WICApp1MetadataWriter,
+ 0xee366069, 0x1832, 0x420f, 0xb3, 0x81, 0x04, 0x79, 0xad, 0x06, 0x6f, 0x19}
+DEFINE_GUID!{CLSID_WICApp1MetadataReader,
+ 0xdde33513, 0x774e, 0x4bcd, 0xae, 0x79, 0x02, 0xf4, 0xad, 0xfe, 0x62, 0xfc}
+DEFINE_GUID!{CLSID_WICApp13MetadataWriter,
+ 0x7b19a919, 0xa9d6, 0x49e5, 0xbd, 0x45, 0x02, 0xc3, 0x4e, 0x4e, 0x4c, 0xd5}
+DEFINE_GUID!{CLSID_WICApp13MetadataReader,
+ 0xaa7e3c50, 0x864c, 0x4604, 0xbc, 0x04, 0x8b, 0x0b, 0x76, 0xe6, 0x37, 0xf6}
+DEFINE_GUID!{CLSID_WICIfdMetadataReader,
+ 0x8f914656, 0x9d0a, 0x4eb2, 0x90, 0x19, 0x0b, 0xf9, 0x6d, 0x8a, 0x9e, 0xe6}
+DEFINE_GUID!{CLSID_WICIfdMetadataWriter,
+ 0xb1ebfc28, 0xc9bd, 0x47a2, 0x8d, 0x33, 0xb9, 0x48, 0x76, 0x97, 0x77, 0xa7}
+DEFINE_GUID!{CLSID_WICSubIfdMetadataReader,
+ 0x50d42f09, 0xecd1, 0x4b41, 0xb6, 0x5d, 0xda, 0x1f, 0xda, 0xa7, 0x56, 0x63}
+DEFINE_GUID!{CLSID_WICSubIfdMetadataWriter,
+ 0x8ade5386, 0x8e9b, 0x4f4c, 0xac, 0xf2, 0xf0, 0x00, 0x87, 0x06, 0xb2, 0x38}
+DEFINE_GUID!{CLSID_WICExifMetadataReader,
+ 0xd9403860, 0x297f, 0x4a49, 0xbf, 0x9b, 0x77, 0x89, 0x81, 0x50, 0xa4, 0x42}
+DEFINE_GUID!{CLSID_WICExifMetadataWriter,
+ 0xc9a14cda, 0xc339, 0x460b, 0x90, 0x78, 0xd4, 0xde, 0xbc, 0xfa, 0xbe, 0x91}
+DEFINE_GUID!{CLSID_WICGpsMetadataReader,
+ 0x3697790b, 0x223b, 0x484e, 0x99, 0x25, 0xc4, 0x86, 0x92, 0x18, 0xf1, 0x7a}
+DEFINE_GUID!{CLSID_WICGpsMetadataWriter,
+ 0xcb8c13e4, 0x62b5, 0x4c96, 0xa4, 0x8b, 0x6b, 0xa6, 0xac, 0xe3, 0x9c, 0x76}
+DEFINE_GUID!{CLSID_WICInteropMetadataReader,
+ 0xb5c8b898, 0x0074, 0x459f, 0xb7, 0x00, 0x86, 0x0d, 0x46, 0x51, 0xea, 0x14}
+DEFINE_GUID!{CLSID_WICInteropMetadataWriter,
+ 0x122ec645, 0xcd7e, 0x44d8, 0xb1, 0x86, 0x2c, 0x8c, 0x20, 0xc3, 0xb5, 0x0f}
+DEFINE_GUID!{CLSID_WICThumbnailMetadataReader,
+ 0xfb012959, 0xf4f6, 0x44d7, 0x9d, 0x09, 0xda, 0xa0, 0x87, 0xa9, 0xdb, 0x57}
+DEFINE_GUID!{CLSID_WICThumbnailMetadataWriter,
+ 0xd049b20c, 0x5dd0, 0x44fe, 0xb0, 0xb3, 0x8f, 0x92, 0xc8, 0xe6, 0xd0, 0x80}
+DEFINE_GUID!{CLSID_WICIPTCMetadataReader,
+ 0x03012959, 0xf4f6, 0x44d7, 0x9d, 0x09, 0xda, 0xa0, 0x87, 0xa9, 0xdb, 0x57}
+DEFINE_GUID!{CLSID_WICIPTCMetadataWriter,
+ 0x1249b20c, 0x5dd0, 0x44fe, 0xb0, 0xb3, 0x8f, 0x92, 0xc8, 0xe6, 0xd0, 0x80}
+DEFINE_GUID!{CLSID_WICIRBMetadataReader,
+ 0xd4dcd3d7, 0xb4c2, 0x47d9, 0xa6, 0xbf, 0xb8, 0x9b, 0xa3, 0x96, 0xa4, 0xa3}
+DEFINE_GUID!{CLSID_WICIRBMetadataWriter,
+ 0x5c5c1935, 0x0235, 0x4434, 0x80, 0xbc, 0x25, 0x1b, 0xc1, 0xec, 0x39, 0xc6}
+DEFINE_GUID!{CLSID_WIC8BIMIPTCMetadataReader,
+ 0x0010668c, 0x0801, 0x4da6, 0xa4, 0xa4, 0x82, 0x65, 0x22, 0xb6, 0xd2, 0x8f}
+DEFINE_GUID!{CLSID_WIC8BIMIPTCMetadataWriter,
+ 0x00108226, 0xee41, 0x44a2, 0x9e, 0x9c, 0x4b, 0xe4, 0xd5, 0xb1, 0xd2, 0xcd}
+DEFINE_GUID!{CLSID_WIC8BIMResolutionInfoMetadataReader,
+ 0x5805137a, 0xe348, 0x4f7c, 0xb3, 0xcc, 0x6d, 0xb9, 0x96, 0x5a, 0x05, 0x99}
+DEFINE_GUID!{CLSID_WIC8BIMResolutionInfoMetadataWriter,
+ 0x4ff2fe0e, 0xe74a, 0x4b71, 0x98, 0xc4, 0xab, 0x7d, 0xc1, 0x67, 0x07, 0xba}
+DEFINE_GUID!{CLSID_WIC8BIMIPTCDigestMetadataReader,
+ 0x02805f1e, 0xd5aa, 0x415b, 0x82, 0xc5, 0x61, 0xc0, 0x33, 0xa9, 0x88, 0xa6}
+DEFINE_GUID!{CLSID_WIC8BIMIPTCDigestMetadataWriter,
+ 0x2db5e62b, 0x0d67, 0x495f, 0x8f, 0x9d, 0xc2, 0xf0, 0x18, 0x86, 0x47, 0xac}
+DEFINE_GUID!{CLSID_WICPngTextMetadataReader,
+ 0x4b59afcc, 0xb8c3, 0x408a, 0xb6, 0x70, 0x89, 0xe5, 0xfa, 0xb6, 0xfd, 0xa7}
+DEFINE_GUID!{CLSID_WICPngTextMetadataWriter,
+ 0xb5ebafb9, 0x253e, 0x4a72, 0xa7, 0x44, 0x07, 0x62, 0xd2, 0x68, 0x56, 0x83}
+DEFINE_GUID!{CLSID_WICXMPMetadataReader,
+ 0x72b624df, 0xae11, 0x4948, 0xa6, 0x5c, 0x35, 0x1e, 0xb0, 0x82, 0x94, 0x19}
+DEFINE_GUID!{CLSID_WICXMPMetadataWriter,
+ 0x1765e14e, 0x1bd4, 0x462e, 0xb6, 0xb1, 0x59, 0x0b, 0xf1, 0x26, 0x2a, 0xc6}
+DEFINE_GUID!{CLSID_WICXMPStructMetadataReader,
+ 0x01b90d9a, 0x8209, 0x47f7, 0x9c, 0x52, 0xe1, 0x24, 0x4b, 0xf5, 0x0c, 0xed}
+DEFINE_GUID!{CLSID_WICXMPStructMetadataWriter,
+ 0x22c21f93, 0x7ddb, 0x411c, 0x9b, 0x17, 0xc5, 0xb7, 0xbd, 0x06, 0x4a, 0xbc}
+DEFINE_GUID!{CLSID_WICXMPBagMetadataReader,
+ 0xe7e79a30, 0x4f2c, 0x4fab, 0x8d, 0x00, 0x39, 0x4f, 0x2d, 0x6b, 0xbe, 0xbe}
+DEFINE_GUID!{CLSID_WICXMPBagMetadataWriter,
+ 0xed822c8c, 0xd6be, 0x4301, 0xa6, 0x31, 0x0e, 0x14, 0x16, 0xba, 0xd2, 0x8f}
+DEFINE_GUID!{CLSID_WICXMPSeqMetadataReader,
+ 0x7f12e753, 0xfc71, 0x43d7, 0xa5, 0x1d, 0x92, 0xf3, 0x59, 0x77, 0xab, 0xb5}
+DEFINE_GUID!{CLSID_WICXMPSeqMetadataWriter,
+ 0x6d68d1de, 0xd432, 0x4b0f, 0x92, 0x3a, 0x09, 0x11, 0x83, 0xa9, 0xbd, 0xa7}
+DEFINE_GUID!{CLSID_WICXMPAltMetadataReader,
+ 0xaa94dcc2, 0xb8b0, 0x4898, 0xb8, 0x35, 0x00, 0x0a, 0xab, 0xd7, 0x43, 0x93}
+DEFINE_GUID!{CLSID_WICXMPAltMetadataWriter,
+ 0x076c2a6c, 0xf78f, 0x4c46, 0xa7, 0x23, 0x35, 0x83, 0xe7, 0x08, 0x76, 0xea}
+DEFINE_GUID!{CLSID_WICLSDMetadataReader,
+ 0x41070793, 0x59e4, 0x479a, 0xa1, 0xf7, 0x95, 0x4a, 0xdc, 0x2e, 0xf5, 0xfc}
+DEFINE_GUID!{CLSID_WICLSDMetadataWriter,
+ 0x73c037e7, 0xe5d9, 0x4954, 0x87, 0x6a, 0x6d, 0xa8, 0x1d, 0x6e, 0x57, 0x68}
+DEFINE_GUID!{CLSID_WICGCEMetadataReader,
+ 0xb92e345d, 0xf52d, 0x41f3, 0xb5, 0x62, 0x08, 0x1b, 0xc7, 0x72, 0xe3, 0xb9}
+DEFINE_GUID!{CLSID_WICGCEMetadataWriter,
+ 0xaf95dc76, 0x16b2, 0x47f4, 0xb3, 0xea, 0x3c, 0x31, 0x79, 0x66, 0x93, 0xe7}
+DEFINE_GUID!{CLSID_WICIMDMetadataReader,
+ 0x7447a267, 0x0015, 0x42c8, 0xa8, 0xf1, 0xfb, 0x3b, 0x94, 0xc6, 0x83, 0x61}
+DEFINE_GUID!{CLSID_WICIMDMetadataWriter,
+ 0x8c89071f, 0x452e, 0x4e95, 0x96, 0x82, 0x9d, 0x10, 0x24, 0x62, 0x71, 0x72}
+DEFINE_GUID!{CLSID_WICAPEMetadataReader,
+ 0x1767b93a, 0xb021, 0x44ea, 0x92, 0x0f, 0x86, 0x3c, 0x11, 0xf4, 0xf7, 0x68}
+DEFINE_GUID!{CLSID_WICAPEMetadataWriter,
+ 0xbd6edfca, 0x2890, 0x482f, 0xb2, 0x33, 0x8d, 0x73, 0x39, 0xa1, 0xcf, 0x8d}
+DEFINE_GUID!{CLSID_WICJpegChrominanceMetadataReader,
+ 0x50b1904b, 0xf28f, 0x4574, 0x93, 0xf4, 0x0b, 0xad, 0xe8, 0x2c, 0x69, 0xe9}
+DEFINE_GUID!{CLSID_WICJpegChrominanceMetadataWriter,
+ 0x3ff566f0, 0x6e6b, 0x49d4, 0x96, 0xe6, 0xb7, 0x88, 0x86, 0x69, 0x2c, 0x62}
+DEFINE_GUID!{CLSID_WICJpegLuminanceMetadataReader,
+ 0x356f2f88, 0x05a6, 0x4728, 0xb9, 0xa4, 0x1b, 0xfb, 0xce, 0x04, 0xd8, 0x38}
+DEFINE_GUID!{CLSID_WICJpegLuminanceMetadataWriter,
+ 0x1d583abc, 0x8a0e, 0x4657, 0x99, 0x82, 0xa3, 0x80, 0xca, 0x58, 0xfb, 0x4b}
+DEFINE_GUID!{CLSID_WICJpegCommentMetadataReader,
+ 0x9f66347c, 0x60c4, 0x4c4d, 0xab, 0x58, 0xd2, 0x35, 0x86, 0x85, 0xf6, 0x07}
+DEFINE_GUID!{CLSID_WICJpegCommentMetadataWriter,
+ 0xe573236f, 0x55b1, 0x4eda, 0x81, 0xea, 0x9f, 0x65, 0xdb, 0x02, 0x90, 0xd3}
+DEFINE_GUID!{CLSID_WICGifCommentMetadataReader,
+ 0x32557d3b, 0x69dc, 0x4f95, 0x83, 0x6e, 0xf5, 0x97, 0x2b, 0x2f, 0x61, 0x59}
+DEFINE_GUID!{CLSID_WICGifCommentMetadataWriter,
+ 0xa02797fc, 0xc4ae, 0x418c, 0xaf, 0x95, 0xe6, 0x37, 0xc7, 0xea, 0xd2, 0xa1}
+DEFINE_GUID!{CLSID_WICPngGamaMetadataReader,
+ 0x3692ca39, 0xe082, 0x4350, 0x9e, 0x1f, 0x37, 0x04, 0xcb, 0x08, 0x3c, 0xd5}
+DEFINE_GUID!{CLSID_WICPngGamaMetadataWriter,
+ 0xff036d13, 0x5d4b, 0x46dd, 0xb1, 0x0f, 0x10, 0x66, 0x93, 0xd9, 0xfe, 0x4f}
+DEFINE_GUID!{CLSID_WICPngBkgdMetadataReader,
+ 0x0ce7a4a6, 0x03e8, 0x4a60, 0x9d, 0x15, 0x28, 0x2e, 0xf3, 0x2e, 0xe7, 0xda}
+DEFINE_GUID!{CLSID_WICPngBkgdMetadataWriter,
+ 0x68e3f2fd, 0x31ae, 0x4441, 0xbb, 0x6a, 0xfd, 0x70, 0x47, 0x52, 0x5f, 0x90}
+DEFINE_GUID!{CLSID_WICPngItxtMetadataReader,
+ 0xaabfb2fa, 0x3e1e, 0x4a8f, 0x89, 0x77, 0x55, 0x56, 0xfb, 0x94, 0xea, 0x23}
+DEFINE_GUID!{CLSID_WICPngItxtMetadataWriter,
+ 0x31879719, 0xe751, 0x4df8, 0x98, 0x1d, 0x68, 0xdf, 0xf6, 0x77, 0x04, 0xed}
+DEFINE_GUID!{CLSID_WICPngChrmMetadataReader,
+ 0xf90b5f36, 0x367b, 0x402a, 0x9d, 0xd1, 0xbc, 0x0f, 0xd5, 0x9d, 0x8f, 0x62}
+DEFINE_GUID!{CLSID_WICPngChrmMetadataWriter,
+ 0xe23ce3eb, 0x5608, 0x4e83, 0xbc, 0xef, 0x27, 0xb1, 0x98, 0x7e, 0x51, 0xd7}
+DEFINE_GUID!{CLSID_WICPngHistMetadataReader,
+ 0x877a0bb7, 0xa313, 0x4491, 0x87, 0xb5, 0x2e, 0x6d, 0x05, 0x94, 0xf5, 0x20}
+DEFINE_GUID!{CLSID_WICPngHistMetadataWriter,
+ 0x8a03e749, 0x672e, 0x446e, 0xbf, 0x1f, 0x2c, 0x11, 0xd2, 0x33, 0xb6, 0xff}
+DEFINE_GUID!{CLSID_WICPngIccpMetadataReader,
+ 0xf5d3e63b, 0xcb0f, 0x4628, 0xa4, 0x78, 0x6d, 0x82, 0x44, 0xbe, 0x36, 0xb1}
+DEFINE_GUID!{CLSID_WICPngIccpMetadataWriter,
+ 0x16671e5f, 0x0ce6, 0x4cc4, 0x97, 0x68, 0xe8, 0x9f, 0xe5, 0x01, 0x8a, 0xde}
+DEFINE_GUID!{CLSID_WICPngSrgbMetadataReader,
+ 0xfb40360c, 0x547e, 0x4956, 0xa3, 0xb9, 0xd4, 0x41, 0x88, 0x59, 0xba, 0x66}
+DEFINE_GUID!{CLSID_WICPngSrgbMetadataWriter,
+ 0xa6ee35c6, 0x87ec, 0x47df, 0x9f, 0x22, 0x1d, 0x5a, 0xad, 0x84, 0x0c, 0x82}
+DEFINE_GUID!{CLSID_WICPngTimeMetadataReader,
+ 0xd94edf02, 0xefe5, 0x4f0d, 0x85, 0xc8, 0xf5, 0xa6, 0x8b, 0x30, 0x00, 0xb1}
+DEFINE_GUID!{CLSID_WICPngTimeMetadataWriter,
+ 0x1ab78400, 0xb5a3, 0x4d91, 0x8a, 0xce, 0x33, 0xfc, 0xd1, 0x49, 0x9b, 0xe6}
+DEFINE_GUID!{CLSID_WICDdsMetadataReader,
+ 0x276c88ca, 0x7533, 0x4a86, 0xb6, 0x76, 0x66, 0xb3, 0x60, 0x80, 0xd4, 0x84}
+DEFINE_GUID!{CLSID_WICDdsMetadataWriter,
+ 0xfd688bbd, 0x31ed, 0x4db7, 0xa7, 0x23, 0x93, 0x49, 0x27, 0xd3, 0x83, 0x67}
+ENUM!{enum WICMetadataCreationOptions {
+ WICMetadataCreationDefault = 0,
+ WICMetadataCreationAllowUnknown = WICMetadataCreationDefault,
+ WICMetadataCreationFailUnknown = 0x10000,
+ WICMetadataCreationMask = 0xffff0000,
+}}
+ENUM!{enum WICPersistOptions {
+ WICPersistOptionDefault = 0,
+ WICPersistOptionLittleEndian = 0,
+ WICPersistOptionBigEndian = 0x1,
+ WICPersistOptionStrictFormat = 0x2,
+ WICPersistOptionNoCacheStream = 0x4,
+ WICPersistOptionPreferUTF8 = 0x8,
+ WICPersistOptionMask = 0xffff,
+}}
+RIDL!{#[uuid(0xfeaa2a8d, 0xb3f3, 0x43e4, 0xb2, 0x5c, 0xd1, 0xde, 0x99, 0x0a, 0x1a, 0xe1)]
+interface IWICMetadataBlockReader(IWICMetadataBlockReaderVtbl): IUnknown(IUnknownVtbl) {
+ fn GetContainerFormat(
+ pguidContainerFormat: *mut GUID,
+ ) -> HRESULT,
+ fn GetCount(
+ pcCount: *mut UINT,
+ ) -> HRESULT,
+ fn GetReaderByIndex(
+ ppIMetadataReader: *mut *mut IWICMetadataReader,
+ ) -> HRESULT,
+ fn GetEnumerator(
+ ppIEnumMetadata: *mut IEnumUnknown,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x08fb9676, 0xb444, 0x41e8, 0x8d, 0xbe, 0x6a, 0x53, 0xa5, 0x42, 0xbf, 0xf1)]
+interface IWICMetadataBlockWriter(IWICMetadataBlockWriterVtbl):
+ IWICMetadataBlockReader(IWICMetadataBlockReaderVtbl) {
+ fn InitializeFromBlockReader(
+ pIMDBlockReader: *mut IWICMetadataBlockReader,
+ ) -> HRESULT,
+ fn GetWriterByIndex(
+ ppIMetadataWriter: *mut *mut IWICMetadataWriter,
+ ) -> HRESULT,
+ fn AddWriter(
+ pIMetadataWriter: *mut IWICMetadataWriter,
+ ) -> HRESULT,
+ fn SetWriterByIndex(
+ pIMetadataWriter: *mut IWICMetadataWriter,
+ ) -> HRESULT,
+ fn RemoveWriterByIndex(
+ nIndex: UINT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x9204fe99, 0xd8fc, 0x4fd5, 0xa0, 0x01, 0x95, 0x36, 0xb0, 0x67, 0xa8, 0x99)]
+interface IWICMetadataReader(IWICMetadataReaderVtbl): IUnknown(IUnknownVtbl) {
+ fn GetMetadataFormat(
+ pguidMetadataFormat: *mut GUID,
+ ) -> HRESULT,
+ fn GetMetadataHandlerInfo(
+ ppIHandler: *mut *mut IWICMetadataHandlerInfo,
+ ) -> HRESULT,
+ fn GetCount(
+ pcCount: *mut UINT,
+ ) -> HRESULT,
+ fn GetValueByIndex(
+ nIndex: UINT,
+ pvarSchema: *mut PROPVARIANT,
+ pvarId: *mut PROPVARIANT,
+ pvarValue: *mut PROPVARIANT,
+ ) -> HRESULT,
+ fn GetValue(
+ pvarSchema: *const PROPVARIANT,
+ pvarId: *const PROPVARIANT,
+ pvarValue: *mut PROPVARIANT,
+ ) -> HRESULT,
+ fn GetEnumerator(
+ ppIEnumMetadata: *mut *mut IWICEnumMetadataItem,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xf7836e16, 0x3be0, 0x470b, 0x86, 0xbb, 0x16, 0x0d, 0x0a, 0xec, 0xd7, 0xde)]
+interface IWICMetadataWriter(IWICMetadataWriterVtbl): IWICMetadataReader(IWICMetadataReaderVtbl) {
+ fn SetValue(
+ pvarSchema: *const PROPVARIANT,
+ pvarId: *const PROPVARIANT,
+ pvarValue: *const PROPVARIANT,
+ ) -> HRESULT,
+ fn SetValueByIndex(
+ nIndex: UINT,
+ pvarSchema: *const PROPVARIANT,
+ pvarId: *const PROPVARIANT,
+ pvarValue: *const PROPVARIANT,
+ ) -> HRESULT,
+ fn RemoveValue(
+ pvarSchema: *const PROPVARIANT,
+ pvarId: *const PROPVARIANT,
+ ) -> HRESULT,
+ fn RemoveValueByIndex(
+ nIndex: UINT,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x449494bc, 0xb468, 0x4927, 0x96, 0xd7, 0xba, 0x90, 0xd3, 0x1a, 0xb5, 0x05)]
+interface IWICStreamProvider(IWICStreamProviderVtbl): IUnknown(IUnknownVtbl) {
+ fn GetStream(
+ ppIStream: *mut *mut IStream,
+ ) -> HRESULT,
+ fn GetPersistOptions(
+ pdwPersistOptions: *mut DWORD,
+ ) -> HRESULT,
+ fn GetPreferredVendorGUID(
+ pguidPreferredVendor: *mut GUID,
+ ) -> HRESULT,
+ fn RefreshStream() -> HRESULT,
+}}
+RIDL!{#[uuid(0x00675040, 0x6908, 0x45f8, 0x86, 0xa3, 0x49, 0xc7, 0xdf, 0xd6, 0xd9, 0xad)]
+interface IWICPersistStream(IWICPersistStreamVtbl): IPersistStream(IPersistStreamVtbl) {
+ fn LoadEx(
+ pIStream: *mut IStream,
+ pguidPreferredVendor: *const GUID,
+ dwPersistOptions: DWORD,
+ ) -> HRESULT,
+ fn SaveEx(
+ pIStream: *mut IStream,
+ dwPersistOptions: DWORD,
+ fClearDirty: BOOL,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0xaba958bf, 0xc672, 0x44d1, 0x8d, 0x61, 0xce, 0x6d, 0xf2, 0xe6, 0x82, 0xc2)]
+interface IWICMetadataHandlerInfo(IWICMetadataHandlerInfoVtbl):
+ IWICComponentInfo(IWICComponentInfoVtbl) {
+ fn GetMetadataFormat(
+ pguidMetadataFormat: *mut GUID,
+ ) -> HRESULT,
+ fn GetContainerFormats(
+ cContainerFormats: UINT,
+ pguidContainerFormats: *mut GUID,
+ pcchActual: *mut UINT,
+ ) -> HRESULT,
+ fn GetDeviceManufacturer(
+ cchDeviceManufacturer: UINT,
+ wzDeviceManufacturer: *mut WCHAR,
+ pcchActual: *mut UINT,
+ ) -> HRESULT,
+ fn GetDeviceModels(
+ cchDeviceModels: UINT,
+ wzDeviceModels: *mut WCHAR,
+ pcchActual: *mut UINT,
+ ) -> HRESULT,
+ fn DoesRequireFullStream(
+ pfRequiresFullStream: *mut BOOL,
+ ) -> HRESULT,
+ fn DoesSupportPadding(
+ pfSupportsPadding: *mut BOOL,
+ ) -> HRESULT,
+ fn DoesRequireFixedSize(
+ pfFixedSize: *mut BOOL,
+ ) -> HRESULT,
+}}
+STRUCT!{struct WICMetadataPattern {
+ Position: ULARGE_INTEGER,
+ Length: ULONG,
+ Pattern: *mut BYTE,
+ Mask: *mut BYTE,
+ DataOffset: ULARGE_INTEGER,
+}}
+RIDL!{#[uuid(0xeebf1f5b, 0x07c1, 0x4447, 0xa3, 0xab, 0x22, 0xac, 0xaf, 0x78, 0xa8, 0x04)]
+interface IWICMetadataReaderInfo(IWICMetadataReaderInfoVtbl):
+ IWICMetadataHandlerInfo(IWICMetadataHandlerInfoVtbl) {
+ fn GetPatterns(
+ guidContainerFormat: REFGUID,
+ cbSize: UINT,
+ pPattern: *mut WICMetadataPattern,
+ pcCount: *mut UINT,
+ pcbActual: *mut UINT,
+ ) -> HRESULT,
+ fn MatchesPattern(
+ guidContainerFormat: REFGUID,
+ pIStream: *mut IStream,
+ pfMatches: *mut BOOL,
+ ) -> HRESULT,
+ fn CreateInstance(
+ ppIReader: *mut *mut IWICMetadataReader,
+ ) -> HRESULT,
+}}
+STRUCT!{struct WICMetadataHeader {
+ Position: ULARGE_INTEGER,
+ Length: ULONG,
+ Header: *mut BYTE,
+ DataOffset: ULARGE_INTEGER,
+}}
+RIDL!{#[uuid(0xb22e3fba, 0x3925, 0x4323, 0xb5, 0xc1, 0x9e, 0xbf, 0xc4, 0x30, 0xf2, 0x36)]
+interface IWICMetadataWriterInfo(IWICMetadataWriterInfoVtbl):
+ IWICMetadataHandlerInfo(IWICMetadataHandlerInfoVtbl) {
+ fn GetHeader(
+ guidContainerFormat: REFGUID,
+ cbSize: UINT,
+ pHeader: *mut WICMetadataHeader,
+ pcbActual: *mut UINT,
+ ) -> HRESULT,
+ fn CreateInstance(
+ ppIWriter: *mut *mut IWICMetadataWriter,
+ ) -> HRESULT,
+}}
+RIDL!{#[uuid(0x412d0c3a, 0x9650, 0x44fa, 0xaf, 0x5b, 0xdd, 0x2a, 0x06, 0xc8, 0xe8, 0xfb)]
+interface IWICComponentFactory(IWICComponentFactoryVtbl):
+ IWICImagingFactory(IWICImagingFactoryVtbl) {
+ fn CreateMetadataReader(
+ guidMetadataFormat: REFGUID,
+ pguidVendor: *const GUID,
+ dwOptions: DWORD,
+ pIStream: *mut IStream,
+ ppIReader: *mut *mut IWICMetadataReader,
+ ) -> HRESULT,
+ fn CreateMetadataReaderFromContainer(
+ guidContainerFormat: REFGUID,
+ pguidVendor: *const GUID,
+ dwOptions: DWORD,
+ pIStream: *mut IStream,
+ ppIReader: *mut *mut IWICMetadataReader,
+ ) -> HRESULT,
+ fn CreateMetadataWriter(
+ guidMetadataFormat: REFGUID,
+ pguidVendor: *const GUID,
+ dwMetadataOptions: DWORD,
+ ppIWriter: *mut *mut IWICMetadataWriter,
+ ) -> HRESULT,
+ fn CreateMetadataWriterFromReader(
+ pIReader: *mut IWICMetadataReader,
+ pguidVendor: *const GUID,
+ ppIWriter: *mut *mut IWICMetadataWriter,
+ ) -> HRESULT,
+ fn CreateQueryReaderFromBlockReader(
+ pIBlockReader: *mut IWICMetadataBlockReader,
+ ppIQueryReader: *mut *mut IWICMetadataQueryReader,
+ ) -> HRESULT,
+ fn CreateQueryWriterFromBlockWriter(
+ pIBlockWriter: *mut IWICMetadataBlockWriter,
+ ppIQueryWriter: *mut *mut IWICMetadataQueryWriter,
+ ) -> HRESULT,
+ fn CreateEncoderPropertyBag(
+ ppropOptions: *mut PROPBAG2,
+ cCount: UINT,
+ ppIPropertyBag: *mut *mut IPropertyBag2,
+ ) -> HRESULT,
+}}
+extern "system" {
+ pub fn WICMatchMetadataContent(
+ guidContainerFormat: REFGUID,
+ pguidVendor: *const GUID,
+ pIStream: *mut IStream,
+ pguidMetadataFormat: *mut GUID,
+ ) -> HRESULT;
+ pub fn WICSerializeMetadataContent(
+ guidContainerFormat: REFGUID,
+ pIWriter: *mut IWICMetadataWriter,
+ dwPersistOptions: DWORD,
+ pIStream: *mut IStream,
+ ) -> HRESULT;
+ pub fn WICGetMetadataContentSize(
+ guidContainerFormat: REFGUID,
+ pIWriter: *mut IWICMetadataWriter,
+ pcbSize: *mut ULARGE_INTEGER,
+ ) -> HRESULT;
+ pub fn BSTR_UserSize(
+ pFlags: *mut c_ulong,
+ Offset: c_ulong,
+ pBstr: *mut BSTR,
+ ) -> c_ulong;
+ pub fn BSTR_UserMarshal(
+ pFlags: *mut c_ulong,
+ pBuffer: *mut c_uchar,
+ pBstr: *mut BSTR,
+ ) -> *mut c_uchar;
+ pub fn BSTR_UserUnmarshal(
+ pFlags: *mut c_ulong,
+ pBuffer: *mut c_uchar,
+ pBstr: *mut BSTR,
+ ) -> *mut c_uchar;
+ pub fn BSTR_UserFree(
+ pFlags: *mut c_ulong,
+ pBstr: *mut BSTR,
+ );
+ pub fn CLIPFORMAT_UserSize(
+ pFlags: *mut c_ulong,
+ Offset: c_ulong,
+ pCF: *mut CLIPFORMAT,
+ ) -> c_ulong;
+ pub fn CLIPFORMAT_UserMarshal(
+ pFlags: *mut c_ulong,
+ pBuffer: *mut c_uchar,
+ pCF: *mut CLIPFORMAT,
+ ) -> *mut c_uchar;
+ pub fn CLIPFORMAT_UserUnmarshal(
+ pFlags: *mut c_ulong,
+ pBuffer: *mut c_uchar,
+ pCF: *mut CLIPFORMAT,
+ ) -> *mut c_uchar;
+ pub fn CLIPFORMAT_UserFree(
+ pFlags: *mut c_ulong,
+ pCF: *mut CLIPFORMAT,
+ );
+ pub fn LPSAFEARRAY_UserSize(
+ pFlags: *mut c_ulong,
+ Offset: c_ulong,
+ phBmp: *mut LPSAFEARRAY,
+ ) -> c_ulong;
+ pub fn LPSAFEARRAY_UserMarshal(
+ pFlags: *mut c_ulong,
+ pBuffer: *mut c_uchar,
+ pBstr: *mut LPSAFEARRAY,
+ ) -> *mut c_uchar;
+ pub fn LPSAFEARRAY_UserUnmarshal(
+ pFlags: *mut c_ulong,
+ pBuffer: *mut c_uchar,
+ pBstr: *mut LPSAFEARRAY,
+ ) -> *mut c_uchar;
+ pub fn LPSAFEARRAY_UserFree(
+ pFlags: *mut c_ulong,
+ pBstr: *mut LPSAFEARRAY,
+ );
+}
diff --git a/vendor/winapi/src/um/wincon.rs b/vendor/winapi/src/um/wincon.rs
new file mode 100644
index 000000000..9eb3a2290
--- /dev/null
+++ b/vendor/winapi/src/um/wincon.rs
@@ -0,0 +1,459 @@
+// 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.
+//! This module contains the public data structures, data types, and procedures exported by the NT
+//! console subsystem.
+use ctypes::c_void;
+use shared::minwindef::{BOOL, DWORD, LPDWORD, LPVOID, LPWORD, UINT, ULONG, WORD};
+use shared::windef::{COLORREF, HWND};
+use um::minwinbase::SECURITY_ATTRIBUTES;
+use um::wingdi::LF_FACESIZE;
+use um::winnt::{CHAR, HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, WCHAR};
+// Many definitions in wincontypes used to be defined in this file, so reexport them to avoid
+// breakage. For clarity they are imported in the order they are defined in that file rather
+// than winapi's usual alphabetical ordering, with some newlines and indentation to match their
+// grouping in the file.
+pub use um::wincontypes::{
+ COORD, PCOORD,
+ SMALL_RECT, PSMALL_RECT,
+ KEY_EVENT_RECORD_uChar, KEY_EVENT_RECORD, PKEY_EVENT_RECORD,
+ RIGHT_ALT_PRESSED, LEFT_ALT_PRESSED, RIGHT_CTRL_PRESSED, LEFT_CTRL_PRESSED, SHIFT_PRESSED,
+ NUMLOCK_ON, SCROLLLOCK_ON, CAPSLOCK_ON, ENHANCED_KEY, NLS_DBCSCHAR, NLS_ALPHANUMERIC,
+ NLS_KATAKANA, NLS_HIRAGANA, NLS_ROMAN, NLS_IME_CONVERSION, NLS_IME_DISABLE,
+ MOUSE_EVENT_RECORD, PMOUSE_EVENT_RECORD,
+ FROM_LEFT_1ST_BUTTON_PRESSED, RIGHTMOST_BUTTON_PRESSED, FROM_LEFT_2ND_BUTTON_PRESSED,
+ FROM_LEFT_3RD_BUTTON_PRESSED, FROM_LEFT_4TH_BUTTON_PRESSED, MOUSE_MOVED, DOUBLE_CLICK,
+ MOUSE_WHEELED, MOUSE_HWHEELED,
+ WINDOW_BUFFER_SIZE_RECORD, PWINDOW_BUFFER_SIZE_RECORD,
+ MENU_EVENT_RECORD, PMENU_EVENT_RECORD,
+ FOCUS_EVENT_RECORD, PFOCUS_EVENT_RECORD,
+ INPUT_RECORD_Event, INPUT_RECORD, PINPUT_RECORD,
+ KEY_EVENT, MOUSE_EVENT, WINDOW_BUFFER_SIZE_EVENT, MENU_EVENT, FOCUS_EVENT,
+ CHAR_INFO_Char, CHAR_INFO, PCHAR_INFO,
+ CONSOLE_FONT_INFO, PCONSOLE_FONT_INFO
+};
+pub const FOREGROUND_BLUE: WORD = 0x0001;
+pub const FOREGROUND_GREEN: WORD = 0x0002;
+pub const FOREGROUND_RED: WORD = 0x0004;
+pub const FOREGROUND_INTENSITY: WORD = 0x0008;
+pub const BACKGROUND_BLUE: WORD = 0x0010;
+pub const BACKGROUND_GREEN: WORD = 0x0020;
+pub const BACKGROUND_RED: WORD = 0x0040;
+pub const BACKGROUND_INTENSITY: WORD = 0x0080;
+pub const COMMON_LVB_LEADING_BYTE: WORD = 0x0100;
+pub const COMMON_LVB_TRAILING_BYTE: WORD = 0x0200;
+pub const COMMON_LVB_GRID_HORIZONTAL: WORD = 0x0400;
+pub const COMMON_LVB_GRID_LVERTICAL: WORD = 0x0800;
+pub const COMMON_LVB_GRID_RVERTICAL: WORD = 0x1000;
+pub const COMMON_LVB_REVERSE_VIDEO: WORD = 0x4000;
+pub const COMMON_LVB_UNDERSCORE: WORD = 0x8000;
+pub const COMMON_LVB_SBCSDBCS: WORD = 0x0300;
+STRUCT!{struct CONSOLE_SCREEN_BUFFER_INFO {
+ dwSize: COORD,
+ dwCursorPosition: COORD,
+ wAttributes: WORD,
+ srWindow: SMALL_RECT,
+ dwMaximumWindowSize: COORD,
+}}
+pub type PCONSOLE_SCREEN_BUFFER_INFO = *mut CONSOLE_SCREEN_BUFFER_INFO;
+STRUCT!{struct CONSOLE_SCREEN_BUFFER_INFOEX {
+ cbSize: ULONG,
+ dwSize: COORD,
+ dwCursorPosition: COORD,
+ wAttributes: WORD,
+ srWindow: SMALL_RECT,
+ dwMaximumWindowSize: COORD,
+ wPopupAttributes: WORD,
+ bFullscreenSupported: BOOL,
+ ColorTable: [COLORREF; 16],
+}}
+pub type PCONSOLE_SCREEN_BUFFER_INFOEX = *mut CONSOLE_SCREEN_BUFFER_INFOEX;
+STRUCT!{struct CONSOLE_CURSOR_INFO {
+ dwSize: DWORD,
+ bVisible: BOOL,
+}}
+pub type PCONSOLE_CURSOR_INFO = *mut CONSOLE_CURSOR_INFO;
+STRUCT!{struct CONSOLE_FONT_INFOEX {
+ cbSize: ULONG,
+ nFont: DWORD,
+ dwFontSize: COORD,
+ FontFamily: UINT,
+ FontWeight: UINT,
+ FaceName: [WCHAR; LF_FACESIZE],
+}}
+pub type PCONSOLE_FONT_INFOEX = *mut CONSOLE_FONT_INFOEX;
+pub const HISTORY_NO_DUP_FLAG: DWORD = 0x1;
+STRUCT!{struct CONSOLE_HISTORY_INFO {
+ cbSize: UINT,
+ HistoryBufferSize: UINT,
+ NumberOfHistoryBuffers: UINT,
+ dwFlags: DWORD,
+}}
+pub type PCONSOLE_HISTORY_INFO = *mut CONSOLE_HISTORY_INFO;
+STRUCT!{struct CONSOLE_SELECTION_INFO {
+ dwFlags: DWORD,
+ dwSelectionAnchor: COORD,
+ srSelection: SMALL_RECT,
+}}
+pub type PCONSOLE_SELECTION_INFO = *mut CONSOLE_SELECTION_INFO;
+pub const CONSOLE_NO_SELECTION: DWORD = 0x0000;
+pub const CONSOLE_SELECTION_IN_PROGRESS: DWORD = 0x0001;
+pub const CONSOLE_SELECTION_NOT_EMPTY: DWORD = 0x0002;
+pub const CONSOLE_MOUSE_SELECTION: DWORD = 0x0004;
+pub const CONSOLE_MOUSE_DOWN: DWORD = 0x0008;
+FN!{stdcall PHANDLER_ROUTINE(
+ CtrlType: DWORD,
+) -> BOOL}
+pub const CTRL_C_EVENT: DWORD = 0;
+pub const CTRL_BREAK_EVENT: DWORD = 1;
+pub const CTRL_CLOSE_EVENT: DWORD = 2;
+pub const CTRL_LOGOFF_EVENT: DWORD = 5;
+pub const CTRL_SHUTDOWN_EVENT: DWORD = 6;
+pub const ENABLE_PROCESSED_INPUT: DWORD = 0x0001;
+pub const ENABLE_LINE_INPUT: DWORD = 0x0002;
+pub const ENABLE_ECHO_INPUT: DWORD = 0x0004;
+pub const ENABLE_WINDOW_INPUT: DWORD = 0x0008;
+pub const ENABLE_MOUSE_INPUT: DWORD = 0x0010;
+pub const ENABLE_INSERT_MODE: DWORD = 0x0020;
+pub const ENABLE_QUICK_EDIT_MODE: DWORD = 0x0040;
+pub const ENABLE_EXTENDED_FLAGS: DWORD = 0x0080;
+pub const ENABLE_AUTO_POSITION: DWORD = 0x0100;
+pub const ENABLE_VIRTUAL_TERMINAL_INPUT: DWORD = 0x0200;
+pub const ENABLE_PROCESSED_OUTPUT: DWORD = 0x0001;
+pub const ENABLE_WRAP_AT_EOL_OUTPUT: DWORD = 0x0002;
+pub const ENABLE_VIRTUAL_TERMINAL_PROCESSING: DWORD = 0x0004;
+pub const DISABLE_NEWLINE_AUTO_RETURN: DWORD = 0x0008;
+pub const ENABLE_LVB_GRID_WORLDWIDE: DWORD = 0x0010;
+extern "system" {
+ pub fn PeekConsoleInputW(
+ hConsoleInput: HANDLE,
+ lpBuffer: PINPUT_RECORD,
+ nLength: DWORD,
+ lpNumberOfEventsRead: LPDWORD,
+ ) -> BOOL;
+ pub fn WriteConsoleInputA(
+ hConsoleInput: HANDLE,
+ lpBuffer: *const INPUT_RECORD,
+ nLength: DWORD,
+ lpNumberOfEventsWritten: LPDWORD,
+ ) -> BOOL;
+ pub fn WriteConsoleInputW(
+ hConsoleInput: HANDLE,
+ lpBuffer: *const INPUT_RECORD,
+ nLength: DWORD,
+ lpNumberOfEventsWritten: LPDWORD,
+ ) -> BOOL;
+ pub fn ReadConsoleOutputA(
+ hConsoleOutput: HANDLE,
+ lpBuffer: PCHAR_INFO,
+ dwBufferSize: COORD,
+ dwBufferCoord: COORD,
+ lpReadRegion: PSMALL_RECT,
+ ) -> BOOL;
+ pub fn ReadConsoleOutputW(
+ hConsoleOutput: HANDLE,
+ lpBuffer: PCHAR_INFO,
+ dwBufferSize: COORD,
+ dwBufferCoord: COORD,
+ lpReadRegion: PSMALL_RECT,
+ ) -> BOOL;
+ pub fn WriteConsoleOutputA(
+ hConsoleOutput: HANDLE,
+ lpBuffer: *const CHAR_INFO,
+ dwBufferSize: COORD,
+ dwBufferCoord: COORD,
+ lpWriteRegion: PSMALL_RECT,
+ ) -> BOOL;
+ pub fn WriteConsoleOutputW(
+ hConsoleOutput: HANDLE,
+ lpBuffer: *const CHAR_INFO,
+ dwBufferSize: COORD,
+ dwBufferCoord: COORD,
+ lpWriteRegion: PSMALL_RECT,
+ ) -> BOOL;
+ pub fn ReadConsoleOutputCharacterA(
+ hConsoleOutput: HANDLE,
+ lpCharacter: LPSTR,
+ nLength: DWORD,
+ dwReadCoord: COORD,
+ lpNumberOfCharsRead: LPDWORD,
+ ) -> BOOL;
+ pub fn ReadConsoleOutputCharacterW(
+ hConsoleOutput: HANDLE,
+ lpCharacter: LPWSTR,
+ nLength: DWORD,
+ dwReadCoord: COORD,
+ lpNumberOfCharsRead: LPDWORD,
+ ) -> BOOL;
+ pub fn ReadConsoleOutputAttribute(
+ hConsoleOutput: HANDLE,
+ lpAttribute: LPWORD,
+ nLength: DWORD,
+ dwReadCoord: COORD,
+ lpNumberOfAttrsRead: LPDWORD,
+ ) -> BOOL;
+ pub fn WriteConsoleOutputCharacterA(
+ hConsoleOutput: HANDLE,
+ lpCharacter: LPCSTR,
+ nLength: DWORD,
+ dwWriteCoord: COORD,
+ lpNumberOfCharsWritten: LPDWORD,
+ ) -> BOOL;
+ pub fn WriteConsoleOutputCharacterW(
+ hConsoleOutput: HANDLE,
+ lpCharacter: LPCWSTR,
+ nLength: DWORD,
+ dwWriteCoord: COORD,
+ lpNumberOfCharsWritten: LPDWORD,
+ ) -> BOOL;
+ pub fn WriteConsoleOutputAttribute(
+ hConsoleOutput: HANDLE,
+ lpAttribute: *const WORD,
+ nLength: DWORD,
+ dwWriteCoord: COORD,
+ lpNumberOfAttrsWritten: LPDWORD,
+ ) -> BOOL;
+ pub fn FillConsoleOutputCharacterA(
+ hConsoleOutput: HANDLE,
+ cCharacter: CHAR,
+ nLength: DWORD,
+ dwWriteCoord: COORD,
+ lpNumberOfCharsWritten: LPDWORD,
+ ) -> BOOL;
+ pub fn FillConsoleOutputCharacterW(
+ hConsoleOutput: HANDLE,
+ cCharacter: WCHAR,
+ nLength: DWORD,
+ dwWriteCoord: COORD,
+ lpNumberOfCharsWritten: LPDWORD,
+ ) -> BOOL;
+ pub fn FillConsoleOutputAttribute(
+ hConsoleOutput: HANDLE,
+ wAttribute: WORD,
+ nLength: DWORD,
+ dwWriteCoord: COORD,
+ lpNumberOfAttrsWritten: LPDWORD,
+ ) -> BOOL;
+}
+pub const CONSOLE_REAL_OUTPUT_HANDLE: *mut c_void = -2isize as *mut c_void;
+pub const CONSOLE_REAL_INPUT_HANDLE: *mut c_void = -3isize as *mut c_void;
+extern "system" {
+ pub fn GetConsoleScreenBufferInfo(
+ hConsoleOutput: HANDLE,
+ lpConsoleScreenBufferInfo: PCONSOLE_SCREEN_BUFFER_INFO,
+ ) -> BOOL;
+ pub fn GetConsoleScreenBufferInfoEx(
+ hConsoleOutput: HANDLE,
+ lpConsoleScreenBufferInfoEx: PCONSOLE_SCREEN_BUFFER_INFOEX,
+ ) -> BOOL;
+ pub fn SetConsoleScreenBufferInfoEx(
+ hConsoleOutput: HANDLE,
+ lpConsoleScreenBufferInfoEx: PCONSOLE_SCREEN_BUFFER_INFOEX,
+ ) -> BOOL;
+ pub fn GetLargestConsoleWindowSize(
+ hConsoleOutput: HANDLE,
+ ) -> COORD;
+ pub fn GetConsoleCursorInfo(
+ hConsoleOutput: HANDLE,
+ lpConsoleCursorInfo: PCONSOLE_CURSOR_INFO,
+ ) -> BOOL;
+ pub fn GetCurrentConsoleFont(
+ hConsoleOutput: HANDLE,
+ bMaximumWindow: BOOL,
+ lpConsoleCurrentFont: PCONSOLE_FONT_INFO,
+ ) -> BOOL;
+ pub fn GetCurrentConsoleFontEx(
+ hConsoleOutput: HANDLE,
+ bMaximumWindow: BOOL,
+ lpConsoleCurrentFontEx: PCONSOLE_FONT_INFOEX,
+ ) -> BOOL;
+ pub fn SetCurrentConsoleFontEx(
+ hConsoleOutput: HANDLE,
+ bMaximumWindow: BOOL,
+ lpConsoleCurrentFontEx: PCONSOLE_FONT_INFOEX,
+ ) -> BOOL;
+ pub fn GetConsoleHistoryInfo(
+ lpConsoleHistoryInfo: PCONSOLE_HISTORY_INFO,
+ ) -> BOOL;
+ pub fn SetConsoleHistoryInfo(
+ lpConsoleHistoryInfo: PCONSOLE_HISTORY_INFO,
+ ) -> BOOL;
+ pub fn GetConsoleFontSize(
+ hConsoleOutput: HANDLE,
+ nFont: DWORD,
+ ) -> COORD;
+ pub fn GetConsoleSelectionInfo(
+ lpConsoleSelectionInfo: PCONSOLE_SELECTION_INFO,
+ ) -> BOOL;
+ pub fn GetNumberOfConsoleMouseButtons(
+ lpNumberOfMouseButtons: LPDWORD,
+ ) -> BOOL;
+ pub fn SetConsoleActiveScreenBuffer(
+ hConsoleOutput: HANDLE,
+ ) -> BOOL;
+ pub fn FlushConsoleInputBuffer(
+ hConsoleInput: HANDLE,
+ ) -> BOOL;
+ pub fn SetConsoleScreenBufferSize(
+ hConsoleOutput: HANDLE,
+ dwSize: COORD,
+ ) -> BOOL;
+ pub fn SetConsoleCursorPosition(
+ hConsoleOutput: HANDLE,
+ dwCursorPosition: COORD,
+ ) -> BOOL;
+ pub fn SetConsoleCursorInfo(
+ hConsoleOutput: HANDLE,
+ lpConsoleCursorInfo: *const CONSOLE_CURSOR_INFO,
+ ) -> BOOL;
+ pub fn ScrollConsoleScreenBufferA(
+ hConsoleOutput: HANDLE,
+ lpScrollRectangle: *const SMALL_RECT,
+ lpClipRectangle: *const SMALL_RECT,
+ dwDestinationOrigin: COORD,
+ lpFill: *const CHAR_INFO,
+ ) -> BOOL;
+ pub fn ScrollConsoleScreenBufferW(
+ hConsoleOutput: HANDLE,
+ lpScrollRectangle: *const SMALL_RECT,
+ lpClipRectangle: *const SMALL_RECT,
+ dwDestinationOrigin: COORD,
+ lpFill: *const CHAR_INFO,
+ ) -> BOOL;
+ pub fn SetConsoleWindowInfo(
+ hConsoleOutput: HANDLE,
+ bAbsolute: BOOL,
+ lpConsoleWindow: *const SMALL_RECT,
+ ) -> BOOL;
+ pub fn SetConsoleTextAttribute(
+ hConsoleOutput: HANDLE,
+ wAttributes: WORD,
+ ) -> BOOL;
+ pub fn GenerateConsoleCtrlEvent(
+ dwCtrlEvent: DWORD,
+ dwProcessGroupId: DWORD,
+ ) -> BOOL;
+ pub fn FreeConsole() -> BOOL;
+ pub fn AttachConsole(
+ dwProcessId: DWORD,
+ ) -> BOOL;
+}
+pub const ATTACH_PARENT_PROCESS: DWORD = 0xFFFFFFFF;
+extern "system" {
+ pub fn GetConsoleTitleA(
+ lpConsoleTitle: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetConsoleTitleW(
+ lpConsoleTitle: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetConsoleOriginalTitleA(
+ lpConsoleTitle: LPSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn GetConsoleOriginalTitleW(
+ lpConsoleTitle: LPWSTR,
+ nSize: DWORD,
+ ) -> DWORD;
+ pub fn SetConsoleTitleA(
+ lpConsoleTitle: LPCSTR,
+ ) -> BOOL;
+ pub fn SetConsoleTitleW(
+ lpConsoleTitle: LPCWSTR,
+ ) -> BOOL;
+}
+STRUCT!{struct CONSOLE_READCONSOLE_CONTROL {
+ nLength: ULONG,
+ nInitialChars: ULONG,
+ dwCtrlWakeupMask: ULONG,
+ dwControlKeyState: ULONG,
+}}
+pub type PCONSOLE_READCONSOLE_CONTROL = *mut CONSOLE_READCONSOLE_CONTROL;
+pub const CONSOLE_TEXTMODE_BUFFER: DWORD = 1;
+extern "system" {
+ pub fn CreateConsoleScreenBuffer(
+ dwDesiredAccess: DWORD,
+ dwShareMode: DWORD,
+ lpSecurityAttributes: *const SECURITY_ATTRIBUTES,
+ dwFlags: DWORD,
+ lpScreenBufferData: LPVOID,
+ ) -> HANDLE;
+ pub fn SetConsoleCP(
+ wCodePageID: UINT,
+ ) -> BOOL;
+ pub fn SetConsoleOutputCP(
+ wCodePageID: UINT,
+ ) -> BOOL;
+}
+pub const CONSOLE_FULLSCREEN: DWORD = 1;
+pub const CONSOLE_FULLSCREEN_HARDWARE: DWORD = 2;
+extern "system" {
+ pub fn GetConsoleDisplayMode(
+ lpModeFlags: LPDWORD,
+ ) -> BOOL;
+}
+pub const CONSOLE_FULLSCREEN_MODE: DWORD = 1;
+pub const CONSOLE_WINDOWED_MODE: DWORD = 2;
+extern "system" {
+ pub fn SetConsoleDisplayMode(
+ hConsoleOutput: HANDLE,
+ dwFlags: DWORD,
+ lpNewScreenBufferDimensions: PCOORD,
+ ) -> BOOL;
+ pub fn GetConsoleWindow() -> HWND;
+ pub fn GetConsoleProcessList(
+ lpdwProcessList: LPDWORD,
+ dwProcessCount: DWORD,
+ ) -> DWORD;
+ pub fn AddConsoleAliasA(
+ Source: LPSTR,
+ Target: LPSTR,
+ ExeName: LPSTR,
+ ) -> BOOL;
+ pub fn AddConsoleAliasW(
+ Source: LPWSTR,
+ Target: LPWSTR,
+ ExeName: LPWSTR,
+ ) -> BOOL;
+ pub fn GetConsoleAliasA(
+ Source: LPSTR,
+ TargetBuffer: LPSTR,
+ TargetBufferLength: DWORD,
+ ExeName: LPSTR,
+ ) -> DWORD;
+ pub fn GetConsoleAliasW(
+ Source: LPWSTR,
+ TargetBuffer: LPWSTR,
+ TargetBufferLength: DWORD,
+ ExeName: LPWSTR,
+ ) -> DWORD;
+ pub fn GetConsoleAliasesLengthA(
+ ExeName: LPSTR,
+ ) -> DWORD;
+ pub fn GetConsoleAliasesLengthW(
+ ExeName: LPWSTR,
+ ) -> DWORD;
+ pub fn GetConsoleAliasExesLengthA() -> DWORD;
+ pub fn GetConsoleAliasExesLengthW() -> DWORD;
+ pub fn GetConsoleAliasesA(
+ AliasBuffer: LPSTR,
+ AliasBufferLength: DWORD,
+ ExeName: LPSTR,
+ ) -> DWORD;
+ pub fn GetConsoleAliasesW(
+ AliasBuffer: LPWSTR,
+ AliasBufferLength: DWORD,
+ ExeName: LPWSTR,
+ ) -> DWORD;
+ pub fn GetConsoleAliasExesA(
+ ExeNameBuffer: LPSTR,
+ ExeNameBufferLength: DWORD,
+ ) -> DWORD;
+ pub fn GetConsoleAliasExesW(
+ ExeNameBuffer: LPWSTR,
+ ExeNameBufferLength: DWORD,
+ ) -> DWORD;
+}
diff --git a/vendor/winapi/src/um/wincontypes.rs b/vendor/winapi/src/um/wincontypes.rs
new file mode 100644
index 000000000..ab37d0201
--- /dev/null
+++ b/vendor/winapi/src/um/wincontypes.rs
@@ -0,0 +1,114 @@
+// 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.
+//! This module contains the public data structures, data types, and procedures exported by the NT
+//! console subsystem.
+use ctypes::c_void;
+use shared::minwindef::{BOOL, DWORD, UINT, WORD};
+use um::winnt::{CHAR, SHORT, WCHAR};
+STRUCT!{struct COORD {
+ X: SHORT,
+ Y: SHORT,
+}}
+pub type PCOORD = *mut COORD;
+STRUCT!{struct SMALL_RECT {
+ Left: SHORT,
+ Top: SHORT,
+ Right: SHORT,
+ Bottom: SHORT,
+}}
+pub type PSMALL_RECT = *mut SMALL_RECT;
+UNION!{union KEY_EVENT_RECORD_uChar {
+ [u16; 1],
+ UnicodeChar UnicodeChar_mut: WCHAR,
+ AsciiChar AsciiChar_mut: CHAR,
+}}
+STRUCT!{struct KEY_EVENT_RECORD {
+ bKeyDown: BOOL,
+ wRepeatCount: WORD,
+ wVirtualKeyCode: WORD,
+ wVirtualScanCode: WORD,
+ uChar: KEY_EVENT_RECORD_uChar,
+ dwControlKeyState: DWORD,
+}}
+pub type PKEY_EVENT_RECORD = *mut KEY_EVENT_RECORD;
+pub const RIGHT_ALT_PRESSED: DWORD = 0x0001;
+pub const LEFT_ALT_PRESSED: DWORD = 0x0002;
+pub const RIGHT_CTRL_PRESSED: DWORD = 0x0004;
+pub const LEFT_CTRL_PRESSED: DWORD = 0x0008;
+pub const SHIFT_PRESSED: DWORD = 0x0010;
+pub const NUMLOCK_ON: DWORD = 0x0020;
+pub const SCROLLLOCK_ON: DWORD = 0x0040;
+pub const CAPSLOCK_ON: DWORD = 0x0080;
+pub const ENHANCED_KEY: DWORD = 0x0100;
+pub const NLS_DBCSCHAR: DWORD = 0x00010000;
+pub const NLS_ALPHANUMERIC: DWORD = 0x00000000;
+pub const NLS_KATAKANA: DWORD = 0x00020000;
+pub const NLS_HIRAGANA: DWORD = 0x00040000;
+pub const NLS_ROMAN: DWORD = 0x00400000;
+pub const NLS_IME_CONVERSION: DWORD = 0x00800000;
+pub const NLS_IME_DISABLE: DWORD = 0x20000000;
+STRUCT!{struct MOUSE_EVENT_RECORD {
+ dwMousePosition: COORD,
+ dwButtonState: DWORD,
+ dwControlKeyState: DWORD,
+ dwEventFlags: DWORD,
+}}
+pub type PMOUSE_EVENT_RECORD = *mut MOUSE_EVENT_RECORD;
+pub const FROM_LEFT_1ST_BUTTON_PRESSED: DWORD = 0x0001;
+pub const RIGHTMOST_BUTTON_PRESSED: DWORD = 0x0002;
+pub const FROM_LEFT_2ND_BUTTON_PRESSED: DWORD = 0x0004;
+pub const FROM_LEFT_3RD_BUTTON_PRESSED: DWORD = 0x0008;
+pub const FROM_LEFT_4TH_BUTTON_PRESSED: DWORD = 0x0010;
+pub const MOUSE_MOVED: DWORD = 0x0001;
+pub const DOUBLE_CLICK: DWORD = 0x0002;
+pub const MOUSE_WHEELED: DWORD = 0x0004;
+pub const MOUSE_HWHEELED: DWORD = 0x0008;
+STRUCT!{struct WINDOW_BUFFER_SIZE_RECORD {
+ dwSize: COORD,
+}}
+pub type PWINDOW_BUFFER_SIZE_RECORD = *mut WINDOW_BUFFER_SIZE_RECORD;
+STRUCT!{struct MENU_EVENT_RECORD {
+ dwCommandId: UINT,
+}}
+pub type PMENU_EVENT_RECORD = *mut MENU_EVENT_RECORD;
+STRUCT!{struct FOCUS_EVENT_RECORD {
+ bSetFocus: BOOL,
+}}
+pub type PFOCUS_EVENT_RECORD = *mut FOCUS_EVENT_RECORD;
+UNION!{union INPUT_RECORD_Event {
+ [u32; 4],
+ KeyEvent KeyEvent_mut: KEY_EVENT_RECORD,
+ MouseEvent MouseEvent_mut: MOUSE_EVENT_RECORD,
+ WindowBufferSizeEvent WindowBufferSizeEvent_mut: WINDOW_BUFFER_SIZE_RECORD,
+ MenuEvent MenuEvent_mut: MENU_EVENT_RECORD,
+ FocusEvent FocusEvent_mut: FOCUS_EVENT_RECORD,
+}}
+STRUCT!{struct INPUT_RECORD {
+ EventType: WORD,
+ Event: INPUT_RECORD_Event,
+}}
+pub type PINPUT_RECORD = *mut INPUT_RECORD;
+pub const KEY_EVENT: WORD = 0x0001;
+pub const MOUSE_EVENT: WORD = 0x0002;
+pub const WINDOW_BUFFER_SIZE_EVENT: WORD = 0x0004;
+pub const MENU_EVENT: WORD = 0x0008;
+pub const FOCUS_EVENT: WORD = 0x0010;
+UNION!{union CHAR_INFO_Char {
+ [u16; 1],
+ UnicodeChar UnicodeChar_mut: WCHAR,
+ AsciiChar AsciiChar_mut: CHAR,
+}}
+STRUCT!{struct CHAR_INFO {
+ Char: CHAR_INFO_Char,
+ Attributes: WORD,
+}}
+pub type PCHAR_INFO = *mut CHAR_INFO;
+STRUCT!{struct CONSOLE_FONT_INFO {
+ nFont: DWORD,
+ dwFontSize: COORD,
+}}
+pub type PCONSOLE_FONT_INFO = *mut CONSOLE_FONT_INFO;
+pub type HPCON = *mut c_void;
diff --git a/vendor/winapi/src/um/wincred.rs b/vendor/winapi/src/um/wincred.rs
new file mode 100644
index 000000000..660837e73
--- /dev/null
+++ b/vendor/winapi/src/um/wincred.rs
@@ -0,0 +1,532 @@
+// 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.
+//! Authentication API Prototypes and Definitions
+use shared::minwindef::{
+ BOOL, DWORD, FILETIME, LPBYTE, LPCVOID, LPDWORD, LPVOID, PBOOL, PBYTE, UCHAR, ULONG
+};
+use shared::windef::{HBITMAP, HWND};
+use um::sspi::PCtxtHandle;
+use um::winnt::{CHAR, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PCSTR, PCWSTR, PSTR, PVOID, PWSTR, WCHAR};
+// STATUS_*
+pub const NERR_BASE: DWORD = 2100;
+pub const NERR_PasswordExpired: DWORD = NERR_BASE + 142;
+pub const CRED_MAX_STRING_LENGTH: DWORD = 256;
+pub const CRED_MAX_USERNAME_LENGTH: DWORD = 256 + 1 + 256;
+pub const CRED_MAX_GENERIC_TARGET_NAME_LENGTH: DWORD = 32767;
+pub const CRED_MAX_DOMAIN_TARGET_NAME_LENGTH: DWORD = 256 + 1 + 80;
+pub const CRED_MAX_TARGETNAME_NAMESPACE_LENGTH: DWORD = 256;
+pub const CRED_MAX_TARGETNAME_ATTRIBUTE_LENGTH: DWORD = 256;
+pub const CRED_MAX_VALUE_SIZE: DWORD = 256;
+pub const CRED_MAX_ATTRIBUTES: DWORD = 64;
+STRUCT!{struct CREDENTIAL_ATTRIBUTEA {
+ Keyword: LPSTR,
+ Flags: DWORD,
+ ValueSize: DWORD,
+ Value: LPBYTE,
+}}
+pub type PCREDENTIAL_ATTRIBUTEA = *mut CREDENTIAL_ATTRIBUTEA;
+STRUCT!{struct CREDENTIAL_ATTRIBUTEW {
+ Keyword: LPWSTR,
+ Flags: DWORD,
+ ValueSize: DWORD,
+ Value: LPBYTE,
+}}
+pub type PCREDENTIAL_ATTRIBUTEW = *mut CREDENTIAL_ATTRIBUTEW;
+pub const CRED_LOGON_TYPES_MASK: DWORD = 0xF000;
+pub const CRED_FLAGS_PASSWORD_FOR_CERT: DWORD = 0x0001;
+pub const CRED_FLAGS_PROMPT_NOW: DWORD = 0x0002;
+pub const CRED_FLAGS_USERNAME_TARGET: DWORD = 0x0004;
+pub const CRED_FLAGS_OWF_CRED_BLOB: DWORD = 0x0008;
+pub const CRED_FLAGS_REQUIRE_CONFIRMATION: DWORD = 0x0010;
+pub const CRED_FLAGS_WILDCARD_MATCH: DWORD = 0x0020;
+pub const CRED_FLAGS_VALID_FLAGS: DWORD = 0xF03F;
+pub const CRED_FLAGS_VALID_INPUT_FLAGS: DWORD = 0xF01F;
+pub const CRED_TYPE_GENERIC: DWORD = 1;
+pub const CRED_TYPE_DOMAIN_PASSWORD: DWORD = 2;
+pub const CRED_TYPE_DOMAIN_CERTIFICATE: DWORD = 3;
+pub const CRED_TYPE_DOMAIN_VISIBLE_PASSWORD: DWORD = 4;
+pub const CRED_TYPE_GENERIC_CERTIFICATE: DWORD = 5;
+pub const CRED_TYPE_DOMAIN_EXTENDED: DWORD = 6;
+pub const CRED_TYPE_MAXIMUM: DWORD = 7;
+pub const CRED_TYPE_MAXIMUM_EX: DWORD = CRED_TYPE_MAXIMUM + 1000;
+pub const CRED_MAX_CREDENTIAL_BLOB_SIZE: DWORD = 5 * 512;
+pub const CRED_PERSIST_NONE: DWORD = 0;
+pub const CRED_PERSIST_SESSION: DWORD = 1;
+pub const CRED_PERSIST_LOCAL_MACHINE: DWORD = 2;
+pub const CRED_PERSIST_ENTERPRISE: DWORD = 3;
+STRUCT!{struct CREDENTIALA {
+ Flags: DWORD,
+ Type: DWORD,
+ TargetName: LPSTR,
+ Comment: LPSTR,
+ LastWritten: FILETIME,
+ CredentialBlobSize: DWORD,
+ CredentialBlob: LPBYTE,
+ Persist: DWORD,
+ AttributeCount: DWORD,
+ Attributes: PCREDENTIAL_ATTRIBUTEA,
+ TargetAlias: LPSTR,
+ UserName: LPSTR,
+}}
+pub type PCREDENTIALA = *mut CREDENTIALA;
+STRUCT!{struct CREDENTIALW {
+ Flags: DWORD,
+ Type: DWORD,
+ TargetName: LPWSTR,
+ Comment: LPWSTR,
+ LastWritten: FILETIME,
+ CredentialBlobSize: DWORD,
+ CredentialBlob: LPBYTE,
+ Persist: DWORD,
+ AttributeCount: DWORD,
+ Attributes: PCREDENTIAL_ATTRIBUTEW,
+ TargetAlias: LPWSTR,
+ UserName: LPWSTR,
+}}
+pub type PCREDENTIALW = *mut CREDENTIALW;
+pub const CRED_TI_SERVER_FORMAT_UNKNOWN: ULONG = 0x0001;
+pub const CRED_TI_DOMAIN_FORMAT_UNKNOWN: ULONG = 0x0002;
+pub const CRED_TI_ONLY_PASSWORD_REQUIRED: ULONG = 0x0004;
+pub const CRED_TI_USERNAME_TARGET: ULONG = 0x0008;
+pub const CRED_TI_CREATE_EXPLICIT_CRED: ULONG = 0x0010;
+pub const CRED_TI_WORKGROUP_MEMBER: ULONG = 0x0020;
+pub const CRED_TI_VALID_FLAGS: ULONG = 0xF07F;
+STRUCT!{struct CREDENTIAL_TARGET_INFORMATIONA {
+ TargetName: LPSTR,
+ NetbiosServerName: LPSTR,
+ DnsServerName: LPSTR,
+ NetbiosDomainName: LPSTR,
+ DnsDomainName: LPSTR,
+ DnsTreeName: LPSTR,
+ PackageName: LPSTR,
+ Flags: ULONG,
+ CredTypeCount: DWORD,
+ CredTypes: LPDWORD,
+}}
+pub type PCREDENTIAL_TARGET_INFORMATIONA = *mut CREDENTIAL_TARGET_INFORMATIONA;
+STRUCT!{struct CREDENTIAL_TARGET_INFORMATIONW {
+ TargetName: LPWSTR,
+ NetbiosServerName: LPWSTR,
+ DnsServerName: LPWSTR,
+ NetbiosDomainName: LPWSTR,
+ DnsDomainName: LPWSTR,
+ DnsTreeName: LPWSTR,
+ PackageName: LPWSTR,
+ Flags: ULONG,
+ CredTypeCount: DWORD,
+ CredTypes: LPDWORD,
+}}
+pub type PCREDENTIAL_TARGET_INFORMATIONW = *mut CREDENTIAL_TARGET_INFORMATIONW;
+pub const CERT_HASH_LENGTH: usize = 20;
+STRUCT!{struct CERT_CREDENTIAL_INFO {
+ cbSize: ULONG,
+ rgbHashOfCert: [UCHAR; CERT_HASH_LENGTH],
+}}
+pub type PCERT_CREDENTIAL_INFO = *mut CERT_CREDENTIAL_INFO;
+STRUCT!{struct USERNAME_TARGET_CREDENTIAL_INFO {
+ UserName: LPWSTR,
+}}
+pub type PUSERNAME_TARGET_CREDENTIAL_INFO = *mut USERNAME_TARGET_CREDENTIAL_INFO;
+STRUCT!{struct BINARY_BLOB_CREDENTIAL_INFO {
+ cbBlob: ULONG,
+ pbBlob: LPBYTE,
+}}
+pub type PBINARY_BLOB_CREDENTIAL_INFO = *mut BINARY_BLOB_CREDENTIAL_INFO;
+ENUM!{enum CRED_MARSHAL_TYPE {
+ CertCredential = 1,
+ UsernameTargetCredential,
+ BinaryBlobCredential,
+ UsernameForPackedCredentials,
+}}
+pub type PCRED_MARSHAL_TYPE = *mut CRED_MARSHAL_TYPE;
+ENUM!{enum CRED_PROTECTION_TYPE {
+ CredUnprotected,
+ CredUserProtection,
+ CredTrustedProtection,
+}}
+pub type PCRED_PROTECTION_TYPE = *mut CRED_PROTECTION_TYPE;
+pub const CRED_PACK_PROTECTED_CREDENTIALS: DWORD = 0x1;
+pub const CRED_PACK_WOW_BUFFER: DWORD = 0x2;
+pub const CRED_PACK_GENERIC_CREDENTIALS: DWORD = 0x4;
+pub const CRED_PACK_ID_PROVIDER_CREDENTIALS: DWORD = 0x8;
+STRUCT!{struct CREDUI_INFOA {
+ cbSize: DWORD,
+ hwndParent: HWND,
+ pszMessageText: PCSTR,
+ pszCaptionText: PCSTR,
+ hbmBanner: HBITMAP,
+}}
+pub type PCREDUI_INFOA = *mut CREDUI_INFOA;
+STRUCT!{struct CREDUI_INFOW {
+ cbSize: DWORD,
+ hwndParent: HWND,
+ pszMessageText: PCWSTR,
+ pszCaptionText: PCWSTR,
+ hbmBanner: HBITMAP,
+}}
+pub type PCREDUI_INFOW = *mut CREDUI_INFOW;
+pub const CREDUI_MAX_MESSAGE_LENGTH: DWORD = 1024;
+pub const CREDUI_MAX_CAPTION_LENGTH: DWORD = 128;
+pub const CREDUI_MAX_GENERIC_TARGET_LENGTH: DWORD = CRED_MAX_GENERIC_TARGET_NAME_LENGTH;
+pub const CREDUI_MAX_DOMAIN_TARGET_LENGTH: DWORD = CRED_MAX_DOMAIN_TARGET_NAME_LENGTH;
+pub const CREDUI_MAX_USERNAME_LENGTH: DWORD = CRED_MAX_USERNAME_LENGTH;
+pub const CREDUI_MAX_PASSWORD_LENGTH: DWORD = 512 / 2;
+pub const CREDUI_FLAGS_INCORRECT_PASSWORD: DWORD = 0x00001;
+pub const CREDUI_FLAGS_DO_NOT_PERSIST: DWORD = 0x00002;
+pub const CREDUI_FLAGS_REQUEST_ADMINISTRATOR: DWORD = 0x00004;
+pub const CREDUI_FLAGS_EXCLUDE_CERTIFICATES: DWORD = 0x00008;
+pub const CREDUI_FLAGS_REQUIRE_CERTIFICATE: DWORD = 0x00010;
+pub const CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX: DWORD = 0x00040;
+pub const CREDUI_FLAGS_ALWAYS_SHOW_UI: DWORD = 0x00080;
+pub const CREDUI_FLAGS_REQUIRE_SMARTCARD: DWORD = 0x00100;
+pub const CREDUI_FLAGS_PASSWORD_ONLY_OK: DWORD = 0x00200;
+pub const CREDUI_FLAGS_VALIDATE_USERNAME: DWORD = 0x00400;
+pub const CREDUI_FLAGS_COMPLETE_USERNAME: DWORD = 0x00800;
+pub const CREDUI_FLAGS_PERSIST: DWORD = 0x01000;
+pub const CREDUI_FLAGS_SERVER_CREDENTIAL: DWORD = 0x04000;
+pub const CREDUI_FLAGS_EXPECT_CONFIRMATION: DWORD = 0x20000;
+pub const CREDUI_FLAGS_GENERIC_CREDENTIALS: DWORD = 0x40000;
+pub const CREDUI_FLAGS_USERNAME_TARGET_CREDENTIALS: DWORD = 0x80000;
+pub const CREDUI_FLAGS_KEEP_USERNAME: DWORD = 0x100000;
+pub const CREDUI_FLAGS_PROMPT_VALID: DWORD = CREDUI_FLAGS_INCORRECT_PASSWORD
+ | CREDUI_FLAGS_DO_NOT_PERSIST | CREDUI_FLAGS_REQUEST_ADMINISTRATOR
+ | CREDUI_FLAGS_EXCLUDE_CERTIFICATES | CREDUI_FLAGS_REQUIRE_CERTIFICATE
+ | CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX | CREDUI_FLAGS_ALWAYS_SHOW_UI
+ | CREDUI_FLAGS_REQUIRE_SMARTCARD | CREDUI_FLAGS_PASSWORD_ONLY_OK
+ | CREDUI_FLAGS_VALIDATE_USERNAME | CREDUI_FLAGS_COMPLETE_USERNAME | CREDUI_FLAGS_PERSIST
+ | CREDUI_FLAGS_SERVER_CREDENTIAL | CREDUI_FLAGS_EXPECT_CONFIRMATION
+ | CREDUI_FLAGS_GENERIC_CREDENTIALS | CREDUI_FLAGS_USERNAME_TARGET_CREDENTIALS
+ | CREDUI_FLAGS_KEEP_USERNAME;
+pub const CREDUIWIN_GENERIC: DWORD = 0x00000001;
+pub const CREDUIWIN_CHECKBOX: DWORD = 0x00000002;
+pub const CREDUIWIN_AUTHPACKAGE_ONLY: DWORD = 0x00000010;
+pub const CREDUIWIN_IN_CRED_ONLY: DWORD = 0x00000020;
+pub const CREDUIWIN_ENUMERATE_ADMINS: DWORD = 0x00000100;
+pub const CREDUIWIN_ENUMERATE_CURRENT_USER: DWORD = 0x00000200;
+pub const CREDUIWIN_SECURE_PROMPT: DWORD = 0x00001000;
+pub const CREDUIWIN_PREPROMPTING: DWORD = 0x00002000;
+pub const CREDUIWIN_PACK_32_WOW: DWORD = 0x10000000;
+pub const CREDUIWIN_VALID_FLAGS: DWORD = CREDUIWIN_GENERIC | CREDUIWIN_CHECKBOX
+ | CREDUIWIN_AUTHPACKAGE_ONLY | CREDUIWIN_IN_CRED_ONLY | CREDUIWIN_ENUMERATE_ADMINS
+ | CREDUIWIN_ENUMERATE_CURRENT_USER | CREDUIWIN_SECURE_PROMPT | CREDUIWIN_PREPROMPTING
+ | CREDUIWIN_PACK_32_WOW;
+pub const CRED_PRESERVE_CREDENTIAL_BLOB: DWORD = 0x1;
+extern "system" {
+ pub fn CredWriteW(
+ Credential: PCREDENTIALW,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn CredWriteA(
+ Credential: PCREDENTIALA,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn CredReadW(
+ TargetName: LPCWSTR,
+ Type: DWORD,
+ Flags: DWORD,
+ Credential: *mut PCREDENTIALW,
+ ) -> BOOL;
+ pub fn CredReadA(
+ TargetName: LPCSTR,
+ Type: DWORD,
+ Flags: DWORD,
+ Credential: *mut PCREDENTIALA,
+ ) -> BOOL;
+}
+pub const CRED_ENUMERATE_ALL_CREDENTIALS: DWORD = 0x1;
+extern "system" {
+ pub fn CredEnumerateW(
+ Filter: LPCWSTR,
+ Flags: DWORD,
+ Count: *mut DWORD,
+ Credential: *mut *mut PCREDENTIALW,
+ ) -> BOOL;
+ pub fn CredEnumerateA(
+ Filter: LPCSTR,
+ Flags: DWORD,
+ Count: *mut DWORD,
+ Credential: *mut *mut PCREDENTIALA,
+ ) -> BOOL;
+ pub fn CredWriteDomainCredentialsW(
+ TargetInfo: PCREDENTIAL_TARGET_INFORMATIONW,
+ Credential: PCREDENTIALW,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn CredWriteDomainCredentialsA(
+ TargetInfo: PCREDENTIAL_TARGET_INFORMATIONA,
+ Credential: PCREDENTIALA,
+ Flags: DWORD,
+ ) -> BOOL;
+}
+pub const CRED_CACHE_TARGET_INFORMATION: DWORD = 0x1;
+extern "system" {
+ pub fn CredReadDomainCredentialsW(
+ TargetInfo: PCREDENTIAL_TARGET_INFORMATIONW,
+ Flags: DWORD,
+ Count: *mut DWORD,
+ Credential: *mut *mut PCREDENTIALW,
+ ) -> BOOL;
+ pub fn CredReadDomainCredentialsA(
+ TargetInfo: PCREDENTIAL_TARGET_INFORMATIONA,
+ Flags: DWORD,
+ Count: *mut DWORD,
+ Credential: *mut *mut PCREDENTIALA,
+ ) -> BOOL;
+ pub fn CredDeleteW(
+ TargetName: LPCWSTR,
+ Type: DWORD,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn CredDeleteA(
+ TargetName: LPCSTR,
+ Type: DWORD,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn CredRenameW(
+ OldTargetName: LPCWSTR,
+ NewTargetName: LPCWSTR,
+ Type: DWORD,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn CredRenameA(
+ OldTargetName: LPCSTR,
+ NewTargetName: LPCSTR,
+ Type: DWORD,
+ Flags: DWORD,
+ ) -> BOOL;
+}
+pub const CRED_ALLOW_NAME_RESOLUTION: DWORD = 0x1;
+extern "system" {
+ pub fn CredGetTargetInfoW(
+ TargetName: LPCWSTR,
+ Flags: DWORD,
+ TargetInfo: *mut PCREDENTIAL_TARGET_INFORMATIONW,
+ ) -> BOOL;
+ pub fn CredGetTargetInfoA(
+ TargetName: LPCSTR,
+ Flags: DWORD,
+ TargetInfo: *mut PCREDENTIAL_TARGET_INFORMATIONA,
+ ) -> BOOL;
+ pub fn CredMarshalCredentialW(
+ CredType: CRED_MARSHAL_TYPE,
+ Credential: PVOID,
+ MarhaledCredential: *mut LPWSTR,
+ ) -> BOOL;
+ pub fn CredMarshalCredentialA(
+ CredType: CRED_MARSHAL_TYPE,
+ Credential: PVOID,
+ MarhaledCredential: *mut LPSTR,
+ ) -> BOOL;
+ pub fn CredUnmarshalCredentialW(
+ MarshaledCredential: LPCWSTR,
+ CredType: PCRED_MARSHAL_TYPE,
+ Credential: *mut PVOID,
+ ) -> BOOL;
+ pub fn CredUnmarshalCredentialA(
+ MarshaledCredential: LPCSTR,
+ CredType: PCRED_MARSHAL_TYPE,
+ Credential: *mut PVOID,
+ ) -> BOOL;
+ pub fn CredIsMarshaledCredentialW(
+ MarshaledCredential: LPCWSTR,
+ ) -> BOOL;
+ pub fn CredIsMarshaledCredentialA(
+ MarshaledCredential: LPCSTR,
+ ) -> BOOL;
+ pub fn CredUnPackAuthenticationBufferW(
+ dwFlags: DWORD,
+ pAuthBuffer: PVOID,
+ cbAuthBuffer: DWORD,
+ pszUserName: LPWSTR,
+ pcchlMaxUserName: *mut DWORD,
+ pszDomainName: LPWSTR,
+ pcchMaxDomainName: *mut DWORD,
+ pszPassword: LPWSTR,
+ pcchMaxPassword: *mut DWORD,
+ ) -> BOOL;
+ pub fn CredUnPackAuthenticationBufferA(
+ dwFlags: DWORD,
+ pAuthBuffer: PVOID,
+ cbAuthBuffer: DWORD,
+ pszUserName: LPSTR,
+ pcchlMaxUserName: *mut DWORD,
+ pszDomainName: LPSTR,
+ pcchMaxDomainName: *mut DWORD,
+ pszPassword: LPSTR,
+ pcchMaxPassword: *mut DWORD,
+ ) -> BOOL;
+ pub fn CredPackAuthenticationBufferW(
+ dwFlags: DWORD,
+ pszUserName: LPWSTR,
+ pszPassword: LPWSTR,
+ pPackedCredentials: PBYTE,
+ pcbPackedCredentials: *mut DWORD,
+ ) -> BOOL;
+ pub fn CredPackAuthenticationBufferA(
+ dwFlags: DWORD,
+ pszUserName: LPSTR,
+ pszPassword: LPSTR,
+ pPackedCredentials: PBYTE,
+ pcbPackedCredentials: *mut DWORD,
+ ) -> BOOL;
+ pub fn CredProtectW(
+ fAsSelf: BOOL,
+ pszCredentials: LPWSTR,
+ cchCredentials: DWORD,
+ pszProtectedCredentials: LPWSTR,
+ pcchMaxChars: *mut DWORD,
+ ProtectionType: *mut CRED_PROTECTION_TYPE,
+ ) -> BOOL;
+ pub fn CredProtectA(
+ fAsSelf: BOOL,
+ pszCredentials: LPSTR,
+ cchCredentials: DWORD,
+ pszProtectedCredentials: LPSTR,
+ pcchMaxChars: *mut DWORD,
+ ProtectionType: *mut CRED_PROTECTION_TYPE,
+ ) -> BOOL;
+ pub fn CredUnprotectW(
+ fAsSelf: BOOL,
+ pszProtectedCredentials: LPWSTR,
+ cchCredentials: DWORD,
+ pszCredentials: LPWSTR,
+ pcchMaxChars: *mut DWORD,
+ ) -> BOOL;
+ pub fn CredUnprotectA(
+ fAsSelf: BOOL,
+ pszProtectedCredentials: LPSTR,
+ cchCredentials: DWORD,
+ pszCredentials: LPSTR,
+ pcchMaxChars: *mut DWORD,
+ ) -> BOOL;
+ pub fn CredIsProtectedW(
+ pszProtectedCredentials: LPWSTR,
+ pProtectionType: *mut CRED_PROTECTION_TYPE,
+ ) -> BOOL;
+ pub fn CredIsProtectedA(
+ pszProtectedCredentials: LPSTR,
+ pProtectionType: *mut CRED_PROTECTION_TYPE,
+ ) -> BOOL;
+ pub fn CredFindBestCredentialW(
+ TargetName: LPCWSTR,
+ Type: DWORD,
+ Flags: DWORD,
+ Credential: *mut PCREDENTIALW,
+ ) -> BOOL;
+ pub fn CredFindBestCredentialA(
+ TargetName: LPCSTR,
+ Type: DWORD,
+ Flags: DWORD,
+ Credential: *mut PCREDENTIALA,
+ ) -> BOOL;
+ pub fn CredGetSessionTypes(
+ MaximumPersistCount: DWORD,
+ MaximumPersist: LPDWORD,
+ ) -> BOOL;
+ pub fn CredFree(
+ Buffer: PVOID,
+ );
+ pub fn CredUIPromptForCredentialsW(
+ pUiInfo: PCREDUI_INFOW,
+ pszTargetName: PCWSTR,
+ pContext: PCtxtHandle,
+ dwAuthError: DWORD,
+ pszUserName: PWSTR,
+ ulUserNameBufferSize: ULONG,
+ pszPassword: PWSTR,
+ ulPasswordBufferSize: ULONG,
+ save: *mut BOOL,
+ dwFlags: DWORD,
+ ) -> DWORD;
+ pub fn CredUIPromptForCredentialsA(
+ pUiInfo: PCREDUI_INFOA,
+ pszTargetName: PCSTR,
+ pContext: PCtxtHandle,
+ dwAuthError: DWORD,
+ pszUserName: PSTR,
+ ulUserNameBufferSize: ULONG,
+ pszPassword: PSTR,
+ ulPasswordBufferSize: ULONG,
+ save: *mut BOOL,
+ dwFlags: DWORD,
+ ) -> DWORD;
+ pub fn CredUIPromptForWindowsCredentialsW(
+ pUiInfo: PCREDUI_INFOW,
+ dwAuthError: DWORD,
+ pulAuthPackage: *mut ULONG,
+ pvInAuthBuffer: LPCVOID,
+ ulInAuthBufferSize: ULONG,
+ ppvOutAuthBuffer: *mut LPVOID,
+ pulOutAuthBufferSize: *mut ULONG,
+ pfSave: *mut BOOL,
+ dwFlags: DWORD,
+ ) -> DWORD;
+ pub fn CredUIPromptForWindowsCredentialsA(
+ pUiInfo: PCREDUI_INFOA,
+ dwAuthError: DWORD,
+ pulAuthPackage: *mut ULONG,
+ pvInAuthBuffer: LPCVOID,
+ ulInAuthBufferSize: ULONG,
+ ppvOutAuthBuffer: *mut LPVOID,
+ pulOutAuthBufferSize: *mut ULONG,
+ pfSave: *mut BOOL,
+ dwFlags: DWORD,
+ ) -> DWORD;
+ pub fn CredUIParseUserNameW(
+ userName: PCWSTR,
+ user: *mut WCHAR,
+ userBufferSize: ULONG,
+ domain: *mut WCHAR,
+ domainBufferSize: ULONG,
+ ) -> DWORD;
+ pub fn CredUIParseUserNameA(
+ userName: PCSTR,
+ user: *mut CHAR,
+ userBufferSize: ULONG,
+ domain: *mut CHAR,
+ domainBufferSize: ULONG,
+ ) -> DWORD;
+ pub fn CredUICmdLinePromptForCredentialsW(
+ pszTargetName: PCWSTR,
+ pContext: PCtxtHandle,
+ dwAuthError: DWORD,
+ UserName: PWSTR,
+ ulUserBufferSize: ULONG,
+ pszPassword: PWSTR,
+ ulPasswordBufferSize: ULONG,
+ pfSave: PBOOL,
+ dwFlags: DWORD,
+ ) -> DWORD;
+ pub fn CredUICmdLinePromptForCredentialsA(
+ pszTargetName: PCSTR,
+ pContext: PCtxtHandle,
+ dwAuthError: DWORD,
+ UserName: PSTR,
+ ulUserBufferSize: ULONG,
+ pszPassword: PSTR,
+ ulPasswordBufferSize: ULONG,
+ pfSave: PBOOL,
+ dwFlags: DWORD,
+ ) -> DWORD;
+ pub fn CredUIConfirmCredentialsW(
+ pszTargetName: PCWSTR,
+ bConfirm: BOOL,
+ ) -> DWORD;
+ pub fn CredUIConfirmCredentialsA(
+ pszTargetName: PCSTR,
+ bConfirm: BOOL,
+ ) -> DWORD;
+ pub fn CredUIStoreSSOCredW(
+ pszRealm: PCWSTR,
+ pszUsername: PCWSTR,
+ pszPassword: PCWSTR,
+ bPersist: BOOL,
+ ) -> DWORD;
+ pub fn CredUIReadSSOCredW(
+ pszRealm: PCWSTR,
+ ppszUsername: *mut PWSTR,
+ ) -> DWORD;
+}
diff --git a/vendor/winapi/src/um/wincrypt.rs b/vendor/winapi/src/um/wincrypt.rs
new file mode 100644
index 000000000..abc2a9923
--- /dev/null
+++ b/vendor/winapi/src/um/wincrypt.rs
@@ -0,0 +1,7365 @@
+// 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.
+//! Cryptographic API Prototypes and Definitions
+use ctypes::{c_int, c_uchar, c_uint, c_void};
+use shared::basetsd::ULONG_PTR;
+use shared::bcrypt::BCRYPT_KEY_HANDLE;
+use shared::guiddef::{GUID, LPCGUID};
+use shared::minwindef::{
+ BOOL, BYTE, DWORD, FALSE, FILETIME, HKEY, HMODULE, LPFILETIME, LPVOID, PBYTE, PDWORD,
+ PFILETIME, TRUE, ULONG, WORD,
+};
+use um::minwinbase::PSYSTEMTIME;
+use um::ncrypt::NCRYPT_KEY_HANDLE;
+use um::winnt::{
+ CHAR, HANDLE, HRESULT, LONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PCWSTR, PVOID, PWSTR, WCHAR,
+};
+use vc::vcruntime::size_t;
+//108
+#[inline]
+pub fn GET_ALG_CLASS(x: ALG_ID) -> ALG_ID {
+ x & (7 << 13)
+}
+#[inline]
+pub fn GET_ALG_TYPE(x: ALG_ID) -> ALG_ID {
+ x & (15 << 9)
+}
+#[inline]
+pub fn GET_ALG_SID(x: ALG_ID) -> ALG_ID {
+ x & 511
+}
+pub const ALG_CLASS_ANY: ALG_ID = 0;
+pub const ALG_CLASS_SIGNATURE: ALG_ID = 1 << 13;
+pub const ALG_CLASS_MSG_ENCRYPT: ALG_ID = 2 << 13;
+pub const ALG_CLASS_DATA_ENCRYPT: ALG_ID = 3 << 13;
+pub const ALG_CLASS_HASH: ALG_ID = 4 << 13;
+pub const ALG_CLASS_KEY_EXCHANGE: ALG_ID = 5 << 13;
+pub const ALG_CLASS_ALL: ALG_ID = 7 << 13;
+pub const ALG_TYPE_ANY: ALG_ID = 0;
+pub const ALG_TYPE_DSS: ALG_ID = 1 << 9;
+pub const ALG_TYPE_RSA: ALG_ID = 2 << 9;
+pub const ALG_TYPE_BLOCK: ALG_ID = 3 << 9;
+pub const ALG_TYPE_STREAM: ALG_ID = 4 << 9;
+pub const ALG_TYPE_DH: ALG_ID = 5 << 9;
+pub const ALG_TYPE_SECURECHANNEL: ALG_ID = 6 << 9;
+pub const ALG_TYPE_ECDH: ALG_ID = 7 << 9;
+pub const ALG_TYPE_THIRDPARTY: ALG_ID = 8 << 9;
+pub const ALG_SID_ANY: ALG_ID = 0;
+pub const ALG_SID_THIRDPARTY_ANY: ALG_ID = 0;
+pub const ALG_SID_RSA_ANY: ALG_ID = 0;
+pub const ALG_SID_RSA_PKCS: ALG_ID = 1;
+pub const ALG_SID_RSA_MSATWORK: ALG_ID = 2;
+pub const ALG_SID_RSA_ENTRUST: ALG_ID = 3;
+pub const ALG_SID_RSA_PGP: ALG_ID = 4;
+pub const ALG_SID_DSS_ANY: ALG_ID = 0;
+pub const ALG_SID_DSS_PKCS: ALG_ID = 1;
+pub const ALG_SID_DSS_DMS: ALG_ID = 2;
+pub const ALG_SID_ECDSA: ALG_ID = 3;
+pub const ALG_SID_DES: ALG_ID = 1;
+pub const ALG_SID_3DES: ALG_ID = 3;
+pub const ALG_SID_DESX: ALG_ID = 4;
+pub const ALG_SID_IDEA: ALG_ID = 5;
+pub const ALG_SID_CAST: ALG_ID = 6;
+pub const ALG_SID_SAFERSK64: ALG_ID = 7;
+pub const ALG_SID_SAFERSK128: ALG_ID = 8;
+pub const ALG_SID_3DES_112: ALG_ID = 9;
+pub const ALG_SID_CYLINK_MEK: ALG_ID = 12;
+pub const ALG_SID_RC5: ALG_ID = 13;
+pub const ALG_SID_AES_128: ALG_ID = 14;
+pub const ALG_SID_AES_192: ALG_ID = 15;
+pub const ALG_SID_AES_256: ALG_ID = 16;
+pub const ALG_SID_AES: ALG_ID = 17;
+pub const ALG_SID_SKIPJACK: ALG_ID = 10;
+pub const ALG_SID_TEK: ALG_ID = 11;
+pub const CRYPT_MODE_CBCI: ALG_ID = 6;
+pub const CRYPT_MODE_CFBP: ALG_ID = 7;
+pub const CRYPT_MODE_OFBP: ALG_ID = 8;
+pub const CRYPT_MODE_CBCOFM: ALG_ID = 9;
+pub const CRYPT_MODE_CBCOFMI: ALG_ID = 10;
+pub const ALG_SID_RC2: ALG_ID = 2;
+pub const ALG_SID_RC4: ALG_ID = 1;
+pub const ALG_SID_SEAL: ALG_ID = 2;
+pub const ALG_SID_DH_SANDF: ALG_ID = 1;
+pub const ALG_SID_DH_EPHEM: ALG_ID = 2;
+pub const ALG_SID_AGREED_KEY_ANY: ALG_ID = 3;
+pub const ALG_SID_KEA: ALG_ID = 4;
+pub const ALG_SID_ECDH: ALG_ID = 5;
+pub const ALG_SID_ECDH_EPHEM: ALG_ID = 6;
+pub const ALG_SID_MD2: ALG_ID = 1;
+pub const ALG_SID_MD4: ALG_ID = 2;
+pub const ALG_SID_MD5: ALG_ID = 3;
+pub const ALG_SID_SHA: ALG_ID = 4;
+pub const ALG_SID_SHA1: ALG_ID = 4;
+pub const ALG_SID_MAC: ALG_ID = 5;
+pub const ALG_SID_RIPEMD: ALG_ID = 6;
+pub const ALG_SID_RIPEMD160: ALG_ID = 7;
+pub const ALG_SID_SSL3SHAMD5: ALG_ID = 8;
+pub const ALG_SID_HMAC: ALG_ID = 9;
+pub const ALG_SID_TLS1PRF: ALG_ID = 10;
+pub const ALG_SID_HASH_REPLACE_OWF: ALG_ID = 11;
+pub const ALG_SID_SHA_256: ALG_ID = 12;
+pub const ALG_SID_SHA_384: ALG_ID = 13;
+pub const ALG_SID_SHA_512: ALG_ID = 14;
+pub const ALG_SID_SSL3_MASTER: ALG_ID = 1;
+pub const ALG_SID_SCHANNEL_MASTER_HASH: ALG_ID = 2;
+pub const ALG_SID_SCHANNEL_MAC_KEY: ALG_ID = 3;
+pub const ALG_SID_PCT1_MASTER: ALG_ID = 4;
+pub const ALG_SID_SSL2_MASTER: ALG_ID = 5;
+pub const ALG_SID_TLS1_MASTER: ALG_ID = 6;
+pub const ALG_SID_SCHANNEL_ENC_KEY: ALG_ID = 7;
+pub const ALG_SID_ECMQV: ALG_ID = 1;
+pub const ALG_SID_EXAMPLE: ALG_ID = 80;
+pub type ALG_ID = c_uint;
+pub const CALG_MD2: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD2;
+pub const CALG_MD4: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD4;
+pub const CALG_MD5: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD5;
+pub const CALG_SHA: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA;
+pub const CALG_SHA1: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA1;
+pub const CALG_MAC: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MAC;
+pub const CALG_RSA_SIGN: ALG_ID = ALG_CLASS_SIGNATURE | ALG_TYPE_RSA | ALG_SID_RSA_ANY;
+pub const CALG_DSS_SIGN: ALG_ID = ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_DSS_ANY;
+pub const CALG_NO_SIGN: ALG_ID = ALG_CLASS_SIGNATURE | ALG_TYPE_ANY | ALG_SID_ANY;
+pub const CALG_RSA_KEYX: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_RSA | ALG_SID_RSA_ANY;
+pub const CALG_DES: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DES;
+pub const CALG_3DES_112: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES_112;
+pub const CALG_3DES: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES;
+pub const CALG_DESX: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DESX;
+pub const CALG_RC2: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_RC2;
+pub const CALG_RC4: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC4;
+pub const CALG_SEAL: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_SEAL;
+pub const CALG_DH_SF: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_SANDF;
+pub const CALG_DH_EPHEM: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_EPHEM;
+pub const CALG_AGREEDKEY_ANY: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH
+ | ALG_SID_AGREED_KEY_ANY;
+pub const CALG_KEA_KEYX: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_KEA;
+pub const CALG_HUGHES_MD5: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY | ALG_SID_MD5;
+pub const CALG_SKIPJACK: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_SKIPJACK;
+pub const CALG_TEK: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_TEK;
+pub const CALG_CYLINK_MEK: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_CYLINK_MEK;
+pub const CALG_SSL3_SHAMD5: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SSL3SHAMD5;
+pub const CALG_SSL3_MASTER: ALG_ID = ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL
+ | ALG_SID_SSL3_MASTER;
+pub const CALG_SCHANNEL_MASTER_HASH: ALG_ID = ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL
+ | ALG_SID_SCHANNEL_MASTER_HASH;
+pub const CALG_SCHANNEL_MAC_KEY: ALG_ID = ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL
+ | ALG_SID_SCHANNEL_MAC_KEY;
+pub const CALG_SCHANNEL_ENC_KEY: ALG_ID = ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL
+ | ALG_SID_SCHANNEL_ENC_KEY;
+pub const CALG_PCT1_MASTER: ALG_ID = ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL
+ | ALG_SID_PCT1_MASTER;
+pub const CALG_SSL2_MASTER: ALG_ID = ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL
+ | ALG_SID_SSL2_MASTER;
+pub const CALG_TLS1_MASTER: ALG_ID = ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL
+ | ALG_SID_TLS1_MASTER;
+pub const CALG_RC5: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_RC5;
+pub const CALG_HMAC: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HMAC;
+pub const CALG_TLS1PRF: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1PRF;
+pub const CALG_HASH_REPLACE_OWF: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HASH_REPLACE_OWF;
+pub const CALG_AES_128: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_128;
+pub const CALG_AES_192: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_192;
+pub const CALG_AES_256: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_256;
+pub const CALG_AES: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES;
+pub const CALG_SHA_256: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_256;
+pub const CALG_SHA_384: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_384;
+pub const CALG_SHA_512: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_512;
+pub const CALG_ECDH: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_ECDH;
+pub const CALG_ECDH_EPHEM: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ECDH | ALG_SID_ECDH_EPHEM;
+pub const CALG_ECMQV: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY | ALG_SID_ECMQV;
+pub const CALG_ECDSA: ALG_ID = ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_ECDSA;
+pub const CALG_NULLCIPHER: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_ANY | 0;
+pub const CALG_THIRDPARTY_KEY_EXCHANGE: ALG_ID = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_THIRDPARTY
+ | ALG_SID_THIRDPARTY_ANY;
+pub const CALG_THIRDPARTY_SIGNATURE: ALG_ID = ALG_CLASS_SIGNATURE | ALG_TYPE_THIRDPARTY
+ | ALG_SID_THIRDPARTY_ANY;
+pub const CALG_THIRDPARTY_CIPHER: ALG_ID = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_THIRDPARTY
+ | ALG_SID_THIRDPARTY_ANY;
+pub const CALG_THIRDPARTY_HASH: ALG_ID = ALG_CLASS_HASH | ALG_TYPE_THIRDPARTY
+ | ALG_SID_THIRDPARTY_ANY;
+pub type HCRYPTPROV = ULONG_PTR;
+pub type HCRYPTKEY = ULONG_PTR;
+pub type HCRYPTHASH = ULONG_PTR;
+pub const CRYPT_VERIFYCONTEXT: DWORD = 0xF0000000;
+pub const CRYPT_NEWKEYSET: DWORD = 0x00000008;
+pub const CRYPT_DELETEKEYSET: DWORD = 0x00000010;
+pub const CRYPT_MACHINE_KEYSET: DWORD = 0x00000020;
+pub const CRYPT_SILENT: DWORD = 0x00000040;
+pub const CRYPT_DEFAULT_CONTAINER_OPTIONAL: DWORD = 0x00000080;
+pub const CRYPT_EXPORTABLE: DWORD = 0x00000001;
+pub const CRYPT_USER_PROTECTED: DWORD = 0x00000002;
+pub const CRYPT_CREATE_SALT: DWORD = 0x00000004;
+pub const CRYPT_UPDATE_KEY: DWORD = 0x00000008;
+pub const CRYPT_NO_SALT: DWORD = 0x00000010;
+pub const CRYPT_PREGEN: DWORD = 0x00000040;
+pub const CRYPT_RECIPIENT: DWORD = 0x00000010;
+pub const CRYPT_INITIATOR: DWORD = 0x00000040;
+pub const CRYPT_ONLINE: DWORD = 0x00000080;
+pub const CRYPT_SF: DWORD = 0x00000100;
+pub const CRYPT_CREATE_IV: DWORD = 0x00000200;
+pub const CRYPT_KEK: DWORD = 0x00000400;
+pub const CRYPT_DATA_KEY: DWORD = 0x00000800;
+pub const CRYPT_VOLATILE: DWORD = 0x00001000;
+pub const CRYPT_SGCKEY: DWORD = 0x00002000;
+pub const CRYPT_USER_PROTECTED_STRONG: DWORD = 0x00100000;
+pub const CRYPT_ARCHIVABLE: DWORD = 0x00004000;
+pub const CRYPT_FORCE_KEY_PROTECTION_HIGH: DWORD = 0x00008000;
+pub const RSA1024BIT_KEY: DWORD = 0x04000000;
+pub const CRYPT_SERVER: DWORD = 0x00000400;
+pub const KEY_LENGTH_MASK: DWORD = 0xFFFF0000;
+pub const CRYPT_Y_ONLY: DWORD = 0x00000001;
+pub const CRYPT_SSL2_FALLBACK: DWORD = 0x00000002;
+pub const CRYPT_DESTROYKEY: DWORD = 0x00000004;
+pub const CRYPT_OAEP: DWORD = 0x00000040;
+pub const CRYPT_BLOB_VER3: DWORD = 0x00000080;
+pub const CRYPT_IPSEC_HMAC_KEY: DWORD = 0x00000100;
+pub const CRYPT_DECRYPT_RSA_NO_PADDING_CHECK: DWORD = 0x00000020;
+pub const CRYPT_SECRETDIGEST: DWORD = 0x00000001;
+pub const CRYPT_OWF_REPL_LM_HASH: DWORD = 0x00000001;
+pub const CRYPT_LITTLE_ENDIAN: DWORD = 0x00000001;
+pub const CRYPT_NOHASHOID: DWORD = 0x00000001;
+pub const CRYPT_TYPE2_FORMAT: DWORD = 0x00000002;
+pub const CRYPT_X931_FORMAT: DWORD = 0x00000004;
+pub const CRYPT_MACHINE_DEFAULT: DWORD = 0x00000001;
+pub const CRYPT_USER_DEFAULT: DWORD = 0x00000002;
+pub const CRYPT_DELETE_DEFAULT: DWORD = 0x00000004;
+pub const SIMPLEBLOB: DWORD = 0x1;
+pub const PUBLICKEYBLOB: DWORD = 0x6;
+pub const PRIVATEKEYBLOB: DWORD = 0x7;
+pub const PLAINTEXTKEYBLOB: DWORD = 0x8;
+pub const OPAQUEKEYBLOB: DWORD = 0x9;
+pub const PUBLICKEYBLOBEX: DWORD = 0xA;
+pub const SYMMETRICWRAPKEYBLOB: DWORD = 0xB;
+pub const KEYSTATEBLOB: DWORD = 0xC;
+pub const AT_KEYEXCHANGE: DWORD = 1;
+pub const AT_SIGNATURE: DWORD = 2;
+pub const CRYPT_USERDATA: DWORD = 1;
+pub const KP_IV: DWORD = 1;
+pub const KP_SALT: DWORD = 2;
+pub const KP_PADDING: DWORD = 3;
+pub const KP_MODE: DWORD = 4;
+pub const KP_MODE_BITS: DWORD = 5;
+pub const KP_PERMISSIONS: DWORD = 6;
+pub const KP_ALGID: DWORD = 7;
+pub const KP_BLOCKLEN: DWORD = 8;
+pub const KP_KEYLEN: DWORD = 9;
+pub const KP_SALT_EX: DWORD = 10;
+pub const KP_P: DWORD = 11;
+pub const KP_G: DWORD = 12;
+pub const KP_Q: DWORD = 13;
+pub const KP_X: DWORD = 14;
+pub const KP_Y: DWORD = 15;
+pub const KP_RA: DWORD = 16;
+pub const KP_RB: DWORD = 17;
+pub const KP_INFO: DWORD = 18;
+pub const KP_EFFECTIVE_KEYLEN: DWORD = 19;
+pub const KP_SCHANNEL_ALG: DWORD = 20;
+pub const KP_CLIENT_RANDOM: DWORD = 21;
+pub const KP_SERVER_RANDOM: DWORD = 22;
+pub const KP_RP: DWORD = 23;
+pub const KP_PRECOMP_MD5: DWORD = 24;
+pub const KP_PRECOMP_SHA: DWORD = 25;
+pub const KP_CERTIFICATE: DWORD = 26;
+pub const KP_CLEAR_KEY: DWORD = 27;
+pub const KP_PUB_EX_LEN: DWORD = 28;
+pub const KP_PUB_EX_VAL: DWORD = 29;
+pub const KP_KEYVAL: DWORD = 30;
+pub const KP_ADMIN_PIN: DWORD = 31;
+pub const KP_KEYEXCHANGE_PIN: DWORD = 32;
+pub const KP_SIGNATURE_PIN: DWORD = 33;
+pub const KP_PREHASH: DWORD = 34;
+pub const KP_ROUNDS: DWORD = 35;
+pub const KP_OAEP_PARAMS: DWORD = 36;
+pub const KP_CMS_KEY_INFO: DWORD = 37;
+pub const KP_CMS_DH_KEY_INFO: DWORD = 38;
+pub const KP_PUB_PARAMS: DWORD = 39;
+pub const KP_VERIFY_PARAMS: DWORD = 40;
+pub const KP_HIGHEST_VERSION: DWORD = 41;
+pub const KP_GET_USE_COUNT: DWORD = 42;
+pub const KP_PIN_ID: DWORD = 43;
+pub const KP_PIN_INFO: DWORD = 44;
+pub const PKCS5_PADDING: DWORD = 1;
+pub const RANDOM_PADDING: DWORD = 2;
+pub const ZERO_PADDING: DWORD = 3;
+pub const CRYPT_MODE_CBC: DWORD = 1;
+pub const CRYPT_MODE_ECB: DWORD = 2;
+pub const CRYPT_MODE_OFB: DWORD = 3;
+pub const CRYPT_MODE_CFB: DWORD = 4;
+pub const CRYPT_MODE_CTS: DWORD = 5;
+pub const CRYPT_ENCRYPT: DWORD = 0x0001;
+pub const CRYPT_DECRYPT: DWORD = 0x0002;
+pub const CRYPT_EXPORT: DWORD = 0x0004;
+pub const CRYPT_READ: DWORD = 0x0008;
+pub const CRYPT_WRITE: DWORD = 0x0010;
+pub const CRYPT_MAC: DWORD = 0x0020;
+pub const CRYPT_EXPORT_KEY: DWORD = 0x0040;
+pub const CRYPT_IMPORT_KEY: DWORD = 0x0080;
+pub const CRYPT_ARCHIVE: DWORD = 0x0100;
+pub const HP_ALGID: DWORD = 0x0001;
+pub const HP_HASHVAL: DWORD = 0x0002;
+pub const HP_HASHSIZE: DWORD = 0x0004;
+pub const HP_HMAC_INFO: DWORD = 0x0005;
+pub const HP_TLS1PRF_LABEL: DWORD = 0x0006;
+pub const HP_TLS1PRF_SEED: DWORD = 0x0007;
+pub const CRYPT_FAILED: BOOL = FALSE;
+pub const CRYPT_SUCCEED: BOOL = TRUE;
+#[inline]
+pub fn RCRYPT_SUCCEEDED(rt: BOOL) -> bool {
+ rt == CRYPT_SUCCEED
+}
+#[inline]
+pub fn RCRYPT_FAILED(rt: BOOL) -> bool {
+ rt == CRYPT_FAILED
+}
+pub const PP_ENUMALGS: DWORD = 1;
+pub const PP_ENUMCONTAINERS: DWORD = 2;
+pub const PP_IMPTYPE: DWORD = 3;
+pub const PP_NAME: DWORD = 4;
+pub const PP_VERSION: DWORD = 5;
+pub const PP_CONTAINER: DWORD = 6;
+pub const PP_CHANGE_PASSWORD: DWORD = 7;
+pub const PP_KEYSET_SEC_DESCR: DWORD = 8;
+pub const PP_CERTCHAIN: DWORD = 9;
+pub const PP_KEY_TYPE_SUBTYPE: DWORD = 10;
+pub const PP_PROVTYPE: DWORD = 16;
+pub const PP_KEYSTORAGE: DWORD = 17;
+pub const PP_APPLI_CERT: DWORD = 18;
+pub const PP_SYM_KEYSIZE: DWORD = 19;
+pub const PP_SESSION_KEYSIZE: DWORD = 20;
+pub const PP_UI_PROMPT: DWORD = 21;
+pub const PP_ENUMALGS_EX: DWORD = 22;
+pub const PP_ENUMMANDROOTS: DWORD = 25;
+pub const PP_ENUMELECTROOTS: DWORD = 26;
+pub const PP_KEYSET_TYPE: DWORD = 27;
+pub const PP_ADMIN_PIN: DWORD = 31;
+pub const PP_KEYEXCHANGE_PIN: DWORD = 32;
+pub const PP_SIGNATURE_PIN: DWORD = 33;
+pub const PP_SIG_KEYSIZE_INC: DWORD = 34;
+pub const PP_KEYX_KEYSIZE_INC: DWORD = 35;
+pub const PP_UNIQUE_CONTAINER: DWORD = 36;
+pub const PP_SGC_INFO: DWORD = 37;
+pub const PP_USE_HARDWARE_RNG: DWORD = 38;
+pub const PP_KEYSPEC: DWORD = 39;
+pub const PP_ENUMEX_SIGNING_PROT: DWORD = 40;
+pub const PP_CRYPT_COUNT_KEY_USE: DWORD = 41;
+pub const PP_USER_CERTSTORE: DWORD = 42;
+pub const PP_SMARTCARD_READER: DWORD = 43;
+pub const PP_SMARTCARD_GUID: DWORD = 45;
+pub const PP_ROOT_CERTSTORE: DWORD = 46;
+pub const PP_SMARTCARD_READER_ICON: DWORD = 47;
+pub const CRYPT_FIRST: DWORD = 1;
+pub const CRYPT_NEXT: DWORD = 2;
+pub const CRYPT_SGC_ENUM: DWORD = 4;
+pub const CRYPT_IMPL_HARDWARE: DWORD = 1;
+pub const CRYPT_IMPL_SOFTWARE: DWORD = 2;
+pub const CRYPT_IMPL_MIXED: DWORD = 3;
+pub const CRYPT_IMPL_UNKNOWN: DWORD = 4;
+pub const CRYPT_IMPL_REMOVABLE: DWORD = 8;
+pub const CRYPT_SEC_DESCR: DWORD = 0x00000001;
+pub const CRYPT_PSTORE: DWORD = 0x00000002;
+pub const CRYPT_UI_PROMPT: DWORD = 0x00000004;
+pub const CRYPT_FLAG_PCT1: DWORD = 0x0001;
+pub const CRYPT_FLAG_SSL2: DWORD = 0x0002;
+pub const CRYPT_FLAG_SSL3: DWORD = 0x0004;
+pub const CRYPT_FLAG_TLS1: DWORD = 0x0008;
+pub const CRYPT_FLAG_IPSEC: DWORD = 0x0010;
+pub const CRYPT_FLAG_SIGNING: DWORD = 0x0020;
+pub const CRYPT_SGC: DWORD = 0x0001;
+pub const CRYPT_FASTSGC: DWORD = 0x0002;
+pub const PP_CLIENT_HWND: DWORD = 1;
+pub const PP_CONTEXT_INFO: DWORD = 11;
+pub const PP_KEYEXCHANGE_KEYSIZE: DWORD = 12;
+pub const PP_SIGNATURE_KEYSIZE: DWORD = 13;
+pub const PP_KEYEXCHANGE_ALG: DWORD = 14;
+pub const PP_SIGNATURE_ALG: DWORD = 15;
+pub const PP_DELETEKEY: DWORD = 24;
+pub const PP_PIN_PROMPT_STRING: DWORD = 44;
+pub const PP_SECURE_KEYEXCHANGE_PIN: DWORD = 47;
+pub const PP_SECURE_SIGNATURE_PIN: DWORD = 48;
+pub const PROV_RSA_FULL: DWORD = 1;
+pub const PROV_RSA_SIG: DWORD = 2;
+pub const PROV_DSS: DWORD = 3;
+pub const PROV_FORTEZZA: DWORD = 4;
+pub const PROV_MS_EXCHANGE: DWORD = 5;
+pub const PROV_SSL: DWORD = 6;
+pub const PROV_RSA_SCHANNEL: DWORD = 12;
+pub const PROV_DSS_DH: DWORD = 13;
+pub const PROV_EC_ECDSA_SIG: DWORD = 14;
+pub const PROV_EC_ECNRA_SIG: DWORD = 15;
+pub const PROV_EC_ECDSA_FULL: DWORD = 16;
+pub const PROV_EC_ECNRA_FULL: DWORD = 17;
+pub const PROV_DH_SCHANNEL: DWORD = 18;
+pub const PROV_SPYRUS_LYNKS: DWORD = 20;
+pub const PROV_RNG: DWORD = 21;
+pub const PROV_INTEL_SEC: DWORD = 22;
+pub const PROV_REPLACE_OWF: DWORD = 23;
+pub const PROV_RSA_AES: DWORD = 24;
+pub const MS_DEF_PROV: &'static str = "Microsoft Base Cryptographic Provider v1.0";
+pub const MS_ENHANCED_PROV: &'static str = "Microsoft Enhanced Cryptographic Provider v1.0";
+pub const MS_STRONG_PROV: &'static str = "Microsoft Strong Cryptographic Provider";
+pub const MS_DEF_RSA_SIG_PROV: &'static str = "Microsoft RSA Signature Cryptographic Provider";
+pub const MS_DEF_RSA_SCHANNEL_PROV: &'static str = "Microsoft RSA SChannel Cryptographic Provider";
+pub const MS_DEF_DSS_PROV: &'static str = "Microsoft Base DSS Cryptographic Provider";
+pub const MS_DEF_DSS_DH_PROV: &'static str
+ = "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider";
+pub const MS_ENH_DSS_DH_PROV: &'static str
+ = "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider";
+pub const MS_DEF_DH_SCHANNEL_PROV: &'static str = "Microsoft DH SChannel Cryptographic Provider";
+pub const MS_SCARD_PROV: &'static str = "Microsoft Base Smart Card Crypto Provider";
+pub const MS_ENH_RSA_AES_PROV: &'static str
+ = "Microsoft Enhanced RSA and AES Cryptographic Provider";
+pub const MS_ENH_RSA_AES_PROV_XP: &'static str
+ = "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)";
+pub const MAXUIDLEN: usize = 64;
+pub const EXPO_OFFLOAD_REG_VALUE: &'static str = "ExpoOffload";
+pub const EXPO_OFFLOAD_FUNC_NAME: &'static str = "OffloadModExpo";
+pub const szKEY_CRYPTOAPI_PRIVATE_KEY_OPTIONS: &'static str
+ = "Software\\Policies\\Microsoft\\Cryptography";
+pub const szKEY_CACHE_ENABLED: &'static str = "CachePrivateKeys";
+pub const szKEY_CACHE_SECONDS: &'static str = "PrivateKeyLifetimeSeconds";
+pub const szPRIV_KEY_CACHE_MAX_ITEMS: &'static str = "PrivKeyCacheMaxItems";
+pub const cPRIV_KEY_CACHE_MAX_ITEMS_DEFAULT: DWORD = 20;
+pub const szPRIV_KEY_CACHE_PURGE_INTERVAL_SECONDS: &'static str
+ = "PrivKeyCachePurgeIntervalSeconds";
+pub const cPRIV_KEY_CACHE_PURGE_INTERVAL_SECONDS_DEFAULT: DWORD = 86400;
+pub const CUR_BLOB_VERSION: DWORD = 2;
+STRUCT!{struct CMS_KEY_INFO {
+ dwVersion: DWORD,
+ Algid: ALG_ID,
+ pbOID: *mut BYTE,
+ cbOID: DWORD,
+}}
+pub type PCMS_KEY_INFO = *mut CMS_KEY_INFO;
+STRUCT!{struct HMAC_INFO {
+ HashAlgid: ALG_ID,
+ pbInnerString: *mut BYTE,
+ cbInnerString: DWORD,
+ pbOuterString: *mut BYTE,
+ cbOuterString: DWORD,
+}}
+pub type PHMAC_INFO = *mut HMAC_INFO;
+STRUCT!{struct SCHANNEL_ALG {
+ dwUse: DWORD,
+ Algid: ALG_ID,
+ cBits: DWORD,
+ dwFlags: DWORD,
+ dwReserved: DWORD,
+}}
+pub type PSCHANNEL_ALG = *mut SCHANNEL_ALG;
+pub const SCHANNEL_MAC_KEY: DWORD = 0x00000000;
+pub const SCHANNEL_ENC_KEY: DWORD = 0x00000001;
+pub const INTERNATIONAL_USAGE: DWORD = 0x00000001;
+STRUCT!{struct PROV_ENUMALGS {
+ aiAlgid: ALG_ID,
+ dwBitLen: DWORD,
+ dwNameLen: DWORD,
+ szName: [CHAR; 20],
+}}
+STRUCT!{struct PROV_ENUMALGS_EX {
+ aiAlgid: ALG_ID,
+ dwDefaultLen: DWORD,
+ dwMinLen: DWORD,
+ dwMaxLen: DWORD,
+ dwProtocols: DWORD,
+ dwNameLen: DWORD,
+ szName: [CHAR; 20],
+ dwLongNameLen: DWORD,
+ szLongName: [CHAR; 40],
+}}
+STRUCT!{struct BLOBHEADER {
+ bType: BYTE,
+ bVersion: BYTE,
+ reserved: WORD,
+ aiKeyAlg: ALG_ID,
+}}
+pub type PUBLICKEYSTRUC = BLOBHEADER;
+STRUCT!{struct RSAPUBKEY {
+ magic: DWORD,
+ bitlen: DWORD,
+ pubexp: DWORD,
+}}
+STRUCT!{struct DHPUBKEY {
+ magic: DWORD,
+ bitlen: DWORD,
+}}
+pub type DSSPUBKEY = DHPUBKEY;
+pub type KEAPUBKEY = DHPUBKEY;
+pub type TEKPUBKEY = DHPUBKEY;
+STRUCT!{struct DSSSEED {
+ counter: DWORD,
+ seed: [BYTE; 20],
+}}
+STRUCT!{struct DHPUBKEY_VER3 {
+ magic: DWORD,
+ bitlenP: DWORD,
+ bitlenQ: DWORD,
+ bitlenJ: DWORD,
+ DSSSeed: DSSSEED,
+}}
+pub type DSSPUBKEY_VER3 = DHPUBKEY_VER3;
+STRUCT!{struct DHPRIVKEY_VER3 {
+ magic: DWORD,
+ bitlenP: DWORD,
+ bitlenQ: DWORD,
+ bitlenJ: DWORD,
+ bitlenX: DWORD,
+ DSSSeed: DSSSEED,
+}}
+pub type DSSPRIVKEY_VER3 = DHPRIVKEY_VER3;
+STRUCT!{struct KEY_TYPE_SUBTYPE {
+ dwKeySpec: DWORD,
+ Type: GUID,
+ Subtype: GUID,
+}}
+pub type PKEY_TYPE_SUBTYPE = *mut KEY_TYPE_SUBTYPE;
+STRUCT!{struct CERT_FORTEZZA_DATA_PROP {
+ SerialNumber: [c_uchar; 8],
+ CertIndex: c_int,
+ CertLabel: [c_uchar; 36],
+}}
+STRUCT!{struct CRYPT_RC4_KEY_STATE {
+ Key: [c_uchar; 16],
+ SBox: [c_uchar; 256],
+ i: c_uchar,
+ j: c_uchar,
+}}
+pub type PCRYPT_RC4_KEY_STATE = *mut CRYPT_RC4_KEY_STATE;
+STRUCT!{struct CRYPT_DES_KEY_STATE {
+ Key: [c_uchar; 8],
+ IV: [c_uchar; 8],
+ Feedback: [c_uchar; 8],
+}}
+pub type PCRYPT_DES_KEY_STATE = *mut CRYPT_DES_KEY_STATE;
+STRUCT!{struct CRYPT_3DES_KEY_STATE {
+ Key: [c_uchar; 24],
+ IV: [c_uchar; 8],
+ Feedback: [c_uchar; 8],
+}}
+pub type PCRYPT_3DES_KEY_STATE = *mut CRYPT_3DES_KEY_STATE;
+STRUCT!{struct CRYPT_AES_128_KEY_STATE {
+ Key: [c_uchar; 16],
+ IV: [c_uchar; 16],
+ EncryptionState: [[c_uchar; 16]; 11],
+ DecryptionState: [[c_uchar; 16]; 11],
+ Feedback: [c_uchar; 16],
+}}
+pub type PCRYPT_AES_128_KEY_STATE = *mut CRYPT_AES_128_KEY_STATE;
+STRUCT!{struct CRYPT_AES_256_KEY_STATE {
+ Key: [c_uchar; 32],
+ IV: [c_uchar; 16],
+ EncryptionState: [[c_uchar; 16]; 15],
+ DecryptionState: [[c_uchar; 16]; 15],
+ Feedback: [c_uchar; 16],
+}}
+pub type PCRYPT_AES_256_KEY_STATE = *mut CRYPT_AES_256_KEY_STATE;
+STRUCT!{struct CRYPTOAPI_BLOB {
+ cbData: DWORD,
+ pbData: *mut BYTE,
+}}
+pub type CRYPT_INTEGER_BLOB = CRYPTOAPI_BLOB;
+pub type PCRYPT_INTEGER_BLOB = *mut CRYPTOAPI_BLOB;
+pub type CRYPT_UINT_BLOB = CRYPTOAPI_BLOB;
+pub type PCRYPT_UINT_BLOB = *mut CRYPTOAPI_BLOB;
+pub type CRYPT_OBJID_BLOB = CRYPTOAPI_BLOB;
+pub type PCRYPT_OBJID_BLOB = *mut CRYPTOAPI_BLOB;
+pub type CERT_NAME_BLOB = CRYPTOAPI_BLOB;
+pub type PCERT_NAME_BLOB = *mut CRYPTOAPI_BLOB;
+pub type CERT_RDN_VALUE_BLOB = CRYPTOAPI_BLOB;
+pub type PCERT_RDN_VALUE_BLOB = *mut CRYPTOAPI_BLOB;
+pub type CERT_BLOB = CRYPTOAPI_BLOB;
+pub type PCERT_BLOB = *mut CRYPTOAPI_BLOB;
+pub type CRL_BLOB = CRYPTOAPI_BLOB;
+pub type PCRL_BLOB = *mut CRYPTOAPI_BLOB;
+pub type DATA_BLOB = CRYPTOAPI_BLOB;
+pub type PDATA_BLOB = *mut CRYPTOAPI_BLOB;
+pub type CRYPT_DATA_BLOB = CRYPTOAPI_BLOB;
+pub type PCRYPT_DATA_BLOB = *mut CRYPTOAPI_BLOB;
+pub type CRYPT_HASH_BLOB = CRYPTOAPI_BLOB;
+pub type PCRYPT_HASH_BLOB = *mut CRYPTOAPI_BLOB;
+pub type CRYPT_DIGEST_BLOB = CRYPTOAPI_BLOB;
+pub type PCRYPT_DIGEST_BLOB = *mut CRYPTOAPI_BLOB;
+pub type CRYPT_DER_BLOB = CRYPTOAPI_BLOB;
+pub type PCRYPT_DER_BLOB = *mut CRYPTOAPI_BLOB;
+pub type CRYPT_ATTR_BLOB = CRYPTOAPI_BLOB;
+pub type PCRYPT_ATTR_BLOB = *mut CRYPTOAPI_BLOB;
+STRUCT!{struct CMS_DH_KEY_INFO {
+ dwVersion: DWORD,
+ Algid: ALG_ID,
+ pszContentEncObjId: LPSTR,
+ PubInfo: CRYPT_DATA_BLOB,
+ pReserved: *mut c_void,
+}}
+pub type PCMS_DH_KEY_INFO = *mut CMS_DH_KEY_INFO;
+extern "system" {
+ pub fn CryptAcquireContextA(
+ phProv: *mut HCRYPTPROV,
+ szContainer: LPCSTR,
+ szProvider: LPCSTR,
+ dwProvType: DWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptAcquireContextW(
+ phProv: *mut HCRYPTPROV,
+ szContainer: LPCWSTR,
+ szProvider: LPCWSTR,
+ dwProvType: DWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptReleaseContext(
+ hProv: HCRYPTPROV,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptGenKey(
+ hProv: HCRYPTPROV,
+ Algid: ALG_ID,
+ dwFlags: DWORD,
+ phKey: *mut HCRYPTKEY,
+ ) -> BOOL;
+ pub fn CryptDeriveKey(
+ hProv: HCRYPTPROV,
+ Algid: ALG_ID,
+ hBaseData: HCRYPTHASH,
+ dwFlags: DWORD,
+ phKey: *mut HCRYPTKEY,
+ ) -> BOOL;
+ pub fn CryptDestroyKey(
+ hKey: HCRYPTKEY,
+ ) -> BOOL;
+ pub fn CryptSetKeyParam(
+ hKey: HCRYPTKEY,
+ dwParam: DWORD,
+ pbData: *const BYTE,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptGetKeyParam(
+ hKey: HCRYPTKEY,
+ dwParam: DWORD,
+ pbData: *mut BYTE,
+ pdwDataLen: *mut DWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptSetHashParam(
+ hHash: HCRYPTHASH,
+ dwParam: DWORD,
+ pbData: *const BYTE,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptGetHashParam(
+ hHash: HCRYPTHASH,
+ dwParam: DWORD,
+ pbData: *mut BYTE,
+ pdwDataLen: *mut DWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptSetProvParam(
+ hProv: HCRYPTPROV,
+ dwParam: DWORD,
+ pbData: *const BYTE,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptGetProvParam(
+ hProv: HCRYPTPROV,
+ dwParam: DWORD,
+ pbData: *mut BYTE,
+ pdwDataLen: *mut DWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptGenRandom(
+ hProv: HCRYPTPROV,
+ dwLen: DWORD,
+ pbBuffer: *mut BYTE,
+ ) -> BOOL;
+ pub fn CryptGetUserKey(
+ hProv: HCRYPTPROV,
+ dwKeySpec: DWORD,
+ phUserKey: *mut HCRYPTKEY,
+ ) -> BOOL;
+ pub fn CryptExportKey(
+ hKey: HCRYPTKEY,
+ hExpKey: HCRYPTKEY,
+ dwBlobType: DWORD,
+ dwFlags: DWORD,
+ pbData: *mut BYTE,
+ pdwDataLen: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptImportKey(
+ hProv: HCRYPTPROV,
+ pbData: *const BYTE,
+ dwDataLen: DWORD,
+ hPubKey: HCRYPTKEY,
+ dwFlags: DWORD,
+ phKey: *mut HCRYPTKEY,
+ ) -> BOOL;
+ pub fn CryptEncrypt(
+ hKey: HCRYPTKEY,
+ hHash: HCRYPTHASH,
+ Final: BOOL,
+ dwFlags: DWORD,
+ pbData: *mut BYTE,
+ pdwDataLen: *mut DWORD,
+ dwBufLen: DWORD,
+ ) -> BOOL;
+ pub fn CryptDecrypt(
+ hKey: HCRYPTKEY,
+ hHash: HCRYPTHASH,
+ Final: BOOL,
+ dwFlags: DWORD,
+ pbData: *mut BYTE,
+ pdwDataLen: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptCreateHash(
+ hProv: HCRYPTPROV,
+ Algid: ALG_ID,
+ hKey: HCRYPTKEY,
+ dwFlags: DWORD,
+ phHash: *mut HCRYPTHASH,
+ ) -> BOOL;
+ pub fn CryptHashData(
+ hHash: HCRYPTHASH,
+ pbData: *const BYTE,
+ dwDataLen: DWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptHashSessionKey(
+ hHash: HCRYPTHASH,
+ hKey: HCRYPTKEY,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptDestroyHash(
+ hHash: HCRYPTHASH,
+ ) -> BOOL;
+ pub fn CryptSignHashA(
+ hHash: HCRYPTHASH,
+ dwKeySpec: DWORD,
+ szDescription: LPCSTR,
+ dwFlags: DWORD,
+ pbSignature: *mut BYTE,
+ pdwSigLen: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptSignHashW(
+ hHash: HCRYPTHASH,
+ dwKeySpec: DWORD,
+ szDescription: LPCWSTR,
+ dwFlags: DWORD,
+ pbSignature: *mut BYTE,
+ pdwSigLen: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptVerifySignatureA(
+ hHash: HCRYPTHASH,
+ pbSignature: *const BYTE,
+ dwSigLen: DWORD,
+ hPubKey: HCRYPTKEY,
+ szDescription: LPCSTR,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptVerifySignatureW(
+ hHash: HCRYPTHASH,
+ pbSignature: *const BYTE,
+ dwSigLen: DWORD,
+ hPubKey: HCRYPTKEY,
+ szDescription: LPCWSTR,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptSetProviderA(
+ pszProvName: LPCSTR,
+ dwProvType: DWORD,
+ ) -> BOOL;
+ pub fn CryptSetProviderW(
+ pszProvName: LPCWSTR,
+ dwProvType: DWORD,
+ ) -> BOOL;
+ pub fn CryptSetProviderExA(
+ pszProvName: LPCSTR,
+ dwProvType: DWORD,
+ pdwReserved: *mut DWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptSetProviderExW(
+ pszProvName: LPCWSTR,
+ dwProvType: DWORD,
+ pdwReserved: *mut DWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptGetDefaultProviderA(
+ dwProvType: DWORD,
+ pdwReserved: *mut DWORD,
+ dwFlags: DWORD,
+ pszProvName: LPSTR,
+ pcbProvName: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptGetDefaultProviderW(
+ dwProvType: DWORD,
+ pdwReserved: *mut DWORD,
+ dwFlags: DWORD,
+ pszProvName: LPWSTR,
+ pcbProvName: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptEnumProviderTypesA(
+ dwIndex: DWORD,
+ pdwReserved: *mut DWORD,
+ dwFlags: DWORD,
+ pdwProvType: *mut DWORD,
+ szTypeName: LPSTR,
+ pcbTypeName: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptEnumProviderTypesW(
+ dwIndex: DWORD,
+ pdwReserved: *mut DWORD,
+ dwFlags: DWORD,
+ pdwProvType: *mut DWORD,
+ szTypeName: LPWSTR,
+ pcbTypeName: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptEnumProvidersA(
+ dwIndex: DWORD,
+ pdwReserved: *mut DWORD,
+ dwFlags: DWORD,
+ pdwProvType: *mut DWORD,
+ szProvName: LPSTR,
+ pcbProvName: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptEnumProvidersW(
+ dwIndex: DWORD,
+ pdwReserved: *mut DWORD,
+ dwFlags: DWORD,
+ pdwProvType: *mut DWORD,
+ szProvName: LPWSTR,
+ pcbProvName: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptContextAddRef(
+ hProv: HCRYPTPROV,
+ pdwReserved: *mut DWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptDuplicateKey(
+ hKey: HCRYPTKEY,
+ pdwReserved: *mut DWORD,
+ dwFlags: DWORD,
+ phKey: *mut HCRYPTKEY,
+ ) -> BOOL;
+ pub fn CryptDuplicateHash(
+ hHash: HCRYPTHASH,
+ pdwReserved: *mut DWORD,
+ dwFlags: DWORD,
+ phHash: *mut HCRYPTHASH,
+ ) -> BOOL;
+}
+extern "C" {
+ pub fn GetEncSChannel(
+ pData: *mut *mut BYTE,
+ dwDecSize: *mut DWORD,
+ ) -> BOOL;
+}
+pub type HCRYPTPROV_OR_NCRYPT_KEY_HANDLE = ULONG_PTR;
+pub type HCRYPTPROV_LEGACY = ULONG_PTR;
+STRUCT!{struct CRYPT_BIT_BLOB {
+ cbData: DWORD,
+ pbData: *mut BYTE,
+ cUnusedBits: DWORD,
+}}
+pub type PCRYPT_BIT_BLOB = *mut CRYPT_BIT_BLOB;
+STRUCT!{struct CRYPT_ALGORITHM_IDENTIFIER {
+ pszObjId: LPSTR,
+ Parameters: CRYPT_OBJID_BLOB,
+}}
+pub type PCRYPT_ALGORITHM_IDENTIFIER = *mut CRYPT_ALGORITHM_IDENTIFIER;
+pub const szOID_RSA: &'static str = "1.2.840.113549";
+pub const szOID_PKCS: &'static str = "1.2.840.113549.1";
+pub const szOID_RSA_HASH: &'static str = "1.2.840.113549.2";
+pub const szOID_RSA_ENCRYPT: &'static str = "1.2.840.113549.3";
+pub const szOID_PKCS_1: &'static str = "1.2.840.113549.1.1";
+pub const szOID_PKCS_2: &'static str = "1.2.840.113549.1.2";
+pub const szOID_PKCS_3: &'static str = "1.2.840.113549.1.3";
+pub const szOID_PKCS_4: &'static str = "1.2.840.113549.1.4";
+pub const szOID_PKCS_5: &'static str = "1.2.840.113549.1.5";
+pub const szOID_PKCS_6: &'static str = "1.2.840.113549.1.6";
+pub const szOID_PKCS_7: &'static str = "1.2.840.113549.1.7";
+pub const szOID_PKCS_8: &'static str = "1.2.840.113549.1.8";
+pub const szOID_PKCS_9: &'static str = "1.2.840.113549.1.9";
+pub const szOID_PKCS_10: &'static str = "1.2.840.113549.1.10";
+pub const szOID_PKCS_12: &'static str = "1.2.840.113549.1.12";
+pub const szOID_RSA_RSA: &'static str = "1.2.840.113549.1.1.1";
+pub const szOID_RSA_MD2RSA: &'static str = "1.2.840.113549.1.1.2";
+pub const szOID_RSA_MD4RSA: &'static str = "1.2.840.113549.1.1.3";
+pub const szOID_RSA_MD5RSA: &'static str = "1.2.840.113549.1.1.4";
+pub const szOID_RSA_SHA1RSA: &'static str = "1.2.840.113549.1.1.5";
+pub const szOID_RSA_SETOAEP_RSA: &'static str = "1.2.840.113549.1.1.6";
+pub const szOID_RSAES_OAEP: &'static str = "1.2.840.113549.1.1.7";
+pub const szOID_RSA_MGF1: &'static str = "1.2.840.113549.1.1.8";
+pub const szOID_RSA_PSPECIFIED: &'static str = "1.2.840.113549.1.1.9";
+pub const szOID_RSA_SSA_PSS: &'static str = "1.2.840.113549.1.1.10";
+pub const szOID_RSA_SHA256RSA: &'static str = "1.2.840.113549.1.1.11";
+pub const szOID_RSA_SHA384RSA: &'static str = "1.2.840.113549.1.1.12";
+pub const szOID_RSA_SHA512RSA: &'static str = "1.2.840.113549.1.1.13";
+pub const szOID_RSA_DH: &'static str = "1.2.840.113549.1.3.1";
+pub const szOID_RSA_data: &'static str = "1.2.840.113549.1.7.1";
+pub const szOID_RSA_signedData: &'static str = "1.2.840.113549.1.7.2";
+pub const szOID_RSA_envelopedData: &'static str = "1.2.840.113549.1.7.3";
+pub const szOID_RSA_signEnvData: &'static str = "1.2.840.113549.1.7.4";
+pub const szOID_RSA_digestedData: &'static str = "1.2.840.113549.1.7.5";
+pub const szOID_RSA_hashedData: &'static str = "1.2.840.113549.1.7.5";
+pub const szOID_RSA_encryptedData: &'static str = "1.2.840.113549.1.7.6";
+pub const szOID_RSA_emailAddr: &'static str = "1.2.840.113549.1.9.1";
+pub const szOID_RSA_unstructName: &'static str = "1.2.840.113549.1.9.2";
+pub const szOID_RSA_contentType: &'static str = "1.2.840.113549.1.9.3";
+pub const szOID_RSA_messageDigest: &'static str = "1.2.840.113549.1.9.4";
+pub const szOID_RSA_signingTime: &'static str = "1.2.840.113549.1.9.5";
+pub const szOID_RSA_counterSign: &'static str = "1.2.840.113549.1.9.6";
+pub const szOID_RSA_challengePwd: &'static str = "1.2.840.113549.1.9.7";
+pub const szOID_RSA_unstructAddr: &'static str = "1.2.840.113549.1.9.8";
+pub const szOID_RSA_extCertAttrs: &'static str = "1.2.840.113549.1.9.9";
+pub const szOID_RSA_certExtensions: &'static str = "1.2.840.113549.1.9.14";
+pub const szOID_RSA_SMIMECapabilities: &'static str = "1.2.840.113549.1.9.15";
+pub const szOID_RSA_preferSignedData: &'static str = "1.2.840.113549.1.9.15.1";
+pub const szOID_TIMESTAMP_TOKEN: &'static str = "1.2.840.113549.1.9.16.1.4";
+pub const szOID_RFC3161_counterSign: &'static str = "1.3.6.1.4.1.311.3.3.1";
+pub const szOID_RSA_SMIMEalg: &'static str = "1.2.840.113549.1.9.16.3";
+pub const szOID_RSA_SMIMEalgESDH: &'static str = "1.2.840.113549.1.9.16.3.5";
+pub const szOID_RSA_SMIMEalgCMS3DESwrap: &'static str = "1.2.840.113549.1.9.16.3.6";
+pub const szOID_RSA_SMIMEalgCMSRC2wrap: &'static str = "1.2.840.113549.1.9.16.3.7";
+pub const szOID_RSA_MD2: &'static str = "1.2.840.113549.2.2";
+pub const szOID_RSA_MD4: &'static str = "1.2.840.113549.2.4";
+pub const szOID_RSA_MD5: &'static str = "1.2.840.113549.2.5";
+pub const szOID_RSA_RC2CBC: &'static str = "1.2.840.113549.3.2";
+pub const szOID_RSA_RC4: &'static str = "1.2.840.113549.3.4";
+pub const szOID_RSA_DES_EDE3_CBC: &'static str = "1.2.840.113549.3.7";
+pub const szOID_RSA_RC5_CBCPad: &'static str = "1.2.840.113549.3.9";
+pub const szOID_ANSI_X942: &'static str = "1.2.840.10046";
+pub const szOID_ANSI_X942_DH: &'static str = "1.2.840.10046.2.1";
+pub const szOID_X957: &'static str = "1.2.840.10040";
+pub const szOID_X957_DSA: &'static str = "1.2.840.10040.4.1";
+pub const szOID_X957_SHA1DSA: &'static str = "1.2.840.10040.4.3";
+pub const szOID_ECC_PUBLIC_KEY: &'static str = "1.2.840.10045.2.1";
+pub const szOID_ECC_CURVE_P256: &'static str = "1.2.840.10045.3.1.7";
+pub const szOID_ECC_CURVE_P384: &'static str = "1.3.132.0.34";
+pub const szOID_ECC_CURVE_P521: &'static str = "1.3.132.0.35";
+pub const szOID_ECC_CURVE_BRAINPOOLP160R1: &'static str = "1.3.36.3.3.2.8.1.1.1";
+pub const szOID_ECC_CURVE_BRAINPOOLP160T1: &'static str = "1.3.36.3.3.2.8.1.1.2";
+pub const szOID_ECC_CURVE_BRAINPOOLP192R1: &'static str = "1.3.36.3.3.2.8.1.1.3";
+pub const szOID_ECC_CURVE_BRAINPOOLP192T1: &'static str = "1.3.36.3.3.2.8.1.1.4";
+pub const szOID_ECC_CURVE_BRAINPOOLP224R1: &'static str = "1.3.36.3.3.2.8.1.1.5";
+pub const szOID_ECC_CURVE_BRAINPOOLP224T1: &'static str = "1.3.36.3.3.2.8.1.1.6";
+pub const szOID_ECC_CURVE_BRAINPOOLP256R1: &'static str = "1.3.36.3.3.2.8.1.1.7";
+pub const szOID_ECC_CURVE_BRAINPOOLP256T1: &'static str = "1.3.36.3.3.2.8.1.1.8";
+pub const szOID_ECC_CURVE_BRAINPOOLP320R1: &'static str = "1.3.36.3.3.2.8.1.1.9";
+pub const szOID_ECC_CURVE_BRAINPOOLP320T1: &'static str = "1.3.36.3.3.2.8.1.1.10";
+pub const szOID_ECC_CURVE_BRAINPOOLP384R1: &'static str = "1.3.36.3.3.2.8.1.1.11";
+pub const szOID_ECC_CURVE_BRAINPOOLP384T1: &'static str = "1.3.36.3.3.2.8.1.1.12";
+pub const szOID_ECC_CURVE_BRAINPOOLP512R1: &'static str = "1.3.36.3.3.2.8.1.1.13";
+pub const szOID_ECC_CURVE_BRAINPOOLP512T1: &'static str = "1.3.36.3.3.2.8.1.1.14";
+pub const szOID_ECC_CURVE_EC192WAPI: &'static str = "1.2.156.11235.1.1.2.1";
+pub const szOID_CN_ECDSA_SHA256: &'static str = "1.2.156.11235.1.1.1";
+pub const szOID_ECC_CURVE_NISTP192: &'static str = "1.2.840.10045.3.1.1";
+pub const szOID_ECC_CURVE_NISTP224: &'static str = "1.3.132.0.33";
+pub const szOID_ECC_CURVE_NISTP256: &'static str = szOID_ECC_CURVE_P256;
+pub const szOID_ECC_CURVE_NISTP384: &'static str = szOID_ECC_CURVE_P384;
+pub const szOID_ECC_CURVE_NISTP521: &'static str = szOID_ECC_CURVE_P521;
+pub const szOID_ECC_CURVE_SECP160K1: &'static str = "1.3.132.0.9";
+pub const szOID_ECC_CURVE_SECP160R1: &'static str = "1.3.132.0.8";
+pub const szOID_ECC_CURVE_SECP160R2: &'static str = "1.3.132.0.30";
+pub const szOID_ECC_CURVE_SECP192K1: &'static str = "1.3.132.0.31";
+pub const szOID_ECC_CURVE_SECP192R1: &'static str = szOID_ECC_CURVE_NISTP192;
+pub const szOID_ECC_CURVE_SECP224K1: &'static str = "1.3.132.0.32";
+pub const szOID_ECC_CURVE_SECP224R1: &'static str = szOID_ECC_CURVE_NISTP224;
+pub const szOID_ECC_CURVE_SECP256K1: &'static str = "1.3.132.0.10";
+pub const szOID_ECC_CURVE_SECP256R1: &'static str = szOID_ECC_CURVE_P256;
+pub const szOID_ECC_CURVE_SECP384R1: &'static str = szOID_ECC_CURVE_P384;
+pub const szOID_ECC_CURVE_SECP521R1: &'static str = szOID_ECC_CURVE_P521;
+pub const szOID_ECC_CURVE_WTLS7: &'static str = szOID_ECC_CURVE_SECP160R2;
+pub const szOID_ECC_CURVE_WTLS9: &'static str = "2.23.43.1.4.9";
+pub const szOID_ECC_CURVE_WTLS12: &'static str = szOID_ECC_CURVE_NISTP224;
+pub const szOID_ECC_CURVE_X962P192V1: &'static str = "1.2.840.10045.3.1.1";
+pub const szOID_ECC_CURVE_X962P192V2: &'static str = "1.2.840.10045.3.1.2";
+pub const szOID_ECC_CURVE_X962P192V3: &'static str = "1.2.840.10045.3.1.3";
+pub const szOID_ECC_CURVE_X962P239V1: &'static str = "1.2.840.10045.3.1.4";
+pub const szOID_ECC_CURVE_X962P239V2: &'static str = "1.2.840.10045.3.1.5";
+pub const szOID_ECC_CURVE_X962P239V3: &'static str = "1.2.840.10045.3.1.6";
+pub const szOID_ECC_CURVE_X962P256V1: &'static str = szOID_ECC_CURVE_P256;
+pub const szOID_ECDSA_SHA1: &'static str = "1.2.840.10045.4.1";
+pub const szOID_ECDSA_SPECIFIED: &'static str = "1.2.840.10045.4.3";
+pub const szOID_ECDSA_SHA256: &'static str = "1.2.840.10045.4.3.2";
+pub const szOID_ECDSA_SHA384: &'static str = "1.2.840.10045.4.3.3";
+pub const szOID_ECDSA_SHA512: &'static str = "1.2.840.10045.4.3.4";
+pub const szOID_NIST_AES128_CBC: &'static str = "2.16.840.1.101.3.4.1.2";
+pub const szOID_NIST_AES192_CBC: &'static str = "2.16.840.1.101.3.4.1.22";
+pub const szOID_NIST_AES256_CBC: &'static str = "2.16.840.1.101.3.4.1.42";
+pub const szOID_NIST_AES128_WRAP: &'static str = "2.16.840.1.101.3.4.1.5";
+pub const szOID_NIST_AES192_WRAP: &'static str = "2.16.840.1.101.3.4.1.25";
+pub const szOID_NIST_AES256_WRAP: &'static str = "2.16.840.1.101.3.4.1.45";
+pub const szOID_DH_SINGLE_PASS_STDDH_SHA1_KDF: &'static str = "1.3.133.16.840.63.0.2";
+pub const szOID_DH_SINGLE_PASS_STDDH_SHA256_KDF: &'static str = "1.3.132.1.11.1";
+pub const szOID_DH_SINGLE_PASS_STDDH_SHA384_KDF: &'static str = "1.3.132.1.11.2";
+pub const szOID_DS: &'static str = "2.5";
+pub const szOID_DSALG: &'static str = "2.5.8";
+pub const szOID_DSALG_CRPT: &'static str = "2.5.8.1";
+pub const szOID_DSALG_HASH: &'static str = "2.5.8.2";
+pub const szOID_DSALG_SIGN: &'static str = "2.5.8.3";
+pub const szOID_DSALG_RSA: &'static str = "2.5.8.1.1";
+pub const szOID_OIW: &'static str = "1.3.14";
+pub const szOID_OIWSEC: &'static str = "1.3.14.3.2";
+pub const szOID_OIWSEC_md4RSA: &'static str = "1.3.14.3.2.2";
+pub const szOID_OIWSEC_md5RSA: &'static str = "1.3.14.3.2.3";
+pub const szOID_OIWSEC_md4RSA2: &'static str = "1.3.14.3.2.4";
+pub const szOID_OIWSEC_desECB: &'static str = "1.3.14.3.2.6";
+pub const szOID_OIWSEC_desCBC: &'static str = "1.3.14.3.2.7";
+pub const szOID_OIWSEC_desOFB: &'static str = "1.3.14.3.2.8";
+pub const szOID_OIWSEC_desCFB: &'static str = "1.3.14.3.2.9";
+pub const szOID_OIWSEC_desMAC: &'static str = "1.3.14.3.2.10";
+pub const szOID_OIWSEC_rsaSign: &'static str = "1.3.14.3.2.11";
+pub const szOID_OIWSEC_dsa: &'static str = "1.3.14.3.2.12";
+pub const szOID_OIWSEC_shaDSA: &'static str = "1.3.14.3.2.13";
+pub const szOID_OIWSEC_mdc2RSA: &'static str = "1.3.14.3.2.14";
+pub const szOID_OIWSEC_shaRSA: &'static str = "1.3.14.3.2.15";
+pub const szOID_OIWSEC_dhCommMod: &'static str = "1.3.14.3.2.16";
+pub const szOID_OIWSEC_desEDE: &'static str = "1.3.14.3.2.17";
+pub const szOID_OIWSEC_sha: &'static str = "1.3.14.3.2.18";
+pub const szOID_OIWSEC_mdc2: &'static str = "1.3.14.3.2.19";
+pub const szOID_OIWSEC_dsaComm: &'static str = "1.3.14.3.2.20";
+pub const szOID_OIWSEC_dsaCommSHA: &'static str = "1.3.14.3.2.21";
+pub const szOID_OIWSEC_rsaXchg: &'static str = "1.3.14.3.2.22";
+pub const szOID_OIWSEC_keyHashSeal: &'static str = "1.3.14.3.2.23";
+pub const szOID_OIWSEC_md2RSASign: &'static str = "1.3.14.3.2.24";
+pub const szOID_OIWSEC_md5RSASign: &'static str = "1.3.14.3.2.25";
+pub const szOID_OIWSEC_sha1: &'static str = "1.3.14.3.2.26";
+pub const szOID_OIWSEC_dsaSHA1: &'static str = "1.3.14.3.2.27";
+pub const szOID_OIWSEC_dsaCommSHA1: &'static str = "1.3.14.3.2.28";
+pub const szOID_OIWSEC_sha1RSASign: &'static str = "1.3.14.3.2.29";
+pub const szOID_OIWDIR: &'static str = "1.3.14.7.2";
+pub const szOID_OIWDIR_CRPT: &'static str = "1.3.14.7.2.1";
+pub const szOID_OIWDIR_HASH: &'static str = "1.3.14.7.2.2";
+pub const szOID_OIWDIR_SIGN: &'static str = "1.3.14.7.2.3";
+pub const szOID_OIWDIR_md2: &'static str = "1.3.14.7.2.2.1";
+pub const szOID_OIWDIR_md2RSA: &'static str = "1.3.14.7.2.3.1";
+pub const szOID_INFOSEC: &'static str = "2.16.840.1.101.2.1";
+pub const szOID_INFOSEC_sdnsSignature: &'static str = "2.16.840.1.101.2.1.1.1";
+pub const szOID_INFOSEC_mosaicSignature: &'static str = "2.16.840.1.101.2.1.1.2";
+pub const szOID_INFOSEC_sdnsConfidentiality: &'static str = "2.16.840.1.101.2.1.1.3";
+pub const szOID_INFOSEC_mosaicConfidentiality: &'static str = "2.16.840.1.101.2.1.1.4";
+pub const szOID_INFOSEC_sdnsIntegrity: &'static str = "2.16.840.1.101.2.1.1.5";
+pub const szOID_INFOSEC_mosaicIntegrity: &'static str = "2.16.840.1.101.2.1.1.6";
+pub const szOID_INFOSEC_sdnsTokenProtection: &'static str = "2.16.840.1.101.2.1.1.7";
+pub const szOID_INFOSEC_mosaicTokenProtection: &'static str = "2.16.840.1.101.2.1.1.8";
+pub const szOID_INFOSEC_sdnsKeyManagement: &'static str = "2.16.840.1.101.2.1.1.9";
+pub const szOID_INFOSEC_mosaicKeyManagement: &'static str = "2.16.840.1.101.2.1.1.10";
+pub const szOID_INFOSEC_sdnsKMandSig: &'static str = "2.16.840.1.101.2.1.1.11";
+pub const szOID_INFOSEC_mosaicKMandSig: &'static str = "2.16.840.1.101.2.1.1.12";
+pub const szOID_INFOSEC_SuiteASignature: &'static str = "2.16.840.1.101.2.1.1.13";
+pub const szOID_INFOSEC_SuiteAConfidentiality: &'static str = "2.16.840.1.101.2.1.1.14";
+pub const szOID_INFOSEC_SuiteAIntegrity: &'static str = "2.16.840.1.101.2.1.1.15";
+pub const szOID_INFOSEC_SuiteATokenProtection: &'static str = "2.16.840.1.101.2.1.1.16";
+pub const szOID_INFOSEC_SuiteAKeyManagement: &'static str = "2.16.840.1.101.2.1.1.17";
+pub const szOID_INFOSEC_SuiteAKMandSig: &'static str = "2.16.840.1.101.2.1.1.18";
+pub const szOID_INFOSEC_mosaicUpdatedSig: &'static str = "2.16.840.1.101.2.1.1.19";
+pub const szOID_INFOSEC_mosaicKMandUpdSig: &'static str = "2.16.840.1.101.2.1.1.20";
+pub const szOID_INFOSEC_mosaicUpdatedInteg: &'static str = "2.16.840.1.101.2.1.1.21";
+pub const szOID_NIST_sha256: &'static str = "2.16.840.1.101.3.4.2.1";
+pub const szOID_NIST_sha384: &'static str = "2.16.840.1.101.3.4.2.2";
+pub const szOID_NIST_sha512: &'static str = "2.16.840.1.101.3.4.2.3";
+STRUCT!{struct CRYPT_OBJID_TABLE {
+ dwAlgId: DWORD,
+ pszObjId: LPCSTR,
+}}
+pub type PCRYPT_OBJID_TABLE = *mut CRYPT_OBJID_TABLE;
+STRUCT!{struct CRYPT_HASH_INFO {
+ HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ Hash: CRYPT_HASH_BLOB,
+}}
+pub type PCRYPT_HASH_INFO = *mut CRYPT_HASH_INFO;
+STRUCT!{struct CERT_EXTENSION {
+ pszObjId: LPSTR,
+ fCritical: BOOL,
+ Value: CRYPT_OBJID_BLOB,
+}}
+pub type PCERT_EXTENSION = *mut CERT_EXTENSION;
+pub type PCCERT_EXTENSION = *const CERT_EXTENSION;
+STRUCT!{struct CRYPT_ATTRIBUTE_TYPE_VALUE {
+ pszObjId: LPSTR,
+ Value: CRYPT_OBJID_BLOB,
+}}
+pub type PCRYPT_ATTRIBUTE_TYPE_VALUE = *mut CRYPT_ATTRIBUTE_TYPE_VALUE;
+STRUCT!{struct CRYPT_ATTRIBUTE {
+ pszObjId: LPSTR,
+ cValue: DWORD,
+ rgValue: PCRYPT_ATTR_BLOB,
+}}
+pub type PCRYPT_ATTRIBUTE = *mut CRYPT_ATTRIBUTE;
+STRUCT!{struct CRYPT_ATTRIBUTES {
+ cAttr: DWORD,
+ rgAttr: PCRYPT_ATTRIBUTE,
+}}
+pub type PCRYPT_ATTRIBUTES = *mut CRYPT_ATTRIBUTES;
+STRUCT!{struct CERT_RDN_ATTR {
+ pszObjId: LPSTR,
+ dwValueType: DWORD,
+ Value: CERT_RDN_VALUE_BLOB,
+}}
+pub type PCERT_RDN_ATTR = *mut CERT_RDN_ATTR;
+pub const szOID_COMMON_NAME: &'static str = "2.5.4.3";
+pub const szOID_SUR_NAME: &'static str = "2.5.4.4";
+pub const szOID_DEVICE_SERIAL_NUMBER: &'static str = "2.5.4.5";
+pub const szOID_COUNTRY_NAME: &'static str = "2.5.4.6";
+pub const szOID_LOCALITY_NAME: &'static str = "2.5.4.7";
+pub const szOID_STATE_OR_PROVINCE_NAME: &'static str = "2.5.4.8";
+pub const szOID_STREET_ADDRESS: &'static str = "2.5.4.9";
+pub const szOID_ORGANIZATION_NAME: &'static str = "2.5.4.10";
+pub const szOID_ORGANIZATIONAL_UNIT_NAME: &'static str = "2.5.4.11";
+pub const szOID_TITLE: &'static str = "2.5.4.12";
+pub const szOID_DESCRIPTION: &'static str = "2.5.4.13";
+pub const szOID_SEARCH_GUIDE: &'static str = "2.5.4.14";
+pub const szOID_BUSINESS_CATEGORY: &'static str = "2.5.4.15";
+pub const szOID_POSTAL_ADDRESS: &'static str = "2.5.4.16";
+pub const szOID_POSTAL_CODE: &'static str = "2.5.4.17";
+pub const szOID_POST_OFFICE_BOX: &'static str = "2.5.4.18";
+pub const szOID_PHYSICAL_DELIVERY_OFFICE_NAME: &'static str = "2.5.4.19";
+pub const szOID_TELEPHONE_NUMBER: &'static str = "2.5.4.20";
+pub const szOID_TELEX_NUMBER: &'static str = "2.5.4.21";
+pub const szOID_TELETEXT_TERMINAL_IDENTIFIER: &'static str = "2.5.4.22";
+pub const szOID_FACSIMILE_TELEPHONE_NUMBER: &'static str = "2.5.4.23";
+pub const szOID_X21_ADDRESS: &'static str = "2.5.4.24";
+pub const szOID_INTERNATIONAL_ISDN_NUMBER: &'static str = "2.5.4.25";
+pub const szOID_REGISTERED_ADDRESS: &'static str = "2.5.4.26";
+pub const szOID_DESTINATION_INDICATOR: &'static str = "2.5.4.27";
+pub const szOID_PREFERRED_DELIVERY_METHOD: &'static str = "2.5.4.28";
+pub const szOID_PRESENTATION_ADDRESS: &'static str = "2.5.4.29";
+pub const szOID_SUPPORTED_APPLICATION_CONTEXT: &'static str = "2.5.4.30";
+pub const szOID_MEMBER: &'static str = "2.5.4.31";
+pub const szOID_OWNER: &'static str = "2.5.4.32";
+pub const szOID_ROLE_OCCUPANT: &'static str = "2.5.4.33";
+pub const szOID_SEE_ALSO: &'static str = "2.5.4.34";
+pub const szOID_USER_PASSWORD: &'static str = "2.5.4.35";
+pub const szOID_USER_CERTIFICATE: &'static str = "2.5.4.36";
+pub const szOID_CA_CERTIFICATE: &'static str = "2.5.4.37";
+pub const szOID_AUTHORITY_REVOCATION_LIST: &'static str = "2.5.4.38";
+pub const szOID_CERTIFICATE_REVOCATION_LIST: &'static str = "2.5.4.39";
+pub const szOID_CROSS_CERTIFICATE_PAIR: &'static str = "2.5.4.40";
+pub const szOID_GIVEN_NAME: &'static str = "2.5.4.42";
+pub const szOID_INITIALS: &'static str = "2.5.4.43";
+pub const szOID_DN_QUALIFIER: &'static str = "2.5.4.46";
+pub const szOID_DOMAIN_COMPONENT: &'static str = "0.9.2342.19200300.100.1.25";
+pub const szOID_PKCS_12_FRIENDLY_NAME_ATTR: &'static str = "1.2.840.113549.1.9.20";
+pub const szOID_PKCS_12_LOCAL_KEY_ID: &'static str = "1.2.840.113549.1.9.21";
+pub const szOID_PKCS_12_KEY_PROVIDER_NAME_ATTR: &'static str = "1.3.6.1.4.1.311.17.1";
+pub const szOID_LOCAL_MACHINE_KEYSET: &'static str = "1.3.6.1.4.1.311.17.2";
+pub const szOID_PKCS_12_EXTENDED_ATTRIBUTES: &'static str = "1.3.6.1.4.1.311.17.3";
+pub const szOID_PKCS_12_PROTECTED_PASSWORD_SECRET_BAG_TYPE_ID: &'static str
+ = "1.3.6.1.4.1.311.17.4";
+pub const szOID_KEYID_RDN: &'static str = "1.3.6.1.4.1.311.10.7.1";
+pub const szOID_EV_RDN_LOCALE: &'static str = "1.3.6.1.4.1.311.60.2.1.1";
+pub const szOID_EV_RDN_STATE_OR_PROVINCE: &'static str = "1.3.6.1.4.1.311.60.2.1.2";
+pub const szOID_EV_RDN_COUNTRY: &'static str = "1.3.6.1.4.1.311.60.2.1.3";
+pub const CERT_RDN_ANY_TYPE: DWORD = 0;
+pub const CERT_RDN_ENCODED_BLOB: DWORD = 1;
+pub const CERT_RDN_OCTET_STRING: DWORD = 2;
+pub const CERT_RDN_NUMERIC_STRING: DWORD = 3;
+pub const CERT_RDN_PRINTABLE_STRING: DWORD = 4;
+pub const CERT_RDN_TELETEX_STRING: DWORD = 5;
+pub const CERT_RDN_T61_STRING: DWORD = 5;
+pub const CERT_RDN_VIDEOTEX_STRING: DWORD = 6;
+pub const CERT_RDN_IA5_STRING: DWORD = 7;
+pub const CERT_RDN_GRAPHIC_STRING: DWORD = 8;
+pub const CERT_RDN_VISIBLE_STRING: DWORD = 9;
+pub const CERT_RDN_ISO646_STRING: DWORD = 9;
+pub const CERT_RDN_GENERAL_STRING: DWORD = 10;
+pub const CERT_RDN_UNIVERSAL_STRING: DWORD = 11;
+pub const CERT_RDN_INT4_STRING: DWORD = 11;
+pub const CERT_RDN_BMP_STRING: DWORD = 12;
+pub const CERT_RDN_UNICODE_STRING: DWORD = 12;
+pub const CERT_RDN_UTF8_STRING: DWORD = 13;
+pub const CERT_RDN_TYPE_MASK: DWORD = 0x000000FF;
+pub const CERT_RDN_FLAGS_MASK: DWORD = 0xFF000000;
+pub const CERT_RDN_ENABLE_T61_UNICODE_FLAG: DWORD = 0x80000000;
+pub const CERT_RDN_ENABLE_UTF8_UNICODE_FLAG: DWORD = 0x20000000;
+pub const CERT_RDN_FORCE_UTF8_UNICODE_FLAG: DWORD = 0x10000000;
+pub const CERT_RDN_DISABLE_CHECK_TYPE_FLAG: DWORD = 0x40000000;
+pub const CERT_RDN_DISABLE_IE4_UTF8_FLAG: DWORD = 0x01000000;
+pub const CERT_RDN_ENABLE_PUNYCODE_FLAG: DWORD = 0x02000000;
+#[inline]
+pub fn IS_CERT_RDN_CHAR_STRING(X: DWORD) -> bool {
+ (X & CERT_RDN_TYPE_MASK) >= CERT_RDN_NUMERIC_STRING
+}
+STRUCT!{struct CERT_RDN {
+ cRDNAttr: DWORD,
+ rgRDNAttr: PCERT_RDN_ATTR,
+}}
+pub type PCERT_RDN = *mut CERT_RDN;
+STRUCT!{struct CERT_NAME_INFO {
+ cRDN: DWORD,
+ rgRDN: PCERT_RDN,
+}}
+pub type PCERT_NAME_INFO = *mut CERT_NAME_INFO;
+STRUCT!{struct CERT_NAME_VALUE {
+ dwValueType: DWORD,
+ Value: CERT_RDN_VALUE_BLOB,
+}}
+pub type PCERT_NAME_VALUE = *mut CERT_NAME_VALUE;
+STRUCT!{struct CERT_PUBLIC_KEY_INFO {
+ Algorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ PublicKey: CRYPT_BIT_BLOB,
+}}
+pub type PCERT_PUBLIC_KEY_INFO = *mut CERT_PUBLIC_KEY_INFO;
+pub const CERT_RSA_PUBLIC_KEY_OBJID: &'static str = szOID_RSA_RSA;
+pub const CERT_DEFAULT_OID_PUBLIC_KEY_SIGN: &'static str = szOID_RSA_RSA;
+pub const CERT_DEFAULT_OID_PUBLIC_KEY_XCHG: &'static str = szOID_RSA_RSA;
+STRUCT!{struct CRYPT_ECC_PRIVATE_KEY_INFO {
+ dwVersion: DWORD,
+ PrivateKey: CRYPT_DER_BLOB,
+ szCurveOid: LPSTR,
+ PublicKey: CRYPT_BIT_BLOB,
+}}
+pub type PCRYPT_ECC_PRIVATE_KEY_INFO = *mut CRYPT_ECC_PRIVATE_KEY_INFO;
+pub const CRYPT_ECC_PRIVATE_KEY_INFO_v1: DWORD = 1;
+STRUCT!{struct CRYPT_PRIVATE_KEY_INFO {
+ Version: DWORD,
+ Algorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ PrivateKey: CRYPT_DER_BLOB,
+ pAttributes: PCRYPT_ATTRIBUTES,
+}}
+pub type PCRYPT_PRIVATE_KEY_INFO = *mut CRYPT_PRIVATE_KEY_INFO;
+STRUCT!{struct CRYPT_ENCRYPTED_PRIVATE_KEY_INFO {
+ EncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ EncryptedPrivateKey: CRYPT_DATA_BLOB,
+}}
+pub type PCRYPT_ENCRYPTED_PRIVATE_KEY_INFO = *mut CRYPT_ENCRYPTED_PRIVATE_KEY_INFO;
+FN!{stdcall PCRYPT_DECRYPT_PRIVATE_KEY_FUNC(
+ Algorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ EncryptedPrivateKey: CRYPT_DATA_BLOB,
+ pbClearTextKey: *mut BYTE,
+ pcbClearTextKey: *mut DWORD,
+ pVoidDecryptFunc: LPVOID,
+) -> BOOL}
+FN!{stdcall PCRYPT_ENCRYPT_PRIVATE_KEY_FUNC(
+ Algorithm: *mut CRYPT_ALGORITHM_IDENTIFIER,
+ pClearTextPrivateKey: *mut CRYPT_DATA_BLOB,
+ pbEncryptedKey: *mut BYTE,
+ pcbEncryptedKey: *mut DWORD,
+ pVoidEncryptFunc: LPVOID,
+) -> BOOL}
+FN!{stdcall PCRYPT_RESOLVE_HCRYPTPROV_FUNC(
+ pPrivateKeyInfo: *mut CRYPT_PRIVATE_KEY_INFO,
+ phCryptProv: *mut HCRYPTPROV,
+ pVoidResolveFunc: LPVOID,
+) -> BOOL}
+STRUCT!{struct CRYPT_PKCS8_IMPORT_PARAMS {
+ PrivateKey: CRYPT_DIGEST_BLOB,
+ pResolvehCryptProvFunc: PCRYPT_RESOLVE_HCRYPTPROV_FUNC,
+ pVoidResolveFunc: LPVOID,
+ pDecryptPrivateKeyFunc: PCRYPT_DECRYPT_PRIVATE_KEY_FUNC,
+ pVoidDecryptFunc: LPVOID,
+}}
+pub type PCRYPT_PKCS8_IMPORT_PARAMS = *mut CRYPT_PKCS8_IMPORT_PARAMS;
+pub type CRYPT_PRIVATE_KEY_BLOB_AND_PARAMS = CRYPT_PKCS8_IMPORT_PARAMS;
+pub type PPCRYPT_PRIVATE_KEY_BLOB_AND_PARAMS = *mut CRYPT_PKCS8_IMPORT_PARAMS;
+STRUCT!{struct CRYPT_PKCS8_EXPORT_PARAMS {
+ hCryptProv: HCRYPTPROV,
+ dwKeySpec: DWORD,
+ pszPrivateKeyObjId: LPSTR,
+ pEncryptPrivateKeyFunc: PCRYPT_ENCRYPT_PRIVATE_KEY_FUNC,
+ pVoidEncryptFunc: LPVOID,
+}}
+pub type PCRYPT_PKCS8_EXPORT_PARAMS = *mut CRYPT_PKCS8_EXPORT_PARAMS;
+STRUCT!{struct CERT_INFO {
+ dwVersion: DWORD,
+ SerialNumber: CRYPT_INTEGER_BLOB,
+ SignatureAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ Issuer: CERT_NAME_BLOB,
+ NotBefore: FILETIME,
+ NotAfter: FILETIME,
+ Subject: CERT_NAME_BLOB,
+ SubjectPublicKeyInfo: CERT_PUBLIC_KEY_INFO,
+ IssuerUniqueId: CRYPT_BIT_BLOB,
+ SubjectUniqueId: CRYPT_BIT_BLOB,
+ cExtension: DWORD,
+ rgExtension: PCERT_EXTENSION,
+}}
+pub type PCERT_INFO = *mut CERT_INFO;
+pub const CERT_V1: DWORD = 0;
+pub const CERT_V2: DWORD = 1;
+pub const CERT_V3: DWORD = 2;
+pub const CERT_INFO_VERSION_FLAG: DWORD = 1;
+pub const CERT_INFO_SERIAL_NUMBER_FLAG: DWORD = 2;
+pub const CERT_INFO_SIGNATURE_ALGORITHM_FLAG: DWORD = 3;
+pub const CERT_INFO_ISSUER_FLAG: DWORD = 4;
+pub const CERT_INFO_NOT_BEFORE_FLAG: DWORD = 5;
+pub const CERT_INFO_NOT_AFTER_FLAG: DWORD = 6;
+pub const CERT_INFO_SUBJECT_FLAG: DWORD = 7;
+pub const CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG: DWORD = 8;
+pub const CERT_INFO_ISSUER_UNIQUE_ID_FLAG: DWORD = 9;
+pub const CERT_INFO_SUBJECT_UNIQUE_ID_FLAG: DWORD = 10;
+pub const CERT_INFO_EXTENSION_FLAG: DWORD = 11;
+STRUCT!{struct CRL_ENTRY {
+ SerialNumber: CRYPT_INTEGER_BLOB,
+ RevocationDate: FILETIME,
+ cExtension: DWORD,
+ rgExtension: PCERT_EXTENSION,
+}}
+pub type PCRL_ENTRY = *mut CRL_ENTRY;
+STRUCT!{struct CRL_INFO {
+ dwVersion: DWORD,
+ SignatureAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ Issuer: CERT_NAME_BLOB,
+ ThisUpdate: FILETIME,
+ NextUpdate: FILETIME,
+ cCRLEntry: DWORD,
+ rgCRLEntry: PCRL_ENTRY,
+ cExtension: DWORD,
+ rgExtension: PCERT_EXTENSION,
+}}
+pub type PCRL_INFO = *mut CRL_INFO;
+pub const CRL_V1: DWORD = 0;
+pub const CRL_V2: DWORD = 1;
+pub const CERT_BUNDLE_CERTIFICATE: DWORD = 0;
+pub const CERT_BUNDLE_CRL: DWORD = 1;
+STRUCT!{struct CERT_OR_CRL_BLOB {
+ dwChoice: DWORD,
+ cbEncoded: DWORD,
+ pbEncoded: *mut BYTE,
+}}
+pub type PCERT_OR_CRL_BLOB = *mut CERT_OR_CRL_BLOB;
+STRUCT!{struct CERT_OR_CRL_BUNDLE {
+ cItem: DWORD,
+ rgItem: PCERT_OR_CRL_BLOB,
+}}
+pub type PCERT_OR_CRL_BUNDLE = *mut CERT_OR_CRL_BUNDLE;
+STRUCT!{struct CERT_REQUEST_INFO {
+ dwVersion: DWORD,
+ Subject: CERT_NAME_BLOB,
+ SubjectPublicKeyInfo: CERT_PUBLIC_KEY_INFO,
+ cAttribute: DWORD,
+ rgAttribute: PCRYPT_ATTRIBUTE,
+}}
+pub type PCERT_REQUEST_INFO = *mut CERT_REQUEST_INFO;
+pub const CERT_REQUEST_V1: DWORD = 0;
+STRUCT!{struct CERT_KEYGEN_REQUEST_INFO {
+ dwVersion: DWORD,
+ SubjectPublicKeyInfo: CERT_PUBLIC_KEY_INFO,
+ pwszChallengeString: LPWSTR,
+}}
+pub type PCERT_KEYGEN_REQUEST_INFO = *mut CERT_KEYGEN_REQUEST_INFO;
+pub const CERT_KEYGEN_REQUEST_V1: DWORD = 0;
+STRUCT!{struct CERT_SIGNED_CONTENT_INFO {
+ ToBeSigned: CRYPT_DER_BLOB,
+ SignatureAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ Signature: CRYPT_BIT_BLOB,
+}}
+pub type PCERT_SIGNED_CONTENT_INFO = *mut CERT_SIGNED_CONTENT_INFO;
+STRUCT!{struct CTL_USAGE {
+ cUsageIdentifier: DWORD,
+ rgpszUsageIdentifier: *mut LPSTR,
+}}
+pub type PCTL_USAGE = *mut CTL_USAGE;
+pub type CERT_ENHKEY_USAGE = CTL_USAGE;
+pub type PCERT_ENHKEY_USAGE = *mut CERT_ENHKEY_USAGE;
+pub type PCCTL_USAGE = *const CTL_USAGE;
+pub type PCCERT_ENHKEY_USAGE = *const CERT_ENHKEY_USAGE;
+STRUCT!{struct CTL_ENTRY {
+ SubjectIdentifier: CRYPT_DATA_BLOB,
+ cAttribute: DWORD,
+ rgAttribute: PCRYPT_ATTRIBUTE,
+}}
+pub type PCTL_ENTRY = *mut CTL_ENTRY;
+STRUCT!{struct CTL_INFO {
+ dwVersion: DWORD,
+ SubjectUsage: CTL_USAGE,
+ ListIdentifier: CRYPT_DATA_BLOB,
+ SequenceNumber: CRYPT_INTEGER_BLOB,
+ ThisUpdate: FILETIME,
+ NextUpdate: FILETIME,
+ SubjectAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ cCTLEntry: DWORD,
+ rgCTLEntry: PCTL_ENTRY,
+ cExtension: DWORD,
+ rgExtension: PCERT_EXTENSION,
+}}
+pub type PCTL_INFO = *mut CTL_INFO;
+pub const CTL_V1: DWORD = 0;
+STRUCT!{struct CRYPT_TIME_STAMP_REQUEST_INFO {
+ pszTimeStampAlgorithm: LPSTR,
+ pszContentType: LPSTR,
+ Content: CRYPT_OBJID_BLOB,
+ cAttribute: DWORD,
+ rgAttribute: PCRYPT_ATTRIBUTE,
+}}
+pub type PCRYPT_TIME_STAMP_REQUEST_INFO = *mut CRYPT_TIME_STAMP_REQUEST_INFO;
+STRUCT!{struct CRYPT_ENROLLMENT_NAME_VALUE_PAIR {
+ pwszName: LPWSTR,
+ pwszValue: LPWSTR,
+}}
+pub type PCRYPT_ENROLLMENT_NAME_VALUE_PAIR = *mut CRYPT_ENROLLMENT_NAME_VALUE_PAIR;
+STRUCT!{struct CRYPT_CSP_PROVIDER {
+ dwKeySpec: DWORD,
+ pwszProviderName: LPWSTR,
+ Signature: CRYPT_BIT_BLOB,
+}}
+pub type PCRYPT_CSP_PROVIDER = *mut CRYPT_CSP_PROVIDER;
+pub const CERT_ENCODING_TYPE_MASK: DWORD = 0x0000FFFF;
+pub const CMSG_ENCODING_TYPE_MASK: DWORD = 0xFFFF0000;
+#[inline]
+pub fn GET_CERT_ENCODING_TYPE(X: DWORD) -> DWORD {
+ X & CERT_ENCODING_TYPE_MASK
+}
+#[inline]
+pub fn GET_CMSG_ENCODING_TYPE(X: DWORD) -> DWORD {
+ X & CMSG_ENCODING_TYPE_MASK
+}
+pub const CRYPT_ASN_ENCODING: DWORD = 0x00000001;
+pub const CRYPT_NDR_ENCODING: DWORD = 0x00000002;
+pub const X509_ASN_ENCODING: DWORD = 0x00000001;
+pub const X509_NDR_ENCODING: DWORD = 0x00000002;
+pub const PKCS_7_ASN_ENCODING: DWORD = 0x00010000;
+pub const PKCS_7_NDR_ENCODING: DWORD = 0x00020000;
+extern "system" {
+ pub fn CryptFormatObject(
+ dwCertEncodingType: DWORD,
+ dwFormatType: DWORD,
+ dwFormatStrType: DWORD,
+ pFormatStruct: *mut c_void,
+ lpszStructType: LPCSTR,
+ pbEncoded: *const BYTE,
+ cbEncoded: DWORD,
+ pbFormat: *mut c_void,
+ pcbFormat: *mut DWORD,
+ ) -> BOOL;
+}
+pub const CRYPT_FORMAT_STR_MULTI_LINE: DWORD = 0x0001;
+pub const CRYPT_FORMAT_STR_NO_HEX: DWORD = 0x0010;
+pub const CRYPT_FORMAT_SIMPLE: DWORD = 0x0001;
+pub const CRYPT_FORMAT_X509: DWORD = 0x0002;
+pub const CRYPT_FORMAT_OID: DWORD = 0x0004;
+pub const CRYPT_FORMAT_RDN_SEMICOLON: DWORD = 0x0100;
+pub const CRYPT_FORMAT_RDN_CRLF: DWORD = 0x0200;
+pub const CRYPT_FORMAT_RDN_UNQUOTE: DWORD = 0x0400;
+pub const CRYPT_FORMAT_RDN_REVERSE: DWORD = 0x0800;
+pub const CRYPT_FORMAT_COMMA: DWORD = 0x1000;
+pub const CRYPT_FORMAT_SEMICOLON: DWORD = CRYPT_FORMAT_RDN_SEMICOLON;
+pub const CRYPT_FORMAT_CRLF: DWORD = CRYPT_FORMAT_RDN_CRLF;
+FN!{stdcall PFN_CRYPT_ALLOC(
+ cbSize: size_t,
+) -> LPVOID}
+FN!{stdcall PFN_CRYPT_FREE(
+ pv: LPVOID,
+) -> ()}
+STRUCT!{struct CRYPT_ENCODE_PARA {
+ cbSize: DWORD,
+ pfnAlloc: PFN_CRYPT_ALLOC,
+ pfnFree: PFN_CRYPT_FREE,
+}}
+pub type PCRYPT_ENCODE_PARA = *mut CRYPT_ENCODE_PARA;
+extern "system" {
+ pub fn CryptEncodeObjectEx(
+ dwCertEncodingType: DWORD,
+ lpszStructType: LPCSTR,
+ pvStructInfo: *const c_void,
+ dwFlags: DWORD,
+ pEncodePara: PCRYPT_ENCODE_PARA,
+ pvEncoded: *mut c_void,
+ pcbEncoded: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptEncodeObject(
+ dwCertEncodingType: DWORD,
+ lpszStructType: LPCSTR,
+ pvStructInfo: *const c_void,
+ pbEncoded: *mut BYTE,
+ pcbEncoded: *mut DWORD,
+ ) -> BOOL;
+}
+pub const CRYPT_ENCODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG: DWORD = 0x8;
+pub const CRYPT_ENCODE_ALLOC_FLAG: DWORD = 0x8000;
+pub const CRYPT_UNICODE_NAME_ENCODE_ENABLE_T61_UNICODE_FLAG: DWORD
+ = CERT_RDN_ENABLE_T61_UNICODE_FLAG;
+pub const CRYPT_UNICODE_NAME_ENCODE_ENABLE_UTF8_UNICODE_FLAG: DWORD
+ = CERT_RDN_ENABLE_UTF8_UNICODE_FLAG;
+pub const CRYPT_UNICODE_NAME_ENCODE_FORCE_UTF8_UNICODE_FLAG: DWORD
+ = CERT_RDN_FORCE_UTF8_UNICODE_FLAG;
+pub const CRYPT_UNICODE_NAME_ENCODE_DISABLE_CHECK_TYPE_FLAG: DWORD
+ = CERT_RDN_DISABLE_CHECK_TYPE_FLAG;
+pub const CRYPT_SORTED_CTL_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG: DWORD = 0x10000;
+pub const CRYPT_ENCODE_ENABLE_PUNYCODE_FLAG: DWORD = 0x20000;
+pub const CRYPT_ENCODE_ENABLE_UTF8PERCENT_FLAG: DWORD = 0x40000;
+pub const CRYPT_ENCODE_ENABLE_IA5CONVERSION_FLAG: DWORD = CRYPT_ENCODE_ENABLE_PUNYCODE_FLAG
+ | CRYPT_ENCODE_ENABLE_UTF8PERCENT_FLAG;
+STRUCT!{struct CRYPT_DECODE_PARA {
+ cbSize: DWORD,
+ pfnAlloc: PFN_CRYPT_ALLOC,
+ pfnFree: PFN_CRYPT_FREE,
+}}
+pub type PCRYPT_DECODE_PARA = *mut CRYPT_DECODE_PARA;
+extern "system" {
+ pub fn CryptDecodeObjectEx(
+ dwCertEncodingType: DWORD,
+ lpszStructType: LPCSTR,
+ pbEncoded: *const BYTE,
+ cbEncoded: DWORD,
+ dwFlags: DWORD,
+ pDecodePara: PCRYPT_DECODE_PARA,
+ pvStructInfo: *mut c_void,
+ pcbStructInfo: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptDecodeObject(
+ dwCertEncodingType: DWORD,
+ lpszStructType: LPCSTR,
+ pbEncoded: *const BYTE,
+ cbEncoded: DWORD,
+ dwFlags: DWORD,
+ pvStructInfo: *mut c_void,
+ pcbStructInfo: *mut DWORD,
+ ) -> BOOL;
+}
+pub const CRYPT_DECODE_NOCOPY_FLAG: DWORD = 0x1;
+pub const CRYPT_DECODE_TO_BE_SIGNED_FLAG: DWORD = 0x2;
+pub const CRYPT_DECODE_SHARE_OID_STRING_FLAG: DWORD = 0x4;
+pub const CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG: DWORD = 0x8;
+pub const CRYPT_DECODE_ALLOC_FLAG: DWORD = 0x8000;
+pub const CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG: DWORD
+ = CERT_RDN_DISABLE_IE4_UTF8_FLAG;
+pub const CRYPT_DECODE_ENABLE_PUNYCODE_FLAG: DWORD = 0x02000000;
+pub const CRYPT_DECODE_ENABLE_UTF8PERCENT_FLAG: DWORD = 0x04000000;
+pub const CRYPT_DECODE_ENABLE_IA5CONVERSION_FLAG: DWORD = CRYPT_DECODE_ENABLE_PUNYCODE_FLAG
+ | CRYPT_DECODE_ENABLE_UTF8PERCENT_FLAG;
+pub const CRYPT_ENCODE_DECODE_NONE: LPCSTR = 0 as LPCSTR;
+pub const X509_CERT: LPCSTR = 1 as LPCSTR;
+pub const X509_CERT_TO_BE_SIGNED: LPCSTR = 2 as LPCSTR;
+pub const X509_CERT_CRL_TO_BE_SIGNED: LPCSTR = 3 as LPCSTR;
+pub const X509_CERT_REQUEST_TO_BE_SIGNED: LPCSTR = 4 as LPCSTR;
+pub const X509_EXTENSIONS: LPCSTR = 5 as LPCSTR;
+pub const X509_NAME_VALUE: LPCSTR = 6 as LPCSTR;
+pub const X509_NAME: LPCSTR = 7 as LPCSTR;
+pub const X509_PUBLIC_KEY_INFO: LPCSTR = 8 as LPCSTR;
+pub const X509_AUTHORITY_KEY_ID: LPCSTR = 9 as LPCSTR;
+pub const X509_KEY_ATTRIBUTES: LPCSTR = 10 as LPCSTR;
+pub const X509_KEY_USAGE_RESTRICTION: LPCSTR = 11 as LPCSTR;
+pub const X509_ALTERNATE_NAME: LPCSTR = 12 as LPCSTR;
+pub const X509_BASIC_CONSTRAINTS: LPCSTR = 13 as LPCSTR;
+pub const X509_KEY_USAGE: LPCSTR = 14 as LPCSTR;
+pub const X509_BASIC_CONSTRAINTS2: LPCSTR = 15 as LPCSTR;
+pub const X509_CERT_POLICIES: LPCSTR = 16 as LPCSTR;
+pub const PKCS_UTC_TIME: LPCSTR = 17 as LPCSTR;
+pub const PKCS_TIME_REQUEST: LPCSTR = 18 as LPCSTR;
+pub const RSA_CSP_PUBLICKEYBLOB: LPCSTR = 19 as LPCSTR;
+pub const X509_UNICODE_NAME: LPCSTR = 20 as LPCSTR;
+pub const X509_KEYGEN_REQUEST_TO_BE_SIGNED: LPCSTR = 21 as LPCSTR;
+pub const PKCS_ATTRIBUTE: LPCSTR = 22 as LPCSTR;
+pub const PKCS_CONTENT_INFO_SEQUENCE_OF_ANY: LPCSTR = 23 as LPCSTR;
+pub const X509_UNICODE_NAME_VALUE: LPCSTR = 24 as LPCSTR;
+pub const X509_ANY_STRING: LPCSTR = X509_NAME_VALUE;
+pub const X509_UNICODE_ANY_STRING: LPCSTR = X509_UNICODE_NAME_VALUE;
+pub const X509_OCTET_STRING: LPCSTR = 25 as LPCSTR;
+pub const X509_BITS: LPCSTR = 26 as LPCSTR;
+pub const X509_INTEGER: LPCSTR = 27 as LPCSTR;
+pub const X509_MULTI_BYTE_INTEGER: LPCSTR = 28 as LPCSTR;
+pub const X509_ENUMERATED: LPCSTR = 29 as LPCSTR;
+pub const X509_CHOICE_OF_TIME: LPCSTR = 30 as LPCSTR;
+pub const X509_AUTHORITY_KEY_ID2: LPCSTR = 31 as LPCSTR;
+pub const X509_AUTHORITY_INFO_ACCESS: LPCSTR = 32 as LPCSTR;
+pub const X509_SUBJECT_INFO_ACCESS: LPCSTR = X509_AUTHORITY_INFO_ACCESS;
+pub const X509_CRL_REASON_CODE: LPCSTR = X509_ENUMERATED;
+pub const PKCS_CONTENT_INFO: LPCSTR = 33 as LPCSTR;
+pub const X509_SEQUENCE_OF_ANY: LPCSTR = 34 as LPCSTR;
+pub const X509_CRL_DIST_POINTS: LPCSTR = 35 as LPCSTR;
+pub const X509_ENHANCED_KEY_USAGE: LPCSTR = 36 as LPCSTR;
+pub const PKCS_CTL: LPCSTR = 37 as LPCSTR;
+pub const X509_MULTI_BYTE_UINT: LPCSTR = 38 as LPCSTR;
+pub const X509_DSS_PUBLICKEY: LPCSTR = X509_MULTI_BYTE_UINT;
+pub const X509_DSS_PARAMETERS: LPCSTR = 39 as LPCSTR;
+pub const X509_DSS_SIGNATURE: LPCSTR = 40 as LPCSTR;
+pub const PKCS_RC2_CBC_PARAMETERS: LPCSTR = 41 as LPCSTR;
+pub const PKCS_SMIME_CAPABILITIES: LPCSTR = 42 as LPCSTR;
+pub const X509_QC_STATEMENTS_EXT: LPCSTR = 42 as LPCSTR;
+pub const PKCS_RSA_PRIVATE_KEY: LPCSTR = 43 as LPCSTR;
+pub const PKCS_PRIVATE_KEY_INFO: LPCSTR = 44 as LPCSTR;
+pub const PKCS_ENCRYPTED_PRIVATE_KEY_INFO: LPCSTR = 45 as LPCSTR;
+pub const X509_PKIX_POLICY_QUALIFIER_USERNOTICE: LPCSTR = 46 as LPCSTR;
+pub const X509_DH_PUBLICKEY: LPCSTR = X509_MULTI_BYTE_UINT;
+pub const X509_DH_PARAMETERS: LPCSTR = 47 as LPCSTR;
+pub const PKCS_ATTRIBUTES: LPCSTR = 48 as LPCSTR;
+pub const PKCS_SORTED_CTL: LPCSTR = 49 as LPCSTR;
+pub const X509_ECC_SIGNATURE: LPCSTR = 47 as LPCSTR;
+pub const X942_DH_PARAMETERS: LPCSTR = 50 as LPCSTR;
+pub const X509_BITS_WITHOUT_TRAILING_ZEROES: LPCSTR = 51 as LPCSTR;
+pub const X942_OTHER_INFO: LPCSTR = 52 as LPCSTR;
+pub const X509_CERT_PAIR: LPCSTR = 53 as LPCSTR;
+pub const X509_ISSUING_DIST_POINT: LPCSTR = 54 as LPCSTR;
+pub const X509_NAME_CONSTRAINTS: LPCSTR = 55 as LPCSTR;
+pub const X509_POLICY_MAPPINGS: LPCSTR = 56 as LPCSTR;
+pub const X509_POLICY_CONSTRAINTS: LPCSTR = 57 as LPCSTR;
+pub const X509_CROSS_CERT_DIST_POINTS: LPCSTR = 58 as LPCSTR;
+pub const CMC_DATA: LPCSTR = 59 as LPCSTR;
+pub const CMC_RESPONSE: LPCSTR = 60 as LPCSTR;
+pub const CMC_STATUS: LPCSTR = 61 as LPCSTR;
+pub const CMC_ADD_EXTENSIONS: LPCSTR = 62 as LPCSTR;
+pub const CMC_ADD_ATTRIBUTES: LPCSTR = 63 as LPCSTR;
+pub const X509_CERTIFICATE_TEMPLATE: LPCSTR = 64 as LPCSTR;
+pub const OCSP_SIGNED_REQUEST: LPCSTR = 65 as LPCSTR;
+pub const OCSP_REQUEST: LPCSTR = 66 as LPCSTR;
+pub const OCSP_RESPONSE: LPCSTR = 67 as LPCSTR;
+pub const OCSP_BASIC_SIGNED_RESPONSE: LPCSTR = 68 as LPCSTR;
+pub const OCSP_BASIC_RESPONSE: LPCSTR = 69 as LPCSTR;
+pub const X509_LOGOTYPE_EXT: LPCSTR = 70 as LPCSTR;
+pub const X509_BIOMETRIC_EXT: LPCSTR = 71 as LPCSTR;
+pub const CNG_RSA_PUBLIC_KEY_BLOB: LPCSTR = 72 as LPCSTR;
+pub const X509_OBJECT_IDENTIFIER: LPCSTR = 73 as LPCSTR;
+pub const X509_ALGORITHM_IDENTIFIER: LPCSTR = 74 as LPCSTR;
+pub const PKCS_RSA_SSA_PSS_PARAMETERS: LPCSTR = 75 as LPCSTR;
+pub const PKCS_RSAES_OAEP_PARAMETERS: LPCSTR = 76 as LPCSTR;
+pub const ECC_CMS_SHARED_INFO: LPCSTR = 77 as LPCSTR;
+pub const TIMESTAMP_REQUEST: LPCSTR = 78 as LPCSTR;
+pub const TIMESTAMP_RESPONSE: LPCSTR = 79 as LPCSTR;
+pub const TIMESTAMP_INFO: LPCSTR = 80 as LPCSTR;
+pub const X509_CERT_BUNDLE: LPCSTR = 81 as LPCSTR;
+pub const X509_ECC_PRIVATE_KEY: LPCSTR = 82 as LPCSTR;
+pub const CNG_RSA_PRIVATE_KEY_BLOB: LPCSTR = 83 as LPCSTR;
+pub const X509_SUBJECT_DIR_ATTRS: LPCSTR = 84 as LPCSTR;
+pub const X509_ECC_PARAMETERS: LPCSTR = 85 as LPCSTR;
+pub const PKCS7_SIGNER_INFO: LPCSTR = 500 as LPCSTR;
+pub const CMS_SIGNER_INFO: LPCSTR = 501 as LPCSTR;
+pub const szOID_AUTHORITY_KEY_IDENTIFIER: &'static str = "2.5.29.1";
+pub const szOID_KEY_ATTRIBUTES: &'static str = "2.5.29.2";
+pub const szOID_CERT_POLICIES_95: &'static str = "2.5.29.3";
+pub const szOID_KEY_USAGE_RESTRICTION: &'static str = "2.5.29.4";
+pub const szOID_SUBJECT_ALT_NAME: &'static str = "2.5.29.7";
+pub const szOID_ISSUER_ALT_NAME: &'static str = "2.5.29.8";
+pub const szOID_BASIC_CONSTRAINTS: &'static str = "2.5.29.10";
+pub const szOID_KEY_USAGE: &'static str = "2.5.29.15";
+pub const szOID_PRIVATEKEY_USAGE_PERIOD: &'static str = "2.5.29.16";
+pub const szOID_BASIC_CONSTRAINTS2: &'static str = "2.5.29.19";
+pub const szOID_CERT_POLICIES: &'static str = "2.5.29.32";
+pub const szOID_ANY_CERT_POLICY: &'static str = "2.5.29.32.0";
+pub const szOID_INHIBIT_ANY_POLICY: &'static str = "2.5.29.54";
+pub const szOID_AUTHORITY_KEY_IDENTIFIER2: &'static str = "2.5.29.35";
+pub const szOID_SUBJECT_KEY_IDENTIFIER: &'static str = "2.5.29.14";
+pub const szOID_SUBJECT_ALT_NAME2: &'static str = "2.5.29.17";
+pub const szOID_ISSUER_ALT_NAME2: &'static str = "2.5.29.18";
+pub const szOID_CRL_REASON_CODE: &'static str = "2.5.29.21";
+pub const szOID_REASON_CODE_HOLD: &'static str = "2.5.29.23";
+pub const szOID_CRL_DIST_POINTS: &'static str = "2.5.29.31";
+pub const szOID_ENHANCED_KEY_USAGE: &'static str = "2.5.29.37";
+pub const szOID_ANY_ENHANCED_KEY_USAGE: &'static str = "2.5.29.37.0";
+pub const szOID_CRL_NUMBER: &'static str = "2.5.29.20";
+pub const szOID_DELTA_CRL_INDICATOR: &'static str = "2.5.29.27";
+pub const szOID_ISSUING_DIST_POINT: &'static str = "2.5.29.28";
+pub const szOID_FRESHEST_CRL: &'static str = "2.5.29.46";
+pub const szOID_NAME_CONSTRAINTS: &'static str = "2.5.29.30";
+pub const szOID_POLICY_MAPPINGS: &'static str = "2.5.29.33";
+pub const szOID_LEGACY_POLICY_MAPPINGS: &'static str = "2.5.29.5";
+pub const szOID_POLICY_CONSTRAINTS: &'static str = "2.5.29.36";
+pub const szOID_RENEWAL_CERTIFICATE: &'static str = "1.3.6.1.4.1.311.13.1";
+pub const szOID_ENROLLMENT_NAME_VALUE_PAIR: &'static str = "1.3.6.1.4.1.311.13.2.1";
+pub const szOID_ENROLLMENT_CSP_PROVIDER: &'static str = "1.3.6.1.4.1.311.13.2.2";
+pub const szOID_OS_VERSION: &'static str = "1.3.6.1.4.1.311.13.2.3";
+pub const szOID_ENROLLMENT_AGENT: &'static str = "1.3.6.1.4.1.311.20.2.1";
+pub const szOID_PKIX: &'static str = "1.3.6.1.5.5.7";
+pub const szOID_PKIX_PE: &'static str = "1.3.6.1.5.5.7.1";
+pub const szOID_AUTHORITY_INFO_ACCESS: &'static str = "1.3.6.1.5.5.7.1.1";
+pub const szOID_SUBJECT_INFO_ACCESS: &'static str = "1.3.6.1.5.5.7.1.11";
+pub const szOID_BIOMETRIC_EXT: &'static str = "1.3.6.1.5.5.7.1.2";
+pub const szOID_QC_STATEMENTS_EXT: &'static str = "1.3.6.1.5.5.7.1.3";
+pub const szOID_LOGOTYPE_EXT: &'static str = "1.3.6.1.5.5.7.1.12";
+pub const szOID_TLS_FEATURES_EXT: &'static str = "1.3.6.1.5.5.7.1.24";
+pub const szOID_CERT_EXTENSIONS: &'static str = "1.3.6.1.4.1.311.2.1.14";
+pub const szOID_NEXT_UPDATE_LOCATION: &'static str = "1.3.6.1.4.1.311.10.2";
+pub const szOID_REMOVE_CERTIFICATE: &'static str = "1.3.6.1.4.1.311.10.8.1";
+pub const szOID_CROSS_CERT_DIST_POINTS: &'static str = "1.3.6.1.4.1.311.10.9.1";
+pub const szOID_CTL: &'static str = "1.3.6.1.4.1.311.10.1";
+pub const szOID_SORTED_CTL: &'static str = "1.3.6.1.4.1.311.10.1.1";
+pub const szOID_SERIALIZED: &'static str = "1.3.6.1.4.1.311.10.3.3.1";
+pub const szOID_NT_PRINCIPAL_NAME: &'static str = "1.3.6.1.4.1.311.20.2.3";
+pub const szOID_INTERNATIONALIZED_EMAIL_ADDRESS: &'static str = "1.3.6.1.4.1.311.20.2.4";
+pub const szOID_PRODUCT_UPDATE: &'static str = "1.3.6.1.4.1.311.31.1";
+pub const szOID_ANY_APPLICATION_POLICY: &'static str = "1.3.6.1.4.1.311.10.12.1";
+pub const szOID_AUTO_ENROLL_CTL_USAGE: &'static str = "1.3.6.1.4.1.311.20.1";
+pub const szOID_ENROLL_CERTTYPE_EXTENSION: &'static str = "1.3.6.1.4.1.311.20.2";
+pub const szOID_CERT_MANIFOLD: &'static str = "1.3.6.1.4.1.311.20.3";
+pub const szOID_CERTSRV_CA_VERSION: &'static str = "1.3.6.1.4.1.311.21.1";
+pub const szOID_CERTSRV_PREVIOUS_CERT_HASH: &'static str = "1.3.6.1.4.1.311.21.2";
+pub const szOID_CRL_VIRTUAL_BASE: &'static str = "1.3.6.1.4.1.311.21.3";
+pub const szOID_CRL_NEXT_PUBLISH: &'static str = "1.3.6.1.4.1.311.21.4";
+pub const szOID_KP_CA_EXCHANGE: &'static str = "1.3.6.1.4.1.311.21.5";
+pub const szOID_KP_PRIVACY_CA: &'static str = "1.3.6.1.4.1.311.21.36";
+pub const szOID_KP_KEY_RECOVERY_AGENT: &'static str = "1.3.6.1.4.1.311.21.6";
+pub const szOID_CERTIFICATE_TEMPLATE: &'static str = "1.3.6.1.4.1.311.21.7";
+pub const szOID_ENTERPRISE_OID_ROOT: &'static str = "1.3.6.1.4.1.311.21.8";
+pub const szOID_RDN_DUMMY_SIGNER: &'static str = "1.3.6.1.4.1.311.21.9";
+pub const szOID_APPLICATION_CERT_POLICIES: &'static str = "1.3.6.1.4.1.311.21.10";
+pub const szOID_APPLICATION_POLICY_MAPPINGS: &'static str = "1.3.6.1.4.1.311.21.11";
+pub const szOID_APPLICATION_POLICY_CONSTRAINTS: &'static str = "1.3.6.1.4.1.311.21.12";
+pub const szOID_ARCHIVED_KEY_ATTR: &'static str = "1.3.6.1.4.1.311.21.13";
+pub const szOID_CRL_SELF_CDP: &'static str = "1.3.6.1.4.1.311.21.14";
+pub const szOID_REQUIRE_CERT_CHAIN_POLICY: &'static str = "1.3.6.1.4.1.311.21.15";
+pub const szOID_ARCHIVED_KEY_CERT_HASH: &'static str = "1.3.6.1.4.1.311.21.16";
+pub const szOID_ISSUED_CERT_HASH: &'static str = "1.3.6.1.4.1.311.21.17";
+pub const szOID_DS_EMAIL_REPLICATION: &'static str = "1.3.6.1.4.1.311.21.19";
+pub const szOID_REQUEST_CLIENT_INFO: &'static str = "1.3.6.1.4.1.311.21.20";
+pub const szOID_ENCRYPTED_KEY_HASH: &'static str = "1.3.6.1.4.1.311.21.21";
+pub const szOID_CERTSRV_CROSSCA_VERSION: &'static str = "1.3.6.1.4.1.311.21.22";
+pub const szOID_NTDS_REPLICATION: &'static str = "1.3.6.1.4.1.311.25.1";
+pub const szOID_SUBJECT_DIR_ATTRS: &'static str = "2.5.29.9";
+pub const szOID_PKIX_KP: &'static str = "1.3.6.1.5.5.7.3";
+pub const szOID_PKIX_KP_SERVER_AUTH: &'static str = "1.3.6.1.5.5.7.3.1";
+pub const szOID_PKIX_KP_CLIENT_AUTH: &'static str = "1.3.6.1.5.5.7.3.2";
+pub const szOID_PKIX_KP_CODE_SIGNING: &'static str = "1.3.6.1.5.5.7.3.3";
+pub const szOID_PKIX_KP_EMAIL_PROTECTION: &'static str = "1.3.6.1.5.5.7.3.4";
+pub const szOID_PKIX_KP_IPSEC_END_SYSTEM: &'static str = "1.3.6.1.5.5.7.3.5";
+pub const szOID_PKIX_KP_IPSEC_TUNNEL: &'static str = "1.3.6.1.5.5.7.3.6";
+pub const szOID_PKIX_KP_IPSEC_USER: &'static str = "1.3.6.1.5.5.7.3.7";
+pub const szOID_PKIX_KP_TIMESTAMP_SIGNING: &'static str = "1.3.6.1.5.5.7.3.8";
+pub const szOID_PKIX_KP_OCSP_SIGNING: &'static str = "1.3.6.1.5.5.7.3.9";
+pub const szOID_PKIX_OCSP_NOCHECK: &'static str = "1.3.6.1.5.5.7.48.1.5";
+pub const szOID_PKIX_OCSP_NONCE: &'static str = "1.3.6.1.5.5.7.48.1.2";
+pub const szOID_IPSEC_KP_IKE_INTERMEDIATE: &'static str = "1.3.6.1.5.5.8.2.2";
+pub const szOID_PKINIT_KP_KDC: &'static str = "1.3.6.1.5.2.3.5";
+pub const szOID_KP_CTL_USAGE_SIGNING: &'static str = "1.3.6.1.4.1.311.10.3.1";
+pub const szOID_KP_TIME_STAMP_SIGNING: &'static str = "1.3.6.1.4.1.311.10.3.2";
+pub const szOID_SERVER_GATED_CRYPTO: &'static str = "1.3.6.1.4.1.311.10.3.3";
+pub const szOID_SGC_NETSCAPE: &'static str = "2.16.840.1.113730.4.1";
+pub const szOID_KP_EFS: &'static str = "1.3.6.1.4.1.311.10.3.4";
+pub const szOID_EFS_RECOVERY: &'static str = "1.3.6.1.4.1.311.10.3.4.1";
+pub const szOID_WHQL_CRYPTO: &'static str = "1.3.6.1.4.1.311.10.3.5";
+pub const szOID_ATTEST_WHQL_CRYPTO: &'static str = "1.3.6.1.4.1.311.10.3.5.1";
+pub const szOID_NT5_CRYPTO: &'static str = "1.3.6.1.4.1.311.10.3.6";
+pub const szOID_OEM_WHQL_CRYPTO: &'static str = "1.3.6.1.4.1.311.10.3.7";
+pub const szOID_EMBEDDED_NT_CRYPTO: &'static str = "1.3.6.1.4.1.311.10.3.8";
+pub const szOID_ROOT_LIST_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.9";
+pub const szOID_KP_QUALIFIED_SUBORDINATION: &'static str = "1.3.6.1.4.1.311.10.3.10";
+pub const szOID_KP_KEY_RECOVERY: &'static str = "1.3.6.1.4.1.311.10.3.11";
+pub const szOID_KP_DOCUMENT_SIGNING: &'static str = "1.3.6.1.4.1.311.10.3.12";
+pub const szOID_KP_LIFETIME_SIGNING: &'static str = "1.3.6.1.4.1.311.10.3.13";
+pub const szOID_KP_MOBILE_DEVICE_SOFTWARE: &'static str = "1.3.6.1.4.1.311.10.3.14";
+pub const szOID_KP_SMART_DISPLAY: &'static str = "1.3.6.1.4.1.311.10.3.15";
+pub const szOID_KP_CSP_SIGNATURE: &'static str = "1.3.6.1.4.1.311.10.3.16";
+pub const szOID_KP_FLIGHT_SIGNING: &'static str = "1.3.6.1.4.1.311.10.3.27";
+pub const szOID_PLATFORM_MANIFEST_BINARY_ID: &'static str = "1.3.6.1.4.1.311.10.3.28";
+pub const szOID_DRM: &'static str = "1.3.6.1.4.1.311.10.5.1";
+pub const szOID_DRM_INDIVIDUALIZATION: &'static str = "1.3.6.1.4.1.311.10.5.2";
+pub const szOID_LICENSES: &'static str = "1.3.6.1.4.1.311.10.6.1";
+pub const szOID_LICENSE_SERVER: &'static str = "1.3.6.1.4.1.311.10.6.2";
+pub const szOID_KP_SMARTCARD_LOGON: &'static str = "1.3.6.1.4.1.311.20.2.2";
+pub const szOID_KP_KERNEL_MODE_CODE_SIGNING: &'static str = "1.3.6.1.4.1.311.61.1.1";
+pub const szOID_KP_KERNEL_MODE_TRUSTED_BOOT_SIGNING: &'static str = "1.3.6.1.4.1.311.61.4.1";
+pub const szOID_REVOKED_LIST_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.19";
+pub const szOID_WINDOWS_KITS_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.20";
+pub const szOID_WINDOWS_RT_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.21";
+pub const szOID_PROTECTED_PROCESS_LIGHT_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.22";
+pub const szOID_WINDOWS_TCB_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.23";
+pub const szOID_PROTECTED_PROCESS_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.24";
+pub const szOID_WINDOWS_THIRD_PARTY_COMPONENT_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.25";
+pub const szOID_WINDOWS_SOFTWARE_EXTENSION_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.26";
+pub const szOID_DISALLOWED_LIST: &'static str = "1.3.6.1.4.1.311.10.3.30";
+pub const szOID_PIN_RULES_SIGNER: &'static str = "1.3.6.1.4.1.311.10.3.31";
+pub const szOID_PIN_RULES_CTL: &'static str = "1.3.6.1.4.1.311.10.3.32";
+pub const szOID_PIN_RULES_EXT: &'static str = "1.3.6.1.4.1.311.10.3.33";
+pub const szOID_PIN_RULES_DOMAIN_NAME: &'static str = "1.3.6.1.4.1.311.10.3.34";
+pub const szOID_PIN_RULES_LOG_END_DATE_EXT: &'static str = "1.3.6.1.4.1.311.10.3.35";
+pub const szOID_IUM_SIGNING: &'static str = "1.3.6.1.4.1.311.10.3.37";
+pub const szOID_EV_WHQL_CRYPTO: &'static str = "1.3.6.1.4.1.311.10.3.39";
+pub const szOID_SYNC_ROOT_CTL_EXT: &'static str = "1.3.6.1.4.1.311.10.3.50";
+pub const szOID_HPKP_DOMAIN_NAME_CTL: &'static str = "1.3.6.1.4.1.311.10.3.60";
+pub const szOID_HPKP_HEADER_VALUE_CTL: &'static str = "1.3.6.1.4.1.311.10.3.61";
+pub const szOID_KP_KERNEL_MODE_HAL_EXTENSION_SIGNING: &'static str = "1.3.6.1.4.1.311.61.5.1";
+pub const szOID_WINDOWS_STORE_SIGNER: &'static str = "1.3.6.1.4.1.311.76.3.1";
+pub const szOID_DYNAMIC_CODE_GEN_SIGNER: &'static str = "1.3.6.1.4.1.311.76.5.1";
+pub const szOID_MICROSOFT_PUBLISHER_SIGNER: &'static str = "1.3.6.1.4.1.311.76.8.1";
+pub const szOID_YESNO_TRUST_ATTR: &'static str = "1.3.6.1.4.1.311.10.4.1";
+pub const szOID_SITE_PIN_RULES_INDEX_ATTR: &'static str = "1.3.6.1.4.1.311.10.4.2";
+pub const szOID_SITE_PIN_RULES_FLAGS_ATTR: &'static str = "1.3.6.1.4.1.311.10.4.3";
+pub const szOID_PKIX_POLICY_QUALIFIER_CPS: &'static str = "1.3.6.1.5.5.7.2.1";
+pub const szOID_PKIX_POLICY_QUALIFIER_USERNOTICE: &'static str = "1.3.6.1.5.5.7.2.2";
+pub const szOID_ROOT_PROGRAM_FLAGS: &'static str = "1.3.6.1.4.1.311.60.1.1";
+pub const CERT_ROOT_PROGRAM_FLAG_ORG: DWORD = 0x80;
+pub const CERT_ROOT_PROGRAM_FLAG_LSC: DWORD = 0x40;
+pub const CERT_ROOT_PROGRAM_FLAG_SUBJECT_LOGO: DWORD = 0x20;
+pub const CERT_ROOT_PROGRAM_FLAG_OU: DWORD = 0x10;
+pub const CERT_ROOT_PROGRAM_FLAG_ADDRESS: DWORD = 0x08;
+pub const szOID_CERT_POLICIES_95_QUALIFIER1: &'static str = "2.16.840.1.113733.1.7.1.1";
+pub const szOID_RDN_TPM_MANUFACTURER: &'static str = "2.23.133.2.1";
+pub const szOID_RDN_TPM_MODEL: &'static str = "2.23.133.2.2";
+pub const szOID_RDN_TPM_VERSION: &'static str = "2.23.133.2.3";
+pub const szOID_RDN_TCG_PLATFORM_MANUFACTURER: &'static str = "2.23.133.2.4";
+pub const szOID_RDN_TCG_PLATFORM_MODEL: &'static str = "2.23.133.2.5";
+pub const szOID_RDN_TCG_PLATFORM_VERSION: &'static str = "2.23.133.2.6";
+pub const szOID_ENROLL_EK_INFO: &'static str = "1.3.6.1.4.1.311.21.23";
+pub const szOID_ENROLL_AIK_INFO: &'static str = "1.3.6.1.4.1.311.21.39";
+pub const szOID_ENROLL_ATTESTATION_STATEMENT: &'static str = "1.3.6.1.4.1.311.21.24";
+pub const szOID_ENROLL_KSP_NAME: &'static str = "1.3.6.1.4.1.311.21.25";
+pub const szOID_ENROLL_EKPUB_CHALLENGE: &'static str = "1.3.6.1.4.1.311.21.26";
+pub const szOID_ENROLL_CAXCHGCERT_HASH: &'static str = "1.3.6.1.4.1.311.21.27";
+pub const szOID_ENROLL_ATTESTATION_CHALLENGE: &'static str = "1.3.6.1.4.1.311.21.28";
+pub const szOID_ENROLL_ENCRYPTION_ALGORITHM: &'static str = "1.3.6.1.4.1.311.21.29";
+pub const szOID_KP_TPM_EK_CERTIFICATE: &'static str = "2.23.133.8.1";
+pub const szOID_KP_TPM_PLATFORM_CERTIFICATE: &'static str = "2.23.133.8.2";
+pub const szOID_KP_TPM_AIK_CERTIFICATE: &'static str = "2.23.133.8.3";
+pub const szOID_ENROLL_EKVERIFYKEY: &'static str = "1.3.6.1.4.1.311.21.30";
+pub const szOID_ENROLL_EKVERIFYCERT: &'static str = "1.3.6.1.4.1.311.21.31";
+pub const szOID_ENROLL_EKVERIFYCREDS: &'static str = "1.3.6.1.4.1.311.21.32";
+pub const szOID_ENROLL_SCEP_ERROR: &'static str = "1.3.6.1.4.1.311.21.33";
+pub const szOID_ENROLL_SCEP_SERVER_STATE: &'static str = "1.3.6.1.4.1.311.21.34";
+pub const szOID_ENROLL_SCEP_CHALLENGE_ANSWER: &'static str = "1.3.6.1.4.1.311.21.35";
+pub const szOID_ENROLL_SCEP_CLIENT_REQUEST: &'static str = "1.3.6.1.4.1.311.21.37";
+pub const szOID_ENROLL_SCEP_SERVER_MESSAGE: &'static str = "1.3.6.1.4.1.311.21.38";
+pub const szOID_ENROLL_SCEP_SERVER_SECRET: &'static str = "1.3.6.1.4.1.311.21.40";
+pub const szOID_ENROLL_KEY_AFFINITY: &'static str = "1.3.6.1.4.1.311.21.41";
+pub const szOID_ENROLL_SCEP_SIGNER_HASH: &'static str = "1.3.6.1.4.1.311.21.42";
+pub const szOID_ENROLL_EK_CA_KEYID: &'static str = "1.3.6.1.4.1.311.21.43";
+pub const szOID_ATTR_SUPPORTED_ALGORITHMS: &'static str = "2.5.4.52";
+pub const szOID_ATTR_TPM_SPECIFICATION: &'static str = "2.23.133.2.16";
+pub const szOID_ATTR_PLATFORM_SPECIFICATION: &'static str = "2.23.133.2.17";
+pub const szOID_ATTR_TPM_SECURITY_ASSERTIONS: &'static str = "2.23.133.2.18";
+STRUCT!{struct CERT_EXTENSIONS {
+ cExtension: DWORD,
+ rgExtension: PCERT_EXTENSION,
+}}
+pub type PCERT_EXTENSIONS = *mut CERT_EXTENSIONS;
+pub const CERT_UNICODE_RDN_ERR_INDEX_MASK: DWORD = 0x3FF;
+pub const CERT_UNICODE_RDN_ERR_INDEX_SHIFT: DWORD = 22;
+pub const CERT_UNICODE_ATTR_ERR_INDEX_MASK: DWORD = 0x003F;
+pub const CERT_UNICODE_ATTR_ERR_INDEX_SHIFT: DWORD = 16;
+pub const CERT_UNICODE_VALUE_ERR_INDEX_MASK: DWORD = 0x0000FFFF;
+pub const CERT_UNICODE_VALUE_ERR_INDEX_SHIFT: DWORD = 0;
+#[inline]
+pub fn GET_CERT_UNICODE_RDN_ERR_INDEX(X: DWORD) -> DWORD {
+ (X >> CERT_UNICODE_RDN_ERR_INDEX_SHIFT) & CERT_UNICODE_RDN_ERR_INDEX_MASK
+}
+#[inline]
+pub fn GET_CERT_UNICODE_ATTR_ERR_INDEX(X: DWORD) -> DWORD {
+ (X >> CERT_UNICODE_ATTR_ERR_INDEX_SHIFT) & CERT_UNICODE_ATTR_ERR_INDEX_MASK
+}
+#[inline]
+pub fn GET_CERT_UNICODE_VALUE_ERR_INDEX(X: DWORD) -> DWORD {
+ X & CERT_UNICODE_VALUE_ERR_INDEX_MASK
+}
+STRUCT!{struct CERT_AUTHORITY_KEY_ID_INFO {
+ KeyId: CRYPT_DATA_BLOB,
+ CertIssuer: CERT_NAME_BLOB,
+ CertSerialNumber: CRYPT_INTEGER_BLOB,
+}}
+pub type PCERT_AUTHORITY_KEY_ID_INFO = *mut CERT_AUTHORITY_KEY_ID_INFO;
+STRUCT!{struct CERT_PRIVATE_KEY_VALIDITY {
+ NotBefore: FILETIME,
+ NotAfter: FILETIME,
+}}
+pub type PCERT_PRIVATE_KEY_VALIDITY = *mut CERT_PRIVATE_KEY_VALIDITY;
+STRUCT!{struct CERT_KEY_ATTRIBUTES_INFO {
+ KeyId: CRYPT_DATA_BLOB,
+ IntendedKeyUsage: CRYPT_BIT_BLOB,
+ pPrivateKeyUsagePeriod: PCERT_PRIVATE_KEY_VALIDITY,
+}}
+pub type PCERT_KEY_ATTRIBUTES_INFO = *mut CERT_KEY_ATTRIBUTES_INFO;
+pub const CERT_DIGITAL_SIGNATURE_KEY_USAGE: DWORD = 0x80;
+pub const CERT_NON_REPUDIATION_KEY_USAGE: DWORD = 0x40;
+pub const CERT_KEY_ENCIPHERMENT_KEY_USAGE: DWORD = 0x20;
+pub const CERT_DATA_ENCIPHERMENT_KEY_USAGE: DWORD = 0x10;
+pub const CERT_KEY_AGREEMENT_KEY_USAGE: DWORD = 0x08;
+pub const CERT_KEY_CERT_SIGN_KEY_USAGE: DWORD = 0x04;
+pub const CERT_OFFLINE_CRL_SIGN_KEY_USAGE: DWORD = 0x02;
+pub const CERT_CRL_SIGN_KEY_USAGE: DWORD = 0x02;
+pub const CERT_ENCIPHER_ONLY_KEY_USAGE: DWORD = 0x01;
+pub const CERT_DECIPHER_ONLY_KEY_USAGE: DWORD = 0x80;
+STRUCT!{struct CERT_POLICY_ID {
+ cCertPolicyElementId: DWORD,
+ rgpszCertPolicyElementId: *mut LPSTR,
+}}
+pub type PCERT_POLICY_ID = *mut CERT_POLICY_ID;
+STRUCT!{struct CERT_KEY_USAGE_RESTRICTION_INFO {
+ cCertPolicyId: DWORD,
+ rgCertPolicyId: PCERT_POLICY_ID,
+ RestrictedKeyUsage: CRYPT_BIT_BLOB,
+}}
+pub type PCERT_KEY_USAGE_RESTRICTION_INFO = *mut CERT_KEY_USAGE_RESTRICTION_INFO;
+STRUCT!{struct CERT_OTHER_NAME {
+ pszObjId: LPSTR,
+ Value: CRYPT_OBJID_BLOB,
+}}
+pub type PCERT_OTHER_NAME = *mut CERT_OTHER_NAME;
+UNION!{union CERT_ALT_NAME_ENTRY_u {
+ [usize; 2],
+ pOtherName pOtherName_mut: PCERT_OTHER_NAME,
+ pwszRfc822Name pwszRfc822Name_mut: LPWSTR,
+ pwszDNSName pwszDNSName_mut: LPWSTR,
+ DirectoryName DirectoryName_mut: CERT_NAME_BLOB,
+ pwszURL pwszURL_mut: LPWSTR,
+ IPAddress IPAddress_mut: CRYPT_DATA_BLOB,
+ pszRegisteredID pszRegisteredID_mut: LPSTR,
+}}
+STRUCT!{struct CERT_ALT_NAME_ENTRY {
+ dwAltNameChoice: DWORD,
+ u: CERT_ALT_NAME_ENTRY_u,
+}}
+pub type PCERT_ALT_NAME_ENTRY = *mut CERT_ALT_NAME_ENTRY;
+pub const CERT_ALT_NAME_OTHER_NAME: DWORD = 1;
+pub const CERT_ALT_NAME_RFC822_NAME: DWORD = 2;
+pub const CERT_ALT_NAME_DNS_NAME: DWORD = 3;
+pub const CERT_ALT_NAME_X400_ADDRESS: DWORD = 4;
+pub const CERT_ALT_NAME_DIRECTORY_NAME: DWORD = 5;
+pub const CERT_ALT_NAME_EDI_PARTY_NAME: DWORD = 6;
+pub const CERT_ALT_NAME_URL: DWORD = 7;
+pub const CERT_ALT_NAME_IP_ADDRESS: DWORD = 8;
+pub const CERT_ALT_NAME_REGISTERED_ID: DWORD = 9;
+STRUCT!{struct CERT_ALT_NAME_INFO {
+ cAltEntry: DWORD,
+ rgAltEntry: PCERT_ALT_NAME_ENTRY,
+}}
+pub type PCERT_ALT_NAME_INFO = *mut CERT_ALT_NAME_INFO;
+pub const CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK: DWORD = 0xFF;
+pub const CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT: DWORD = 16;
+pub const CERT_ALT_NAME_VALUE_ERR_INDEX_MASK: DWORD = 0x0000FFFF;
+pub const CERT_ALT_NAME_VALUE_ERR_INDEX_SHIFT: DWORD = 0;
+#[inline]
+pub fn GET_CERT_ALT_NAME_ENTRY_ERR_INDEX(X: DWORD) -> DWORD {
+ (X >> CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT) & CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK
+}
+#[inline]
+pub fn GET_CERT_ALT_NAME_VALUE_ERR_INDEX(X: DWORD) -> DWORD {
+ X & CERT_ALT_NAME_VALUE_ERR_INDEX_MASK
+}
+STRUCT!{struct CERT_BASIC_CONSTRAINTS_INFO {
+ SubjectType: CRYPT_BIT_BLOB,
+ fPathLenConstraint: BOOL,
+ dwPathLenConstraint: DWORD,
+ cSubtreesConstraint: DWORD,
+ rgSubtreesConstraint: *mut CERT_NAME_BLOB,
+}}
+pub type PCERT_BASIC_CONSTRAINTS_INFO = *mut CERT_BASIC_CONSTRAINTS_INFO;
+pub const CERT_CA_SUBJECT_FLAG: DWORD = 0x80;
+pub const CERT_END_ENTITY_SUBJECT_FLAG: DWORD = 0x40;
+STRUCT!{struct CERT_BASIC_CONSTRAINTS2_INFO {
+ fCA: BOOL,
+ fPathLenConstraint: BOOL,
+ dwPathLenConstraint: DWORD,
+}}
+pub type PCERT_BASIC_CONSTRAINTS2_INFO = *mut CERT_BASIC_CONSTRAINTS2_INFO;
+STRUCT!{struct CERT_POLICY_QUALIFIER_INFO {
+ pszPolicyQualifierId: LPSTR,
+ Qualifier: CRYPT_OBJID_BLOB,
+}}
+pub type PCERT_POLICY_QUALIFIER_INFO = *mut CERT_POLICY_QUALIFIER_INFO;
+STRUCT!{struct CERT_POLICY_INFO {
+ pszPolicyIdentifier: LPSTR,
+ cPolicyQualifier: DWORD,
+ rgPolicyQualifier: *mut CERT_POLICY_QUALIFIER_INFO,
+}}
+pub type PCERT_POLICY_INFO = *mut CERT_POLICY_INFO;
+STRUCT!{struct CERT_POLICIES_INFO {
+ cPolicyInfo: DWORD,
+ rgPolicyInfo: *mut CERT_POLICY_INFO,
+}}
+pub type PCERT_POLICIES_INFO = *mut CERT_POLICIES_INFO;
+STRUCT!{struct CERT_POLICY_QUALIFIER_NOTICE_REFERENCE {
+ pszOrganization: LPSTR,
+ cNoticeNumbers: DWORD,
+ rgNoticeNumbers: *mut c_int,
+}}
+pub type PCERT_POLICY_QUALIFIER_NOTICE_REFERENCE = *mut CERT_POLICY_QUALIFIER_NOTICE_REFERENCE;
+STRUCT!{struct CERT_POLICY_QUALIFIER_USER_NOTICE {
+ pNoticeReference: *mut CERT_POLICY_QUALIFIER_NOTICE_REFERENCE,
+ pszDisplayText: LPWSTR,
+}}
+pub type PCERT_POLICY_QUALIFIER_USER_NOTICE = *mut CERT_POLICY_QUALIFIER_USER_NOTICE;
+STRUCT!{struct CPS_URLS {
+ pszURL: LPWSTR,
+ pAlgorithm: *mut CRYPT_ALGORITHM_IDENTIFIER,
+ pDigest: *mut CRYPT_DATA_BLOB,
+}}
+pub type PCPS_URLS = *mut CPS_URLS;
+STRUCT!{struct CERT_POLICY95_QUALIFIER1 {
+ pszPracticesReference: LPWSTR,
+ pszNoticeIdentifier: LPSTR,
+ pszNSINoticeIdentifier: LPSTR,
+ cCPSURLs: DWORD,
+ rgCPSURLs: *mut CPS_URLS,
+}}
+pub type PCERT_POLICY95_QUALIFIER1 = *mut CERT_POLICY95_QUALIFIER1;
+STRUCT!{struct CERT_POLICY_MAPPING {
+ pszIssuerDomainPolicy: LPSTR,
+ pszSubjectDomainPolicy: LPSTR,
+}}
+pub type PCERT_POLICY_MAPPING = *mut CERT_POLICY_MAPPING;
+STRUCT!{struct CERT_POLICY_MAPPINGS_INFO {
+ cPolicyMapping: DWORD,
+ rgPolicyMapping: PCERT_POLICY_MAPPING,
+}}
+pub type PCERT_POLICY_MAPPINGS_INFO = *mut CERT_POLICY_MAPPINGS_INFO;
+STRUCT!{struct CERT_POLICY_CONSTRAINTS_INFO {
+ fRequireExplicitPolicy: BOOL,
+ dwRequireExplicitPolicySkipCerts: DWORD,
+ fInhibitPolicyMapping: BOOL,
+ dwInhibitPolicyMappingSkipCerts: DWORD,
+}}
+pub type PCERT_POLICY_CONSTRAINTS_INFO = *mut CERT_POLICY_CONSTRAINTS_INFO;
+STRUCT!{struct CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY {
+ pszObjId: LPSTR,
+ cValue: DWORD,
+ rgValue: PCRYPT_DER_BLOB,
+}}
+pub type PCRYPT_CONTENT_INFO_SEQUENCE_OF_ANY = *mut CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY;
+STRUCT!{struct CRYPT_CONTENT_INFO {
+ pszObjId: LPSTR,
+ Content: CRYPT_DER_BLOB,
+}}
+pub type PCRYPT_CONTENT_INFO = *mut CRYPT_CONTENT_INFO;
+STRUCT!{struct CRYPT_SEQUENCE_OF_ANY {
+ cValue: DWORD,
+ rgValue: PCRYPT_DER_BLOB,
+}}
+pub type PCRYPT_SEQUENCE_OF_ANY = *mut CRYPT_SEQUENCE_OF_ANY;
+STRUCT!{struct CERT_AUTHORITY_KEY_ID2_INFO {
+ KeyId: CRYPT_DATA_BLOB,
+ AuthorityCertIssuer: CERT_ALT_NAME_INFO,
+ AuthorityCertSerialNumber: CRYPT_INTEGER_BLOB,
+}}
+pub type PCERT_AUTHORITY_KEY_ID2_INFO = *mut CERT_AUTHORITY_KEY_ID2_INFO;
+STRUCT!{struct CERT_ACCESS_DESCRIPTION {
+ pszAccessMethod: LPSTR,
+ AccessLocation: CERT_ALT_NAME_ENTRY,
+}}
+pub type PCERT_ACCESS_DESCRIPTION = *mut CERT_ACCESS_DESCRIPTION;
+STRUCT!{struct CERT_AUTHORITY_INFO_ACCESS {
+ cAccDescr: DWORD,
+ rgAccDescr: PCERT_ACCESS_DESCRIPTION,
+}}
+pub type PCERT_AUTHORITY_INFO_ACCESS = *mut CERT_AUTHORITY_INFO_ACCESS;
+pub type CERT_SUBJECT_INFO_ACCESS = CERT_AUTHORITY_INFO_ACCESS;
+pub type PCERT_SUBJECT_INFO_ACCESS = *mut CERT_AUTHORITY_INFO_ACCESS;
+pub const szOID_PKIX_ACC_DESCR: &'static str = "1.3.6.1.5.5.7.48";
+pub const szOID_PKIX_OCSP: &'static str = "1.3.6.1.5.5.7.48.1";
+pub const szOID_PKIX_CA_ISSUERS: &'static str = "1.3.6.1.5.5.7.48.2";
+pub const szOID_PKIX_TIME_STAMPING: &'static str = "1.3.6.1.5.5.7.48.3";
+pub const szOID_PKIX_CA_REPOSITORY: &'static str = "1.3.6.1.5.5.7.48.5";
+pub const CRL_REASON_UNSPECIFIED: DWORD = 0;
+pub const CRL_REASON_KEY_COMPROMISE: DWORD = 1;
+pub const CRL_REASON_CA_COMPROMISE: DWORD = 2;
+pub const CRL_REASON_AFFILIATION_CHANGED: DWORD = 3;
+pub const CRL_REASON_SUPERSEDED: DWORD = 4;
+pub const CRL_REASON_CESSATION_OF_OPERATION: DWORD = 5;
+pub const CRL_REASON_CERTIFICATE_HOLD: DWORD = 6;
+pub const CRL_REASON_REMOVE_FROM_CRL: DWORD = 8;
+pub const CRL_REASON_PRIVILEGE_WITHDRAWN: DWORD = 9;
+pub const CRL_REASON_AA_COMPROMISE: DWORD = 10;
+UNION!{union CRL_DIST_POINT_NAME_u {
+ [usize; 2],
+ FullName FullName_mut: CERT_ALT_NAME_INFO,
+}}
+STRUCT!{struct CRL_DIST_POINT_NAME {
+ dwDistPointNameChoice: DWORD,
+ u: CRL_DIST_POINT_NAME_u,
+}}
+pub type PCRL_DIST_POINT_NAME = *mut CRL_DIST_POINT_NAME;
+pub const CRL_DIST_POINT_NO_NAME: DWORD = 0;
+pub const CRL_DIST_POINT_FULL_NAME: DWORD = 1;
+pub const CRL_DIST_POINT_ISSUER_RDN_NAME: DWORD = 2;
+STRUCT!{struct CRL_DIST_POINT {
+ DistPointName: CRL_DIST_POINT_NAME,
+ ReasonFlags: CRYPT_BIT_BLOB,
+ CRLIssuer: CERT_ALT_NAME_INFO,
+}}
+pub type PCRL_DIST_POINT = *mut CRL_DIST_POINT;
+pub const CRL_REASON_UNUSED_FLAG: DWORD = 0x80;
+pub const CRL_REASON_KEY_COMPROMISE_FLAG: DWORD = 0x40;
+pub const CRL_REASON_CA_COMPROMISE_FLAG: DWORD = 0x20;
+pub const CRL_REASON_AFFILIATION_CHANGED_FLAG: DWORD = 0x10;
+pub const CRL_REASON_SUPERSEDED_FLAG: DWORD = 0x08;
+pub const CRL_REASON_CESSATION_OF_OPERATION_FLAG: DWORD = 0x04;
+pub const CRL_REASON_CERTIFICATE_HOLD_FLAG: DWORD = 0x02;
+pub const CRL_REASON_PRIVILEGE_WITHDRAWN_FLAG: DWORD = 0x01;
+pub const CRL_REASON_AA_COMPROMISE_FLAG: DWORD = 0x80;
+STRUCT!{struct CRL_DIST_POINTS_INFO {
+ cDistPoint: DWORD,
+ rgDistPoint: PCRL_DIST_POINT,
+}}
+pub type PCRL_DIST_POINTS_INFO = *mut CRL_DIST_POINTS_INFO;
+pub const CRL_DIST_POINT_ERR_INDEX_MASK: DWORD = 0x7F;
+pub const CRL_DIST_POINT_ERR_INDEX_SHIFT: DWORD = 24;
+#[inline]
+pub fn GET_CRL_DIST_POINT_ERR_INDEX(X: DWORD) -> DWORD {
+ (X >> CRL_DIST_POINT_ERR_INDEX_SHIFT) & CRL_DIST_POINT_ERR_INDEX_MASK
+}
+pub const CRL_DIST_POINT_ERR_CRL_ISSUER_BIT: DWORD = 0x80000000;
+#[inline]
+pub fn IS_CRL_DIST_POINT_ERR_CRL_ISSUER(X: DWORD) -> bool {
+ 0 != (X & CRL_DIST_POINT_ERR_CRL_ISSUER_BIT)
+}
+STRUCT!{struct CROSS_CERT_DIST_POINTS_INFO {
+ dwSyncDeltaTime: DWORD,
+ cDistPoint: DWORD,
+ rgDistPoint: PCERT_ALT_NAME_INFO,
+}}
+pub type PCROSS_CERT_DIST_POINTS_INFO = *mut CROSS_CERT_DIST_POINTS_INFO;
+pub const CROSS_CERT_DIST_POINT_ERR_INDEX_MASK: DWORD = 0xFF;
+pub const CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT: DWORD = 24;
+#[inline]
+pub fn GET_CROSS_CERT_DIST_POINT_ERR_INDEX(X: DWORD) -> DWORD {
+ (X >> CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT) & CROSS_CERT_DIST_POINT_ERR_INDEX_MASK
+}
+STRUCT!{struct CERT_PAIR {
+ Forward: CERT_BLOB,
+ Reverse: CERT_BLOB,
+}}
+pub type PCERT_PAIR = *mut CERT_PAIR;
+STRUCT!{struct CRL_ISSUING_DIST_POINT {
+ DistPointName: CRL_DIST_POINT_NAME,
+ fOnlyContainsUserCerts: BOOL,
+ fOnlyContainsCACerts: BOOL,
+ OnlySomeReasonFlags: CRYPT_BIT_BLOB,
+ fIndirectCRL: BOOL,
+}}
+pub type PCRL_ISSUING_DIST_POINT = *mut CRL_ISSUING_DIST_POINT;
+STRUCT!{struct CERT_GENERAL_SUBTREE {
+ Base: CERT_ALT_NAME_ENTRY,
+ dwMinimum: DWORD,
+ fMaximum: BOOL,
+ dwMaximum: DWORD,
+}}
+pub type PCERT_GENERAL_SUBTREE = *mut CERT_GENERAL_SUBTREE;
+STRUCT!{struct CERT_NAME_CONSTRAINTS_INFO {
+ cPermittedSubtree: DWORD,
+ rgPermittedSubtree: PCERT_GENERAL_SUBTREE,
+ cExcludedSubtree: DWORD,
+ rgExcludedSubtree: PCERT_GENERAL_SUBTREE,
+}}
+pub type PCERT_NAME_CONSTRAINTS_INFO = *mut CERT_NAME_CONSTRAINTS_INFO;
+pub const CERT_EXCLUDED_SUBTREE_BIT: DWORD = 0x80000000;
+#[inline]
+pub fn IS_CERT_EXCLUDED_SUBTREE(X: DWORD) -> bool {
+ 0 != (X & CERT_EXCLUDED_SUBTREE_BIT)
+}
+pub const SORTED_CTL_EXT_FLAGS_OFFSET: c_int = 0 * 4;
+pub const SORTED_CTL_EXT_COUNT_OFFSET: c_int = 1 * 4;
+pub const SORTED_CTL_EXT_MAX_COLLISION_OFFSET: c_int = 2 * 4;
+pub const SORTED_CTL_EXT_HASH_BUCKET_OFFSET: c_int = 3 * 4;
+pub const SORTED_CTL_EXT_HASHED_SUBJECT_IDENTIFIER_FLAG: DWORD = 0x1;
+STRUCT!{struct CERT_DSS_PARAMETERS {
+ p: CRYPT_UINT_BLOB,
+ q: CRYPT_UINT_BLOB,
+ g: CRYPT_UINT_BLOB,
+}}
+pub type PCERT_DSS_PARAMETERS = *mut CERT_DSS_PARAMETERS;
+pub const CERT_DSS_R_LEN: usize = 20;
+pub const CERT_DSS_S_LEN: usize = 20;
+pub const CERT_DSS_SIGNATURE_LEN: usize = CERT_DSS_R_LEN + CERT_DSS_S_LEN;
+pub const CERT_MAX_ASN_ENCODED_DSS_SIGNATURE_LEN: usize = 2 + 2 * (2 + 20 + 1);
+STRUCT!{struct CERT_DH_PARAMETERS {
+ p: CRYPT_UINT_BLOB,
+ g: CRYPT_UINT_BLOB,
+}}
+pub type PCERT_DH_PARAMETERS = *mut CERT_DH_PARAMETERS;
+STRUCT!{struct CERT_ECC_SIGNATURE {
+ r: CRYPT_UINT_BLOB,
+ s: CRYPT_UINT_BLOB,
+}}
+pub type PCERT_ECC_SIGNATURE = *mut CERT_ECC_SIGNATURE;
+STRUCT!{struct CERT_X942_DH_VALIDATION_PARAMS {
+ seed: CRYPT_BIT_BLOB,
+ pgenCounter: DWORD,
+}}
+pub type PCERT_X942_DH_VALIDATION_PARAMS = *mut CERT_X942_DH_VALIDATION_PARAMS;
+STRUCT!{struct CERT_X942_DH_PARAMETERS {
+ p: CRYPT_UINT_BLOB,
+ g: CRYPT_UINT_BLOB,
+ q: CRYPT_UINT_BLOB,
+ j: CRYPT_UINT_BLOB,
+ pValidationParams: PCERT_X942_DH_VALIDATION_PARAMS,
+}}
+pub type PCERT_X942_DH_PARAMETERS = *mut CERT_X942_DH_PARAMETERS;
+pub const CRYPT_X942_COUNTER_BYTE_LENGTH: usize = 4;
+pub const CRYPT_X942_KEY_LENGTH_BYTE_LENGTH: usize = 4;
+pub const CRYPT_X942_PUB_INFO_BYTE_LENGTH: usize = 512 / 8;
+STRUCT!{struct CRYPT_X942_OTHER_INFO {
+ pszContentEncryptionObjId: LPSTR,
+ rgbCounter: [BYTE; CRYPT_X942_COUNTER_BYTE_LENGTH],
+ rgbKeyLength: [BYTE; CRYPT_X942_KEY_LENGTH_BYTE_LENGTH],
+ PubInfo: CRYPT_DATA_BLOB,
+}}
+pub type PCRYPT_X942_OTHER_INFO = *mut CRYPT_X942_OTHER_INFO;
+pub const CRYPT_ECC_CMS_SHARED_INFO_SUPPPUBINFO_BYTE_LENGTH: usize = 4;
+STRUCT!{struct CRYPT_ECC_CMS_SHARED_INFO {
+ Algorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ EntityUInfo: CRYPT_DATA_BLOB,
+ rgbSuppPubInfo: [BYTE; CRYPT_ECC_CMS_SHARED_INFO_SUPPPUBINFO_BYTE_LENGTH],
+}}
+pub type PCRYPT_ECC_CMS_SHARED_INFO = *mut CRYPT_ECC_CMS_SHARED_INFO;
+STRUCT!{struct CRYPT_RC2_CBC_PARAMETERS {
+ dwVersion: DWORD,
+ fIV: BOOL,
+ rgbIV: [BYTE; 8],
+}}
+pub type PCRYPT_RC2_CBC_PARAMETERS = *mut CRYPT_RC2_CBC_PARAMETERS;
+pub const CRYPT_RC2_40BIT_VERSION: DWORD = 160;
+pub const CRYPT_RC2_56BIT_VERSION: DWORD = 52;
+pub const CRYPT_RC2_64BIT_VERSION: DWORD = 120;
+pub const CRYPT_RC2_128BIT_VERSION: DWORD = 58;
+STRUCT!{struct CRYPT_SMIME_CAPABILITY {
+ pszObjId: LPSTR,
+ Parameters: CRYPT_OBJID_BLOB,
+}}
+pub type PCRYPT_SMIME_CAPABILITY = *mut CRYPT_SMIME_CAPABILITY;
+STRUCT!{struct CRYPT_SMIME_CAPABILITIES {
+ cCapability: DWORD,
+ rgCapability: PCRYPT_SMIME_CAPABILITY,
+}}
+pub type PCRYPT_SMIME_CAPABILITIES = *mut CRYPT_SMIME_CAPABILITIES;
+STRUCT!{struct CERT_QC_STATEMENT {
+ pszStatementId: LPSTR,
+ StatementInfo: CRYPT_OBJID_BLOB,
+}}
+pub type PCERT_QC_STATEMENT = *mut CERT_QC_STATEMENT;
+STRUCT!{struct CERT_QC_STATEMENTS_EXT_INFO {
+ cStatement: DWORD,
+ rgStatement: PCERT_QC_STATEMENT,
+}}
+pub type PCERT_QC_STATEMENTS_EXT_INFO = *mut CERT_QC_STATEMENTS_EXT_INFO;
+pub const szOID_QC_EU_COMPLIANCE: &'static str = "0.4.0.1862.1.1";
+pub const szOID_QC_SSCD: &'static str = "0.4.0.1862.1.4";
+STRUCT!{struct CRYPT_MASK_GEN_ALGORITHM {
+ pszObjId: LPSTR,
+ HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+}}
+pub type PCRYPT_MASK_GEN_ALGORITHM = *mut CRYPT_MASK_GEN_ALGORITHM;
+STRUCT!{struct CRYPT_RSA_SSA_PSS_PARAMETERS {
+ HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ MaskGenAlgorithm: CRYPT_MASK_GEN_ALGORITHM,
+ dwSaltLength: DWORD,
+ dwTrailerField: DWORD,
+}}
+pub type PCRYPT_RSA_SSA_PSS_PARAMETERS = *mut CRYPT_RSA_SSA_PSS_PARAMETERS;
+pub const PKCS_RSA_SSA_PSS_TRAILER_FIELD_BC: DWORD = 1;
+STRUCT!{struct CRYPT_PSOURCE_ALGORITHM {
+ pszObjId: LPSTR,
+ EncodingParameters: CRYPT_DATA_BLOB,
+}}
+pub type PCRYPT_PSOURCE_ALGORITHM = *mut CRYPT_PSOURCE_ALGORITHM;
+STRUCT!{struct CRYPT_RSAES_OAEP_PARAMETERS {
+ HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ MaskGenAlgorithm: CRYPT_MASK_GEN_ALGORITHM,
+ PSourceAlgorithm: CRYPT_PSOURCE_ALGORITHM,
+}}
+pub type PCRYPT_RSAES_OAEP_PARAMETERS = *mut CRYPT_RSAES_OAEP_PARAMETERS;
+pub const szOID_VERISIGN_PRIVATE_6_9: &'static str = "2.16.840.1.113733.1.6.9";
+pub const szOID_VERISIGN_ONSITE_JURISDICTION_HASH: &'static str = "2.16.840.1.113733.1.6.11";
+pub const szOID_VERISIGN_BITSTRING_6_13: &'static str = "2.16.840.1.113733.1.6.13";
+pub const szOID_VERISIGN_ISS_STRONG_CRYPTO: &'static str = "2.16.840.1.113733.1.8.1";
+pub const szOIDVerisign_MessageType: &'static str = "2.16.840.1.113733.1.9.2";
+pub const szOIDVerisign_PkiStatus: &'static str = "2.16.840.1.113733.1.9.3";
+pub const szOIDVerisign_FailInfo: &'static str = "2.16.840.1.113733.1.9.4";
+pub const szOIDVerisign_SenderNonce: &'static str = "2.16.840.1.113733.1.9.5";
+pub const szOIDVerisign_RecipientNonce: &'static str = "2.16.840.1.113733.1.9.6";
+pub const szOIDVerisign_TransactionID: &'static str = "2.16.840.1.113733.1.9.7";
+pub const szOID_NETSCAPE: &'static str = "2.16.840.1.113730";
+pub const szOID_NETSCAPE_CERT_EXTENSION: &'static str = "2.16.840.1.113730.1";
+pub const szOID_NETSCAPE_CERT_TYPE: &'static str = "2.16.840.1.113730.1.1";
+pub const szOID_NETSCAPE_BASE_URL: &'static str = "2.16.840.1.113730.1.2";
+pub const szOID_NETSCAPE_REVOCATION_URL: &'static str = "2.16.840.1.113730.1.3";
+pub const szOID_NETSCAPE_CA_REVOCATION_URL: &'static str = "2.16.840.1.113730.1.4";
+pub const szOID_NETSCAPE_CERT_RENEWAL_URL: &'static str = "2.16.840.1.113730.1.7";
+pub const szOID_NETSCAPE_CA_POLICY_URL: &'static str = "2.16.840.1.113730.1.8";
+pub const szOID_NETSCAPE_SSL_SERVER_NAME: &'static str = "2.16.840.1.113730.1.12";
+pub const szOID_NETSCAPE_COMMENT: &'static str = "2.16.840.1.113730.1.13";
+pub const szOID_NETSCAPE_DATA_TYPE: &'static str = "2.16.840.1.113730.2";
+pub const szOID_NETSCAPE_CERT_SEQUENCE: &'static str = "2.16.840.1.113730.2.5";
+pub const NETSCAPE_SSL_CLIENT_AUTH_CERT_TYPE: DWORD = 0x80;
+pub const NETSCAPE_SSL_SERVER_AUTH_CERT_TYPE: DWORD = 0x40;
+pub const NETSCAPE_SMIME_CERT_TYPE: DWORD = 0x20;
+pub const NETSCAPE_SIGN_CERT_TYPE: DWORD = 0x10;
+pub const NETSCAPE_SSL_CA_CERT_TYPE: DWORD = 0x04;
+pub const NETSCAPE_SMIME_CA_CERT_TYPE: DWORD = 0x02;
+pub const NETSCAPE_SIGN_CA_CERT_TYPE: DWORD = 0x01;
+pub const szOID_CT_PKI_DATA: &'static str = "1.3.6.1.5.5.7.12.2";
+pub const szOID_CT_PKI_RESPONSE: &'static str = "1.3.6.1.5.5.7.12.3";
+pub const szOID_PKIX_NO_SIGNATURE: &'static str = "1.3.6.1.5.5.7.6.2";
+pub const szOID_CMC: &'static str = "1.3.6.1.5.5.7.7";
+pub const szOID_CMC_STATUS_INFO: &'static str = "1.3.6.1.5.5.7.7.1";
+pub const szOID_CMC_IDENTIFICATION: &'static str = "1.3.6.1.5.5.7.7.2";
+pub const szOID_CMC_IDENTITY_PROOF: &'static str = "1.3.6.1.5.5.7.7.3";
+pub const szOID_CMC_DATA_RETURN: &'static str = "1.3.6.1.5.5.7.7.4";
+pub const szOID_CMC_TRANSACTION_ID: &'static str = "1.3.6.1.5.5.7.7.5";
+pub const szOID_CMC_SENDER_NONCE: &'static str = "1.3.6.1.5.5.7.7.6";
+pub const szOID_CMC_RECIPIENT_NONCE: &'static str = "1.3.6.1.5.5.7.7.7";
+pub const szOID_CMC_ADD_EXTENSIONS: &'static str = "1.3.6.1.5.5.7.7.8";
+pub const szOID_CMC_ENCRYPTED_POP: &'static str = "1.3.6.1.5.5.7.7.9";
+pub const szOID_CMC_DECRYPTED_POP: &'static str = "1.3.6.1.5.5.7.7.10";
+pub const szOID_CMC_LRA_POP_WITNESS: &'static str = "1.3.6.1.5.5.7.7.11";
+pub const szOID_CMC_GET_CERT: &'static str = "1.3.6.1.5.5.7.7.15";
+pub const szOID_CMC_GET_CRL: &'static str = "1.3.6.1.5.5.7.7.16";
+pub const szOID_CMC_REVOKE_REQUEST: &'static str = "1.3.6.1.5.5.7.7.17";
+pub const szOID_CMC_REG_INFO: &'static str = "1.3.6.1.5.5.7.7.18";
+pub const szOID_CMC_RESPONSE_INFO: &'static str = "1.3.6.1.5.5.7.7.19";
+pub const szOID_CMC_QUERY_PENDING: &'static str = "1.3.6.1.5.5.7.7.21";
+pub const szOID_CMC_ID_POP_LINK_RANDOM: &'static str = "1.3.6.1.5.5.7.7.22";
+pub const szOID_CMC_ID_POP_LINK_WITNESS: &'static str = "1.3.6.1.5.5.7.7.23";
+pub const szOID_CMC_ID_CONFIRM_CERT_ACCEPTANCE: &'static str = "1.3.6.1.5.5.7.7.24";
+pub const szOID_CMC_ADD_ATTRIBUTES: &'static str = "1.3.6.1.4.1.311.10.10.1";
+STRUCT!{struct CMC_TAGGED_ATTRIBUTE {
+ dwBodyPartID: DWORD,
+ Attribute: CRYPT_ATTRIBUTE,
+}}
+pub type PCMC_TAGGED_ATTRIBUTE = *mut CMC_TAGGED_ATTRIBUTE;
+STRUCT!{struct CMC_TAGGED_CERT_REQUEST {
+ dwBodyPartID: DWORD,
+ SignedCertRequest: CRYPT_DER_BLOB,
+}}
+pub type PCMC_TAGGED_CERT_REQUEST = *mut CMC_TAGGED_CERT_REQUEST;
+UNION!{union CMC_TAGGED_REQUEST_u {
+ [usize; 1],
+ pTaggedCertRequest pTaggedCertRequest_mut: PCMC_TAGGED_CERT_REQUEST,
+}}
+STRUCT!{struct CMC_TAGGED_REQUEST {
+ dwTaggedRequestChoice: DWORD,
+ u: CMC_TAGGED_REQUEST_u,
+}}
+pub type PCMC_TAGGED_REQUEST = *mut CMC_TAGGED_REQUEST;
+STRUCT!{struct CMC_TAGGED_CONTENT_INFO {
+ dwBodyPartID: DWORD,
+ EncodedContentInfo: CRYPT_DER_BLOB,
+}}
+pub type PCMC_TAGGED_CONTENT_INFO = *mut CMC_TAGGED_CONTENT_INFO;
+STRUCT!{struct CMC_TAGGED_OTHER_MSG {
+ dwBodyPartID: DWORD,
+ pszObjId: LPSTR,
+ Value: CRYPT_OBJID_BLOB,
+}}
+pub type PCMC_TAGGED_OTHER_MSG = *mut CMC_TAGGED_OTHER_MSG;
+STRUCT!{struct CMC_DATA_INFO {
+ cTaggedAttribute: DWORD,
+ rgTaggedAttribute: PCMC_TAGGED_ATTRIBUTE,
+ cTaggedRequest: DWORD,
+ rgTaggedRequest: PCMC_TAGGED_REQUEST,
+ cTaggedContentInfo: DWORD,
+ rgTaggedContentInfo: PCMC_TAGGED_CONTENT_INFO,
+ cTaggedOtherMsg: DWORD,
+ rgTaggedOtherMsg: PCMC_TAGGED_OTHER_MSG,
+}}
+pub type PCMC_DATA_INFO = *mut CMC_DATA_INFO;
+STRUCT!{struct CMC_RESPONSE_INFO {
+ cTaggedAttribute: DWORD,
+ rgTaggedAttribute: PCMC_TAGGED_ATTRIBUTE,
+ cTaggedContentInfo: DWORD,
+ rgTaggedContentInfo: PCMC_TAGGED_CONTENT_INFO,
+ cTaggedOtherMsg: DWORD,
+ rgTaggedOtherMsg: PCMC_TAGGED_OTHER_MSG,
+}}
+pub type PCMC_RESPONSE_INFO = *mut CMC_RESPONSE_INFO;
+STRUCT!{struct CMC_PEND_INFO {
+ PendToken: CRYPT_DATA_BLOB,
+ PendTime: FILETIME,
+}}
+pub type PCMC_PEND_INFO = *mut CMC_PEND_INFO;
+UNION!{union CMC_STATUS_INFO_u {
+ [usize; 1],
+ dwFailInfo dwFailInfo_mut: DWORD,
+ pPendInfo pPendInfo_mut: PCMC_PEND_INFO,
+}}
+STRUCT!{struct CMC_STATUS_INFO {
+ dwStatus: DWORD,
+ cBodyList: DWORD,
+ rgdwBodyList: *mut DWORD,
+ pwszStatusString: LPWSTR,
+ dwOtherInfoChoice: DWORD,
+ u: CMC_STATUS_INFO_u,
+}}
+pub type PCMC_STATUS_INFO = *mut CMC_STATUS_INFO;
+pub const CMC_OTHER_INFO_NO_CHOICE: DWORD = 0;
+pub const CMC_OTHER_INFO_FAIL_CHOICE: DWORD = 1;
+pub const CMC_OTHER_INFO_PEND_CHOICE: DWORD = 2;
+pub const CMC_STATUS_SUCCESS: DWORD = 0;
+pub const CMC_STATUS_FAILED: DWORD = 2;
+pub const CMC_STATUS_PENDING: DWORD = 3;
+pub const CMC_STATUS_NO_SUPPORT: DWORD = 4;
+pub const CMC_STATUS_CONFIRM_REQUIRED: DWORD = 5;
+pub const CMC_FAIL_BAD_ALG: DWORD = 0;
+pub const CMC_FAIL_BAD_MESSAGE_CHECK: DWORD = 1;
+pub const CMC_FAIL_BAD_REQUEST: DWORD = 2;
+pub const CMC_FAIL_BAD_TIME: DWORD = 3;
+pub const CMC_FAIL_BAD_CERT_ID: DWORD = 4;
+pub const CMC_FAIL_UNSUPORTED_EXT: DWORD = 5;
+pub const CMC_FAIL_MUST_ARCHIVE_KEYS: DWORD = 6;
+pub const CMC_FAIL_BAD_IDENTITY: DWORD = 7;
+pub const CMC_FAIL_POP_REQUIRED: DWORD = 8;
+pub const CMC_FAIL_POP_FAILED: DWORD = 9;
+pub const CMC_FAIL_NO_KEY_REUSE: DWORD = 10;
+pub const CMC_FAIL_INTERNAL_CA_ERROR: DWORD = 11;
+pub const CMC_FAIL_TRY_LATER: DWORD = 12;
+STRUCT!{struct CMC_ADD_EXTENSIONS_INFO {
+ dwCmcDataReference: DWORD,
+ cCertReference: DWORD,
+ rgdwCertReference: *mut DWORD,
+ cExtension: DWORD,
+ rgExtension: PCERT_EXTENSION,
+}}
+pub type PCMC_ADD_EXTENSIONS_INFO = *mut CMC_ADD_EXTENSIONS_INFO;
+STRUCT!{struct CMC_ADD_ATTRIBUTES_INFO {
+ dwCmcDataReference: DWORD,
+ cCertReference: DWORD,
+ rgdwCertReference: *mut DWORD,
+ cAttribute: DWORD,
+ rgAttribute: PCRYPT_ATTRIBUTE,
+}}
+pub type PCMC_ADD_ATTRIBUTES_INFO = *mut CMC_ADD_ATTRIBUTES_INFO;
+STRUCT!{struct CERT_TEMPLATE_EXT {
+ pszObjId: LPSTR,
+ dwMajorVersion: DWORD,
+ fMinorVersion: BOOL,
+ dwMinorVersion: DWORD,
+}}
+pub type PCERT_TEMPLATE_EXT = *mut CERT_TEMPLATE_EXT;
+STRUCT!{struct CERT_HASHED_URL {
+ HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ Hash: CRYPT_HASH_BLOB,
+ pwszUrl: LPWSTR,
+}}
+pub type PCERT_HASHED_URL = *mut CERT_HASHED_URL;
+STRUCT!{struct CERT_LOGOTYPE_DETAILS {
+ pwszMimeType: LPWSTR,
+ cHashedUrl: DWORD,
+ rgHashedUrl: PCERT_HASHED_URL,
+}}
+pub type PCERT_LOGOTYPE_DETAILS = *mut CERT_LOGOTYPE_DETAILS;
+STRUCT!{struct CERT_LOGOTYPE_REFERENCE {
+ cHashedUrl: DWORD,
+ rgHashedUrl: PCERT_HASHED_URL,
+}}
+pub type PCERT_LOGOTYPE_REFERENCE = *mut CERT_LOGOTYPE_REFERENCE;
+UNION!{union CERT_LOGOTYPE_IMAGE_INFO_u {
+ [u32; 1],
+ dwNumBits dwNumBits_mut: DWORD,
+ dwTableSize dwTableSize_mut: DWORD,
+}}
+STRUCT!{struct CERT_LOGOTYPE_IMAGE_INFO {
+ dwLogotypeImageInfoChoice: DWORD,
+ dwFileSize: DWORD,
+ dwXSize: DWORD,
+ dwYSize: DWORD,
+ dwLogotypeImageResolutionChoice: DWORD,
+ u: CERT_LOGOTYPE_IMAGE_INFO_u,
+ pwszLanguage: LPWSTR,
+}}
+pub type PCERT_LOGOTYPE_IMAGE_INFO = *mut CERT_LOGOTYPE_IMAGE_INFO;
+pub const CERT_LOGOTYPE_GRAY_SCALE_IMAGE_INFO_CHOICE: DWORD = 1;
+pub const CERT_LOGOTYPE_COLOR_IMAGE_INFO_CHOICE: DWORD = 2;
+pub const CERT_LOGOTYPE_NO_IMAGE_RESOLUTION_CHOICE: DWORD = 0;
+pub const CERT_LOGOTYPE_BITS_IMAGE_RESOLUTION_CHOICE: DWORD = 1;
+pub const CERT_LOGOTYPE_TABLE_SIZE_IMAGE_RESOLUTION_CHOICE: DWORD = 2;
+STRUCT!{struct CERT_LOGOTYPE_IMAGE {
+ LogotypeDetails: CERT_LOGOTYPE_DETAILS,
+ pLogotypeImageInfo: PCERT_LOGOTYPE_IMAGE_INFO,
+}}
+pub type PCERT_LOGOTYPE_IMAGE = *mut CERT_LOGOTYPE_IMAGE;
+STRUCT!{struct CERT_LOGOTYPE_AUDIO_INFO {
+ dwFileSize: DWORD,
+ dwPlayTime: DWORD,
+ dwChannels: DWORD,
+ dwSampleRate: DWORD,
+ pwszLanguage: LPWSTR,
+}}
+pub type PCERT_LOGOTYPE_AUDIO_INFO = *mut CERT_LOGOTYPE_AUDIO_INFO;
+STRUCT!{struct CERT_LOGOTYPE_AUDIO {
+ LogotypeDetails: CERT_LOGOTYPE_DETAILS,
+ pLogotypeAudioInfo: PCERT_LOGOTYPE_AUDIO_INFO,
+}}
+pub type PCERT_LOGOTYPE_AUDIO = *mut CERT_LOGOTYPE_AUDIO;
+STRUCT!{struct CERT_LOGOTYPE_DATA {
+ cLogotypeImage: DWORD,
+ rgLogotypeImage: PCERT_LOGOTYPE_IMAGE,
+ cLogotypeAudio: DWORD,
+ rgLogotypeAudio: PCERT_LOGOTYPE_AUDIO,
+}}
+pub type PCERT_LOGOTYPE_DATA = *mut CERT_LOGOTYPE_DATA;
+UNION!{union CERT_LOGOTYPE_INFO_u {
+ [usize; 1],
+ pLogotypeDirectInfo pLogotypeDirectInfo_mut: PCERT_LOGOTYPE_DATA,
+ pLogotypeIndirectInfo pLogotypeIndirectInfo__mut: PCERT_LOGOTYPE_REFERENCE,
+}}
+STRUCT!{struct CERT_LOGOTYPE_INFO {
+ dwLogotypeInfoChoice: DWORD,
+ u: CERT_LOGOTYPE_INFO_u,
+}}
+pub type PCERT_LOGOTYPE_INFO = *mut CERT_LOGOTYPE_INFO;
+pub const CERT_LOGOTYPE_DIRECT_INFO_CHOICE: DWORD = 1;
+pub const CERT_LOGOTYPE_INDIRECT_INFO_CHOICE: DWORD = 2;
+STRUCT!{struct CERT_OTHER_LOGOTYPE_INFO {
+ pszObjId: LPSTR,
+ LogotypeInfo: CERT_LOGOTYPE_INFO,
+}}
+pub type PCERT_OTHER_LOGOTYPE_INFO = *mut CERT_OTHER_LOGOTYPE_INFO;
+pub const szOID_LOYALTY_OTHER_LOGOTYPE: &'static str = "1.3.6.1.5.5.7.20.1";
+pub const szOID_BACKGROUND_OTHER_LOGOTYPE: &'static str = "1.3.6.1.5.5.7.20.2";
+STRUCT!{struct CERT_LOGOTYPE_EXT_INFO {
+ cCommunityLogo: DWORD,
+ rgCommunityLogo: PCERT_LOGOTYPE_INFO,
+ pIssuerLogo: PCERT_LOGOTYPE_INFO,
+ pSubjectLogo: PCERT_LOGOTYPE_INFO,
+ cOtherLogo: DWORD,
+ rgOtherLogo: PCERT_OTHER_LOGOTYPE_INFO,
+}}
+pub type PCERT_LOGOTYPE_EXT_INFO = *mut CERT_LOGOTYPE_EXT_INFO;
+UNION!{union CERT_BIOMETRIC_DATA_u {
+ [usize; 1],
+ dwPredefined dwPredefined_mut: DWORD,
+ pszObjId pszObjId_mut: LPSTR,
+}}
+STRUCT!{struct CERT_BIOMETRIC_DATA {
+ dwTypeOfBiometricDataChoice: DWORD,
+ u: CERT_BIOMETRIC_DATA_u,
+ HashedUrl: CERT_HASHED_URL,
+}}
+pub type PCERT_BIOMETRIC_DATA = *mut CERT_BIOMETRIC_DATA;
+pub const CERT_BIOMETRIC_PREDEFINED_DATA_CHOICE: DWORD = 1;
+pub const CERT_BIOMETRIC_OID_DATA_CHOICE: DWORD = 2;
+pub const CERT_BIOMETRIC_PICTURE_TYPE: DWORD = 0;
+pub const CERT_BIOMETRIC_SIGNATURE_TYPE: DWORD = 1;
+STRUCT!{struct CERT_BIOMETRIC_EXT_INFO {
+ cBiometricData: DWORD,
+ rgBiometricData: PCERT_BIOMETRIC_DATA,
+}}
+pub type PCERT_BIOMETRIC_EXT_INFO = *mut CERT_BIOMETRIC_EXT_INFO;
+STRUCT!{struct OCSP_SIGNATURE_INFO {
+ SignatureAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ Signature: CRYPT_BIT_BLOB,
+ cCertEncoded: DWORD,
+ rgCertEncoded: PCERT_BLOB,
+}}
+pub type POCSP_SIGNATURE_INFO = *mut OCSP_SIGNATURE_INFO;
+STRUCT!{struct OCSP_SIGNED_REQUEST_INFO {
+ ToBeSigned: CRYPT_DER_BLOB,
+ pOptionalSignatureInfo: POCSP_SIGNATURE_INFO,
+}}
+pub type POCSP_SIGNED_REQUEST_INFO = *mut OCSP_SIGNED_REQUEST_INFO;
+STRUCT!{struct OCSP_CERT_ID {
+ HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ IssuerNameHash: CRYPT_HASH_BLOB,
+ IssuerKeyHash: CRYPT_HASH_BLOB,
+ SerialNumber: CRYPT_INTEGER_BLOB,
+}}
+pub type POCSP_CERT_ID = *mut OCSP_CERT_ID;
+STRUCT!{struct OCSP_REQUEST_ENTRY {
+ CertId: OCSP_CERT_ID,
+ cExtension: DWORD,
+ rgExtension: PCERT_EXTENSION,
+}}
+pub type POCSP_REQUEST_ENTRY = *mut OCSP_REQUEST_ENTRY;
+STRUCT!{struct OCSP_REQUEST_INFO {
+ dwVersion: DWORD,
+ pRequestorName: PCERT_ALT_NAME_ENTRY,
+ cRequestEntry: DWORD,
+ rgRequestEntry: POCSP_REQUEST_ENTRY,
+ cExtension: DWORD,
+ rgExtension: PCERT_EXTENSION,
+}}
+pub type POCSP_REQUEST_INFO = *mut OCSP_REQUEST_INFO;
+pub const OCSP_REQUEST_V1: DWORD = 0;
+STRUCT!{struct OCSP_RESPONSE_INFO {
+ dwStatus: DWORD,
+ pszObjId: LPSTR,
+ Value: CRYPT_OBJID_BLOB,
+}}
+pub type POCSP_RESPONSE_INFO = *mut OCSP_RESPONSE_INFO;
+pub const OCSP_SUCCESSFUL_RESPONSE: DWORD = 0;
+pub const OCSP_MALFORMED_REQUEST_RESPONSE: DWORD = 1;
+pub const OCSP_INTERNAL_ERROR_RESPONSE: DWORD = 2;
+pub const OCSP_TRY_LATER_RESPONSE: DWORD = 3;
+pub const OCSP_SIG_REQUIRED_RESPONSE: DWORD = 5;
+pub const OCSP_UNAUTHORIZED_RESPONSE: DWORD = 6;
+pub const szOID_PKIX_OCSP_BASIC_SIGNED_RESPONSE: &'static str = "1.3.6.1.5.5.7.48.1.1";
+STRUCT!{struct OCSP_BASIC_SIGNED_RESPONSE_INFO {
+ ToBeSigned: CRYPT_DER_BLOB,
+ SignatureInfo: OCSP_SIGNATURE_INFO,
+}}
+pub type POCSP_BASIC_SIGNED_RESPONSE_INFO = *mut OCSP_BASIC_SIGNED_RESPONSE_INFO;
+STRUCT!{struct OCSP_BASIC_REVOKED_INFO {
+ RevocationDate: FILETIME,
+ dwCrlReasonCode: DWORD,
+}}
+pub type POCSP_BASIC_REVOKED_INFO = *mut OCSP_BASIC_REVOKED_INFO;
+UNION!{union OCSP_BASIC_RESPONSE_ENTRY_u {
+ [usize; 1],
+ pRevokedInfo pRevokedInfo_mut: POCSP_BASIC_REVOKED_INFO,
+}}
+STRUCT!{struct OCSP_BASIC_RESPONSE_ENTRY {
+ CertId: OCSP_CERT_ID,
+ dwCertStatus: DWORD,
+ u: OCSP_BASIC_RESPONSE_ENTRY_u,
+ ThisUpdate: FILETIME,
+ NextUpdate: FILETIME,
+ cExtension: DWORD,
+ rgExtension: PCERT_EXTENSION,
+}}
+pub type POCSP_BASIC_RESPONSE_ENTRY = *mut OCSP_BASIC_RESPONSE_ENTRY;
+pub const OCSP_BASIC_GOOD_CERT_STATUS: DWORD = 0;
+pub const OCSP_BASIC_REVOKED_CERT_STATUS: DWORD = 1;
+pub const OCSP_BASIC_UNKNOWN_CERT_STATUS: DWORD = 2;
+UNION!{union OCSP_BASIC_RESPONSE_INFO_u {
+ [usize; 2],
+ ByNameResponderId ByNameResponderId_mut: CERT_NAME_BLOB,
+ ByKeyResponderId ByKeyResponderId_mut: CRYPT_HASH_BLOB,
+}}
+STRUCT!{struct OCSP_BASIC_RESPONSE_INFO {
+ dwVersion: DWORD,
+ dwResponderIdChoice: DWORD,
+ u: OCSP_BASIC_RESPONSE_INFO_u,
+ ProducedAt: FILETIME,
+ cResponseEntry: DWORD,
+ rgResponseEntry: POCSP_BASIC_RESPONSE_ENTRY,
+ cExtension: DWORD,
+ rgExtension: PCERT_EXTENSION,
+}}
+pub type POCSP_BASIC_RESPONSE_INFO = *mut OCSP_BASIC_RESPONSE_INFO;
+pub const OCSP_BASIC_RESPONSE_V1: DWORD = 0;
+pub const OCSP_BASIC_BY_NAME_RESPONDER_ID: DWORD = 1;
+pub const OCSP_BASIC_BY_KEY_RESPONDER_ID: DWORD = 2;
+STRUCT!{struct CERT_SUPPORTED_ALGORITHM_INFO {
+ Algorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ IntendedKeyUsage: CRYPT_BIT_BLOB,
+ IntendedCertPolicies: CERT_POLICIES_INFO,
+}}
+pub type PCERT_SUPPORTED_ALGORITHM_INFO = *mut CERT_SUPPORTED_ALGORITHM_INFO;
+STRUCT!{struct CERT_TPM_SPECIFICATION_INFO {
+ pwszFamily: LPWSTR,
+ dwLevel: DWORD,
+ dwRevision: DWORD,
+}}
+pub type PCERT_TPM_SPECIFICATION_INFO = *mut CERT_TPM_SPECIFICATION_INFO;
+pub type HCRYPTOIDFUNCSET = *mut c_void;
+pub type HCRYPTOIDFUNCADDR = *mut c_void;
+pub const CRYPT_OID_ENCODE_OBJECT_FUNC: &'static str = "CryptDllEncodeObject";
+pub const CRYPT_OID_DECODE_OBJECT_FUNC: &'static str = "CryptDllDecodeObject";
+pub const CRYPT_OID_ENCODE_OBJECT_EX_FUNC: &'static str = "CryptDllEncodeObjectEx";
+pub const CRYPT_OID_DECODE_OBJECT_EX_FUNC: &'static str = "CryptDllDecodeObjectEx";
+pub const CRYPT_OID_CREATE_COM_OBJECT_FUNC: &'static str = "CryptDllCreateCOMObject";
+pub const CRYPT_OID_VERIFY_REVOCATION_FUNC: &'static str = "CertDllVerifyRevocation";
+pub const CRYPT_OID_VERIFY_CTL_USAGE_FUNC: &'static str = "CertDllVerifyCTLUsage";
+pub const CRYPT_OID_FORMAT_OBJECT_FUNC: &'static str = "CryptDllFormatObject";
+pub const CRYPT_OID_FIND_OID_INFO_FUNC: &'static str = "CryptDllFindOIDInfo";
+pub const CRYPT_OID_FIND_LOCALIZED_NAME_FUNC: &'static str = "CryptDllFindLocalizedName";
+pub const CRYPT_OID_REGPATH: &'static str = "Software\\Microsoft\\Cryptography\\OID";
+pub const CRYPT_OID_REG_ENCODING_TYPE_PREFIX: &'static str = "EncodingType ";
+pub const CRYPT_OID_REG_DLL_VALUE_NAME: &'static str = "Dll";
+pub const CRYPT_OID_REG_FUNC_NAME_VALUE_NAME: &'static str = "FuncName";
+pub const CRYPT_OID_REG_FLAGS_VALUE_NAME: &'static str = "CryptFlags";
+pub const CRYPT_DEFAULT_OID: &'static str = "DEFAULT";
+STRUCT!{struct CRYPT_OID_FUNC_ENTRY {
+ pszOID: LPCSTR,
+ pvFuncAddr: *mut c_void,
+}}
+pub type PCRYPT_OID_FUNC_ENTRY = *mut CRYPT_OID_FUNC_ENTRY;
+pub const CRYPT_INSTALL_OID_FUNC_BEFORE_FLAG: DWORD = 1;
+extern "system" {
+ pub fn CryptInstallOIDFunctionAddress(
+ hModule: HMODULE,
+ dwEncodingType: DWORD,
+ pszFuncName: LPCSTR,
+ cFuncEntry: DWORD,
+ rgFuncEntry: *const CRYPT_OID_FUNC_ENTRY,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptInitOIDFunctionSet(
+ pszFuncName: LPCSTR,
+ dwFlags: DWORD,
+ ) -> HCRYPTOIDFUNCSET;
+ pub fn CryptGetOIDFunctionAddress(
+ hFuncSet: HCRYPTOIDFUNCSET,
+ dwEncodingType: DWORD,
+ pszOID: LPCSTR,
+ dwFlags: DWORD,
+ ppvFuncAddr: *mut *mut c_void,
+ phFuncAddr: *mut HCRYPTOIDFUNCADDR,
+ ) -> BOOL;
+}
+pub const CRYPT_GET_INSTALLED_OID_FUNC_FLAG: DWORD = 0x1;
+extern "system" {
+ pub fn CryptGetDefaultOIDDllList(
+ hFuncSet: HCRYPTOIDFUNCSET,
+ dwEncodingType: DWORD,
+ pwszDllList: *mut WCHAR,
+ pcchDllList: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptGetDefaultOIDFunctionAddress(
+ hFuncSet: HCRYPTOIDFUNCSET,
+ dwEncodingType: DWORD,
+ pwszDll: LPCWSTR,
+ dwFlags: DWORD,
+ ppvFuncAddr: *mut *mut c_void,
+ phFuncAddr: *mut HCRYPTOIDFUNCADDR,
+ ) -> BOOL;
+ pub fn CryptFreeOIDFunctionAddress(
+ hFuncAddr: HCRYPTOIDFUNCADDR,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptRegisterOIDFunction(
+ dwEncodingType: DWORD,
+ pszFuncName: LPCSTR,
+ pszOID: LPCSTR,
+ pwszDll: LPCWSTR,
+ pszOverrideFuncName: LPCSTR,
+ ) -> BOOL;
+ pub fn CryptUnregisterOIDFunction(
+ dwEncodingType: DWORD,
+ pszFuncName: LPCSTR,
+ pszOID: LPCSTR,
+ ) -> BOOL;
+ pub fn CryptRegisterDefaultOIDFunction(
+ dwEncodingType: DWORD,
+ pszFuncName: LPCSTR,
+ dwIndex: DWORD,
+ pwszDll: LPCWSTR,
+ ) -> BOOL;
+}
+pub const CRYPT_REGISTER_FIRST_INDEX: DWORD = 0;
+pub const CRYPT_REGISTER_LAST_INDEX: DWORD = 0xFFFFFFFF;
+extern "system" {
+ pub fn CryptUnregisterDefaultOIDFunction(
+ dwEncodingType: DWORD,
+ pszFuncName: LPCSTR,
+ pwszDll: LPCWSTR,
+ ) -> BOOL;
+ pub fn CryptSetOIDFunctionValue(
+ dwEncodingType: DWORD,
+ pszFuncName: LPCSTR,
+ pszOID: LPCSTR,
+ pwszValueName: LPCWSTR,
+ dwValueType: DWORD,
+ pbValueData: *const BYTE,
+ cbValueData: DWORD,
+ ) -> BOOL;
+ pub fn CryptGetOIDFunctionValue(
+ dwEncodingType: DWORD,
+ pszFuncName: LPCSTR,
+ pszOID: LPCSTR,
+ pwszValueName: LPCWSTR,
+ pdwValueType: *mut DWORD,
+ pbValueData: *mut BYTE,
+ pcbValueData: *mut DWORD,
+ ) -> BOOL;
+}
+FN!{stdcall PFN_CRYPT_ENUM_OID_FUNC(
+ dwEncodingType: DWORD,
+ pszFuncName: LPCSTR,
+ pszOID: LPCSTR,
+ cValue: DWORD,
+ rgdwValueType: *const DWORD,
+ rgpwszValueName: *const LPCWSTR,
+ rgpbValueData: *const *const BYTE,
+ rgcbValueData: *const DWORD,
+ pvArg: *mut c_void,
+) -> BOOL}
+extern "system" {
+ pub fn CryptEnumOIDFunction(
+ dwEncodingType: DWORD,
+ pszFuncName: LPCSTR,
+ pszOID: LPCSTR,
+ dwFlags: DWORD,
+ pvArg: *mut c_void,
+ pfnEnumOIDFunc: PFN_CRYPT_ENUM_OID_FUNC,
+ ) -> BOOL;
+}
+pub const CRYPT_MATCH_ANY_ENCODING_TYPE: DWORD = 0xFFFFFFFF;
+pub const CALG_OID_INFO_CNG_ONLY: ALG_ID = 0xFFFFFFFF;
+pub const CALG_OID_INFO_PARAMETERS: ALG_ID = 0xFFFFFFFE;
+#[inline]
+pub fn IS_SPECIAL_OID_INFO_ALGID(Algid: ALG_ID) -> bool {
+ Algid >= CALG_OID_INFO_PARAMETERS
+}
+pub const CRYPT_OID_INFO_HASH_PARAMETERS_ALGORITHM: &'static str = "CryptOIDInfoHashParameters";
+pub const CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM: &'static str = "CryptOIDInfoECCParameters";
+pub const CRYPT_OID_INFO_MGF1_PARAMETERS_ALGORITHM: &'static str = "CryptOIDInfoMgf1Parameters";
+pub const CRYPT_OID_INFO_NO_SIGN_ALGORITHM: &'static str = "CryptOIDInfoNoSign";
+pub const CRYPT_OID_INFO_OAEP_PARAMETERS_ALGORITHM: &'static str = "CryptOIDInfoOAEPParameters";
+pub const CRYPT_OID_INFO_ECC_WRAP_PARAMETERS_ALGORITHM: &'static str
+ = "CryptOIDInfoECCWrapParameters";
+pub const CRYPT_OID_INFO_NO_PARAMETERS_ALGORITHM: &'static str = "CryptOIDInfoNoParameters";
+UNION!{union CRYPT_OID_INFO_u {
+ [u32; 1],
+ dwValue dwValue_mut: DWORD,
+ Algid Algid_mut: ALG_ID,
+ dwLength dwLength_mut: DWORD,
+}}
+STRUCT!{struct CRYPT_OID_INFO {
+ cbSize: DWORD,
+ oszOID: LPCSTR,
+ pwszName: LPCWSTR,
+ dwGroupId: DWORD,
+ u: CRYPT_OID_INFO_u,
+ ExtraInfo: CRYPT_DATA_BLOB,
+ pwszCNGAlgid: LPCWSTR,
+ pwszCNGExtraAlgid: LPCWSTR,
+}}
+pub type PCRYPT_OID_INFO = *mut CRYPT_OID_INFO;
+pub type PCCRYPT_OID_INFO = *const CRYPT_OID_INFO;
+pub const CRYPT_HASH_ALG_OID_GROUP_ID: DWORD = 1;
+pub const CRYPT_ENCRYPT_ALG_OID_GROUP_ID: DWORD = 2;
+pub const CRYPT_PUBKEY_ALG_OID_GROUP_ID: DWORD = 3;
+pub const CRYPT_SIGN_ALG_OID_GROUP_ID: DWORD = 4;
+pub const CRYPT_RDN_ATTR_OID_GROUP_ID: DWORD = 5;
+pub const CRYPT_EXT_OR_ATTR_OID_GROUP_ID: DWORD = 6;
+pub const CRYPT_ENHKEY_USAGE_OID_GROUP_ID: DWORD = 7;
+pub const CRYPT_POLICY_OID_GROUP_ID: DWORD = 8;
+pub const CRYPT_TEMPLATE_OID_GROUP_ID: DWORD = 9;
+pub const CRYPT_KDF_OID_GROUP_ID: DWORD = 10;
+pub const CRYPT_LAST_OID_GROUP_ID: DWORD = 10;
+pub const CRYPT_FIRST_ALG_OID_GROUP_ID: DWORD = CRYPT_HASH_ALG_OID_GROUP_ID;
+pub const CRYPT_LAST_ALG_OID_GROUP_ID: DWORD = CRYPT_SIGN_ALG_OID_GROUP_ID;
+pub const CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG: DWORD = 0x00000001;
+pub const CRYPT_OID_USE_PUBKEY_PARA_FOR_PKCS7_FLAG: DWORD = 0x00000002;
+pub const CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG: DWORD = 0x00000004;
+pub const CRYPT_OID_PUBKEY_SIGN_ONLY_FLAG: DWORD = 0x80000000;
+pub const CRYPT_OID_PUBKEY_ENCRYPT_ONLY_FLAG: DWORD = 0x40000000;
+pub const CRYPT_OID_USE_CURVE_NAME_FOR_ENCODE_FLAG: DWORD = 0x20000000;
+pub const CRYPT_OID_USE_CURVE_PARAMETERS_FOR_ENCODE_FLAG: DWORD = 0x10000000;
+extern "system" {
+ pub fn CryptFindOIDInfo(
+ dwKeyType: DWORD,
+ pvKey: *mut c_void,
+ dwGroupId: DWORD,
+ ) -> PCCRYPT_OID_INFO;
+}
+pub const CRYPT_OID_INFO_OID_KEY: DWORD = 1;
+pub const CRYPT_OID_INFO_NAME_KEY: DWORD = 2;
+pub const CRYPT_OID_INFO_ALGID_KEY: DWORD = 3;
+pub const CRYPT_OID_INFO_SIGN_KEY: DWORD = 4;
+pub const CRYPT_OID_INFO_CNG_ALGID_KEY: DWORD = 5;
+pub const CRYPT_OID_INFO_CNG_SIGN_KEY: DWORD = 6;
+pub const CRYPT_OID_INFO_OID_KEY_FLAGS_MASK: DWORD = 0xFFFF0000;
+pub const CRYPT_OID_INFO_PUBKEY_SIGN_KEY_FLAG: DWORD = 0x80000000;
+pub const CRYPT_OID_INFO_PUBKEY_ENCRYPT_KEY_FLAG: DWORD = 0x40000000;
+pub const CRYPT_OID_DISABLE_SEARCH_DS_FLAG: DWORD = 0x80000000;
+pub const CRYPT_OID_PREFER_CNG_ALGID_FLAG: DWORD = 0x40000000;
+pub const CRYPT_OID_INFO_OID_GROUP_BIT_LEN_MASK: DWORD = 0x0FFF0000;
+pub const CRYPT_OID_INFO_OID_GROUP_BIT_LEN_SHIFT: DWORD = 16;
+extern "system" {
+ pub fn CryptRegisterOIDInfo(
+ pInfo: PCCRYPT_OID_INFO,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CryptUnregisterOIDInfo(
+ pInfo: PCCRYPT_OID_INFO,
+ ) -> BOOL;
+}
+FN!{stdcall PFN_CRYPT_ENUM_OID_INFO(
+ pInfo: PCCRYPT_OID_INFO,
+ pvArg: *mut c_void,
+) -> BOOL}
+extern "system" {
+ pub fn CryptEnumOIDInfo(
+ dwGroupId: DWORD,
+ dwFlags: DWORD,
+ pvArg: *mut c_void,
+ pfnEnumOIDInfo: PFN_CRYPT_ENUM_OID_INFO,
+ ) -> BOOL;
+ pub fn CryptFindLocalizedName(
+ pwszCryptName: LPCWSTR,
+ ) -> LPCWSTR;
+}
+pub const CRYPT_LOCALIZED_NAME_ENCODING_TYPE: DWORD = 0;
+pub const CRYPT_LOCALIZED_NAME_OID: &'static str = "LocalizedNames";
+STRUCT!{struct CERT_STRONG_SIGN_SERIALIZED_INFO {
+ dwFlags: DWORD,
+ pwszCNGSignHashAlgids: LPWSTR,
+ pwszCNGPubKeyMinBitLengths: LPWSTR,
+}}
+pub type PCERT_STRONG_SIGN_SERIALIZED_INFO = *mut CERT_STRONG_SIGN_SERIALIZED_INFO;
+pub const CERT_STRONG_SIGN_ECDSA_ALGORITHM: &'static str = "ECDSA";
+UNION!{union CERT_STRONG_SIGN_PARA_u {
+ [usize; 1],
+ pvInfo pvInfo_mut: *mut c_void,
+ pSerializedInfo pSerializedInfo_mut: PCERT_STRONG_SIGN_SERIALIZED_INFO,
+ pszOID pszOID_mut: LPSTR,
+}}
+STRUCT!{struct CERT_STRONG_SIGN_PARA {
+ cbSize: DWORD,
+ dwInfoChoice: DWORD,
+ u: CERT_STRONG_SIGN_PARA_u,
+}}
+pub type PCERT_STRONG_SIGN_PARA = *mut CERT_STRONG_SIGN_PARA;
+pub type PCCERT_STRONG_SIGN_PARA = *const CERT_STRONG_SIGN_PARA;
+pub const CERT_STRONG_SIGN_SERIALIZED_INFO_CHOICE: DWORD = 1;
+pub const CERT_STRONG_SIGN_OID_INFO_CHOICE: DWORD = 2;
+pub const CERT_STRONG_SIGN_ENABLE_CRL_CHECK: DWORD = 0x1;
+pub const CERT_STRONG_SIGN_ENABLE_OCSP_CHECK: DWORD = 0x2;
+pub const szOID_CERT_STRONG_SIGN_OS_PREFIX: &'static str = "1.3.6.1.4.1.311.72.1.";
+pub const szOID_CERT_STRONG_SIGN_OS_1: &'static str = "1.3.6.1.4.1.311.72.1.1";
+pub const szOID_CERT_STRONG_SIGN_OS_CURRENT: &'static str = szOID_CERT_STRONG_SIGN_OS_1;
+pub const szOID_CERT_STRONG_KEY_OS_PREFIX: &'static str = "1.3.6.1.4.1.311.72.2.";
+pub const szOID_CERT_STRONG_KEY_OS_1: &'static str = "1.3.6.1.4.1.311.72.2.1";
+pub const szOID_CERT_STRONG_KEY_OS_CURRENT: &'static str = szOID_CERT_STRONG_KEY_OS_1;
+pub type HCRYPTMSG = *mut c_void;
+pub const szOID_PKCS_7_DATA: &'static str = "1.2.840.113549.1.7.1";
+pub const szOID_PKCS_7_SIGNED: &'static str = "1.2.840.113549.1.7.2";
+pub const szOID_PKCS_7_ENVELOPED: &'static str = "1.2.840.113549.1.7.3";
+pub const szOID_PKCS_7_SIGNEDANDENVELOPED: &'static str = "1.2.840.113549.1.7.4";
+pub const szOID_PKCS_7_DIGESTED: &'static str = "1.2.840.113549.1.7.5";
+pub const szOID_PKCS_7_ENCRYPTED: &'static str = "1.2.840.113549.1.7.6";
+pub const szOID_PKCS_9_CONTENT_TYPE: &'static str = "1.2.840.113549.1.9.3";
+pub const szOID_PKCS_9_MESSAGE_DIGEST: &'static str = "1.2.840.113549.1.9.4";
+pub const CMSG_DATA: DWORD = 1;
+pub const CMSG_SIGNED: DWORD = 2;
+pub const CMSG_ENVELOPED: DWORD = 3;
+pub const CMSG_SIGNED_AND_ENVELOPED: DWORD = 4;
+pub const CMSG_HASHED: DWORD = 5;
+pub const CMSG_ENCRYPTED: DWORD = 6;
+pub const CMSG_ALL_FLAGS: DWORD = !0;
+pub const CMSG_DATA_FLAG: DWORD = 1 << CMSG_DATA;
+pub const CMSG_SIGNED_FLAG: DWORD = 1 << CMSG_SIGNED;
+pub const CMSG_ENVELOPED_FLAG: DWORD = 1 << CMSG_ENVELOPED;
+pub const CMSG_SIGNED_AND_ENVELOPED_FLAG: DWORD = 1 << CMSG_SIGNED_AND_ENVELOPED;
+pub const CMSG_HASHED_FLAG: DWORD = 1 << CMSG_HASHED;
+pub const CMSG_ENCRYPTED_FLAG: DWORD = 1 << CMSG_ENCRYPTED;
+STRUCT!{struct CERT_ISSUER_SERIAL_NUMBER {
+ Issuer: CERT_NAME_BLOB,
+ SerialNumber: CRYPT_INTEGER_BLOB,
+}}
+pub type PCERT_ISSUER_SERIAL_NUMBER = *mut CERT_ISSUER_SERIAL_NUMBER;
+UNION!{union CERT_ID_u {
+ [usize; 4],
+ IssuerSerialNumber IssuerSerialNumber_mut: CERT_ISSUER_SERIAL_NUMBER,
+ KeyId KeyId_mut: CRYPT_HASH_BLOB,
+ HashId HashId_mut: CRYPT_HASH_BLOB,
+}}
+STRUCT!{struct CERT_ID {
+ dwIdChoice: DWORD,
+ u: CERT_ID_u,
+}}
+pub type PCERT_ID = *mut CERT_ID;
+pub const CERT_ID_ISSUER_SERIAL_NUMBER: DWORD = 1;
+pub const CERT_ID_KEY_IDENTIFIER: DWORD = 2;
+pub const CERT_ID_SHA1_HASH: DWORD = 3;
+UNION!{union CMSG_SIGNER_ENCODE_INFO_u {
+ [usize; 1],
+ hCryptProv hCryptProv_mut: HCRYPTPROV,
+ hNCryptKey hNCryptKey_mut: NCRYPT_KEY_HANDLE,
+ hBCryptKey hBCryptKey_mut: BCRYPT_KEY_HANDLE,
+}}
+STRUCT!{struct CMSG_SIGNER_ENCODE_INFO {
+ cbSize: DWORD,
+ pCertInfo: PCERT_INFO,
+ u: CMSG_SIGNER_ENCODE_INFO_u,
+ dwKeySpec: DWORD,
+ HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ pvHashAuxInfo: *mut c_void,
+ cAuthAttr: DWORD,
+ rgAuthAttr: PCRYPT_ATTRIBUTE,
+ cUnauthAttr: DWORD,
+ rgUnauthAttr: PCRYPT_ATTRIBUTE,
+ SignerId: CERT_ID,
+ HashEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ pvHashEncryptionAuxInfo: *mut c_void,
+}}
+pub type PCMSG_SIGNER_ENCODE_INFO = *mut CMSG_SIGNER_ENCODE_INFO;
+STRUCT!{struct CMSG_SIGNED_ENCODE_INFO {
+ cbSize: DWORD,
+ cSigners: DWORD,
+ rgSigners: PCMSG_SIGNER_ENCODE_INFO,
+ cCertEncoded: DWORD,
+ rgCertEncoded: PCERT_BLOB,
+ cCrlEncoded: DWORD,
+ rgCrlEncoded: PCRL_BLOB,
+ cAttrCertEncoded: DWORD,
+ rgAttrCertEncoded: PCERT_BLOB,
+}}
+pub type PCMSG_SIGNED_ENCODE_INFO = *mut CMSG_SIGNED_ENCODE_INFO;
+pub type PCMSG_RECIPIENT_ENCODE_INFO = *mut CMSG_RECIPIENT_ENCODE_INFO;
+STRUCT!{struct CMSG_ENVELOPED_ENCODE_INFO {
+ cbSize: DWORD,
+ hCryptProv: HCRYPTPROV_LEGACY,
+ ContentEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ pvEncryptionAuxInfo: *mut c_void,
+ cRecipients: DWORD,
+ rgpRecipients: *mut PCERT_INFO,
+ rgCmsRecipients: PCMSG_RECIPIENT_ENCODE_INFO,
+ cCertEncoded: DWORD,
+ rgCertEncoded: PCERT_BLOB,
+ cCrlEncoded: DWORD,
+ rgCrlEncoded: PCRL_BLOB,
+ cAttrCertEncoded: DWORD,
+ rgAttrCertEncoded: PCERT_BLOB,
+ cUnprotectedAttr: DWORD,
+ rgUnprotectedAttr: PCRYPT_ATTRIBUTE,
+}}
+pub type PCMSG_ENVELOPED_ENCODE_INFO = *mut CMSG_ENVELOPED_ENCODE_INFO;
+STRUCT!{struct CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO {
+ cbSize: DWORD,
+ KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ pvKeyEncryptionAuxInfo: *mut c_void,
+ hCryptProv: HCRYPTPROV_LEGACY,
+ RecipientPublicKey: CRYPT_BIT_BLOB,
+ RecipientId: CERT_ID,
+}}
+pub type PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO = *mut CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO;
+STRUCT!{struct CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO {
+ cbSize: DWORD,
+ RecipientPublicKey: CRYPT_BIT_BLOB,
+ RecipientId: CERT_ID,
+ Date: FILETIME,
+ pOtherAttr: PCRYPT_ATTRIBUTE_TYPE_VALUE,
+}}
+pub type PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO = *mut CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO;
+UNION!{union CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO_u {
+ [usize; 1],
+ pEphemeralAlgorithm pEphemeralAlgorithm_mut: PCRYPT_ALGORITHM_IDENTIFIER,
+ pSenderId pSenderId_mut: PCERT_ID,
+}}
+STRUCT!{struct CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO {
+ cbSize: DWORD,
+ KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ pvKeyEncryptionAuxInfo: *mut c_void,
+ KeyWrapAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ pvKeyWrapAuxInfo: *mut c_void,
+ hCryptProv: HCRYPTPROV_LEGACY,
+ dwKeySpec: DWORD,
+ dwKeyChoice: DWORD,
+ u: CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO_u,
+ UserKeyingMaterial: CRYPT_DATA_BLOB,
+ cRecipientEncryptedKeys: DWORD,
+ rgpRecipientEncryptedKeys: *mut PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO,
+}}
+pub type PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO = *mut CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO;
+pub const CMSG_KEY_AGREE_EPHEMERAL_KEY_CHOICE: DWORD = 1;
+pub const CMSG_KEY_AGREE_STATIC_KEY_CHOICE: DWORD = 2;
+UNION!{union CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO_u {
+ [usize; 1],
+ hKeyEncryptionKey hKeyEncryptionKey_mut: HCRYPTKEY,
+ pvKeyEncryptionKey pvKeyEncryptionKey_mut: *mut c_void,
+}}
+STRUCT!{struct CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO {
+ cbSize: DWORD,
+ KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ pvKeyEncryptionAuxInfo: *mut c_void,
+ hCryptProv: HCRYPTPROV,
+ dwKeyChoice: DWORD,
+ u: CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO_u,
+ KeyId: CRYPT_DATA_BLOB,
+ Date: FILETIME,
+ pOtherAttr: PCRYPT_ATTRIBUTE_TYPE_VALUE,
+}}
+pub type PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO = *mut CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO;
+pub const CMSG_MAIL_LIST_HANDLE_KEY_CHOICE: DWORD = 1;
+UNION!{union CMSG_RECIPIENT_ENCODE_INFO_u {
+ [usize; 1],
+ pKeyTrans pKeyTrans_mut: PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO,
+ pKeyAgree pKeyAgree_mut: PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO,
+ pMailList pMailList_mut: PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO,
+}}
+STRUCT!{struct CMSG_RECIPIENT_ENCODE_INFO {
+ dwRecipientChoice: DWORD,
+ u: CMSG_RECIPIENT_ENCODE_INFO_u,
+}}
+pub const CMSG_KEY_TRANS_RECIPIENT: DWORD = 1;
+pub const CMSG_KEY_AGREE_RECIPIENT: DWORD = 2;
+pub const CMSG_MAIL_LIST_RECIPIENT: DWORD = 3;
+STRUCT!{struct CMSG_RC2_AUX_INFO {
+ cbSize: DWORD,
+ dwBitLen: DWORD,
+}}
+pub type PCMSG_RC2_AUX_INFO = *mut CMSG_RC2_AUX_INFO;
+STRUCT!{struct CMSG_SP3_COMPATIBLE_AUX_INFO {
+ cbSize: DWORD,
+ dwFlags: DWORD,
+}}
+pub type PCMSG_SP3_COMPATIBLE_AUX_INFO = *mut CMSG_SP3_COMPATIBLE_AUX_INFO;
+pub const CMSG_SP3_COMPATIBLE_ENCRYPT_FLAG: DWORD = 0x80000000;
+STRUCT!{struct CMSG_RC4_AUX_INFO {
+ cbSize: DWORD,
+ dwBitLen: DWORD,
+}}
+pub type PCMSG_RC4_AUX_INFO = *mut CMSG_RC4_AUX_INFO;
+pub const CMSG_RC4_NO_SALT_FLAG: DWORD = 0x40000000;
+STRUCT!{struct CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO {
+ cbSize: DWORD,
+ SignedInfo: CMSG_SIGNED_ENCODE_INFO,
+ EnvelopedInfo: CMSG_ENVELOPED_ENCODE_INFO,
+}}
+pub type PCMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO = *mut CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO;
+STRUCT!{struct CMSG_HASHED_ENCODE_INFO {
+ cbSize: DWORD,
+ hCryptProv: HCRYPTPROV_LEGACY,
+ HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ pvHashAuxInfo: *mut c_void,
+}}
+pub type PCMSG_HASHED_ENCODE_INFO = *mut CMSG_HASHED_ENCODE_INFO;
+STRUCT!{struct CMSG_ENCRYPTED_ENCODE_INFO {
+ cbSize: DWORD,
+ ContentEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ pvEncryptionAuxInfo: *mut c_void,
+}}
+pub type PCMSG_ENCRYPTED_ENCODE_INFO = *mut CMSG_ENCRYPTED_ENCODE_INFO;
+FN!{stdcall PFN_CMSG_STREAM_OUTPUT(
+ pvArg: *const c_void,
+ pbData: *mut BYTE,
+ cbData: DWORD,
+ fFinal: BOOL,
+) -> BOOL}
+pub const CMSG_INDEFINITE_LENGTH: DWORD = 0xFFFFFFFF;
+STRUCT!{struct CMSG_STREAM_INFO {
+ cbContent: DWORD,
+ pfnStreamOutput: PFN_CMSG_STREAM_OUTPUT,
+ pvArg: *mut c_void,
+}}
+pub type PCMSG_STREAM_INFO = *mut CMSG_STREAM_INFO;
+pub const CMSG_BARE_CONTENT_FLAG: DWORD = 0x00000001;
+pub const CMSG_LENGTH_ONLY_FLAG: DWORD = 0x00000002;
+pub const CMSG_DETACHED_FLAG: DWORD = 0x00000004;
+pub const CMSG_AUTHENTICATED_ATTRIBUTES_FLAG: DWORD = 0x00000008;
+pub const CMSG_CONTENTS_OCTETS_FLAG: DWORD = 0x00000010;
+pub const CMSG_MAX_LENGTH_FLAG: DWORD = 0x00000020;
+pub const CMSG_CMS_ENCAPSULATED_CONTENT_FLAG: DWORD = 0x00000040;
+pub const CMSG_SIGNED_DATA_NO_SIGN_FLAG: DWORD = 0x00000080;
+pub const CMSG_CRYPT_RELEASE_CONTEXT_FLAG: DWORD = 0x00008000;
+extern "system" {
+ pub fn CryptMsgOpenToEncode(
+ dwMsgEncodingType: DWORD,
+ dwFlags: DWORD,
+ dwMsgType: DWORD,
+ pvMsgEncodeInfo: *mut c_void,
+ pszInnerContentObjID: LPSTR,
+ pStreamInfo: PCMSG_STREAM_INFO,
+ ) -> HCRYPTMSG;
+ pub fn CryptMsgCalculateEncodedLength(
+ dwMsgEncodingType: DWORD,
+ dwFlags: DWORD,
+ dwMsgType: DWORD,
+ pvMsgEncodeInfo: *const c_void,
+ pszInnerContentObjID: LPSTR,
+ cbData: DWORD,
+ ) -> DWORD;
+ pub fn CryptMsgOpenToDecode(
+ dwMsgEncodingType: DWORD,
+ dwFlags: DWORD,
+ dwMsgType: DWORD,
+ hCryptProv: HCRYPTPROV_LEGACY,
+ pRecipientInfo: PCERT_INFO,
+ pStreamInfo: PCMSG_STREAM_INFO,
+ ) -> HCRYPTMSG;
+ pub fn CryptMsgDuplicate(
+ hCryptMsg: HCRYPTMSG,
+ ) -> HCRYPTMSG;
+ pub fn CryptMsgClose(
+ hCryptMsg: HCRYPTMSG,
+ ) -> BOOL;
+ pub fn CryptMsgUpdate(
+ hCryptMsg: HCRYPTMSG,
+ pbData: *const BYTE,
+ cbData: DWORD,
+ fFinal: BOOL,
+ ) -> BOOL;
+ pub fn CryptMsgGetParam(
+ hCryptMsg: HCRYPTMSG,
+ dwParamType: DWORD,
+ dwIndex: DWORD,
+ pvData: *mut c_void,
+ pcbData: *mut DWORD,
+ ) -> BOOL;
+}
+pub const CMSG_TYPE_PARAM: DWORD = 1;
+pub const CMSG_CONTENT_PARAM: DWORD = 2;
+pub const CMSG_BARE_CONTENT_PARAM: DWORD = 3;
+pub const CMSG_INNER_CONTENT_TYPE_PARAM: DWORD = 4;
+pub const CMSG_SIGNER_COUNT_PARAM: DWORD = 5;
+pub const CMSG_SIGNER_INFO_PARAM: DWORD = 6;
+pub const CMSG_SIGNER_CERT_INFO_PARAM: DWORD = 7;
+pub const CMSG_SIGNER_HASH_ALGORITHM_PARAM: DWORD = 8;
+pub const CMSG_SIGNER_AUTH_ATTR_PARAM: DWORD = 9;
+pub const CMSG_SIGNER_UNAUTH_ATTR_PARAM: DWORD = 10;
+pub const CMSG_CERT_COUNT_PARAM: DWORD = 11;
+pub const CMSG_CERT_PARAM: DWORD = 12;
+pub const CMSG_CRL_COUNT_PARAM: DWORD = 13;
+pub const CMSG_CRL_PARAM: DWORD = 14;
+pub const CMSG_ENVELOPE_ALGORITHM_PARAM: DWORD = 15;
+pub const CMSG_RECIPIENT_COUNT_PARAM: DWORD = 17;
+pub const CMSG_RECIPIENT_INDEX_PARAM: DWORD = 18;
+pub const CMSG_RECIPIENT_INFO_PARAM: DWORD = 19;
+pub const CMSG_HASH_ALGORITHM_PARAM: DWORD = 20;
+pub const CMSG_HASH_DATA_PARAM: DWORD = 21;
+pub const CMSG_COMPUTED_HASH_PARAM: DWORD = 22;
+pub const CMSG_ENCRYPT_PARAM: DWORD = 26;
+pub const CMSG_ENCRYPTED_DIGEST: DWORD = 27;
+pub const CMSG_ENCODED_SIGNER: DWORD = 28;
+pub const CMSG_ENCODED_MESSAGE: DWORD = 29;
+pub const CMSG_VERSION_PARAM: DWORD = 30;
+pub const CMSG_ATTR_CERT_COUNT_PARAM: DWORD = 31;
+pub const CMSG_ATTR_CERT_PARAM: DWORD = 32;
+pub const CMSG_CMS_RECIPIENT_COUNT_PARAM: DWORD = 33;
+pub const CMSG_CMS_RECIPIENT_INDEX_PARAM: DWORD = 34;
+pub const CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM: DWORD = 35;
+pub const CMSG_CMS_RECIPIENT_INFO_PARAM: DWORD = 36;
+pub const CMSG_UNPROTECTED_ATTR_PARAM: DWORD = 37;
+pub const CMSG_SIGNER_CERT_ID_PARAM: DWORD = 38;
+pub const CMSG_CMS_SIGNER_INFO_PARAM: DWORD = 39;
+STRUCT!{struct CMSG_SIGNER_INFO {
+ dwVersion: DWORD,
+ Issuer: CERT_NAME_BLOB,
+ SerialNumber: CRYPT_INTEGER_BLOB,
+ HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ HashEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ EncryptedHash: CRYPT_DATA_BLOB,
+ AuthAttrs: CRYPT_ATTRIBUTES,
+ UnauthAttrs: CRYPT_ATTRIBUTES,
+}}
+pub type PCMSG_SIGNER_INFO = *mut CMSG_SIGNER_INFO;
+STRUCT!{struct CMSG_CMS_SIGNER_INFO {
+ dwVersion: DWORD,
+ SignerId: CERT_ID,
+ HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ HashEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ EncryptedHash: CRYPT_DATA_BLOB,
+ AuthAttrs: CRYPT_ATTRIBUTES,
+ UnauthAttrs: CRYPT_ATTRIBUTES,
+}}
+pub type PCMSG_CMS_SIGNER_INFO = *mut CMSG_CMS_SIGNER_INFO;
+pub type CMSG_ATTR = CRYPT_ATTRIBUTES;
+pub type PCMSG_ATTR = *mut CRYPT_ATTRIBUTES;
+pub const CMSG_SIGNED_DATA_V1: DWORD = 1;
+pub const CMSG_SIGNED_DATA_V3: DWORD = 3;
+pub const CMSG_SIGNED_DATA_PKCS_1_5_VERSION: DWORD = CMSG_SIGNED_DATA_V1;
+pub const CMSG_SIGNED_DATA_CMS_VERSION: DWORD = CMSG_SIGNED_DATA_V3;
+pub const CMSG_SIGNER_INFO_V1: DWORD = 1;
+pub const CMSG_SIGNER_INFO_V3: DWORD = 3;
+pub const CMSG_SIGNER_INFO_PKCS_1_5_VERSION: DWORD = CMSG_SIGNER_INFO_V1;
+pub const CMSG_SIGNER_INFO_CMS_VERSION: DWORD = CMSG_SIGNER_INFO_V3;
+pub const CMSG_HASHED_DATA_V0: DWORD = 0;
+pub const CMSG_HASHED_DATA_V2: DWORD = 2;
+pub const CMSG_HASHED_DATA_PKCS_1_5_VERSION: DWORD = CMSG_HASHED_DATA_V0;
+pub const CMSG_HASHED_DATA_CMS_VERSION: DWORD = CMSG_HASHED_DATA_V2;
+pub const CMSG_ENVELOPED_DATA_V0: DWORD = 0;
+pub const CMSG_ENVELOPED_DATA_V2: DWORD = 2;
+pub const CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION: DWORD = CMSG_ENVELOPED_DATA_V0;
+pub const CMSG_ENVELOPED_DATA_CMS_VERSION: DWORD = CMSG_ENVELOPED_DATA_V2;
+STRUCT!{struct CMSG_KEY_TRANS_RECIPIENT_INFO {
+ dwVersion: DWORD,
+ RecipientId: CERT_ID,
+ KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ EncryptedKey: CRYPT_DATA_BLOB,
+}}
+pub type PCMSG_KEY_TRANS_RECIPIENT_INFO = *mut CMSG_KEY_TRANS_RECIPIENT_INFO;
+STRUCT!{struct CMSG_RECIPIENT_ENCRYPTED_KEY_INFO {
+ RecipientId: CERT_ID,
+ EncryptedKey: CRYPT_DATA_BLOB,
+ Date: FILETIME,
+ pOtherAttr: PCRYPT_ATTRIBUTE_TYPE_VALUE,
+}}
+pub type PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO = *mut CMSG_RECIPIENT_ENCRYPTED_KEY_INFO;
+UNION!{union CMSG_KEY_AGREE_RECIPIENT_INFO_u {
+ [usize; 6],
+ OriginatorCertId OriginatorCertId_mut: CERT_ID,
+ OriginatorPublicKeyInfo OriginatorPublicKeyInfo_mut: CERT_PUBLIC_KEY_INFO,
+}}
+STRUCT!{struct CMSG_KEY_AGREE_RECIPIENT_INFO {
+ dwVersion: DWORD,
+ dwOriginatorChoice: DWORD,
+ u: CMSG_KEY_AGREE_RECIPIENT_INFO_u,
+ UserKeyingMaterial: CRYPT_DATA_BLOB,
+ KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ cRecipientEncryptedKeys: DWORD,
+ rgpRecipientEncryptedKeys: *mut PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO,
+}}
+pub type PCMSG_KEY_AGREE_RECIPIENT_INFO = *mut CMSG_KEY_AGREE_RECIPIENT_INFO;
+pub const CMSG_KEY_AGREE_ORIGINATOR_CERT: DWORD = 1;
+pub const CMSG_KEY_AGREE_ORIGINATOR_PUBLIC_KEY: DWORD = 2;
+STRUCT!{struct CMSG_MAIL_LIST_RECIPIENT_INFO {
+ dwVersion: DWORD,
+ KeyId: CRYPT_DATA_BLOB,
+ KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ EncryptedKey: CRYPT_DATA_BLOB,
+ Date: FILETIME,
+ pOtherAttr: PCRYPT_ATTRIBUTE_TYPE_VALUE,
+}}
+pub type PCMSG_MAIL_LIST_RECIPIENT_INFO = *mut CMSG_MAIL_LIST_RECIPIENT_INFO;
+UNION!{union CMSG_CMS_RECIPIENT_INFO_u {
+ [usize; 1],
+ pKeyTrans pKeyTrans_mut: PCMSG_KEY_TRANS_RECIPIENT_INFO,
+ pKeyAgree pKeyAgree_mut: PCMSG_KEY_AGREE_RECIPIENT_INFO,
+ pMailList pMailList_mut: PCMSG_MAIL_LIST_RECIPIENT_INFO,
+}}
+STRUCT!{struct CMSG_CMS_RECIPIENT_INFO {
+ dwRecipientChoice: DWORD,
+ u: CMSG_CMS_RECIPIENT_INFO_u,
+}}
+pub type PCMSG_CMS_RECIPIENT_INFO = *mut CMSG_CMS_RECIPIENT_INFO;
+pub const CMSG_ENVELOPED_RECIPIENT_V0: DWORD = 0;
+pub const CMSG_ENVELOPED_RECIPIENT_V2: DWORD = 2;
+pub const CMSG_ENVELOPED_RECIPIENT_V3: DWORD = 3;
+pub const CMSG_ENVELOPED_RECIPIENT_V4: DWORD = 4;
+pub const CMSG_KEY_TRANS_PKCS_1_5_VERSION: DWORD = CMSG_ENVELOPED_RECIPIENT_V0;
+pub const CMSG_KEY_TRANS_CMS_VERSION: DWORD = CMSG_ENVELOPED_RECIPIENT_V2;
+pub const CMSG_KEY_AGREE_VERSION: DWORD = CMSG_ENVELOPED_RECIPIENT_V3;
+pub const CMSG_MAIL_LIST_VERSION: DWORD = CMSG_ENVELOPED_RECIPIENT_V4;
+extern "system" {
+ pub fn CryptMsgControl(
+ hCryptMsg: HCRYPTMSG,
+ dwFlags: DWORD,
+ dwCtrlType: DWORD,
+ pvCtrlPara: *const c_void,
+ ) -> BOOL;
+}
+pub const CMSG_CTRL_VERIFY_SIGNATURE: DWORD = 1;
+pub const CMSG_CTRL_DECRYPT: DWORD = 2;
+pub const CMSG_CTRL_VERIFY_HASH: DWORD = 5;
+pub const CMSG_CTRL_ADD_SIGNER: DWORD = 6;
+pub const CMSG_CTRL_DEL_SIGNER: DWORD = 7;
+pub const CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR: DWORD = 8;
+pub const CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR: DWORD = 9;
+pub const CMSG_CTRL_ADD_CERT: DWORD = 10;
+pub const CMSG_CTRL_DEL_CERT: DWORD = 11;
+pub const CMSG_CTRL_ADD_CRL: DWORD = 12;
+pub const CMSG_CTRL_DEL_CRL: DWORD = 13;
+pub const CMSG_CTRL_ADD_ATTR_CERT: DWORD = 14;
+pub const CMSG_CTRL_DEL_ATTR_CERT: DWORD = 15;
+pub const CMSG_CTRL_KEY_TRANS_DECRYPT: DWORD = 16;
+pub const CMSG_CTRL_KEY_AGREE_DECRYPT: DWORD = 17;
+pub const CMSG_CTRL_MAIL_LIST_DECRYPT: DWORD = 18;
+pub const CMSG_CTRL_VERIFY_SIGNATURE_EX: DWORD = 19;
+pub const CMSG_CTRL_ADD_CMS_SIGNER_INFO: DWORD = 20;
+pub const CMSG_CTRL_ENABLE_STRONG_SIGNATURE: DWORD = 21;
+STRUCT!{struct CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA {
+ cbSize: DWORD,
+ hCryptProv: HCRYPTPROV_LEGACY,
+ dwSignerIndex: DWORD,
+ dwSignerType: DWORD,
+ pvSigner: *mut c_void,
+}}
+pub type PCMSG_CTRL_VERIFY_SIGNATURE_EX_PARA = *mut CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA;
+pub const CMSG_VERIFY_SIGNER_PUBKEY: DWORD = 1;
+pub const CMSG_VERIFY_SIGNER_CERT: DWORD = 2;
+pub const CMSG_VERIFY_SIGNER_CHAIN: DWORD = 3;
+pub const CMSG_VERIFY_SIGNER_NULL: DWORD = 4;
+UNION!{union CMSG_CTRL_DECRYPT_PARA_u {
+ [usize; 1],
+ hCryptProv hCryptProv_mut: HCRYPTPROV,
+ hNCryptKey hNCryptKey_mut: NCRYPT_KEY_HANDLE,
+}}
+STRUCT!{struct CMSG_CTRL_DECRYPT_PARA {
+ cbSize: DWORD,
+ u: CMSG_CTRL_DECRYPT_PARA_u,
+ dwKeySpec: DWORD,
+ dwRecipientIndex: DWORD,
+}}
+pub type PCMSG_CTRL_DECRYPT_PARA = *mut CMSG_CTRL_DECRYPT_PARA;
+UNION!{union CMSG_CTRL_KEY_TRANS_DECRYPT_PARA_u {
+ [usize; 1],
+ hCryptProv hCryptProv_mut: HCRYPTPROV,
+ hNCryptKey hNCryptKey_mut: NCRYPT_KEY_HANDLE,
+}}
+STRUCT!{struct CMSG_CTRL_KEY_TRANS_DECRYPT_PARA {
+ cbSize: DWORD,
+ u: CMSG_CTRL_KEY_TRANS_DECRYPT_PARA_u,
+ dwKeySpec: DWORD,
+ pKeyTrans: PCMSG_KEY_TRANS_RECIPIENT_INFO,
+ dwRecipientIndex: DWORD,
+}}
+pub type PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA = *mut CMSG_CTRL_KEY_TRANS_DECRYPT_PARA;
+UNION!{union CMSG_CTRL_KEY_AGREE_DECRYPT_PARA_u {
+ [usize; 1],
+ hCryptProv hCryptProv_mut: HCRYPTPROV,
+ hNCryptKey hNCryptKey_mut: NCRYPT_KEY_HANDLE,
+}}
+STRUCT!{struct CMSG_CTRL_KEY_AGREE_DECRYPT_PARA {
+ cbSize: DWORD,
+ u: CMSG_CTRL_KEY_AGREE_DECRYPT_PARA_u,
+ dwKeySpec: DWORD,
+ pKeyAgree: PCMSG_KEY_AGREE_RECIPIENT_INFO,
+ dwRecipientIndex: DWORD,
+ dwRecipientEncryptedKeyIndex: DWORD,
+ OriginatorPublicKey: CRYPT_BIT_BLOB,
+}}
+pub type PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA = *mut CMSG_CTRL_KEY_AGREE_DECRYPT_PARA;
+UNION!{union CMSG_CTRL_MAIL_LIST_DECRYPT_PARA_u {
+ [usize; 1],
+ hKeyEncryptionKey hKeyEncryptionKey_mut: HCRYPTKEY,
+ pvKeyEncryptionKey pvKeyEncryptionKey_mut: *mut c_void,
+}}
+STRUCT!{struct CMSG_CTRL_MAIL_LIST_DECRYPT_PARA {
+ cbSize: DWORD,
+ hCryptProv: HCRYPTPROV,
+ pMailList: PCMSG_MAIL_LIST_RECIPIENT_INFO,
+ dwRecipientIndex: DWORD,
+ dwKeyChoice: DWORD,
+ u: CMSG_CTRL_MAIL_LIST_DECRYPT_PARA_u,
+}}
+pub type PCMSG_CTRL_MAIL_LIST_DECRYPT_PARA = *mut CMSG_CTRL_MAIL_LIST_DECRYPT_PARA;
+STRUCT!{struct CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA {
+ cbSize: DWORD,
+ dwSignerIndex: DWORD,
+ blob: CRYPT_DATA_BLOB,
+}}
+pub type PCMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA = *mut CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA;
+STRUCT!{struct CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA {
+ cbSize: DWORD,
+ dwSignerIndex: DWORD,
+ dwUnauthAttrIndex: DWORD,
+}}
+pub type PCMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA = *mut CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA;
+extern "system" {
+ pub fn CryptMsgVerifyCountersignatureEncoded(
+ hCryptProv: HCRYPTPROV_LEGACY,
+ dwEncodingType: DWORD,
+ pbSignerInfo: PBYTE,
+ cbSignerInfo: DWORD,
+ pbSignerInfoCountersignature: PBYTE,
+ cbSignerInfoCountersignature: DWORD,
+ pciCountersigner: PCERT_INFO,
+ ) -> BOOL;
+ pub fn CryptMsgVerifyCountersignatureEncodedEx(
+ hCryptProv: HCRYPTPROV_LEGACY,
+ dwEncodingType: DWORD,
+ pbSignerInfo: PBYTE,
+ cbSignerInfo: DWORD,
+ pbSignerInfoCountersignature: PBYTE,
+ cbSignerInfoCountersignature: DWORD,
+ dwSignerType: DWORD,
+ pvSigner: *mut c_void,
+ dwFlags: DWORD,
+ pvExtra: *mut c_void,
+ ) -> BOOL;
+}
+pub const CMSG_VERIFY_COUNTER_SIGN_ENABLE_STRONG_FLAG: DWORD = 0x00000001;
+extern "system" {
+ pub fn CryptMsgCountersign(
+ hCryptMsg: HCRYPTMSG,
+ dwIndex: DWORD,
+ cCountersigners: DWORD,
+ rgCountersigners: PCMSG_SIGNER_ENCODE_INFO,
+ ) -> BOOL;
+ pub fn CryptMsgCountersignEncoded(
+ dwEncodingType: DWORD,
+ pbSignerInfo: PBYTE,
+ cbSignerInfo: DWORD,
+ cCountersigners: DWORD,
+ rgCountersigners: PCMSG_SIGNER_ENCODE_INFO,
+ pbCountersignature: PBYTE,
+ pcbCountersignature: PDWORD,
+ ) -> BOOL;
+}
+FN!{stdcall PFN_CMSG_ALLOC(
+ cb: size_t,
+) -> ()}
+FN!{stdcall PFN_CMSG_FREE(
+ pv: *mut c_void,
+) -> ()}
+pub const CMSG_OID_GEN_ENCRYPT_KEY_FUNC: &'static str = "CryptMsgDllGenEncryptKey";
+FN!{stdcall PFN_CMSG_GEN_ENCRYPT_KEY(
+ phCryptProv: *mut HCRYPTPROV,
+ paiEncrypt: PCRYPT_ALGORITHM_IDENTIFIER,
+ pvEncryptAuxInfo: PVOID,
+ pPublicKeyInfo: PCERT_PUBLIC_KEY_INFO,
+ pfnAlloc: PFN_CMSG_ALLOC,
+ phEncryptKey: *mut HCRYPTKEY,
+ ppbEncryptParameters: *mut PBYTE,
+ pcbEncryptParameters: PDWORD,
+) -> BOOL}
+pub const CMSG_OID_EXPORT_ENCRYPT_KEY_FUNC: &'static str = "CryptMsgDllExportEncryptKey";
+FN!{stdcall PFN_CMSG_EXPORT_ENCRYPT_KEY(
+ hCryptProv: HCRYPTPROV,
+ hEncryptKey: HCRYPTKEY,
+ pPublicKeyInfo: PCERT_PUBLIC_KEY_INFO,
+ pbData: PBYTE,
+ pcbData: PDWORD,
+) -> BOOL}
+pub const CMSG_OID_IMPORT_ENCRYPT_KEY_FUNC: &'static str = "CryptMsgDllImportEncryptKey";
+FN!{stdcall PFN_CMSG_IMPORT_ENCRYPT_KEY(
+ hCryptProv: HCRYPTPROV,
+ dwKeySpec: DWORD,
+ paiEncrypt: PCRYPT_ALGORITHM_IDENTIFIER,
+ paiPubKey: PCRYPT_ALGORITHM_IDENTIFIER,
+ pbEncodedKey: PBYTE,
+ cbEncodedKey: DWORD,
+ phEncryptKey: *mut HCRYPTKEY,
+) -> BOOL}
+pub const CMSG_DEFAULT_INSTALLABLE_FUNC_OID: LPCSTR = 1 as LPCSTR;
+UNION!{union CMSG_CONTENT_ENCRYPT_INFO_u {
+ [usize; 1],
+ hContentEncryptKey hContentEncryptKey_mut: HCRYPTKEY,
+ hCNGContentEncryptKey hCNGContentEncryptKey_mut: BCRYPT_KEY_HANDLE,
+}}
+STRUCT!{struct CMSG_CONTENT_ENCRYPT_INFO {
+ cbSize: DWORD,
+ hCryptProv: HCRYPTPROV_LEGACY,
+ ContentEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ pvEncryptionAuxInfo: *mut c_void,
+ cRecipients: DWORD,
+ rgCmsRecipients: PCMSG_RECIPIENT_ENCODE_INFO,
+ pfnAlloc: PFN_CMSG_ALLOC,
+ pfnFree: PFN_CMSG_FREE,
+ dwEncryptFlags: DWORD,
+ u: CMSG_CONTENT_ENCRYPT_INFO_u,
+ dwFlags: DWORD,
+ fCNG: BOOL,
+ pbCNGContentEncryptKeyObject: *mut BYTE,
+ pbContentEncryptKey: *mut BYTE,
+ cbContentEncryptKey: DWORD,
+}}
+pub type PCMSG_CONTENT_ENCRYPT_INFO = *mut CMSG_CONTENT_ENCRYPT_INFO;
+pub const CMSG_CONTENT_ENCRYPT_PAD_ENCODED_LEN_FLAG: DWORD = 0x00000001;
+pub const CMSG_CONTENT_ENCRYPT_FREE_PARA_FLAG: DWORD = 0x00000001;
+pub const CMSG_CONTENT_ENCRYPT_FREE_OBJID_FLAG: DWORD = 0x00000002;
+pub const CMSG_CONTENT_ENCRYPT_RELEASE_CONTEXT_FLAG: DWORD = 0x00008000;
+pub const CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC: &'static str = "CryptMsgDllGenContentEncryptKey";
+pub const CMSG_OID_CAPI1_GEN_CONTENT_ENCRYPT_KEY_FUNC: &'static str
+ = CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC;
+FN!{stdcall PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY(
+ pContentEncryptInfo: PCMSG_CONTENT_ENCRYPT_INFO,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+) -> BOOL}
+pub const CMSG_OID_CNG_GEN_CONTENT_ENCRYPT_KEY_FUNC: &'static str
+ = "CryptMsgDllCNGGenContentEncryptKey";
+STRUCT!{struct CMSG_KEY_TRANS_ENCRYPT_INFO {
+ cbSize: DWORD,
+ dwRecipientIndex: DWORD,
+ KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ EncryptedKey: CRYPT_DATA_BLOB,
+ dwFlags: DWORD,
+}}
+pub type PCMSG_KEY_TRANS_ENCRYPT_INFO = *mut CMSG_KEY_TRANS_ENCRYPT_INFO;
+pub const CMSG_KEY_TRANS_ENCRYPT_FREE_PARA_FLAG: DWORD = 0x00000001;
+pub const CMSG_KEY_TRANS_ENCRYPT_FREE_OBJID_FLAG: DWORD = 0x00000002;
+pub const CMSG_OID_EXPORT_KEY_TRANS_FUNC: &'static str = "CryptMsgDllExportKeyTrans";
+pub const CMSG_OID_CAPI1_EXPORT_KEY_TRANS_FUNC: &'static str = CMSG_OID_EXPORT_KEY_TRANS_FUNC;
+FN!{stdcall PFN_CMSG_EXPORT_KEY_TRANS(
+ pContentEncryptInfo: PCMSG_CONTENT_ENCRYPT_INFO,
+ pKeyTransEncodeInfo: PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO,
+ pKeyTransEncryptInfo: PCMSG_KEY_TRANS_ENCRYPT_INFO,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+) -> BOOL}
+pub const CMSG_OID_CNG_EXPORT_KEY_TRANS_FUNC: &'static str = "CryptMsgDllCNGExportKeyTrans";
+STRUCT!{struct CMSG_KEY_AGREE_KEY_ENCRYPT_INFO {
+ cbSize: DWORD,
+ EncryptedKey: CRYPT_DATA_BLOB,
+}}
+pub type PCMSG_KEY_AGREE_KEY_ENCRYPT_INFO = *mut CMSG_KEY_AGREE_KEY_ENCRYPT_INFO;
+UNION!{union CMSG_KEY_AGREE_ENCRYPT_INFO_u {
+ [usize; 6],
+ OriginatorCertId OriginatorCertId_mut: CERT_ID,
+ OriginatorPublicKeyInfo OriginatorPublicKeyInfo_mut: CERT_PUBLIC_KEY_INFO,
+}}
+STRUCT!{struct CMSG_KEY_AGREE_ENCRYPT_INFO {
+ cbSize: DWORD,
+ dwRecipientIndex: DWORD,
+ KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ UserKeyingMaterial: CRYPT_DATA_BLOB,
+ dwOriginatorChoice: DWORD,
+ u: CMSG_KEY_AGREE_ENCRYPT_INFO_u,
+ cKeyAgreeKeyEncryptInfo: DWORD,
+ rgpKeyAgreeKeyEncryptInfo: *mut PCMSG_KEY_AGREE_KEY_ENCRYPT_INFO,
+ dwFlags: DWORD,
+}}
+pub type PCMSG_KEY_AGREE_ENCRYPT_INFO = *mut CMSG_KEY_AGREE_ENCRYPT_INFO;
+pub const CMSG_KEY_AGREE_ENCRYPT_FREE_PARA_FLAG: DWORD = 0x00000001;
+pub const CMSG_KEY_AGREE_ENCRYPT_FREE_MATERIAL_FLAG: DWORD = 0x00000002;
+pub const CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_ALG_FLAG: DWORD = 0x00000004;
+pub const CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_PARA_FLAG: DWORD = 0x00000008;
+pub const CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_BITS_FLAG: DWORD = 0x00000010;
+pub const CMSG_KEY_AGREE_ENCRYPT_FREE_OBJID_FLAG: DWORD = 0x00000020;
+pub const CMSG_OID_EXPORT_KEY_AGREE_FUNC: &'static str = "CryptMsgDllExportKeyAgree";
+pub const CMSG_OID_CAPI1_EXPORT_KEY_AGREE_FUNC: &'static str = CMSG_OID_EXPORT_KEY_AGREE_FUNC;
+FN!{stdcall PFN_CMSG_EXPORT_KEY_AGREE(
+ pContentEncryptInfo: PCMSG_CONTENT_ENCRYPT_INFO,
+ pKeyAgreeEncodeInfo: PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO,
+ pKeyAgreeEncryptInfo: PCMSG_KEY_AGREE_ENCRYPT_INFO,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+) -> BOOL}
+pub const CMSG_OID_CNG_EXPORT_KEY_AGREE_FUNC: &'static str = "CryptMsgDllCNGExportKeyAgree";
+STRUCT!{struct CMSG_MAIL_LIST_ENCRYPT_INFO {
+ cbSize: DWORD,
+ dwRecipientIndex: DWORD,
+ KeyEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ EncryptedKey: CRYPT_DATA_BLOB,
+ dwFlags: DWORD,
+}}
+pub type PCMSG_MAIL_LIST_ENCRYPT_INFO = *mut CMSG_MAIL_LIST_ENCRYPT_INFO;
+pub const CMSG_MAIL_LIST_ENCRYPT_FREE_PARA_FLAG: DWORD = 0x00000001;
+pub const CMSG_MAIL_LIST_ENCRYPT_FREE_OBJID_FLAG: DWORD = 0x00000002;
+pub const CMSG_OID_EXPORT_MAIL_LIST_FUNC: &'static str = "CryptMsgDllExportMailList";
+pub const CMSG_OID_CAPI1_EXPORT_MAIL_LIST_FUNC: &'static str = CMSG_OID_EXPORT_MAIL_LIST_FUNC;
+FN!{stdcall PFN_CMSG_EXPORT_MAIL_LIST(
+ pContentEncryptInfo: PCMSG_CONTENT_ENCRYPT_INFO,
+ pMailListEncodeInfo: PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO,
+ pMailListEncryptInfo: PCMSG_MAIL_LIST_ENCRYPT_INFO,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+) -> BOOL}
+pub const CMSG_OID_IMPORT_KEY_TRANS_FUNC: &'static str = "CryptMsgDllImportKeyTrans";
+pub const CMSG_OID_CAPI1_IMPORT_KEY_TRANS_FUNC: &'static str = CMSG_OID_IMPORT_KEY_TRANS_FUNC;
+FN!{stdcall PFN_CMSG_IMPORT_KEY_TRANS(
+ pContentEncryptionAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
+ pKeyTransDecryptPara: PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+ phContentEncryptKey: *mut HCRYPTKEY,
+) -> BOOL}
+pub const CMSG_OID_IMPORT_KEY_AGREE_FUNC: &'static str = "CryptMsgDllImportKeyAgree";
+pub const CMSG_OID_CAPI1_IMPORT_KEY_AGREE_FUNC: &'static str = CMSG_OID_IMPORT_KEY_AGREE_FUNC;
+FN!{stdcall PFN_CMSG_IMPORT_KEY_AGREE(
+ pContentEncryptionAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
+ pKeyAgreeDecryptPara: PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+ phContentEncryptKey: *mut HCRYPTKEY,
+) -> BOOL}
+pub const CMSG_OID_IMPORT_MAIL_LIST_FUNC: &'static str = "CryptMsgDllImportMailList";
+pub const CMSG_OID_CAPI1_IMPORT_MAIL_LIST_FUNC: &'static str = CMSG_OID_IMPORT_MAIL_LIST_FUNC;
+FN!{stdcall PFN_CMSG_IMPORT_MAIL_LIST(
+ pContentEncryptionAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
+ pMailListDecryptPara: PCMSG_CTRL_MAIL_LIST_DECRYPT_PARA,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+ phContentEncryptKey: *mut HCRYPTKEY,
+) -> BOOL}
+STRUCT!{struct CMSG_CNG_CONTENT_DECRYPT_INFO {
+ cbSize: DWORD,
+ ContentEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ pfnAlloc: PFN_CMSG_ALLOC,
+ pfnFree: PFN_CMSG_FREE,
+ hNCryptKey: NCRYPT_KEY_HANDLE,
+ pbContentEncryptKey: *mut BYTE,
+ cbContentEncryptKey: DWORD,
+ hCNGContentEncryptKey: BCRYPT_KEY_HANDLE,
+ pbCNGContentEncryptKeyObject: *mut BYTE,
+}}
+pub type PCMSG_CNG_CONTENT_DECRYPT_INFO = *mut CMSG_CNG_CONTENT_DECRYPT_INFO;
+pub const CMSG_OID_CNG_IMPORT_KEY_TRANS_FUNC: &'static str = "CryptMsgDllCNGImportKeyTrans";
+FN!{stdcall PFN_CMSG_CNG_IMPORT_KEY_TRANS(
+ pCNGContentDecryptInfo: PCMSG_CNG_CONTENT_DECRYPT_INFO,
+ pKeyTransDecryptPara: PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+) -> BOOL}
+pub const CMSG_OID_CNG_IMPORT_KEY_AGREE_FUNC: &'static str = "CryptMsgDllCNGImportKeyAgree";
+FN!{stdcall PFN_CMSG_CNG_IMPORT_KEY_AGREE(
+ pCNGContentDecryptInfo: PCMSG_CNG_CONTENT_DECRYPT_INFO,
+ pKeyAgreeDecryptPara: PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+) -> BOOL}
+pub const CMSG_OID_CNG_IMPORT_CONTENT_ENCRYPT_KEY_FUNC: &'static str
+ = "CryptMsgDllCNGImportContentEncryptKey";
+FN!{stdcall PFN_CMSG_CNG_IMPORT_CONTENT_ENCRYPT_KEY(
+ pCNGContentDecryptInfo: PCMSG_CNG_CONTENT_DECRYPT_INFO,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+) -> BOOL}
+pub type HCERTSTORE = *mut c_void;
+STRUCT!{struct CERT_CONTEXT {
+ dwCertEncodingType: DWORD,
+ pbCertEncoded: *mut BYTE,
+ cbCertEncoded: DWORD,
+ pCertInfo: PCERT_INFO,
+ hCertStore: HCERTSTORE,
+}}
+pub type PCERT_CONTEXT = *mut CERT_CONTEXT;
+pub type PCCERT_CONTEXT = *const CERT_CONTEXT;
+STRUCT!{struct CRL_CONTEXT {
+ dwCertEncodingType: DWORD,
+ pbCrlEncoded: *mut BYTE,
+ cbCrlEncoded: DWORD,
+ pCrlInfo: PCRL_INFO,
+ hCertStore: HCERTSTORE,
+}}
+pub type PCRL_CONTEXT = *mut CRL_CONTEXT;
+pub type PCCRL_CONTEXT = *const CRL_CONTEXT;
+STRUCT!{struct CTL_CONTEXT {
+ dwMsgAndCertEncodingType: DWORD,
+ pbCtlEncoded: *mut BYTE,
+ cbCtlEncoded: DWORD,
+ pCtlInfo: PCTL_INFO,
+ hCertStore: HCERTSTORE,
+ hCryptMsg: HCRYPTMSG,
+ pbCtlContent: *mut BYTE,
+ cbCtlContent: DWORD,
+}}
+pub type PCTL_CONTEXT = *mut CTL_CONTEXT;
+pub type PCCTL_CONTEXT = *const CTL_CONTEXT;
+pub const CERT_KEY_PROV_HANDLE_PROP_ID: DWORD = 1;
+pub const CERT_KEY_PROV_INFO_PROP_ID: DWORD = 2;
+pub const CERT_SHA1_HASH_PROP_ID: DWORD = 3;
+pub const CERT_MD5_HASH_PROP_ID: DWORD = 4;
+pub const CERT_HASH_PROP_ID: DWORD = CERT_SHA1_HASH_PROP_ID;
+pub const CERT_KEY_CONTEXT_PROP_ID: DWORD = 5;
+pub const CERT_KEY_SPEC_PROP_ID: DWORD = 6;
+pub const CERT_IE30_RESERVED_PROP_ID: DWORD = 7;
+pub const CERT_PUBKEY_HASH_RESERVED_PROP_ID: DWORD = 8;
+pub const CERT_ENHKEY_USAGE_PROP_ID: DWORD = 9;
+pub const CERT_CTL_USAGE_PROP_ID: DWORD = CERT_ENHKEY_USAGE_PROP_ID;
+pub const CERT_NEXT_UPDATE_LOCATION_PROP_ID: DWORD = 10;
+pub const CERT_FRIENDLY_NAME_PROP_ID: DWORD = 11;
+pub const CERT_PVK_FILE_PROP_ID: DWORD = 12;
+pub const CERT_DESCRIPTION_PROP_ID: DWORD = 13;
+pub const CERT_ACCESS_STATE_PROP_ID: DWORD = 14;
+pub const CERT_SIGNATURE_HASH_PROP_ID: DWORD = 15;
+pub const CERT_SMART_CARD_DATA_PROP_ID: DWORD = 16;
+pub const CERT_EFS_PROP_ID: DWORD = 17;
+pub const CERT_FORTEZZA_DATA_PROP_ID: DWORD = 18;
+pub const CERT_ARCHIVED_PROP_ID: DWORD = 19;
+pub const CERT_KEY_IDENTIFIER_PROP_ID: DWORD = 20;
+pub const CERT_AUTO_ENROLL_PROP_ID: DWORD = 21;
+pub const CERT_PUBKEY_ALG_PARA_PROP_ID: DWORD = 22;
+pub const CERT_CROSS_CERT_DIST_POINTS_PROP_ID: DWORD = 23;
+pub const CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID: DWORD = 24;
+pub const CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID: DWORD = 25;
+pub const CERT_ENROLLMENT_PROP_ID: DWORD = 26;
+pub const CERT_DATE_STAMP_PROP_ID: DWORD = 27;
+pub const CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID: DWORD = 28;
+pub const CERT_SUBJECT_NAME_MD5_HASH_PROP_ID: DWORD = 29;
+pub const CERT_EXTENDED_ERROR_INFO_PROP_ID: DWORD = 30;
+pub const CERT_RENEWAL_PROP_ID: DWORD = 64;
+pub const CERT_ARCHIVED_KEY_HASH_PROP_ID: DWORD = 65;
+pub const CERT_AUTO_ENROLL_RETRY_PROP_ID: DWORD = 66;
+pub const CERT_AIA_URL_RETRIEVED_PROP_ID: DWORD = 67;
+pub const CERT_AUTHORITY_INFO_ACCESS_PROP_ID: DWORD = 68;
+pub const CERT_BACKED_UP_PROP_ID: DWORD = 69;
+pub const CERT_OCSP_RESPONSE_PROP_ID: DWORD = 70;
+pub const CERT_REQUEST_ORIGINATOR_PROP_ID: DWORD = 71;
+pub const CERT_SOURCE_LOCATION_PROP_ID: DWORD = 72;
+pub const CERT_SOURCE_URL_PROP_ID: DWORD = 73;
+pub const CERT_NEW_KEY_PROP_ID: DWORD = 74;
+pub const CERT_OCSP_CACHE_PREFIX_PROP_ID: DWORD = 75;
+pub const CERT_SMART_CARD_ROOT_INFO_PROP_ID: DWORD = 76;
+pub const CERT_NO_AUTO_EXPIRE_CHECK_PROP_ID: DWORD = 77;
+pub const CERT_NCRYPT_KEY_HANDLE_PROP_ID: DWORD = 78;
+pub const CERT_HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_PROP_ID: DWORD = 79;
+pub const CERT_SUBJECT_INFO_ACCESS_PROP_ID: DWORD = 80;
+pub const CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID: DWORD = 81;
+pub const CERT_CA_DISABLE_CRL_PROP_ID: DWORD = 82;
+pub const CERT_ROOT_PROGRAM_CERT_POLICIES_PROP_ID: DWORD = 83;
+pub const CERT_ROOT_PROGRAM_NAME_CONSTRAINTS_PROP_ID: DWORD = 84;
+pub const CERT_SUBJECT_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID: DWORD = 85;
+pub const CERT_SUBJECT_DISABLE_CRL_PROP_ID: DWORD = 86;
+pub const CERT_CEP_PROP_ID: DWORD = 87;
+pub const CERT_SIGN_HASH_CNG_ALG_PROP_ID: DWORD = 89;
+pub const CERT_SCARD_PIN_ID_PROP_ID: DWORD = 90;
+pub const CERT_SCARD_PIN_INFO_PROP_ID: DWORD = 91;
+pub const CERT_SUBJECT_PUB_KEY_BIT_LENGTH_PROP_ID: DWORD = 92;
+pub const CERT_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID: DWORD = 93;
+pub const CERT_ISSUER_PUB_KEY_BIT_LENGTH_PROP_ID: DWORD = 94;
+pub const CERT_ISSUER_CHAIN_SIGN_HASH_CNG_ALG_PROP_ID: DWORD = 95;
+pub const CERT_ISSUER_CHAIN_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID: DWORD = 96;
+pub const CERT_NO_EXPIRE_NOTIFICATION_PROP_ID: DWORD = 97;
+pub const CERT_AUTH_ROOT_SHA256_HASH_PROP_ID: DWORD = 98;
+pub const CERT_NCRYPT_KEY_HANDLE_TRANSFER_PROP_ID: DWORD = 99;
+pub const CERT_HCRYPTPROV_TRANSFER_PROP_ID: DWORD = 100;
+pub const CERT_SMART_CARD_READER_PROP_ID: DWORD = 101;
+pub const CERT_SEND_AS_TRUSTED_ISSUER_PROP_ID: DWORD = 102;
+pub const CERT_KEY_REPAIR_ATTEMPTED_PROP_ID: DWORD = 103;
+pub const CERT_DISALLOWED_FILETIME_PROP_ID: DWORD = 104;
+pub const CERT_ROOT_PROGRAM_CHAIN_POLICIES_PROP_ID: DWORD = 105;
+pub const CERT_SMART_CARD_READER_NON_REMOVABLE_PROP_ID: DWORD = 106;
+pub const CERT_SHA256_HASH_PROP_ID: DWORD = 107;
+pub const CERT_SCEP_SERVER_CERTS_PROP_ID: DWORD = 108;
+pub const CERT_SCEP_RA_SIGNATURE_CERT_PROP_ID: DWORD = 109;
+pub const CERT_SCEP_RA_ENCRYPTION_CERT_PROP_ID: DWORD = 110;
+pub const CERT_SCEP_CA_CERT_PROP_ID: DWORD = 111;
+pub const CERT_SCEP_SIGNER_CERT_PROP_ID: DWORD = 112;
+pub const CERT_SCEP_NONCE_PROP_ID: DWORD = 113;
+pub const CERT_SCEP_ENCRYPT_HASH_CNG_ALG_PROP_ID: DWORD = 114;
+pub const CERT_SCEP_FLAGS_PROP_ID: DWORD = 115;
+pub const CERT_SCEP_GUID_PROP_ID: DWORD = 116;
+pub const CERT_SERIALIZABLE_KEY_CONTEXT_PROP_ID: DWORD = 117;
+pub const CERT_ISOLATED_KEY_PROP_ID: DWORD = 118;
+pub const CERT_SERIAL_CHAIN_PROP_ID: DWORD = 119;
+pub const CERT_KEY_CLASSIFICATION_PROP_ID: DWORD = 120;
+pub const CERT_OCSP_MUST_STAPLE_PROP_ID: DWORD = 121;
+pub const CERT_DISALLOWED_ENHKEY_USAGE_PROP_ID: DWORD = 122;
+pub const CERT_NONCOMPLIANT_ROOT_URL_PROP_ID: DWORD = 123;
+pub const CERT_PIN_SHA256_HASH_PROP_ID: DWORD = 124;
+pub const CERT_CLR_DELETE_KEY_PROP_ID: DWORD = 125;
+pub const CERT_NOT_BEFORE_FILETIME_PROP_ID: DWORD = 126;
+pub const CERT_NOT_BEFORE_ENHKEY_USAGE_PROP_ID: DWORD = 127;
+pub const CERT_FIRST_RESERVED_PROP_ID: DWORD = 128;
+pub const CERT_LAST_RESERVED_PROP_ID: DWORD = 0x00007FFF;
+pub const CERT_FIRST_USER_PROP_ID: DWORD = 0x00008000;
+pub const CERT_LAST_USER_PROP_ID: DWORD = 0x0000FFFF;
+ENUM!{enum CertKeyType {
+ KeyTypeOther = 0,
+ KeyTypeVirtualSmartCard = 1,
+ KeyTypePhysicalSmartCard = 2,
+ KeyTypePassport = 3,
+ KeyTypePassportRemote = 4,
+ KeyTypePassportSmartCard = 5,
+ KeyTypeHardware = 6,
+ KeyTypeSoftware = 7,
+ KeyTypeSelfSigned = 8,
+}}
+#[inline]
+pub fn IS_CERT_HASH_PROP_ID(X: DWORD) -> bool {
+ CERT_SHA1_HASH_PROP_ID == X || CERT_MD5_HASH_PROP_ID == X || CERT_SHA256_HASH_PROP_ID == X
+ || CERT_SIGNATURE_HASH_PROP_ID == X
+}
+#[inline]
+pub fn IS_PUBKEY_HASH_PROP_ID(X: DWORD) -> bool {
+ CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID == X || CERT_PIN_SHA256_HASH_PROP_ID == X
+ || CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID == X
+}
+#[inline]
+pub fn IS_CHAIN_HASH_PROP_ID(X: DWORD) -> bool {
+ CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID == X || CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID == X
+ || CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID == X || CERT_SUBJECT_NAME_MD5_HASH_PROP_ID == X
+}
+#[inline]
+pub fn IS_STRONG_SIGN_PROP_ID(X: DWORD) -> bool {
+ CERT_SIGN_HASH_CNG_ALG_PROP_ID == X || CERT_SUBJECT_PUB_KEY_BIT_LENGTH_PROP_ID == X
+ || CERT_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID == X
+}
+pub const szOID_CERT_PROP_ID_PREFIX: &'static str = "1.3.6.1.4.1.311.10.11.";
+pub const szOID_CERT_KEY_IDENTIFIER_PROP_ID: &'static str = "1.3.6.1.4.1.311.10.11.20";
+pub const szOID_CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID: &'static str
+ = "1.3.6.1.4.1.311.10.11.28";
+pub const szOID_CERT_SUBJECT_NAME_MD5_HASH_PROP_ID: &'static str = "1.3.6.1.4.1.311.10.11.29";
+pub const szOID_CERT_MD5_HASH_PROP_ID: &'static str = "1.3.6.1.4.1.311.10.11.4";
+pub const szOID_CERT_SIGNATURE_HASH_PROP_ID: &'static str = "1.3.6.1.4.1.311.10.11.15";
+pub const szOID_DISALLOWED_HASH: &'static str = szOID_CERT_SIGNATURE_HASH_PROP_ID;
+pub const szOID_CERT_DISALLOWED_FILETIME_PROP_ID: &'static str = "1.3.6.1.4.1.311.10.11.104";
+pub const CERT_ACCESS_STATE_WRITE_PERSIST_FLAG: DWORD = 0x1;
+pub const CERT_ACCESS_STATE_SYSTEM_STORE_FLAG: DWORD = 0x2;
+pub const CERT_ACCESS_STATE_LM_SYSTEM_STORE_FLAG: DWORD = 0x4;
+pub const CERT_ACCESS_STATE_GP_SYSTEM_STORE_FLAG: DWORD = 0x8;
+pub const CERT_ACCESS_STATE_SHARED_USER_FLAG: DWORD = 0x10;
+pub const szOID_ROOT_PROGRAM_AUTO_UPDATE_CA_REVOCATION: &'static str = "1.3.6.1.4.1.311.60.3.1";
+pub const szOID_ROOT_PROGRAM_AUTO_UPDATE_END_REVOCATION: &'static str = "1.3.6.1.4.1.311.60.3.2";
+pub const szOID_ROOT_PROGRAM_NO_OCSP_FAILOVER_TO_CRL: &'static str = "1.3.6.1.4.1.311.60.3.3";
+STRUCT!{struct CRYPT_KEY_PROV_PARAM {
+ dwParam: DWORD,
+ pbData: *mut BYTE,
+ cbData: DWORD,
+ dwFlags: DWORD,
+}}
+pub type PCRYPT_KEY_PROV_PARAM = *mut CRYPT_KEY_PROV_PARAM;
+STRUCT!{struct CRYPT_KEY_PROV_INFO {
+ pwszContainerName: LPWSTR,
+ pwszProvName: LPWSTR,
+ dwProvType: DWORD,
+ dwFlags: DWORD,
+ cProvParam: DWORD,
+ rgProvParam: PCRYPT_KEY_PROV_PARAM,
+ dwKeySpec: DWORD,
+}}
+pub type PCRYPT_KEY_PROV_INFO = *mut CRYPT_KEY_PROV_INFO;
+pub const CERT_SET_KEY_PROV_HANDLE_PROP_ID: DWORD = 0x00000001;
+pub const CERT_SET_KEY_CONTEXT_PROP_ID: DWORD = 0x00000001;
+pub const CERT_NCRYPT_KEY_SPEC: DWORD = 0xFFFFFFFF;
+UNION!{union CERT_KEY_CONTEXT_u {
+ [usize; 1],
+ hCryptProv hCryptProv_mut: HCRYPTPROV,
+ hNCryptKey hNCryptKey_mut: NCRYPT_KEY_HANDLE,
+}}
+STRUCT!{struct CERT_KEY_CONTEXT {
+ cbSize: DWORD,
+ u: CERT_KEY_CONTEXT_u,
+ dwKeySpec: DWORD,
+}}
+pub type PCERT_KEY_CONTEXT = *mut CERT_KEY_CONTEXT;
+STRUCT!{struct ROOT_INFO_LUID {
+ LowPart: DWORD,
+ HighPart: LONG,
+}}
+pub type PROOT_INFO_LUID = *mut ROOT_INFO_LUID;
+STRUCT!{struct CRYPT_SMART_CARD_ROOT_INFO {
+ rgbCardID: [BYTE; 16],
+ luid: ROOT_INFO_LUID,
+}}
+pub type PCRYPT_SMART_CARD_ROOT_INFO = *mut CRYPT_SMART_CARD_ROOT_INFO;
+pub const CERT_STORE_PROV_MSG: LPCSTR = 1 as LPCSTR;
+pub const CERT_STORE_PROV_MEMORY: LPCSTR = 2 as LPCSTR;
+pub const CERT_STORE_PROV_FILE: LPCSTR = 3 as LPCSTR;
+pub const CERT_STORE_PROV_REG: LPCSTR = 4 as LPCSTR;
+pub const CERT_STORE_PROV_PKCS7: LPCSTR = 5 as LPCSTR;
+pub const CERT_STORE_PROV_SERIALIZED: LPCSTR = 6 as LPCSTR;
+pub const CERT_STORE_PROV_FILENAME_A: LPCSTR = 7 as LPCSTR;
+pub const CERT_STORE_PROV_FILENAME_W: LPCSTR = 8 as LPCSTR;
+pub const CERT_STORE_PROV_FILENAME: LPCSTR = CERT_STORE_PROV_FILENAME_W;
+pub const CERT_STORE_PROV_SYSTEM_A: LPCSTR = 9 as LPCSTR;
+pub const CERT_STORE_PROV_SYSTEM_W: LPCSTR = 10 as LPCSTR;
+pub const CERT_STORE_PROV_SYSTEM: LPCSTR = CERT_STORE_PROV_SYSTEM_W;
+pub const CERT_STORE_PROV_COLLECTION: LPCSTR = 11 as LPCSTR;
+pub const CERT_STORE_PROV_SYSTEM_REGISTRY_A: LPCSTR = 12 as LPCSTR;
+pub const CERT_STORE_PROV_SYSTEM_REGISTRY_W: LPCSTR = 13 as LPCSTR;
+pub const CERT_STORE_PROV_SYSTEM_REGISTRY: LPCSTR = CERT_STORE_PROV_SYSTEM_REGISTRY_W;
+pub const CERT_STORE_PROV_PHYSICAL_W: LPCSTR = 14 as LPCSTR;
+pub const CERT_STORE_PROV_PHYSICAL: LPCSTR = CERT_STORE_PROV_PHYSICAL_W;
+pub const CERT_STORE_PROV_SMART_CARD_W: LPCSTR = 15 as LPCSTR;
+pub const CERT_STORE_PROV_SMART_CARD: LPCSTR = CERT_STORE_PROV_SMART_CARD_W;
+pub const CERT_STORE_PROV_LDAP_W: LPCSTR = 16 as LPCSTR;
+pub const CERT_STORE_PROV_LDAP: LPCSTR = CERT_STORE_PROV_LDAP_W;
+pub const CERT_STORE_PROV_PKCS12: LPCSTR = 17 as LPCSTR;
+pub const sz_CERT_STORE_PROV_MEMORY: &'static str = "Memory";
+pub const sz_CERT_STORE_PROV_FILENAME_W: &'static str = "File";
+pub const sz_CERT_STORE_PROV_FILENAME: &'static str = sz_CERT_STORE_PROV_FILENAME_W;
+pub const sz_CERT_STORE_PROV_SYSTEM_W: &'static str = "System";
+pub const sz_CERT_STORE_PROV_SYSTEM: &'static str = sz_CERT_STORE_PROV_SYSTEM_W;
+pub const sz_CERT_STORE_PROV_PKCS7: &'static str = "PKCS7";
+pub const sz_CERT_STORE_PROV_PKCS12: &'static str = "PKCS12";
+pub const sz_CERT_STORE_PROV_SERIALIZED: &'static str = "Serialized";
+pub const sz_CERT_STORE_PROV_COLLECTION: &'static str = "Collection";
+pub const sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W: &'static str = "SystemRegistry";
+pub const sz_CERT_STORE_PROV_SYSTEM_REGISTRY: &'static str = sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W;
+pub const sz_CERT_STORE_PROV_PHYSICAL_W: &'static str = "Physical";
+pub const sz_CERT_STORE_PROV_PHYSICAL: &'static str = sz_CERT_STORE_PROV_PHYSICAL_W;
+pub const sz_CERT_STORE_PROV_SMART_CARD_W: &'static str = "SmartCard";
+pub const sz_CERT_STORE_PROV_SMART_CARD: &'static str = sz_CERT_STORE_PROV_SMART_CARD_W;
+pub const sz_CERT_STORE_PROV_LDAP_W: &'static str = "Ldap";
+pub const sz_CERT_STORE_PROV_LDAP: &'static str = sz_CERT_STORE_PROV_LDAP_W;
+pub const CERT_STORE_SIGNATURE_FLAG: DWORD = 0x00000001;
+pub const CERT_STORE_TIME_VALIDITY_FLAG: DWORD = 0x00000002;
+pub const CERT_STORE_REVOCATION_FLAG: DWORD = 0x00000004;
+pub const CERT_STORE_NO_CRL_FLAG: DWORD = 0x00010000;
+pub const CERT_STORE_NO_ISSUER_FLAG: DWORD = 0x00020000;
+pub const CERT_STORE_BASE_CRL_FLAG: DWORD = 0x00000100;
+pub const CERT_STORE_DELTA_CRL_FLAG: DWORD = 0x00000200;
+pub const CERT_STORE_NO_CRYPT_RELEASE_FLAG: DWORD = 0x00000001;
+pub const CERT_STORE_SET_LOCALIZED_NAME_FLAG: DWORD = 0x00000002;
+pub const CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG: DWORD = 0x00000004;
+pub const CERT_STORE_DELETE_FLAG: DWORD = 0x00000010;
+pub const CERT_STORE_SHARE_STORE_FLAG: DWORD = 0x00000040;
+pub const CERT_STORE_SHARE_CONTEXT_FLAG: DWORD = 0x00000080;
+pub const CERT_STORE_MANIFOLD_FLAG: DWORD = 0x00000100;
+pub const CERT_STORE_ENUM_ARCHIVED_FLAG: DWORD = 0x00000200;
+pub const CERT_STORE_UPDATE_KEYID_FLAG: DWORD = 0x00000400;
+pub const CERT_STORE_BACKUP_RESTORE_FLAG: DWORD = 0x00000800;
+pub const CERT_STORE_READONLY_FLAG: DWORD = 0x00008000;
+pub const CERT_STORE_OPEN_EXISTING_FLAG: DWORD = 0x00004000;
+pub const CERT_STORE_CREATE_NEW_FLAG: DWORD = 0x00002000;
+pub const CERT_STORE_MAXIMUM_ALLOWED_FLAG: DWORD = 0x00001000;
+pub const CERT_SYSTEM_STORE_MASK: DWORD = 0xFFFF0000;
+pub const CERT_SYSTEM_STORE_RELOCATE_FLAG: DWORD = 0x80000000;
+UNION!{union CERT_SYSTEM_STORE_RELOCATE_PARA_u1 {
+ [usize; 1],
+ hKeyBase hKeyBase_mut: HKEY,
+ pvBase pvBase_mut: *mut c_void,
+}}
+UNION!{union CERT_SYSTEM_STORE_RELOCATE_PARA_u2 {
+ [usize; 1],
+ pvSystemStore pvSystemStore__mut: *mut c_void,
+ pszSystemStore pszSystemStore_mut: LPCSTR,
+ pwszSystemStore pwszSystemStore_mut: LPCWSTR,
+}}
+STRUCT!{struct CERT_SYSTEM_STORE_RELOCATE_PARA {
+ u1: CERT_SYSTEM_STORE_RELOCATE_PARA_u1,
+ u2: CERT_SYSTEM_STORE_RELOCATE_PARA_u2,
+}}
+pub type PCERT_SYSTEM_STORE_RELOCATE_PARA = *mut CERT_SYSTEM_STORE_RELOCATE_PARA;
+pub const CERT_SYSTEM_STORE_UNPROTECTED_FLAG: DWORD = 0x40000000;
+pub const CERT_SYSTEM_STORE_LOCATION_MASK: DWORD = 0x00FF0000;
+pub const CERT_SYSTEM_STORE_LOCATION_SHIFT: DWORD = 16;
+pub const CERT_SYSTEM_STORE_CURRENT_USER_ID: DWORD = 1;
+pub const CERT_SYSTEM_STORE_LOCAL_MACHINE_ID: DWORD = 2;
+pub const CERT_SYSTEM_STORE_CURRENT_SERVICE_ID: DWORD = 4;
+pub const CERT_SYSTEM_STORE_SERVICES_ID: DWORD = 5;
+pub const CERT_SYSTEM_STORE_USERS_ID: DWORD = 6;
+pub const CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID: DWORD = 7;
+pub const CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID: DWORD = 8;
+pub const CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID: DWORD = 9;
+pub const CERT_SYSTEM_STORE_CURRENT_USER: DWORD = CERT_SYSTEM_STORE_CURRENT_USER_ID
+ << CERT_SYSTEM_STORE_LOCATION_SHIFT;
+pub const CERT_SYSTEM_STORE_LOCAL_MACHINE: DWORD = CERT_SYSTEM_STORE_LOCAL_MACHINE_ID
+ << CERT_SYSTEM_STORE_LOCATION_SHIFT;
+pub const CERT_SYSTEM_STORE_CURRENT_SERVICE: DWORD = CERT_SYSTEM_STORE_CURRENT_SERVICE_ID
+ << CERT_SYSTEM_STORE_LOCATION_SHIFT;
+pub const CERT_SYSTEM_STORE_SERVICES: DWORD = CERT_SYSTEM_STORE_SERVICES_ID
+ << CERT_SYSTEM_STORE_LOCATION_SHIFT;
+pub const CERT_SYSTEM_STORE_USERS: DWORD = CERT_SYSTEM_STORE_USERS_ID
+ << CERT_SYSTEM_STORE_LOCATION_SHIFT;
+pub const CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY: DWORD
+ = CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT;
+pub const CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY: DWORD
+ = CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT;
+pub const CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE: DWORD
+ = CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT;
+pub const CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH: &'static str
+ = "Software\\Policies\\Microsoft\\SystemCertificates";
+pub const CERT_EFSBLOB_REGPATH: &'static str
+ = "Software\\Policies\\Microsoft\\SystemCertificates\\EFS";
+pub const CERT_EFSBLOB_VALUE_NAME: &'static str = "EFSBlob";
+pub const CERT_PROT_ROOT_FLAGS_REGPATH: &'static str
+ = "Software\\Policies\\Microsoft\\SystemCertificates\\Root\\ProtectedRoots";
+pub const CERT_PROT_ROOT_FLAGS_VALUE_NAME: &'static str = "Flags";
+pub const CERT_PROT_ROOT_DISABLE_CURRENT_USER_FLAG: DWORD = 0x1;
+pub const CERT_PROT_ROOT_INHIBIT_ADD_AT_INIT_FLAG: DWORD = 0x2;
+pub const CERT_PROT_ROOT_INHIBIT_PURGE_LM_FLAG: DWORD = 0x4;
+pub const CERT_PROT_ROOT_DISABLE_LM_AUTH_FLAG: DWORD = 0x8;
+pub const CERT_PROT_ROOT_ONLY_LM_GPT_FLAG: DWORD = 0x8;
+pub const CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG: DWORD = 0x10;
+pub const CERT_PROT_ROOT_DISABLE_NOT_DEFINED_NAME_CONSTRAINT_FLAG: DWORD = 0x20;
+pub const CERT_PROT_ROOT_DISABLE_PEER_TRUST: DWORD = 0x10000;
+pub const CERT_PROT_ROOT_PEER_USAGES_VALUE_NAME: &'static str = "PeerUsages";
+pub const CERT_PROT_ROOT_PEER_USAGES_VALUE_NAME_A: &'static str = "PeerUsages";
+pub const CERT_PROT_ROOT_PEER_USAGES_DEFAULT_A: &'static str
+ = "1.3.6.1.5.5.7.3.2\01.3.6.1.5.5.7.3.4\01.3.6.1.4.1.311.10.3.4\0";
+pub const CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH: &'static str
+ = "Software\\Policies\\Microsoft\\SystemCertificates\\TrustedPublisher\\Safer";
+pub const CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH: &'static str
+ = "Software\\Microsoft\\SystemCertificates";
+pub const CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH: &'static str
+ = "Software\\Microsoft\\SystemCertificates\\TrustedPublisher\\Safer";
+pub const CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME: &'static str = "AuthenticodeFlags";
+pub const CERT_TRUST_PUB_ALLOW_TRUST_MASK: DWORD = 0x00000003;
+pub const CERT_TRUST_PUB_ALLOW_END_USER_TRUST: DWORD = 0x00000000;
+pub const CERT_TRUST_PUB_ALLOW_MACHINE_ADMIN_TRUST: DWORD = 0x00000001;
+pub const CERT_TRUST_PUB_ALLOW_ENTERPRISE_ADMIN_TRUST: DWORD = 0x00000002;
+pub const CERT_TRUST_PUB_CHECK_PUBLISHER_REV_FLAG: DWORD = 0x00000100;
+pub const CERT_TRUST_PUB_CHECK_TIMESTAMP_REV_FLAG: DWORD = 0x00000200;
+pub const CERT_OCM_SUBCOMPONENTS_LOCAL_MACHINE_REGPATH: &'static str
+ = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup\\OC Manager\\Subcomponents";
+pub const CERT_OCM_SUBCOMPONENTS_ROOT_AUTO_UPDATE_VALUE_NAME: &'static str = "RootAutoUpdate";
+pub const CERT_DISABLE_ROOT_AUTO_UPDATE_REGPATH: &'static str
+ = "Software\\Policies\\Microsoft\\SystemCertificates\\AuthRoot";
+pub const CERT_DISABLE_ROOT_AUTO_UPDATE_VALUE_NAME: &'static str = "DisableRootAutoUpdate";
+pub const CERT_ENABLE_DISALLOWED_CERT_AUTO_UPDATE_VALUE_NAME: &'static str
+ = "EnableDisallowedCertAutoUpdate";
+pub const CERT_DISABLE_PIN_RULES_AUTO_UPDATE_VALUE_NAME: &'static str
+ = "DisablePinRulesAutoUpdate";
+pub const CERT_AUTO_UPDATE_LOCAL_MACHINE_REGPATH: &'static str
+ = "Software\\Microsoft\\SystemCertificates\\AuthRoot\\AutoUpdate";
+pub const CERT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME: &'static str = "RootDirUrl";
+pub const CERT_AUTO_UPDATE_SYNC_FROM_DIR_URL_VALUE_NAME: &'static str = "SyncFromDirUrl";
+pub const CERT_AUTH_ROOT_AUTO_UPDATE_LOCAL_MACHINE_REGPATH: &'static str
+ = CERT_AUTO_UPDATE_LOCAL_MACHINE_REGPATH;
+pub const CERT_AUTH_ROOT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME: &'static str
+ = CERT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME;
+pub const CERT_AUTH_ROOT_AUTO_UPDATE_SYNC_DELTA_TIME_VALUE_NAME: &'static str = "SyncDeltaTime";
+pub const CERT_AUTH_ROOT_AUTO_UPDATE_FLAGS_VALUE_NAME: &'static str = "Flags";
+pub const CERT_AUTH_ROOT_AUTO_UPDATE_DISABLE_UNTRUSTED_ROOT_LOGGING_FLAG: DWORD = 0x1;
+pub const CERT_AUTH_ROOT_AUTO_UPDATE_DISABLE_PARTIAL_CHAIN_LOGGING_FLAG: DWORD = 0x2;
+pub const CERT_AUTO_UPDATE_DISABLE_RANDOM_QUERY_STRING_FLAG: DWORD = 0x4;
+pub const CERT_AUTH_ROOT_AUTO_UPDATE_LAST_SYNC_TIME_VALUE_NAME: &'static str = "LastSyncTime";
+pub const CERT_AUTH_ROOT_AUTO_UPDATE_ENCODED_CTL_VALUE_NAME: &'static str = "EncodedCt";
+pub const CERT_AUTH_ROOT_CTL_FILENAME: &'static str = "authroot.st";
+pub const CERT_AUTH_ROOT_CTL_FILENAME_A: &'static str = "authroot.st";
+pub const CERT_AUTH_ROOT_CAB_FILENAME: &'static str = "authrootstl.cab";
+pub const CERT_AUTH_ROOT_SEQ_FILENAME: &'static str = "authrootseq.txt";
+pub const CERT_AUTH_ROOT_CERT_EXT: &'static str = ".crt";
+pub const CERT_DISALLOWED_CERT_AUTO_UPDATE_SYNC_DELTA_TIME_VALUE_NAME: &'static str
+ = "DisallowedCertSyncDeltaTime";
+pub const CERT_DISALLOWED_CERT_AUTO_UPDATE_LAST_SYNC_TIME_VALUE_NAME: &'static str
+ = "DisallowedCertLastSyncTime";
+pub const CERT_DISALLOWED_CERT_AUTO_UPDATE_ENCODED_CTL_VALUE_NAME: &'static str
+ = "DisallowedCertEncodedCt";
+pub const CERT_DISALLOWED_CERT_CTL_FILENAME: &'static str = "disallowedcert.st";
+pub const CERT_DISALLOWED_CERT_CTL_FILENAME_A: &'static str = "disallowedcert.st";
+pub const CERT_DISALLOWED_CERT_CAB_FILENAME: &'static str = "disallowedcertstl.cab";
+pub const CERT_DISALLOWED_CERT_AUTO_UPDATE_LIST_IDENTIFIER: &'static str
+ = "DisallowedCert_AutoUpdate_1";
+pub const CERT_PIN_RULES_AUTO_UPDATE_SYNC_DELTA_TIME_VALUE_NAME: &'static str
+ = "PinRulesSyncDeltaTime";
+pub const CERT_PIN_RULES_AUTO_UPDATE_LAST_SYNC_TIME_VALUE_NAME: &'static str
+ = "PinRulesLastSyncTime";
+pub const CERT_PIN_RULES_AUTO_UPDATE_ENCODED_CTL_VALUE_NAME: &'static str = "PinRulesEncodedCt";
+pub const CERT_PIN_RULES_CTL_FILENAME: &'static str = "pinrules.st";
+pub const CERT_PIN_RULES_CTL_FILENAME_A: &'static str = "pinrules.st";
+pub const CERT_PIN_RULES_CAB_FILENAME: &'static str = "pinrulesstl.cab";
+pub const CERT_PIN_RULES_AUTO_UPDATE_LIST_IDENTIFIER: &'static str = "PinRules_AutoUpdate_1";
+pub const CERT_REGISTRY_STORE_REMOTE_FLAG: DWORD = 0x10000;
+pub const CERT_REGISTRY_STORE_SERIALIZED_FLAG: DWORD = 0x20000;
+pub const CERT_REGISTRY_STORE_CLIENT_GPT_FLAG: DWORD = 0x80000000;
+pub const CERT_REGISTRY_STORE_LM_GPT_FLAG: DWORD = 0x01000000;
+STRUCT!{struct CERT_REGISTRY_STORE_CLIENT_GPT_PARA {
+ hKeyBase: HKEY,
+ pwszRegPath: LPWSTR,
+}}
+pub type PCERT_REGISTRY_STORE_CLIENT_GPT_PARA = *mut CERT_REGISTRY_STORE_CLIENT_GPT_PARA;
+pub const CERT_REGISTRY_STORE_ROAMING_FLAG: DWORD = 0x40000;
+STRUCT!{struct CERT_REGISTRY_STORE_ROAMING_PARA {
+ hKeyBase: HKEY,
+ pwszStoreDirectory: LPWSTR,
+}}
+pub type PCERT_REGISTRY_STORE_ROAMING_PARA = *mut CERT_REGISTRY_STORE_ROAMING_PARA;
+pub const CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG: DWORD = 0x80000;
+pub const CERT_REGISTRY_STORE_EXTERNAL_FLAG: DWORD = 0x100000;
+pub const CERT_IE_DIRTY_FLAGS_REGPATH: &'static str
+ = "Software\\Microsoft\\Cryptography\\IEDirtyFlags";
+pub const CERT_FILE_STORE_COMMIT_ENABLE_FLAG: DWORD = 0x10000;
+pub const CERT_LDAP_STORE_SIGN_FLAG: DWORD = 0x10000;
+pub const CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG: DWORD = 0x20000;
+pub const CERT_LDAP_STORE_OPENED_FLAG: DWORD = 0x40000;
+STRUCT!{struct CERT_LDAP_STORE_OPENED_PARA {
+ pvLdapSessionHandle: *mut c_void,
+ pwszLdapUrl: LPCWSTR,
+}}
+pub type PCERT_LDAP_STORE_OPENED_PARA = *mut CERT_LDAP_STORE_OPENED_PARA;
+pub const CERT_LDAP_STORE_UNBIND_FLAG: DWORD = 0x80000;
+extern "system" {
+ pub fn CertOpenStore(
+ lpszStoreProvider: LPCSTR,
+ dwEncodingType: DWORD,
+ hCryptProv: HCRYPTPROV_LEGACY,
+ dwFlags: DWORD,
+ pvPara: *const c_void,
+ ) -> HCERTSTORE;
+}
+pub type HCERTSTOREPROV = *mut c_void;
+pub const CRYPT_OID_OPEN_STORE_PROV_FUNC: &'static str = "CertDllOpenStoreProv";
+STRUCT!{struct CERT_STORE_PROV_INFO {
+ cbSize: DWORD,
+ cStoreProvFunc: DWORD,
+ rgpvStoreProvFunc: *mut *mut c_void,
+ hStoreProv: HCERTSTOREPROV,
+ dwStoreProvFlags: DWORD,
+ hStoreProvFuncAddr2: HCRYPTOIDFUNCADDR,
+}}
+pub type PCERT_STORE_PROV_INFO = *mut CERT_STORE_PROV_INFO;
+FN!{stdcall PFN_CERT_DLL_OPEN_STORE_PROV_FUNC(
+ lpszStoreProvider: LPCSTR,
+ dwEncodingType: DWORD,
+ hCryptProv: HCRYPTPROV_LEGACY,
+ dwFlags: DWORD,
+ pvPara: *const c_void,
+ hCertStore: HCERTSTORE,
+ pStoreProvInfo: PCERT_STORE_PROV_INFO,
+) -> BOOL}
+pub const CERT_STORE_PROV_EXTERNAL_FLAG: DWORD = 0x1;
+pub const CERT_STORE_PROV_DELETED_FLAG: DWORD = 0x2;
+pub const CERT_STORE_PROV_NO_PERSIST_FLAG: DWORD = 0x4;
+pub const CERT_STORE_PROV_SYSTEM_STORE_FLAG: DWORD = 0x8;
+pub const CERT_STORE_PROV_LM_SYSTEM_STORE_FLAG: DWORD = 0x10;
+pub const CERT_STORE_PROV_GP_SYSTEM_STORE_FLAG: DWORD = 0x20;
+pub const CERT_STORE_PROV_SHARED_USER_FLAG: DWORD = 0x40;
+pub const CERT_STORE_PROV_CLOSE_FUNC: DWORD = 0;
+pub const CERT_STORE_PROV_READ_CERT_FUNC: DWORD = 1;
+pub const CERT_STORE_PROV_WRITE_CERT_FUNC: DWORD = 2;
+pub const CERT_STORE_PROV_DELETE_CERT_FUNC: DWORD = 3;
+pub const CERT_STORE_PROV_SET_CERT_PROPERTY_FUNC: DWORD = 4;
+pub const CERT_STORE_PROV_READ_CRL_FUNC: DWORD = 5;
+pub const CERT_STORE_PROV_WRITE_CRL_FUNC: DWORD = 6;
+pub const CERT_STORE_PROV_DELETE_CRL_FUNC: DWORD = 7;
+pub const CERT_STORE_PROV_SET_CRL_PROPERTY_FUNC: DWORD = 8;
+pub const CERT_STORE_PROV_READ_CTL_FUNC: DWORD = 9;
+pub const CERT_STORE_PROV_WRITE_CTL_FUNC: DWORD = 10;
+pub const CERT_STORE_PROV_DELETE_CTL_FUNC: DWORD = 11;
+pub const CERT_STORE_PROV_SET_CTL_PROPERTY_FUNC: DWORD = 12;
+pub const CERT_STORE_PROV_CONTROL_FUNC: DWORD = 13;
+pub const CERT_STORE_PROV_FIND_CERT_FUNC: DWORD = 14;
+pub const CERT_STORE_PROV_FREE_FIND_CERT_FUNC: DWORD = 15;
+pub const CERT_STORE_PROV_GET_CERT_PROPERTY_FUNC: DWORD = 16;
+pub const CERT_STORE_PROV_FIND_CRL_FUNC: DWORD = 17;
+pub const CERT_STORE_PROV_FREE_FIND_CRL_FUNC: DWORD = 18;
+pub const CERT_STORE_PROV_GET_CRL_PROPERTY_FUNC: DWORD = 19;
+pub const CERT_STORE_PROV_FIND_CTL_FUNC: DWORD = 20;
+pub const CERT_STORE_PROV_FREE_FIND_CTL_FUNC: DWORD = 21;
+pub const CERT_STORE_PROV_GET_CTL_PROPERTY_FUNC: DWORD = 22;
+FN!{stdcall PFN_CERT_STORE_PROV_CLOSE(
+ hStoreProv: HCERTSTOREPROV,
+ dwFlags: DWORD,
+) -> ()}
+FN!{stdcall PFN_CERT_STORE_PROV_READ_CERT(
+ hStoreProv: HCERTSTOREPROV,
+ pStoreCertContext: PCCERT_CONTEXT,
+ dwFlags: DWORD,
+ ppProvCertContext: *mut PCCERT_CONTEXT,
+) -> BOOL}
+pub const CERT_STORE_PROV_WRITE_ADD_FLAG: DWORD = 0x1;
+FN!{stdcall PFN_CERT_STORE_PROV_WRITE_CERT(
+ hStoreProv: HCERTSTOREPROV,
+ pCertContext: PCCERT_CONTEXT,
+ dwFlags: DWORD,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_DELETE_CERT(
+ hStoreProv: HCERTSTOREPROV,
+ pCertContext: PCCERT_CONTEXT,
+ dwFlags: DWORD,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_SET_CERT_PROPERTY(
+ hStoreProv: HCERTSTOREPROV,
+ pCertContext: PCCERT_CONTEXT,
+ dwPropId: DWORD,
+ dwFlags: DWORD,
+ pvData: *const c_void,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_READ_CRL(
+ hStoreProv: HCERTSTOREPROV,
+ pStoreCrlContext: PCCRL_CONTEXT,
+ dwFlags: DWORD,
+ ppProvCrlContext: *mut PCCRL_CONTEXT,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_WRITE_CRL(
+ hStoreProv: HCERTSTOREPROV,
+ pCrlContext: PCCRL_CONTEXT,
+ dwFlags: DWORD,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_DELETE_CRL(
+ hStoreProv: HCERTSTOREPROV,
+ pCrlContext: PCCRL_CONTEXT,
+ dwFlags: DWORD,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_SET_CRL_PROPERTY(
+ hStoreProv: HCERTSTOREPROV,
+ pCrlContext: PCCRL_CONTEXT,
+ dwPropId: DWORD,
+ dwFlags: DWORD,
+ pvData: *const c_void,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_READ_CTL(
+ hStoreProv: HCERTSTOREPROV,
+ pStoreCtlContext: PCCTL_CONTEXT,
+ dwFlags: DWORD,
+ ppProvCtlContext: *mut PCCTL_CONTEXT,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_WRITE_CTL(
+ hStoreProv: HCERTSTOREPROV,
+ pCtlContext: PCCTL_CONTEXT,
+ dwFlags: DWORD,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_DELETE_CTL(
+ hStoreProv: HCERTSTOREPROV,
+ pCtlContext: PCCTL_CONTEXT,
+ dwFlags: DWORD,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_SET_CTL_PROPERTY(
+ hStoreProv: HCERTSTOREPROV,
+ pCtlContext: PCCTL_CONTEXT,
+ dwPropId: DWORD,
+ dwFlags: DWORD,
+ pvData: *const c_void,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_CONTROL(
+ hStoreProv: HCERTSTOREPROV,
+ dwFlags: DWORD,
+ dwCtrlType: DWORD,
+ pvCtrlPara: *const c_void,
+) -> BOOL}
+STRUCT!{struct CERT_STORE_PROV_FIND_INFO {
+ cbSize: DWORD,
+ dwMsgAndCertEncodingType: DWORD,
+ dwFindFlags: DWORD,
+ dwFindType: DWORD,
+ pvFindPara: *const c_void,
+}}
+pub type PCERT_STORE_PROV_FIND_INFO = *mut CERT_STORE_PROV_FIND_INFO;
+pub type CCERT_STORE_PROV_FIND_INFO = CERT_STORE_PROV_FIND_INFO;
+pub type PCCERT_STORE_PROV_FIND_INFO = *const CERT_STORE_PROV_FIND_INFO;
+FN!{stdcall PFN_CERT_STORE_PROV_FIND_CERT(
+ hStoreProv: HCERTSTOREPROV,
+ pFindInfo: PCCERT_STORE_PROV_FIND_INFO,
+ pPrevCertContext: PCCERT_CONTEXT,
+ dwFlags: DWORD,
+ ppvStoreProvFindInfo: *mut *mut c_void,
+ ppProvCertContext: *mut PCCERT_CONTEXT,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_FREE_FIND_CERT(
+ hStoreProv: HCERTSTOREPROV,
+ pCertContext: PCCERT_CONTEXT,
+ pvStoreProvFindInfo: *mut c_void,
+ dwFlags: DWORD,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_GET_CERT_PROPERTY(
+ hStoreProv: HCERTSTOREPROV,
+ pCertContext: PCCERT_CONTEXT,
+ dwPropId: DWORD,
+ dwFlags: DWORD,
+ pvData: *mut c_void,
+ pcbData: *mut DWORD,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_FIND_CRL(
+ hStoreProv: HCERTSTOREPROV,
+ pFindInfo: PCCERT_STORE_PROV_FIND_INFO,
+ pPrevCrlContext: PCCRL_CONTEXT,
+ dwFlags: DWORD,
+ ppvStoreProvFindInfo: *mut *mut c_void,
+ ppProvCrlContext: *mut PCCRL_CONTEXT,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_FREE_FIND_CRL(
+ hStoreProv: HCERTSTOREPROV,
+ pCrlContext: PCCRL_CONTEXT,
+ pvStoreProvFindInfo: *mut c_void,
+ dwFlags: DWORD,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_GET_CRL_PROPERTY(
+ hStoreProv: HCERTSTOREPROV,
+ pCrlContext: PCCRL_CONTEXT,
+ dwPropId: DWORD,
+ dwFlags: DWORD,
+ pvData: *mut c_void,
+ pcbData: *mut DWORD,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_FIND_CTL(
+ hStoreProv: HCERTSTOREPROV,
+ pFindInfo: PCCERT_STORE_PROV_FIND_INFO,
+ pPrevCtlContext: PCCTL_CONTEXT,
+ dwFlags: DWORD,
+ ppvStoreProvFindInfo: *mut *mut c_void,
+ ppProvCtlContext: *mut PCCTL_CONTEXT,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_FREE_FIND_CTL(
+ hStoreProv: HCERTSTOREPROV,
+ pCtlContext: PCCTL_CONTEXT,
+ pvStoreProvFindInfo: *mut c_void,
+ dwFlags: DWORD,
+) -> BOOL}
+FN!{stdcall PFN_CERT_STORE_PROV_GET_CTL_PROPERTY(
+ hStoreProv: HCERTSTOREPROV,
+ pCtlContext: PCCTL_CONTEXT,
+ dwPropId: DWORD,
+ dwFlags: DWORD,
+ pvData: *mut c_void,
+ pcbData: *mut DWORD,
+) -> BOOL}
+extern "system" {
+ pub fn CertDuplicateStore(
+ hCertStore: HCERTSTORE,
+ ) -> HCERTSTORE;
+}
+pub const CERT_STORE_SAVE_AS_STORE: DWORD = 1;
+pub const CERT_STORE_SAVE_AS_PKCS7: DWORD = 2;
+pub const CERT_STORE_SAVE_AS_PKCS12: DWORD = 3;
+pub const CERT_STORE_SAVE_TO_FILE: DWORD = 1;
+pub const CERT_STORE_SAVE_TO_MEMORY: DWORD = 2;
+pub const CERT_STORE_SAVE_TO_FILENAME_A: DWORD = 3;
+pub const CERT_STORE_SAVE_TO_FILENAME_W: DWORD = 4;
+pub const CERT_STORE_SAVE_TO_FILENAME: DWORD = CERT_STORE_SAVE_TO_FILENAME_W;
+extern "system" {
+ pub fn CertSaveStore(
+ hCertStore: HCERTSTORE,
+ dwEncodingType: DWORD,
+ dwSaveAs: DWORD,
+ dwSaveTo: DWORD,
+ pvSaveToPara: *mut c_void,
+ dwFlags: DWORD,
+ ) -> BOOL;
+}
+pub const CERT_CLOSE_STORE_FORCE_FLAG: DWORD = 0x00000001;
+pub const CERT_CLOSE_STORE_CHECK_FLAG: DWORD = 0x00000002;
+extern "system" {
+ pub fn CertCloseStore(
+ hCertStore: HCERTSTORE,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CertGetSubjectCertificateFromStore(
+ hCertStore: HCERTSTORE,
+ dwCertEncodingType: DWORD,
+ pCertId: PCERT_INFO,
+ ) -> PCCERT_CONTEXT;
+ pub fn CertEnumCertificatesInStore(
+ hCertStore: HCERTSTORE,
+ pPrevCertContext: PCCERT_CONTEXT,
+ ) -> PCCERT_CONTEXT;
+ pub fn CertFindCertificateInStore(
+ hCertStore: HCERTSTORE,
+ dwCertEncodingType: DWORD,
+ dwFindFlags: DWORD,
+ dwFindType: DWORD,
+ pvFindPara: *const c_void,
+ pPrevCertContext: PCCERT_CONTEXT,
+ ) -> PCCERT_CONTEXT;
+}
+pub const CERT_COMPARE_MASK: DWORD = 0xFFFF;
+pub const CERT_COMPARE_SHIFT: DWORD = 16;
+pub const CERT_COMPARE_ANY: DWORD = 0;
+pub const CERT_COMPARE_SHA1_HASH: DWORD = 1;
+pub const CERT_COMPARE_NAME: DWORD = 2;
+pub const CERT_COMPARE_ATTR: DWORD = 3;
+pub const CERT_COMPARE_MD5_HASH: DWORD = 4;
+pub const CERT_COMPARE_PROPERTY: DWORD = 5;
+pub const CERT_COMPARE_PUBLIC_KEY: DWORD = 6;
+pub const CERT_COMPARE_HASH: DWORD = CERT_COMPARE_SHA1_HASH;
+pub const CERT_COMPARE_NAME_STR_A: DWORD = 7;
+pub const CERT_COMPARE_NAME_STR_W: DWORD = 8;
+pub const CERT_COMPARE_KEY_SPEC: DWORD = 9;
+pub const CERT_COMPARE_ENHKEY_USAGE: DWORD = 10;
+pub const CERT_COMPARE_CTL_USAGE: DWORD = CERT_COMPARE_ENHKEY_USAGE;
+pub const CERT_COMPARE_SUBJECT_CERT: DWORD = 11;
+pub const CERT_COMPARE_ISSUER_OF: DWORD = 12;
+pub const CERT_COMPARE_EXISTING: DWORD = 13;
+pub const CERT_COMPARE_SIGNATURE_HASH: DWORD = 14;
+pub const CERT_COMPARE_KEY_IDENTIFIER: DWORD = 15;
+pub const CERT_COMPARE_CERT_ID: DWORD = 16;
+pub const CERT_COMPARE_CROSS_CERT_DIST_POINTS: DWORD = 17;
+pub const CERT_COMPARE_PUBKEY_MD5_HASH: DWORD = 18;
+pub const CERT_COMPARE_SUBJECT_INFO_ACCESS: DWORD = 19;
+pub const CERT_COMPARE_HASH_STR: DWORD = 20;
+pub const CERT_COMPARE_HAS_PRIVATE_KEY: DWORD = 21;
+pub const CERT_FIND_ANY: DWORD = CERT_COMPARE_ANY << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_SHA1_HASH: DWORD = CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_MD5_HASH: DWORD = CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_SIGNATURE_HASH: DWORD = CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_KEY_IDENTIFIER: DWORD = CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_HASH: DWORD = CERT_FIND_SHA1_HASH;
+pub const CERT_FIND_PROPERTY: DWORD = CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_PUBLIC_KEY: DWORD = CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_SUBJECT_NAME: DWORD = (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT)
+ | CERT_INFO_SUBJECT_FLAG;
+pub const CERT_FIND_SUBJECT_ATTR: DWORD = (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT)
+ | CERT_INFO_SUBJECT_FLAG;
+pub const CERT_FIND_ISSUER_NAME: DWORD = (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT)
+ | CERT_INFO_ISSUER_FLAG;
+pub const CERT_FIND_ISSUER_ATTR: DWORD = (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT)
+ | CERT_INFO_ISSUER_FLAG;
+pub const CERT_FIND_SUBJECT_STR_A: DWORD = (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT)
+ | CERT_INFO_SUBJECT_FLAG;
+pub const CERT_FIND_SUBJECT_STR_W: DWORD = (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT)
+ | CERT_INFO_SUBJECT_FLAG;
+pub const CERT_FIND_SUBJECT_STR: DWORD = CERT_FIND_SUBJECT_STR_W;
+pub const CERT_FIND_ISSUER_STR_A: DWORD = (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT)
+ | CERT_INFO_ISSUER_FLAG;
+pub const CERT_FIND_ISSUER_STR_W: DWORD = (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT)
+ | CERT_INFO_ISSUER_FLAG;
+pub const CERT_FIND_ISSUER_STR: DWORD = CERT_FIND_ISSUER_STR_W;
+pub const CERT_FIND_KEY_SPEC: DWORD = CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_ENHKEY_USAGE: DWORD = CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_CTL_USAGE: DWORD = CERT_FIND_ENHKEY_USAGE;
+pub const CERT_FIND_SUBJECT_CERT: DWORD = CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_ISSUER_OF: DWORD = CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_EXISTING: DWORD = CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_CERT_ID: DWORD = CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_CROSS_CERT_DIST_POINTS: DWORD = CERT_COMPARE_CROSS_CERT_DIST_POINTS
+ << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_PUBKEY_MD5_HASH: DWORD = CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_SUBJECT_INFO_ACCESS: DWORD = CERT_COMPARE_SUBJECT_INFO_ACCESS
+ << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_HASH_STR: DWORD = CERT_COMPARE_HASH_STR << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_HAS_PRIVATE_KEY: DWORD = CERT_COMPARE_HAS_PRIVATE_KEY << CERT_COMPARE_SHIFT;
+pub const CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG: DWORD = 0x1;
+pub const CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG: DWORD = 0x2;
+pub const CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG: DWORD = 0x4;
+pub const CERT_FIND_NO_ENHKEY_USAGE_FLAG: DWORD = 0x8;
+pub const CERT_FIND_OR_ENHKEY_USAGE_FLAG: DWORD = 0x10;
+pub const CERT_FIND_VALID_ENHKEY_USAGE_FLAG: DWORD = 0x20;
+pub const CERT_FIND_OPTIONAL_CTL_USAGE_FLAG: DWORD = CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG;
+pub const CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG: DWORD = CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG;
+pub const CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG: DWORD = CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG;
+pub const CERT_FIND_NO_CTL_USAGE_FLAG: DWORD = CERT_FIND_NO_ENHKEY_USAGE_FLAG;
+pub const CERT_FIND_OR_CTL_USAGE_FLAG: DWORD = CERT_FIND_OR_ENHKEY_USAGE_FLAG;
+pub const CERT_FIND_VALID_CTL_USAGE_FLAG: DWORD = CERT_FIND_VALID_ENHKEY_USAGE_FLAG;
+extern "system" {
+ pub fn CertGetIssuerCertificateFromStore(
+ hCertStore: HCERTSTORE,
+ pSubjectContext: PCCERT_CONTEXT,
+ pPrevIssuerContext: PCCERT_CONTEXT,
+ pdwFlags: *mut DWORD,
+ ) -> PCCERT_CONTEXT;
+ pub fn CertVerifySubjectCertificateContext(
+ pSubject: PCCERT_CONTEXT,
+ pIssuer: PCCERT_CONTEXT,
+ pdwFlags: *mut DWORD,
+ ) -> BOOL;
+ pub fn CertDuplicateCertificateContext(
+ pCertContext: PCCERT_CONTEXT,
+ ) -> PCCERT_CONTEXT;
+ pub fn CertCreateCertificateContext(
+ dwCertEncodingType: DWORD,
+ pbCertEncoded: *const BYTE,
+ cbCertEncoded: DWORD,
+ ) -> PCCERT_CONTEXT;
+ pub fn CertFreeCertificateContext(
+ pCertContext: PCCERT_CONTEXT,
+ ) -> BOOL;
+ pub fn CertSetCertificateContextProperty(
+ pCertContext: PCCERT_CONTEXT,
+ dwPropId: DWORD,
+ dwFlags: DWORD,
+ pvData: *const c_void,
+ ) -> BOOL;
+}
+pub const CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG: DWORD = 0x80000000;
+pub const CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG: DWORD = 0x40000000;
+extern "system" {
+ pub fn CertGetCertificateContextProperty(
+ pCertContext: PCCERT_CONTEXT,
+ dwPropId: DWORD,
+ pvData: *mut c_void,
+ pcbData: *mut DWORD,
+ ) -> BOOL;
+ pub fn CertEnumCertificateContextProperties(
+ pCertContext: PCCERT_CONTEXT,
+ dwPropId: DWORD,
+ ) -> DWORD;
+ pub fn CertCreateCTLEntryFromCertificateContextProperties(
+ pCertContext: PCCERT_CONTEXT,
+ cOptAttr: DWORD,
+ rgOptAttr: PCRYPT_ATTRIBUTE,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+ pCtlEntry: PCTL_ENTRY,
+ pcbCtlEntry: *mut DWORD,
+ ) -> BOOL;
+ pub fn CertSetCertificateContextPropertiesFromCTLEntry(
+ pCertContext: PCCERT_CONTEXT,
+ pCtlEntry: PCTL_ENTRY,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CertGetCRLFromStore(
+ hCertStore: HCERTSTORE,
+ pIssuerContext: PCCERT_CONTEXT,
+ pPrevCrlContext: PCCRL_CONTEXT,
+ pdwFlags: *mut DWORD,
+ ) -> PCCRL_CONTEXT;
+ pub fn CertEnumCRLsInStore(
+ hCertStore: HCERTSTORE,
+ pPrevCrlContext: PCCRL_CONTEXT,
+ ) -> PCCRL_CONTEXT;
+ pub fn CertFindCRLInStore(
+ hCertStore: HCERTSTORE,
+ dwCertEncodingType: DWORD,
+ dwFindFlags: DWORD,
+ dwFindType: DWORD,
+ pvFindPara: *const c_void,
+ pPrevCrlContext: PCCRL_CONTEXT,
+ ) -> PCCRL_CONTEXT;
+}
+pub const CRL_FIND_ANY: DWORD = 0;
+pub const CRL_FIND_ISSUED_BY: DWORD = 1;
+pub const CRL_FIND_EXISTING: DWORD = 2;
+pub const CRL_FIND_ISSUED_FOR: DWORD = 3;
+pub const CRL_FIND_ISSUED_BY_AKI_FLAG: DWORD = 0x1;
+pub const CRL_FIND_ISSUED_BY_SIGNATURE_FLAG: DWORD = 0x2;
+pub const CRL_FIND_ISSUED_BY_DELTA_FLAG: DWORD = 0x4;
+pub const CRL_FIND_ISSUED_BY_BASE_FLAG: DWORD = 0x8;
+STRUCT!{struct CRL_FIND_ISSUED_FOR_PARA {
+ pSubjectCert: PCCERT_CONTEXT,
+ pIssuerCert: PCCERT_CONTEXT,
+}}
+pub type PCRL_FIND_ISSUED_FOR_PARA = *mut CRL_FIND_ISSUED_FOR_PARA;
+pub const CRL_FIND_ISSUED_FOR_SET_STRONG_PROPERTIES_FLAG: DWORD = 0x10;
+extern "system" {
+ pub fn CertDuplicateCRLContext(
+ pCrlContext: PCCRL_CONTEXT,
+ ) -> PCCRL_CONTEXT;
+ pub fn CertCreateCRLContext(
+ dwCertEncodingType: DWORD,
+ pbCrlEncoded: *const BYTE,
+ cbCrlEncoded: DWORD,
+ ) -> PCCRL_CONTEXT;
+ pub fn CertFreeCRLContext(
+ pCrlContext: PCCRL_CONTEXT,
+ ) -> BOOL;
+ pub fn CertSetCRLContextProperty(
+ pCrlContext: PCCRL_CONTEXT,
+ dwPropId: DWORD,
+ dwFlags: DWORD,
+ pvData: *const c_void,
+ ) -> BOOL;
+ pub fn CertGetCRLContextProperty(
+ pCrlContext: PCCRL_CONTEXT,
+ dwPropId: DWORD,
+ pvData: *mut c_void,
+ pcbData: *mut DWORD,
+ ) -> BOOL;
+ pub fn CertEnumCRLContextProperties(
+ pCrlContext: PCCRL_CONTEXT,
+ dwPropId: DWORD,
+ ) -> DWORD;
+ pub fn CertFindCertificateInCRL(
+ pCert: PCCERT_CONTEXT,
+ pCrlContext: PCCRL_CONTEXT,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+ ppCrlEntry: *mut PCRL_ENTRY,
+ ) -> BOOL;
+ pub fn CertIsValidCRLForCertificate(
+ pCert: PCCERT_CONTEXT,
+ pCrl: PCCRL_CONTEXT,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+ ) -> BOOL;
+}
+pub const CERT_STORE_ADD_NEW: DWORD = 1;
+pub const CERT_STORE_ADD_USE_EXISTING: DWORD = 2;
+pub const CERT_STORE_ADD_REPLACE_EXISTING: DWORD = 3;
+pub const CERT_STORE_ADD_ALWAYS: DWORD = 4;
+pub const CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES: DWORD = 5;
+pub const CERT_STORE_ADD_NEWER: DWORD = 6;
+pub const CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES: DWORD = 7;
+extern "system" {
+ pub fn CertAddEncodedCertificateToStore(
+ hCertStore: HCERTSTORE,
+ dwCertEncodingType: DWORD,
+ pbCertEncoded: *const BYTE,
+ cbCertEncoded: DWORD,
+ dwAddDisposition: DWORD,
+ ppCertContext: *mut PCCERT_CONTEXT,
+ ) -> BOOL;
+ pub fn CertAddCertificateContextToStore(
+ hCertStore: HCERTSTORE,
+ pCertContext: PCCERT_CONTEXT,
+ dwAddDisposition: DWORD,
+ ppStoreContext: *mut PCCERT_CONTEXT,
+ ) -> BOOL;
+}
+pub const CERT_STORE_CERTIFICATE_CONTEXT: DWORD = 1;
+pub const CERT_STORE_CRL_CONTEXT: DWORD = 2;
+pub const CERT_STORE_CTL_CONTEXT: DWORD = 3;
+pub const CERT_STORE_ALL_CONTEXT_FLAG: DWORD = !0;
+pub const CERT_STORE_CERTIFICATE_CONTEXT_FLAG: DWORD = 1 << CERT_STORE_CERTIFICATE_CONTEXT;
+pub const CERT_STORE_CRL_CONTEXT_FLAG: DWORD = 1 << CERT_STORE_CRL_CONTEXT;
+pub const CERT_STORE_CTL_CONTEXT_FLAG: DWORD = 1 << CERT_STORE_CTL_CONTEXT;
+extern "system" {
+ pub fn CertAddSerializedElementToStore(
+ hCertStore: HCERTSTORE,
+ pbElement: *const BYTE,
+ cbElement: DWORD,
+ dwAddDisposition: DWORD,
+ dwFlags: DWORD,
+ dwContextTypeFlags: DWORD,
+ pdwContextType: *mut DWORD,
+ ppvContext: *mut *const c_void,
+ ) -> BOOL;
+ pub fn CertDeleteCertificateFromStore(
+ pCertContext: PCCERT_CONTEXT,
+ ) -> BOOL;
+ pub fn CertAddEncodedCRLToStore(
+ hCertStore: HCERTSTORE,
+ dwCertEncodingType: DWORD,
+ pbCrlEncoded: *const BYTE,
+ cbCrlEncoded: DWORD,
+ dwAddDisposition: DWORD,
+ ppCrlContext: *mut PCCRL_CONTEXT,
+ ) -> BOOL;
+ pub fn CertAddCRLContextToStore(
+ hCertStore: HCERTSTORE,
+ pCrlContext: PCCRL_CONTEXT,
+ dwAddDisposition: DWORD,
+ ppStoreContext: *mut PCCRL_CONTEXT,
+ ) -> BOOL;
+ pub fn CertDeleteCRLFromStore(
+ pCrlContext: PCCRL_CONTEXT,
+ ) -> BOOL;
+ pub fn CertSerializeCertificateStoreElement(
+ pCertContext: PCCERT_CONTEXT,
+ dwFlags: DWORD,
+ pbElement: *mut BYTE,
+ pcbElement: *mut DWORD,
+ ) -> BOOL;
+ pub fn CertSerializeCRLStoreElement(
+ pCrlContext: PCCRL_CONTEXT,
+ dwFlags: DWORD,
+ pbElement: *mut BYTE,
+ pcbElement: *mut DWORD,
+ ) -> BOOL;
+ pub fn CertDuplicateCTLContext(
+ pCtlContext: PCCTL_CONTEXT,
+ ) -> PCCTL_CONTEXT;
+ pub fn CertCreateCTLContext(
+ dwMsgAndCertEncodingType: DWORD,
+ pbCtlEncoded: *const BYTE,
+ cbCtlEncoded: DWORD,
+ ) -> PCCTL_CONTEXT;
+ pub fn CertFreeCTLContext(
+ pCtlContext: PCCTL_CONTEXT,
+ ) -> BOOL;
+ pub fn CertSetCTLContextProperty(
+ pCtlContext: PCCTL_CONTEXT,
+ dwPropId: DWORD,
+ dwFlags: DWORD,
+ pvData: *const c_void,
+ ) -> BOOL;
+ pub fn CertGetCTLContextProperty(
+ pCtlContext: PCCTL_CONTEXT,
+ dwPropId: DWORD,
+ pvData: *mut c_void,
+ pcbData: *mut DWORD,
+ ) -> BOOL;
+ pub fn CertEnumCTLContextProperties(
+ pCtlContext: PCCTL_CONTEXT,
+ dwPropId: DWORD,
+ ) -> DWORD;
+ pub fn CertEnumCTLsInStore(
+ hCertStore: HCERTSTORE,
+ pPrevCtlContext: PCCTL_CONTEXT,
+ ) -> PCCTL_CONTEXT;
+ pub fn CertFindSubjectInCTL(
+ dwEncodingType: DWORD,
+ dwSubjectType: DWORD,
+ pvSubject: *mut c_void,
+ pCtlContext: PCCTL_CONTEXT,
+ dwFlags: DWORD,
+ ) -> PCTL_ENTRY;
+}
+pub const CTL_ANY_SUBJECT_TYPE: DWORD = 1;
+pub const CTL_CERT_SUBJECT_TYPE: DWORD = 2;
+STRUCT!{struct CTL_ANY_SUBJECT_INFO {
+ SubjectAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ SubjectIdentifier: CRYPT_DATA_BLOB,
+}}
+pub type PCTL_ANY_SUBJECT_INFO = *mut CTL_ANY_SUBJECT_INFO;
+extern "system" {
+ pub fn CertFindCTLInStore(
+ hCertStore: HCERTSTORE,
+ dwMsgAndCertEncodingType: DWORD,
+ dwFindFlags: DWORD,
+ dwFindType: DWORD,
+ pvFindPara: *const c_void,
+ pPrevCtlContext: PCCTL_CONTEXT,
+ ) -> PCCTL_CONTEXT;
+}
+pub const CTL_FIND_ANY: DWORD = 0;
+pub const CTL_FIND_SHA1_HASH: DWORD = 1;
+pub const CTL_FIND_MD5_HASH: DWORD = 2;
+pub const CTL_FIND_USAGE: DWORD = 3;
+pub const CTL_FIND_SUBJECT: DWORD = 4;
+pub const CTL_FIND_EXISTING: DWORD = 5;
+STRUCT!{struct CTL_FIND_USAGE_PARA {
+ cbSize: DWORD,
+ SubjectUsage: CTL_USAGE,
+ ListIdentifier: CRYPT_DATA_BLOB,
+ pSigner: PCERT_INFO,
+}}
+pub type PCTL_FIND_USAGE_PARA = *mut CTL_FIND_USAGE_PARA;
+pub const CTL_FIND_NO_LIST_ID_CBDATA: DWORD = 0xFFFFFFFF;
+pub const CTL_FIND_NO_SIGNER_PTR: PCERT_INFO = -1isize as PCERT_INFO;
+pub const CTL_FIND_SAME_USAGE_FLAG: DWORD = 0x1;
+STRUCT!{struct CTL_FIND_SUBJECT_PARA {
+ cbSize: DWORD,
+ pUsagePara: PCTL_FIND_USAGE_PARA,
+ dwSubjectType: DWORD,
+ pvSubject: *mut c_void,
+}}
+pub type PCTL_FIND_SUBJECT_PARA = *mut CTL_FIND_SUBJECT_PARA;
+extern "system" {
+ pub fn CertAddEncodedCTLToStore(
+ hCertStore: HCERTSTORE,
+ dwMsgAndCertEncodingType: DWORD,
+ pbCtlEncoded: *const BYTE,
+ cbCtlEncoded: DWORD,
+ dwAddDisposition: DWORD,
+ ppCtlContext: *mut PCCTL_CONTEXT,
+ ) -> BOOL;
+ pub fn CertAddCTLContextToStore(
+ hCertStore: HCERTSTORE,
+ pCtlContext: PCCTL_CONTEXT,
+ dwAddDisposition: DWORD,
+ ppStoreContext: *mut PCCTL_CONTEXT,
+ ) -> BOOL;
+ pub fn CertSerializeCTLStoreElement(
+ pCtlContext: PCCTL_CONTEXT,
+ dwFlags: DWORD,
+ pbElement: *mut BYTE,
+ pcbElement: *mut DWORD,
+ ) -> BOOL;
+ pub fn CertDeleteCTLFromStore(
+ pCtlContext: PCCTL_CONTEXT,
+ ) -> BOOL;
+ pub fn CertAddCertificateLinkToStore(
+ hCertStore: HCERTSTORE,
+ pCertContext: PCCERT_CONTEXT,
+ dwAddDisposition: DWORD,
+ ppStoreContext: *mut PCCERT_CONTEXT,
+ ) -> BOOL;
+ pub fn CertAddCRLLinkToStore(
+ hCertStore: HCERTSTORE,
+ pCrlContext: PCCRL_CONTEXT,
+ dwAddDisposition: DWORD,
+ ppStoreContext: *mut PCCRL_CONTEXT,
+ ) -> BOOL;
+ pub fn CertAddCTLLinkToStore(
+ hCertStore: HCERTSTORE,
+ pCtlContext: PCCTL_CONTEXT,
+ dwAddDisposition: DWORD,
+ ppStoreContext: *mut PCCTL_CONTEXT,
+ ) -> BOOL;
+ pub fn CertAddStoreToCollection(
+ hCollectionStore: HCERTSTORE,
+ hSiblingStore: HCERTSTORE,
+ dwUpdateFlags: DWORD,
+ dwPriority: DWORD,
+ ) -> BOOL;
+ pub fn CertRemoveStoreFromCollection(
+ hCollectionStore: HCERTSTORE,
+ hSiblingStore: HCERTSTORE,
+ );
+ pub fn CertControlStore(
+ hCertStore: HCERTSTORE,
+ dwFlags: DWORD,
+ dwCtrlType: DWORD,
+ pvCtrlPara: *const c_void,
+ ) -> BOOL;
+}
+pub const CERT_STORE_CTRL_RESYNC: DWORD = 1;
+pub const CERT_STORE_CTRL_NOTIFY_CHANGE: DWORD = 2;
+pub const CERT_STORE_CTRL_COMMIT: DWORD = 3;
+pub const CERT_STORE_CTRL_AUTO_RESYNC: DWORD = 4;
+pub const CERT_STORE_CTRL_CANCEL_NOTIFY: DWORD = 5;
+pub const CERT_STORE_CTRL_INHIBIT_DUPLICATE_HANDLE_FLAG: DWORD = 0x1;
+pub const CERT_STORE_CTRL_COMMIT_FORCE_FLAG: DWORD = 0x1;
+pub const CERT_STORE_CTRL_COMMIT_CLEAR_FLAG: DWORD = 0x2;
+pub const CERT_STORE_LOCALIZED_NAME_PROP_ID: DWORD = 0x1000;
+extern "system" {
+ pub fn CertSetStoreProperty(
+ hCertStore: HCERTSTORE,
+ dwPropId: DWORD,
+ dwFlags: DWORD,
+ pvData: *const c_void,
+ ) -> BOOL;
+ pub fn CertGetStoreProperty(
+ hCertStore: HCERTSTORE,
+ dwPropId: DWORD,
+ pvData: *mut c_void,
+ pcbData: *mut DWORD,
+ ) -> BOOL;
+}
+FN!{stdcall PFN_CERT_CREATE_CONTEXT_SORT_FUNC(
+ cbTotalEncoded: DWORD,
+ cbRemainEncoded: DWORD,
+ cEntry: DWORD,
+ pvSort: *mut c_void,
+) -> BOOL}
+STRUCT!{struct CERT_CREATE_CONTEXT_PARA {
+ cbSize: DWORD,
+ pfnFree: PFN_CRYPT_FREE,
+ pvFree: *mut c_void,
+ pfnSort: PFN_CERT_CREATE_CONTEXT_SORT_FUNC,
+ pvSort: *mut c_void,
+}}
+pub type PCERT_CREATE_CONTEXT_PARA = *mut CERT_CREATE_CONTEXT_PARA;
+extern "system" {
+ pub fn CertCreateContext(
+ dwContextType: DWORD,
+ dwEncodingType: DWORD,
+ pbEncoded: *const BYTE,
+ cbEncoded: DWORD,
+ dwFlags: DWORD,
+ pCreatePara: PCERT_CREATE_CONTEXT_PARA,
+ ) -> *const c_void;
+}
+pub const CERT_CREATE_CONTEXT_NOCOPY_FLAG: DWORD = 0x1;
+pub const CERT_CREATE_CONTEXT_SORTED_FLAG: DWORD = 0x2;
+pub const CERT_CREATE_CONTEXT_NO_HCRYPTMSG_FLAG: DWORD = 0x4;
+pub const CERT_CREATE_CONTEXT_NO_ENTRY_FLAG: DWORD = 0x8;
+STRUCT!{struct CERT_SYSTEM_STORE_INFO {
+ cbSize: DWORD,
+}}
+pub type PCERT_SYSTEM_STORE_INFO = *mut CERT_SYSTEM_STORE_INFO;
+STRUCT!{struct CERT_PHYSICAL_STORE_INFO {
+ cbSize: DWORD,
+ pszOpenStoreProvider: LPSTR,
+ dwOpenEncodingType: DWORD,
+ dwOpenFlags: DWORD,
+ OpenParameters: CRYPT_DATA_BLOB,
+ dwFlags: DWORD,
+ dwPriority: DWORD,
+}}
+pub type PCERT_PHYSICAL_STORE_INFO = *mut CERT_PHYSICAL_STORE_INFO;
+pub const CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG: DWORD = 0x1;
+pub const CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG: DWORD = 0x2;
+pub const CERT_PHYSICAL_STORE_REMOTE_OPEN_DISABLE_FLAG: DWORD = 0x4;
+pub const CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG: DWORD = 0x8;
+extern "system" {
+ pub fn CertRegisterSystemStore(
+ pvSystemStore: *const c_void,
+ dwFlags: DWORD,
+ pStoreInfo: PCERT_SYSTEM_STORE_INFO,
+ pvReserved: *mut c_void,
+ ) -> BOOL;
+ pub fn CertRegisterPhysicalStore(
+ pvSystemStore: *const c_void,
+ dwFlags: DWORD,
+ pwszStoreName: LPCWSTR,
+ pStoreInfo: PCERT_PHYSICAL_STORE_INFO,
+ pvReserved: *mut c_void,
+ ) -> BOOL;
+ pub fn CertUnregisterSystemStore(
+ pvSystemStore: *const c_void,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn CertUnregisterPhysicalStore(
+ pvSystemStore: *const c_void,
+ dwFlags: DWORD,
+ pwszStoreName: LPCWSTR,
+ ) -> BOOL;
+}
+FN!{stdcall PFN_CERT_ENUM_SYSTEM_STORE_LOCATION(
+ pwszStoreLocation: LPCWSTR,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+ pvArg: *mut c_void,
+) -> BOOL}
+FN!{stdcall PFN_CERT_ENUM_SYSTEM_STORE(
+ pvSystemStore: *const c_void,
+ dwFlags: DWORD,
+ pStoreInfo: PCERT_SYSTEM_STORE_INFO,
+ pvReserved: *mut c_void,
+ pvArg: *mut c_void,
+) -> BOOL}
+FN!{stdcall PFN_CERT_ENUM_PHYSICAL_STORE(
+ pvSystemStore: *const c_void,
+ dwFlags: DWORD,
+ pwszStoreName: LPCWSTR,
+ pStoreInfo: PCERT_PHYSICAL_STORE_INFO,
+ pvReserved: *mut c_void,
+ pvArg: *mut c_void,
+) -> BOOL}
+pub const CERT_PHYSICAL_STORE_PREDEFINED_ENUM_FLAG: DWORD = 0x1;
+pub const CERT_PHYSICAL_STORE_DEFAULT_NAME: &'static str = ".Default";
+pub const CERT_PHYSICAL_STORE_GROUP_POLICY_NAME: &'static str = ".GroupPolicy";
+pub const CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME: &'static str = ".LocalMachine";
+pub const CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME: &'static str = ".UserCertificate";
+pub const CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME: &'static str
+ = ".LocalMachineGroupPolicy";
+pub const CERT_PHYSICAL_STORE_ENTERPRISE_NAME: &'static str = ".Enterprise";
+pub const CERT_PHYSICAL_STORE_AUTH_ROOT_NAME: &'static str = ".AuthRoot";
+pub const CERT_PHYSICAL_STORE_SMART_CARD_NAME: &'static str = ".SmartCard";
+extern "system" {
+ pub fn CertEnumSystemStoreLocation(
+ dwFlags: DWORD,
+ pvArg: *mut c_void,
+ pfnEnum: PFN_CERT_ENUM_SYSTEM_STORE_LOCATION,
+ ) -> BOOL;
+ pub fn CertEnumSystemStore(
+ dwFlags: DWORD,
+ pvSystemStoreLocationPara: *mut c_void,
+ pvArg: *mut c_void,
+ pfnEnum: PFN_CERT_ENUM_SYSTEM_STORE,
+ ) -> BOOL;
+ pub fn CertEnumPhysicalStore(
+ pvSystemStore: *const c_void,
+ dwFlags: DWORD,
+ pvArg: *mut c_void,
+ pfnEnum: PFN_CERT_ENUM_PHYSICAL_STORE,
+ ) -> BOOL;
+}
+pub const CRYPT_OID_OPEN_SYSTEM_STORE_PROV_FUNC: &'static str = "CertDllOpenSystemStoreProv";
+pub const CRYPT_OID_REGISTER_SYSTEM_STORE_FUNC: &'static str = "CertDllRegisterSystemStore";
+pub const CRYPT_OID_UNREGISTER_SYSTEM_STORE_FUNC: &'static str = "CertDllUnregisterSystemStore";
+pub const CRYPT_OID_ENUM_SYSTEM_STORE_FUNC: &'static str = "CertDllEnumSystemStore";
+pub const CRYPT_OID_REGISTER_PHYSICAL_STORE_FUNC: &'static str = "CertDllRegisterPhysicalStore";
+pub const CRYPT_OID_UNREGISTER_PHYSICAL_STORE_FUNC: &'static str
+ = "CertDllUnregisterPhysicalStore";
+pub const CRYPT_OID_ENUM_PHYSICAL_STORE_FUNC: &'static str = "CertDllEnumPhysicalStore";
+pub const CRYPT_OID_SYSTEM_STORE_LOCATION_VALUE_NAME: &'static str = "SystemStoreLocation";
+extern "system" {
+ pub fn CertGetEnhancedKeyUsage(
+ pCertContext: PCCERT_CONTEXT,
+ dwFlags: DWORD,
+ pUsage: PCERT_ENHKEY_USAGE,
+ pcbUsage: *mut DWORD,
+ ) -> BOOL;
+ pub fn CertSetEnhancedKeyUsage(
+ pCertContext: PCCERT_CONTEXT,
+ pUsage: PCERT_ENHKEY_USAGE,
+ ) -> BOOL;
+ pub fn CertAddEnhancedKeyUsageIdentifier(
+ pCertContext: PCCERT_CONTEXT,
+ pszUsageIdentifier: LPCSTR,
+ ) -> BOOL;
+ pub fn CertRemoveEnhancedKeyUsageIdentifier(
+ pCertContext: PCCERT_CONTEXT,
+ pszUsageIdentifier: LPCSTR,
+ ) -> BOOL;
+ pub fn CertGetValidUsages(
+ cCerts: DWORD,
+ rghCerts: *mut PCCERT_CONTEXT,
+ cNumOIDs: *mut c_int,
+ rghOIDs: *mut LPSTR,
+ pcbOIDs: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptMsgGetAndVerifySigner(
+ hCryptMsg: HCRYPTMSG,
+ cSignerStore: DWORD,
+ rghSignerStore: *mut HCERTSTORE,
+ dwFlags: DWORD,
+ ppSigner: *mut PCCERT_CONTEXT,
+ pdwSignerIndex: *mut DWORD,
+ ) -> BOOL;
+}
+pub const CMSG_TRUSTED_SIGNER_FLAG: DWORD = 0x1;
+pub const CMSG_SIGNER_ONLY_FLAG: DWORD = 0x2;
+pub const CMSG_USE_SIGNER_INDEX_FLAG: DWORD = 0x4;
+extern "system" {
+ pub fn CryptMsgSignCTL(
+ dwMsgEncodingType: DWORD,
+ pbCtlContent: *mut BYTE,
+ cbCtlContent: DWORD,
+ pSignInfo: PCMSG_SIGNED_ENCODE_INFO,
+ dwFlags: DWORD,
+ pbEncoded: *mut BYTE,
+ pcbEncoded: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptMsgEncodeAndSignCTL(
+ dwMsgEncodingType: DWORD,
+ pCtlInfo: PCTL_INFO,
+ pSignInfo: PCMSG_SIGNED_ENCODE_INFO,
+ dwFlags: DWORD,
+ pbEncoded: *mut BYTE,
+ pcbEncoded: *mut DWORD,
+ ) -> BOOL;
+}
+pub const CMSG_ENCODE_SORTED_CTL_FLAG: DWORD = 0x1;
+pub const CMSG_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG: DWORD = 0x2;
+extern "system" {
+ pub fn CertFindSubjectInSortedCTL(
+ pSubjectIdentifier: PCRYPT_DATA_BLOB,
+ pCtlContext: PCCTL_CONTEXT,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+ pEncodedAttributes: PCRYPT_DER_BLOB,
+ ) -> BOOL;
+ pub fn CertEnumSubjectInSortedCTL(
+ pCtlContext: PCCTL_CONTEXT,
+ ppvNextSubject: *mut *mut c_void,
+ pSubjectIdentifier: PCRYPT_DER_BLOB,
+ pEncodedAttributes: PCRYPT_DER_BLOB,
+ ) -> BOOL;
+}
+STRUCT!{struct CTL_VERIFY_USAGE_PARA {
+ cbSize: DWORD,
+ ListIdentifier: CRYPT_DATA_BLOB,
+ cCtlStore: DWORD,
+ rghCtlStore: *mut HCERTSTORE,
+ cSignerStore: DWORD,
+ rghSignerStore: *mut HCERTSTORE,
+}}
+pub type PCTL_VERIFY_USAGE_PARA = *mut CTL_VERIFY_USAGE_PARA;
+STRUCT!{struct CTL_VERIFY_USAGE_STATUS {
+ cbSize: DWORD,
+ dwError: DWORD,
+ dwFlags: DWORD,
+ ppCtl: *mut PCCTL_CONTEXT,
+ dwCtlEntryIndex: DWORD,
+ ppSigner: *mut PCCERT_CONTEXT,
+ dwSignerIndex: DWORD,
+}}
+pub type PCTL_VERIFY_USAGE_STATUS = *mut CTL_VERIFY_USAGE_STATUS;
+pub const CERT_VERIFY_INHIBIT_CTL_UPDATE_FLAG: DWORD = 0x1;
+pub const CERT_VERIFY_TRUSTED_SIGNERS_FLAG: DWORD = 0x2;
+pub const CERT_VERIFY_NO_TIME_CHECK_FLAG: DWORD = 0x4;
+pub const CERT_VERIFY_ALLOW_MORE_USAGE_FLAG: DWORD = 0x8;
+pub const CERT_VERIFY_UPDATED_CTL_FLAG: DWORD = 0x1;
+extern "system" {
+ pub fn CertVerifyCTLUsage(
+ dwEncodingType: DWORD,
+ dwSubjectType: DWORD,
+ pvSubject: *mut c_void,
+ pSubjectUsage: PCTL_USAGE,
+ dwFlags: DWORD,
+ pVerifyUsagePara: PCTL_VERIFY_USAGE_PARA,
+ pVerifyUsageStatus: PCTL_VERIFY_USAGE_STATUS,
+ ) -> BOOL;
+}
+STRUCT!{struct CERT_REVOCATION_CRL_INFO {
+ cbSize: DWORD,
+ pBaseCrlContext: PCCRL_CONTEXT,
+ pDeltaCrlContext: PCCRL_CONTEXT,
+ pCrlEntry: PCRL_ENTRY,
+ fDeltaCrlEntry: BOOL,
+}}
+pub type PCERT_REVOCATION_CRL_INFO = *mut CERT_REVOCATION_CRL_INFO;
+pub type PCERT_REVOCATION_CHAIN_PARA = *mut CERT_REVOCATION_CHAIN_PARA;
+STRUCT!{struct CERT_REVOCATION_PARA {
+ cbSize: DWORD,
+ pIssuerCert: PCCERT_CONTEXT,
+ cCertStore: DWORD,
+ rgCertStore: *mut HCERTSTORE,
+ hCrlStore: HCERTSTORE,
+ pftTimeToUse: LPFILETIME,
+ dwUrlRetrievalTimeout: DWORD,
+ fCheckFreshnessTime: BOOL,
+ dwFreshnessTime: DWORD,
+ pftCurrentTime: LPFILETIME,
+ pCrlInfo: PCERT_REVOCATION_CRL_INFO,
+ pftCacheResync: LPFILETIME,
+ pChainPara: PCERT_REVOCATION_CHAIN_PARA,
+}}
+pub type PCERT_REVOCATION_PARA = *mut CERT_REVOCATION_PARA;
+STRUCT!{struct CERT_REVOCATION_STATUS {
+ cbSize: DWORD,
+ dwIndex: DWORD,
+ dwError: DWORD,
+ dwReason: DWORD,
+ fHasFreshnessTime: BOOL,
+ dwFreshnessTime: DWORD,
+}}
+pub type PCERT_REVOCATION_STATUS = *mut CERT_REVOCATION_STATUS;
+extern "system" {
+ pub fn CertVerifyRevocation(
+ dwEncodingType: DWORD,
+ dwRevType: DWORD,
+ cContext: DWORD,
+ rgpvContext: *mut PVOID,
+ dwFlags: DWORD,
+ pRevPara: PCERT_REVOCATION_PARA,
+ pRevStatus: PCERT_REVOCATION_STATUS,
+ ) -> BOOL;
+}
+pub const CERT_CONTEXT_REVOCATION_TYPE: DWORD = 1;
+pub const CERT_VERIFY_REV_CHAIN_FLAG: DWORD = 0x00000001;
+pub const CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION: DWORD = 0x00000002;
+pub const CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG: DWORD = 0x00000004;
+pub const CERT_VERIFY_REV_SERVER_OCSP_FLAG: DWORD = 0x00000008;
+pub const CERT_VERIFY_REV_NO_OCSP_FAILOVER_TO_CRL_FLAG: DWORD = 0x00000010;
+extern "system" {
+ pub fn CertCompareIntegerBlob(
+ pInt1: PCRYPT_INTEGER_BLOB,
+ pInt2: PCRYPT_INTEGER_BLOB,
+ ) -> BOOL;
+ pub fn CertCompareCertificate(
+ dwCertEncodingType: DWORD,
+ pCertId1: PCERT_INFO,
+ pCertId2: PCERT_INFO,
+ ) -> BOOL;
+ pub fn CertCompareCertificateName(
+ dwCertEncodingType: DWORD,
+ pCertName1: PCERT_NAME_BLOB,
+ pCertName2: PCERT_NAME_BLOB,
+ ) -> BOOL;
+ pub fn CertIsRDNAttrsInCertificateName(
+ dwCertEncodingType: DWORD,
+ dwFlags: DWORD,
+ pCertName: PCERT_NAME_BLOB,
+ pRDN: PCERT_RDN,
+ ) -> BOOL;
+ pub fn CertComparePublicKeyInfo(
+ dwCertEncodingType: DWORD,
+ pPublicKey1: PCERT_PUBLIC_KEY_INFO,
+ pPublicKey2: PCERT_PUBLIC_KEY_INFO,
+ ) -> BOOL;
+ pub fn CertGetPublicKeyLength(
+ dwCertEncodingType: DWORD,
+ pPublicKey: PCERT_PUBLIC_KEY_INFO,
+ ) -> DWORD;
+ pub fn CryptVerifyCertificateSignature(
+ hCryptProv: HCRYPTPROV_LEGACY,
+ dwCertEncodingType: DWORD,
+ pbEncoded: *const BYTE,
+ cbEncoded: DWORD,
+ pPublicKey: PCERT_PUBLIC_KEY_INFO,
+ ) -> BOOL;
+ pub fn CryptVerifyCertificateSignatureEx(
+ hCryptProv: HCRYPTPROV_LEGACY,
+ dwCertEncodingType: DWORD,
+ dwSubjectType: DWORD,
+ pvSubject: *mut c_void,
+ dwIssuerType: DWORD,
+ pvIssuer: *mut c_void,
+ dwFlags: DWORD,
+ pvExtra: *mut c_void,
+ ) -> BOOL;
+}
+pub const CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB: DWORD = 1;
+pub const CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT: DWORD = 2;
+pub const CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL: DWORD = 3;
+pub const CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE: DWORD = 4;
+pub const CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY: DWORD = 1;
+pub const CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT: DWORD = 2;
+pub const CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN: DWORD = 3;
+pub const CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL: DWORD = 4;
+pub const CRYPT_VERIFY_CERT_SIGN_DISABLE_MD2_MD4_FLAG: DWORD = 0x00000001;
+pub const CRYPT_VERIFY_CERT_SIGN_SET_STRONG_PROPERTIES_FLAG: DWORD = 0x00000002;
+pub const CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG: DWORD = 0x00000004;
+STRUCT!{struct CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO {
+ CertSignHashCNGAlgPropData: CRYPT_DATA_BLOB,
+ CertIssuerPubKeyBitLengthPropData: CRYPT_DATA_BLOB,
+}}
+pub type PCRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO
+ = *mut CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO;
+STRUCT!{struct CRYPT_VERIFY_CERT_SIGN_WEAK_HASH_INFO {
+ cCNGHashAlgid: DWORD,
+ rgpwszCNGHashAlgid: *mut PCWSTR,
+ dwWeakIndex: DWORD,
+}}
+pub type PCRYPT_VERIFY_CERT_SIGN_WEAK_HASH_INFO = *mut CRYPT_VERIFY_CERT_SIGN_WEAK_HASH_INFO;
+extern "system" {
+ pub fn CertIsStrongHashToSign(
+ pStrongSignPara: PCCERT_STRONG_SIGN_PARA,
+ pwszCNGHashAlgid: LPCWSTR,
+ pSigningCert: PCCERT_CONTEXT,
+ ) -> BOOL;
+ pub fn CryptHashToBeSigned(
+ hCryptProv: HCRYPTPROV_LEGACY,
+ dwCertEncodingType: DWORD,
+ pbEncoded: *const BYTE,
+ cbEncoded: DWORD,
+ pbComputedHash: *mut BYTE,
+ pcbComputedHash: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptHashCertificate(
+ hCryptProv: HCRYPTPROV_LEGACY,
+ Algid: ALG_ID,
+ dwFlags: DWORD,
+ pbEncoded: *const BYTE,
+ cbEncoded: DWORD,
+ pbComputedHash: *mut BYTE,
+ pcbComputedHash: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptHashCertificate2(
+ pwszCNGHashAlgid: LPCWSTR,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+ pbEncoded: *const BYTE,
+ cbEncoded: DWORD,
+ pbComputedHash: *mut BYTE,
+ pcbComputedHash: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptSignCertificate(
+ hCryptProvOrNCryptKey: HCRYPTPROV_OR_NCRYPT_KEY_HANDLE,
+ dwKeySpec: DWORD,
+ dwCertEncodingType: DWORD,
+ pbEncodedToBeSigned: *const BYTE,
+ cbEncodedToBeSigned: DWORD,
+ pSignatureAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
+ pvHashAuxInfo: *const c_void,
+ pbSignature: *mut BYTE,
+ pcbSignature: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptSignAndEncodeCertificate(
+ hCryptProvOrNCryptKey: HCRYPTPROV_OR_NCRYPT_KEY_HANDLE,
+ dwKeySpec: DWORD,
+ dwCertEncodingType: DWORD,
+ lpszStructType: LPCSTR,
+ pvStructInfo: *const c_void,
+ pSignatureAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
+ pvHashAuxInfo: *const c_void,
+ pbEncoded: *mut BYTE,
+ pcbEncoded: *mut DWORD,
+ ) -> BOOL;
+}
+pub const CRYPT_OID_EXTRACT_ENCODED_SIGNATURE_PARAMETERS_FUNC: &'static str
+ = "CryptDllExtractEncodedSignatureParameters";
+FN!{stdcall PFN_CRYPT_EXTRACT_ENCODED_SIGNATURE_PARAMETERS_FUNC(
+ dwCertEncodingType: DWORD,
+ pSignatureAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
+ ppvDecodedSignPara: *mut *mut c_void,
+ ppwszCNGHashAlgid: LPWSTR,
+) -> BOOL}
+pub const CRYPT_OID_SIGN_AND_ENCODE_HASH_FUNC: &'static str = "CryptDllSignAndEncodeHash";
+FN!{stdcall PFN_CRYPT_SIGN_AND_ENCODE_HASH_FUNC(
+ hKey: NCRYPT_KEY_HANDLE,
+ dwCertEncodingType: DWORD,
+ pSignatureAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
+ pvDecodedSignPara: *mut c_void,
+ pwszCNGPubKeyAlgid: LPCWSTR,
+ pwszCNGHashAlgid: LPCWSTR,
+ pbComputedHash: *mut BYTE,
+ cbComputedHash: DWORD,
+ pbSignature: *mut BYTE,
+ pcbSignature: *mut DWORD,
+) -> BOOL}
+pub const CRYPT_OID_VERIFY_ENCODED_SIGNATURE_FUNC: &'static str = "CryptDllVerifyEncodedSignature";
+FN!{stdcall PFN_CRYPT_VERIFY_ENCODED_SIGNATURE_FUNC(
+ dwCertEncodingType: DWORD,
+ pPubKeyInfo: PCERT_PUBLIC_KEY_INFO,
+ pSignatureAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
+ pvDecodedSignPara: *mut c_void,
+ pwszCNGPubKeyAlgid: LPCWSTR,
+ pwszCNGHashAlgid: LPCWSTR,
+ pbComputedHash: *mut BYTE,
+ cbComputedHash: DWORD,
+ pbSignature: *mut BYTE,
+ cbSignature: DWORD,
+) -> BOOL}
+extern "system" {
+ pub fn CertVerifyTimeValidity(
+ pTimeToVerify: LPFILETIME,
+ pCertInfo: PCERT_INFO,
+ ) -> LONG;
+ pub fn CertVerifyCRLTimeValidity(
+ pTimeToVerify: LPFILETIME,
+ pCrlInfo: PCRL_INFO,
+ ) -> LONG;
+ pub fn CertVerifyValidityNesting(
+ pSubjectInfo: PCERT_INFO,
+ pIssuerInfo: PCERT_INFO,
+ ) -> BOOL;
+ pub fn CertVerifyCRLRevocation(
+ dwCertEncodingType: DWORD,
+ pCertId: PCERT_INFO,
+ cCrlInfo: DWORD,
+ rgpCrlInfo: *mut PCRL_INFO,
+ ) -> BOOL;
+ pub fn CertAlgIdToOID(
+ dwAlgId: DWORD,
+ ) -> LPCSTR;
+ pub fn CertOIDToAlgId(
+ pszObjId: LPCSTR,
+ ) -> DWORD;
+ pub fn CertFindExtension(
+ pszObjId: LPCSTR,
+ cExtensions: DWORD,
+ rgExtensions: *mut CERT_EXTENSION,
+ ) -> PCERT_EXTENSION;
+ pub fn CertFindAttribute(
+ pszObjId: LPCSTR,
+ cAttr: DWORD,
+ rgAttr: *mut CRYPT_ATTRIBUTE,
+ ) -> PCRYPT_ATTRIBUTE;
+ pub fn CertFindRDNAttr(
+ pszObjId: LPCSTR,
+ pName: PCERT_NAME_INFO,
+ ) -> PCERT_RDN_ATTR;
+ pub fn CertGetIntendedKeyUsage(
+ dwCertEncodingType: DWORD,
+ pCertInfo: PCERT_INFO,
+ pbKeyUsage: *mut BYTE,
+ cbKeyUsage: DWORD,
+ ) -> BOOL;
+}
+pub type HCRYPTDEFAULTCONTEXT = *mut c_void;
+extern "system" {
+ pub fn CryptInstallDefaultContext(
+ hCryptProv: HCRYPTPROV,
+ dwDefaultType: DWORD,
+ pvDefaultPara: *const c_void,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+ phDefaultContext: *mut HCRYPTDEFAULTCONTEXT,
+ ) -> BOOL;
+}
+pub const CRYPT_DEFAULT_CONTEXT_AUTO_RELEASE_FLAG: DWORD = 0x00000001;
+pub const CRYPT_DEFAULT_CONTEXT_PROCESS_FLAG: DWORD = 0x00000002;
+pub const CRYPT_DEFAULT_CONTEXT_CERT_SIGN_OID: DWORD = 1;
+pub const CRYPT_DEFAULT_CONTEXT_MULTI_CERT_SIGN_OID: DWORD = 2;
+STRUCT!{struct CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA {
+ cOID: DWORD,
+ rgpszOID: *mut LPSTR,
+}}
+pub type PCRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA = *mut CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA;
+extern "system" {
+ pub fn CryptUninstallDefaultContext(
+ hDefaultContext: HCRYPTDEFAULTCONTEXT,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+ ) -> BOOL;
+ pub fn CryptExportPublicKeyInfo(
+ hCryptProvOrNCryptKey: HCRYPTPROV_OR_NCRYPT_KEY_HANDLE,
+ dwKeySpec: DWORD,
+ dwCertEncodingType: DWORD,
+ pInfo: PCERT_PUBLIC_KEY_INFO,
+ pcbInfo: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptExportPublicKeyInfoEx(
+ hCryptProvOrNCryptKey: HCRYPTPROV_OR_NCRYPT_KEY_HANDLE,
+ dwKeySpec: DWORD,
+ dwCertEncodingType: DWORD,
+ pszPublicKeyObjId: LPSTR,
+ dwFlags: DWORD,
+ pvAuxInfo: *mut c_void,
+ pInfo: PCERT_PUBLIC_KEY_INFO,
+ pcbInfo: *mut DWORD,
+ ) -> BOOL;
+}
+pub const CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC: &'static str = "CryptDllExportPublicKeyInfoEx";
+pub const CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_EX2_FUNC: &'static str
+ = "CryptDllExportPublicKeyInfoEx2";
+FN!{stdcall PFN_CRYPT_EXPORT_PUBLIC_KEY_INFO_EX2_FUNC(
+ hNCryptKey: NCRYPT_KEY_HANDLE,
+ dwCertEncodingType: DWORD,
+ pszPublicKeyObjId: LPSTR,
+ dwFlags: DWORD,
+ pvAuxInfo: *mut c_void,
+ pInfo: PCERT_PUBLIC_KEY_INFO,
+ pcbInfo: *mut DWORD,
+) -> BOOL}
+extern "system" {
+ pub fn CryptExportPublicKeyInfoFromBCryptKeyHandle(
+ hBCryptKey: BCRYPT_KEY_HANDLE,
+ dwCertEncodingType: DWORD,
+ pszPublicKeyObjId: LPSTR,
+ dwFlags: DWORD,
+ pvAuxInfo: *mut c_void,
+ pInfo: PCERT_PUBLIC_KEY_INFO,
+ pcbInfo: *mut DWORD,
+ ) -> BOOL;
+}
+pub const CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FROM_BCRYPT_HANDLE_FUNC: &'static str
+ = "CryptDllExportPublicKeyInfoFromBCryptKeyHandle";
+FN!{stdcall PFN_CRYPT_EXPORT_PUBLIC_KEY_INFO_FROM_BCRYPT_HANDLE_FUNC(
+ hBCryptKey: BCRYPT_KEY_HANDLE,
+ dwCertEncodingType: DWORD,
+ pszPublicKeyObjId: LPSTR,
+ dwFlags: DWORD,
+ pvAuxInfo: *mut c_void,
+ pInfo: PCERT_PUBLIC_KEY_INFO,
+ pcbInfo: *mut DWORD,
+) -> BOOL}
+extern "system" {
+ pub fn CryptImportPublicKeyInfo(
+ hCryptProv: HCRYPTPROV,
+ dwCertEncodingType: DWORD,
+ pInfo: PCERT_PUBLIC_KEY_INFO,
+ phKey: *mut HCRYPTKEY,
+ ) -> BOOL;
+}
+pub const CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_FUNC: &'static str = "CryptDllImportPublicKeyInfoEx";
+extern "system" {
+ pub fn CryptImportPublicKeyInfoEx(
+ hCryptProv: HCRYPTPROV,
+ dwCertEncodingType: DWORD,
+ pInfo: PCERT_PUBLIC_KEY_INFO,
+ aiKeyAlg: ALG_ID,
+ dwFlags: DWORD,
+ pvAuxInfo: *mut c_void,
+ phKey: *mut HCRYPTKEY,
+ ) -> BOOL;
+ pub fn CryptImportPublicKeyInfoEx2(
+ dwCertEncodingType: DWORD,
+ pInfo: PCERT_PUBLIC_KEY_INFO,
+ dwFlags: DWORD,
+ pvAuxInfo: *mut c_void,
+ phKey: *mut BCRYPT_KEY_HANDLE,
+ ) -> BOOL;
+}
+pub const CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_EX2_FUNC: &'static str
+ = "CryptDllImportPublicKeyInfoEx2";
+FN!{stdcall PFN_IMPORT_PUBLIC_KEY_INFO_EX2_FUNC(
+ dwCertEncodingType: DWORD,
+ pInfo: PCERT_PUBLIC_KEY_INFO,
+ dwFlags: DWORD,
+ pvAuxInfo: *mut c_void,
+ phKey: *mut BCRYPT_KEY_HANDLE,
+) -> BOOL}
+extern "system" {
+ pub fn CryptAcquireCertificatePrivateKey(
+ pCert: PCCERT_CONTEXT,
+ dwFlags: DWORD,
+ pvParameters: *mut c_void,
+ phCryptProvOrNCryptKey: *mut HCRYPTPROV_OR_NCRYPT_KEY_HANDLE,
+ pdwKeySpec: *mut DWORD,
+ pfCallerFreeProvOrNCryptKey: *mut BOOL,
+ ) -> BOOL;
+}
+pub const CRYPT_ACQUIRE_CACHE_FLAG: DWORD = 0x00000001;
+pub const CRYPT_ACQUIRE_USE_PROV_INFO_FLAG: DWORD = 0x00000002;
+pub const CRYPT_ACQUIRE_COMPARE_KEY_FLAG: DWORD = 0x00000004;
+pub const CRYPT_ACQUIRE_NO_HEALING: DWORD = 0x00000008;
+pub const CRYPT_ACQUIRE_SILENT_FLAG: DWORD = 0x00000040;
+pub const CRYPT_ACQUIRE_WINDOW_HANDLE_FLAG: DWORD = 0x00000080;
+pub const CRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_MASK: DWORD = 0x00070000;
+pub const CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG: DWORD = 0x00010000;
+pub const CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG: DWORD = 0x00020000;
+pub const CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG: DWORD = 0x00040000;
+extern "system" {
+ pub fn CryptFindCertificateKeyProvInfo(
+ pCert: PCCERT_CONTEXT,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+ ) -> BOOL;
+}
+pub const CRYPT_FIND_USER_KEYSET_FLAG: DWORD = 0x00000001;
+pub const CRYPT_FIND_MACHINE_KEYSET_FLAG: DWORD = 0x00000002;
+pub const CRYPT_FIND_SILENT_KEYSET_FLAG: DWORD = 0x00000040;
+FN!{stdcall PFN_IMPORT_PRIV_KEY_FUNC(
+ hCryptProv: HCRYPTPROV,
+ pPrivateKeyInfo: *mut CRYPT_PRIVATE_KEY_INFO,
+ dwFlags: DWORD,
+ pvAuxInfo: *mut c_void,
+) -> BOOL}
+pub const CRYPT_OID_IMPORT_PRIVATE_KEY_INFO_FUNC: &'static str = "CryptDllImportPrivateKeyInfoEx";
+extern "system" {
+ pub fn CryptImportPKCS8(
+ sPrivateKeyAndParams: CRYPT_PKCS8_IMPORT_PARAMS,
+ dwFlags: DWORD,
+ phCryptProv: *mut HCRYPTPROV,
+ pvAuxInfo: *mut c_void,
+ ) -> BOOL;
+}
+FN!{stdcall PFN_EXPORT_PRIV_KEY_FUNC(
+ hCryptProv: HCRYPTPROV,
+ dwKeySpec: DWORD,
+ pszPrivateKeyObjId: LPSTR,
+ dwFlags: DWORD,
+ pvAuxInfo: *mut c_void,
+ pPrivateKeyInfo: *mut CRYPT_PRIVATE_KEY_INFO,
+ pcbPrivateKeyInfo: *mut DWORD,
+) -> BOOL}
+pub const CRYPT_OID_EXPORT_PRIVATE_KEY_INFO_FUNC: &'static str = "CryptDllExportPrivateKeyInfoEx";
+pub const CRYPT_DELETE_KEYSET: DWORD = CRYPT_DELETEKEYSET;
+extern "system" {
+ pub fn CryptExportPKCS8(
+ hCryptProv: HCRYPTPROV,
+ dwKeySpec: DWORD,
+ pszPrivateKeyObjId: LPSTR,
+ dwFlags: DWORD,
+ pvAuxInfo: *mut c_void,
+ pbPrivateKeyBlob: *mut BYTE,
+ pcbPrivateKeyBlob: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptExportPKCS8Ex(
+ psExportParams: CRYPT_PKCS8_EXPORT_PARAMS,
+ dwKeySpec: DWORD,
+ pvAuxInfo: *mut c_void,
+ pbPrivateKeyBlob: *mut BYTE,
+ pcbPrivateKeyBlob: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptHashPublicKeyInfo(
+ hCryptProv: HCRYPTPROV_LEGACY,
+ Algid: ALG_ID,
+ dwFlags: DWORD,
+ dwCertEncodingType: DWORD,
+ pInfo: PCERT_PUBLIC_KEY_INFO,
+ pbComputedHash: *mut BYTE,
+ pcbComputedHash: *mut DWORD,
+ ) -> BOOL;
+ pub fn CertRDNValueToStrA(
+ dwValueType: DWORD,
+ pValue: PCERT_RDN_VALUE_BLOB,
+ psz: LPSTR,
+ csz: DWORD,
+ ) -> DWORD;
+ pub fn CertRDNValueToStrW(
+ dwValueType: DWORD,
+ pValue: PCERT_RDN_VALUE_BLOB,
+ psz: LPWSTR,
+ csz: DWORD,
+ ) -> DWORD;
+ pub fn CertNameToStrA(
+ dwCertEncodingType: DWORD,
+ pName: PCERT_NAME_BLOB,
+ dwStrType: DWORD,
+ psz: LPSTR,
+ csz: DWORD,
+ ) -> DWORD;
+ pub fn CertNameToStrW(
+ dwCertEncodingType: DWORD,
+ pName: PCERT_NAME_BLOB,
+ dwStrType: DWORD,
+ psz: LPWSTR,
+ csz: DWORD,
+ ) -> DWORD;
+}
+pub const CERT_SIMPLE_NAME_STR: DWORD = 1;
+pub const CERT_OID_NAME_STR: DWORD = 2;
+pub const CERT_X500_NAME_STR: DWORD = 3;
+pub const CERT_XML_NAME_STR: DWORD = 4;
+pub const CERT_NAME_STR_SEMICOLON_FLAG: DWORD = 0x40000000;
+pub const CERT_NAME_STR_NO_PLUS_FLAG: DWORD = 0x20000000;
+pub const CERT_NAME_STR_NO_QUOTING_FLAG: DWORD = 0x10000000;
+pub const CERT_NAME_STR_CRLF_FLAG: DWORD = 0x08000000;
+pub const CERT_NAME_STR_COMMA_FLAG: DWORD = 0x04000000;
+pub const CERT_NAME_STR_REVERSE_FLAG: DWORD = 0x02000000;
+pub const CERT_NAME_STR_FORWARD_FLAG: DWORD = 0x01000000;
+pub const CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG: DWORD = 0x00010000;
+pub const CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG: DWORD = 0x00020000;
+pub const CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG: DWORD = 0x00040000;
+pub const CERT_NAME_STR_FORCE_UTF8_DIR_STR_FLAG: DWORD = 0x00080000;
+pub const CERT_NAME_STR_DISABLE_UTF8_DIR_STR_FLAG: DWORD = 0x00100000;
+pub const CERT_NAME_STR_ENABLE_PUNYCODE_FLAG: DWORD = 0x00200000;
+extern "system" {
+ pub fn CertStrToNameA(
+ dwCertEncodingType: DWORD,
+ pszX500: LPCSTR,
+ dwStrType: DWORD,
+ pvReserved: *mut c_void,
+ pbEncoded: *mut BYTE,
+ pcbEncoded: *mut DWORD,
+ ppszError: *mut LPCSTR,
+ ) -> BOOL;
+ pub fn CertStrToNameW(
+ dwCertEncodingType: DWORD,
+ pszX500: LPCWSTR,
+ dwStrType: DWORD,
+ pvReserved: *mut c_void,
+ pbEncoded: *mut BYTE,
+ pcbEncoded: *mut DWORD,
+ ppszError: *mut LPCWSTR,
+ ) -> BOOL;
+ pub fn CertGetNameStringA(
+ pCertContext: PCCERT_CONTEXT,
+ dwType: DWORD,
+ dwFlags: DWORD,
+ pvTypePara: *mut c_void,
+ pszNameString: LPSTR,
+ cchNameString: DWORD,
+ ) -> DWORD;
+ pub fn CertGetNameStringW(
+ pCertContext: PCCERT_CONTEXT,
+ dwType: DWORD,
+ dwFlags: DWORD,
+ pvTypePara: *mut c_void,
+ pszNameString: LPWSTR,
+ cchNameString: DWORD,
+ ) -> DWORD;
+}
+pub const CERT_NAME_EMAIL_TYPE: DWORD = 1;
+pub const CERT_NAME_RDN_TYPE: DWORD = 2;
+pub const CERT_NAME_ATTR_TYPE: DWORD = 3;
+pub const CERT_NAME_SIMPLE_DISPLAY_TYPE: DWORD = 4;
+pub const CERT_NAME_FRIENDLY_DISPLAY_TYPE: DWORD = 5;
+pub const CERT_NAME_DNS_TYPE: DWORD = 6;
+pub const CERT_NAME_URL_TYPE: DWORD = 7;
+pub const CERT_NAME_UPN_TYPE: DWORD = 8;
+pub const CERT_NAME_ISSUER_FLAG: DWORD = 0x1;
+pub const CERT_NAME_DISABLE_IE4_UTF8_FLAG: DWORD = 0x00010000;
+pub const CERT_NAME_SEARCH_ALL_NAMES_FLAG: DWORD = 0x2;
+FN!{stdcall PFN_CRYPT_GET_SIGNER_CERTIFICATE(
+ pvGetArg: *mut c_void,
+ dwCertEncodingType: DWORD,
+ pSignerId: PCERT_INFO,
+ hMsgCertStore: HCERTSTORE,
+) -> PCCERT_CONTEXT}
+STRUCT!{struct CRYPT_SIGN_MESSAGE_PARA {
+ cbSize: DWORD,
+ dwMsgEncodingType: DWORD,
+ pSigningCert: PCCERT_CONTEXT,
+ HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ pvHashAuxInfo: *mut c_void,
+ cMsgCert: DWORD,
+ rgpMsgCert: *mut PCCERT_CONTEXT,
+ cMsgCrl: DWORD,
+ rgpMsgCrl: *mut PCCRL_CONTEXT,
+ cAuthAttr: DWORD,
+ rgAuthAttr: PCRYPT_ATTRIBUTE,
+ cUnauthAttr: DWORD,
+ rgUnauthAttr: PCRYPT_ATTRIBUTE,
+ dwFlags: DWORD,
+ dwInnerContentType: DWORD,
+ HashEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ pvHashEncryptionAuxInfo: *mut c_void,
+}}
+pub type PCRYPT_SIGN_MESSAGE_PARA = *mut CRYPT_SIGN_MESSAGE_PARA;
+pub const CRYPT_MESSAGE_BARE_CONTENT_OUT_FLAG: DWORD = 0x00000001;
+pub const CRYPT_MESSAGE_ENCAPSULATED_CONTENT_OUT_FLAG: DWORD = 0x00000002;
+pub const CRYPT_MESSAGE_KEYID_SIGNER_FLAG: DWORD = 0x00000004;
+pub const CRYPT_MESSAGE_SILENT_KEYSET_FLAG: DWORD = 0x00000040;
+STRUCT!{struct CRYPT_VERIFY_MESSAGE_PARA {
+ cbSize: DWORD,
+ dwMsgAndCertEncodingType: DWORD,
+ hCryptProv: HCRYPTPROV_LEGACY,
+ pfnGetSignerCertificate: PFN_CRYPT_GET_SIGNER_CERTIFICATE,
+ pvGetArg: *mut c_void,
+ pStrongSignPara: PCCERT_STRONG_SIGN_PARA,
+}}
+pub type PCRYPT_VERIFY_MESSAGE_PARA = *mut CRYPT_VERIFY_MESSAGE_PARA;
+STRUCT!{struct CRYPT_ENCRYPT_MESSAGE_PARA {
+ cbSize: DWORD,
+ dwMsgEncodingType: DWORD,
+ hCryptProv: HCRYPTPROV_LEGACY,
+ ContentEncryptionAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ pvEncryptionAuxInfo: *mut c_void,
+ dwFlags: DWORD,
+ dwInnerContentType: DWORD,
+}}
+pub type PCRYPT_ENCRYPT_MESSAGE_PARA = *mut CRYPT_DECRYPT_MESSAGE_PARA;
+pub const CRYPT_MESSAGE_KEYID_RECIPIENT_FLAG: DWORD = 0x4;
+STRUCT!{struct CRYPT_DECRYPT_MESSAGE_PARA {
+ cbSize: DWORD,
+ dwMsgAndCertEncodingType: DWORD,
+ cCertStore: DWORD,
+ rghCertStore: *mut HCERTSTORE,
+ dwFlags: DWORD,
+}}
+pub type PCRYPT_DECRYPT_MESSAGE_PARA = *mut CRYPT_DECRYPT_MESSAGE_PARA;
+STRUCT!{struct CRYPT_HASH_MESSAGE_PARA {
+ cbSize: DWORD,
+ dwMsgEncodingType: DWORD,
+ hCryptProv: HCRYPTPROV_LEGACY,
+ HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ pvHashAuxInfo: *mut c_void,
+}}
+pub type PCRYPT_HASH_MESSAGE_PARA = *mut CRYPT_HASH_MESSAGE_PARA;
+UNION!{union CRYPT_KEY_SIGN_MESSAGE_PARA_u {
+ [usize; 1],
+ hCryptProv hCryptProv_mut: HCRYPTPROV,
+ hNCryptKey hNCryptKey_mut: NCRYPT_KEY_HANDLE,
+}}
+STRUCT!{struct CRYPT_KEY_SIGN_MESSAGE_PARA {
+ cbSize: DWORD,
+ dwMsgAndCertEncodingType: DWORD,
+ u: CRYPT_KEY_SIGN_MESSAGE_PARA_u,
+ dwKeySpec: DWORD,
+ HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ pvHashAuxInfo: *mut c_void,
+ PubKeyAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+}}
+pub type PCRYPT_KEY_SIGN_MESSAGE_PARA = *mut CRYPT_KEY_SIGN_MESSAGE_PARA;
+STRUCT!{struct CRYPT_KEY_VERIFY_MESSAGE_PARA {
+ cbSize: DWORD,
+ dwMsgEncodingType: DWORD,
+ hCryptProv: HCRYPTPROV_LEGACY,
+}}
+pub type PCRYPT_KEY_VERIFY_MESSAGE_PARA = *mut CRYPT_KEY_VERIFY_MESSAGE_PARA;
+extern "system" {
+ pub fn CryptSignMessage(
+ pSignPara: PCRYPT_SIGN_MESSAGE_PARA,
+ fDetachedSignature: BOOL,
+ cToBeSigned: DWORD,
+ rgpbToBeSigned: *mut *const BYTE,
+ rgcbToBeSigned: *mut DWORD,
+ pbSignedBlob: *mut BYTE,
+ pcbSignedBlob: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptVerifyMessageSignature(
+ pVerifyPara: PCRYPT_VERIFY_MESSAGE_PARA,
+ dwSignerIndex: DWORD,
+ pbSignedBlob: *const BYTE,
+ cbSignedBlob: DWORD,
+ pbDecoded: *mut BYTE,
+ pcbDecoded: *mut DWORD,
+ ppSignerCert: *mut PCCERT_CONTEXT,
+ ) -> BOOL;
+ pub fn CryptGetMessageSignerCount(
+ dwMsgEncodingType: DWORD,
+ pbSignedBlob: *const BYTE,
+ cbSignedBlob: DWORD,
+ ) -> LONG;
+ pub fn CryptGetMessageCertificates(
+ dwMsgAndCertEncodingType: DWORD,
+ hCryptProv: HCRYPTPROV_LEGACY,
+ dwFlags: DWORD,
+ pbSignedBlob: *const BYTE,
+ cbSignedBlob: DWORD,
+ ) -> HCERTSTORE;
+ pub fn CryptVerifyDetachedMessageSignature(
+ pVerifyPara: PCRYPT_VERIFY_MESSAGE_PARA,
+ dwSignerIndex: DWORD,
+ pbDetachedSignBlob: *const BYTE,
+ cbDetachedSignBlob: DWORD,
+ cToBeSigned: DWORD,
+ rgpbToBeSigned: *mut *const BYTE,
+ rgcbToBeSigned: *mut DWORD,
+ ppSignerCert: *mut PCCERT_CONTEXT,
+ ) -> BOOL;
+ pub fn CryptEncryptMessage(
+ pEncryptPara: PCRYPT_ENCRYPT_MESSAGE_PARA,
+ cRecipientCert: DWORD,
+ rgpRecipientCert: *mut PCCERT_CONTEXT,
+ pbToBeEncrypted: *const BYTE,
+ cbToBeEncrypted: DWORD,
+ pbEncryptedBlob: *mut BYTE,
+ pcbEncryptedBlob: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptDecryptMessage(
+ pDecryptPara: PCRYPT_DECRYPT_MESSAGE_PARA,
+ pbEncryptedBlob: *const BYTE,
+ cbEncryptedBlob: DWORD,
+ pbDecrypted: *mut BYTE,
+ pcbDecrypted: *mut DWORD,
+ ppXchgCert: *mut PCCERT_CONTEXT,
+ ) -> BOOL;
+ pub fn CryptSignAndEncryptMessage(
+ pSignPara: PCRYPT_SIGN_MESSAGE_PARA,
+ pEncryptPara: PCRYPT_ENCRYPT_MESSAGE_PARA,
+ cRecipientCert: DWORD,
+ rgpRecipientCert: *mut PCCERT_CONTEXT,
+ pbToBeSignedAndEncrypted: *const BYTE,
+ cbToBeSignedAndEncrypted: DWORD,
+ pbSignedAndEncryptedBlob: *mut BYTE,
+ pcbSignedAndEncryptedBlob: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptDecryptAndVerifyMessageSignature(
+ pDecryptPara: PCRYPT_DECRYPT_MESSAGE_PARA,
+ pVerifyPara: PCRYPT_VERIFY_MESSAGE_PARA,
+ dwSignerIndex: DWORD,
+ pbEncryptedBlob: *const BYTE,
+ cbEncryptedBlob: DWORD,
+ pbDecrypted: *mut BYTE,
+ pcbDecrypted: *mut DWORD,
+ ppXchgCert: *mut PCCERT_CONTEXT,
+ ppSignerCert: *mut PCCERT_CONTEXT,
+ ) -> BOOL;
+ pub fn CryptDecodeMessage(
+ dwMsgTypeFlags: DWORD,
+ pDecryptPara: PCRYPT_DECRYPT_MESSAGE_PARA,
+ pVerifyPara: PCRYPT_VERIFY_MESSAGE_PARA,
+ dwSignerIndex: DWORD,
+ pbEncodedBlob: *const BYTE,
+ cbEncodedBlob: DWORD,
+ dwPrevInnerContentType: DWORD,
+ pdwMsgType: *mut DWORD,
+ pdwInnerContentType: *mut DWORD,
+ pbDecoded: *mut BYTE,
+ pcbDecoded: *mut DWORD,
+ ppXchgCert: *mut PCCERT_CONTEXT,
+ ppSignerCert: *mut PCCERT_CONTEXT,
+ ) -> BOOL;
+ pub fn CryptHashMessage(
+ pHashPara: PCRYPT_HASH_MESSAGE_PARA,
+ fDetachedHash: BOOL,
+ cToBeHashed: DWORD,
+ rgpbToBeHashed: *mut *const BYTE,
+ rgcbToBeHashed: *mut DWORD,
+ pbHashedBlob: *mut BYTE,
+ pcbHashedBlob: *mut DWORD,
+ pbComputedHash: *mut BYTE,
+ pcbComputedHash: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptVerifyMessageHash(
+ pHashPara: PCRYPT_HASH_MESSAGE_PARA,
+ pbHashedBlob: *mut BYTE,
+ cbHashedBlob: DWORD,
+ pbToBeHashed: *mut BYTE,
+ pcbToBeHashed: *mut DWORD,
+ pbComputedHash: *mut BYTE,
+ pcbComputedHash: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptVerifyDetachedMessageHash(
+ pHashPara: PCRYPT_HASH_MESSAGE_PARA,
+ pbDetachedHashBlob: *mut BYTE,
+ cbDetachedHashBlob: DWORD,
+ cToBeHashed: DWORD,
+ rgpbToBeHashed: *mut *const BYTE,
+ rgcbToBeHashed: *mut DWORD,
+ pbComputedHash: *mut BYTE,
+ pcbComputedHash: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptSignMessageWithKey(
+ pSignPara: PCRYPT_KEY_SIGN_MESSAGE_PARA,
+ pbToBeSigned: *const BYTE,
+ cbToBeSigned: DWORD,
+ pbSignedBlob: *mut BYTE,
+ pcbSignedBlob: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptVerifyMessageSignatureWithKey(
+ pVerifyPara: PCRYPT_KEY_VERIFY_MESSAGE_PARA,
+ pPublicKeyInfo: PCERT_PUBLIC_KEY_INFO,
+ pbSignedBlob: *const BYTE,
+ cbSignedBlob: DWORD,
+ pbDecoded: *mut BYTE,
+ pcbDecoded: *mut DWORD,
+ ) -> BOOL;
+ pub fn CertOpenSystemStoreA(
+ hProv: HCRYPTPROV_LEGACY,
+ szSubsystemProtocol: LPCSTR,
+ ) -> HCERTSTORE;
+ pub fn CertOpenSystemStoreW(
+ hProv: HCRYPTPROV_LEGACY,
+ szSubsystemProtocol: LPCWSTR,
+ ) -> HCERTSTORE;
+ pub fn CertAddEncodedCertificateToSystemStoreA(
+ szCertStoreName: LPCSTR,
+ pbCertEncoded: *const BYTE,
+ cbCertEncoded: DWORD,
+ ) -> BOOL;
+ pub fn CertAddEncodedCertificateToSystemStoreW(
+ szCertStoreName: LPCWSTR,
+ pbCertEncoded: *const BYTE,
+ cbCertEncoded: DWORD,
+ ) -> BOOL;
+}
+STRUCT!{struct CERT_CHAIN {
+ cCerts: DWORD,
+ certs: PCERT_BLOB,
+ keyLocatorInfo: CRYPT_KEY_PROV_INFO,
+}}
+pub type PCERT_CHAIN = *mut CERT_CHAIN;
+extern "system" {
+ pub fn FindCertsByIssuer(
+ pCertChains: PCERT_CHAIN,
+ pcbCertChains: *mut DWORD,
+ pcCertChains: *mut DWORD,
+ pbEncodedIssuerName: *mut BYTE,
+ cbEncodedIssuerName: DWORD,
+ pwszPurpose: LPCWSTR,
+ dwKeySpec: DWORD,
+ ) -> HRESULT;
+ pub fn CryptQueryObject(
+ dwObjectType: DWORD,
+ pvObject: *const c_void,
+ dwExpectedContentTypeFlags: DWORD,
+ dwExpectedFormatTypeFlags: DWORD,
+ dwFlags: DWORD,
+ pdwMsgAndCertEncodingType: *mut DWORD,
+ pdwContentType: *mut DWORD,
+ pdwFormatType: *mut DWORD,
+ phCertStore: *mut HCERTSTORE,
+ phMsg: *mut HCRYPTMSG,
+ ppvContext: *mut *const c_void,
+ ) -> BOOL;
+}
+pub const CERT_QUERY_OBJECT_FILE: DWORD = 0x00000001;
+pub const CERT_QUERY_OBJECT_BLOB: DWORD = 0x00000002;
+pub const CERT_QUERY_CONTENT_CERT: DWORD = 1;
+pub const CERT_QUERY_CONTENT_CTL: DWORD = 2;
+pub const CERT_QUERY_CONTENT_CRL: DWORD = 3;
+pub const CERT_QUERY_CONTENT_SERIALIZED_STORE: DWORD = 4;
+pub const CERT_QUERY_CONTENT_SERIALIZED_CERT: DWORD = 5;
+pub const CERT_QUERY_CONTENT_SERIALIZED_CTL: DWORD = 6;
+pub const CERT_QUERY_CONTENT_SERIALIZED_CRL: DWORD = 7;
+pub const CERT_QUERY_CONTENT_PKCS7_SIGNED: DWORD = 8;
+pub const CERT_QUERY_CONTENT_PKCS7_UNSIGNED: DWORD = 9;
+pub const CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED: DWORD = 10;
+pub const CERT_QUERY_CONTENT_PKCS10: DWORD = 11;
+pub const CERT_QUERY_CONTENT_PFX: DWORD = 12;
+pub const CERT_QUERY_CONTENT_CERT_PAIR: DWORD = 13;
+pub const CERT_QUERY_CONTENT_PFX_AND_LOAD: DWORD = 14;
+pub const CERT_QUERY_CONTENT_FLAG_CERT: DWORD = 1 << CERT_QUERY_CONTENT_CERT;
+pub const CERT_QUERY_CONTENT_FLAG_CTL: DWORD = 1 << CERT_QUERY_CONTENT_CTL;
+pub const CERT_QUERY_CONTENT_FLAG_CRL: DWORD = 1 << CERT_QUERY_CONTENT_CRL;
+pub const CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE: DWORD
+ = 1<< CERT_QUERY_CONTENT_SERIALIZED_STORE;
+pub const CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT: DWORD = 1 << CERT_QUERY_CONTENT_SERIALIZED_CERT;
+pub const CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL: DWORD = 1 << CERT_QUERY_CONTENT_SERIALIZED_CTL;
+pub const CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL: DWORD = 1 << CERT_QUERY_CONTENT_SERIALIZED_CRL;
+pub const CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED: DWORD = 1 << CERT_QUERY_CONTENT_PKCS7_SIGNED;
+pub const CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED: DWORD = 1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED;
+pub const CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED: DWORD
+ = 1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED;
+pub const CERT_QUERY_CONTENT_FLAG_PKCS10: DWORD = 1 << CERT_QUERY_CONTENT_PKCS10;
+pub const CERT_QUERY_CONTENT_FLAG_PFX: DWORD = 1 << CERT_QUERY_CONTENT_PFX;
+pub const CERT_QUERY_CONTENT_FLAG_CERT_PAIR: DWORD = 1 << CERT_QUERY_CONTENT_CERT_PAIR;
+pub const CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD: DWORD = 1 << CERT_QUERY_CONTENT_PFX_AND_LOAD;
+pub const CERT_QUERY_CONTENT_FLAG_ALL: DWORD = CERT_QUERY_CONTENT_FLAG_CERT
+ | CERT_QUERY_CONTENT_FLAG_CTL | CERT_QUERY_CONTENT_FLAG_CRL
+ | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT
+ | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL
+ | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED
+ | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | CERT_QUERY_CONTENT_FLAG_PKCS10
+ | CERT_QUERY_CONTENT_FLAG_PFX | CERT_QUERY_CONTENT_FLAG_CERT_PAIR;
+pub const CERT_QUERY_CONTENT_FLAG_ALL_ISSUER_CERT: DWORD = CERT_QUERY_CONTENT_FLAG_CERT
+ | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT
+ | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED;
+pub const CERT_QUERY_FORMAT_BINARY: DWORD = 1;
+pub const CERT_QUERY_FORMAT_BASE64_ENCODED: DWORD = 2;
+pub const CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED: DWORD = 3;
+pub const CERT_QUERY_FORMAT_FLAG_BINARY: DWORD = 1 << CERT_QUERY_FORMAT_BINARY;
+pub const CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED: DWORD = 1 << CERT_QUERY_FORMAT_BASE64_ENCODED;
+pub const CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED: DWORD
+ = 1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED;
+pub const CERT_QUERY_FORMAT_FLAG_ALL: DWORD = CERT_QUERY_FORMAT_FLAG_BINARY
+ | CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED;
+extern "system" {
+ pub fn CryptMemAlloc(
+ cbSize: ULONG,
+ ) -> LPVOID;
+ pub fn CryptMemRealloc(
+ pv: LPVOID,
+ cbSize: ULONG,
+ ) -> LPVOID;
+ pub fn CryptMemFree(
+ pv: LPVOID,
+ );
+}
+pub type HCRYPTASYNC = HANDLE;
+pub type PHCRYPTASYNC = *mut HANDLE;
+FN!{stdcall PFN_CRYPT_ASYNC_PARAM_FREE_FUNC(
+ pszParamOid: LPSTR,
+ pvParam: LPVOID,
+) -> ()}
+extern "system" {
+ pub fn CryptCreateAsyncHandle(
+ dwFlags: DWORD,
+ phAsync: PHCRYPTASYNC,
+ ) -> BOOL;
+ pub fn CryptSetAsyncParam(
+ hAsync: HCRYPTASYNC,
+ pszParamOid: LPSTR,
+ pvParam: LPVOID,
+ pfnFree: PFN_CRYPT_ASYNC_PARAM_FREE_FUNC,
+ ) -> BOOL;
+ pub fn CryptGetAsyncParam(
+ hAsync: HCRYPTASYNC,
+ pszParamOid: LPSTR,
+ ppvParam: *mut LPVOID,
+ ppfnFree: *mut PFN_CRYPT_ASYNC_PARAM_FREE_FUNC,
+ ) -> BOOL;
+ pub fn CryptCloseAsyncHandle(
+ hAsync: HCRYPTASYNC,
+ ) -> BOOL;
+}
+STRUCT!{struct CRYPT_BLOB_ARRAY {
+ cBlob: DWORD,
+ rgBlob: PCRYPT_DATA_BLOB,
+}}
+pub type PCRYPT_BLOB_ARRAY = *mut CRYPT_BLOB_ARRAY;
+STRUCT!{struct CRYPT_CREDENTIALS {
+ cbSize: DWORD,
+ pszCredentialsOid: LPCSTR,
+ pvCredentials: LPVOID,
+}}
+pub type PCRYPT_CREDENTIALS = *mut CRYPT_CREDENTIALS;
+pub const CREDENTIAL_OID_PASSWORD_CREDENTIALS_A: LPCSTR = 1 as LPCSTR;
+pub const CREDENTIAL_OID_PASSWORD_CREDENTIALS_W: LPCSTR = 2 as LPCSTR;
+STRUCT!{struct CRYPT_PASSWORD_CREDENTIALSA {
+ cbSize: DWORD,
+ pszUsername: LPSTR,
+ pszPassword: LPSTR,
+}}
+pub type PCRYPT_PASSWORD_CREDENTIALSA = *mut CRYPT_PASSWORD_CREDENTIALSA;
+STRUCT!{struct CRYPT_PASSWORD_CREDENTIALSW {
+ cbSize: DWORD,
+ pszUsername: LPWSTR,
+ pszPassword: LPWSTR,
+}}
+pub type PCRYPT_PASSWORD_CREDENTIALSW = *mut CRYPT_PASSWORD_CREDENTIALSW;
+pub const SCHEME_OID_RETRIEVE_ENCODED_OBJECT_FUNC: &'static str = "SchemeDllRetrieveEncodedObject";
+pub const SCHEME_OID_RETRIEVE_ENCODED_OBJECTW_FUNC: &'static str
+ = "SchemeDllRetrieveEncodedObjectW";
+FN!{stdcall PFN_FREE_ENCODED_OBJECT_FUNC(
+ pszObjectOid: LPCSTR,
+ pObject: PCRYPT_BLOB_ARRAY,
+ pvFreeContext: LPVOID,
+) -> ()}
+pub const CONTEXT_OID_CREATE_OBJECT_CONTEXT_FUNC: &'static str = "ContextDllCreateObjectContext";
+pub const CONTEXT_OID_CERTIFICATE: LPCSTR = 1 as LPCSTR;
+pub const CONTEXT_OID_CRL: LPCSTR = 2 as LPCSTR;
+pub const CONTEXT_OID_CTL: LPCSTR = 3 as LPCSTR;
+pub const CONTEXT_OID_PKCS7: LPCSTR = 4 as LPCSTR;
+pub const CONTEXT_OID_CAPI2_ANY: LPCSTR = 5 as LPCSTR;
+pub const CONTEXT_OID_OCSP_RESP: LPCSTR = 6 as LPCSTR;
+pub const CRYPT_RETRIEVE_MULTIPLE_OBJECTS: DWORD = 0x00000001;
+pub const CRYPT_CACHE_ONLY_RETRIEVAL: DWORD = 0x00000002;
+pub const CRYPT_WIRE_ONLY_RETRIEVAL: DWORD = 0x00000004;
+pub const CRYPT_DONT_CACHE_RESULT: DWORD = 0x00000008;
+pub const CRYPT_ASYNC_RETRIEVAL: DWORD = 0x00000010;
+pub const CRYPT_STICKY_CACHE_RETRIEVAL: DWORD = 0x00001000;
+pub const CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL: DWORD = 0x00002000;
+pub const CRYPT_OFFLINE_CHECK_RETRIEVAL: DWORD = 0x00004000;
+pub const CRYPT_LDAP_INSERT_ENTRY_ATTRIBUTE: DWORD = 0x00008000;
+pub const CRYPT_LDAP_SIGN_RETRIEVAL: DWORD = 0x00010000;
+pub const CRYPT_NO_AUTH_RETRIEVAL: DWORD = 0x00020000;
+pub const CRYPT_LDAP_AREC_EXCLUSIVE_RETRIEVAL: DWORD = 0x00040000;
+pub const CRYPT_AIA_RETRIEVAL: DWORD = 0x00080000;
+pub const CRYPT_HTTP_POST_RETRIEVAL: DWORD = 0x00100000;
+pub const CRYPT_PROXY_CACHE_RETRIEVAL: DWORD = 0x00200000;
+pub const CRYPT_NOT_MODIFIED_RETRIEVAL: DWORD = 0x00400000;
+pub const CRYPT_ENABLE_SSL_REVOCATION_RETRIEVAL: DWORD = 0x00800000;
+pub const CRYPT_RANDOM_QUERY_STRING_RETRIEVAL: DWORD = 0x04000000;
+pub const CRYPT_ENABLE_FILE_RETRIEVAL: DWORD = 0x08000000;
+pub const CRYPT_CREATE_NEW_FLUSH_ENTRY: DWORD = 0x10000000;
+pub const CRYPT_VERIFY_CONTEXT_SIGNATURE: DWORD = 0x00000020;
+pub const CRYPT_VERIFY_DATA_HASH: DWORD = 0x00000040;
+pub const CRYPT_KEEP_TIME_VALID: DWORD = 0x00000080;
+pub const CRYPT_DONT_VERIFY_SIGNATURE: DWORD = 0x00000100;
+pub const CRYPT_DONT_CHECK_TIME_VALIDITY: DWORD = 0x00000200;
+pub const CRYPT_CHECK_FRESHNESS_TIME_VALIDITY: DWORD = 0x00000400;
+pub const CRYPT_ACCUMULATIVE_TIMEOUT: DWORD = 0x00000800;
+pub const CRYPT_OCSP_ONLY_RETRIEVAL: DWORD = 0x01000000;
+pub const CRYPT_NO_OCSP_FAILOVER_TO_CRL_RETRIEVAL: DWORD = 0x02000000;
+STRUCT!{struct CRYPTNET_URL_CACHE_PRE_FETCH_INFO {
+ cbSize: DWORD,
+ dwObjectType: DWORD,
+ dwError: DWORD,
+ dwReserved: DWORD,
+ ThisUpdateTime: FILETIME,
+ NextUpdateTime: FILETIME,
+ PublishTime: FILETIME,
+}}
+pub type PCRYPTNET_URL_CACHE_PRE_FETCH_INFO = *mut CRYPTNET_URL_CACHE_PRE_FETCH_INFO;
+pub const CRYPTNET_URL_CACHE_PRE_FETCH_NONE: DWORD = 0;
+pub const CRYPTNET_URL_CACHE_PRE_FETCH_BLOB: DWORD = 1;
+pub const CRYPTNET_URL_CACHE_PRE_FETCH_CRL: DWORD = 2;
+pub const CRYPTNET_URL_CACHE_PRE_FETCH_OCSP: DWORD = 3;
+pub const CRYPTNET_URL_CACHE_PRE_FETCH_AUTOROOT_CAB: DWORD = 5;
+pub const CRYPTNET_URL_CACHE_PRE_FETCH_DISALLOWED_CERT_CAB: DWORD = 6;
+pub const CRYPTNET_URL_CACHE_PRE_FETCH_PIN_RULES_CAB: DWORD = 7;
+STRUCT!{struct CRYPTNET_URL_CACHE_FLUSH_INFO {
+ cbSize: DWORD,
+ dwExemptSeconds: DWORD,
+ ExpireTime: FILETIME,
+}}
+pub type PCRYPTNET_URL_CACHE_FLUSH_INFO = *mut CRYPTNET_URL_CACHE_FLUSH_INFO;
+pub const CRYPTNET_URL_CACHE_DEFAULT_FLUSH: DWORD = 0;
+pub const CRYPTNET_URL_CACHE_DISABLE_FLUSH: DWORD = 0xFFFFFFFF;
+STRUCT!{struct CRYPTNET_URL_CACHE_RESPONSE_INFO {
+ cbSize: DWORD,
+ wResponseType: WORD,
+ wResponseFlags: WORD,
+ LastModifiedTime: FILETIME,
+ dwMaxAge: DWORD,
+ pwszETag: LPCWSTR,
+ dwProxyId: DWORD,
+}}
+pub type PCRYPTNET_URL_CACHE_RESPONSE_INFO = *mut CRYPTNET_URL_CACHE_RESPONSE_INFO;
+pub const CRYPTNET_URL_CACHE_RESPONSE_NONE: WORD = 0;
+pub const CRYPTNET_URL_CACHE_RESPONSE_HTTP: WORD = 1;
+pub const CRYPTNET_URL_CACHE_RESPONSE_VALIDATED: WORD = 0x8000;
+STRUCT!{struct CRYPT_RETRIEVE_AUX_INFO {
+ cbSize: DWORD,
+ pLastSyncTime: *mut FILETIME,
+ dwMaxUrlRetrievalByteCount: DWORD,
+ pPreFetchInfo: PCRYPTNET_URL_CACHE_PRE_FETCH_INFO,
+ pFlushInfo: PCRYPTNET_URL_CACHE_FLUSH_INFO,
+ ppResponseInfo: *mut PCRYPTNET_URL_CACHE_RESPONSE_INFO,
+ pwszCacheFileNamePrefix: LPWSTR,
+ pftCacheResync: LPFILETIME,
+ fProxyCacheRetrieval: BOOL,
+ dwHttpStatusCode: DWORD,
+ ppwszErrorResponseHeaders: *mut LPWSTR,
+ ppErrorContentBlob: *mut PCRYPT_DATA_BLOB,
+}}
+pub type PCRYPT_RETRIEVE_AUX_INFO = *mut CRYPT_RETRIEVE_AUX_INFO;
+pub const CRYPT_RETRIEVE_MAX_ERROR_CONTENT_LENGTH: DWORD = 0x1000;
+extern "system" {
+ pub fn CryptRetrieveObjectByUrlA(
+ pszUrl: LPCSTR,
+ pszObjectOid: LPCSTR,
+ dwRetrievalFlags: DWORD,
+ dwTimeout: DWORD,
+ ppvObject: *mut LPVOID,
+ hAsyncRetrieve: HCRYPTASYNC,
+ pCredentials: PCRYPT_CREDENTIALS,
+ pvVerify: LPVOID,
+ pAuxInfo: PCRYPT_RETRIEVE_AUX_INFO,
+ ) -> BOOL;
+ pub fn CryptRetrieveObjectByUrlW(
+ pszUrl: LPCWSTR,
+ pszObjectOid: LPCSTR,
+ dwRetrievalFlags: DWORD,
+ dwTimeout: DWORD,
+ ppvObject: *mut LPVOID,
+ hAsyncRetrieve: HCRYPTASYNC,
+ pCredentials: PCRYPT_CREDENTIALS,
+ pvVerify: LPVOID,
+ pAuxInfo: PCRYPT_RETRIEVE_AUX_INFO,
+ ) -> BOOL;
+}
+FN!{stdcall PFN_CRYPT_CANCEL_RETRIEVAL(
+ dwFlags: DWORD,
+ pvArg: *mut c_void,
+) -> BOOL}
+extern "system" {
+ pub fn CryptInstallCancelRetrieval(
+ pfnCancel: PFN_CRYPT_CANCEL_RETRIEVAL,
+ pvArg: *const c_void,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+ ) -> BOOL;
+ pub fn CryptUninstallCancelRetrieval(
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+ ) -> BOOL;
+ pub fn CryptCancelAsyncRetrieval(
+ hAsyncRetrieval: HCRYPTASYNC,
+ ) -> BOOL;
+}
+pub const CRYPT_PARAM_ASYNC_RETRIEVAL_COMPLETION: LPCSTR = 1 as LPCSTR;
+FN!{stdcall PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC(
+ pvCompletion: LPVOID,
+ dwCompletionCode: DWORD,
+ pszUrl: LPCSTR,
+ pszObjectOid: LPSTR,
+ pvObject: LPVOID,
+) -> ()}
+STRUCT!{struct CRYPT_ASYNC_RETRIEVAL_COMPLETION {
+ pfnCompletion: PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC,
+ pvCompletion: LPVOID,
+}}
+pub type PCRYPT_ASYNC_RETRIEVAL_COMPLETION = *mut CRYPT_ASYNC_RETRIEVAL_COMPLETION;
+pub const CRYPT_PARAM_CANCEL_ASYNC_RETRIEVAL: LPCSTR = 2 as LPCSTR;
+FN!{stdcall PFN_CANCEL_ASYNC_RETRIEVAL_FUNC(
+ hAsyncRetrieve: HCRYPTASYNC,
+) -> BOOL}
+pub const CRYPT_GET_URL_FROM_PROPERTY: DWORD = 0x00000001;
+pub const CRYPT_GET_URL_FROM_EXTENSION: DWORD = 0x00000002;
+pub const CRYPT_GET_URL_FROM_UNAUTH_ATTRIBUTE: DWORD = 0x00000004;
+pub const CRYPT_GET_URL_FROM_AUTH_ATTRIBUTE: DWORD = 0x00000008;
+STRUCT!{struct CRYPT_URL_ARRAY {
+ cUrl: DWORD,
+ rgwszUrl: *mut LPWSTR,
+}}
+pub type PCRYPT_URL_ARRAY = *mut CRYPT_URL_ARRAY;
+STRUCT!{struct CRYPT_URL_INFO {
+ cbSize: DWORD,
+ dwSyncDeltaTime: DWORD,
+ cGroup: DWORD,
+ rgcGroupEntry: *mut DWORD,
+}}
+pub type PCRYPT_URL_INFO = *mut CRYPT_URL_INFO;
+extern "system" {
+ pub fn CryptGetObjectUrl(
+ pszUrlOid: LPCSTR,
+ pvPara: LPVOID,
+ dwFlags: DWORD,
+ pUrlArray: PCRYPT_URL_ARRAY,
+ pcbUrlArray: *mut DWORD,
+ pUrlInfo: PCRYPT_URL_INFO,
+ pcbUrlInfo: *mut DWORD,
+ pvReserved: LPVOID,
+ ) -> BOOL;
+}
+pub const URL_OID_GET_OBJECT_URL_FUNC: &'static str = "UrlDllGetObjectUrl";
+pub const URL_OID_CERTIFICATE_ISSUER: LPCSTR = 1 as LPCSTR;
+pub const URL_OID_CERTIFICATE_CRL_DIST_POINT: LPCSTR = 2 as LPCSTR;
+pub const URL_OID_CTL_ISSUER: LPCSTR = 3 as LPCSTR;
+pub const URL_OID_CTL_NEXT_UPDATE: LPCSTR = 4 as LPCSTR;
+pub const URL_OID_CRL_ISSUER: LPCSTR = 5 as LPCSTR;
+pub const URL_OID_CERTIFICATE_FRESHEST_CRL: LPCSTR = 6 as LPCSTR;
+pub const URL_OID_CRL_FRESHEST_CRL: LPCSTR = 7 as LPCSTR;
+pub const URL_OID_CROSS_CERT_DIST_POINT: LPCSTR = 8 as LPCSTR;
+pub const URL_OID_CERTIFICATE_OCSP: LPCSTR = 9 as LPCSTR;
+pub const URL_OID_CERTIFICATE_OCSP_AND_CRL_DIST_POINT: LPCSTR = 10 as LPCSTR;
+pub const URL_OID_CERTIFICATE_CRL_DIST_POINT_AND_OCSP: LPCSTR = 11 as LPCSTR;
+pub const URL_OID_CROSS_CERT_SUBJECT_INFO_ACCESS: LPCSTR = 12 as LPCSTR;
+pub const URL_OID_CERTIFICATE_ONLY_OCSP: LPCSTR = 13 as LPCSTR;
+STRUCT!{struct CERT_CRL_CONTEXT_PAIR {
+ pCertContext: PCCERT_CONTEXT,
+ pCrlContext: PCCRL_CONTEXT,
+}}
+pub type PCERT_CRL_CONTEXT_PAIR = *mut CERT_CRL_CONTEXT_PAIR;
+pub type PCCERT_CRL_CONTEXT_PAIR = *const CERT_CRL_CONTEXT_PAIR;
+STRUCT!{struct CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO {
+ cbSize: DWORD,
+ iDeltaCrlIndicator: c_int,
+ pftCacheResync: LPFILETIME,
+ pLastSyncTime: LPFILETIME,
+ pMaxAgeTime: LPFILETIME,
+ pChainPara: PCERT_REVOCATION_CHAIN_PARA,
+ pDeltaCrlIndicator: PCRYPT_INTEGER_BLOB,
+}}
+pub type PCRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO = *mut CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO;
+extern "system" {
+ pub fn CryptGetTimeValidObject(
+ pszTimeValidOid: LPCSTR,
+ pvPara: LPVOID,
+ pIssuer: PCCERT_CONTEXT,
+ pftValidFor: LPFILETIME,
+ dwFlags: DWORD,
+ dwTimeout: DWORD,
+ ppvObject: *mut LPVOID,
+ pCredentials: PCRYPT_CREDENTIALS,
+ pExtraInfo: PCRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO,
+ ) -> BOOL;
+}
+pub const TIME_VALID_OID_GET_OBJECT_FUNC: &'static str = "TimeValidDllGetObject";
+pub const TIME_VALID_OID_GET_CTL: LPCSTR = 1 as LPCSTR;
+pub const TIME_VALID_OID_GET_CRL: LPCSTR = 2 as LPCSTR;
+pub const TIME_VALID_OID_GET_CRL_FROM_CERT: LPCSTR = 3 as LPCSTR;
+pub const TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CERT: LPCSTR = 4 as LPCSTR;
+pub const TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CRL: LPCSTR = 5 as LPCSTR;
+extern "system" {
+ pub fn CryptFlushTimeValidObject(
+ pszFlushTimeValidOid: LPCSTR,
+ pvPara: LPVOID,
+ pIssuer: PCCERT_CONTEXT,
+ dwFlags: DWORD,
+ pvReserved: LPVOID,
+ ) -> BOOL;
+}
+pub const TIME_VALID_OID_FLUSH_OBJECT_FUNC: &'static str = "TimeValidDllFlushObject";
+pub const TIME_VALID_OID_FLUSH_CTL: LPCSTR = 1 as LPCSTR;
+pub const TIME_VALID_OID_FLUSH_CRL: LPCSTR = 2 as LPCSTR;
+pub const TIME_VALID_OID_FLUSH_CRL_FROM_CERT: LPCSTR = 3 as LPCSTR;
+pub const TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CERT: LPCSTR = 4 as LPCSTR;
+pub const TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CRL: LPCSTR = 5 as LPCSTR;
+extern "system" {
+ pub fn CertCreateSelfSignCertificate(
+ hCryptProvOrNCryptKey: HCRYPTPROV_OR_NCRYPT_KEY_HANDLE,
+ pSubjectIssuerBlob: PCERT_NAME_BLOB,
+ dwFlags: DWORD,
+ pKeyProvInfo: PCRYPT_KEY_PROV_INFO,
+ pSignatureAlgorithm: PCRYPT_ALGORITHM_IDENTIFIER,
+ pStartTime: PSYSTEMTIME,
+ pEndTime: PSYSTEMTIME,
+ pExtensions: PCERT_EXTENSIONS,
+ ) -> PCCERT_CONTEXT;
+}
+pub const CERT_CREATE_SELFSIGN_NO_SIGN: DWORD = 1;
+pub const CERT_CREATE_SELFSIGN_NO_KEY_INFO: DWORD = 2;
+extern "system" {
+ pub fn CryptGetKeyIdentifierProperty(
+ pKeyIdentifier: *const CRYPT_HASH_BLOB,
+ dwPropId: DWORD,
+ dwFlags: DWORD,
+ pwszComputerName: LPCWSTR,
+ pvReserved: *mut c_void,
+ pvData: *mut c_void,
+ pcbData: *mut DWORD,
+ ) -> BOOL;
+}
+pub const CRYPT_KEYID_MACHINE_FLAG: DWORD = 0x00000020;
+pub const CRYPT_KEYID_ALLOC_FLAG: DWORD = 0x00008000;
+extern "system" {
+ pub fn CryptSetKeyIdentifierProperty(
+ pKeyIdentifier: *const CRYPT_HASH_BLOB,
+ dwPropId: DWORD,
+ dwFlags: DWORD,
+ pwszComputerName: LPCWSTR,
+ pvReserved: *mut c_void,
+ pvData: *const c_void,
+ ) -> BOOL;
+}
+pub const CRYPT_KEYID_DELETE_FLAG: DWORD = 0x00000010;
+pub const CRYPT_KEYID_SET_NEW_FLAG: DWORD = 0x00002000;
+FN!{stdcall PFN_CRYPT_ENUM_KEYID_PROP(
+ pKeyIdentifier: *const CRYPT_HASH_BLOB,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+ pvArg: *mut c_void,
+ cProp: DWORD,
+ rgdwPropId: *mut DWORD,
+ rgpvData: *mut *mut c_void,
+ rgcbData: *mut DWORD,
+) -> BOOL}
+extern "system" {
+ pub fn CryptEnumKeyIdentifierProperties(
+ pKeyIdentifier: *const CRYPT_HASH_BLOB,
+ dwPropId: DWORD,
+ dwFlags: DWORD,
+ pwszComputerName: LPCWSTR,
+ pvReserved: *mut c_void,
+ pvArg: *mut c_void,
+ pfnEnum: PFN_CRYPT_ENUM_KEYID_PROP,
+ ) -> BOOL;
+ pub fn CryptCreateKeyIdentifierFromCSP(
+ dwCertEncodingType: DWORD,
+ pszPubKeyOID: LPCSTR,
+ pPubKeyStruc: *const PUBLICKEYSTRUC,
+ cbPubKeyStruc: DWORD,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+ pbHash: *mut BYTE,
+ pcbHash: *mut DWORD,
+ ) -> BOOL;
+}
+pub const CERT_CHAIN_CONFIG_REGPATH: &'static str
+ = "Software\\Microsoft\\Cryptography\\OID\\EncodingType 0\\CertDllCreateCertificateChainEngine\\Config";
+pub const CERT_CHAIN_MAX_URL_RETRIEVAL_BYTE_COUNT_VALUE_NAME: &'static str
+ = "MaxUrlRetrievalByteCount";
+pub const CERT_CHAIN_MAX_URL_RETRIEVAL_BYTE_COUNT_DEFAULT: DWORD = 100 * 1024 * 1024;
+pub const CERT_CHAIN_CACHE_RESYNC_FILETIME_VALUE_NAME: &'static str = "ChainCacheResyncFiletime";
+pub const CERT_CHAIN_DISABLE_MANDATORY_BASIC_CONSTRAINTS_VALUE_NAME: &'static str
+ = "DisableMandatoryBasicConstraints";
+pub const CERT_CHAIN_DISABLE_CA_NAME_CONSTRAINTS_VALUE_NAME: &'static str
+ = "DisableCANameConstraints";
+pub const CERT_CHAIN_DISABLE_UNSUPPORTED_CRITICAL_EXTENSIONS_VALUE_NAME: &'static str
+ = "DisableUnsupportedCriticalExtensions";
+pub const CERT_CHAIN_MAX_AIA_URL_COUNT_IN_CERT_VALUE_NAME: &'static str = "MaxAIAUrlCountInCert";
+pub const CERT_CHAIN_MAX_AIA_URL_COUNT_IN_CERT_DEFAULT: DWORD = 5;
+pub const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_COUNT_PER_CHAIN_VALUE_NAME: &'static str
+ = "MaxAIAUrlRetrievalCountPerChain";
+pub const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_COUNT_PER_CHAIN_DEFAULT: DWORD = 3;
+pub const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_BYTE_COUNT_VALUE_NAME: &'static str
+ = "MaxAIAUrlRetrievalByteCount";
+pub const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_BYTE_COUNT_DEFAULT: DWORD = 100000;
+pub const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_CERT_COUNT_VALUE_NAME: &'static str
+ = "MaxAIAUrlRetrievalCertCount";
+pub const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_CERT_COUNT_DEFAULT: DWORD = 10;
+pub const CERT_CHAIN_OCSP_VALIDITY_SECONDS_VALUE_NAME: &'static str
+ = "OcspValiditySeconds";
+pub const CERT_CHAIN_OCSP_VALIDITY_SECONDS_DEFAULT: DWORD = 12 * 60 * 60;
+pub const CERT_CHAIN_DISABLE_SERIAL_CHAIN_VALUE_NAME: &'static str = "DisableSerialChain";
+pub const CERT_CHAIN_SERIAL_CHAIN_LOG_FILE_NAME_VALUE_NAME: &'static str
+ = "SerialChainLogFileName";
+pub const CERT_CHAIN_DISABLE_SYNC_WITH_SSL_TIME_VALUE_NAME: &'static str
+ = "DisableSyncWithSslTime";
+pub const CERT_CHAIN_MAX_SSL_TIME_UPDATED_EVENT_COUNT_VALUE_NAME: &'static str
+ = "MaxSslTimeUpdatedEventCount";
+pub const CERT_CHAIN_MAX_SSL_TIME_UPDATED_EVENT_COUNT_DEFAULT: DWORD = 5;
+pub const CERT_CHAIN_MAX_SSL_TIME_UPDATED_EVENT_COUNT_DISABLE: DWORD = 0xFFFFFFFF;
+pub const CERT_CHAIN_SSL_HANDSHAKE_LOG_FILE_NAME_VALUE_NAME: &'static str
+ = "SslHandshakeLogFileName";
+pub const CERT_CHAIN_ENABLE_WEAK_SIGNATURE_FLAGS_VALUE_NAME: &'static str
+ = "EnableWeakSignatureFlags";
+pub const CERT_CHAIN_ENABLE_MD2_MD4_FLAG: DWORD = 0x00000001;
+pub const CERT_CHAIN_ENABLE_WEAK_RSA_ROOT_FLAG: DWORD = 0x00000002;
+pub const CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG: DWORD = 0x00000004;
+pub const CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG: DWORD = 0x00000008;
+pub const CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_VALUE_NAME: &'static str = "MinRsaPubKeyBitLength";
+pub const CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_DEFAULT: DWORD = 1023;
+pub const CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_DISABLE: DWORD = 0xFFFFFFFF;
+pub const CERT_CHAIN_WEAK_RSA_PUB_KEY_TIME_VALUE_NAME: &'static str = "WeakRsaPubKeyTime";
+pub const CERT_CHAIN_WEAK_RSA_PUB_KEY_TIME_DEFAULT: u64 = 0x01CA8A755C6E0000;
+pub const CERT_CHAIN_WEAK_SIGNATURE_LOG_DIR_VALUE_NAME: &'static str = "WeakSignatureLogDir";
+pub const CERT_CHAIN_DEFAULT_CONFIG_SUBDIR: &'static str = "Default";
+pub const CERT_CHAIN_WEAK_PREFIX_NAME: &'static str = "Weak";
+pub const CERT_CHAIN_WEAK_THIRD_PARTY_CONFIG_NAME: &'static str = "ThirdParty";
+pub const CERT_CHAIN_WEAK_ALL_CONFIG_NAME: &'static str = "Al";
+pub const CERT_CHAIN_WEAK_FLAGS_NAME: &'static str = "Flags";
+pub const CERT_CHAIN_WEAK_HYGIENE_NAME: &'static str = "Hygiene";
+pub const CERT_CHAIN_WEAK_AFTER_TIME_NAME: &'static str = "AfterTime";
+pub const CERT_CHAIN_WEAK_FILE_HASH_AFTER_TIME_NAME: &'static str = "FileHashAfterTime";
+pub const CERT_CHAIN_WEAK_TIMESTAMP_HASH_AFTER_TIME_NAME: &'static str = "TimestampHashAfterTime";
+pub const CERT_CHAIN_WEAK_MIN_BIT_LENGTH_NAME: &'static str = "MinBitLength";
+pub const CERT_CHAIN_WEAK_SHA256_ALLOW_NAME: &'static str = "Sha256Allow";
+pub const CERT_CHAIN_MIN_PUB_KEY_BIT_LENGTH_DISABLE: DWORD = 0xFFFFFFFF;
+pub const CERT_CHAIN_ENABLE_WEAK_SETTINGS_FLAG: DWORD = 0x80000000;
+pub const CERT_CHAIN_DISABLE_ALL_EKU_WEAK_FLAG: DWORD = 0x00010000;
+pub const CERT_CHAIN_ENABLE_ALL_EKU_HYGIENE_FLAG: DWORD = 0x00020000;
+pub const CERT_CHAIN_DISABLE_OPT_IN_SERVER_AUTH_WEAK_FLAG: DWORD = 0x00040000;
+pub const CERT_CHAIN_DISABLE_SERVER_AUTH_WEAK_FLAG: DWORD = 0x00100000;
+pub const CERT_CHAIN_ENABLE_SERVER_AUTH_HYGIENE_FLAG: DWORD = 0x00200000;
+pub const CERT_CHAIN_DISABLE_CODE_SIGNING_WEAK_FLAG: DWORD = 0x00400000;
+pub const CERT_CHAIN_DISABLE_MOTW_CODE_SIGNING_WEAK_FLAG: DWORD = 0x00800000;
+pub const CERT_CHAIN_ENABLE_CODE_SIGNING_HYGIENE_FLAG: DWORD = 0x01000000;
+pub const CERT_CHAIN_ENABLE_MOTW_CODE_SIGNING_HYGIENE_FLAG: DWORD = 0x02000000;
+pub const CERT_CHAIN_DISABLE_TIMESTAMP_WEAK_FLAG: DWORD = 0x04000000;
+pub const CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_WEAK_FLAG: DWORD = 0x08000000;
+pub const CERT_CHAIN_ENABLE_TIMESTAMP_HYGIENE_FLAG: DWORD = 0x10000000;
+pub const CERT_CHAIN_ENABLE_MOTW_TIMESTAMP_HYGIENE_FLAG: DWORD = 0x20000000;
+pub const CERT_CHAIN_MOTW_IGNORE_AFTER_TIME_WEAK_FLAG: DWORD = 0x40000000;
+pub const CERT_CHAIN_DISABLE_FILE_HASH_WEAK_FLAG: DWORD = 0x00001000;
+pub const CERT_CHAIN_DISABLE_MOTW_FILE_HASH_WEAK_FLAG: DWORD = 0x00002000;
+pub const CERT_CHAIN_DISABLE_TIMESTAMP_HASH_WEAK_FLAG: DWORD = 0x00004000;
+pub const CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_HASH_WEAK_FLAG: DWORD = 0x00008000;
+pub const CERT_CHAIN_DISABLE_WEAK_FLAGS: DWORD = CERT_CHAIN_DISABLE_ALL_EKU_WEAK_FLAG
+ | CERT_CHAIN_DISABLE_SERVER_AUTH_WEAK_FLAG | CERT_CHAIN_DISABLE_OPT_IN_SERVER_AUTH_WEAK_FLAG
+ | CERT_CHAIN_DISABLE_CODE_SIGNING_WEAK_FLAG | CERT_CHAIN_DISABLE_MOTW_CODE_SIGNING_WEAK_FLAG
+ | CERT_CHAIN_DISABLE_TIMESTAMP_WEAK_FLAG | CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_WEAK_FLAG;
+pub const CERT_CHAIN_DISABLE_FILE_HASH_WEAK_FLAGS: DWORD = CERT_CHAIN_DISABLE_FILE_HASH_WEAK_FLAG
+ | CERT_CHAIN_DISABLE_MOTW_FILE_HASH_WEAK_FLAG;
+pub const CERT_CHAIN_DISABLE_TIMESTAMP_HASH_WEAK_FLAGS: DWORD
+ = CERT_CHAIN_DISABLE_TIMESTAMP_HASH_WEAK_FLAG
+ | CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_HASH_WEAK_FLAG;
+pub const CERT_CHAIN_ENABLE_HYGIENE_FLAGS: DWORD = CERT_CHAIN_ENABLE_ALL_EKU_HYGIENE_FLAG
+ | CERT_CHAIN_ENABLE_SERVER_AUTH_HYGIENE_FLAG | CERT_CHAIN_ENABLE_CODE_SIGNING_HYGIENE_FLAG
+ | CERT_CHAIN_ENABLE_MOTW_CODE_SIGNING_HYGIENE_FLAG | CERT_CHAIN_ENABLE_TIMESTAMP_HYGIENE_FLAG
+ | CERT_CHAIN_ENABLE_MOTW_TIMESTAMP_HYGIENE_FLAG;
+pub const CERT_CHAIN_MOTW_WEAK_FLAGS: DWORD = CERT_CHAIN_DISABLE_MOTW_CODE_SIGNING_WEAK_FLAG
+ | CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_WEAK_FLAG
+ | CERT_CHAIN_ENABLE_MOTW_CODE_SIGNING_HYGIENE_FLAG
+ | CERT_CHAIN_ENABLE_MOTW_TIMESTAMP_HYGIENE_FLAG | CERT_CHAIN_MOTW_IGNORE_AFTER_TIME_WEAK_FLAG;
+pub const CERT_CHAIN_OPT_IN_WEAK_FLAGS: DWORD = CERT_CHAIN_DISABLE_OPT_IN_SERVER_AUTH_WEAK_FLAG;
+pub const CERT_CHAIN_AUTO_CURRENT_USER: DWORD = 1;
+pub const CERT_CHAIN_AUTO_LOCAL_MACHINE: DWORD = 2;
+pub const CERT_CHAIN_AUTO_IMPERSONATED: DWORD = 3;
+pub const CERT_CHAIN_AUTO_PROCESS_INFO: DWORD = 4;
+pub const CERT_CHAIN_AUTO_PINRULE_INFO: DWORD = 5;
+pub const CERT_CHAIN_AUTO_NETWORK_INFO: DWORD = 6;
+pub const CERT_CHAIN_AUTO_SERIAL_LOCAL_MACHINE: DWORD = 7;
+pub const CERT_CHAIN_AUTO_HPKP_RULE_INFO: DWORD = 8;
+pub const CERT_CHAIN_AUTO_FLAGS_VALUE_NAME: &'static str = "AutoFlags";
+pub const CERT_CHAIN_AUTO_FLUSH_DISABLE_FLAG: DWORD = 0x00000001;
+pub const CERT_CHAIN_AUTO_LOG_CREATE_FLAG: DWORD = 0x00000002;
+pub const CERT_CHAIN_AUTO_LOG_FREE_FLAG: DWORD = 0x00000004;
+pub const CERT_CHAIN_AUTO_LOG_FLUSH_FLAG: DWORD = 0x00000008;
+pub const CERT_CHAIN_AUTO_LOG_FLAGS: DWORD = CERT_CHAIN_AUTO_LOG_CREATE_FLAG
+ | CERT_CHAIN_AUTO_LOG_FREE_FLAG | CERT_CHAIN_AUTO_LOG_FLUSH_FLAG;
+pub const CERT_CHAIN_AUTO_FLUSH_FIRST_DELTA_SECONDS_VALUE_NAME: &'static str
+ = "AutoFlushFirstDeltaSeconds";
+pub const CERT_CHAIN_AUTO_FLUSH_FIRST_DELTA_SECONDS_DEFAULT: DWORD = 5 * 60;
+pub const CERT_CHAIN_AUTO_FLUSH_NEXT_DELTA_SECONDS_VALUE_NAME: &'static str
+ = "AutoFlushNextDeltaSeconds";
+pub const CERT_CHAIN_AUTO_FLUSH_NEXT_DELTA_SECONDS_DEFAULT: DWORD = 30 * 60;
+pub const CERT_CHAIN_AUTO_LOG_FILE_NAME_VALUE_NAME: &'static str = "AutoLogFileName";
+pub const CERT_CHAIN_DISABLE_AUTO_FLUSH_PROCESS_NAME_LIST_VALUE_NAME: &'static str
+ = "DisableAutoFlushProcessNameList";
+pub const CERT_SRV_OCSP_RESP_MIN_VALIDITY_SECONDS_VALUE_NAME: &'static str
+ = "SrvOcspRespMinValiditySeconds";
+pub const CERT_SRV_OCSP_RESP_MIN_VALIDITY_SECONDS_DEFAULT: DWORD = 10 * 60;
+pub const CERT_SRV_OCSP_RESP_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME: &'static str
+ = "SrvOcspRespUrlRetrievalTimeoutMilliseconds";
+pub const CERT_SRV_OCSP_RESP_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_DEFAULT: DWORD = 15 * 1000;
+pub const CERT_SRV_OCSP_RESP_MAX_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME: &'static str
+ = "SrvOcspRespMaxBeforeNextUpdateSeconds";
+pub const CERT_SRV_OCSP_RESP_MAX_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT: DWORD = 4 * 60 * 60;
+pub const CERT_SRV_OCSP_RESP_MIN_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME: &'static str
+ = "SrvOcspRespMinBeforeNextUpdateSeconds";
+pub const CERT_SRV_OCSP_RESP_MIN_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT: DWORD = 2 * 60;
+pub const CERT_SRV_OCSP_RESP_MIN_AFTER_NEXT_UPDATE_SECONDS_VALUE_NAME: &'static str
+ = "SrvOcspRespMinAfterNextUpdateSeconds";
+pub const CERT_SRV_OCSP_RESP_MIN_AFTER_NEXT_UPDATE_SECONDS_DEFAULT: DWORD = 1 * 60;
+pub const CERT_SRV_OCSP_RESP_MIN_SYNC_CERT_FILE_SECONDS_VALUE_NAME: &'static str
+ = "SrvOcspRespMinSyncCertFileSeconds";
+pub const CERT_SRV_OCSP_RESP_MIN_SYNC_CERT_FILE_SECONDS_DEFAULT: DWORD = 5;
+pub const CERT_SRV_OCSP_RESP_MAX_SYNC_CERT_FILE_SECONDS_VALUE_NAME: &'static str
+ = "SrvOcspRespMaxSyncCertFileSeconds";
+pub const CERT_SRV_OCSP_RESP_MAX_SYNC_CERT_FILE_SECONDS_DEFAULT: DWORD = 1 * 60 * 60;
+pub const CRYPTNET_MAX_CACHED_OCSP_PER_CRL_COUNT_VALUE_NAME: &'static str
+ = "CryptnetMaxCachedOcspPerCrlCount";
+pub const CRYPTNET_MAX_CACHED_OCSP_PER_CRL_COUNT_DEFAULT: DWORD = 500;
+pub const CRYPTNET_OCSP_AFTER_CRL_DISABLE: DWORD = 0xFFFFFFFF;
+pub const CRYPTNET_URL_CACHE_DEFAULT_FLUSH_EXEMPT_SECONDS_VALUE_NAME: &'static str
+ = "CryptnetDefaultFlushExemptSeconds";
+pub const CRYPTNET_URL_CACHE_DEFAULT_FLUSH_EXEMPT_SECONDS_DEFAULT: DWORD = 28 * 24 * 60 * 60;
+pub const CRYPTNET_PRE_FETCH_MIN_MAX_AGE_SECONDS_VALUE_NAME: &'static str
+ = "CryptnetPreFetchMinMaxAgeSeconds";
+pub const CRYPTNET_PRE_FETCH_MIN_MAX_AGE_SECONDS_DEFAULT: DWORD = 1 * 60 * 60;
+pub const CRYPTNET_PRE_FETCH_MAX_MAX_AGE_SECONDS_VALUE_NAME: &'static str
+ = "CryptnetPreFetchMaxMaxAgeSeconds";
+pub const CRYPTNET_PRE_FETCH_MAX_MAX_AGE_SECONDS_DEFAULT: DWORD = 14 * 24 * 60 * 60;
+pub const CRYPTNET_PRE_FETCH_MIN_OCSP_VALIDITY_PERIOD_SECONDS_VALUE_NAME: &'static str
+ = "CryptnetPreFetchMinOcspValidityPeriodSeconds";
+pub const CRYPTNET_PRE_FETCH_MIN_OCSP_VALIDITY_PERIOD_SECONDS_DEFAULT: DWORD = 14 * 24 * 60 * 60;
+pub const CRYPTNET_PRE_FETCH_AFTER_PUBLISH_PRE_FETCH_DIVISOR_VALUE_NAME: &'static str
+ = "CryptnetPreFetchAfterPublishPreFetchDivisor";
+pub const CRYPTNET_PRE_FETCH_AFTER_PUBLISH_PRE_FETCH_DIVISOR_DEFAULT: DWORD = 10;
+pub const CRYPTNET_PRE_FETCH_BEFORE_NEXT_UPDATE_PRE_FETCH_DIVISOR_VALUE_NAME: &'static str
+ = "CryptnetPreFetchBeforeNextUpdatePreFetchDivisor";
+pub const CRYPTNET_PRE_FETCH_BEFORE_NEXT_UPDATE_PRE_FETCH_DIVISOR_DEFAULT: DWORD = 20;
+pub const CRYPTNET_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME:
+ &'static str = "CryptnetPreFetchMinBeforeNextUpdatePreFetchSeconds";
+pub const CRYPTNET_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_DEFAULT: DWORD
+ = 1 * 60 * 60;
+pub const CRYPTNET_PRE_FETCH_VALIDITY_PERIOD_AFTER_NEXT_UPDATE_PRE_FETCH_DIVISOR_VALUE_NAME:
+ &'static str = "CryptnetPreFetchValidityPeriodAfterNextUpdatePreFetchDivisor";
+pub const CRYPTNET_PRE_FETCH_VALIDITY_PERIOD_AFTER_NEXT_UPDATE_PRE_FETCH_DIVISOR_DEFAULT: DWORD
+ = 10;
+pub const CRYPTNET_PRE_FETCH_MAX_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME:
+ &'static str = "CryptnetPreFetchMaxAfterNextUpdatePreFetchPeriodSeconds";
+pub const CRYPTNET_PRE_FETCH_MAX_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_DEFAULT: DWORD
+ = 4 * 60 * 60;
+pub const CRYPTNET_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME:
+ &'static str = "CryptnetPreFetchMinAfterNextUpdatePreFetchPeriodSeconds";
+pub const CRYPTNET_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_DEFAULT: DWORD
+ = 30 * 60;
+pub const CRYPTNET_PRE_FETCH_AFTER_CURRENT_TIME_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME: &'static str
+ = "CryptnetPreFetchAfterCurrentTimePreFetchPeriodSeconds";
+pub const CRYPTNET_PRE_FETCH_AFTER_CURRENT_TIME_PRE_FETCH_PERIOD_SECONDS_DEFAULT: DWORD
+ = 30 * 60;
+pub const CRYPTNET_PRE_FETCH_TRIGGER_PERIOD_SECONDS_VALUE_NAME: &'static str
+ = "CryptnetPreFetchTriggerPeriodSeconds";
+pub const CRYPTNET_PRE_FETCH_TRIGGER_PERIOD_SECONDS_DEFAULT: DWORD = 10 * 60;
+pub const CRYPTNET_PRE_FETCH_TRIGGER_DISABLE: DWORD = 0xFFFFFFFF;
+pub const CRYPTNET_PRE_FETCH_SCAN_AFTER_TRIGGER_DELAY_SECONDS_VALUE_NAME: &'static str
+ = "CryptnetPreFetchScanAfterTriggerDelaySeconds";
+pub const CRYPTNET_PRE_FETCH_SCAN_AFTER_TRIGGER_DELAY_SECONDS_DEFAULT: DWORD = 60;
+pub const CRYPTNET_PRE_FETCH_RETRIEVAL_TIMEOUT_SECONDS_VALUE_NAME: &'static str
+ = "CryptnetPreFetchRetrievalTimeoutSeconds";
+pub const CRYPTNET_PRE_FETCH_RETRIEVAL_TIMEOUT_SECONDS_DEFAULT: DWORD = 5 * 60;
+pub const CRYPTNET_CRL_PRE_FETCH_CONFIG_REGPATH: &'static str
+ = "Software\\Microsoft\\Cryptography\\OID\\EncodingType 0\\CertDllCreateCertificateChainEngine\\Config\\CrlPreFetch";
+pub const CRYPTNET_CRL_PRE_FETCH_PROCESS_NAME_LIST_VALUE_NAME: &'static str = "ProcessNameList";
+pub const CRYPTNET_CRL_PRE_FETCH_URL_LIST_VALUE_NAME: &'static str = "PreFetchUrlList";
+pub const CRYPTNET_CRL_PRE_FETCH_DISABLE_INFORMATION_EVENTS_VALUE_NAME: &'static str
+ = "DisableInformationEvents";
+pub const CRYPTNET_CRL_PRE_FETCH_LOG_FILE_NAME_VALUE_NAME: &'static str = "LogFileName";
+pub const CRYPTNET_CRL_PRE_FETCH_TIMEOUT_SECONDS_VALUE_NAME: &'static str = "TimeoutSeconds";
+pub const CRYPTNET_CRL_PRE_FETCH_TIMEOUT_SECONDS_DEFAULT: DWORD = 5 * 60;
+pub const CRYPTNET_CRL_PRE_FETCH_MAX_AGE_SECONDS_VALUE_NAME: &'static str = "MaxAgeSeconds";
+pub const CRYPTNET_CRL_PRE_FETCH_MAX_AGE_SECONDS_DEFAULT: DWORD = 2 * 60 * 60;
+pub const CRYPTNET_CRL_PRE_FETCH_MAX_AGE_SECONDS_MIN: DWORD = 5 * 60;
+pub const CRYPTNET_CRL_PRE_FETCH_PUBLISH_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME: &'static str
+ = "PublishBeforeNextUpdateSeconds";
+pub const CRYPTNET_CRL_PRE_FETCH_PUBLISH_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT: DWORD = 1 * 60 * 60;
+pub const CRYPTNET_CRL_PRE_FETCH_PUBLISH_RANDOM_INTERVAL_SECONDS_VALUE_NAME: &'static str
+ = "PublishRandomIntervalSeconds";
+pub const CRYPTNET_CRL_PRE_FETCH_PUBLISH_RANDOM_INTERVAL_SECONDS_DEFAULT: DWORD = 5 * 60;
+pub const CRYPTNET_CRL_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME: &'static str
+ = "MinBeforeNextUpdateSeconds";
+pub const CRYPTNET_CRL_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT: DWORD = 5 * 60;
+pub const CRYPTNET_CRL_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_SECONDS_VALUE_NAME: &'static str
+ = "MinAfterNextUpdateSeconds";
+pub const CRYPTNET_CRL_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_SECONDS_DEFAULT: DWORD = 5 * 60;
+pub const CERT_GROUP_POLICY_CHAIN_CONFIG_REGPATH: &'static str
+ = "Software\\Policies\\Microsoft\\SystemCertificates\\ChainEngine\\Config";
+pub const CERT_CHAIN_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME: &'static str
+ = "ChainUrlRetrievalTimeoutMilliseconds";
+pub const CERT_CHAIN_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_DEFAULT: DWORD = 15 * 1000;
+pub const CERT_CHAIN_REV_ACCUMULATIVE_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME: &'static str
+ = "ChainRevAccumulativeUrlRetrievalTimeoutMilliseconds";
+pub const CERT_CHAIN_REV_ACCUMULATIVE_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_DEFAULT: DWORD
+ = 20 * 1000;
+pub const CERT_RETR_BEHAVIOR_INET_AUTH_VALUE_NAME: &'static str = "EnableInetUnknownAuth";
+pub const CERT_RETR_BEHAVIOR_INET_STATUS_VALUE_NAME: &'static str = "EnableInetLocal";
+pub const CERT_RETR_BEHAVIOR_FILE_VALUE_NAME: &'static str = "AllowFileUrlScheme";
+pub const CERT_RETR_BEHAVIOR_LDAP_VALUE_NAME: &'static str = "DisableLDAPSignAndEncrypt";
+pub const CRYPTNET_CACHED_OCSP_SWITCH_TO_CRL_COUNT_VALUE_NAME: &'static str
+ = "CryptnetCachedOcspSwitchToCrlCount";
+pub const CRYPTNET_CACHED_OCSP_SWITCH_TO_CRL_COUNT_DEFAULT: DWORD = 50;
+pub const CRYPTNET_CRL_BEFORE_OCSP_ENABLE: DWORD = 0xFFFFFFFF;
+pub const CERT_CHAIN_DISABLE_AIA_URL_RETRIEVAL_VALUE_NAME: &'static str = "DisableAIAUrlRetrieval";
+pub const CERT_CHAIN_OPTIONS_VALUE_NAME: &'static str = "Options";
+pub const CERT_CHAIN_OPTION_DISABLE_AIA_URL_RETRIEVAL: DWORD = 0x2;
+pub const CERT_CHAIN_OPTION_ENABLE_SIA_URL_RETRIEVAL: DWORD = 0x4;
+pub const CERT_CHAIN_CROSS_CERT_DOWNLOAD_INTERVAL_HOURS_VALUE_NAME: &'static str
+ = "CrossCertDownloadIntervalHours";
+pub const CERT_CHAIN_CROSS_CERT_DOWNLOAD_INTERVAL_HOURS_DEFAULT: DWORD = 24 * 7;
+pub const CERT_CHAIN_CRL_VALIDITY_EXT_PERIOD_HOURS_VALUE_NAME: &'static str
+ = "CRLValidityExtensionPeriod";
+pub const CERT_CHAIN_CRL_VALIDITY_EXT_PERIOD_HOURS_DEFAULT: DWORD = 12;
+pub type HCERTCHAINENGINE = HANDLE;
+pub const HCCE_CURRENT_USER: HCERTCHAINENGINE = 0 as HCERTCHAINENGINE;
+pub const HCCE_LOCAL_MACHINE: HCERTCHAINENGINE = 0x1 as HCERTCHAINENGINE;
+pub const HCCE_SERIAL_LOCAL_MACHINE: HCERTCHAINENGINE = 0x2 as HCERTCHAINENGINE;
+pub const CERT_CHAIN_CACHE_END_CERT: DWORD = 0x00000001;
+pub const CERT_CHAIN_THREAD_STORE_SYNC: DWORD = 0x00000002;
+pub const CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL: DWORD = 0x00000004;
+pub const CERT_CHAIN_USE_LOCAL_MACHINE_STORE: DWORD = 0x00000008;
+pub const CERT_CHAIN_ENABLE_CACHE_AUTO_UPDATE: DWORD = 0x00000010;
+pub const CERT_CHAIN_ENABLE_SHARE_STORE: DWORD = 0x00000020;
+STRUCT!{struct CERT_CHAIN_ENGINE_CONFIG {
+ cbSize: DWORD,
+ hRestrictedRoot: HCERTSTORE,
+ hRestrictedTrust: HCERTSTORE,
+ hRestrictedOther: HCERTSTORE,
+ cAdditionalStore: DWORD,
+ rghAdditionalStore: *mut HCERTSTORE,
+ dwFlags: DWORD,
+ dwUrlRetrievalTimeout: DWORD,
+ MaximumCachedCertificates: DWORD,
+ CycleDetectionModulus: DWORD,
+ hExclusiveRoot: HCERTSTORE,
+ hExclusiveTrustedPeople: HCERTSTORE,
+ dwExclusiveFlags: DWORD,
+}}
+pub type PCERT_CHAIN_ENGINE_CONFIG = *mut CERT_CHAIN_ENGINE_CONFIG;
+extern "system" {
+ pub fn CertCreateCertificateChainEngine(
+ pConfig: PCERT_CHAIN_ENGINE_CONFIG,
+ phChainEngine: *mut HCERTCHAINENGINE,
+ ) -> BOOL;
+ pub fn CertFreeCertificateChainEngine(
+ hChainEngine: HCERTCHAINENGINE,
+ );
+ pub fn CertResyncCertificateChainEngine(
+ hChainEngine: HCERTCHAINENGINE,
+ ) -> BOOL;
+}
+STRUCT!{struct CERT_TRUST_STATUS {
+ dwErrorStatus: DWORD,
+ dwInfoStatus: DWORD,
+}}
+pub type PCERT_TRUST_STATUS = *mut CERT_TRUST_STATUS;
+pub const CERT_TRUST_NO_ERROR: DWORD = 0x00000000;
+pub const CERT_TRUST_IS_NOT_TIME_VALID: DWORD = 0x00000001;
+pub const CERT_TRUST_IS_NOT_TIME_NESTED: DWORD = 0x00000002;
+pub const CERT_TRUST_IS_REVOKED: DWORD = 0x00000004;
+pub const CERT_TRUST_IS_NOT_SIGNATURE_VALID: DWORD = 0x00000008;
+pub const CERT_TRUST_IS_NOT_VALID_FOR_USAGE: DWORD = 0x00000010;
+pub const CERT_TRUST_IS_UNTRUSTED_ROOT: DWORD = 0x00000020;
+pub const CERT_TRUST_REVOCATION_STATUS_UNKNOWN: DWORD = 0x00000040;
+pub const CERT_TRUST_IS_CYCLIC: DWORD = 0x00000080;
+pub const CERT_TRUST_INVALID_EXTENSION: DWORD = 0x00000100;
+pub const CERT_TRUST_INVALID_POLICY_CONSTRAINTS: DWORD = 0x00000200;
+pub const CERT_TRUST_INVALID_BASIC_CONSTRAINTS: DWORD = 0x00000400;
+pub const CERT_TRUST_INVALID_NAME_CONSTRAINTS: DWORD = 0x00000800;
+pub const CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT: DWORD = 0x00001000;
+pub const CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT: DWORD = 0x00002000;
+pub const CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT: DWORD = 0x00004000;
+pub const CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT: DWORD = 0x00008000;
+pub const CERT_TRUST_IS_OFFLINE_REVOCATION: DWORD = 0x01000000;
+pub const CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY: DWORD = 0x02000000;
+pub const CERT_TRUST_IS_PARTIAL_CHAIN: DWORD = 0x00010000;
+pub const CERT_TRUST_CTL_IS_NOT_TIME_VALID: DWORD = 0x00020000;
+pub const CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID: DWORD = 0x00040000;
+pub const CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE: DWORD = 0x00080000;
+pub const CERT_TRUST_HAS_EXACT_MATCH_ISSUER: DWORD = 0x00000001;
+pub const CERT_TRUST_HAS_KEY_MATCH_ISSUER: DWORD = 0x00000002;
+pub const CERT_TRUST_HAS_NAME_MATCH_ISSUER: DWORD = 0x00000004;
+pub const CERT_TRUST_IS_SELF_SIGNED: DWORD = 0x00000008;
+pub const CERT_TRUST_AUTO_UPDATE_CA_REVOCATION: DWORD = 0x00000010;
+pub const CERT_TRUST_AUTO_UPDATE_END_REVOCATION: DWORD = 0x00000020;
+pub const CERT_TRUST_NO_OCSP_FAILOVER_TO_CRL: DWORD = 0x00000040;
+pub const CERT_TRUST_IS_KEY_ROLLOVER: DWORD = 0x00000080;
+pub const CERT_TRUST_SSL_HANDSHAKE_OCSP: DWORD = 0x00040000;
+pub const CERT_TRUST_SSL_TIME_VALID_OCSP: DWORD = 0x00080000;
+pub const CERT_TRUST_SSL_RECONNECT_OCSP: DWORD = 0x00100000;
+pub const CERT_TRUST_HAS_PREFERRED_ISSUER: DWORD = 0x00000100;
+pub const CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY: DWORD = 0x00000200;
+pub const CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS: DWORD = 0x00000400;
+pub const CERT_TRUST_IS_PEER_TRUSTED: DWORD = 0x00000800;
+pub const CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED: DWORD = 0x00001000;
+pub const CERT_TRUST_IS_FROM_EXCLUSIVE_TRUST_STORE: DWORD = 0x00002000;
+pub const CERT_TRUST_IS_CA_TRUSTED: DWORD = 0x00004000;
+pub const CERT_TRUST_HAS_AUTO_UPDATE_WEAK_SIGNATURE: DWORD = 0x00008000;
+pub const CERT_TRUST_HAS_ALLOW_WEAK_SIGNATURE: DWORD = 0x00020000;
+pub const CERT_TRUST_IS_COMPLEX_CHAIN: DWORD = 0x00010000;
+pub const CERT_TRUST_SSL_TIME_VALID: DWORD = 0x01000000;
+pub const CERT_TRUST_NO_TIME_CHECK: DWORD = 0x02000000;
+STRUCT!{struct CERT_REVOCATION_INFO {
+ cbSize: DWORD,
+ dwRevocationResult: DWORD,
+ pszRevocationOid: LPCSTR,
+ pvOidSpecificInfo: LPVOID,
+ fHasFreshnessTime: BOOL,
+ dwFreshnessTime: DWORD,
+ pCrlInfo: PCERT_REVOCATION_CRL_INFO,
+}}
+pub type PCERT_REVOCATION_INFO = *mut CERT_REVOCATION_INFO;
+STRUCT!{struct CERT_TRUST_LIST_INFO {
+ cbSize: DWORD,
+ pCtlEntry: PCTL_ENTRY,
+ pCtlContext: PCCTL_CONTEXT,
+}}
+pub type PCERT_TRUST_LIST_INFO = *mut CERT_TRUST_LIST_INFO;
+STRUCT!{struct CERT_CHAIN_ELEMENT {
+ cbSize: DWORD,
+ pCertContext: PCCERT_CONTEXT,
+ TrustStatus: CERT_TRUST_STATUS,
+ pRevocationInfo: PCERT_REVOCATION_INFO,
+ pIssuanceUsage: PCERT_ENHKEY_USAGE,
+ pApplicationUsage: PCERT_ENHKEY_USAGE,
+ pwszExtendedErrorInfo: LPWSTR,
+}}
+pub type PCERT_CHAIN_ELEMENT = *mut CERT_CHAIN_ELEMENT;
+pub type PCCERT_CHAIN_ELEMENT = *const CERT_CHAIN_ELEMENT;
+STRUCT!{struct CERT_SIMPLE_CHAIN {
+ cbSize: DWORD,
+ TrustStatus: CERT_TRUST_STATUS,
+ cElement: DWORD,
+ rgpElement: *mut PCERT_CHAIN_ELEMENT,
+ pTrustListInfo: PCERT_TRUST_LIST_INFO,
+ fHasRevocationFreshnessTime: BOOL,
+ dwRevocationFreshnessTime: DWORD,
+}}
+pub type PCERT_SIMPLE_CHAIN = *mut CERT_SIMPLE_CHAIN;
+pub type PCCERT_SIMPLE_CHAIN = *const CERT_SIMPLE_CHAIN;
+pub type PCERT_CHAIN_CONTEXT = *mut CERT_CHAIN_CONTEXT;
+pub type PCCERT_CHAIN_CONTEXT = *const CERT_CHAIN_CONTEXT;
+STRUCT!{struct CERT_CHAIN_CONTEXT {
+ cbSize: DWORD,
+ TrustStatus: CERT_TRUST_STATUS,
+ cChain: DWORD,
+ rgpChain: *mut PCERT_SIMPLE_CHAIN,
+ cLowerQualityChainContext: DWORD,
+ rgpLowerQualityChainContext: *mut PCCERT_CHAIN_CONTEXT,
+ fHasRevocationFreshnessTime: BOOL,
+ dwRevocationFreshnessTime: DWORD,
+ dwCreateFlags: DWORD,
+ ChainId: GUID,
+}}
+pub const USAGE_MATCH_TYPE_AND: DWORD = 0x00000000;
+pub const USAGE_MATCH_TYPE_OR: DWORD = 0x00000001;
+STRUCT!{struct CERT_USAGE_MATCH {
+ dwType: DWORD,
+ Usage: CERT_ENHKEY_USAGE,
+}}
+pub type PCERT_USAGE_MATCH = *mut CERT_USAGE_MATCH;
+STRUCT!{struct CTL_USAGE_MATCH {
+ dwType: DWORD,
+ Usage: CTL_USAGE,
+}}
+pub type PCTL_USAGE_MATCH = *mut CTL_USAGE_MATCH;
+STRUCT!{struct CERT_CHAIN_PARA {
+ cbSize: DWORD,
+ RequestedUsage: CERT_USAGE_MATCH,
+ RequestedIssuancePolicy: CERT_USAGE_MATCH,
+ dwUrlRetrievalTimeout: DWORD,
+ fCheckRevocationFreshnessTime: BOOL,
+ dwRevocationFreshnessTime: DWORD,
+ pftCacheResync: LPFILETIME,
+ pStrongSignPara: PCCERT_STRONG_SIGN_PARA,
+ dwStrongSignFlags: DWORD,
+}}
+pub type PCERT_CHAIN_PARA = *mut CERT_CHAIN_PARA;
+pub const CERT_CHAIN_STRONG_SIGN_DISABLE_END_CHECK_FLAG: DWORD = 0x00000001;
+pub const CERT_CHAIN_REVOCATION_CHECK_END_CERT: DWORD = 0x10000000;
+pub const CERT_CHAIN_REVOCATION_CHECK_CHAIN: DWORD = 0x20000000;
+pub const CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT: DWORD = 0x40000000;
+pub const CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY: DWORD = 0x80000000;
+pub const CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT: DWORD = 0x08000000;
+pub const CERT_CHAIN_REVOCATION_CHECK_OCSP_CERT: DWORD = 0x04000000;
+pub const CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING: DWORD = 0x00000040;
+pub const CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS: DWORD = 0x00000080;
+pub const CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE: DWORD = 0x00000100;
+pub const CERT_CHAIN_TIMESTAMP_TIME: DWORD = 0x00000200;
+pub const CERT_CHAIN_ENABLE_PEER_TRUST: DWORD = 0x00000400;
+pub const CERT_CHAIN_DISABLE_MY_PEER_TRUST: DWORD = 0x00000800;
+pub const CERT_CHAIN_DISABLE_MD2_MD4: DWORD = 0x00001000;
+pub const CERT_CHAIN_DISABLE_AIA: DWORD = 0x00002000;
+pub const CERT_CHAIN_HAS_MOTW: DWORD = 0x00004000;
+pub const CERT_CHAIN_ONLY_ADDITIONAL_AND_AUTH_ROOT: DWORD = 0x00008000;
+pub const CERT_CHAIN_OPT_IN_WEAK_SIGNATURE: DWORD = 0x00010000;
+extern "system" {
+ pub fn CertGetCertificateChain(
+ hChainEngine: HCERTCHAINENGINE,
+ pCertContext: PCCERT_CONTEXT,
+ pTime: LPFILETIME,
+ hAdditionalStore: HCERTSTORE,
+ pChainPara: PCERT_CHAIN_PARA,
+ dwFlags: DWORD,
+ pvReserved: LPVOID,
+ ppChainContext: *mut PCCERT_CHAIN_CONTEXT,
+ ) -> BOOL;
+ pub fn CertFreeCertificateChain(
+ pChainContext: PCCERT_CHAIN_CONTEXT,
+ );
+ pub fn CertDuplicateCertificateChain(
+ pChainContext: PCCERT_CHAIN_CONTEXT,
+ ) -> PCCERT_CHAIN_CONTEXT;
+}
+STRUCT!{struct CERT_REVOCATION_CHAIN_PARA {
+ cbSize: DWORD,
+ hChainEngine: HCERTCHAINENGINE,
+ hAdditionalStore: HCERTSTORE,
+ dwChainFlags: DWORD,
+ dwUrlRetrievalTimeout: DWORD,
+ pftCurrentTime: LPFILETIME,
+ pftCacheResync: LPFILETIME,
+ cbMaxUrlRetrievalByteCount: DWORD,
+}}
+pub const REVOCATION_OID_CRL_REVOCATION: LPCSTR = 1 as LPCSTR;
+STRUCT!{struct CRL_REVOCATION_INFO {
+ pCrlEntry: PCRL_ENTRY,
+ pCrlContext: PCCRL_CONTEXT,
+ pCrlIssuerChain: PCCERT_CHAIN_CONTEXT,
+}}
+pub type PCRL_REVOCATION_INFO = *mut CRL_REVOCATION_INFO;
+extern "system" {
+ pub fn CertFindChainInStore(
+ hCertStore: HCERTSTORE,
+ dwCertEncodingType: DWORD,
+ dwFindFlags: DWORD,
+ dwFindType: DWORD,
+ pvFindPara: *const c_void,
+ pPrevChainContext: PCCERT_CHAIN_CONTEXT,
+ ) -> PCCERT_CHAIN_CONTEXT;
+}
+pub const CERT_CHAIN_FIND_BY_ISSUER: DWORD = 1;
+FN!{stdcall PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK(
+ pCert: PCCERT_CONTEXT,
+ pvFindArg: *mut c_void,
+) -> BOOL}
+STRUCT!{struct CERT_CHAIN_FIND_ISSUER_PARA {
+ cbSize: DWORD,
+ pszUsageIdentifier: LPCSTR,
+ dwKeySpec: DWORD,
+ dwAcquirePrivateKeyFlags: DWORD,
+ cIssuer: DWORD,
+ rgIssuer: *mut CERT_NAME_BLOB,
+ pfnFindCallback: PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK,
+ pvFindArg: *mut c_void,
+ pdwIssuerChainIndex: *mut DWORD,
+ pdwIssuerElementIndex: *mut DWORD,
+}}
+pub type PCERT_CHAIN_FIND_ISSUER_PARA = *mut CERT_CHAIN_FIND_ISSUER_PARA;
+pub type CERT_CHAIN_FIND_BY_ISSUER_PARA = CERT_CHAIN_FIND_ISSUER_PARA;
+pub type PCERT_CHAIN_FIND_BY_ISSUER_PARA = *mut CERT_CHAIN_FIND_ISSUER_PARA;
+pub const CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG: DWORD = 0x0001;
+pub const CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG: DWORD = 0x0002;
+pub const CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG: DWORD = 0x0004;
+pub const CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG: DWORD = 0x0008;
+pub const CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG: DWORD = 0x4000;
+pub const CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG: DWORD = 0x8000;
+STRUCT!{struct CERT_CHAIN_POLICY_PARA {
+ cbSize: DWORD,
+ dwFlags: DWORD,
+ pvExtraPolicyPara: *mut c_void,
+}}
+pub type PCERT_CHAIN_POLICY_PARA = *mut CERT_CHAIN_POLICY_PARA;
+STRUCT!{struct CERT_CHAIN_POLICY_STATUS {
+ cbSize: DWORD,
+ dwError: DWORD,
+ lChainIndex: LONG,
+ lElementIndex: LONG,
+ pvExtraPolicyStatus: *mut c_void,
+}}
+pub type PCERT_CHAIN_POLICY_STATUS = *mut CERT_CHAIN_POLICY_STATUS;
+pub const CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG: DWORD = 0x00000001;
+pub const CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG: DWORD = 0x00000002;
+pub const CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG: DWORD = 0x00000004;
+pub const CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG: DWORD = 0x00000008;
+pub const CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS: DWORD
+ = CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG
+ | CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG
+ | CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG;
+pub const CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG: DWORD = 0x00000010;
+pub const CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG: DWORD = 0x00000020;
+pub const CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG: DWORD = 0x00000040;
+pub const CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG: DWORD = 0x00000080;
+pub const CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG: DWORD = 0x00000100;
+pub const CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG: DWORD = 0x00000200;
+pub const CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG: DWORD = 0x00000400;
+pub const CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG: DWORD = 0x00000800;
+pub const CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS: DWORD
+ = CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG
+ | CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG
+ | CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG
+ | CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG;
+pub const CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG: DWORD = 0x00008000;
+pub const CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG: DWORD = 0x00004000;
+pub const CERT_CHAIN_POLICY_IGNORE_NOT_SUPPORTED_CRITICAL_EXT_FLAG: DWORD = 0x00002000;
+pub const CERT_CHAIN_POLICY_IGNORE_PEER_TRUST_FLAG: DWORD = 0x00001000;
+pub const CERT_CHAIN_POLICY_IGNORE_WEAK_SIGNATURE_FLAG: DWORD = 0x08000000;
+extern "system" {
+ pub fn CertVerifyCertificateChainPolicy(
+ pszPolicyOID: LPCSTR,
+ pChainContext: PCCERT_CHAIN_CONTEXT,
+ pPolicyPara: PCERT_CHAIN_POLICY_PARA,
+ pPolicyStatus: PCERT_CHAIN_POLICY_STATUS,
+ ) -> BOOL;
+}
+pub const CRYPT_OID_VERIFY_CERTIFICATE_CHAIN_POLICY_FUNC: &'static str
+ = "CertDllVerifyCertificateChainPolicy";
+pub const CERT_CHAIN_POLICY_BASE: LPCSTR = 1 as LPCSTR;
+pub const CERT_CHAIN_POLICY_AUTHENTICODE: LPCSTR = 2 as LPCSTR;
+pub const CERT_CHAIN_POLICY_AUTHENTICODE_TS: LPCSTR = 3 as LPCSTR;
+pub const CERT_CHAIN_POLICY_SSL: LPCSTR = 4 as LPCSTR;
+pub const CERT_CHAIN_POLICY_BASIC_CONSTRAINTS: LPCSTR = 5 as LPCSTR;
+pub const CERT_CHAIN_POLICY_NT_AUTH: LPCSTR = 6 as LPCSTR;
+pub const CERT_CHAIN_POLICY_MICROSOFT_ROOT: LPCSTR = 7 as LPCSTR;
+pub const CERT_CHAIN_POLICY_EV: LPCSTR = 8 as LPCSTR;
+pub const CERT_CHAIN_POLICY_SSL_F12: LPCSTR = 9 as LPCSTR;
+pub const CERT_CHAIN_POLICY_SSL_HPKP_HEADER: LPCSTR = 10 as LPCSTR;
+pub const CERT_CHAIN_POLICY_THIRD_PARTY_ROOT: LPCSTR = 11 as LPCSTR;
+pub const CERT_CHAIN_POLICY_SSL_KEY_PIN: LPCSTR = 12 as LPCSTR;
+STRUCT!{struct AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA {
+ cbSize: DWORD,
+ dwRegPolicySettings: DWORD,
+ pSignerInfo: PCMSG_SIGNER_INFO,
+}}
+pub type PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA
+ = *mut AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA;
+STRUCT!{struct AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS {
+ cbSize: DWORD,
+ fCommercial: BOOL,
+}}
+pub type PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS
+ = *mut AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS;
+STRUCT!{struct AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA {
+ cbSize: DWORD,
+ dwRegPolicySettings: DWORD,
+ fCommercial: BOOL,
+}}
+pub type PAUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA
+ = *mut AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA;
+UNION!{union HTTPSPolicyCallbackData_u {
+ [u32; 1],
+ cbStruct cbStruct_mut: DWORD,
+ cbSize cbSize_mut: DWORD,
+}}
+STRUCT!{struct HTTPSPolicyCallbackData {
+ u: HTTPSPolicyCallbackData_u,
+ dwAuthType: DWORD,
+ fdwChecks: DWORD,
+ pwszServerName: *mut WCHAR,
+}}
+pub type PHTTPSPolicyCallbackData = *mut HTTPSPolicyCallbackData;
+pub type SSL_EXTRA_CERT_CHAIN_POLICY_PARA = HTTPSPolicyCallbackData;
+pub type PSSL_EXTRA_CERT_CHAIN_POLICY_PARA = *mut HTTPSPolicyCallbackData;
+pub const AUTHTYPE_CLIENT: DWORD = 1;
+pub const AUTHTYPE_SERVER: DWORD = 2;
+pub const BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_CA_FLAG: DWORD = 0x80000000;
+pub const BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_END_ENTITY_FLAG: DWORD = 0x40000000;
+pub const MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG: DWORD = 0x00010000;
+pub const MICROSOFT_ROOT_CERT_CHAIN_POLICY_CHECK_APPLICATION_ROOT_FLAG: DWORD = 0x00020000;
+pub const MICROSOFT_ROOT_CERT_CHAIN_POLICY_DISABLE_FLIGHT_ROOT_FLAG: DWORD = 0x00040000;
+STRUCT!{struct EV_EXTRA_CERT_CHAIN_POLICY_PARA {
+ cbSize: DWORD,
+ dwRootProgramQualifierFlags: DWORD,
+}}
+pub type PEV_EXTRA_CERT_CHAIN_POLICY_PARA = *mut EV_EXTRA_CERT_CHAIN_POLICY_PARA;
+STRUCT!{struct EV_EXTRA_CERT_CHAIN_POLICY_STATUS {
+ cbSize: DWORD,
+ dwQualifiers: DWORD,
+ dwIssuanceUsageIndex: DWORD,
+}}
+pub type PEV_EXTRA_CERT_CHAIN_POLICY_STATUS = *mut EV_EXTRA_CERT_CHAIN_POLICY_STATUS;
+pub const SSL_F12_ERROR_TEXT_LENGTH: usize = 256;
+STRUCT!{struct SSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS {
+ cbSize: DWORD,
+ dwErrorLevel: DWORD,
+ dwErrorCategory: DWORD,
+ dwReserved: DWORD,
+ wszErrorText: [WCHAR; SSL_F12_ERROR_TEXT_LENGTH],
+}}
+pub type PSSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS = *mut SSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS;
+pub const CERT_CHAIN_POLICY_SSL_F12_SUCCESS_LEVEL: DWORD = 0;
+pub const CERT_CHAIN_POLICY_SSL_F12_WARNING_LEVEL: DWORD = 1;
+pub const CERT_CHAIN_POLICY_SSL_F12_ERROR_LEVEL: DWORD = 2;
+pub const CERT_CHAIN_POLICY_SSL_F12_NONE_CATEGORY: DWORD = 0;
+pub const CERT_CHAIN_POLICY_SSL_F12_WEAK_CRYPTO_CATEGORY: DWORD = 1;
+pub const CERT_CHAIN_POLICY_SSL_F12_ROOT_PROGRAM_CATEGORY: DWORD = 2;
+pub const SSL_HPKP_PKP_HEADER_INDEX: usize = 0;
+pub const SSL_HPKP_PKP_RO_HEADER_INDEX: usize = 1;
+pub const SSL_HPKP_HEADER_COUNT: usize = 2;
+STRUCT!{struct SSL_HPKP_HEADER_EXTRA_CERT_CHAIN_POLICY_PARA {
+ cbSize: DWORD,
+ dwReserved: DWORD,
+ pwszServerName: LPWSTR,
+ rgpszHpkpValue: [LPSTR; SSL_HPKP_HEADER_COUNT],
+}}
+pub type PSSL_HPKP_HEADER_EXTRA_CERT_CHAIN_POLICY_PARA
+ = *mut SSL_HPKP_HEADER_EXTRA_CERT_CHAIN_POLICY_PARA;
+STRUCT!{struct SSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_PARA {
+ cbSize: DWORD,
+ dwReserved: DWORD,
+ pwszServerName: PCWSTR,
+}}
+pub type PSSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_PARA = *mut SSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_PARA;
+pub const SSL_KEY_PIN_ERROR_TEXT_LENGTH: usize = 512;
+STRUCT!{struct SSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_STATUS {
+ cbSize: DWORD,
+ lError: LONG,
+ wszErrorText: [WCHAR; SSL_KEY_PIN_ERROR_TEXT_LENGTH],
+}}
+pub type PSSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_STATUS
+ = *mut SSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_STATUS;
+pub const CERT_CHAIN_POLICY_SSL_KEY_PIN_MISMATCH_ERROR: LONG = -2;
+pub const CERT_CHAIN_POLICY_SSL_KEY_PIN_MITM_ERROR: LONG = -1;
+pub const CERT_CHAIN_POLICY_SSL_KEY_PIN_SUCCESS: LONG = 0;
+pub const CERT_CHAIN_POLICY_SSL_KEY_PIN_MITM_WARNING: LONG = 1;
+pub const CERT_CHAIN_POLICY_SSL_KEY_PIN_MISMATCH_WARNING: LONG = 2;
+extern "system" {
+ pub fn CryptStringToBinaryA(
+ pszString: LPCSTR,
+ cchString: DWORD,
+ dwFlags: DWORD,
+ pbBinary: *mut BYTE,
+ pcbBinary: *mut DWORD,
+ pdwSkip: *mut DWORD,
+ pdwFlags: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptStringToBinaryW(
+ pszString: LPCWSTR,
+ cchString: DWORD,
+ dwFlags: DWORD,
+ pbBinary: *mut BYTE,
+ pcbBinary: *mut DWORD,
+ pdwSkip: *mut DWORD,
+ pdwFlags: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptBinaryToStringA(
+ pbBinary: *const BYTE,
+ cbBinary: DWORD,
+ dwFlags: DWORD,
+ pszString: LPSTR,
+ pcchString: *mut DWORD,
+ ) -> BOOL;
+ pub fn CryptBinaryToStringW(
+ pbBinary: *const BYTE,
+ cbBinary: DWORD,
+ dwFlags: DWORD,
+ pszString: LPWSTR,
+ pcchString: *mut DWORD,
+ ) -> BOOL;
+}
+pub const CRYPT_STRING_BASE64HEADER: DWORD = 0x00000000;
+pub const CRYPT_STRING_BASE64: DWORD = 0x00000001;
+pub const CRYPT_STRING_BINARY: DWORD = 0x00000002;
+pub const CRYPT_STRING_BASE64REQUESTHEADER: DWORD = 0x00000003;
+pub const CRYPT_STRING_HEX: DWORD = 0x00000004;
+pub const CRYPT_STRING_HEXASCII: DWORD = 0x00000005;
+pub const CRYPT_STRING_BASE64_ANY: DWORD = 0x00000006;
+pub const CRYPT_STRING_ANY: DWORD = 0x00000007;
+pub const CRYPT_STRING_HEX_ANY: DWORD = 0x00000008;
+pub const CRYPT_STRING_BASE64X509CRLHEADER: DWORD = 0x00000009;
+pub const CRYPT_STRING_HEXADDR: DWORD = 0x0000000a;
+pub const CRYPT_STRING_HEXASCIIADDR: DWORD = 0x0000000b;
+pub const CRYPT_STRING_HEXRAW: DWORD = 0x0000000c;
+pub const CRYPT_STRING_BASE64URI: DWORD = 0x0000000d;
+pub const CRYPT_STRING_ENCODEMASK: DWORD = 0x000000ff;
+pub const CRYPT_STRING_RESERVED100: DWORD = 0x00000100;
+pub const CRYPT_STRING_RESERVED200: DWORD = 0x00000200;
+pub const CRYPT_STRING_PERCENTESCAPE: DWORD = 0x08000000;
+pub const CRYPT_STRING_HASHDATA: DWORD = 0x10000000;
+pub const CRYPT_STRING_STRICT: DWORD = 0x20000000;
+pub const CRYPT_STRING_NOCRLF: DWORD = 0x40000000;
+pub const CRYPT_STRING_NOCR: DWORD = 0x80000000;
+pub const szOID_PKCS_12_PbeIds: &'static str = "1.2.840.113549.1.12.1";
+pub const szOID_PKCS_12_pbeWithSHA1And128BitRC4: &'static str = "1.2.840.113549.1.12.1.1";
+pub const szOID_PKCS_12_pbeWithSHA1And40BitRC4: &'static str = "1.2.840.113549.1.12.1.2";
+pub const szOID_PKCS_12_pbeWithSHA1And3KeyTripleDES: &'static str = "1.2.840.113549.1.12.1.3";
+pub const szOID_PKCS_12_pbeWithSHA1And2KeyTripleDES: &'static str = "1.2.840.113549.1.12.1.4";
+pub const szOID_PKCS_12_pbeWithSHA1And128BitRC2: &'static str = "1.2.840.113549.1.12.1.5";
+pub const szOID_PKCS_12_pbeWithSHA1And40BitRC2: &'static str = "1.2.840.113549.1.12.1.6";
+STRUCT!{struct CRYPT_PKCS12_PBE_PARAMS {
+ iIterations: c_int,
+ cbSalt: ULONG,
+}}
+extern "system" {
+ pub fn PFXImportCertStore(
+ pPFX: *mut CRYPT_DATA_BLOB,
+ szPassword: LPCWSTR,
+ dwFlags: DWORD,
+ ) -> HCERTSTORE;
+}
+pub const PKCS12_IMPORT_SILENT: DWORD = 0x00000040;
+pub const CRYPT_USER_KEYSET: DWORD = 0x00001000;
+pub const PKCS12_PREFER_CNG_KSP: DWORD = 0x00000100;
+pub const PKCS12_ALWAYS_CNG_KSP: DWORD = 0x00000200;
+pub const PKCS12_ONLY_CERTIFICATES: DWORD = 0x00000400;
+pub const PKCS12_ONLY_NOT_ENCRYPTED_CERTIFICATES: DWORD = 0x00000800;
+pub const PKCS12_ALLOW_OVERWRITE_KEY: DWORD = 0x00004000;
+pub const PKCS12_NO_PERSIST_KEY: DWORD = 0x00008000;
+pub const PKCS12_IMPORT_RESERVED_MASK: DWORD = 0xffff0000;
+pub const PKCS12_OBJECT_LOCATOR_ALL_IMPORT_FLAGS: DWORD = PKCS12_ALWAYS_CNG_KSP
+ | PKCS12_NO_PERSIST_KEY | PKCS12_IMPORT_SILENT | PKCS12_INCLUDE_EXTENDED_PROPERTIES;
+pub const PKCS12_ONLY_CERTIFICATES_PROVIDER_TYPE: DWORD = 0;
+pub const PKCS12_ONLY_CERTIFICATES_PROVIDER_NAME: &'static str = "PfxProvider";
+pub const PKCS12_ONLY_CERTIFICATES_CONTAINER_NAME: &'static str = "PfxContainer";
+extern "system" {
+ pub fn PFXIsPFXBlob(
+ pPFX: *mut CRYPT_DATA_BLOB,
+ ) -> BOOL;
+ pub fn PFXVerifyPassword(
+ pPFX: *mut CRYPT_DATA_BLOB,
+ szPassword: LPCWSTR,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn PFXExportCertStoreEx(
+ hStore: HCERTSTORE,
+ pPFX: *mut CRYPT_DATA_BLOB,
+ szPassword: LPCWSTR,
+ pvPara: *mut c_void,
+ dwFlags: DWORD,
+ ) -> BOOL;
+}
+pub const REPORT_NO_PRIVATE_KEY: DWORD = 0x0001;
+pub const REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY: DWORD = 0x0002;
+pub const EXPORT_PRIVATE_KEYS: DWORD = 0x0004;
+pub const PKCS12_INCLUDE_EXTENDED_PROPERTIES: DWORD = 0x0010;
+pub const PKCS12_PROTECT_TO_DOMAIN_SIDS: DWORD = 0x0020;
+pub const PKCS12_EXPORT_SILENT: DWORD = 0x0040;
+pub const PKCS12_DISABLE_ENCRYPT_CERTIFICATES: DWORD = 0x0100;
+pub const PKCS12_ENCRYPT_CERTIFICATES: DWORD = 0x0200;
+pub const PKCS12_EXPORT_ECC_CURVE_PARAMETERS: DWORD = 0x1000;
+pub const PKCS12_EXPORT_ECC_CURVE_OID: DWORD = 0x2000;
+pub const PKCS12_EXPORT_RESERVED_MASK: DWORD = 0xffff0000;
+pub const PKCS12_CONFIG_REGPATH: &'static str
+ = "Software\\Microsoft\\Windows\\CurrentVersion\\PFX";
+pub const PKCS12_ENCRYPT_CERTIFICATES_VALUE_NAME: &'static str = "EncryptCertificates";
+extern "system" {
+ pub fn PFXExportCertStore(
+ hStore: HCERTSTORE,
+ pPFX: *mut CRYPT_DATA_BLOB,
+ szPassword: LPCWSTR,
+ dwFlags: DWORD,
+ ) -> BOOL;
+}
+pub type HCERT_SERVER_OCSP_RESPONSE = *mut c_void;
+pub type PCERT_SERVER_OCSP_RESPONSE_CONTEXT = *mut CERT_SERVER_OCSP_RESPONSE_CONTEXT;
+pub type PCCERT_SERVER_OCSP_RESPONSE_CONTEXT = *const CERT_SERVER_OCSP_RESPONSE_CONTEXT;
+STRUCT!{struct CERT_SERVER_OCSP_RESPONSE_CONTEXT {
+ cbSize: DWORD,
+ pbEncodedOcspResponse: *mut BYTE,
+ cbEncodedOcspResponse: DWORD,
+}}
+FN!{stdcall PFN_CERT_SERVER_OCSP_RESPONSE_UPDATE_CALLBACK(
+ pChainContext: PCCERT_CHAIN_CONTEXT,
+ pServerOcspResponseContext: PCCERT_SERVER_OCSP_RESPONSE_CONTEXT,
+ pNewCrlContext: PCCRL_CONTEXT,
+ pPrevCrlContext: PCCRL_CONTEXT,
+ pvArg: PVOID,
+ dwWriteOcspFileError: DWORD,
+) -> ()}
+STRUCT!{struct CERT_SERVER_OCSP_RESPONSE_OPEN_PARA {
+ cbSize: DWORD,
+ dwFlags: DWORD,
+ pcbUsedSize: *mut DWORD,
+ pwszOcspDirectory: PWSTR,
+ pfnUpdateCallback: PFN_CERT_SERVER_OCSP_RESPONSE_UPDATE_CALLBACK,
+ pvUpdateCallbackArg: PVOID,
+}}
+pub type PCERT_SERVER_OCSP_RESPONSE_OPEN_PARA = *mut CERT_SERVER_OCSP_RESPONSE_OPEN_PARA;
+pub const CERT_SERVER_OCSP_RESPONSE_OPEN_PARA_READ_FLAG: DWORD = 0x00000001;
+pub const CERT_SERVER_OCSP_RESPONSE_OPEN_PARA_WRITE_FLAG: DWORD = 0x00000002;
+extern "system" {
+ pub fn CertOpenServerOcspResponse(
+ pChainContext: PCCERT_CHAIN_CONTEXT,
+ dwFlags: DWORD,
+ pvReserved: LPVOID,
+ ) -> HCERT_SERVER_OCSP_RESPONSE;
+}
+pub const CERT_SERVER_OCSP_RESPONSE_ASYNC_FLAG: DWORD = 0x00000001;
+extern "system" {
+ pub fn CertAddRefServerOcspResponse(
+ hServerOcspResponse: HCERT_SERVER_OCSP_RESPONSE,
+ );
+ pub fn CertCloseServerOcspResponse(
+ hServerOcspResponse: HCERT_SERVER_OCSP_RESPONSE,
+ dwFlags: DWORD,
+ );
+ pub fn CertGetServerOcspResponseContext(
+ hServerOcspResponse: HCERT_SERVER_OCSP_RESPONSE,
+ dwFlags: DWORD,
+ pvReserved: LPVOID,
+ ) -> PCCERT_SERVER_OCSP_RESPONSE_CONTEXT;
+ pub fn CertAddRefServerOcspResponseContext(
+ pServerOcspResponseContext: PCCERT_SERVER_OCSP_RESPONSE_CONTEXT,
+ );
+ pub fn CertFreeServerOcspResponseContext(
+ pServerOcspResponseContext: PCCERT_SERVER_OCSP_RESPONSE_CONTEXT,
+ );
+ pub fn CertRetrieveLogoOrBiometricInfo(
+ pCertContext: PCCERT_CONTEXT,
+ lpszLogoOrBiometricType: LPCSTR,
+ dwRetrievalFlags: DWORD,
+ dwTimeout: DWORD,
+ dwFlags: DWORD,
+ pvReserved: *mut c_void,
+ ppbData: *mut *mut BYTE,
+ pcbData: *mut DWORD,
+ ppwszMimeType: *mut LPWSTR,
+ ) -> BOOL;
+}
+pub const CERT_RETRIEVE_ISSUER_LOGO: LPCSTR = 1 as LPCSTR;
+pub const CERT_RETRIEVE_SUBJECT_LOGO: LPCSTR = 2 as LPCSTR;
+pub const CERT_RETRIEVE_COMMUNITY_LOGO: LPCSTR = 3 as LPCSTR;
+pub const CERT_RETRIEVE_BIOMETRIC_PREDEFINED_BASE_TYPE: LPCSTR = 1000 as LPCSTR;
+pub const CERT_RETRIEVE_BIOMETRIC_PICTURE_TYPE: LPCSTR
+ = (1000 + CERT_BIOMETRIC_PICTURE_TYPE) as LPCSTR;
+pub const CERT_RETRIEVE_BIOMETRIC_SIGNATURE_TYPE: LPCSTR
+ = (1000 + CERT_BIOMETRIC_SIGNATURE_TYPE) as LPCSTR;
+STRUCT!{struct CERT_SELECT_CHAIN_PARA {
+ hChainEngine: HCERTCHAINENGINE,
+ pTime: PFILETIME,
+ hAdditionalStore: HCERTSTORE,
+ pChainPara: PCERT_CHAIN_PARA,
+ dwFlags: DWORD,
+}}
+pub type PCERT_SELECT_CHAIN_PARA = *mut CERT_SELECT_CHAIN_PARA;
+pub type PCCERT_SELECT_CHAIN_PARA = *const CERT_SELECT_CHAIN_PARA;
+pub const CERT_SELECT_MAX_PARA: DWORD = 500;
+STRUCT!{struct CERT_SELECT_CRITERIA {
+ dwType: DWORD,
+ cPara: DWORD,
+ ppPara: *mut *mut c_void,
+}}
+pub type PCERT_SELECT_CRITERIA = *mut CERT_SELECT_CRITERIA;
+pub type PCCERT_SELECT_CRITERIA = *const CERT_SELECT_CRITERIA;
+pub const CERT_SELECT_BY_ENHKEY_USAGE: DWORD = 1;
+pub const CERT_SELECT_BY_KEY_USAGE: DWORD = 2;
+pub const CERT_SELECT_BY_POLICY_OID: DWORD = 3;
+pub const CERT_SELECT_BY_PROV_NAME: DWORD = 4;
+pub const CERT_SELECT_BY_EXTENSION: DWORD = 5;
+pub const CERT_SELECT_BY_SUBJECT_HOST_NAME: DWORD = 6;
+pub const CERT_SELECT_BY_ISSUER_ATTR: DWORD = 7;
+pub const CERT_SELECT_BY_SUBJECT_ATTR: DWORD = 8;
+pub const CERT_SELECT_BY_ISSUER_NAME: DWORD = 9;
+pub const CERT_SELECT_BY_PUBLIC_KEY: DWORD = 10;
+pub const CERT_SELECT_BY_TLS_SIGNATURES: DWORD = 11;
+pub const CERT_SELECT_BY_ISSUER_DISPLAYNAME: DWORD = 12;
+pub const CERT_SELECT_BY_FRIENDLYNAME: DWORD = 13;
+pub const CERT_SELECT_BY_THUMBPRINT: DWORD = 14;
+pub const CERT_SELECT_LAST: DWORD = CERT_SELECT_BY_TLS_SIGNATURES;
+pub const CERT_SELECT_MAX: DWORD = CERT_SELECT_LAST * 3;
+pub const CERT_SELECT_ALLOW_EXPIRED: DWORD = 0x00000001;
+pub const CERT_SELECT_TRUSTED_ROOT: DWORD = 0x00000002;
+pub const CERT_SELECT_DISALLOW_SELFSIGNED: DWORD = 0x00000004;
+pub const CERT_SELECT_HAS_PRIVATE_KEY: DWORD = 0x00000008;
+pub const CERT_SELECT_HAS_KEY_FOR_SIGNATURE: DWORD = 0x00000010;
+pub const CERT_SELECT_HAS_KEY_FOR_KEY_EXCHANGE: DWORD = 0x00000020;
+pub const CERT_SELECT_HARDWARE_ONLY: DWORD = 0x00000040;
+pub const CERT_SELECT_ALLOW_DUPLICATES: DWORD = 0x00000080;
+pub const CERT_SELECT_IGNORE_AUTOSELECT: DWORD = 0x00000100;
+extern "system" {
+ pub fn CertSelectCertificateChains(
+ pSelectionContext: LPCGUID,
+ dwFlags: DWORD,
+ pChainParameters: PCCERT_SELECT_CHAIN_PARA,
+ cCriteria: DWORD,
+ rgpCriteria: PCCERT_SELECT_CRITERIA,
+ hStore: HCERTSTORE,
+ pcSelection: PDWORD,
+ pprgpSelection: *mut *mut PCCERT_CHAIN_CONTEXT,
+ ) -> BOOL;
+ pub fn CertFreeCertificateChainList(
+ prgpSelection: *mut PCCERT_CHAIN_CONTEXT,
+ );
+}
+pub const TIMESTAMP_VERSION: DWORD = 1;
+STRUCT!{struct CRYPT_TIMESTAMP_REQUEST {
+ dwVersion: DWORD,
+ HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ HashedMessage: CRYPT_DER_BLOB,
+ pszTSAPolicyId: LPSTR,
+ Nonce: CRYPT_INTEGER_BLOB,
+ fCertReq: BOOL,
+ cExtension: DWORD,
+ rgExtension: PCERT_EXTENSION,
+}}
+pub type PCRYPT_TIMESTAMP_REQUEST = *mut CRYPT_TIMESTAMP_REQUEST;
+STRUCT!{struct CRYPT_TIMESTAMP_RESPONSE {
+ dwStatus: DWORD,
+ cFreeText: DWORD,
+ rgFreeText: *mut LPWSTR,
+ FailureInfo: CRYPT_BIT_BLOB,
+ ContentInfo: CRYPT_DER_BLOB,
+}}
+pub type PCRYPT_TIMESTAMP_RESPONSE = *mut CRYPT_TIMESTAMP_RESPONSE;
+pub const TIMESTAMP_STATUS_GRANTED: DWORD = 0;
+pub const TIMESTAMP_STATUS_GRANTED_WITH_MODS: DWORD = 1;
+pub const TIMESTAMP_STATUS_REJECTED: DWORD = 2;
+pub const TIMESTAMP_STATUS_WAITING: DWORD = 3;
+pub const TIMESTAMP_STATUS_REVOCATION_WARNING: DWORD = 4;
+pub const TIMESTAMP_STATUS_REVOKED: DWORD = 5;
+pub const TIMESTAMP_FAILURE_BAD_ALG: DWORD = 0;
+pub const TIMESTAMP_FAILURE_BAD_REQUEST: DWORD = 2;
+pub const TIMESTAMP_FAILURE_BAD_FORMAT: DWORD = 5;
+pub const TIMESTAMP_FAILURE_TIME_NOT_AVAILABLE: DWORD = 14;
+pub const TIMESTAMP_FAILURE_POLICY_NOT_SUPPORTED: DWORD = 15;
+pub const TIMESTAMP_FAILURE_EXTENSION_NOT_SUPPORTED: DWORD = 16;
+pub const TIMESTAMP_FAILURE_INFO_NOT_AVAILABLE: DWORD = 17;
+pub const TIMESTAMP_FAILURE_SYSTEM_FAILURE: DWORD = 25;
+STRUCT!{struct CRYPT_TIMESTAMP_ACCURACY {
+ dwSeconds: DWORD,
+ dwMillis: DWORD,
+ dwMicros: DWORD,
+}}
+pub type PCRYPT_TIMESTAMP_ACCURACY = *mut CRYPT_TIMESTAMP_ACCURACY;
+STRUCT!{struct CRYPT_TIMESTAMP_INFO {
+ dwVersion: DWORD,
+ pszTSAPolicyId: LPSTR,
+ HashAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
+ HashedMessage: CRYPT_DER_BLOB,
+ SerialNumber: CRYPT_INTEGER_BLOB,
+ ftTime: FILETIME,
+ pvAccuracy: PCRYPT_TIMESTAMP_ACCURACY,
+ fOrdering: BOOL,
+ Nonce: CRYPT_DER_BLOB,
+ Tsa: CRYPT_DER_BLOB,
+ cExtension: DWORD,
+ rgExtension: PCERT_EXTENSION,
+}}
+pub type PCRYPT_TIMESTAMP_INFO = *mut CRYPT_TIMESTAMP_INFO;
+STRUCT!{struct CRYPT_TIMESTAMP_CONTEXT {
+ cbEncoded: DWORD,
+ pbEncoded: *mut BYTE,
+ pTimeStamp: PCRYPT_TIMESTAMP_INFO,
+}}
+pub type PCRYPT_TIMESTAMP_CONTEXT = *mut CRYPT_TIMESTAMP_CONTEXT;
+STRUCT!{struct CRYPT_TIMESTAMP_PARA {
+ pszTSAPolicyId: LPCSTR,
+ fRequestCerts: BOOL,
+ Nonce: CRYPT_INTEGER_BLOB,
+ cExtension: DWORD,
+ rgExtension: PCERT_EXTENSION,
+}}
+pub type PCRYPT_TIMESTAMP_PARA = *mut CRYPT_TIMESTAMP_PARA;
+extern "system" {
+ pub fn CryptRetrieveTimeStamp(
+ wszUrl: LPCWSTR,
+ dwRetrievalFlags: DWORD,
+ dwTimeout: DWORD,
+ pszHashId: LPCSTR,
+ pPara: *const CRYPT_TIMESTAMP_PARA,
+ pbData: *const BYTE,
+ cbData: DWORD,
+ ppTsContext: *mut PCRYPT_TIMESTAMP_CONTEXT,
+ ppTsSigner: *mut PCCERT_CONTEXT,
+ phStore: *mut HCERTSTORE,
+ ) -> BOOL;
+}
+pub const TIMESTAMP_DONT_HASH_DATA: DWORD = 0x00000001;
+pub const TIMESTAMP_VERIFY_CONTEXT_SIGNATURE: DWORD = 0x00000020;
+pub const TIMESTAMP_NO_AUTH_RETRIEVAL: DWORD = 0x00020000;
+extern "system" {
+ pub fn CryptVerifyTimeStampSignature(
+ pbTSContentInfo: *const BYTE,
+ cbTSContentInfo: DWORD,
+ pbData: *const BYTE,
+ cbData: DWORD,
+ hAdditionalStore: HCERTSTORE,
+ ppTsContext: *mut PCRYPT_TIMESTAMP_CONTEXT,
+ ppTsSigner: *mut PCCERT_CONTEXT,
+ phStore: *mut HCERTSTORE,
+ ) -> BOOL;
+}
+pub const CRYPT_OBJECT_LOCATOR_SPN_NAME_TYPE: DWORD = 1;
+pub const CRYPT_OBJECT_LOCATOR_LAST_RESERVED_NAME_TYPE: DWORD = 32;
+pub const CRYPT_OBJECT_LOCATOR_FIRST_RESERVED_USER_NAME_TYPE: DWORD = 33;
+pub const CRYPT_OBJECT_LOCATOR_LAST_RESERVED_USER_NAME_TYPE: DWORD = 0x0000FFFF;
+pub const SSL_OBJECT_LOCATOR_PFX_FUNC: &'static str = "SslObjectLocatorInitializePfx";
+pub const SSL_OBJECT_LOCATOR_ISSUER_LIST_FUNC: &'static str
+ = "SslObjectLocatorInitializeIssuerList";
+pub const SSL_OBJECT_LOCATOR_CERT_VALIDATION_CONFIG_FUNC: &'static str
+ = "SslObjectLocatorInitializeCertValidationConfig";
+pub const CRYPT_OBJECT_LOCATOR_RELEASE_SYSTEM_SHUTDOWN: DWORD = 1;
+pub const CRYPT_OBJECT_LOCATOR_RELEASE_SERVICE_STOP: DWORD = 2;
+pub const CRYPT_OBJECT_LOCATOR_RELEASE_PROCESS_EXIT: DWORD = 3;
+pub const CRYPT_OBJECT_LOCATOR_RELEASE_DLL_UNLOAD: DWORD = 4;
+FN!{stdcall PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FLUSH(
+ pContext: LPVOID,
+ rgIdentifierOrNameList: *mut PCERT_NAME_BLOB,
+ dwIdentifierOrNameListCount: DWORD,
+) -> BOOL}
+FN!{stdcall PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_GET(
+ pPluginContext: LPVOID,
+ pIdentifier: PCRYPT_DATA_BLOB,
+ dwNameType: DWORD,
+ pNameBlob: PCERT_NAME_BLOB,
+ ppbContent: *mut PBYTE,
+ pcbContent: *mut DWORD,
+ ppwszPassword: *mut PCWSTR,
+ ppIdentifier: *mut PCRYPT_DATA_BLOB,
+) -> BOOL}
+FN!{stdcall PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_RELEASE(
+ dwReason: DWORD,
+ pPluginContext: LPVOID,
+) -> ()}
+FN!{stdcall PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_PASSWORD(
+ pPluginContext: LPVOID,
+ pwszPassword: PCWSTR,
+) -> ()}
+FN!{stdcall PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE(
+ pPluginContext: LPVOID,
+ pbData: PBYTE,
+) -> ()}
+FN!{stdcall PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_IDENTIFIER(
+ pPluginContext: LPVOID,
+ pIdentifier: PCRYPT_DATA_BLOB,
+) -> ()}
+STRUCT!{struct CRYPT_OBJECT_LOCATOR_PROVIDER_TABLE {
+ cbSize: DWORD,
+ pfnGet: PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_GET,
+ pfnRelease: PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_RELEASE,
+ pfnFreePassword: PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_PASSWORD,
+ pfnFree: PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE,
+ pfnFreeIdentifier: PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_IDENTIFIER,
+}}
+pub type PCRYPT_OBJECT_LOCATOR_PROVIDER_TABLE = *mut CRYPT_OBJECT_LOCATOR_PROVIDER_TABLE;
+FN!{stdcall PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_INITIALIZE(
+ pfnFlush: PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FLUSH,
+ pContext: LPVOID,
+ pdwExpectedObjectCount: *mut DWORD,
+ ppFuncTable: *mut PCRYPT_OBJECT_LOCATOR_PROVIDER_TABLE,
+ ppPluginContext: *mut *mut c_void,
+) -> BOOL}
+extern "system" {
+ pub fn CertIsWeakHash(
+ dwHashUseType: DWORD,
+ pwszCNGHashAlgid: LPCWSTR,
+ dwChainFlags: DWORD,
+ pSignerChainContext: PCCERT_CHAIN_CONTEXT,
+ pTimeStamp: LPFILETIME,
+ pwszFileName: LPCWSTR,
+ ) -> BOOL;
+}
+FN!{stdcall PFN_CERT_IS_WEAK_HASH(
+ dwHashUseType: DWORD,
+ pwszCNGHashAlgid: LPCWSTR,
+ dwChainFlags: DWORD,
+ pSignerChainContext: PCCERT_CHAIN_CONTEXT,
+ pTimeStamp: LPFILETIME,
+ pwszFileName: LPCWSTR,
+) -> BOOL}
+pub const CERT_FILE_HASH_USE_TYPE: DWORD = 1;
+pub const CERT_TIMESTAMP_HASH_USE_TYPE: DWORD = 2;
diff --git a/vendor/winapi/src/um/windowsceip.rs b/vendor/winapi/src/um/windowsceip.rs
new file mode 100644
index 000000000..87a59d33c
--- /dev/null
+++ b/vendor/winapi/src/um/windowsceip.rs
@@ -0,0 +1,9 @@
+// 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::minwindef::BOOL;
+extern "system" {
+ pub fn CeipIsOptedIn() -> BOOL;
+}
diff --git a/vendor/winapi/src/um/winefs.rs b/vendor/winapi/src/um/winefs.rs
new file mode 100644
index 000000000..f4766431b
--- /dev/null
+++ b/vendor/winapi/src/um/winefs.rs
@@ -0,0 +1,178 @@
+// 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;
+use shared::minwindef::{BOOL, DWORD, LPVOID, PBYTE, PDWORD, ULONG};
+use um::minwinbase::SECURITY_ATTRIBUTES;
+use um::wincrypt::ALG_ID;
+use um::winnt::{LPCWSTR, LPWSTR, SID};
+pub const WINEFS_SETUSERKEY_SET_CAPABILITIES: DWORD = 0x00000001;
+STRUCT!{struct EFS_CERTIFICATE_BLOB {
+ dwCertEncodingType: DWORD,
+ cbData: DWORD,
+ pbData: PBYTE,
+}}
+pub type PEFS_CERTIFICATE_BLOB = *mut EFS_CERTIFICATE_BLOB;
+STRUCT!{struct EFS_HASH_BLOB {
+ cbData: DWORD,
+ pbData: PBYTE,
+}}
+pub type PEFS_HASH_BLOB = *mut EFS_HASH_BLOB;
+STRUCT!{struct EFS_RPC_BLOB {
+ cbData: DWORD,
+ pbData: PBYTE,
+}}
+pub type PEFS_RPC_BLOB = *mut EFS_RPC_BLOB;
+STRUCT!{struct EFS_PIN_BLOB {
+ cbPadding: DWORD,
+ cbData: DWORD,
+ pbData: PBYTE,
+}}
+pub type PEFS_PIN_BLOB = *mut EFS_PIN_BLOB;
+STRUCT!{struct EFS_KEY_INFO {
+ dwVersion: DWORD,
+ Entropy: ULONG,
+ Algorithm: ALG_ID,
+ KeyLength: ULONG,
+}}
+pub type PEFS_KEY_INFO = *mut EFS_KEY_INFO;
+STRUCT!{struct EFS_COMPATIBILITY_INFO {
+ EfsVersion: DWORD,
+}}
+pub type PEFS_COMPATIBILITY_INFO = *mut EFS_COMPATIBILITY_INFO;
+pub const EFS_COMPATIBILITY_VERSION_NCRYPT_PROTECTOR: DWORD = 5;
+pub const EFS_COMPATIBILITY_VERSION_PFILE_PROTECTOR: DWORD = 6;
+#[inline]
+pub fn EFS_IS_DESCRIPTOR_VERSION(v: DWORD) -> bool {
+ v == EFS_COMPATIBILITY_VERSION_NCRYPT_PROTECTOR
+ || v == EFS_COMPATIBILITY_VERSION_PFILE_PROTECTOR
+}
+pub const EFS_SUBVER_UNKNOWN: DWORD = 0;
+pub const EFS_EFS_SUBVER_EFS_CERT: DWORD = 1;
+pub const EFS_PFILE_SUBVER_RMS: DWORD = 2;
+pub const EFS_PFILE_SUBVER_APPX: DWORD = 3;
+STRUCT!{struct EFS_VERSION_INFO {
+ EfsVersion: DWORD,
+ SubVersion: DWORD,
+}}
+pub type PEFS_VERSION_INFO = *mut EFS_VERSION_INFO;
+#[inline]
+pub fn EFS_IS_APPX_VERSION(v: DWORD, subV: DWORD) -> bool {
+ v == EFS_COMPATIBILITY_VERSION_PFILE_PROTECTOR && subV == EFS_PFILE_SUBVER_APPX
+}
+STRUCT!{struct EFS_DECRYPTION_STATUS_INFO {
+ dwDecryptionError: DWORD,
+ dwHashOffset: DWORD,
+ cbHash: DWORD,
+}}
+pub type PEFS_DECRYPTION_STATUS_INFO = *mut EFS_DECRYPTION_STATUS_INFO;
+STRUCT!{struct EFS_ENCRYPTION_STATUS_INFO {
+ bHasCurrentKey: BOOL,
+ dwEncryptionError: DWORD,
+}}
+pub type PEFS_ENCRYPTION_STATUS_INFO = *mut EFS_ENCRYPTION_STATUS_INFO;
+STRUCT!{struct ENCRYPTION_CERTIFICATE {
+ cbTotalLength: DWORD,
+ pUserSid: *mut SID,
+ pCertBlob: PEFS_CERTIFICATE_BLOB,
+}}
+pub type PENCRYPTION_CERTIFICATE = *mut ENCRYPTION_CERTIFICATE;
+pub const MAX_SID_SIZE: SIZE_T = 256;
+STRUCT!{struct ENCRYPTION_CERTIFICATE_HASH {
+ cbTotalLength: DWORD,
+ pUserSid: *mut SID,
+ pHash: PEFS_HASH_BLOB,
+ lpDisplayInformation: LPWSTR,
+}}
+pub type PENCRYPTION_CERTIFICATE_HASH = *mut ENCRYPTION_CERTIFICATE_HASH;
+STRUCT!{struct ENCRYPTION_CERTIFICATE_HASH_LIST {
+ nCert_Hash: DWORD,
+ pUsers: *mut PENCRYPTION_CERTIFICATE_HASH,
+}}
+pub type PENCRYPTION_CERTIFICATE_HASH_LIST = *mut ENCRYPTION_CERTIFICATE_HASH_LIST;
+STRUCT!{struct ENCRYPTION_CERTIFICATE_LIST {
+ nUsers: DWORD,
+ pUsers: *mut PENCRYPTION_CERTIFICATE,
+}}
+pub type PENCRYPTION_CERTIFICATE_LIST = *mut ENCRYPTION_CERTIFICATE_LIST;
+pub const EFS_METADATA_ADD_USER: DWORD = 0x00000001;
+pub const EFS_METADATA_REMOVE_USER: DWORD = 0x00000002;
+pub const EFS_METADATA_REPLACE_USER: DWORD = 0x00000004;
+pub const EFS_METADATA_GENERAL_OP: DWORD = 0x00000008;
+STRUCT!{struct ENCRYPTED_FILE_METADATA_SIGNATURE {
+ dwEfsAccessType: DWORD,
+ pCertificatesAdded: PENCRYPTION_CERTIFICATE_HASH_LIST,
+ pEncryptionCertificate: PENCRYPTION_CERTIFICATE,
+ pEfsStreamSignature: PEFS_RPC_BLOB,
+}}
+pub type PENCRYPTED_FILE_METADATA_SIGNATURE = *mut ENCRYPTED_FILE_METADATA_SIGNATURE;
+STRUCT!{struct ENCRYPTION_PROTECTOR {
+ cbTotalLength: DWORD,
+ pUserSid: *mut SID,
+ lpProtectorDescriptor: LPWSTR,
+}}
+pub type PENCRYPTION_PROTECTOR = *mut ENCRYPTION_PROTECTOR;
+STRUCT!{struct ENCRYPTION_PROTECTOR_LIST {
+ nProtectors: DWORD,
+ pProtectors: *mut PENCRYPTION_PROTECTOR,
+}}
+pub type PENCRYPTION_PROTECTOR_LIST = *mut ENCRYPTION_PROTECTOR_LIST;
+extern "system" {
+ pub fn QueryUsersOnEncryptedFile(
+ lpFileName: LPCWSTR,
+ pUsers: *mut PENCRYPTION_CERTIFICATE_HASH_LIST,
+ ) -> DWORD;
+ pub fn QueryRecoveryAgentsOnEncryptedFile(
+ lpFileName: LPCWSTR,
+ pRecoveryAgents: *mut PENCRYPTION_CERTIFICATE_HASH_LIST,
+ ) -> DWORD;
+ pub fn RemoveUsersFromEncryptedFile(
+ lpFileName: LPCWSTR,
+ pHashes: PENCRYPTION_CERTIFICATE_HASH_LIST,
+ ) -> DWORD;
+ pub fn AddUsersToEncryptedFile(
+ lpFileName: LPCWSTR,
+ pEncryptionCertificate: PENCRYPTION_CERTIFICATE_LIST,
+ ) -> DWORD;
+ pub fn SetUserFileEncryptionKey(
+ pEncryptionCertificate: PENCRYPTION_CERTIFICATE,
+ ) -> DWORD;
+ pub fn SetUserFileEncryptionKeyEx(
+ pEncryptionCertificate: PENCRYPTION_CERTIFICATE,
+ dwCapabilities: DWORD,
+ dwFlags: DWORD,
+ pvReserved: LPVOID,
+ ) -> DWORD;
+ pub fn FreeEncryptionCertificateHashList(
+ pUsers: PENCRYPTION_CERTIFICATE_HASH_LIST,
+ );
+ pub fn EncryptionDisable(
+ DirPath: LPCWSTR,
+ Disable: BOOL,
+ ) -> BOOL;
+ pub fn DuplicateEncryptionInfoFile(
+ SrcFileName: LPCWSTR,
+ DstFileName: LPCWSTR,
+ dwCreationDistribution: DWORD,
+ dwAttributes: DWORD,
+ lpSecurityAttributes: *const SECURITY_ATTRIBUTES,
+ ) -> DWORD;
+ pub fn GetEncryptedFileMetadata(
+ lpFileName: LPCWSTR,
+ pcbMetadata: PDWORD,
+ ppbMetadata: *mut PBYTE,
+ ) -> DWORD;
+ pub fn SetEncryptedFileMetadata(
+ lpFileName: LPCWSTR,
+ pbOldMetadata: PBYTE,
+ pbNewMetadata: PBYTE,
+ pOwnerHash: PENCRYPTION_CERTIFICATE_HASH,
+ dwOperation: DWORD,
+ pCertificatesAdded: PENCRYPTION_CERTIFICATE_HASH_LIST,
+ ) -> DWORD;
+ pub fn FreeEncryptedFileMetadata(
+ pbMetadata: PBYTE,
+ );
+}
diff --git a/vendor/winapi/src/um/winevt.rs b/vendor/winapi/src/um/winevt.rs
new file mode 100644
index 000000000..dce3d27ec
--- /dev/null
+++ b/vendor/winapi/src/um/winevt.rs
@@ -0,0 +1,543 @@
+// 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.
+//! Windows Events API
+use ctypes::{c_double, c_float};
+use shared::basetsd::{INT16, INT32, INT64, INT8, UINT16, UINT32, UINT64, UINT8};
+use shared::guiddef::GUID;
+use shared::minwindef::{BOOL, DWORD, FILETIME, PBYTE, PDWORD};
+use um::minwinbase::SYSTEMTIME;
+use um::winnt::{HANDLE, LCID, LONGLONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PSID, PVOID, ULONGLONG};
+use vc::vcruntime::size_t;
+pub type EVT_HANDLE = HANDLE;
+pub type PEVT_HANDLE = *mut HANDLE;
+ENUM!{enum EVT_VARIANT_TYPE {
+ EvtVarTypeNull = 0,
+ EvtVarTypeString = 1,
+ EvtVarTypeAnsiString = 2,
+ EvtVarTypeSByte = 3,
+ EvtVarTypeByte = 4,
+ EvtVarTypeInt16 = 5,
+ EvtVarTypeUInt16 = 6,
+ EvtVarTypeInt32 = 7,
+ EvtVarTypeUInt32 = 8,
+ EvtVarTypeInt64 = 9,
+ EvtVarTypeUInt64 = 10,
+ EvtVarTypeSingle = 11,
+ EvtVarTypeDouble = 12,
+ EvtVarTypeBoolean = 13,
+ EvtVarTypeBinary = 14,
+ EvtVarTypeGuid = 15,
+ EvtVarTypeSizeT = 16,
+ EvtVarTypeFileTime = 17,
+ EvtVarTypeSysTime = 18,
+ EvtVarTypeSid = 19,
+ EvtVarTypeHexInt32 = 20,
+ EvtVarTypeHexInt64 = 21,
+ EvtVarTypeEvtHandle = 32,
+ EvtVarTypeEvtXml = 35,
+}}
+pub const EVT_VARIANT_TYPE_MASK: DWORD = 0x7f;
+pub const EVT_VARIANT_TYPE_ARRAY: DWORD = 128;
+UNION!{union EVT_VARIANT_u {
+ [u64; 1],
+ BooleanVal BooleanVal_mut: BOOL,
+ SByteVal SByteVal_mut: INT8,
+ Int16Val Int16Val_mut: INT16,
+ Int32Val Int32Val_mut: INT32,
+ Int64Val Int64Val_mut: INT64,
+ ByteVal ByteVal_mut: UINT8,
+ UInt16Val UInt16Val_mut: UINT16,
+ UInt32Val UInt32Val_mut: UINT32,
+ UInt64Val UInt64Val_mut: UINT64,
+ SingleVal SingleVal_mut: c_float,
+ DoubleVal DoubleVal_mut: c_double,
+ FileTimeVal FileTimeVal_mut: ULONGLONG,
+ SysTimeVal SysTimeVal_mut: *mut SYSTEMTIME,
+ GuidVal GuidVal_mut: *mut GUID,
+ StringVal StringVal_mut: LPCWSTR,
+ AnsiStringVal AnsiStringVal_mut: LPCSTR,
+ BinaryVal BinaryVal_mut: PBYTE,
+ SidVal SidVal_mut: PSID,
+ SizeTVal SizeTVal_mut: size_t,
+ BooleanArr BooleanArr_mut: *mut BOOL,
+ SByteArr SByteArr_mut: *mut INT8,
+ Int16Arr Int16Arr_mut: *mut INT16,
+ Int32Arr Int32Arr_mut: *mut INT32,
+ Int64Arr Int64Arr_mut: *mut INT64,
+ ByteArr ByteArr_mut: *mut UINT8,
+ UInt16Arr UInt16Arr_mut: *mut UINT16,
+ UInt32Arr UInt32Arr_mut: *mut UINT32,
+ UInt64Arr UInt64Arr_mut: *mut UINT64,
+ SingleArr SingleArr_mut: *mut c_float,
+ DoubleArr DoubleArr_mut: *mut c_double,
+ FileTimeArr FileTimeArr_mut: *mut FILETIME,
+ SysTimeArr SysTimeArr_mut: *mut SYSTEMTIME,
+ GuidArr GuidArr_mut: *mut GUID,
+ StringArr StringArr_mut: *mut LPWSTR,
+ AnsiStringArr AnsiStringArr_mut: *mut LPSTR,
+ SidArr SidArr_mut: *mut PSID,
+ SizeTArr SizeTArr_mut: *mut size_t,
+ EvtHandleVal EvtHandleVal_mut: EVT_HANDLE,
+ XmlVal XmlVal_mut: LPCWSTR,
+ XmlValArr XmlValArr_mut: *mut LPCWSTR,
+}}
+STRUCT!{struct EVT_VARIANT {
+ u: EVT_VARIANT_u,
+ Count: DWORD,
+ Type: DWORD,
+}}
+pub type PEVT_VARIANT = *mut EVT_VARIANT;
+ENUM!{enum EVT_LOGIN_CLASS {
+ EvtRpcLogin = 1,
+}}
+ENUM!{enum EVT_RPC_LOGIN_FLAGS {
+ EvtRpcLoginAuthDefault = 0,
+ EvtRpcLoginAuthNegotiate,
+ EvtRpcLoginAuthKerberos,
+ EvtRpcLoginAuthNTLM,
+}}
+STRUCT!{struct EVT_RPC_LOGIN {
+ Server: LPWSTR,
+ User: LPWSTR,
+ Domain: LPWSTR,
+ Password: LPWSTR,
+ Flags: DWORD,
+}}
+extern "system" {
+ pub fn EvtOpenSession(
+ LoginClass: EVT_LOGIN_CLASS,
+ Login: PVOID,
+ Timeout: DWORD,
+ Flags: DWORD,
+ ) -> EVT_HANDLE;
+ pub fn EvtClose(
+ Object: EVT_HANDLE,
+ ) -> BOOL;
+ pub fn EvtCancel(
+ Object: EVT_HANDLE,
+ ) -> BOOL;
+ pub fn EvtGetExtendedStatus(
+ BufferSize: DWORD,
+ Buffer: LPWSTR,
+ BufferUsed: PDWORD,
+ ) -> DWORD;
+}
+ENUM!{enum EVT_QUERY_FLAGS {
+ EvtQueryChannelPath = 0x1,
+ EvtQueryFilePath = 0x2,
+ EvtQueryForwardDirection = 0x100,
+ EvtQueryReverseDirection = 0x200,
+ EvtQueryTolerateQueryErrors = 0x1000,
+}}
+ENUM!{enum EVT_SEEK_FLAGS {
+ EvtSeekRelativeToFirst = 1,
+ EvtSeekRelativeToLast = 2,
+ EvtSeekRelativeToCurrent = 3,
+ EvtSeekRelativeToBookmark = 4,
+ EvtSeekOriginMask = 7,
+ EvtSeekStrict = 0x10000,
+}}
+extern "system" {
+ pub fn EvtQuery(
+ Session: EVT_HANDLE,
+ Path: LPCWSTR,
+ Query: LPCWSTR,
+ Flags: DWORD,
+ ) -> EVT_HANDLE;
+ pub fn EvtNext(
+ ResultSet: EVT_HANDLE,
+ EventsSize: DWORD,
+ Events: PEVT_HANDLE,
+ Timeout: DWORD,
+ Flags: DWORD,
+ Returned: PDWORD,
+ ) -> BOOL;
+ pub fn EvtSeek(
+ ResultSet: EVT_HANDLE,
+ Position: LONGLONG,
+ Bookmark: EVT_HANDLE,
+ Timeout: DWORD,
+ Flags: DWORD,
+ ) -> BOOL;
+}
+ENUM!{enum EVT_SUBSCRIBE_FLAGS {
+ EvtSubscribeToFutureEvents = 1,
+ EvtSubscribeStartAtOldestRecord = 2,
+ EvtSubscribeStartAfterBookmark = 3,
+ EvtSubscribeOriginMask = 3,
+ EvtSubscribeTolerateQueryErrors = 0x1000,
+ EvtSubscribeStrict = 0x10000,
+}}
+ENUM!{enum EVT_SUBSCRIBE_NOTIFY_ACTION {
+ EvtSubscribeActionError = 0,
+ EvtSubscribeActionDeliver,
+}}
+FN!{stdcall EVT_SUBSCRIBE_CALLBACK(
+ Action: EVT_SUBSCRIBE_NOTIFY_ACTION,
+ UserContext: PVOID,
+ Event: EVT_HANDLE,
+) -> DWORD}
+extern "system" {
+ pub fn EvtSubscribe(
+ Session: EVT_HANDLE,
+ SignalEvent: HANDLE,
+ ChannelPath: LPCWSTR,
+ Query: LPCWSTR,
+ Bookmark: EVT_HANDLE,
+ Context: PVOID,
+ Callback: EVT_SUBSCRIBE_CALLBACK,
+ Flags: DWORD,
+ ) -> EVT_HANDLE;
+}
+ENUM!{enum EVT_SYSTEM_PROPERTY_ID {
+ EvtSystemProviderName = 0,
+ EvtSystemProviderGuid,
+ EvtSystemEventID,
+ EvtSystemQualifiers,
+ EvtSystemLevel,
+ EvtSystemTask,
+ EvtSystemOpcode,
+ EvtSystemKeywords,
+ EvtSystemTimeCreated,
+ EvtSystemEventRecordId,
+ EvtSystemActivityID,
+ EvtSystemRelatedActivityID,
+ EvtSystemProcessID,
+ EvtSystemThreadID,
+ EvtSystemChannel,
+ EvtSystemComputer,
+ EvtSystemUserID,
+ EvtSystemVersion,
+ EvtSystemPropertyIdEND,
+}}
+ENUM!{enum EVT_RENDER_CONTEXT_FLAGS {
+ EvtRenderContextValues = 0,
+ EvtRenderContextSystem,
+ EvtRenderContextUser,
+}}
+ENUM!{enum EVT_RENDER_FLAGS {
+ EvtRenderEventValues = 0,
+ EvtRenderEventXml,
+ EvtRenderBookmark,
+}}
+extern "system" {
+ pub fn EvtCreateRenderContext(
+ ValuePathsCount: DWORD,
+ ValuePaths: *mut LPCWSTR,
+ Flags: DWORD,
+ ) -> EVT_HANDLE;
+ pub fn EvtRender(
+ Context: EVT_HANDLE,
+ Fragment: EVT_HANDLE,
+ Flags: DWORD,
+ BufferSize: DWORD,
+ Buffer: PVOID,
+ BufferUsed: PDWORD,
+ PropertyCount: PDWORD,
+ ) -> BOOL;
+}
+ENUM!{enum EVT_FORMAT_MESSAGE_FLAGS {
+ EvtFormatMessageEvent = 1,
+ EvtFormatMessageLevel,
+ EvtFormatMessageTask,
+ EvtFormatMessageOpcode,
+ EvtFormatMessageKeyword,
+ EvtFormatMessageChannel,
+ EvtFormatMessageProvider,
+ EvtFormatMessageId,
+ EvtFormatMessageXml,
+}}
+extern "system" {
+ pub fn EvtFormatMessage(
+ PublisherMetadata: EVT_HANDLE,
+ Event: EVT_HANDLE,
+ MessageId: DWORD,
+ ValueCount: DWORD,
+ Values: PEVT_VARIANT,
+ Flags: DWORD,
+ BufferSize: DWORD,
+ Buffer: LPWSTR,
+ BufferUsed: PDWORD,
+ ) -> BOOL;
+}
+ENUM!{enum EVT_OPEN_LOG_FLAGS {
+ EvtOpenChannelPath = 0x1,
+ EvtOpenFilePath = 0x2,
+}}
+ENUM!{enum EVT_LOG_PROPERTY_ID {
+ EvtLogCreationTime = 0,
+ EvtLogLastAccessTime,
+ EvtLogLastWriteTime,
+ EvtLogFileSize,
+ EvtLogAttributes,
+ EvtLogNumberOfLogRecords,
+ EvtLogOldestRecordNumber,
+ EvtLogFull,
+}}
+extern "system" {
+ pub fn EvtOpenLog(
+ Session: EVT_HANDLE,
+ Path: LPCWSTR,
+ Flags: DWORD,
+ ) -> EVT_HANDLE;
+ pub fn EvtGetLogInfo(
+ Log: EVT_HANDLE,
+ PropertyId: EVT_LOG_PROPERTY_ID,
+ PropertyValueBufferSize: DWORD,
+ PropertyValueBuffer: PEVT_VARIANT,
+ PropertyValueBufferUsed: PDWORD,
+ ) -> BOOL;
+ pub fn EvtClearLog(
+ Session: EVT_HANDLE,
+ ChannelPath: LPCWSTR,
+ TargetFilePath: LPCWSTR,
+ Flags: DWORD,
+ ) -> BOOL;
+}
+ENUM!{enum EVT_EXPORTLOG_FLAGS {
+ EvtExportLogChannelPath = 0x1,
+ EvtExportLogFilePath = 0x2,
+ EvtExportLogTolerateQueryErrors = 0x1000,
+ EvtExportLogOverwrite = 0x2000,
+}}
+extern "system" {
+ pub fn EvtExportLog(
+ Session: EVT_HANDLE,
+ Path: LPCWSTR,
+ Query: LPCWSTR,
+ TargetFilePath: LPCWSTR,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn EvtArchiveExportedLog(
+ Session: EVT_HANDLE,
+ LogFilePath: LPCWSTR,
+ Locale: LCID,
+ Flags: DWORD,
+ ) -> BOOL;
+}
+ENUM!{enum EVT_CHANNEL_CONFIG_PROPERTY_ID {
+ EvtChannelConfigEnabled = 0,
+ EvtChannelConfigIsolation,
+ EvtChannelConfigType,
+ EvtChannelConfigOwningPublisher,
+ EvtChannelConfigClassicEventlog,
+ EvtChannelConfigAccess,
+ EvtChannelLoggingConfigRetention,
+ EvtChannelLoggingConfigAutoBackup,
+ EvtChannelLoggingConfigMaxSize,
+ EvtChannelLoggingConfigLogFilePath,
+ EvtChannelPublishingConfigLevel,
+ EvtChannelPublishingConfigKeywords,
+ EvtChannelPublishingConfigControlGuid,
+ EvtChannelPublishingConfigBufferSize,
+ EvtChannelPublishingConfigMinBuffers,
+ EvtChannelPublishingConfigMaxBuffers,
+ EvtChannelPublishingConfigLatency,
+ EvtChannelPublishingConfigClockType,
+ EvtChannelPublishingConfigSidType,
+ EvtChannelPublisherList,
+ EvtChannelPublishingConfigFileMax,
+ EvtChannelConfigPropertyIdEND,
+}}
+ENUM!{enum EVT_CHANNEL_TYPE {
+ EvtChannelTypeAdmin = 0,
+ EvtChannelTypeOperational,
+ EvtChannelTypeAnalytic,
+ EvtChannelTypeDebug,
+}}
+ENUM!{enum EVT_CHANNEL_ISOLATION_TYPE {
+ EvtChannelIsolationTypeApplication = 0,
+ EvtChannelIsolationTypeSystem,
+ EvtChannelIsolationTypeCustom,
+}}
+ENUM!{enum EVT_CHANNEL_CLOCK_TYPE {
+ EvtChannelClockTypeSystemTime = 0,
+ EvtChannelClockTypeQPC,
+}}
+ENUM!{enum EVT_CHANNEL_SID_TYPE {
+ EvtChannelSidTypeNone = 0,
+ EvtChannelSidTypePublishing,
+}}
+extern "system" {
+ pub fn EvtOpenChannelEnum(
+ Session: EVT_HANDLE,
+ Flags: DWORD,
+ ) -> EVT_HANDLE;
+ pub fn EvtNextChannelPath(
+ ChannelEnum: EVT_HANDLE,
+ ChannelPathBufferSize: DWORD,
+ ChannelPathBuffer: LPWSTR,
+ ChannelPathBufferUsed: PDWORD,
+ ) -> BOOL;
+ pub fn EvtOpenChannelConfig(
+ Session: EVT_HANDLE,
+ ChannelPath: LPCWSTR,
+ Flags: DWORD,
+ ) -> EVT_HANDLE;
+ pub fn EvtSaveChannelConfig(
+ ChannelConfig: EVT_HANDLE,
+ Flags: DWORD,
+ ) -> BOOL;
+ pub fn EvtSetChannelConfigProperty(
+ ChannelConfig: EVT_HANDLE,
+ PropertyId: EVT_CHANNEL_CONFIG_PROPERTY_ID,
+ Flags: DWORD,
+ PropertyValue: PEVT_VARIANT,
+ ) -> BOOL;
+ pub fn EvtGetChannelConfigProperty(
+ ChannelConfig: EVT_HANDLE,
+ PropertyId: EVT_CHANNEL_CONFIG_PROPERTY_ID,
+ Flags: DWORD,
+ PropertyValueBufferSize: DWORD,
+ PropertyValueBuffer: PEVT_VARIANT,
+ PropertyValueBufferUsed: PDWORD,
+ ) -> BOOL;
+}
+ENUM!{enum EVT_CHANNEL_REFERENCE_FLAGS {
+ EvtChannelReferenceImported = 0x1,
+}}
+ENUM!{enum EVT_PUBLISHER_METADATA_PROPERTY_ID {
+ EvtPublisherMetadataPublisherGuid = 0,
+ EvtPublisherMetadataResourceFilePath,
+ EvtPublisherMetadataParameterFilePath,
+ EvtPublisherMetadataMessageFilePath,
+ EvtPublisherMetadataHelpLink,
+ EvtPublisherMetadataPublisherMessageID,
+ EvtPublisherMetadataChannelReferences,
+ EvtPublisherMetadataChannelReferencePath,
+ EvtPublisherMetadataChannelReferenceIndex,
+ EvtPublisherMetadataChannelReferenceID,
+ EvtPublisherMetadataChannelReferenceFlags,
+ EvtPublisherMetadataChannelReferenceMessageID,
+ EvtPublisherMetadataLevels,
+ EvtPublisherMetadataLevelName,
+ EvtPublisherMetadataLevelValue,
+ EvtPublisherMetadataLevelMessageID,
+ EvtPublisherMetadataTasks,
+ EvtPublisherMetadataTaskName,
+ EvtPublisherMetadataTaskEventGuid,
+ EvtPublisherMetadataTaskValue,
+ EvtPublisherMetadataTaskMessageID,
+ EvtPublisherMetadataOpcodes,
+ EvtPublisherMetadataOpcodeName,
+ EvtPublisherMetadataOpcodeValue,
+ EvtPublisherMetadataOpcodeMessageID,
+ EvtPublisherMetadataKeywords,
+ EvtPublisherMetadataKeywordName,
+ EvtPublisherMetadataKeywordValue,
+ EvtPublisherMetadataKeywordMessageID,
+ EvtPublisherMetadataPropertyIdEND,
+}}
+extern "system" {
+ pub fn EvtOpenPublisherEnum(
+ Session: EVT_HANDLE,
+ Flags: DWORD,
+ ) -> EVT_HANDLE;
+ pub fn EvtNextPublisherId(
+ PublisherEnum: EVT_HANDLE,
+ PublisherIdBufferSize: DWORD,
+ PublisherIdBuffer: LPWSTR,
+ PublisherIdBufferUsed: PDWORD,
+ ) -> BOOL;
+ pub fn EvtOpenPublisherMetadata(
+ Session: EVT_HANDLE,
+ PublisherId: LPCWSTR,
+ LogFilePath: LPCWSTR,
+ Locale: LCID,
+ Flags: DWORD,
+ ) -> EVT_HANDLE;
+ pub fn EvtGetPublisherMetadataProperty(
+ PublisherMetadata: EVT_HANDLE,
+ PropertyId: EVT_PUBLISHER_METADATA_PROPERTY_ID,
+ Flags: DWORD,
+ PublisherMetadataPropertyBufferSize: DWORD,
+ PublisherMetadataPropertyBuffer: PEVT_VARIANT,
+ PublisherMetadataPropertyBufferUsed: PDWORD,
+ ) -> BOOL;
+}
+ENUM!{enum EVT_EVENT_METADATA_PROPERTY_ID {
+ EventMetadataEventID,
+ EventMetadataEventVersion,
+ EventMetadataEventChannel,
+ EventMetadataEventLevel,
+ EventMetadataEventOpcode,
+ EventMetadataEventTask,
+ EventMetadataEventKeyword,
+ EventMetadataEventMessageID,
+ EventMetadataEventTemplate,
+ EvtEventMetadataPropertyIdEND,
+}}
+extern "system" {
+ pub fn EvtOpenEventMetadataEnum(
+ PublisherMetadata: EVT_HANDLE,
+ Flags: DWORD,
+ ) -> EVT_HANDLE;
+ pub fn EvtNextEventMetadata(
+ EventMetadataEnum: EVT_HANDLE,
+ Flags: DWORD,
+ ) -> EVT_HANDLE;
+ pub fn EvtGetEventMetadataProperty(
+ EventMetadata: EVT_HANDLE,
+ PropertyId: EVT_EVENT_METADATA_PROPERTY_ID,
+ Flags: DWORD,
+ EventMetadataPropertyBufferSize: DWORD,
+ EventMetadataPropertyBuffer: PEVT_VARIANT,
+ EventMetadataPropertyBufferUsed: PDWORD,
+ ) -> BOOL;
+}
+pub type EVT_OBJECT_ARRAY_PROPERTY_HANDLE = HANDLE;
+extern "system" {
+ pub fn EvtGetObjectArraySize(
+ ObjectArray: EVT_OBJECT_ARRAY_PROPERTY_HANDLE,
+ ObjectArraySize: PDWORD,
+ ) -> BOOL;
+ pub fn EvtGetObjectArrayProperty(
+ ObjectArray: EVT_OBJECT_ARRAY_PROPERTY_HANDLE,
+ PropertyId: DWORD,
+ ArrayIndex: DWORD,
+ Flags: DWORD,
+ PropertyValueBufferSize: DWORD,
+ PropertyValueBuffer: PEVT_VARIANT,
+ PropertyValueBufferUsed: PDWORD,
+ ) -> BOOL;
+}
+ENUM!{enum EVT_QUERY_PROPERTY_ID {
+ EvtQueryNames,
+ EvtQueryStatuses,
+ EvtQueryPropertyIdEND,
+}}
+ENUM!{enum EVT_EVENT_PROPERTY_ID {
+ EvtEventQueryIDs = 0,
+ EvtEventPath,
+ EvtEventPropertyIdEND,
+}}
+extern "system" {
+ pub fn EvtGetQueryInfo(
+ QueryOrSubscription: EVT_HANDLE,
+ PropertyId: EVT_QUERY_PROPERTY_ID,
+ PropertyValueBufferSize: DWORD,
+ PropertyValueBuffer: PEVT_VARIANT,
+ PropertyValueBufferUsed: PDWORD,
+ ) -> BOOL;
+ pub fn EvtCreateBookmark(
+ BookmarkXml: LPCWSTR,
+ ) -> EVT_HANDLE;
+ pub fn EvtUpdateBookmark(
+ Bookmark: EVT_HANDLE,
+ Event: EVT_HANDLE,
+ ) -> BOOL;
+ pub fn EvtGetEventInfo(
+ Event: EVT_HANDLE,
+ PropertyId: EVT_EVENT_PROPERTY_ID,
+ PropertyValueBufferSize: DWORD,
+ PropertyValueBuffer: PEVT_VARIANT,
+ PropertyValueBufferUsed: PDWORD,
+ ) -> BOOL;
+}
+pub const EVT_READ_ACCESS: DWORD = 0x1;
+pub const EVT_WRITE_ACCESS: DWORD = 0x2;
+pub const EVT_CLEAR_ACCESS: DWORD = 0x4;
+pub const EVT_ALL_ACCESS: DWORD = 0x7;
diff --git a/vendor/winapi/src/um/wingdi.rs b/vendor/winapi/src/um/wingdi.rs
new file mode 100644
index 000000000..ccf8697c4
--- /dev/null
+++ b/vendor/winapi/src/um/wingdi.rs
@@ -0,0 +1,5591 @@
+// 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.
+//! GDI procedure declarations, constant definitions and macros
+use ctypes::{c_char, c_int, c_long, c_short, c_ushort, c_void};
+use shared::basetsd::{UINT16, UINT32, UINT64, ULONG_PTR};
+use shared::minwindef::{
+ BOOL, BYTE, DWORD, FLOAT, HGLOBAL, HMETAFILE, HMODULE, HRGN, INT, LOBYTE, LPARAM, LPBYTE,
+ LPDWORD, LPINT, LPVOID, LPWORD, MAX_PATH, PFLOAT, PROC, UINT, ULONG, USHORT, WORD,
+};
+use shared::windef::{
+ COLORREF, HBITMAP, HBRUSH, HCOLORSPACE, HDC, HENHMETAFILE, HFONT, HGDIOBJ, HGLRC, HPALETTE,
+ HPEN, HWND, LPPOINT, LPRECT, LPSIZE, POINT, POINTL, POINTS, RECT, RECTL, SIZEL,
+};
+use um::winnt::{
+ CHAR, HANDLE, LONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR, LUID, PSTR, PVOID, SHORT, VOID, WCHAR,
+};
+pub const R2_BLACK: c_int = 1;
+pub const R2_NOTMERGEPEN: c_int = 2;
+pub const R2_MASKNOTPEN: c_int = 3;
+pub const R2_NOTCOPYPEN: c_int = 4;
+pub const R2_MASKPENNOT: c_int = 5;
+pub const R2_NOT: c_int = 6;
+pub const R2_XORPEN: c_int = 7;
+pub const R2_NOTMASKPEN: c_int = 8;
+pub const R2_MASKPEN: c_int = 9;
+pub const R2_NOTXORPEN: c_int = 10;
+pub const R2_NOP: c_int = 11;
+pub const R2_MERGENOTPEN: c_int = 12;
+pub const R2_COPYPEN: c_int = 13;
+pub const R2_MERGEPENNOT: c_int = 14;
+pub const R2_MERGEPEN: c_int = 15;
+pub const R2_WHITE: c_int = 16;
+pub const R2_LAST: c_int = 16;
+pub const SRCCOPY: DWORD = 0x00CC0020;
+pub const SRCPAINT: DWORD = 0x00EE0086;
+pub const SRCAND: DWORD = 0x008800C6;
+pub const SRCINVERT: DWORD = 0x00660046;
+pub const SRCERASE: DWORD = 0x00440328;
+pub const NOTSRCCOPY: DWORD = 0x00330008;
+pub const NOTSRCERASE: DWORD = 0x001100A6;
+pub const MERGECOPY: DWORD = 0x00C000CA;
+pub const MERGEPAINT: DWORD = 0x00BB0226;
+pub const PATCOPY: DWORD = 0x00F00021;
+pub const PATPAINT: DWORD = 0x00FB0A09;
+pub const PATINVERT: DWORD = 0x005A0049;
+pub const DSTINVERT: DWORD = 0x00550009;
+pub const BLACKNESS: DWORD = 0x00000042;
+pub const WHITENESS: DWORD = 0x00FF0062;
+pub const NOMIRRORBITMAP: DWORD = 0x80000000;
+pub const CAPTUREBLT: DWORD = 0x40000000;
+#[inline]
+pub fn MAKEROP4(fore: DWORD, back: DWORD) -> DWORD {
+ ((back << 8) & 0xFF000000) | fore
+}
+pub const GDI_ERROR: ULONG = 0xFFFFFFFF;
+pub const HGDI_ERROR: HANDLE = -1isize as HANDLE;
+pub const ERROR: c_int = 0;
+pub const NULLREGION: c_int = 1;
+pub const SIMPLEREGION: c_int = 2;
+pub const COMPLEXREGION: c_int = 3;
+pub const RGN_ERROR: c_int = ERROR;
+pub const RGN_AND: c_int = 1;
+pub const RGN_OR: c_int = 2;
+pub const RGN_XOR: c_int = 3;
+pub const RGN_DIFF: c_int = 4;
+pub const RGN_COPY: c_int = 5;
+pub const RGN_MIN: c_int = RGN_AND;
+pub const RGN_MAX: c_int = RGN_COPY;
+pub const BLACKONWHITE: c_int = 1;
+pub const WHITEONBLACK: c_int = 2;
+pub const COLORONCOLOR: c_int = 3;
+pub const HALFTONE: c_int = 4;
+pub const MAXSTRETCHBLTMODE: c_int = 4;
+pub const STRETCH_ANDSCANS: c_int = BLACKONWHITE;
+pub const STRETCH_ORSCANS: c_int = WHITEONBLACK;
+pub const STRETCH_DELETESCANS: c_int = COLORONCOLOR;
+pub const STRETCH_HALFTONE: c_int = HALFTONE;
+pub const ALTERNATE: c_int = 1;
+pub const WINDING: c_int = 2;
+pub const POLYFILL_LAST: c_int = 2;
+pub const LAYOUT_RTL: DWORD = 0x00000001;
+pub const LAYOUT_BTT: DWORD = 0x00000002;
+pub const LAYOUT_VBH: DWORD = 0x00000004;
+pub const LAYOUT_ORIENTATIONMASK: DWORD = LAYOUT_RTL | LAYOUT_BTT | LAYOUT_VBH;
+pub const LAYOUT_BITMAPORIENTATIONPRESERVED: DWORD = 0x00000008;
+pub const TA_NOUPDATECP: UINT = 0;
+pub const TA_UPDATECP: UINT = 1;
+pub const TA_LEFT: UINT = 0;
+pub const TA_RIGHT: UINT = 2;
+pub const TA_CENTER: UINT = 6;
+pub const TA_TOP: UINT = 0;
+pub const TA_BOTTOM: UINT = 8;
+pub const TA_BASELINE: UINT = 24;
+pub const TA_RTLREADING: UINT = 256;
+pub const TA_MASK: UINT = TA_BASELINE + TA_CENTER + TA_UPDATECP + TA_RTLREADING;
+pub const VTA_BASELINE: UINT = TA_BASELINE;
+pub const VTA_LEFT: UINT = TA_BOTTOM;
+pub const VTA_RIGHT: UINT = TA_TOP;
+pub const VTA_CENTER: UINT = TA_CENTER;
+pub const VTA_BOTTOM: UINT = TA_RIGHT;
+pub const VTA_TOP: UINT = TA_LEFT;
+pub const ETO_OPAQUE: UINT = 0x0002;
+pub const ETO_CLIPPED: UINT = 0x0004;
+pub const ETO_GLYPH_INDEX: UINT = 0x0010;
+pub const ETO_RTLREADING: UINT = 0x0080;
+pub const ETO_NUMERICSLOCAL: UINT = 0x0400;
+pub const ETO_NUMERICSLATIN: UINT = 0x0800;
+pub const ETO_IGNORELANGUAGE: UINT = 0x1000;
+pub const ETO_PDY: UINT = 0x2000;
+pub const ETO_REVERSE_INDEX_MAP: UINT = 0x10000;
+pub const ASPECT_FILTERING: UINT = 0x0001;
+pub const DCB_RESET: UINT = 0x0001;
+pub const DCB_ACCUMULATE: UINT = 0x0002;
+pub const DCB_DIRTY: UINT = DCB_ACCUMULATE;
+pub const DCB_SET: UINT = DCB_RESET | DCB_ACCUMULATE;
+pub const DCB_ENABLE: UINT = 0x0004;
+pub const DCB_DISABLE: UINT = 0x0008;
+pub const META_SETBKCOLOR: WORD = 0x0201;
+pub const META_SETBKMODE: WORD = 0x0102;
+pub const META_SETMAPMODE: WORD = 0x0103;
+pub const META_SETROP2: WORD = 0x0104;
+pub const META_SETRELABS: WORD = 0x0105;
+pub const META_SETPOLYFILLMODE: WORD = 0x0106;
+pub const META_SETSTRETCHBLTMODE: WORD = 0x0107;
+pub const META_SETTEXTCHAREXTRA: WORD = 0x0108;
+pub const META_SETTEXTCOLOR: WORD = 0x0209;
+pub const META_SETTEXTJUSTIFICATION: WORD = 0x020A;
+pub const META_SETWINDOWORG: WORD = 0x020B;
+pub const META_SETWINDOWEXT: WORD = 0x020C;
+pub const META_SETVIEWPORTORG: WORD = 0x020D;
+pub const META_SETVIEWPORTEXT: WORD = 0x020E;
+pub const META_OFFSETWINDOWORG: WORD = 0x020F;
+pub const META_SCALEWINDOWEXT: WORD = 0x0410;
+pub const META_OFFSETVIEWPORTORG: WORD = 0x0211;
+pub const META_SCALEVIEWPORTEXT: WORD = 0x0412;
+pub const META_LINETO: WORD = 0x0213;
+pub const META_MOVETO: WORD = 0x0214;
+pub const META_EXCLUDECLIPRECT: WORD = 0x0415;
+pub const META_INTERSECTCLIPRECT: WORD = 0x0416;
+pub const META_ARC: WORD = 0x0817;
+pub const META_ELLIPSE: WORD = 0x0418;
+pub const META_FLOODFILL: WORD = 0x0419;
+pub const META_PIE: WORD = 0x081A;
+pub const META_RECTANGLE: WORD = 0x041B;
+pub const META_ROUNDRECT: WORD = 0x061C;
+pub const META_PATBLT: WORD = 0x061D;
+pub const META_SAVEDC: WORD = 0x001E;
+pub const META_SETPIXEL: WORD = 0x041F;
+pub const META_OFFSETCLIPRGN: WORD = 0x0220;
+pub const META_TEXTOUT: WORD = 0x0521;
+pub const META_BITBLT: WORD = 0x0922;
+pub const META_STRETCHBLT: WORD = 0x0B23;
+pub const META_POLYGON: WORD = 0x0324;
+pub const META_POLYLINE: WORD = 0x0325;
+pub const META_ESCAPE: WORD = 0x0626;
+pub const META_RESTOREDC: WORD = 0x0127;
+pub const META_FILLREGION: WORD = 0x0228;
+pub const META_FRAMEREGION: WORD = 0x0429;
+pub const META_INVERTREGION: WORD = 0x012A;
+pub const META_PAINTREGION: WORD = 0x012B;
+pub const META_SELECTCLIPREGION: WORD = 0x012C;
+pub const META_SELECTOBJECT: WORD = 0x012D;
+pub const META_SETTEXTALIGN: WORD = 0x012E;
+pub const META_CHORD: WORD = 0x0830;
+pub const META_SETMAPPERFLAGS: WORD = 0x0231;
+pub const META_EXTTEXTOUT: WORD = 0x0a32;
+pub const META_SETDIBTODEV: WORD = 0x0d33;
+pub const META_SELECTPALETTE: WORD = 0x0234;
+pub const META_REALIZEPALETTE: WORD = 0x0035;
+pub const META_ANIMATEPALETTE: WORD = 0x0436;
+pub const META_SETPALENTRIES: WORD = 0x0037;
+pub const META_POLYPOLYGON: WORD = 0x0538;
+pub const META_RESIZEPALETTE: WORD = 0x0139;
+pub const META_DIBBITBLT: WORD = 0x0940;
+pub const META_DIBSTRETCHBLT: WORD = 0x0b41;
+pub const META_DIBCREATEPATTERNBRUSH: WORD = 0x0142;
+pub const META_STRETCHDIB: WORD = 0x0f43;
+pub const META_EXTFLOODFILL: WORD = 0x0548;
+pub const META_SETLAYOUT: WORD = 0x0149;
+pub const META_DELETEOBJECT: WORD = 0x01f0;
+pub const META_CREATEPALETTE: WORD = 0x00f7;
+pub const META_CREATEPATTERNBRUSH: WORD = 0x01F9;
+pub const META_CREATEPENINDIRECT: WORD = 0x02FA;
+pub const META_CREATEFONTINDIRECT: WORD = 0x02FB;
+pub const META_CREATEBRUSHINDIRECT: WORD = 0x02FC;
+pub const META_CREATEREGION: WORD = 0x06FF;
+STRUCT!{struct DRAWPATRECT {
+ ptPosition: POINT,
+ ptSize: POINT,
+ wStyle: WORD,
+ wPattern: WORD,
+}}
+pub type PDRAWPATRECT = *mut DRAWPATRECT;
+pub const NEWFRAME: c_int = 1;
+pub const ABORTDOC: c_int = 2;
+pub const NEXTBAND: c_int = 3;
+pub const SETCOLORTABLE: c_int = 4;
+pub const GETCOLORTABLE: c_int = 5;
+pub const FLUSHOUTPUT: c_int = 6;
+pub const DRAFTMODE: c_int = 7;
+pub const QUERYESCSUPPORT: c_int = 8;
+pub const SETABORTPROC: c_int = 9;
+pub const STARTDOC: c_int = 10;
+pub const ENDDOC: c_int = 11;
+pub const GETPHYSPAGESIZE: c_int = 12;
+pub const GETPRINTINGOFFSET: c_int = 13;
+pub const GETSCALINGFACTOR: c_int = 14;
+pub const MFCOMMENT: c_int = 15;
+pub const GETPENWIDTH: c_int = 16;
+pub const SETCOPYCOUNT: c_int = 17;
+pub const SELECTPAPERSOURCE: c_int = 18;
+pub const DEVICEDATA: c_int = 19;
+pub const PASSTHROUGH: c_int = 19;
+pub const GETTECHNOLGY: c_int = 20;
+pub const GETTECHNOLOGY: c_int = 20;
+pub const SETLINECAP: c_int = 21;
+pub const SETLINEJOIN: c_int = 22;
+pub const SETMITERLIMIT: c_int = 23;
+pub const BANDINFO: c_int = 24;
+pub const DRAWPATTERNRECT: c_int = 25;
+pub const GETVECTORPENSIZE: c_int = 26;
+pub const GETVECTORBRUSHSIZE: c_int = 27;
+pub const ENABLEDUPLEX: c_int = 28;
+pub const GETSETPAPERBINS: c_int = 29;
+pub const GETSETPRINTORIENT: c_int = 30;
+pub const ENUMPAPERBINS: c_int = 31;
+pub const SETDIBSCALING: c_int = 32;
+pub const EPSPRINTING: c_int = 33;
+pub const ENUMPAPERMETRICS: c_int = 34;
+pub const GETSETPAPERMETRICS: c_int = 35;
+pub const POSTSCRIPT_DATA: c_int = 37;
+pub const POSTSCRIPT_IGNORE: c_int = 38;
+pub const MOUSETRAILS: c_int = 39;
+pub const GETDEVICEUNITS: c_int = 42;
+pub const GETEXTENDEDTEXTMETRICS: c_int = 256;
+pub const GETEXTENTTABLE: c_int = 257;
+pub const GETPAIRKERNTABLE: c_int = 258;
+pub const GETTRACKKERNTABLE: c_int = 259;
+pub const EXTTEXTOUT: c_int = 512;
+pub const GETFACENAME: c_int = 513;
+pub const DOWNLOADFACE: c_int = 514;
+pub const ENABLERELATIVEWIDTHS: c_int = 768;
+pub const ENABLEPAIRKERNING: c_int = 769;
+pub const SETKERNTRACK: c_int = 770;
+pub const SETALLJUSTVALUES: c_int = 771;
+pub const SETCHARSET: c_int = 772;
+pub const STRETCHBLT: c_int = 2048;
+pub const METAFILE_DRIVER: c_int = 2049;
+pub const GETSETSCREENPARAMS: c_int = 3072;
+pub const QUERYDIBSUPPORT: c_int = 3073;
+pub const BEGIN_PATH: c_int = 4096;
+pub const CLIP_TO_PATH: c_int = 4097;
+pub const END_PATH: c_int = 4098;
+pub const EXT_DEVICE_CAPS: c_int = 4099;
+pub const RESTORE_CTM: c_int = 4100;
+pub const SAVE_CTM: c_int = 4101;
+pub const SET_ARC_DIRECTION: c_int = 4102;
+pub const SET_BACKGROUND_COLOR: c_int = 4103;
+pub const SET_POLY_MODE: c_int = 4104;
+pub const SET_SCREEN_ANGLE: c_int = 4105;
+pub const SET_SPREAD: c_int = 4106;
+pub const TRANSFORM_CTM: c_int = 4107;
+pub const SET_CLIP_BOX: c_int = 4108;
+pub const SET_BOUNDS: c_int = 4109;
+pub const SET_MIRROR_MODE: c_int = 4110;
+pub const OPENCHANNEL: c_int = 4110;
+pub const DOWNLOADHEADER: c_int = 4111;
+pub const CLOSECHANNEL: c_int = 4112;
+pub const POSTSCRIPT_PASSTHROUGH: c_int = 4115;
+pub const ENCAPSULATED_POSTSCRIPT: c_int = 4116;
+pub const POSTSCRIPT_IDENTIFY: c_int = 4117;
+pub const POSTSCRIPT_INJECTION: c_int = 4118;
+pub const CHECKJPEGFORMAT: c_int = 4119;
+pub const CHECKPNGFORMAT: c_int = 4120;
+pub const GET_PS_FEATURESETTING: c_int = 4121;
+pub const GDIPLUS_TS_QUERYVER: c_int = 4122;
+pub const GDIPLUS_TS_RECORD: c_int = 4123;
+pub const MILCORE_TS_QUERYVER_RESULT_FALSE: c_int = 0x0;
+pub const MILCORE_TS_QUERYVER_RESULT_TRUE: c_int = 0x7FFFFFFF;
+pub const SPCLPASSTHROUGH2: c_int = 4568;
+pub const PSIDENT_GDICENTRIC: c_int = 0;
+pub const PSIDENT_PSCENTRIC: c_int = 1;
+STRUCT!{struct PSINJECTDATA {
+ DataBytes: DWORD,
+ InjectionPoint: WORD,
+ PageNumber: WORD,
+}}
+pub type PPSINJECTDATA = *mut PSINJECTDATA;
+pub const PSINJECT_BEGINSTREAM: WORD = 1;
+pub const PSINJECT_PSADOBE: WORD = 2;
+pub const PSINJECT_PAGESATEND: WORD = 3;
+pub const PSINJECT_PAGES: WORD = 4;
+pub const PSINJECT_DOCNEEDEDRES: WORD = 5;
+pub const PSINJECT_DOCSUPPLIEDRES: WORD = 6;
+pub const PSINJECT_PAGEORDER: WORD = 7;
+pub const PSINJECT_ORIENTATION: WORD = 8;
+pub const PSINJECT_BOUNDINGBOX: WORD = 9;
+pub const PSINJECT_DOCUMENTPROCESSCOLORS: WORD = 10;
+pub const PSINJECT_COMMENTS: WORD = 11;
+pub const PSINJECT_BEGINDEFAULTS: WORD = 12;
+pub const PSINJECT_ENDDEFAULTS: WORD = 13;
+pub const PSINJECT_BEGINPROLOG: WORD = 14;
+pub const PSINJECT_ENDPROLOG: WORD = 15;
+pub const PSINJECT_BEGINSETUP: WORD = 16;
+pub const PSINJECT_ENDSETUP: WORD = 17;
+pub const PSINJECT_TRAILER: WORD = 18;
+pub const PSINJECT_EOF: WORD = 19;
+pub const PSINJECT_ENDSTREAM: WORD = 20;
+pub const PSINJECT_DOCUMENTPROCESSCOLORSATEND: WORD = 21;
+pub const PSINJECT_PAGENUMBER: WORD = 100;
+pub const PSINJECT_BEGINPAGESETUP: WORD = 101;
+pub const PSINJECT_ENDPAGESETUP: WORD = 102;
+pub const PSINJECT_PAGETRAILER: WORD = 103;
+pub const PSINJECT_PLATECOLOR: WORD = 104;
+pub const PSINJECT_SHOWPAGE: WORD = 105;
+pub const PSINJECT_PAGEBBOX: WORD = 106;
+pub const PSINJECT_ENDPAGECOMMENTS: WORD = 107;
+pub const PSINJECT_VMSAVE: WORD = 200;
+pub const PSINJECT_VMRESTORE: WORD = 201;
+pub const PSINJECT_DLFONT: DWORD = 0xdddddddd;
+pub const FEATURESETTING_NUP: WORD = 0;
+pub const FEATURESETTING_OUTPUT: WORD = 1;
+pub const FEATURESETTING_PSLEVEL: WORD = 2;
+pub const FEATURESETTING_CUSTPAPER: WORD = 3;
+pub const FEATURESETTING_MIRROR: WORD = 4;
+pub const FEATURESETTING_NEGATIVE: WORD = 5;
+pub const FEATURESETTING_PROTOCOL: WORD = 6;
+pub const FEATURESETTING_PRIVATE_BEGIN: WORD = 0x1000;
+pub const FEATURESETTING_PRIVATE_END: WORD = 0x1FFF;
+STRUCT!{struct PSFEATURE_OUTPUT {
+ bPageIndependent: BOOL,
+ bSetPageDevice: BOOL,
+}}
+pub type PPSFEATURE_OUTPUT = *mut PSFEATURE_OUTPUT;
+STRUCT!{struct PSFEATURE_CUSTPAPER {
+ lOrientation: LONG,
+ lWidth: LONG,
+ lHeight: LONG,
+ lWidthOffset: LONG,
+ lHeightOffset: LONG,
+}}
+pub type PPSFEATURE_CUSTPAPER = *mut PSFEATURE_CUSTPAPER;
+pub const PSPROTOCOL_ASCII: c_int = 0;
+pub const PSPROTOCOL_BCP: c_int = 1;
+pub const PSPROTOCOL_TBCP: c_int = 2;
+pub const PSPROTOCOL_BINARY: c_int = 3;
+pub const QDI_SETDIBITS: c_int = 1;
+pub const QDI_GETDIBITS: c_int = 2;
+pub const QDI_DIBTOSCREEN: c_int = 4;
+pub const QDI_STRETCHDIB: c_int = 8;
+pub const SP_NOTREPORTED: c_int = 0x4000;
+pub const SP_ERROR: c_int = -1;
+pub const SP_APPABORT: c_int = -2;
+pub const SP_USERABORT: c_int = -3;
+pub const SP_OUTOFDISK: c_int = -4;
+pub const SP_OUTOFMEMORY: c_int = -5;
+pub const PR_JOBSTATUS: c_int = 0x0000;
+pub const OBJ_PEN: UINT = 1;
+pub const OBJ_BRUSH: UINT = 2;
+pub const OBJ_DC: UINT = 3;
+pub const OBJ_METADC: UINT = 4;
+pub const OBJ_PAL: UINT = 5;
+pub const OBJ_FONT: UINT = 6;
+pub const OBJ_BITMAP: UINT = 7;
+pub const OBJ_REGION: UINT = 8;
+pub const OBJ_METAFILE: UINT = 9;
+pub const OBJ_MEMDC: UINT = 10;
+pub const OBJ_EXTPEN: UINT = 11;
+pub const OBJ_ENHMETADC: UINT = 12;
+pub const OBJ_ENHMETAFILE: UINT = 13;
+pub const OBJ_COLORSPACE: UINT = 14;
+pub const GDI_OBJ_LAST: UINT = OBJ_COLORSPACE;
+pub const MWT_IDENTITY: c_int = 1;
+pub const MWT_LEFTMULTIPLY: c_int = 2;
+pub const MWT_RIGHTMULTIPLY: c_int = 3;
+pub const MWT_MIN: c_int = MWT_IDENTITY;
+pub const MWT_MAX: c_int = MWT_RIGHTMULTIPLY;
+STRUCT!{struct XFORM {
+ eM11: FLOAT,
+ eM12: FLOAT,
+ eM21: FLOAT,
+ eM22: FLOAT,
+ eDx: FLOAT,
+ eDy: FLOAT,
+}}
+pub type PXFORM = *mut XFORM;
+pub type LPXFORM = *mut XFORM;
+STRUCT!{struct BITMAP {
+ bmType: LONG,
+ bmWidth: LONG,
+ bmHeight: LONG,
+ bmWidthBytes: LONG,
+ bmPlanes: WORD,
+ bmBitsPixel: WORD,
+ bmBits: LPVOID,
+}}
+pub type PBITMAP = *mut BITMAP;
+pub type NPBITMAP = *mut BITMAP;
+pub type LPBITMAP = *mut BITMAP;
+STRUCT!{#[debug] struct RGBTRIPLE {
+ rgbtBlue: BYTE,
+ rgbtGreen: BYTE,
+ rgbtRed: BYTE,
+}}
+pub type PRGBTRIPLE = *mut RGBTRIPLE;
+pub type NPRGBTRIPLE = *mut RGBTRIPLE;
+pub type LPRGBTRIPLE = *mut RGBTRIPLE;
+STRUCT!{#[debug] struct RGBQUAD {
+ rgbBlue: BYTE,
+ rgbGreen: BYTE,
+ rgbRed: BYTE,
+ rgbReserved: BYTE,
+}}
+pub type LPRGBQUAD = *mut RGBQUAD;
+pub const CS_ENABLE: DWORD = 0x00000001;
+pub const CS_DISABLE: DWORD = 0x00000002;
+pub const CS_DELETE_TRANSFORM: DWORD = 0x00000003;
+pub const LCS_SIGNATURE: DWORD = 0x5053_4F43; // 'PSOC'
+pub const LCS_sRGB: LCSCSTYPE = 0x7352_4742; // 'sRGB'
+pub const LCS_WINDOWS_COLOR_SPACE: LCSCSTYPE = 0x5769_6E20; // 'Win '
+pub type LCSCSTYPE = LONG;
+pub const LCS_CALIBRATED_RGB: LCSCSTYPE = 0x00000000;
+pub type LCSGAMUTMATCH = LONG;
+pub const LCS_GM_BUSINESS: LCSGAMUTMATCH = 0x00000001;
+pub const LCS_GM_GRAPHICS: LCSGAMUTMATCH = 0x00000002;
+pub const LCS_GM_IMAGES: LCSGAMUTMATCH = 0x00000004;
+pub const LCS_GM_ABS_COLORIMETRIC: LCSGAMUTMATCH = 0x00000008;
+pub const CM_OUT_OF_GAMUT: BYTE = 255;
+pub const CM_IN_GAMUT: BYTE = 0;
+pub const ICM_ADDPROFILE: UINT = 1;
+pub const ICM_DELETEPROFILE: UINT = 2;
+pub const ICM_QUERYPROFILE: UINT = 3;
+pub const ICM_SETDEFAULTPROFILE: UINT = 4;
+pub const ICM_REGISTERICMATCHER: UINT = 5;
+pub const ICM_UNREGISTERICMATCHER: UINT = 6;
+pub const ICM_QUERYMATCH: UINT = 7;
+#[inline]
+pub fn GetKValue(cmyk: COLORREF) -> BYTE {
+ cmyk as BYTE
+}
+#[inline]
+pub fn GetYValue(cmyk: COLORREF) -> BYTE {
+ (cmyk >> 8) as BYTE
+}
+#[inline]
+pub fn GetMValue(cmyk: COLORREF) -> BYTE {
+ (cmyk >> 16) as BYTE
+}
+#[inline]
+pub fn GetCValue(cmyk: COLORREF) -> BYTE {
+ (cmyk >> 24) as BYTE
+}
+#[inline]
+pub fn CMYK(c: BYTE, m: BYTE, y: BYTE, k: BYTE) -> COLORREF {
+ (k as COLORREF) | ((y as COLORREF) << 8) | ((m as COLORREF) << 16) | ((c as COLORREF) << 24)
+}
+pub type FXPT16DOT16 = c_long;
+pub type LPFXPT16DOT16 = *mut c_long;
+pub type FXPT2DOT30 = c_long;
+pub type LPFXPT2DOT30 = *mut c_long;
+STRUCT!{#[debug] struct CIEXYZ {
+ ciexyzX: FXPT2DOT30,
+ ciexyzY: FXPT2DOT30,
+ ciexyzZ: FXPT2DOT30,
+}}
+pub type LPCIEXYZ = *mut CIEXYZ;
+STRUCT!{#[debug] struct CIEXYZTRIPLE {
+ ciexyzRed: CIEXYZ,
+ ciexyzGreen: CIEXYZ,
+ ciexyzBlue: CIEXYZ,
+}}
+pub type LPCIEXYZTRIPLE = *mut CIEXYZTRIPLE;
+STRUCT!{struct LOGCOLORSPACEA {
+ lcsSignature: DWORD,
+ lcsVersion: DWORD,
+ lcsSize: DWORD,
+ lcsCSType: LCSCSTYPE,
+ lcsIntent: LCSGAMUTMATCH,
+ lcsEndpoints: CIEXYZTRIPLE,
+ lcsGammaRed: DWORD,
+ lcsGammaGreen: DWORD,
+ lcsGammaBlue: DWORD,
+ lcsFilename: [CHAR; MAX_PATH],
+}}
+pub type LPLOGCOLORSPACEA = *mut LOGCOLORSPACEA;
+STRUCT!{struct LOGCOLORSPACEW {
+ lcsSignature: DWORD,
+ lcsVersion: DWORD,
+ lcsSize: DWORD,
+ lcsCSType: LCSCSTYPE,
+ lcsIntent: LCSGAMUTMATCH,
+ lcsEndpoints: CIEXYZTRIPLE,
+ lcsGammaRed: DWORD,
+ lcsGammaGreen: DWORD,
+ lcsGammaBlue: DWORD,
+ lcsFilename: [WCHAR; MAX_PATH],
+}}
+pub type LPLOGCOLORSPACEW = *mut LOGCOLORSPACEW;
+STRUCT!{#[debug] struct BITMAPCOREHEADER {
+ bcSize: DWORD,
+ bcWidth: WORD,
+ bcHeight: WORD,
+ bcPlanes: WORD,
+ bcBitCount: WORD,
+}}
+pub type LPBITMAPCOREHEADER = *mut BITMAPCOREHEADER;
+pub type PBITMAPCOREHEADER = *mut BITMAPCOREHEADER;
+STRUCT!{#[debug] struct BITMAPINFOHEADER {
+ biSize: DWORD,
+ biWidth: LONG,
+ biHeight: LONG,
+ biPlanes: WORD,
+ biBitCount: WORD,
+ biCompression: DWORD,
+ biSizeImage: DWORD,
+ biXPelsPerMeter: LONG,
+ biYPelsPerMeter: LONG,
+ biClrUsed: DWORD,
+ biClrImportant: DWORD,
+}}
+pub type LPBITMAPINFOHEADER = *mut BITMAPINFOHEADER;
+pub type PBITMAPINFOHEADER = *mut BITMAPINFOHEADER;
+STRUCT!{#[debug] struct BITMAPV4HEADER {
+ bV4Size: DWORD,
+ bV4Width: LONG,
+ bV4Height: LONG,
+ bV4Planes: WORD,
+ bV4BitCount: WORD,
+ bV4V4Compression: DWORD,
+ bV4SizeImage: DWORD,
+ bV4XPelsPerMeter: LONG,
+ bV4YPelsPerMeter: LONG,
+ bV4ClrUsed: DWORD,
+ bV4ClrImportant: DWORD,
+ bV4RedMask: DWORD,
+ bV4GreenMask: DWORD,
+ bV4BlueMask: DWORD,
+ bV4AlphaMask: DWORD,
+ bV4CSType: DWORD,
+ bV4Endpoints: CIEXYZTRIPLE,
+ bV4GammaRed: DWORD,
+ bV4GammaGreen: DWORD,
+ bV4GammaBlue: DWORD,
+}}
+pub type LPBITMAPV4HEADER = *mut BITMAPV4HEADER;
+pub type PBITMAPV4HEADER = *mut BITMAPV4HEADER;
+STRUCT!{#[debug] struct BITMAPV5HEADER {
+ bV5Size: DWORD,
+ bV5Width: LONG,
+ bV5Height: LONG,
+ bV5Planes: WORD,
+ bV5BitCount: WORD,
+ bV5Compression: DWORD,
+ bV5SizeImage: DWORD,
+ bV5XPelsPerMeter: LONG,
+ bV5YPelsPerMeter: LONG,
+ bV5ClrUsed: DWORD,
+ bV5ClrImportant: DWORD,
+ bV5RedMask: DWORD,
+ bV5GreenMask: DWORD,
+ bV5BlueMask: DWORD,
+ bV5AlphaMask: DWORD,
+ bV5CSType: DWORD,
+ bV5Endpoints: CIEXYZTRIPLE,
+ bV5GammaRed: DWORD,
+ bV5GammaGreen: DWORD,
+ bV5GammaBlue: DWORD,
+ bV5Intent: DWORD,
+ bV5ProfileData: DWORD,
+ bV5ProfileSize: DWORD,
+ bV5Reserved: DWORD,
+}}
+pub type LPBITMAPV5HEADER = *mut BITMAPV5HEADER;
+pub type PBITMAPV5HEADER = *mut BITMAPV5HEADER;
+pub const PROFILE_LINKED: LONG = 0x4C49_4E4B; // 'LINK'
+pub const PROFILE_EMBEDDED: LONG = 0x4D42_4544; // 'MBED'
+pub const BI_RGB: DWORD = 0;
+pub const BI_RLE8: DWORD = 1;
+pub const BI_RLE4: DWORD = 2;
+pub const BI_BITFIELDS: DWORD = 3;
+pub const BI_JPEG: DWORD = 4;
+pub const BI_PNG: DWORD = 5;
+STRUCT!{#[debug] struct BITMAPINFO {
+ bmiHeader: BITMAPINFOHEADER,
+ bmiColors: [RGBQUAD; 1],
+}}
+pub type LPBITMAPINFO = *mut BITMAPINFO;
+pub type PBITMAPINFO = *mut BITMAPINFO;
+STRUCT!{#[debug] struct BITMAPCOREINFO {
+ bmciHeader: BITMAPCOREHEADER,
+ bmciColors: [RGBTRIPLE; 1],
+}}
+pub type LPBITMAPCOREINFO = *mut BITMAPCOREINFO;
+pub type PBITMAPCOREINFO = *mut BITMAPCOREINFO;
+STRUCT!{#[debug] #[repr(packed)] struct BITMAPFILEHEADER {
+ bfType: WORD,
+ bfSize: DWORD,
+ bfReserved1: WORD,
+ bfReserved2: WORD,
+ bfOffBits: DWORD,
+}}
+pub type LPBITMAPFILEHEADER = *mut BITMAPFILEHEADER;
+pub type PBITMAPFILEHEADER = *mut BITMAPFILEHEADER;
+#[inline]
+pub fn MAKEPOINTS(l: DWORD) -> POINTS {
+ unsafe { ::core::mem::transmute::<DWORD, POINTS>(l) }
+}
+STRUCT!{#[debug] struct FONTSIGNATURE {
+ fsUsb: [DWORD; 4],
+ fsCsb: [DWORD; 2],
+}}
+pub type LPFONTSIGNATURE = *mut FONTSIGNATURE;
+pub type PFONTSIGNATURE = *mut FONTSIGNATURE;
+STRUCT!{#[debug] struct CHARSETINFO {
+ ciCharset: UINT,
+ ciACP: UINT,
+ fs: FONTSIGNATURE,
+}}
+pub type PCHARSETINFO = *mut CHARSETINFO;
+pub type NPCHARSETINFO = *mut CHARSETINFO;
+pub type LPCHARSETINFO = *mut CHARSETINFO;
+pub const TCI_SRCCHARSET: c_int = 1;
+pub const TCI_SRCCODEPAGE: c_int = 2;
+pub const TCI_SRCFONTSIG: c_int = 3;
+pub const TCI_SRCLOCALE: c_int = 0x1000;
+STRUCT!{#[debug] struct LOCALESIGNATURE {
+ lsUsb: [DWORD; 4],
+ lsCsbDefault: [DWORD; 2],
+ lsCsbSupported: [DWORD; 2],
+}}
+pub type PLOCALESIGNATURE = *mut LOCALESIGNATURE;
+pub type LPLOCALESIGNATURE = *mut LOCALESIGNATURE;
+STRUCT!{struct HANDLETABLE {
+ objectHandle: [HGDIOBJ; 1],
+}}
+pub type LPHANDLETABLE = *mut HANDLETABLE;
+pub type PHANDLETABLE = *mut HANDLETABLE;
+STRUCT!{struct METARECORD {
+ rdSize: DWORD,
+ rdFunction: WORD,
+ rdParm: [WORD; 1],
+}}
+pub type PMETARECORD = *mut METARECORD;
+pub type LPMETARECORD = *mut METARECORD;
+STRUCT!{struct METAFILEPICT {
+ mm: LONG,
+ xExt: LONG,
+ yExt: LONG,
+ hMF: HMETAFILE,
+}}
+pub type LPMETAFILEPICT = *mut METAFILEPICT;
+STRUCT!{struct METAHEADER {
+ mtType: WORD,
+ mtHeaderSize: WORD,
+ mtVersion: WORD,
+ mtSize: DWORD,
+ mtNoObjects: WORD,
+ mtMaxRecord: DWORD,
+ mtNoParameters: WORD,
+}}
+pub type PMETAHEADER = *mut METAHEADER;
+pub type LPMETAHEADER = *mut METAHEADER;
+STRUCT!{struct ENHMETARECORD {
+ iType: DWORD,
+ nSize: DWORD,
+ dParm: [DWORD; 1],
+}}
+pub type PENHMETARECORD = *mut ENHMETARECORD;
+pub type LPENHMETARECORD = *mut ENHMETARECORD;
+STRUCT!{struct ENHMETAHEADER {
+ iType: DWORD,
+ nSize: DWORD,
+ rclBounds: RECTL,
+ rclFrame: RECTL,
+ dSignature: DWORD,
+ nVersion: DWORD,
+ nBytes: DWORD,
+ nRecords: DWORD,
+ nHandles: WORD,
+ sReserved: WORD,
+ nDescription: DWORD,
+ offDescription: DWORD,
+ nPalEntries: DWORD,
+ szlDevice: SIZEL,
+ szlMillimeters: SIZEL,
+ cbPixelFormat: DWORD,
+ offPixelFormat: DWORD,
+ bOpenGL: DWORD,
+ szlMicrometers: SIZEL,
+}}
+pub type PENHMETAHEADER = *mut ENHMETAHEADER;
+pub type LPENHMETAHEADER = *mut ENHMETAHEADER;
+pub const TMPF_FIXED_PITCH: BYTE = 0x01;
+pub const TMPF_VECTOR: BYTE = 0x02;
+pub const TMPF_DEVICE: BYTE = 0x08;
+pub const TMPF_TRUETYPE: BYTE = 0x04;
+// BCHAR
+STRUCT!{struct TEXTMETRICA {
+ tmHeight: LONG,
+ tmAscent: LONG,
+ tmDescent: LONG,
+ tmInternalLeading: LONG,
+ tmExternalLeading: LONG,
+ tmAveCharWidth: LONG,
+ tmMaxCharWidth: LONG,
+ tmWeight: LONG,
+ tmOverhang: LONG,
+ tmDigitizedAspectX: LONG,
+ tmDigitizedAspectY: LONG,
+ tmFirstChar: BYTE,
+ tmLastChar: BYTE,
+ tmDefaultChar: BYTE,
+ tmBreakChar: BYTE,
+ tmItalic: BYTE,
+ tmUnderlined: BYTE,
+ tmStruckOut: BYTE,
+ tmPitchAndFamily: BYTE,
+ tmCharSet: BYTE,
+}}
+pub type PTEXTMETRICA = *mut TEXTMETRICA;
+pub type NPTEXTMETRICA = *mut TEXTMETRICA;
+pub type LPTEXTMETRICA = *mut TEXTMETRICA;
+STRUCT!{struct TEXTMETRICW {
+ tmHeight: LONG,
+ tmAscent: LONG,
+ tmDescent: LONG,
+ tmInternalLeading: LONG,
+ tmExternalLeading: LONG,
+ tmAveCharWidth: LONG,
+ tmMaxCharWidth: LONG,
+ tmWeight: LONG,
+ tmOverhang: LONG,
+ tmDigitizedAspectX: LONG,
+ tmDigitizedAspectY: LONG,
+ tmFirstChar: WCHAR,
+ tmLastChar: WCHAR,
+ tmDefaultChar: WCHAR,
+ tmBreakChar: WCHAR,
+ tmItalic: BYTE,
+ tmUnderlined: BYTE,
+ tmStruckOut: BYTE,
+ tmPitchAndFamily: BYTE,
+ tmCharSet: BYTE,
+}}
+pub type PTEXTMETRICW = *mut TEXTMETRICW;
+pub type NPTEXTMETRICW = *mut TEXTMETRICW;
+pub type LPTEXTMETRICW = *mut TEXTMETRICW;
+pub const NTM_REGULAR: DWORD = 0x00000040;
+pub const NTM_BOLD: DWORD = 0x00000020;
+pub const NTM_ITALIC: DWORD = 0x00000001;
+pub const NTM_NONNEGATIVE_AC: DWORD = 0x00010000;
+pub const NTM_PS_OPENTYPE: DWORD = 0x00020000;
+pub const NTM_TT_OPENTYPE: DWORD = 0x00040000;
+pub const NTM_MULTIPLEMASTER: DWORD = 0x00080000;
+pub const NTM_TYPE1: DWORD = 0x00100000;
+pub const NTM_DSIG: DWORD = 0x00200000;
+STRUCT!{struct NEWTEXTMETRICA {
+ tmHeight: LONG,
+ tmAscent: LONG,
+ tmDescent: LONG,
+ tmInternalLeading: LONG,
+ tmExternalLeading: LONG,
+ tmAveCharWidth: LONG,
+ tmMaxCharWidth: LONG,
+ tmWeight: LONG,
+ tmOverhang: LONG,
+ tmDigitizedAspectX: LONG,
+ tmDigitizedAspectY: LONG,
+ tmFirstChar: BYTE,
+ tmLastChar: BYTE,
+ tmDefaultChar: BYTE,
+ tmBreakChar: BYTE,
+ tmItalic: BYTE,
+ tmUnderlined: BYTE,
+ tmStruckOut: BYTE,
+ tmPitchAndFamily: BYTE,
+ tmCharSet: BYTE,
+ ntmFlags: DWORD,
+ ntmSizeEM: UINT,
+ ntmCellHeight: UINT,
+ ntmAvgWidth: UINT,
+}}
+pub type PNEWTEXTMETRICA = *mut NEWTEXTMETRICA;
+pub type NPNEWTEXTMETRICA = *mut NEWTEXTMETRICA;
+pub type LPNEWTEXTMETRICA = *mut NEWTEXTMETRICA;
+STRUCT!{struct NEWTEXTMETRICW {
+ tmHeight: LONG,
+ tmAscent: LONG,
+ tmDescent: LONG,
+ tmInternalLeading: LONG,
+ tmExternalLeading: LONG,
+ tmAveCharWidth: LONG,
+ tmMaxCharWidth: LONG,
+ tmWeight: LONG,
+ tmOverhang: LONG,
+ tmDigitizedAspectX: LONG,
+ tmDigitizedAspectY: LONG,
+ tmFirstChar: WCHAR,
+ tmLastChar: WCHAR,
+ tmDefaultChar: WCHAR,
+ tmBreakChar: WCHAR,
+ tmItalic: BYTE,
+ tmUnderlined: BYTE,
+ tmStruckOut: BYTE,
+ tmPitchAndFamily: BYTE,
+ tmCharSet: BYTE,
+ ntmFlags: DWORD,
+ ntmSizeEM: UINT,
+ ntmCellHeight: UINT,
+ ntmAvgWidth: UINT,
+}}
+pub type PNEWTEXTMETRICW = *mut NEWTEXTMETRICW;
+pub type NPNEWTEXTMETRICW = *mut NEWTEXTMETRICW;
+pub type LPNEWTEXTMETRICW = *mut NEWTEXTMETRICW;
+STRUCT!{struct NEWTEXTMETRICEXA {
+ ntmTm: NEWTEXTMETRICA,
+ ntmFontSig: FONTSIGNATURE,
+}}
+STRUCT!{struct NEWTEXTMETRICEXW {
+ ntmTm: NEWTEXTMETRICW,
+ ntmFontSig: FONTSIGNATURE,
+}}
+STRUCT!{struct PELARRAY {
+ paXCount: LONG,
+ paYCount: LONG,
+ paXExt: LONG,
+ paYExt: LONG,
+ paRGBs: BYTE,
+}}
+pub type PPELARRAY = *mut PELARRAY;
+pub type NPPELARRAY = *mut PELARRAY;
+pub type LPPELARRAY = *mut PELARRAY;
+STRUCT!{struct LOGBRUSH {
+ lbStyle: UINT,
+ lbColor: COLORREF,
+ lbHatch: ULONG_PTR,
+}}
+pub type PLOGBRUSH = *mut LOGBRUSH;
+pub type NPLOGBRUSH = *mut LOGBRUSH;
+pub type LPLOGBRUSH = *mut LOGBRUSH;
+STRUCT!{struct LOGBRUSH32 {
+ lbStyle: UINT,
+ lbColor: COLORREF,
+ lbHatch: ULONG,
+}}
+pub type PLOGBRUSH32 = *mut LOGBRUSH32;
+pub type NPLOGBRUSH32 = *mut LOGBRUSH32;
+pub type LPLOGBRUSH32 = *mut LOGBRUSH32;
+pub type PATTERN = LOGBRUSH;
+pub type PPATTERN = *mut PATTERN;
+pub type NPPATTERN = *mut PATTERN;
+pub type LPPATTERN = *mut PATTERN;
+STRUCT!{struct LOGPEN {
+ lopnStyle: UINT,
+ lopnWidth: POINT,
+ lopnColor: COLORREF,
+}}
+pub type PLOGPEN = *mut LOGPEN;
+pub type NPLOGPEN = *mut LOGPEN;
+pub type LPLOGPEN = *mut LOGPEN;
+STRUCT!{struct EXTLOGPEN {
+ elpPenStyle: DWORD,
+ elpWidth: DWORD,
+ elpBrushStyle: UINT,
+ elpColor: COLORREF,
+ elpHatch: ULONG_PTR,
+ elpNumEntries: DWORD,
+ elpStyleEntry: [DWORD; 1],
+}}
+pub type PEXTLOGPEN = *mut EXTLOGPEN;
+pub type NPEXTLOGPEN = *mut EXTLOGPEN;
+pub type LPEXTLOGPEN = *mut EXTLOGPEN;
+STRUCT!{struct EXTLOGPEN32 {
+ elpPenStyle: DWORD,
+ elpWidth: DWORD,
+ elpBrushStyle: UINT,
+ elpColor: COLORREF,
+ elpHatch: ULONG,
+ elpNumEntries: DWORD,
+ elpStyleEntry: [DWORD; 1],
+}}
+pub type PEXTLOGPEN32 = *mut EXTLOGPEN32;
+pub type NPEXTLOGPEN32 = *mut EXTLOGPEN32;
+pub type LPEXTLOGPEN32 = *mut EXTLOGPEN32;
+STRUCT!{struct PALETTEENTRY {
+ peRed: BYTE,
+ peGreen: BYTE,
+ peBlue: BYTE,
+ peFlags: BYTE,
+}}
+pub type PPALETTEENTRY = *mut PALETTEENTRY;
+pub type LPPALETTEENTRY = *mut PALETTEENTRY;
+STRUCT!{struct LOGPALETTE {
+ palVersion: WORD,
+ palNumEntries: WORD,
+ palPalEntry: [PALETTEENTRY; 1],
+}}
+pub type PLOGPALETTE = *mut LOGPALETTE;
+pub type NPLOGPALETTE = *mut LOGPALETTE;
+pub type LPLOGPALETTE = *mut LOGPALETTE;
+pub const LF_FACESIZE: usize = 32;
+STRUCT!{struct LOGFONTA {
+ lfHeight: LONG,
+ lfWidth: LONG,
+ lfEscapement: LONG,
+ lfOrientation: LONG,
+ lfWeight: LONG,
+ lfItalic: BYTE,
+ lfUnderline: BYTE,
+ lfStrikeOut: BYTE,
+ lfCharSet: BYTE,
+ lfOutPrecision: BYTE,
+ lfClipPrecision: BYTE,
+ lfQuality: BYTE,
+ lfPitchAndFamily: BYTE,
+ lfFaceName: [CHAR; LF_FACESIZE],
+}}
+pub type PLOGFONTA = *mut LOGFONTA;
+pub type NPLOGFONTA = *mut LOGFONTA;
+pub type LPLOGFONTA = *mut LOGFONTA;
+STRUCT!{struct LOGFONTW {
+ lfHeight: LONG,
+ lfWidth: LONG,
+ lfEscapement: LONG,
+ lfOrientation: LONG,
+ lfWeight: LONG,
+ lfItalic: BYTE,
+ lfUnderline: BYTE,
+ lfStrikeOut: BYTE,
+ lfCharSet: BYTE,
+ lfOutPrecision: BYTE,
+ lfClipPrecision: BYTE,
+ lfQuality: BYTE,
+ lfPitchAndFamily: BYTE,
+ lfFaceName: [WCHAR; LF_FACESIZE],
+}}
+pub type PLOGFONTW = *mut LOGFONTW;
+pub type NPLOGFONTW = *mut LOGFONTW;
+pub type LPLOGFONTW = *mut LOGFONTW;
+pub const LF_FULLFACESIZE: usize = 64;
+STRUCT!{struct ENUMLOGFONTA {
+ elfLogFont: LOGFONTA,
+ elfFullName: [BYTE; LF_FULLFACESIZE],
+ elfStyle: [BYTE; LF_FACESIZE],
+}}
+pub type LPENUMLOGFONTA = *mut ENUMLOGFONTA;
+STRUCT!{struct ENUMLOGFONTW {
+ elfLogFont: LOGFONTW,
+ elfFullName: [WCHAR; LF_FULLFACESIZE],
+ elfStyle: [WCHAR; LF_FACESIZE],
+}}
+pub type LPENUMLOGFONTW = *mut ENUMLOGFONTW;
+STRUCT!{struct ENUMLOGFONTEXA {
+ elfLogFont: LOGFONTA,
+ elfFullName: [BYTE; LF_FULLFACESIZE],
+ elfStyle: [BYTE; LF_FACESIZE],
+ elfScript: [BYTE; LF_FACESIZE],
+}}
+pub type LPENUMLOGFONTEXA = *mut ENUMLOGFONTEXA;
+STRUCT!{struct ENUMLOGFONTEXW {
+ elfLogFont: LOGFONTW,
+ elfFullName: [WCHAR; LF_FULLFACESIZE],
+ elfStyle: [WCHAR; LF_FACESIZE],
+ elfScript: [WCHAR; LF_FACESIZE],
+}}
+pub type LPENUMLOGFONTEXW = *mut ENUMLOGFONTEXW;
+pub const OUT_DEFAULT_PRECIS: DWORD = 0;
+pub const OUT_STRING_PRECIS: DWORD = 1;
+pub const OUT_CHARACTER_PRECIS: DWORD = 2;
+pub const OUT_STROKE_PRECIS: DWORD = 3;
+pub const OUT_TT_PRECIS: DWORD = 4;
+pub const OUT_DEVICE_PRECIS: DWORD = 5;
+pub const OUT_RASTER_PRECIS: DWORD = 6;
+pub const OUT_TT_ONLY_PRECIS: DWORD = 7;
+pub const OUT_OUTLINE_PRECIS: DWORD = 8;
+pub const OUT_SCREEN_OUTLINE_PRECIS: DWORD = 9;
+pub const OUT_PS_ONLY_PRECIS: DWORD = 10;
+pub const CLIP_DEFAULT_PRECIS: DWORD = 0;
+pub const CLIP_CHARACTER_PRECIS: DWORD = 1;
+pub const CLIP_STROKE_PRECIS: DWORD = 2;
+pub const CLIP_MASK: DWORD = 0xf;
+pub const CLIP_LH_ANGLES: DWORD = 1 << 4;
+pub const CLIP_TT_ALWAYS: DWORD = 2 << 4;
+pub const CLIP_DFA_DISABLE: DWORD = 4 << 4;
+pub const CLIP_EMBEDDED: DWORD = 8 << 4;
+pub const DEFAULT_QUALITY: DWORD = 0;
+pub const DRAFT_QUALITY: DWORD = 1;
+pub const PROOF_QUALITY: DWORD = 2;
+pub const NONANTIALIASED_QUALITY: DWORD = 3;
+pub const ANTIALIASED_QUALITY: DWORD = 4;
+pub const CLEARTYPE_QUALITY: DWORD = 5;
+pub const CLEARTYPE_NATURAL_QUALITY: DWORD = 6;
+pub const DEFAULT_PITCH: DWORD = 0;
+pub const FIXED_PITCH: DWORD = 1;
+pub const VARIABLE_PITCH: DWORD = 2;
+pub const MONO_FONT: DWORD = 8;
+pub const ANSI_CHARSET: DWORD = 0;
+pub const DEFAULT_CHARSET: DWORD = 1;
+pub const SYMBOL_CHARSET: DWORD = 2;
+pub const SHIFTJIS_CHARSET: DWORD = 128;
+pub const HANGEUL_CHARSET: DWORD = 129;
+pub const HANGUL_CHARSET: DWORD = 129;
+pub const GB2312_CHARSET: DWORD = 134;
+pub const CHINESEBIG5_CHARSET: DWORD = 136;
+pub const OEM_CHARSET: DWORD = 255;
+pub const JOHAB_CHARSET: DWORD = 130;
+pub const HEBREW_CHARSET: DWORD = 177;
+pub const ARABIC_CHARSET: DWORD = 178;
+pub const GREEK_CHARSET: DWORD = 161;
+pub const TURKISH_CHARSET: DWORD = 162;
+pub const VIETNAMESE_CHARSET: DWORD = 163;
+pub const THAI_CHARSET: DWORD = 222;
+pub const EASTEUROPE_CHARSET: DWORD = 238;
+pub const RUSSIAN_CHARSET: DWORD = 204;
+pub const MAC_CHARSET: DWORD = 77;
+pub const BALTIC_CHARSET: DWORD = 186;
+pub const FS_LATIN1: DWORD = 0x00000001;
+pub const FS_LATIN2: DWORD = 0x00000002;
+pub const FS_CYRILLIC: DWORD = 0x00000004;
+pub const FS_GREEK: DWORD = 0x00000008;
+pub const FS_TURKISH: DWORD = 0x00000010;
+pub const FS_HEBREW: DWORD = 0x00000020;
+pub const FS_ARABIC: DWORD = 0x00000040;
+pub const FS_BALTIC: DWORD = 0x00000080;
+pub const FS_VIETNAMESE: DWORD = 0x00000100;
+pub const FS_THAI: DWORD = 0x00010000;
+pub const FS_JISJAPAN: DWORD = 0x00020000;
+pub const FS_CHINESESIMP: DWORD = 0x00040000;
+pub const FS_WANSUNG: DWORD = 0x00080000;
+pub const FS_CHINESETRAD: DWORD = 0x00100000;
+pub const FS_JOHAB: DWORD = 0x00200000;
+pub const FS_SYMBOL: DWORD = 0x80000000;
+pub const FF_DONTCARE: DWORD = 0 << 4;
+pub const FF_ROMAN: DWORD = 1 << 4;
+pub const FF_SWISS: DWORD = 2 << 4;
+pub const FF_MODERN: DWORD = 3 << 4;
+pub const FF_SCRIPT: DWORD = 4 << 4;
+pub const FF_DECORATIVE: DWORD = 5 << 4;
+pub const FW_DONTCARE: c_int = 0;
+pub const FW_THIN: c_int = 100;
+pub const FW_EXTRALIGHT: c_int = 200;
+pub const FW_LIGHT: c_int = 300;
+pub const FW_NORMAL: c_int = 400;
+pub const FW_MEDIUM: c_int = 500;
+pub const FW_SEMIBOLD: c_int = 600;
+pub const FW_BOLD: c_int = 700;
+pub const FW_EXTRABOLD: c_int = 800;
+pub const FW_HEAVY: c_int = 900;
+pub const FW_ULTRALIGHT: c_int = FW_EXTRALIGHT;
+pub const FW_REGULAR: c_int = FW_NORMAL;
+pub const FW_DEMIBOLD: c_int = FW_SEMIBOLD;
+pub const FW_ULTRABOLD: c_int = FW_EXTRABOLD;
+pub const FW_BLACK: c_int = FW_HEAVY;
+pub const PANOSE_COUNT: DWORD = 10;
+pub const PAN_FAMILYTYPE_INDEX: DWORD = 0;
+pub const PAN_SERIFSTYLE_INDEX: DWORD = 1;
+pub const PAN_WEIGHT_INDEX: DWORD = 2;
+pub const PAN_PROPORTION_INDEX: DWORD = 3;
+pub const PAN_CONTRAST_INDEX: DWORD = 4;
+pub const PAN_STROKEVARIATION_INDEX: DWORD = 5;
+pub const PAN_ARMSTYLE_INDEX: DWORD = 6;
+pub const PAN_LETTERFORM_INDEX: DWORD = 7;
+pub const PAN_MIDLINE_INDEX: DWORD = 8;
+pub const PAN_XHEIGHT_INDEX: DWORD = 9;
+pub const PAN_CULTURE_LATIN: DWORD = 0;
+STRUCT!{struct PANOSE {
+ bFamilyType: BYTE,
+ bSerifStyle: BYTE,
+ bWeight: BYTE,
+ bProportion: BYTE,
+ bContrast: BYTE,
+ bStrokeVariation: BYTE,
+ bArmStyle: BYTE,
+ bLetterform: BYTE,
+ bMidline: BYTE,
+ bXHeight: BYTE,
+}}
+pub type LPPANOSE = *mut PANOSE;
+pub const PAN_ANY: BYTE = 0;
+pub const PAN_NO_FIT: BYTE = 1;
+pub const PAN_FAMILY_TEXT_DISPLAY: BYTE = 2;
+pub const PAN_FAMILY_SCRIPT: BYTE = 3;
+pub const PAN_FAMILY_DECORATIVE: BYTE = 4;
+pub const PAN_FAMILY_PICTORIAL: BYTE = 5;
+pub const PAN_SERIF_COVE: BYTE = 2;
+pub const PAN_SERIF_OBTUSE_COVE: BYTE = 3;
+pub const PAN_SERIF_SQUARE_COVE: BYTE = 4;
+pub const PAN_SERIF_OBTUSE_SQUARE_COVE: BYTE = 5;
+pub const PAN_SERIF_SQUARE: BYTE = 6;
+pub const PAN_SERIF_THIN: BYTE = 7;
+pub const PAN_SERIF_BONE: BYTE = 8;
+pub const PAN_SERIF_EXAGGERATED: BYTE = 9;
+pub const PAN_SERIF_TRIANGLE: BYTE = 10;
+pub const PAN_SERIF_NORMAL_SANS: BYTE = 11;
+pub const PAN_SERIF_OBTUSE_SANS: BYTE = 12;
+pub const PAN_SERIF_PERP_SANS: BYTE = 13;
+pub const PAN_SERIF_FLARED: BYTE = 14;
+pub const PAN_SERIF_ROUNDED: BYTE = 15;
+pub const PAN_WEIGHT_VERY_LIGHT: BYTE = 2;
+pub const PAN_WEIGHT_LIGHT: BYTE = 3;
+pub const PAN_WEIGHT_THIN: BYTE = 4;
+pub const PAN_WEIGHT_BOOK: BYTE = 5;
+pub const PAN_WEIGHT_MEDIUM: BYTE = 6;
+pub const PAN_WEIGHT_DEMI: BYTE = 7;
+pub const PAN_WEIGHT_BOLD: BYTE = 8;
+pub const PAN_WEIGHT_HEAVY: BYTE = 9;
+pub const PAN_WEIGHT_BLACK: BYTE = 10;
+pub const PAN_WEIGHT_NORD: BYTE = 11;
+pub const PAN_PROP_OLD_STYLE: BYTE = 2;
+pub const PAN_PROP_MODERN: BYTE = 3;
+pub const PAN_PROP_EVEN_WIDTH: BYTE = 4;
+pub const PAN_PROP_EXPANDED: BYTE = 5;
+pub const PAN_PROP_CONDENSED: BYTE = 6;
+pub const PAN_PROP_VERY_EXPANDED: BYTE = 7;
+pub const PAN_PROP_VERY_CONDENSED: BYTE = 8;
+pub const PAN_PROP_MONOSPACED: BYTE = 9;
+pub const PAN_CONTRAST_NONE: BYTE = 2;
+pub const PAN_CONTRAST_VERY_LOW: BYTE = 3;
+pub const PAN_CONTRAST_LOW: BYTE = 4;
+pub const PAN_CONTRAST_MEDIUM_LOW: BYTE = 5;
+pub const PAN_CONTRAST_MEDIUM: BYTE = 6;
+pub const PAN_CONTRAST_MEDIUM_HIGH: BYTE = 7;
+pub const PAN_CONTRAST_HIGH: BYTE = 8;
+pub const PAN_CONTRAST_VERY_HIGH: BYTE = 9;
+pub const PAN_STROKE_GRADUAL_DIAG: BYTE = 2;
+pub const PAN_STROKE_GRADUAL_TRAN: BYTE = 3;
+pub const PAN_STROKE_GRADUAL_VERT: BYTE = 4;
+pub const PAN_STROKE_GRADUAL_HORZ: BYTE = 5;
+pub const PAN_STROKE_RAPID_VERT: BYTE = 6;
+pub const PAN_STROKE_RAPID_HORZ: BYTE = 7;
+pub const PAN_STROKE_INSTANT_VERT: BYTE = 8;
+pub const PAN_STRAIGHT_ARMS_HORZ: BYTE = 2;
+pub const PAN_STRAIGHT_ARMS_WEDGE: BYTE = 3;
+pub const PAN_STRAIGHT_ARMS_VERT: BYTE = 4;
+pub const PAN_STRAIGHT_ARMS_SINGLE_SERIF: BYTE = 5;
+pub const PAN_STRAIGHT_ARMS_DOUBLE_SERIF: BYTE = 6;
+pub const PAN_BENT_ARMS_HORZ: BYTE = 7;
+pub const PAN_BENT_ARMS_WEDGE: BYTE = 8;
+pub const PAN_BENT_ARMS_VERT: BYTE = 9;
+pub const PAN_BENT_ARMS_SINGLE_SERIF: BYTE = 10;
+pub const PAN_BENT_ARMS_DOUBLE_SERIF: BYTE = 11;
+pub const PAN_LETT_NORMAL_CONTACT: BYTE = 2;
+pub const PAN_LETT_NORMAL_WEIGHTED: BYTE = 3;
+pub const PAN_LETT_NORMAL_BOXED: BYTE = 4;
+pub const PAN_LETT_NORMAL_FLATTENED: BYTE = 5;
+pub const PAN_LETT_NORMAL_ROUNDED: BYTE = 6;
+pub const PAN_LETT_NORMAL_OFF_CENTER: BYTE = 7;
+pub const PAN_LETT_NORMAL_SQUARE: BYTE = 8;
+pub const PAN_LETT_OBLIQUE_CONTACT: BYTE = 9;
+pub const PAN_LETT_OBLIQUE_WEIGHTED: BYTE = 10;
+pub const PAN_LETT_OBLIQUE_BOXED: BYTE = 11;
+pub const PAN_LETT_OBLIQUE_FLATTENED: BYTE = 12;
+pub const PAN_LETT_OBLIQUE_ROUNDED: BYTE = 13;
+pub const PAN_LETT_OBLIQUE_OFF_CENTER: BYTE = 14;
+pub const PAN_LETT_OBLIQUE_SQUARE: BYTE = 15;
+pub const PAN_MIDLINE_STANDARD_TRIMMED: BYTE = 2;
+pub const PAN_MIDLINE_STANDARD_POINTED: BYTE = 3;
+pub const PAN_MIDLINE_STANDARD_SERIFED: BYTE = 4;
+pub const PAN_MIDLINE_HIGH_TRIMMED: BYTE = 5;
+pub const PAN_MIDLINE_HIGH_POINTED: BYTE = 6;
+pub const PAN_MIDLINE_HIGH_SERIFED: BYTE = 7;
+pub const PAN_MIDLINE_CONSTANT_TRIMMED: BYTE = 8;
+pub const PAN_MIDLINE_CONSTANT_POINTED: BYTE = 9;
+pub const PAN_MIDLINE_CONSTANT_SERIFED: BYTE = 10;
+pub const PAN_MIDLINE_LOW_TRIMMED: BYTE = 11;
+pub const PAN_MIDLINE_LOW_POINTED: BYTE = 12;
+pub const PAN_MIDLINE_LOW_SERIFED: BYTE = 13;
+pub const PAN_XHEIGHT_CONSTANT_SMALL: BYTE = 2;
+pub const PAN_XHEIGHT_CONSTANT_STD: BYTE = 3;
+pub const PAN_XHEIGHT_CONSTANT_LARGE: BYTE = 4;
+pub const PAN_XHEIGHT_DUCKING_SMALL: BYTE = 5;
+pub const PAN_XHEIGHT_DUCKING_STD: BYTE = 6;
+pub const PAN_XHEIGHT_DUCKING_LARGE: BYTE = 7;
+pub const ELF_VENDOR_SIZE: usize = 4;
+STRUCT!{struct EXTLOGFONTA {
+ elfLogFont: LOGFONTA,
+ elfFullName: [BYTE; LF_FULLFACESIZE],
+ elfStyle: [BYTE; LF_FACESIZE],
+ elfVersion: DWORD,
+ elfStyleSize: DWORD,
+ elfMatch: DWORD,
+ elfReserved: DWORD,
+ elfVendorId: [BYTE; ELF_VENDOR_SIZE],
+ elfCulture: DWORD,
+ elfPanose: PANOSE,
+}}
+pub type PEXTLOGFONTA = *mut EXTLOGFONTA;
+pub type NPEXTLOGFONTA = *mut EXTLOGFONTA;
+pub type LPEXTLOGFONTA = *mut EXTLOGFONTA;
+STRUCT!{struct EXTLOGFONTW {
+ elfLogFont: LOGFONTW,
+ elfFullNam: [WCHAR; LF_FULLFACESIZE],
+ elfStyle: [WCHAR; LF_FACESIZE],
+ elfVersion: DWORD,
+ elfStyleSize: DWORD,
+ elfMatch: DWORD,
+ elfReserved: DWORD,
+ elfVendorId: [BYTE; ELF_VENDOR_SIZE],
+ elfCulture: DWORD,
+ elfPanose: PANOSE,
+}}
+pub type PEXTLOGFONTW = *mut EXTLOGFONTW;
+pub type NPEXTLOGFONTW = *mut EXTLOGFONTW;
+pub type LPEXTLOGFONTW = *mut EXTLOGFONTW;
+pub const ELF_VERSION: DWORD = 0;
+pub const ELF_CULTURE_LATIN: DWORD = 0;
+pub const RASTER_FONTTYPE: DWORD = 0x0001;
+pub const DEVICE_FONTTYPE: DWORD = 0x0002;
+pub const TRUETYPE_FONTTYPE: DWORD = 0x0004;
+#[inline]
+pub fn RGB(r: BYTE, g: BYTE, b: BYTE) -> COLORREF {
+ r as COLORREF | ((g as COLORREF) << 8) | ((b as COLORREF) << 16)
+}
+#[inline]
+pub fn PALETTERGB(r: BYTE, g: BYTE, b: BYTE) -> COLORREF {
+ 0x02000000 | RGB(r, g, b)
+}
+#[inline]
+pub fn PALETTEINDEX(i: WORD) -> COLORREF {
+ 0x01000000 | i as DWORD
+}
+pub const PC_RESERVED: DWORD = 0x01;
+pub const PC_EXPLICIT: DWORD = 0x02;
+pub const PC_NOCOLLAPSE: DWORD = 0x04;
+#[inline]
+pub fn GetRValue(rgb: COLORREF) -> BYTE {
+ LOBYTE(rgb as WORD)
+}
+#[inline]
+pub fn GetGValue(rgb: COLORREF) -> BYTE {
+ LOBYTE((rgb as WORD) >> 8)
+}
+#[inline]
+pub fn GetBValue(rgb: COLORREF) -> BYTE {
+ LOBYTE((rgb >> 16) as WORD)
+}
+pub const TRANSPARENT: DWORD = 1;
+pub const OPAQUE: DWORD = 2;
+pub const BKMODE_LAST: DWORD = 2;
+pub const GM_COMPATIBLE: DWORD = 1;
+pub const GM_ADVANCED: DWORD = 2;
+pub const GM_LAST: DWORD = 2;
+pub const PT_CLOSEFIGURE: DWORD = 0x01;
+pub const PT_LINETO: DWORD = 0x02;
+pub const PT_BEZIERTO: DWORD = 0x04;
+pub const PT_MOVETO: DWORD = 0x06;
+pub const MM_TEXT: DWORD = 1;
+pub const MM_LOMETRIC: DWORD = 2;
+pub const MM_HIMETRIC: DWORD = 3;
+pub const MM_LOENGLISH: DWORD = 4;
+pub const MM_HIENGLISH: DWORD = 5;
+pub const MM_TWIPS: DWORD = 6;
+pub const MM_ISOTROPIC: DWORD = 7;
+pub const MM_ANISOTROPIC: DWORD = 8;
+pub const MM_MIN: DWORD = MM_TEXT;
+pub const MM_MAX: DWORD = MM_ANISOTROPIC;
+pub const MM_MAX_FIXEDSCALE: DWORD = MM_TWIPS;
+pub const ABSOLUTE: DWORD = 1;
+pub const RELATIVE: DWORD = 2;
+pub const WHITE_BRUSH: DWORD = 0;
+pub const LTGRAY_BRUSH: DWORD = 1;
+pub const GRAY_BRUSH: DWORD = 2;
+pub const DKGRAY_BRUSH: DWORD = 3;
+pub const BLACK_BRUSH: DWORD = 4;
+pub const NULL_BRUSH: DWORD = 5;
+pub const HOLLOW_BRUSH: DWORD = NULL_BRUSH;
+pub const WHITE_PEN: DWORD = 6;
+pub const BLACK_PEN: DWORD = 7;
+pub const NULL_PEN: DWORD = 8;
+pub const OEM_FIXED_FONT: DWORD = 10;
+pub const ANSI_FIXED_FONT: DWORD = 11;
+pub const ANSI_VAR_FONT: DWORD = 12;
+pub const SYSTEM_FONT: DWORD = 13;
+pub const DEVICE_DEFAULT_FONT: DWORD = 14;
+pub const DEFAULT_PALETTE: DWORD = 15;
+pub const SYSTEM_FIXED_FONT: DWORD = 16;
+pub const DEFAULT_GUI_FONT: DWORD = 17;
+pub const DC_BRUSH: DWORD = 18;
+pub const DC_PEN: DWORD = 19;
+pub const STOCK_LAST: DWORD = 19;
+pub const CLR_INVALID: COLORREF = 0xFFFFFFFF;
+pub const BS_SOLID: DWORD = 0;
+pub const BS_NULL: DWORD = 1;
+pub const BS_HOLLOW: DWORD = BS_NULL;
+pub const BS_HATCHED: DWORD = 2;
+pub const BS_PATTERN: DWORD = 3;
+pub const BS_INDEXED: DWORD = 4;
+pub const BS_DIBPATTERN: DWORD = 5;
+pub const BS_DIBPATTERNPT: DWORD = 6;
+pub const BS_PATTERN8X8: DWORD = 7;
+pub const BS_DIBPATTERN8X8: DWORD = 8;
+pub const BS_MONOPATTERN: DWORD = 9;
+pub const HS_HORIZONTAL: DWORD = 0;
+pub const HS_VERTICAL: DWORD = 1;
+pub const HS_FDIAGONAL: DWORD = 2;
+pub const HS_BDIAGONAL: DWORD = 3;
+pub const HS_CROSS: DWORD = 4;
+pub const HS_DIAGCROSS: DWORD = 5;
+pub const HS_API_MAX: DWORD = 12;
+pub const PS_SOLID: DWORD = 0;
+pub const PS_DASH: DWORD = 1;
+pub const PS_DOT: DWORD = 2;
+pub const PS_DASHDOT: DWORD = 3;
+pub const PS_DASHDOTDOT: DWORD = 4;
+pub const PS_NULL: DWORD = 5;
+pub const PS_INSIDEFRAME: DWORD = 6;
+pub const PS_USERSTYLE: DWORD = 7;
+pub const PS_ALTERNATE: DWORD = 8;
+pub const PS_STYLE_MASK: DWORD = 0x0000000F;
+pub const PS_ENDCAP_ROUND: DWORD = 0x00000000;
+pub const PS_ENDCAP_SQUARE: DWORD = 0x00000100;
+pub const PS_ENDCAP_FLAT: DWORD = 0x00000200;
+pub const PS_ENDCAP_MASK: DWORD = 0x00000F00;
+pub const PS_JOIN_ROUND: DWORD = 0x00000000;
+pub const PS_JOIN_BEVEL: DWORD = 0x00001000;
+pub const PS_JOIN_MITER: DWORD = 0x00002000;
+pub const PS_JOIN_MASK: DWORD = 0x0000F000;
+pub const PS_COSMETIC: DWORD = 0x00000000;
+pub const PS_GEOMETRIC: DWORD = 0x00010000;
+pub const PS_TYPE_MASK: DWORD = 0x000F0000;
+pub const AD_COUNTERCLOCKWISE: DWORD = 1;
+pub const AD_CLOCKWISE: DWORD = 2;
+pub const DRIVERVERSION: c_int = 0;
+pub const TECHNOLOGY: c_int = 2;
+pub const HORZSIZE: c_int = 4;
+pub const VERTSIZE: c_int = 6;
+pub const HORZRES: c_int = 8;
+pub const VERTRES: c_int = 10;
+pub const BITSPIXEL: c_int = 12;
+pub const PLANES: c_int = 14;
+pub const NUMBRUSHES: c_int = 16;
+pub const NUMPENS: c_int = 18;
+pub const NUMMARKERS: c_int = 20;
+pub const NUMFONTS: c_int = 22;
+pub const NUMCOLORS: c_int = 24;
+pub const PDEVICESIZE: c_int = 26;
+pub const CURVECAPS: c_int = 28;
+pub const LINECAPS: c_int = 30;
+pub const POLYGONALCAPS: c_int = 32;
+pub const TEXTCAPS: c_int = 34;
+pub const CLIPCAPS: c_int = 36;
+pub const RASTERCAPS: c_int = 38;
+pub const ASPECTX: c_int = 40;
+pub const ASPECTY: c_int = 42;
+pub const ASPECTXY: c_int = 44;
+pub const LOGPIXELSX: c_int = 88;
+pub const LOGPIXELSY: c_int = 90;
+pub const SIZEPALETTE: c_int = 104;
+pub const NUMRESERVED: c_int = 106;
+pub const COLORRES: c_int = 108;
+pub const PHYSICALWIDTH: c_int = 110;
+pub const PHYSICALHEIGHT: c_int = 111;
+pub const PHYSICALOFFSETX: c_int = 112;
+pub const PHYSICALOFFSETY: c_int = 113;
+pub const SCALINGFACTORX: c_int = 114;
+pub const SCALINGFACTORY: c_int = 115;
+pub const VREFRESH: c_int = 116;
+pub const DESKTOPVERTRES: c_int = 117;
+pub const DESKTOPHORZRES: c_int = 118;
+pub const BLTALIGNMENT: c_int = 119;
+pub const SHADEBLENDCAPS: c_int = 120;
+pub const COLORMGMTCAPS: c_int = 121;
+pub const DT_PLOTTER: DWORD = 0;
+pub const DT_RASDISPLAY: DWORD = 1;
+pub const DT_RASPRINTER: DWORD = 2;
+pub const DT_RASCAMERA: DWORD = 3;
+pub const DT_CHARSTREAM: DWORD = 4;
+pub const DT_METAFILE: DWORD = 5;
+pub const DT_DISPFILE: DWORD = 6;
+pub const CC_NONE: DWORD = 0;
+pub const CC_CIRCLES: DWORD = 1;
+pub const CC_PIE: DWORD = 2;
+pub const CC_CHORD: DWORD = 4;
+pub const CC_ELLIPSES: DWORD = 8;
+pub const CC_WIDE: DWORD = 16;
+pub const CC_STYLED: DWORD = 32;
+pub const CC_WIDESTYLED: DWORD = 64;
+pub const CC_INTERIORS: DWORD = 128;
+pub const CC_ROUNDRECT: DWORD = 256;
+pub const LC_NONE: DWORD = 0;
+pub const LC_POLYLINE: DWORD = 2;
+pub const LC_MARKER: DWORD = 4;
+pub const LC_POLYMARKER: DWORD = 8;
+pub const LC_WIDE: DWORD = 16;
+pub const LC_STYLED: DWORD = 32;
+pub const LC_WIDESTYLED: DWORD = 64;
+pub const LC_INTERIORS: DWORD = 128;
+pub const PC_NONE: DWORD = 0;
+pub const PC_POLYGON: DWORD = 1;
+pub const PC_RECTANGLE: DWORD = 2;
+pub const PC_WINDPOLYGON: DWORD = 4;
+pub const PC_TRAPEZOID: DWORD = 4;
+pub const PC_SCANLINE: DWORD = 8;
+pub const PC_WIDE: DWORD = 16;
+pub const PC_STYLED: DWORD = 32;
+pub const PC_WIDESTYLED: DWORD = 64;
+pub const PC_INTERIORS: DWORD = 128;
+pub const PC_POLYPOLYGON: DWORD = 256;
+pub const PC_PATHS: DWORD = 512;
+pub const CP_NONE: DWORD = 0;
+pub const CP_RECTANGLE: DWORD = 1;
+pub const CP_REGION: DWORD = 2;
+pub const TC_OP_CHARACTER: DWORD = 0x00000001;
+pub const TC_OP_STROKE: DWORD = 0x00000002;
+pub const TC_CP_STROKE: DWORD = 0x00000004;
+pub const TC_CR_90: DWORD = 0x00000008;
+pub const TC_CR_ANY: DWORD = 0x00000010;
+pub const TC_SF_X_YINDEP: DWORD = 0x00000020;
+pub const TC_SA_DOUBLE: DWORD = 0x00000040;
+pub const TC_SA_INTEGER: DWORD = 0x00000080;
+pub const TC_SA_CONTIN: DWORD = 0x00000100;
+pub const TC_EA_DOUBLE: DWORD = 0x00000200;
+pub const TC_IA_ABLE: DWORD = 0x00000400;
+pub const TC_UA_ABLE: DWORD = 0x00000800;
+pub const TC_SO_ABLE: DWORD = 0x00001000;
+pub const TC_RA_ABLE: DWORD = 0x00002000;
+pub const TC_VA_ABLE: DWORD = 0x00004000;
+pub const TC_RESERVED: DWORD = 0x00008000;
+pub const TC_SCROLLBLT: DWORD = 0x00010000;
+pub const RC_BITBLT: DWORD = 1;
+pub const RC_BANDING: DWORD = 2;
+pub const RC_SCALING: DWORD = 4;
+pub const RC_BITMAP64: DWORD = 8;
+pub const RC_GDI20_OUTPUT: DWORD = 0x0010;
+pub const RC_GDI20_STATE: DWORD = 0x0020;
+pub const RC_SAVEBITMAP: DWORD = 0x0040;
+pub const RC_DI_BITMAP: DWORD = 0x0080;
+pub const RC_PALETTE: DWORD = 0x0100;
+pub const RC_DIBTODEV: DWORD = 0x0200;
+pub const RC_BIGFONT: DWORD = 0x0400;
+pub const RC_STRETCHBLT: DWORD = 0x0800;
+pub const RC_FLOODFILL: DWORD = 0x1000;
+pub const RC_STRETCHDIB: DWORD = 0x2000;
+pub const RC_OP_DX_OUTPUT: DWORD = 0x4000;
+pub const RC_DEVBITS: DWORD = 0x8000;
+pub const SB_NONE: DWORD = 0x00000000;
+pub const SB_CONST_ALPHA: DWORD = 0x00000001;
+pub const SB_PIXEL_ALPHA: DWORD = 0x00000002;
+pub const SB_PREMULT_ALPHA: DWORD = 0x00000004;
+pub const SB_GRAD_RECT: DWORD = 0x00000010;
+pub const SB_GRAD_TRI: DWORD = 0x00000020;
+pub const CM_NONE: DWORD = 0x00000000;
+pub const CM_DEVICE_ICM: DWORD = 0x00000001;
+pub const CM_GAMMA_RAMP: DWORD = 0x00000002;
+pub const CM_CMYK_COLOR: DWORD = 0x00000004;
+pub const DIB_RGB_COLORS: DWORD = 0;
+pub const DIB_PAL_COLORS: DWORD = 1;
+pub const SYSPAL_ERROR: DWORD = 0;
+pub const SYSPAL_STATIC: DWORD = 1;
+pub const SYSPAL_NOSTATIC: DWORD = 2;
+pub const SYSPAL_NOSTATIC256: DWORD = 3;
+pub const CBM_INIT: DWORD = 0x04;
+pub const FLOODFILLBORDER: DWORD = 0;
+pub const FLOODFILLSURFACE: DWORD = 1;
+pub const CCHDEVICENAME: usize = 32;
+pub const CCHFORMNAME: usize = 32;
+STRUCT!{struct DEVMODE_u1_s1 {
+ dmOrientation: c_short,
+ dmPaperSize: c_short,
+ dmPaperLength: c_short,
+ dmPaperWidth: c_short,
+ dmScale: c_short,
+ dmCopies: c_short,
+ dmDefaultSource: c_short,
+ dmPrintQuality: c_short,
+}}
+STRUCT!{struct DEVMODE_u1_s2 {
+ dmPosition: POINTL,
+ dmDisplayOrientation: DWORD,
+ dmDisplayFixedOutput: DWORD,
+}}
+UNION!{union DEVMODE_u1 {
+ [u32; 4],
+ s1 s1_mut: DEVMODE_u1_s1,
+ s2 s2_mut: DEVMODE_u1_s2,
+}}
+UNION!{union DEVMODE_u2 {
+ [u32; 1],
+ dmDisplayFlags dmDisplayFlags_mut: DWORD,
+ dmNup dmNup_mut: DWORD,
+}}
+STRUCT!{struct DEVMODEA {
+ dmDeviceName: [CHAR; CCHDEVICENAME],
+ dmSpecVersion: WORD,
+ dmDriverVersion: WORD,
+ dmSize: WORD,
+ dmDriverExtra: WORD,
+ dmFields: DWORD,
+ u1: DEVMODE_u1,
+ dmColor: c_short,
+ dmDuplex: c_short,
+ dmYResolution: c_short,
+ dmTTOption: c_short,
+ dmCollate: c_short,
+ dmFormName: [CHAR; CCHFORMNAME],
+ dmLogPixels: WORD,
+ dmBitsPerPel: DWORD,
+ dmPelsWidth: DWORD,
+ dmPelsHeight: DWORD,
+ u2: DEVMODE_u2,
+ dmDisplayFrequency: DWORD,
+ dmICMMethod: DWORD,
+ dmICMIntent: DWORD,
+ dmMediaType: DWORD,
+ dmDitherType: DWORD,
+ dmReserved1: DWORD,
+ dmReserved2: DWORD,
+ dmPanningWidth: DWORD,
+ dmPanningHeight: DWORD,
+}}
+pub type PDEVMODEA = *mut DEVMODEA;
+pub type NPDEVMODEA = *mut DEVMODEA;
+pub type LPDEVMODEA = *mut DEVMODEA;
+STRUCT!{struct DEVMODEW {
+ dmDeviceName: [WCHAR; CCHDEVICENAME],
+ dmSpecVersion: WORD,
+ dmDriverVersion: WORD,
+ dmSize: WORD,
+ dmDriverExtra: WORD,
+ dmFields: DWORD,
+ u1: DEVMODE_u1,
+ dmColor: c_short,
+ dmDuplex: c_short,
+ dmYResolution: c_short,
+ dmTTOption: c_short,
+ dmCollate: c_short,
+ dmFormName: [WCHAR; CCHFORMNAME],
+ dmLogPixels: WORD,
+ dmBitsPerPel: DWORD,
+ dmPelsWidth: DWORD,
+ dmPelsHeight: DWORD,
+ u2: DEVMODE_u2,
+ dmDisplayFrequency: DWORD,
+ dmICMMethod: DWORD,
+ dmICMIntent: DWORD,
+ dmMediaType: DWORD,
+ dmDitherType: DWORD,
+ dmReserved1: DWORD,
+ dmReserved2: DWORD,
+ dmPanningWidth: DWORD,
+ dmPanningHeight: DWORD,
+}}
+pub type PDEVMODEW = *mut DEVMODEW;
+pub type NPDEVMODEW = *mut DEVMODEW;
+pub type LPDEVMODEW = *mut DEVMODEW;
+pub const DM_SPECVERSION: DWORD = 0x0401;
+pub const DM_ORIENTATION: DWORD = 0x00000001;
+pub const DM_PAPERSIZE: DWORD = 0x00000002;
+pub const DM_PAPERLENGTH: DWORD = 0x00000004;
+pub const DM_PAPERWIDTH: DWORD = 0x00000008;
+pub const DM_SCALE: DWORD = 0x00000010;
+pub const DM_POSITION: DWORD = 0x00000020;
+pub const DM_NUP: DWORD = 0x00000040;
+pub const DM_DISPLAYORIENTATION: DWORD = 0x00000080;
+pub const DM_COPIES: DWORD = 0x00000100;
+pub const DM_DEFAULTSOURCE: DWORD = 0x00000200;
+pub const DM_PRINTQUALITY: DWORD = 0x00000400;
+pub const DM_COLOR: DWORD = 0x00000800;
+pub const DM_DUPLEX: DWORD = 0x00001000;
+pub const DM_YRESOLUTION: DWORD = 0x00002000;
+pub const DM_TTOPTION: DWORD = 0x00004000;
+pub const DM_COLLATE: DWORD = 0x00008000;
+pub const DM_FORMNAME: DWORD = 0x00010000;
+pub const DM_LOGPIXELS: DWORD = 0x00020000;
+pub const DM_BITSPERPEL: DWORD = 0x00040000;
+pub const DM_PELSWIDTH: DWORD = 0x00080000;
+pub const DM_PELSHEIGHT: DWORD = 0x00100000;
+pub const DM_DISPLAYFLAGS: DWORD = 0x00200000;
+pub const DM_DISPLAYFREQUENCY: DWORD = 0x00400000;
+pub const DM_ICMMETHOD: DWORD = 0x00800000;
+pub const DM_ICMINTENT: DWORD = 0x01000000;
+pub const DM_MEDIATYPE: DWORD = 0x02000000;
+pub const DM_DITHERTYPE: DWORD = 0x04000000;
+pub const DM_PANNINGWIDTH: DWORD = 0x08000000;
+pub const DM_PANNINGHEIGHT: DWORD = 0x10000000;
+pub const DM_DISPLAYFIXEDOUTPUT: DWORD = 0x20000000;
+pub const DMORIENT_PORTRAIT: DWORD = 1;
+pub const DMORIENT_LANDSCAPE: DWORD = 2;
+pub const DMPAPER_FIRST: DWORD = DMPAPER_LETTER;
+pub const DMPAPER_LETTER: DWORD = 1;
+pub const DMPAPER_LETTERSMALL: DWORD = 2;
+pub const DMPAPER_TABLOID: DWORD = 3;
+pub const DMPAPER_LEDGER: DWORD = 4;
+pub const DMPAPER_LEGAL: DWORD = 5;
+pub const DMPAPER_STATEMENT: DWORD = 6;
+pub const DMPAPER_EXECUTIVE: DWORD = 7;
+pub const DMPAPER_A3: DWORD = 8;
+pub const DMPAPER_A4: DWORD = 9;
+pub const DMPAPER_A4SMALL: DWORD = 10;
+pub const DMPAPER_A5: DWORD = 11;
+pub const DMPAPER_B4: DWORD = 12;
+pub const DMPAPER_B5: DWORD = 13;
+pub const DMPAPER_FOLIO: DWORD = 14;
+pub const DMPAPER_QUARTO: DWORD = 15;
+pub const DMPAPER_10X14: DWORD = 16;
+pub const DMPAPER_11X17: DWORD = 17;
+pub const DMPAPER_NOTE: DWORD = 18;
+pub const DMPAPER_ENV_9: DWORD = 19;
+pub const DMPAPER_ENV_10: DWORD = 20;
+pub const DMPAPER_ENV_11: DWORD = 21;
+pub const DMPAPER_ENV_12: DWORD = 22;
+pub const DMPAPER_ENV_14: DWORD = 23;
+pub const DMPAPER_CSHEET: DWORD = 24;
+pub const DMPAPER_DSHEET: DWORD = 25;
+pub const DMPAPER_ESHEET: DWORD = 26;
+pub const DMPAPER_ENV_DL: DWORD = 27;
+pub const DMPAPER_ENV_C5: DWORD = 28;
+pub const DMPAPER_ENV_C3: DWORD = 29;
+pub const DMPAPER_ENV_C4: DWORD = 30;
+pub const DMPAPER_ENV_C6: DWORD = 31;
+pub const DMPAPER_ENV_C65: DWORD = 32;
+pub const DMPAPER_ENV_B4: DWORD = 33;
+pub const DMPAPER_ENV_B5: DWORD = 34;
+pub const DMPAPER_ENV_B6: DWORD = 35;
+pub const DMPAPER_ENV_ITALY: DWORD = 36;
+pub const DMPAPER_ENV_MONARCH: DWORD = 37;
+pub const DMPAPER_ENV_PERSONAL: DWORD = 38;
+pub const DMPAPER_FANFOLD_US: DWORD = 39;
+pub const DMPAPER_FANFOLD_STD_GERMAN: DWORD = 40;
+pub const DMPAPER_FANFOLD_LGL_GERMAN: DWORD = 41;
+pub const DMPAPER_ISO_B4: DWORD = 42;
+pub const DMPAPER_JAPANESE_POSTCARD: DWORD = 43;
+pub const DMPAPER_9X11: DWORD = 44;
+pub const DMPAPER_10X11: DWORD = 45;
+pub const DMPAPER_15X11: DWORD = 46;
+pub const DMPAPER_ENV_INVITE: DWORD = 47;
+pub const DMPAPER_RESERVED_48: DWORD = 48;
+pub const DMPAPER_RESERVED_49: DWORD = 49;
+pub const DMPAPER_LETTER_EXTRA: DWORD = 50;
+pub const DMPAPER_LEGAL_EXTRA: DWORD = 51;
+pub const DMPAPER_TABLOID_EXTRA: DWORD = 52;
+pub const DMPAPER_A4_EXTRA: DWORD = 53;
+pub const DMPAPER_LETTER_TRANSVERSE: DWORD = 54;
+pub const DMPAPER_A4_TRANSVERSE: DWORD = 55;
+pub const DMPAPER_LETTER_EXTRA_TRANSVERSE: DWORD = 56;
+pub const DMPAPER_A_PLUS: DWORD = 57;
+pub const DMPAPER_B_PLUS: DWORD = 58;
+pub const DMPAPER_LETTER_PLUS: DWORD = 59;
+pub const DMPAPER_A4_PLUS: DWORD = 60;
+pub const DMPAPER_A5_TRANSVERSE: DWORD = 61;
+pub const DMPAPER_B5_TRANSVERSE: DWORD = 62;
+pub const DMPAPER_A3_EXTRA: DWORD = 63;
+pub const DMPAPER_A5_EXTRA: DWORD = 64;
+pub const DMPAPER_B5_EXTRA: DWORD = 65;
+pub const DMPAPER_A2: DWORD = 66;
+pub const DMPAPER_A3_TRANSVERSE: DWORD = 67;
+pub const DMPAPER_A3_EXTRA_TRANSVERSE: DWORD = 68;
+pub const DMPAPER_DBL_JAPANESE_POSTCARD: DWORD = 69;
+pub const DMPAPER_A6: DWORD = 70;
+pub const DMPAPER_JENV_KAKU2: DWORD = 71;
+pub const DMPAPER_JENV_KAKU3: DWORD = 72;
+pub const DMPAPER_JENV_CHOU3: DWORD = 73;
+pub const DMPAPER_JENV_CHOU4: DWORD = 74;
+pub const DMPAPER_LETTER_ROTATED: DWORD = 75;
+pub const DMPAPER_A3_ROTATED: DWORD = 76;
+pub const DMPAPER_A4_ROTATED: DWORD = 77;
+pub const DMPAPER_A5_ROTATED: DWORD = 78;
+pub const DMPAPER_B4_JIS_ROTATED: DWORD = 79;
+pub const DMPAPER_B5_JIS_ROTATED: DWORD = 80;
+pub const DMPAPER_JAPANESE_POSTCARD_ROTATED: DWORD = 81;
+pub const DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED: DWORD = 82;
+pub const DMPAPER_A6_ROTATED: DWORD = 83;
+pub const DMPAPER_JENV_KAKU2_ROTATED: DWORD = 84;
+pub const DMPAPER_JENV_KAKU3_ROTATED: DWORD = 85;
+pub const DMPAPER_JENV_CHOU3_ROTATED: DWORD = 86;
+pub const DMPAPER_JENV_CHOU4_ROTATED: DWORD = 87;
+pub const DMPAPER_B6_JIS: DWORD = 88;
+pub const DMPAPER_B6_JIS_ROTATED: DWORD = 89;
+pub const DMPAPER_12X11: DWORD = 90;
+pub const DMPAPER_JENV_YOU4: DWORD = 91;
+pub const DMPAPER_JENV_YOU4_ROTATED: DWORD = 92;
+pub const DMPAPER_P16K: DWORD = 93;
+pub const DMPAPER_P32K: DWORD = 94;
+pub const DMPAPER_P32KBIG: DWORD = 95;
+pub const DMPAPER_PENV_1: DWORD = 96;
+pub const DMPAPER_PENV_2: DWORD = 97;
+pub const DMPAPER_PENV_3: DWORD = 98;
+pub const DMPAPER_PENV_4: DWORD = 99;
+pub const DMPAPER_PENV_5: DWORD = 100;
+pub const DMPAPER_PENV_6: DWORD = 101;
+pub const DMPAPER_PENV_7: DWORD = 102;
+pub const DMPAPER_PENV_8: DWORD = 103;
+pub const DMPAPER_PENV_9: DWORD = 104;
+pub const DMPAPER_PENV_10: DWORD = 105;
+pub const DMPAPER_P16K_ROTATED: DWORD = 106;
+pub const DMPAPER_P32K_ROTATED: DWORD = 107;
+pub const DMPAPER_P32KBIG_ROTATED: DWORD = 108;
+pub const DMPAPER_PENV_1_ROTATED: DWORD = 109;
+pub const DMPAPER_PENV_2_ROTATED: DWORD = 110;
+pub const DMPAPER_PENV_3_ROTATED: DWORD = 111;
+pub const DMPAPER_PENV_4_ROTATED: DWORD = 112;
+pub const DMPAPER_PENV_5_ROTATED: DWORD = 113;
+pub const DMPAPER_PENV_6_ROTATED: DWORD = 114;
+pub const DMPAPER_PENV_7_ROTATED: DWORD = 115;
+pub const DMPAPER_PENV_8_ROTATED: DWORD = 116;
+pub const DMPAPER_PENV_9_ROTATED: DWORD = 117;
+pub const DMPAPER_PENV_10_ROTATED: DWORD = 118;
+pub const DMPAPER_LAST: DWORD = DMPAPER_PENV_10_ROTATED;
+pub const DMPAPER_USER: DWORD = 256;
+pub const DMBIN_FIRST: DWORD = DMBIN_UPPER;
+pub const DMBIN_UPPER: DWORD = 1;
+pub const DMBIN_ONLYONE: DWORD = 1;
+pub const DMBIN_LOWER: DWORD = 2;
+pub const DMBIN_MIDDLE: DWORD = 3;
+pub const DMBIN_MANUAL: DWORD = 4;
+pub const DMBIN_ENVELOPE: DWORD = 5;
+pub const DMBIN_ENVMANUAL: DWORD = 6;
+pub const DMBIN_AUTO: DWORD = 7;
+pub const DMBIN_TRACTOR: DWORD = 8;
+pub const DMBIN_SMALLFMT: DWORD = 9;
+pub const DMBIN_LARGEFMT: DWORD = 10;
+pub const DMBIN_LARGECAPACITY: DWORD = 11;
+pub const DMBIN_CASSETTE: DWORD = 14;
+pub const DMBIN_FORMSOURCE: DWORD = 15;
+pub const DMBIN_LAST: DWORD = DMBIN_FORMSOURCE;
+pub const DMBIN_USER: DWORD = 256;
+pub const DMRES_DRAFT: c_int = -1;
+pub const DMRES_LOW: c_int = -2;
+pub const DMRES_MEDIUM: c_int = -3;
+pub const DMRES_HIGH: c_int = -4;
+pub const DMCOLOR_MONOCHROME: DWORD = 1;
+pub const DMCOLOR_COLOR: DWORD = 2;
+pub const DMDUP_SIMPLEX: DWORD = 1;
+pub const DMDUP_VERTICAL: DWORD = 2;
+pub const DMDUP_HORIZONTAL: DWORD = 3;
+pub const DMTT_BITMAP: DWORD = 1;
+pub const DMTT_DOWNLOAD: DWORD = 2;
+pub const DMTT_SUBDEV: DWORD = 3;
+pub const DMTT_DOWNLOAD_OUTLINE: DWORD = 4;
+pub const DMCOLLATE_FALSE: DWORD = 0;
+pub const DMCOLLATE_TRUE: DWORD = 1;
+pub const DMDO_DEFAULT: DWORD = 0;
+pub const DMDO_90: DWORD = 1;
+pub const DMDO_180: DWORD = 2;
+pub const DMDO_270: DWORD = 3;
+pub const DMDFO_DEFAULT: DWORD = 0;
+pub const DMDFO_STRETCH: DWORD = 1;
+pub const DMDFO_CENTER: DWORD = 2;
+pub const DM_INTERLACED: DWORD = 0x00000002;
+pub const DMDISPLAYFLAGS_TEXTMODE: DWORD = 0x00000004;
+pub const DMNUP_SYSTEM: DWORD = 1;
+pub const DMNUP_ONEUP: DWORD = 2;
+pub const DMICMMETHOD_NONE: DWORD = 1;
+pub const DMICMMETHOD_SYSTEM: DWORD = 2;
+pub const DMICMMETHOD_DRIVER: DWORD = 3;
+pub const DMICMMETHOD_DEVICE: DWORD = 4;
+pub const DMICMMETHOD_USER: DWORD = 256;
+pub const DMICM_SATURATE: DWORD = 1;
+pub const DMICM_CONTRAST: DWORD = 2;
+pub const DMICM_COLORIMETRIC: DWORD = 3;
+pub const DMICM_ABS_COLORIMETRIC: DWORD = 4;
+pub const DMICM_USER: DWORD = 256;
+pub const DMMEDIA_STANDARD: DWORD = 1;
+pub const DMMEDIA_TRANSPARENCY: DWORD = 2;
+pub const DMMEDIA_GLOSSY: DWORD = 3;
+pub const DMMEDIA_USER: DWORD = 256;
+pub const DMDITHER_NONE: DWORD = 1;
+pub const DMDITHER_COARSE: DWORD = 2;
+pub const DMDITHER_FINE: DWORD = 3;
+pub const DMDITHER_LINEART: DWORD = 4;
+pub const DMDITHER_ERRORDIFFUSION: DWORD = 5;
+pub const DMDITHER_RESERVED6: DWORD = 6;
+pub const DMDITHER_RESERVED7: DWORD = 7;
+pub const DMDITHER_RESERVED8: DWORD = 8;
+pub const DMDITHER_RESERVED9: DWORD = 9;
+pub const DMDITHER_GRAYSCALE: DWORD = 10;
+pub const DMDITHER_USER: DWORD = 256;
+STRUCT!{struct DISPLAY_DEVICEA {
+ cb: DWORD,
+ DeviceName: [CHAR; 32],
+ DeviceString: [CHAR; 128],
+ StateFlags: DWORD,
+ DeviceID: [CHAR; 128],
+ DeviceKey: [CHAR; 128],
+}}
+pub type PDISPLAY_DEVICEA = *mut DISPLAY_DEVICEA;
+pub type LPDISPLAY_DEVICEA = *mut DISPLAY_DEVICEA;
+STRUCT!{struct DISPLAY_DEVICEW {
+ cb: DWORD,
+ DeviceName: [WCHAR; 32],
+ DeviceString: [WCHAR; 128],
+ StateFlags: DWORD,
+ DeviceID: [WCHAR; 128],
+ DeviceKey: [WCHAR; 128],
+}}
+pub type PDISPLAY_DEVICEW = *mut DISPLAY_DEVICEW;
+pub type LPDISPLAY_DEVICEW = *mut DISPLAY_DEVICEW;
+pub const DISPLAY_DEVICE_ATTACHED_TO_DESKTOP: DWORD = 0x00000001;
+pub const DISPLAY_DEVICE_MULTI_DRIVER: DWORD = 0x00000002;
+pub const DISPLAY_DEVICE_PRIMARY_DEVICE: DWORD = 0x00000004;
+pub const DISPLAY_DEVICE_MIRRORING_DRIVER: DWORD = 0x00000008;
+pub const DISPLAY_DEVICE_VGA_COMPATIBLE: DWORD = 0x00000010;
+pub const DISPLAY_DEVICE_REMOVABLE: DWORD = 0x00000020;
+pub const DISPLAY_DEVICE_ACC_DRIVER: DWORD = 0x00000040;
+pub const DISPLAY_DEVICE_MODESPRUNED: DWORD = 0x08000000;
+pub const DISPLAY_DEVICE_RDPUDD: DWORD = 0x01000000;
+pub const DISPLAY_DEVICE_REMOTE: DWORD = 0x04000000;
+pub const DISPLAY_DEVICE_DISCONNECT: DWORD = 0x02000000;
+pub const DISPLAY_DEVICE_TS_COMPATIBLE: DWORD = 0x00200000;
+pub const DISPLAY_DEVICE_UNSAFE_MODES_ON: DWORD = 0x00080000;
+pub const DISPLAY_DEVICE_ACTIVE: DWORD = 0x00000001;
+pub const DISPLAY_DEVICE_ATTACHED: DWORD = 0x00000002;
+pub const DISPLAYCONFIG_MAXPATH: usize = 1024;
+STRUCT!{struct DISPLAYCONFIG_RATIONAL {
+ Numerator: UINT32,
+ Denominator: UINT32,
+}}
+ENUM!{enum DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY {
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_OTHER = -1i32 as u32,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HD15 = 0,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SVIDEO = 1,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPOSITE_VIDEO = 2,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPONENT_VIDEO = 3,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DVI = 4,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HDMI = 5,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_LVDS = 6,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_D_JPN = 8,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDI = 9,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EXTERNAL = 10,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED = 11,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EXTERNAL = 12,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EMBEDDED = 13,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDTVDONGLE = 14,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_MIRACAST = 15,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INDIRECT_WIRED = 16,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL = 0x80000000,
+ DISPLAYCONFIG_OUTPUT_TECHNOLOGY_FORCE_UINT32 = 0xFFFFFFFF,
+}}
+ENUM!{enum DISPLAYCONFIG_SCANLINE_ORDERING {
+ DISPLAYCONFIG_SCANLINE_ORDERING_UNSPECIFIED = 0,
+ DISPLAYCONFIG_SCANLINE_ORDERING_PROGRESSIVE = 1,
+ DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED = 2,
+ DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED_UPPERFIELDFIRST =
+ DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED,
+ DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED_LOWERFIELDFIRST = 3,
+ DISPLAYCONFIG_SCANLINE_ORDERING_FORCE_UINT32 = 0xFFFFFFFF,
+}}
+STRUCT!{struct DISPLAYCONFIG_2DREGION {
+ cx: UINT32,
+ cy: UINT32,
+}}
+STRUCT!{struct DISPLAYCONFIG_VIDEO_SIGNAL_INFO_AdditionalSignalInfo {
+ bitfield: UINT32,
+}}
+BITFIELD!{DISPLAYCONFIG_VIDEO_SIGNAL_INFO_AdditionalSignalInfo bitfield: UINT32 [
+ videoStandard set_videoStandard[0..16],
+ vSyncFreqDivider set_vSyncFreqDivider[16..22],
+]}
+UNION!{union DISPLAYCONFIG_VIDEO_SIGNAL_INFO_u {
+ [u32; 1],
+ AdditionalSignalInfo AdditionalSignalInfo_mut:
+ DISPLAYCONFIG_VIDEO_SIGNAL_INFO_AdditionalSignalInfo,
+ videoStandard videoStandard_mut: UINT32,
+}}
+STRUCT!{struct DISPLAYCONFIG_VIDEO_SIGNAL_INFO {
+ pixelRate: UINT64,
+ hSyncFreq: DISPLAYCONFIG_RATIONAL,
+ vSyncFreq: DISPLAYCONFIG_RATIONAL,
+ activeSize: DISPLAYCONFIG_2DREGION,
+ totalSize: DISPLAYCONFIG_2DREGION,
+ u: DISPLAYCONFIG_VIDEO_SIGNAL_INFO_u,
+ scanLineOrdering: DISPLAYCONFIG_SCANLINE_ORDERING,
+}}
+ENUM!{enum DISPLAYCONFIG_SCALING {
+ DISPLAYCONFIG_SCALING_IDENTITY = 1,
+ DISPLAYCONFIG_SCALING_CENTERED = 2,
+ DISPLAYCONFIG_SCALING_STRETCHED = 3,
+ DISPLAYCONFIG_SCALING_ASPECTRATIOCENTEREDMAX = 4,
+ DISPLAYCONFIG_SCALING_CUSTOM = 5,
+ DISPLAYCONFIG_SCALING_PREFERRED = 128,
+ DISPLAYCONFIG_SCALING_FORCE_UINT32 = 0xFFFFFFFF,
+}}
+ENUM!{enum DISPLAYCONFIG_ROTATION {
+ DISPLAYCONFIG_ROTATION_IDENTITY = 1,
+ DISPLAYCONFIG_ROTATION_ROTATE90 = 2,
+ DISPLAYCONFIG_ROTATION_ROTATE180 = 3,
+ DISPLAYCONFIG_ROTATION_ROTATE270 = 4,
+ DISPLAYCONFIG_ROTATION_FORCE_UINT32 = 0xFFFFFFFF,
+}}
+ENUM!{enum DISPLAYCONFIG_MODE_INFO_TYPE {
+ DISPLAYCONFIG_MODE_INFO_TYPE_SOURCE = 1,
+ DISPLAYCONFIG_MODE_INFO_TYPE_TARGET = 2,
+ DISPLAYCONFIG_MODE_INFO_TYPE_DESKTOP_IMAGE = 3,
+ DISPLAYCONFIG_MODE_INFO_TYPE_FORCE_UINT32 = 0xFFFFFFFF,
+}}
+ENUM!{enum DISPLAYCONFIG_PIXELFORMAT {
+ DISPLAYCONFIG_PIXELFORMAT_8BPP = 1,
+ DISPLAYCONFIG_PIXELFORMAT_16BPP = 2,
+ DISPLAYCONFIG_PIXELFORMAT_24BPP = 3,
+ DISPLAYCONFIG_PIXELFORMAT_32BPP = 4,
+ DISPLAYCONFIG_PIXELFORMAT_NONGDI = 5,
+ DISPLAYCONFIG_PIXELFORMAT_FORCE_UINT32 = 0xffffffff,
+}}
+STRUCT!{struct DISPLAYCONFIG_SOURCE_MODE {
+ width: UINT32,
+ height: UINT32,
+ pixelFormat: DISPLAYCONFIG_PIXELFORMAT,
+ position: POINTL,
+}}
+STRUCT!{struct DISPLAYCONFIG_TARGET_MODE {
+ targetVideoSignalInfo: DISPLAYCONFIG_VIDEO_SIGNAL_INFO,
+}}
+STRUCT!{struct DISPLAYCONFIG_DESKTOP_IMAGE_INFO {
+ PathSourceSize: POINTL,
+ DesktopImageRegion: RECTL,
+ DesktopImageClip: RECTL,
+}}
+UNION!{union DISPLAYCONFIG_MODE_INFO_u {
+ [u64; 6],
+ targetMode targetMode_mut: DISPLAYCONFIG_TARGET_MODE,
+ sourceMode sourceMode_mut: DISPLAYCONFIG_SOURCE_MODE,
+ desktopImageInfo desktopImageInfo_mut: DISPLAYCONFIG_DESKTOP_IMAGE_INFO,
+}}
+STRUCT!{struct DISPLAYCONFIG_MODE_INFO {
+ infoType: DISPLAYCONFIG_MODE_INFO_TYPE,
+ id: UINT32,
+ adapterId: LUID,
+ u: DISPLAYCONFIG_MODE_INFO_u,
+}}
+pub const DISPLAYCONFIG_PATH_MODE_IDX_INVALID: DWORD = 0xffffffff;
+pub const DISPLAYCONFIG_PATH_TARGET_MODE_IDX_INVALID: DWORD = 0xffff;
+pub const DISPLAYCONFIG_PATH_DESKTOP_IMAGE_IDX_INVALID: DWORD = 0xffff;
+pub const DISPLAYCONFIG_PATH_SOURCE_MODE_IDX_INVALID: DWORD = 0xffff;
+pub const DISPLAYCONFIG_PATH_CLONE_GROUP_INVALID: DWORD = 0xffff;
+STRUCT!{struct DISPLAYCONFIG_PATH_SOURCE_INFO {
+ adapterId: LUID,
+ id: UINT32,
+ modeInfoIdx: UINT32,
+ statusFlags: UINT32,
+}}
+BITFIELD!{DISPLAYCONFIG_PATH_SOURCE_INFO modeInfoIdx: UINT32 [
+ cloneGroupId set_cloneGroupId[0..16],
+ sourceModeInfoIdx set_sourceModeInfoIdx[16..32],
+]}
+pub const DISPLAYCONFIG_SOURCE_IN_USE: DWORD = 0x00000001;
+STRUCT!{struct DISPLAYCONFIG_PATH_TARGET_INFO {
+ adapterId: LUID,
+ id: UINT32,
+ modeInfoIdx: UINT32,
+ outputTechnology: DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY,
+ rotation: DISPLAYCONFIG_ROTATION,
+ scaling: DISPLAYCONFIG_SCALING,
+ refreshRate: DISPLAYCONFIG_RATIONAL,
+ scanLineOrdering: DISPLAYCONFIG_SCANLINE_ORDERING,
+ targetAvailable: BOOL,
+ statusFlags: UINT32,
+}}
+BITFIELD!{DISPLAYCONFIG_PATH_TARGET_INFO modeInfoIdx: UINT32 [
+ desktopModeInfoIdx set_desktopModeInfoIdx[0..16],
+ targetModeInfoIdx set_targetModeInfoIdx[16..32],
+]}
+pub const DISPLAYCONFIG_TARGET_IN_USE: DWORD = 0x00000001;
+pub const DISPLAYCONFIG_TARGET_FORCIBLE: DWORD = 0x00000002;
+pub const DISPLAYCONFIG_TARGET_FORCED_AVAILABILITY_BOOT: DWORD = 0x00000004;
+pub const DISPLAYCONFIG_TARGET_FORCED_AVAILABILITY_PATH: DWORD = 0x00000008;
+pub const DISPLAYCONFIG_TARGET_FORCED_AVAILABILITY_SYSTEM: DWORD = 0x00000010;
+pub const DISPLAYCONFIG_TARGET_IS_HMD: DWORD = 0x00000020;
+STRUCT!{struct DISPLAYCONFIG_PATH_INFO {
+ sourceInfo: DISPLAYCONFIG_PATH_SOURCE_INFO,
+ targetInfo: DISPLAYCONFIG_PATH_TARGET_INFO,
+ flags: UINT32,
+}}
+pub const DISPLAYCONFIG_PATH_ACTIVE: DWORD = 0x00000001;
+pub const DISPLAYCONFIG_PATH_PREFERRED_UNSCALED: DWORD = 0x00000004;
+pub const DISPLAYCONFIG_PATH_SUPPORT_VIRTUAL_MODE: DWORD = 0x00000008;
+pub const DISPLAYCONFIG_PATH_VALID_FLAGS: DWORD = 0x0000000D;
+ENUM!{enum DISPLAYCONFIG_TOPOLOGY_ID {
+ DISPLAYCONFIG_TOPOLOGY_INTERNAL = 0x00000001,
+ DISPLAYCONFIG_TOPOLOGY_CLONE = 0x00000002,
+ DISPLAYCONFIG_TOPOLOGY_EXTEND = 0x00000004,
+ DISPLAYCONFIG_TOPOLOGY_EXTERNAL = 0x00000008,
+ DISPLAYCONFIG_TOPOLOGY_FORCE_UINT32 = 0xFFFFFFFF,
+}}
+ENUM!{enum DISPLAYCONFIG_DEVICE_INFO_TYPE {
+ DISPLAYCONFIG_DEVICE_INFO_GET_SOURCE_NAME = 1,
+ DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME = 2,
+ DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_PREFERRED_MODE = 3,
+ DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME = 4,
+ DISPLAYCONFIG_DEVICE_INFO_SET_TARGET_PERSISTENCE = 5,
+ DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_BASE_TYPE = 6,
+ DISPLAYCONFIG_DEVICE_INFO_GET_SUPPORT_VIRTUAL_RESOLUTION = 7,
+ DISPLAYCONFIG_DEVICE_INFO_SET_SUPPORT_VIRTUAL_RESOLUTION = 8,
+ DISPLAYCONFIG_DEVICE_INFO_GET_ADVANCED_COLOR_INFO = 9,
+ DISPLAYCONFIG_DEVICE_INFO_SET_ADVANCED_COLOR_STATE = 10,
+ DISPLAYCONFIG_DEVICE_INFO_FORCE_UINT32 = 0xFFFFFFFF,
+}}
+STRUCT!{struct DISPLAYCONFIG_DEVICE_INFO_HEADER {
+ _type: DISPLAYCONFIG_DEVICE_INFO_TYPE,
+ size: UINT32,
+ adapterId: LUID,
+ id: UINT32,
+}}
+STRUCT!{struct DISPLAYCONFIG_SOURCE_DEVICE_NAME {
+ header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
+ viewGdiDeviceName: [WCHAR; CCHDEVICENAME],
+}}
+STRUCT!{struct DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS {
+ value: UINT32,
+}}
+BITFIELD!{DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS value: UINT32 [
+ friendlyNameFromEdid set_friendlyNameFromEdid[0..1],
+ friendlyNameForced set_friendlyNameForced[1..2],
+ edidIdsValid set_edidIdsValid[2..3],
+]}
+STRUCT!{struct DISPLAYCONFIG_TARGET_DEVICE_NAME {
+ header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
+ flags: DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS,
+ outputTechnology: DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY,
+ edidManufactureId: UINT16,
+ edidProductCodeId: UINT16,
+ connectorInstance: UINT32,
+ monitorFriendlyDeviceName: [WCHAR; 64],
+ monitorDevicePath: [WCHAR; 128],
+}}
+STRUCT!{struct DISPLAYCONFIG_TARGET_PREFERRED_MODE {
+ header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
+ width: UINT32,
+ height: UINT32,
+ targetMode: DISPLAYCONFIG_TARGET_MODE,
+}}
+STRUCT!{struct DISPLAYCONFIG_ADAPTER_NAME {
+ header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
+ adapterDevicePath: [WCHAR; 128],
+}}
+STRUCT!{struct DISPLAYCONFIG_TARGET_BASE_TYPE {
+ header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
+ baseOutputTechnology: DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY,
+}}
+STRUCT!{struct DISPLAYCONFIG_SET_TARGET_PERSISTENCE {
+ header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
+ value: UINT32,
+}}
+BITFIELD!{DISPLAYCONFIG_SET_TARGET_PERSISTENCE value: UINT32 [
+ bootPersistenceOn set_bootPersistenceOn[0..1],
+]}
+STRUCT!{struct DISPLAYCONFIG_SUPPORT_VIRTUAL_RESOLUTION {
+ header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
+ value: UINT32,
+}}
+BITFIELD!{DISPLAYCONFIG_SUPPORT_VIRTUAL_RESOLUTION value: UINT32 [
+ disableMonitorVirtualResolution set_disableMonitorVirtualResolution[0..1],
+]}
+ENUM!{enum DISPLAYCONFIG_COLOR_ENCODING {
+ DISPLAYCONFIG_COLOR_ENCODING_RGB = 0,
+ DISPLAYCONFIG_COLOR_ENCODING_YCBCR444 = 1,
+ DISPLAYCONFIG_COLOR_ENCODING_YCBCR422 = 2,
+ DISPLAYCONFIG_COLOR_ENCODING_YCBCR420 = 3,
+ DISPLAYCONFIG_COLOR_ENCODING_INTENSITY = 4,
+ DISPLAYCONFIG_COLOR_ENCODING_FORCE_UINT32 = 0xFFFFFFFF,
+}}
+STRUCT!{struct DISPLAYCONFIG_GET_ADVANCED_COLOR_INFO {
+ header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
+ value: UINT32,
+ colorEncoding: DISPLAYCONFIG_COLOR_ENCODING,
+ bitsPerColorChannel: UINT32,
+}}
+BITFIELD!{DISPLAYCONFIG_GET_ADVANCED_COLOR_INFO value: UINT32 [
+ advancedColorSupported set_advancedColorSupported[0..1],
+ advancedColorEnabled set_advancedColorEnabled[1..2],
+ reserved set_reserved[2..32],
+]}
+STRUCT!{struct DISPLAYCONFIG_SET_ADVANCED_COLOR_STATE {
+ header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
+ value: UINT32,
+}}
+BITFIELD!{DISPLAYCONFIG_SET_ADVANCED_COLOR_STATE value: UINT32 [
+ enableAdvancedColor set_enableAdvancedColor[0..1],
+ reserved set_reserved[1..32],
+]}
+pub const QDC_ALL_PATHS: DWORD = 0x00000001;
+pub const QDC_ONLY_ACTIVE_PATHS: DWORD = 0x00000002;
+pub const QDC_DATABASE_CURRENT: DWORD = 0x00000004;
+pub const QDC_VIRTUAL_MODE_AWARE: DWORD = 0x00000010;
+pub const QDC_INCLUDE_HMD: DWORD = 0x00000020;
+pub const SDC_TOPOLOGY_INTERNAL: DWORD = 0x00000001;
+pub const SDC_TOPOLOGY_CLONE: DWORD = 0x00000002;
+pub const SDC_TOPOLOGY_EXTEND: DWORD = 0x00000004;
+pub const SDC_TOPOLOGY_EXTERNAL: DWORD = 0x00000008;
+pub const SDC_TOPOLOGY_SUPPLIED: DWORD = 0x00000010;
+pub const SDC_USE_DATABASE_CURRENT: DWORD = SDC_TOPOLOGY_INTERNAL | SDC_TOPOLOGY_CLONE
+ | SDC_TOPOLOGY_EXTEND | SDC_TOPOLOGY_EXTERNAL;
+pub const SDC_USE_SUPPLIED_DISPLAY_CONFIG: DWORD = 0x00000020;
+pub const SDC_VALIDATE: DWORD = 0x00000040;
+pub const SDC_APPLY: DWORD = 0x00000080;
+pub const SDC_NO_OPTIMIZATION: DWORD = 0x00000100;
+pub const SDC_SAVE_TO_DATABASE: DWORD = 0x00000200;
+pub const SDC_ALLOW_CHANGES: DWORD = 0x00000400;
+pub const SDC_PATH_PERSIST_IF_REQUIRED: DWORD = 0x00000800;
+pub const SDC_FORCE_MODE_ENUMERATION: DWORD = 0x00001000;
+pub const SDC_ALLOW_PATH_ORDER_CHANGES: DWORD = 0x00002000;
+pub const SDC_VIRTUAL_MODE_AWARE: DWORD = 0x00008000;
+pub const RDH_RECTANGLES: DWORD = 1;
+STRUCT!{struct RGNDATAHEADER {
+ dwSize: DWORD,
+ iType: DWORD,
+ nCount: DWORD,
+ nRgnSize: DWORD,
+ rcBound: RECT,
+}}
+pub type PRGNDATAHEADER = *mut RGNDATAHEADER;
+STRUCT!{struct RGNDATA {
+ rdh: RGNDATAHEADER,
+ Buffer: [c_char; 1],
+}}
+pub type PRGNDATA = *mut RGNDATA;
+pub type NPRGNDATA = *mut RGNDATA;
+pub type LPRGNDATA = *mut RGNDATA;
+pub const SYSRGN: INT = 4;
+STRUCT!{struct ABC {
+ abcA: c_int,
+ abcB: UINT,
+ abcC: c_int,
+}}
+pub type PABC = *mut ABC;
+pub type NPABC = *mut ABC;
+pub type LPABC = *mut ABC;
+STRUCT!{struct ABCFLOAT {
+ abcfA: FLOAT,
+ abcfB: FLOAT,
+ abcfC: FLOAT,
+}}
+pub type PABCFLOAT = *mut ABCFLOAT;
+pub type NPABCFLOAT = *mut ABCFLOAT;
+pub type LPABCFLOAT = *mut ABCFLOAT;
+STRUCT!{struct OUTLINETEXTMETRICA {
+ otmSize: UINT,
+ otmTextMetrics: TEXTMETRICA,
+ otmFiller: BYTE,
+ otmPanoseNumber: PANOSE,
+ otmfsSelection: UINT,
+ otmfsType: UINT,
+ otmsCharSlopeRise: c_int,
+ otmsCharSlopeRun: c_int,
+ otmItalicAngle: c_int,
+ otmEMSquare: UINT,
+ otmAscent: c_int,
+ otmDescent: c_int,
+ otmLineGap: UINT,
+ otmsCapEmHeight: UINT,
+ otmsXHeight: UINT,
+ otmrcFontBox: RECT,
+ otmMacAscent: c_int,
+ otmMacDescent: c_int,
+ otmMacLineGap: UINT,
+ otmusMinimumPPEM: UINT,
+ otmptSubscriptSize: POINT,
+ otmptSubscriptOffset: POINT,
+ otmptSuperscriptSize: POINT,
+ otmptSuperscriptOffset: POINT,
+ otmsStrikeoutSize: UINT,
+ otmsStrikeoutPosition: c_int,
+ otmsUnderscoreSize: c_int,
+ otmsUnderscorePosition: c_int,
+ otmpFamilyName: PSTR,
+ otmpFaceName: PSTR,
+ otmpStyleName: PSTR,
+ otmpFullName: PSTR,
+}}
+pub type POUTLINETEXTMETRICA = *mut OUTLINETEXTMETRICA;
+pub type NPOUTLINETEXTMETRICA = *mut OUTLINETEXTMETRICA;
+pub type LPOUTLINETEXTMETRICA = *mut OUTLINETEXTMETRICA;
+STRUCT!{struct OUTLINETEXTMETRICW {
+ otmSize: UINT,
+ otmTextMetrics: TEXTMETRICW,
+ otmFiller: BYTE,
+ otmPanoseNumber: PANOSE,
+ otmfsSelection: UINT,
+ otmfsType: UINT,
+ otmsCharSlopeRise: c_int,
+ otmsCharSlopeRun: c_int,
+ otmItalicAngle: c_int,
+ otmEMSquare: UINT,
+ otmAscent: c_int,
+ otmDescent: c_int,
+ otmLineGap: UINT,
+ otmsCapEmHeight: UINT,
+ otmsXHeight: UINT,
+ otmrcFontBox: RECT,
+ otmMacAscent: c_int,
+ otmMacDescent: c_int,
+ otmMacLineGap: UINT,
+ otmusMinimumPPEM: UINT,
+ otmptSubscriptSize: POINT,
+ otmptSubscriptOffset: POINT,
+ otmptSuperscriptSize: POINT,
+ otmptSuperscriptOffset: POINT,
+ otmsStrikeoutSize: UINT,
+ otmsStrikeoutPosition: c_int,
+ otmsUnderscoreSize: c_int,
+ otmsUnderscorePosition: c_int,
+ otmpFamilyName: PSTR,
+ otmpFaceName: PSTR,
+ otmpStyleName: PSTR,
+ otmpFullName: PSTR,
+}}
+pub type POUTLINETEXTMETRICW = *mut OUTLINETEXTMETRICW;
+pub type NPOUTLINETEXTMETRICW = *mut OUTLINETEXTMETRICW;
+pub type LPOUTLINETEXTMETRICW = *mut OUTLINETEXTMETRICW;
+STRUCT!{struct POLYTEXTA {
+ x: c_int,
+ y: c_int,
+ n: UINT,
+ lpstr: LPCSTR,
+ uiFlags: UINT,
+ rcl: RECT,
+ pdx: *mut c_int,
+}}
+pub type PPOLYTEXTA = *mut POLYTEXTA;
+pub type NPPOLYTEXTA = *mut POLYTEXTA;
+pub type LPPOLYTEXTA = *mut POLYTEXTA;
+STRUCT!{struct POLYTEXTW {
+ x: c_int,
+ y: c_int,
+ n: UINT,
+ lpstr: LPCWSTR,
+ uiFlags: UINT,
+ rcl: RECT,
+ pdx: *mut c_int,
+}}
+pub type PPOLYTEXTW = *mut POLYTEXTW;
+pub type NPPOLYTEXTW = *mut POLYTEXTW;
+pub type LPPOLYTEXTW = *mut POLYTEXTW;
+STRUCT!{struct FIXED {
+ fract: WORD,
+ value: c_short,
+}}
+STRUCT!{struct MAT2 {
+ eM11: FIXED,
+ eM12: FIXED,
+ eM21: FIXED,
+ eM22: FIXED,
+}}
+pub type LPMAT2 = *mut MAT2;
+STRUCT!{struct GLYPHMETRICS {
+ gmBlackBoxX: UINT,
+ gmBlackBoxY: UINT,
+ gmptGlyphOrigin: POINT,
+ gmCellIncX: c_short,
+ gmCellIncY: c_short,
+}}
+pub type LPGLYPHMETRICS = *mut GLYPHMETRICS;
+pub const GGO_METRICS: DWORD = 0;
+pub const GGO_BITMAP: DWORD = 1;
+pub const GGO_NATIVE: DWORD = 2;
+pub const GGO_BEZIER: DWORD = 3;
+pub const GGO_GRAY2_BITMAP: DWORD = 4;
+pub const GGO_GRAY4_BITMAP: DWORD = 5;
+pub const GGO_GRAY8_BITMAP: DWORD = 6;
+pub const GGO_GLYPH_INDEX: DWORD = 0x0080;
+pub const GGO_UNHINTED: DWORD = 0x0100;
+pub const TT_POLYGON_TYPE: DWORD = 24;
+pub const TT_PRIM_LINE: DWORD = 1;
+pub const TT_PRIM_QSPLINE: DWORD = 2;
+pub const TT_PRIM_CSPLINE: DWORD = 3;
+STRUCT!{struct POINTFX {
+ x: FIXED,
+ y: FIXED,
+}}
+pub type LPPOINTFX = *mut POINTFX;
+STRUCT!{struct TTPOLYCURVE {
+ wType: WORD,
+ cpfx: WORD,
+ apfx: [POINTFX; 1],
+}}
+pub type LPTTPOLYCURVE = *mut TTPOLYCURVE;
+STRUCT!{struct TTPOLYGONHEADER {
+ cb: DWORD,
+ dwType: DWORD,
+ pfxStart: POINTFX,
+}}
+pub type LPTTPOLYGONHEADER = *mut TTPOLYGONHEADER;
+pub const GCP_DBCS: DWORD = 0x0001;
+pub const GCP_REORDER: DWORD = 0x0002;
+pub const GCP_USEKERNING: DWORD = 0x0008;
+pub const GCP_GLYPHSHAPE: DWORD = 0x0010;
+pub const GCP_LIGATE: DWORD = 0x0020;
+pub const GCP_DIACRITIC: DWORD = 0x0100;
+pub const GCP_KASHIDA: DWORD = 0x0400;
+pub const GCP_ERROR: DWORD = 0x8000;
+pub const FLI_MASK: DWORD = 0x103B;
+pub const GCP_JUSTIFY: DWORD = 0x00010000;
+pub const FLI_GLYPHS: DWORD = 0x00040000;
+pub const GCP_CLASSIN: DWORD = 0x00080000;
+pub const GCP_MAXEXTENT: DWORD = 0x00100000;
+pub const GCP_JUSTIFYIN: DWORD = 0x00200000;
+pub const GCP_DISPLAYZWG: DWORD = 0x00400000;
+pub const GCP_SYMSWAPOFF: DWORD = 0x00800000;
+pub const GCP_NUMERICOVERRIDE: DWORD = 0x01000000;
+pub const GCP_NEUTRALOVERRIDE: DWORD = 0x02000000;
+pub const GCP_NUMERICSLATIN: DWORD = 0x04000000;
+pub const GCP_NUMERICSLOCAL: DWORD = 0x08000000;
+pub const GCPCLASS_LATIN: DWORD = 1;
+pub const GCPCLASS_HEBREW: DWORD = 2;
+pub const GCPCLASS_ARABIC: DWORD = 2;
+pub const GCPCLASS_NEUTRAL: DWORD = 3;
+pub const GCPCLASS_LOCALNUMBER: DWORD = 4;
+pub const GCPCLASS_LATINNUMBER: DWORD = 5;
+pub const GCPCLASS_LATINNUMERICTERMINATOR: DWORD = 6;
+pub const GCPCLASS_LATINNUMERICSEPARATOR: DWORD = 7;
+pub const GCPCLASS_NUMERICSEPARATOR: DWORD = 8;
+pub const GCPCLASS_PREBOUNDLTR: DWORD = 0x80;
+pub const GCPCLASS_PREBOUNDRTL: DWORD = 0x40;
+pub const GCPCLASS_POSTBOUNDLTR: DWORD = 0x20;
+pub const GCPCLASS_POSTBOUNDRTL: DWORD = 0x10;
+pub const GCPGLYPH_LINKBEFORE: DWORD = 0x8000;
+pub const GCPGLYPH_LINKAFTER: DWORD = 0x4000;
+STRUCT!{struct GCP_RESULTSA {
+ lStructSize: DWORD,
+ lpOutString: LPSTR,
+ lpOrder: *mut UINT,
+ lpDx: *mut c_int,
+ lpCaretPos: *mut c_int,
+ lpClass: LPSTR,
+ lpGlyphs: LPWSTR,
+ nGlyphs: UINT,
+ nMaxFit: c_int,
+}}
+pub type LPGCP_RESULTSA = *mut GCP_RESULTSA;
+STRUCT!{struct GCP_RESULTSW {
+ lStructSize: DWORD,
+ lpOutString: LPWSTR,
+ lpOrder: *mut UINT,
+ lpDx: *mut c_int,
+ lpCaretPos: *mut c_int,
+ lpClass: LPSTR,
+ lpGlyphs: LPWSTR,
+ nGlyphs: UINT,
+ nMaxFit: c_int,
+}}
+pub type LPGCP_RESULTSW = *mut GCP_RESULTSW;
+STRUCT!{struct RASTERIZER_STATUS {
+ nSize: c_short,
+ wFlags: c_short,
+ nLanguageID: c_short,
+}}
+pub type LPRASTERIZER_STATUS = *mut RASTERIZER_STATUS;
+pub const TT_AVAILABLE: DWORD = 0x0001;
+pub const TT_ENABLED: DWORD = 0x0002;
+STRUCT!{struct PIXELFORMATDESCRIPTOR {
+ nSize: WORD,
+ nVersion: WORD,
+ dwFlags: DWORD,
+ iPixelType: BYTE,
+ cColorBits: BYTE,
+ cRedBits: BYTE,
+ cRedShift: BYTE,
+ cGreenBits: BYTE,
+ cGreenShift: BYTE,
+ cBlueBits: BYTE,
+ cBlueShift: BYTE,
+ cAlphaBits: BYTE,
+ cAlphaShift: BYTE,
+ cAccumBits: BYTE,
+ cAccumRedBits: BYTE,
+ cAccumGreenBits: BYTE,
+ cAccumBlueBits: BYTE,
+ cAccumAlphaBits: BYTE,
+ cDepthBits: BYTE,
+ cStencilBits: BYTE,
+ cAuxBuffers: BYTE,
+ iLayerType: BYTE,
+ bReserved: BYTE,
+ dwLayerMask: DWORD,
+ dwVisibleMask: DWORD,
+ dwDamageMask: DWORD,
+}}
+pub type PPIXELFORMATDESCRIPTOR = *mut PIXELFORMATDESCRIPTOR;
+pub type LPPIXELFORMATDESCRIPTOR = *mut PIXELFORMATDESCRIPTOR;
+pub const PFD_TYPE_RGBA: BYTE = 0;
+pub const PFD_TYPE_COLORINDEX: BYTE = 1;
+pub const PFD_MAIN_PLANE: BYTE = 0;
+pub const PFD_OVERLAY_PLANE: BYTE = 1;
+pub const PFD_UNDERLAY_PLANE: BYTE = -1i8 as u8;
+pub const PFD_DOUBLEBUFFER: DWORD = 0x00000001;
+pub const PFD_STEREO: DWORD = 0x00000002;
+pub const PFD_DRAW_TO_WINDOW: DWORD = 0x00000004;
+pub const PFD_DRAW_TO_BITMAP: DWORD = 0x00000008;
+pub const PFD_SUPPORT_GDI: DWORD = 0x00000010;
+pub const PFD_SUPPORT_OPENGL: DWORD = 0x00000020;
+pub const PFD_GENERIC_FORMAT: DWORD = 0x00000040;
+pub const PFD_NEED_PALETTE: DWORD = 0x00000080;
+pub const PFD_NEED_SYSTEM_PALETTE: DWORD = 0x00000100;
+pub const PFD_SWAP_EXCHANGE: DWORD = 0x00000200;
+pub const PFD_SWAP_COPY: DWORD = 0x00000400;
+pub const PFD_SWAP_LAYER_BUFFERS: DWORD = 0x00000800;
+pub const PFD_GENERIC_ACCELERATED: DWORD = 0x00001000;
+pub const PFD_SUPPORT_DIRECTDRAW: DWORD = 0x00002000;
+pub const PFD_DIRECT3D_ACCELERATED: DWORD = 0x00004000;
+pub const PFD_SUPPORT_COMPOSITION: DWORD = 0x00008000;
+pub const PFD_DEPTH_DONTCARE: DWORD = 0x20000000;
+pub const PFD_DOUBLEBUFFER_DONTCARE: DWORD = 0x40000000;
+pub const PFD_STEREO_DONTCARE: DWORD = 0x80000000;
+FN!{stdcall OLDFONTENUMPROCA(
+ *const LOGFONTA,
+ *const TEXTMETRICA,
+ DWORD,
+ LPARAM,
+) -> c_int}
+FN!{stdcall OLDFONTENUMPROCW(
+ *const LOGFONTW,
+ *const TEXTMETRICW,
+ DWORD,
+ LPARAM,
+) -> c_int}
+pub type FONTENUMPROCA = OLDFONTENUMPROCA;
+pub type FONTENUMPROCW = OLDFONTENUMPROCW;
+FN!{stdcall GOBJENUMPROC(
+ LPVOID,
+ LPARAM,
+) -> c_int}
+FN!{stdcall LINEDDAPROC(
+ c_int,
+ c_int,
+ LPARAM,
+) -> ()}
+extern "system" {
+ pub fn AddFontResourceA(
+ _: LPCSTR,
+ ) -> c_int;
+ pub fn AddFontResourceW(
+ _: LPCWSTR,
+ ) -> c_int;
+ pub fn AnimatePalette(
+ hPal: HPALETTE,
+ iStartIndex: UINT,
+ cEntries: UINT,
+ ppe: *const PALETTEENTRY,
+ ) -> BOOL;
+ pub fn Arc(
+ hdc: HDC,
+ x1: c_int,
+ y1: c_int,
+ x2: c_int,
+ y2: c_int,
+ x3: c_int,
+ y3: c_int,
+ x4: c_int,
+ y4: c_int,
+ ) -> 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 Chord(
+ hdc: HDC,
+ x1: c_int,
+ y1: c_int,
+ x2: c_int,
+ y2: c_int,
+ x3: c_int,
+ y3: c_int,
+ x4: c_int,
+ y4: c_int,
+ ) -> BOOL;
+ pub fn ChoosePixelFormat(
+ hdc: HDC,
+ ppfd: *const PIXELFORMATDESCRIPTOR,
+ ) -> c_int;
+ pub fn CloseMetaFile(
+ hdc: HDC,
+ ) -> HMETAFILE;
+ pub fn CombineRgn(
+ hrgnDst: HRGN,
+ hrgnSrc1: HRGN,
+ hrgnSrc2: HRGN,
+ iMode: c_int,
+ ) -> c_int;
+ pub fn CopyMetaFileA(
+ _: HMETAFILE,
+ _: LPCSTR,
+ ) -> HMETAFILE;
+ pub fn CopyMetaFileW(
+ _: HMETAFILE,
+ _: 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(
+ plbrush: *const LOGBRUSH,
+ ) -> HBRUSH;
+ pub fn CreateCompatibleBitmap(
+ hdc: HDC,
+ cx: c_int,
+ cy: c_int,
+ ) -> HBITMAP;
+ pub fn CreateDiscardableBitmap(
+ hdc: HDC,
+ cx: c_int,
+ cy: c_int,
+ ) -> HBITMAP;
+ pub fn CreateCompatibleDC(
+ hdc: HDC,
+ ) -> HDC;
+ pub fn CreateDCA(
+ pwszDriver: LPCSTR,
+ pwszDevice: LPCSTR,
+ pszPort: LPCSTR,
+ pdm: *const DEVMODEA,
+ ) -> HDC;
+ pub fn CreateDCW(
+ pwszDriver: LPCWSTR,
+ pwszDevice: LPCWSTR,
+ pszPort: LPCWSTR,
+ pdm: *const DEVMODEW,
+ ) -> HDC;
+ pub fn CreateDIBitmap(
+ hdc: HDC,
+ pbmih: *const BITMAPINFOHEADER,
+ flInit: DWORD,
+ pjBits: *const c_void,
+ pbmi: *const BITMAPINFO,
+ iUsage: UINT,
+ ) -> HBITMAP;
+ pub fn CreateDIBPatternBrush(
+ h: HGLOBAL,
+ iUsage: UINT,
+ ) -> HBRUSH;
+ pub fn CreateDIBPatternBrushPt(
+ lpPackedDIB: *const c_void,
+ iUsage: UINT,
+ ) -> HBRUSH;
+ pub fn CreateEllipticRgn(
+ x1: c_int,
+ y1: c_int,
+ x2: c_int,
+ y2: c_int,
+ ) -> HRGN;
+ pub fn CreateEllipticRgnIndirect(
+ lprect: *const RECT,
+ ) -> HRGN;
+ pub fn CreateFontIndirectA(
+ lplf: *const LOGFONTA,
+ ) -> HFONT;
+ pub fn CreateFontIndirectW(
+ lplf: *const LOGFONTW,
+ ) -> HFONT;
+ 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 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 CreateHatchBrush(
+ iHatch: c_int,
+ color: COLORREF,
+ ) -> HBRUSH;
+ pub fn CreateICA(
+ pszDriver: LPCSTR,
+ pszDevice: LPCSTR,
+ pszPort: LPCSTR,
+ pdm: *const DEVMODEA,
+ ) -> HDC;
+ pub fn CreateICW(
+ pszDriver: LPCWSTR,
+ pszDevice: LPCWSTR,
+ pszPort: LPCWSTR,
+ pdm: *const DEVMODEW,
+ ) -> HDC;
+ pub fn CreateMetaFileA(
+ pszFile: LPCSTR,
+ ) -> HDC;
+ pub fn CreateMetaFileW(
+ pszFile: LPCWSTR,
+ ) -> HDC;
+ pub fn CreatePalette(
+ plpal: *const LOGPALETTE,
+ ) -> HPALETTE;
+ pub fn CreatePen(
+ iStyle: c_int,
+ cWidth: c_int,
+ color: COLORREF,
+ ) -> HPEN;
+ pub fn CreatePenIndirect(
+ plpen: *const LOGPEN,
+ ) -> HPEN;
+ pub fn CreatePolyPolygonRgn(
+ pptl: *const POINT,
+ pc: *const INT,
+ cPoly: c_int,
+ iMode: c_int,
+ ) -> HRGN;
+ pub fn CreatePatternBrush(
+ hbm: HBITMAP,
+ ) -> HBRUSH;
+ pub fn CreateRectRgn(
+ x1: c_int,
+ y1: c_int,
+ x2: c_int,
+ y2: 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 DeleteDC(
+ hdc: HDC,
+ ) -> 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;
+}
+FN!{stdcall LPFNDEVMODE(
+ HWND,
+ HMODULE,
+ LPDEVMODEA,
+ LPSTR,
+ LPSTR,
+ LPDEVMODEA,
+ LPSTR,
+ UINT,
+) -> UINT}
+FN!{stdcall LPFNDEVCAPS(
+ LPSTR,
+ LPSTR,
+ UINT,
+ LPSTR,
+ LPDEVMODEA,
+) -> DWORD}
+pub const DM_UPDATE: DWORD = 1;
+pub const DM_COPY: DWORD = 2;
+pub const DM_PROMPT: DWORD = 4;
+pub const DM_MODIFY: DWORD = 8;
+pub const DM_IN_BUFFER: DWORD = DM_MODIFY;
+pub const DM_IN_PROMPT: DWORD = DM_PROMPT;
+pub const DM_OUT_BUFFER: DWORD = DM_COPY;
+pub const DM_OUT_DEFAULT: DWORD = DM_UPDATE;
+pub const DC_FIELDS: WORD = 1;
+pub const DC_PAPERS: WORD = 2;
+pub const DC_PAPERSIZE: WORD = 3;
+pub const DC_MINEXTENT: WORD = 4;
+pub const DC_MAXEXTENT: WORD = 5;
+pub const DC_BINS: WORD = 6;
+pub const DC_DUPLEX: WORD = 7;
+pub const DC_SIZE: WORD = 8;
+pub const DC_EXTRA: WORD = 9;
+pub const DC_VERSION: WORD = 10;
+pub const DC_DRIVER: WORD = 11;
+pub const DC_BINNAMES: WORD = 12;
+pub const DC_ENUMRESOLUTIONS: WORD = 13;
+pub const DC_FILEDEPENDENCIES: WORD = 14;
+pub const DC_TRUETYPE: WORD = 15;
+pub const DC_PAPERNAMES: WORD = 16;
+pub const DC_ORIENTATION: WORD = 17;
+pub const DC_COPIES: WORD = 18;
+pub const DC_BINADJUST: WORD = 19;
+pub const DC_EMF_COMPLIANT: WORD = 20;
+pub const DC_DATATYPE_PRODUCED: WORD = 21;
+pub const DC_COLLATE: WORD = 22;
+pub const DC_MANUFACTURER: WORD = 23;
+pub const DC_MODEL: WORD = 24;
+pub const DC_PERSONALITY: WORD = 25;
+pub const DC_PRINTRATE: WORD = 26;
+pub const DC_PRINTRATEUNIT: WORD = 27;
+pub const PRINTRATEUNIT_PPM: WORD = 1;
+pub const PRINTRATEUNIT_CPS: WORD = 2;
+pub const PRINTRATEUNIT_LPM: WORD = 3;
+pub const PRINTRATEUNIT_IPM: WORD = 4;
+pub const DC_PRINTERMEM: WORD = 28;
+pub const DC_MEDIAREADY: WORD = 29;
+pub const DC_STAPLE: WORD = 30;
+pub const DC_PRINTRATEPPM: WORD = 31;
+pub const DC_COLORDEVICE: WORD = 32;
+pub const DC_NUP: WORD = 33;
+pub const DC_MEDIATYPENAMES: WORD = 34;
+pub const DC_MEDIATYPES: WORD = 35;
+pub const DCTT_BITMAP: DWORD = 0x0000001;
+pub const DCTT_DOWNLOAD: DWORD = 0x0000002;
+pub const DCTT_SUBDEV: DWORD = 0x0000004;
+pub const DCTT_DOWNLOAD_OUTLINE: DWORD = 0x0000008;
+pub const DCBA_FACEUPNONE: DWORD = 0x0000;
+pub const DCBA_FACEUPCENTER: DWORD = 0x0001;
+pub const DCBA_FACEUPLEFT: DWORD = 0x0002;
+pub const DCBA_FACEUPRIGHT: DWORD = 0x0003;
+pub const DCBA_FACEDOWNNONE: DWORD = 0x0100;
+pub const DCBA_FACEDOWNCENTER: DWORD = 0x0101;
+pub const DCBA_FACEDOWNLEFT: DWORD = 0x0102;
+pub const DCBA_FACEDOWNRIGHT: DWORD = 0x0103;
+extern "system" {
+ pub fn DeviceCapabilitiesA(
+ pDevice: LPCSTR,
+ pPort: LPCSTR,
+ fwCapability: WORD,
+ pOutput: LPSTR,
+ pDevMode: *const DEVMODEA,
+ ) -> c_int;
+ pub fn DeviceCapabilitiesW(
+ pDevice: LPCWSTR,
+ pPort: LPCWSTR,
+ fwCapability: WORD,
+ pOutput: LPWSTR,
+ pDevMode: *const DEVMODEW,
+ ) -> c_int;
+ 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 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 EnumFontFamiliesA(
+ hdc: HDC,
+ lpLogfont: LPCSTR,
+ lpProc: FONTENUMPROCA,
+ lParam: LPARAM,
+ ) -> 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 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 ExtEscape(
+ hdc: HDC,
+ iEscape: c_int,
+ cjInput: c_int,
+ lpInData: LPCSTR,
+ cjOutput: c_int,
+ lpOutData: LPSTR,
+ ) -> c_int;
+ pub fn ExcludeClipRect(
+ hdc: HDC,
+ left: c_int,
+ top: c_int,
+ right: c_int,
+ bottom: c_int,
+ ) -> c_int;
+ pub fn ExtCreateRegion(
+ lpx: *const XFORM,
+ nCount: DWORD,
+ lpData: *const RGNDATA,
+ ) -> HRGN;
+ pub fn ExtFloodFill(
+ hdc: HDC,
+ x: c_int,
+ y: c_int,
+ color: COLORREF,
+ utype: UINT,
+ ) -> BOOL;
+ pub fn FillRgn(
+ hdc: HDC,
+ hrgn: HRGN,
+ hbr: HBRUSH,
+ ) -> 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 GetROP2(
+ hdc: HDC,
+ ) -> c_int;
+ pub fn GetAspectRatioFilterEx(
+ hdc: HDC,
+ lpsize: LPSIZE,
+ ) -> BOOL;
+ pub fn GetBkColor(
+ hdc: HDC,
+ ) -> COLORREF;
+ pub fn GetDCBrushColor(
+ hdc: HDC,
+ ) -> COLORREF;
+ pub fn GetDCPenColor(
+ hdc: HDC,
+ ) -> COLORREF;
+ pub fn GetBkMode(
+ hdc: HDC,
+ ) -> c_int;
+ pub fn GetBitmapBits(
+ hbit: HBITMAP,
+ cb: LONG,
+ lpvBits: LPVOID,
+ ) -> LONG;
+ pub fn GetBitmapDimensionEx(
+ hbit: HBITMAP,
+ lpsize: LPSIZE,
+ ) -> BOOL;
+ pub fn GetBoundsRect(
+ hdc: HDC,
+ lprect: LPRECT,
+ flags: UINT,
+ ) -> UINT;
+ pub fn GetBrushOrgEx(
+ hdc: HDC,
+ lppt: LPPOINT,
+ ) -> BOOL;
+ pub fn GetCharWidthA(
+ hdc: HDC,
+ iFirst: UINT,
+ iLast: UINT,
+ lpBuffer: LPINT,
+ ) -> BOOL;
+ pub fn GetCharWidthW(
+ hdc: HDC,
+ iFirst: UINT,
+ iLast: UINT,
+ lpBuffer: LPINT,
+ ) -> 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 GetCharWidthFloatA(
+ hdc: HDC,
+ iFirst: UINT,
+ iLast: UINT,
+ lpBuffer: PFLOAT,
+ ) -> BOOL;
+ pub fn GetCharWidthFloatW(
+ hdc: HDC,
+ iFirst: UINT,
+ iLast: UINT,
+ lpBuffer: PFLOAT,
+ ) -> BOOL;
+ pub fn GetCharABCWidthsA(
+ hdc: HDC,
+ wFirst: UINT,
+ wLast: UINT,
+ lpABC: LPABC,
+ ) -> BOOL;
+ pub fn GetCharABCWidthsW(
+ 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 GetClipBox(
+ hdc: HDC,
+ lprect: LPRECT,
+ ) -> c_int;
+ pub fn GetClipRgn(
+ hdc: HDC,
+ hrgn: HRGN,
+ ) -> c_int;
+ pub fn GetMetaRgn(
+ hdc: HDC,
+ hrgn: HRGN,
+ ) -> c_int;
+ pub fn GetCurrentObject(
+ hdc: HDC,
+ tp: UINT,
+ ) -> HGDIOBJ;
+ pub fn GetCurrentPositionEx(
+ hdc: HDC,
+ lppt: LPPOINT,
+ ) -> BOOL;
+ pub fn GetDeviceCaps(
+ hdc: HDC,
+ nIndex: c_int,
+ ) -> c_int;
+ pub fn GetDIBits(
+ hdc: HDC,
+ hbm: HBITMAP,
+ start: UINT,
+ cLines: UINT,
+ lpvBits: LPVOID,
+ lpbmi: LPBITMAPINFO,
+ usage: UINT,
+ ) -> c_int;
+ pub fn GetFontData(
+ hdc: HDC,
+ dwTable: DWORD,
+ dwOffset: DWORD,
+ pvBuffer: PVOID,
+ cjBuffer: DWORD,
+ ) -> DWORD;
+ 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 GetMapMode(
+ hdc: HDC,
+ ) -> c_int;
+ pub fn GetMetaFileBitsEx(
+ hMF: HMETAFILE,
+ cbBuffer: UINT,
+ lpData: LPVOID,
+ ) -> UINT;
+ pub fn GetMetaFileA(
+ lpName: LPCSTR,
+ ) -> HMETAFILE;
+ pub fn GetMetaFileW(
+ lpName: LPCWSTR,
+ ) -> HMETAFILE;
+ pub fn GetNearestColor(
+ hdc: HDC,
+ color: COLORREF,
+ ) -> COLORREF;
+ pub fn GetNearestPaletteIndex(
+ h: HPALETTE,
+ color: COLORREF,
+ ) -> UINT;
+ pub fn GetObjectType(
+ h: HGDIOBJ,
+ ) -> DWORD;
+ 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 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 GetRasterizerCaps(
+ lpraststat: LPRASTERIZER_STATUS,
+ cjBytes: UINT,
+ ) -> BOOL;
+ pub fn GetRandomRgn (
+ hdc: HDC,
+ hrgn: HRGN,
+ i: INT,
+ ) -> c_int;
+ pub fn GetRegionData(
+ hrgn: HRGN,
+ nCount: DWORD,
+ lpRgnData: LPRGNDATA,
+ ) -> DWORD;
+ 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 GetTextCharacterExtra(
+ hdc: HDC,
+ ) -> c_int;
+ pub fn GetTextAlign(
+ hdc: HDC,
+ ) -> UINT;
+ pub fn GetTextColor(
+ hdc: HDC,
+ ) -> COLORREF;
+ pub fn GetTextExtentPointA(
+ hdc: HDC,
+ lpString: LPCSTR,
+ c: c_int,
+ lpsz: LPSIZE,
+ ) -> BOOL;
+ pub fn GetTextExtentPointW(
+ hdc: HDC,
+ lpString: LPCWSTR,
+ c: c_int,
+ lpsz: 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 GetTextExtentExPointA(
+ hdc: HDC,
+ lpszString: LPCSTR,
+ cchString: 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 GetTextCharset(
+ hdc: HDC,
+ ) -> c_int;
+ pub fn GetTextCharsetInfo(
+ hdc: HDC,
+ lpSig: LPFONTSIGNATURE,
+ dwFlags: DWORD,
+ ) -> c_int;
+ pub fn TranslateCharsetInfo(
+ lpSrc: *const DWORD,
+ lpCs: LPCHARSETINFO,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn GetFontLanguageInfo(
+ hdc: HDC,
+ ) -> DWORD;
+ 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;
+}
+STRUCT!{struct WCRANGE {
+ wcLow: WCHAR,
+ cGlyphs: USHORT,
+}}
+pub type PWCRANGE = *mut WCRANGE;
+pub type LPWCRANGE = *mut WCRANGE;
+STRUCT!{struct GLYPHSET {
+ cbThis: DWORD,
+ flAccel: DWORD,
+ cGlyphsSupported: DWORD,
+ cRanges: DWORD,
+ ranges: [WCRANGE;1],
+}}
+pub type PGLYPHSET = *mut GLYPHSET;
+pub type LPGLYPHSET = *mut GLYPHSET;
+pub const GS_8BIT_INDICES: DWORD = 0x00000001;
+pub const GGI_MARK_NONEXISTING_GLYPHS: DWORD = 0x0001;
+extern "system" {
+ 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 GetTextExtentPointI(
+ hdc: HDC,
+ pgiIn: LPWORD,
+ cgi: c_int,
+ psize: LPSIZE,
+ ) -> BOOL;
+ pub fn GetTextExtentExPointI(
+ hdc: HDC,
+ lpwszString: LPWORD,
+ cwchString: c_int,
+ nMaxExtent: c_int,
+ lpnFit: LPINT,
+ lpnDx: LPINT,
+ lpSize: LPSIZE,
+ ) -> BOOL;
+ pub fn GetCharWidthI(
+ hdc: HDC,
+ giFirst: UINT,
+ cgi: UINT,
+ pgi: LPWORD,
+ piWidths: LPINT,
+ ) -> BOOL;
+ pub fn GetCharABCWidthsI(
+ hdc: HDC,
+ giFirst: UINT,
+ cgi: UINT,
+ pgi: LPWORD,
+ pabc: LPABC,
+ ) -> BOOL;
+}
+pub const STAMP_DESIGNVECTOR: DWORD = 0x8000000 + 0x64 + (0x76 << 8);
+pub const STAMP_AXESLIST: DWORD = 0x8000000 + 0x61 + (0x6c << 8);
+pub const STAMP_TRUETYPE_VARIATION: DWORD = 0x8000000 + 0x74 + (0x76 << 8);
+pub const MM_MAX_NUMAXES: usize = 16;
+STRUCT!{struct DESIGNVECTOR {
+ dvReserved: DWORD,
+ dvNumAxes: DWORD,
+ dvValues: [LONG; MM_MAX_NUMAXES],
+}}
+pub type PDESIGNVECTOR = *mut DESIGNVECTOR;
+pub type LPDESIGNVECTOR = *mut DESIGNVECTOR;
+extern "system" {
+ pub fn AddFontResourceExA(
+ lpszFilename: LPCSTR,
+ fl: DWORD,
+ pdv: PVOID,
+ ) -> c_int;
+ pub fn AddFontResourceExW(
+ lpszFilename: LPCWSTR,
+ fl: DWORD,
+ pdv: PVOID,
+ ) -> c_int;
+ pub fn RemoveFontResourceExA(
+ name: LPCSTR,
+ fl: DWORD,
+ pdv: PVOID,
+ ) -> BOOL;
+ pub fn RemoveFontResourceExW(
+ name: LPCWSTR,
+ fl: DWORD,
+ pdv: PVOID,
+ ) -> BOOL;
+ pub fn AddFontMemResourceEx(
+ pbFont: PVOID,
+ cbSize: DWORD,
+ pdv: PVOID,
+ pcFonts: *mut DWORD,
+ ) -> HANDLE;
+ pub fn RemoveFontMemResourceEx(
+ h: HANDLE,
+ ) -> BOOL;
+}
+pub const FR_PRIVATE: DWORD = 0x10;
+pub const FR_NOT_ENUM: DWORD = 0x20;
+pub const MM_MAX_AXES_NAMELEN: usize = 16;
+STRUCT!{struct AXISINFOA {
+ axMinValue: LONG,
+ axMaxValue: LONG,
+ axAxisName: [BYTE; MM_MAX_AXES_NAMELEN],
+}}
+pub type PAXISINFOA = *mut AXISINFOA;
+pub type LPAXISINFOA = *mut AXISINFOA;
+STRUCT!{struct AXISINFOW {
+ axMinValue: LONG,
+ axMaxValue: LONG,
+ axAxisName: [WCHAR; MM_MAX_AXES_NAMELEN],
+}}
+pub type PAXISINFOW = *mut AXISINFOW;
+pub type LPAXISINFOW = *mut AXISINFOW;
+STRUCT!{struct AXESLISTA {
+ axlReserved: DWORD,
+ axlNumAxes: DWORD,
+ axlAxisInfo: [AXISINFOA; MM_MAX_AXES_NAMELEN],
+}}
+pub type PAXESLISTA = *mut AXESLISTA;
+pub type LPAXESLISTA = *mut AXESLISTA;
+STRUCT!{struct AXESLISTW {
+ axlReserved: DWORD,
+ axlNumAxes: DWORD,
+ axlAxisInfo: [AXISINFOW; MM_MAX_AXES_NAMELEN],
+}}
+pub type PAXESLISTW = *mut AXESLISTW;
+pub type LPAXESLISTW = *mut AXESLISTW;
+STRUCT!{struct ENUMLOGFONTEXDVA {
+ elfEnumLogfontEx: ENUMLOGFONTEXA,
+ elfDesignVector: DESIGNVECTOR,
+}}
+pub type PENUMLOGFONTEXDVA = *mut ENUMLOGFONTEXDVA;
+pub type LPENUMLOGFONTEXDVA = *mut ENUMLOGFONTEXDVA;
+STRUCT!{struct ENUMLOGFONTEXDVW {
+ elfEnumLogfontEx: ENUMLOGFONTEXW,
+ elfDesignVector: DESIGNVECTOR,
+}}
+pub type PENUMLOGFONTEXDVW = *mut ENUMLOGFONTEXDVW;
+pub type LPENUMLOGFONTEXDVW = *mut ENUMLOGFONTEXDVW;
+extern "system" {
+ pub fn CreateFontIndirectExA(
+ penumlfex: *const ENUMLOGFONTEXDVA,
+ ) -> HFONT;
+ pub fn CreateFontIndirectExW(
+ penumlfex: *const ENUMLOGFONTEXDVW,
+ ) -> HFONT;
+}
+STRUCT!{struct ENUMTEXTMETRICA {
+ etmNewTextMetricEx: NEWTEXTMETRICEXA,
+ etmAxesList: AXESLISTA,
+}}
+pub type PENUMTEXTMETRICA = *mut ENUMTEXTMETRICA;
+pub type LPENUMTEXTMETRICA = *mut ENUMTEXTMETRICA;
+STRUCT!{struct ENUMTEXTMETRICW {
+ etmNewTextMetricEx: NEWTEXTMETRICEXW,
+ etmAxesList: AXESLISTW,
+}}
+pub type PENUMTEXTMETRICW = *mut ENUMTEXTMETRICW;
+pub type LPENUMTEXTMETRICW = *mut ENUMTEXTMETRICW;
+extern "system" {
+ pub fn GetViewportExtEx(
+ hdc: HDC,
+ lpsize: LPSIZE,
+ ) -> BOOL;
+ pub fn GetViewportOrgEx(
+ hdc: HDC,
+ lppoint: LPPOINT,
+ ) -> BOOL;
+ pub fn GetWindowExtEx(
+ hdc: HDC,
+ lpsize: LPSIZE,
+ ) -> BOOL;
+ pub fn GetWindowOrgEx(
+ hdc: HDC,
+ lppoint: LPPOINT,
+ ) -> 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 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 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 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 PatBlt(
+ hdc: HDC,
+ nXLeft: c_int,
+ nYLeft: c_int,
+ nWidth: c_int,
+ nHeight: c_int,
+ dwRop: DWORD,
+ ) -> BOOL;
+ 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 PlayMetaFile(
+ hdc: HDC,
+ hmf: HMETAFILE,
+ ) -> BOOL;
+ pub fn PaintRgn(
+ hdc: HDC,
+ hrgn: HRGN,
+ ) -> BOOL;
+ pub fn PolyPolygon(
+ hdc: HDC,
+ lpPoints: *const POINT,
+ lpPolyCounts: *const INT,
+ 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 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 RestoreDC(
+ hdc: HDC,
+ nSavedDC: c_int,
+ ) -> BOOL;
+ pub fn ResetDCA(
+ hdc: HDC,
+ lpdm: *const DEVMODEA,
+ ) -> HDC;
+ pub fn ResetDCW(
+ hdc: HDC,
+ lpdm: *const DEVMODEW,
+ ) -> HDC;
+ pub fn RealizePalette(
+ hdc: HDC,
+ ) -> UINT;
+ pub fn RemoveFontResourceA(
+ lpFileName: LPCSTR,
+ ) -> BOOL;
+ pub fn RemoveFontResourceW(
+ lpFileName: LPCWSTR,
+ ) -> 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 ResizePalette(
+ hpal: HPALETTE,
+ n: UINT,
+ ) -> BOOL;
+ pub fn SaveDC(
+ hdc: HDC,
+ ) -> c_int;
+ pub fn SelectClipRgn(
+ hdc: HDC,
+ hrgn: HRGN,
+ ) -> c_int;
+ pub fn ExtSelectClipRgn(
+ hdc: HDC,
+ hrgn: HRGN,
+ mode: c_int,
+ ) -> c_int;
+ pub fn SetMetaRgn(
+ hdc: HDC,
+ ) -> c_int;
+ pub fn SelectObject(
+ hdc: HDC,
+ h: HGDIOBJ,
+ ) -> HGDIOBJ;
+ pub fn SelectPalette(
+ hdc: HDC,
+ hPal: HPALETTE,
+ bForceBkgd: BOOL,
+ ) -> HPALETTE;
+ pub fn SetBkColor(
+ hdc: HDC,
+ color: COLORREF,
+ ) -> COLORREF;
+ pub fn SetDCBrushColor(
+ hdc: HDC,
+ color: COLORREF,
+ ) -> COLORREF;
+ pub fn SetDCPenColor(
+ hdc: HDC,
+ color: COLORREF,
+ ) -> COLORREF;
+ pub fn SetBkMode(
+ hdc: HDC,
+ mode: c_int,
+ ) -> c_int;
+ pub fn SetBitmapBits(
+ hbm: HBITMAP,
+ cb: DWORD,
+ pvBits: *const VOID,
+ ) -> LONG;
+ pub fn SetBoundsRect(
+ hdc: HDC,
+ lprect: *const RECT,
+ flags: UINT,
+ ) -> 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 SetMapperFlags(
+ hdc: HDC,
+ flags: DWORD,
+ ) -> DWORD;
+ pub fn SetGraphicsMode(
+ hdc: HDC,
+ iMode: c_int,
+ ) -> c_int;
+ pub fn SetMapMode(
+ hdc: HDC,
+ mode: c_int,
+ ) -> c_int;
+ pub fn SetLayout(
+ hdc: HDC,
+ l: DWORD,
+ ) -> DWORD;
+ pub fn GetLayout(
+ hdc: HDC,
+ ) -> DWORD;
+ pub fn SetMetaFileBitsEx(
+ cbBuffer: UINT,
+ lpData: *const BYTE,
+ ) -> HMETAFILE;
+ 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 SetPixelV(
+ hdc: HDC,
+ x: c_int,
+ y: c_int,
+ color: COLORREF,
+ ) -> BOOL;
+ pub fn SetPixelFormat(
+ hdc: HDC,
+ iPixelFormat: c_int,
+ ppfd: *const PIXELFORMATDESCRIPTOR,
+ ) -> BOOL;
+ pub fn SetPolyFillMode(
+ hdc: HDC,
+ iPolyFillMode: c_int,
+ ) -> 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 SetRectRgn(
+ hrgn: HRGN,
+ left: c_int,
+ top: c_int,
+ right: c_int,
+ bottom: c_int,
+ ) -> 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 SetROP2(
+ hdc: HDC,
+ rop2: c_int,
+ ) -> c_int;
+ pub fn SetStretchBltMode(
+ hdc: HDC,
+ mode: c_int,
+ ) -> c_int;
+ pub fn SetSystemPaletteUse(
+ hdc: HDC,
+ uuse: UINT,
+ ) -> UINT;
+ pub fn SetTextCharacterExtra(
+ hdc: HDC,
+ extra: c_int,
+ ) -> c_int;
+ pub fn SetTextColor(
+ hdc: HDC,
+ color: COLORREF,
+ ) -> COLORREF;
+ pub fn SetTextAlign(
+ hdc: HDC,
+ align: UINT,
+ ) -> UINT;
+ pub fn SetTextJustification(
+ hdc: HDC,
+ extra: c_int,
+ count: c_int,
+ ) -> BOOL;
+ pub fn UpdateColors(
+ hdc: HDC,
+ ) -> BOOL;
+}
+pub type COLOR16 = c_ushort;
+STRUCT!{struct TRIVERTEX {
+ x: LONG,
+ y: LONG,
+ Red: COLOR16,
+ Green: COLOR16,
+ Blue: COLOR16,
+ Alpha: COLOR16,
+}}
+pub type PTRIVERTEX = *mut TRIVERTEX;
+pub type LPTRIVERTEX = *mut TRIVERTEX;
+STRUCT!{struct GRADIENT_RECT {
+ UpperLeft: ULONG,
+ LowerRight: ULONG,
+}}
+pub type PGRADIENT_RECT = *mut GRADIENT_RECT;
+pub type LPGRADIENT_RECT = *mut GRADIENT_RECT;
+STRUCT!{struct BLENDFUNCTION {
+ BlendOp: BYTE,
+ BlendFlags: BYTE,
+ SourceConstantAlpha: BYTE,
+ AlphaFormat: BYTE,
+}}
+pub type PBLENDFUNCTION = *mut BLENDFUNCTION;
+pub const AC_SRC_OVER: BYTE = 0x00;
+pub const AC_SRC_ALPHA: BYTE = 0x01;
+extern "system" {
+ pub fn AlphaBlend(
+ 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 TransparentBlt(
+ 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 const GRADIENT_FILL_RECT_H: ULONG = 0x00000000;
+pub const GRADIENT_FILL_RECT_V: ULONG = 0x00000001;
+pub const GRADIENT_FILL_TRIANGLE: ULONG = 0x00000002;
+pub const GRADIENT_FILL_OP_FLAG: ULONG = 0x000000ff;
+extern "system" {
+ pub fn GradientFill(
+ hdc: HDC,
+ pVertex: PTRIVERTEX,
+ nVertex: ULONG,
+ pMesh: PVOID,
+ nMesh: ULONG,
+ ulMode: ULONG,
+ ) -> 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 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 GdiGradientFill(
+ hdc: HDC,
+ pVertex: PTRIVERTEX,
+ nVertex: ULONG,
+ pMesh: PVOID,
+ nCount: ULONG,
+ ulMode: ULONG,
+ ) -> BOOL;
+ pub fn PlayMetaFileRecord(
+ hdc: HDC,
+ lpHandleTable: LPHANDLETABLE,
+ lpMR: LPMETARECORD,
+ noObjs: UINT,
+ ) -> BOOL;
+}
+FN!{stdcall MFENUMPROC(
+ hdc: HDC,
+ lpht: *mut HANDLETABLE,
+ lpMR: *mut METARECORD,
+ nObj: c_int,
+ param: LPARAM,
+) -> c_int}
+extern "system" {
+ pub fn EnumMetaFile(
+ hdc: HDC,
+ hmf: HMETAFILE,
+ mproc: MFENUMPROC,
+ param: LPARAM,
+ ) -> BOOL;
+}
+FN!{stdcall ENHMFENUMPROC(
+ hdc: HDC,
+ lpht: *mut HANDLETABLE,
+ lpmr: *const ENHMETARECORD,
+ nHandles: c_int,
+ data: LPARAM,
+) -> c_int}
+extern "system" {
+ pub fn CloseEnhMetaFile(
+ hdc: HDC,
+ ) -> HENHMETAFILE;
+ pub fn CopyEnhMetaFileA(
+ hemfSrc: HENHMETAFILE,
+ lpszFile: LPCSTR,
+ ) -> HENHMETAFILE;
+ pub fn CopyEnhMetaFileW(
+ hemfSrc: HENHMETAFILE,
+ lpszFile: LPCWSTR,
+ ) -> HENHMETAFILE;
+ 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 DeleteEnhMetaFile(
+ hmf: HENHMETAFILE,
+ ) -> BOOL;
+ pub fn EnumEnhMetaFile(
+ hdc: HDC,
+ hmf: HENHMETAFILE,
+ lpProc: ENHMFENUMPROC,
+ param: LPVOID,
+ lpRect: *const RECT,
+ ) -> BOOL;
+ pub fn GetEnhMetaFileA(
+ lpName: LPCSTR,
+ ) -> HENHMETAFILE;
+ pub fn GetEnhMetaFileW(
+ lpName: LPCWSTR,
+ ) -> 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 GetWinMetaFileBits(
+ hemf: HENHMETAFILE,
+ cbData16: UINT,
+ pData16: LPBYTE,
+ iMapMode: INT,
+ hdcRef: HDC,
+ ) -> UINT;
+ 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 SetEnhMetaFileBits(
+ nSize: UINT,
+ pb: *const BYTE,
+ ) -> HENHMETAFILE;
+ pub fn SetWinMetaFileBits(
+ nSize: UINT,
+ lpMeta16Data: *const BYTE,
+ hdcRef: HDC,
+ lpMFP: *const METAFILEPICT,
+ ) -> HENHMETAFILE;
+ pub fn GdiComment(
+ hdc: HDC,
+ nSize: UINT,
+ lpData: *const BYTE,
+ ) -> BOOL;
+ pub fn GetTextMetricsA(
+ hdc: HDC,
+ lptm: LPTEXTMETRICA,
+ ) -> BOOL;
+ pub fn GetTextMetricsW(
+ hdc: HDC,
+ lptm: *mut TEXTMETRICW,
+ ) -> BOOL;
+}
+STRUCT!{struct DIBSECTION {
+ dsBm: BITMAP,
+ dsBmih: BITMAPINFOHEADER,
+ dsBitfields: [DWORD; 3],
+ dshSection: HANDLE,
+ dsOffset: DWORD,
+}}
+pub type PDIBSECTION = *mut DIBSECTION;
+pub type LPDIBSECTION = *mut DIBSECTION;
+extern "system" {
+ pub fn AngleArc(
+ hdc: HDC,
+ X: c_int,
+ Y: c_int,
+ dwRadius: DWORD,
+ eStartAngle: FLOAT,
+ eSweepAngle: FLOAT,
+ ) -> BOOL;
+ pub fn PolyPolyline(
+ hdc: HDC,
+ lppt: *const POINT,
+ lpdwPolyPoints: *const DWORD,
+ cCount: DWORD,
+ ) -> BOOL;
+ pub fn GetWorldTransform(
+ hdc: HDC,
+ lpxf: LPXFORM,
+ ) -> BOOL;
+ pub fn SetWorldTransform(
+ hdc: HDC,
+ lpxf: *const XFORM,
+ ) -> BOOL;
+ pub fn ModifyWorldTransform(
+ hdc: HDC,
+ lpxf: *const XFORM,
+ mode: DWORD,
+ ) -> BOOL;
+ pub fn CombineTransform(
+ lpxformResult: LPXFORM,
+ lpxform1: *const XFORM,
+ lpxform2: *const XFORM,
+ ) -> BOOL;
+}
+#[inline]
+pub fn GDI_WIDTHBYTES(bits: DWORD) -> DWORD {
+ ((bits + 31) & !31) / 8
+}
+#[inline]
+pub fn GDI_DIBWIDTHBYTES(bi: &BITMAPINFOHEADER) -> DWORD {
+ GDI_WIDTHBYTES((bi.biWidth as DWORD) * (bi.biBitCount as DWORD))
+}
+#[inline]
+pub fn GDI__DIBSIZE(bi: &BITMAPINFOHEADER) -> DWORD {
+ GDI_DIBWIDTHBYTES(bi) * bi.biHeight as DWORD
+}
+#[inline]
+pub fn GDI_DIBSIZE(bi: &BITMAPINFOHEADER) -> DWORD {
+ if bi.biHeight < 0 {
+ GDI__DIBSIZE(bi) * -1i32 as u32
+ } else {
+ GDI__DIBSIZE(bi)
+ }
+}
+extern "system" {
+ pub fn CreateDIBSection(
+ hdc: HDC,
+ lpbmi: *const BITMAPINFO,
+ usage: UINT,
+ ppvBits: *mut *mut c_void,
+ hSection: HANDLE,
+ offset: DWORD,
+ ) -> HBITMAP;
+ pub fn GetDIBColorTable(
+ hdc: HDC,
+ iStart: UINT,
+ cEntries: UINT,
+ prgbq: *mut RGBQUAD,
+ ) -> UINT;
+ pub fn SetDIBColorTable(
+ hdc: HDC,
+ iStart: UINT,
+ cEntries: UINT,
+ prgbq: *const RGBQUAD,
+ ) -> UINT;
+}
+pub const CA_NEGATIVE: WORD = 0x0001;
+pub const CA_LOG_FILTER: WORD = 0x0002;
+pub const ILLUMINANT_DEVICE_DEFAULT: WORD = 0;
+pub const ILLUMINANT_A: WORD = 1;
+pub const ILLUMINANT_B: WORD = 2;
+pub const ILLUMINANT_C: WORD = 3;
+pub const ILLUMINANT_D50: WORD = 4;
+pub const ILLUMINANT_D55: WORD = 5;
+pub const ILLUMINANT_D65: WORD = 6;
+pub const ILLUMINANT_D75: WORD = 7;
+pub const ILLUMINANT_F2: WORD = 8;
+pub const ILLUMINANT_MAX_INDEX: WORD = ILLUMINANT_F2;
+pub const ILLUMINANT_TUNGSTEN: WORD = ILLUMINANT_A;
+pub const ILLUMINANT_DAYLIGHT: WORD = ILLUMINANT_C;
+pub const ILLUMINANT_FLUORESCENT: WORD = ILLUMINANT_F2;
+pub const ILLUMINANT_NTSC: WORD = ILLUMINANT_C;
+pub const RGB_GAMMA_MIN: WORD = 0o2500; // FIXME It is octal in the headers but are the headers actually right?
+pub const RGB_GAMMA_MAX: WORD = 65000;
+pub const REFERENCE_WHITE_MIN: WORD = 6000;
+pub const REFERENCE_WHITE_MAX: WORD = 10000;
+pub const REFERENCE_BLACK_MIN: WORD = 0;
+pub const REFERENCE_BLACK_MAX: WORD = 4000;
+pub const COLOR_ADJ_MIN: SHORT = -100;
+pub const COLOR_ADJ_MAX: SHORT = 100;
+STRUCT!{struct COLORADJUSTMENT {
+ caSize: WORD,
+ caFlags: WORD,
+ caIlluminantIndex: WORD,
+ caRedGamma: WORD,
+ caGreenGamma: WORD,
+ caBlueGamma: WORD,
+ caReferenceBlack: WORD,
+ caReferenceWhite: WORD,
+ caContrast: SHORT,
+ caBrightness: SHORT,
+ caColorfulness: SHORT,
+ caRedGreenTint: SHORT,
+}}
+pub type PCOLORADJUSTMENT = *mut COLORADJUSTMENT;
+pub type LPCOLORADJUSTMENT = *mut COLORADJUSTMENT;
+extern "system" {
+ pub fn SetColorAdjustment(
+ hdc: HDC,
+ lpca: *const COLORADJUSTMENT,
+ ) -> BOOL;
+ pub fn GetColorAdjustment(
+ hdc: HDC,
+ lpca: LPCOLORADJUSTMENT,
+ ) -> BOOL;
+ pub fn CreateHalftonePalette(
+ hdc: HDC,
+ ) -> HPALETTE;
+}
+FN!{stdcall ABORTPROC(
+ HDC,
+ c_int,
+) -> BOOL}
+STRUCT!{struct DOCINFOA {
+ cbSize: c_int,
+ lpszDocName: LPCSTR,
+ lpszOutput: LPCSTR,
+ lpszDatatype: LPCSTR,
+ fwType: DWORD,
+}}
+pub type LPDOCINFOA = *mut DOCINFOA;
+STRUCT!{struct DOCINFOW {
+ cbSize: c_int,
+ lpszDocName: LPCWSTR,
+ lpszOutput: LPCWSTR,
+ lpszDatatype: LPCWSTR,
+ fwType: DWORD,
+}}
+pub type LPDOCINFOW = *mut DOCINFOW;
+pub const DI_APPBANDING: DWORD = 0x00000001;
+pub const DI_ROPS_READ_DESTINATION: DWORD = 0x00000002;
+extern "system" {
+ pub fn StartDocA(
+ hdc: HDC,
+ lpdi: *const DOCINFOA,
+ ) -> c_int;
+ pub fn StartDocW(
+ hdc: HDC,
+ lpdi: *const DOCINFOW,
+ ) -> c_int;
+ pub fn EndDoc(
+ hdc: HDC,
+ ) -> c_int;
+ pub fn StartPage(
+ hdc: HDC,
+ ) -> c_int;
+ pub fn EndPage(
+ hdc: HDC,
+ ) -> c_int;
+ pub fn AbortDoc(
+ hdc: HDC,
+ ) -> c_int;
+ pub fn SetAbortProc(
+ hdc: HDC,
+ aproc: ABORTPROC,
+ ) -> c_int;
+ pub fn AbortPath(
+ hdc: HDC,
+ ) -> 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 CloseFigure(
+ hdc: HDC,
+ ) -> BOOL;
+ pub fn EndPath(
+ hdc: HDC,
+ ) -> BOOL;
+ pub fn FillPath(
+ hdc: HDC,
+ ) -> BOOL;
+ pub fn FlattenPath(
+ hdc: HDC,
+ ) -> BOOL;
+ pub fn GetPath(
+ hdc: HDC,
+ apt: LPPOINT,
+ aj: LPBYTE,
+ cpt: c_int,
+ ) -> c_int;
+ pub fn PathToRegion(
+ hdc: HDC,
+ ) -> HRGN;
+ pub fn PolyDraw(
+ hdc: HDC,
+ lppt: *const POINT,
+ lpbTypes: *const BYTE,
+ cCount: c_int,
+ ) -> BOOL;
+ pub fn SelectClipPath(
+ hdc: HDC,
+ mode: c_int,
+ ) -> BOOL;
+ pub fn SetArcDirection(
+ hdc: HDC,
+ ArcDirection: c_int,
+ ) -> c_int;
+ pub fn SetMiterLimit(
+ hdc: HDC,
+ limit: FLOAT,
+ old: PFLOAT,
+ ) -> BOOL;
+ pub fn StrokeAndFillPath(
+ hdc: HDC,
+ ) -> BOOL;
+ pub fn StrokePath(
+ hdc: HDC,
+ ) -> BOOL;
+ pub fn WidenPath(
+ hdc: HDC,
+ ) -> BOOL;
+ pub fn ExtCreatePen(
+ iPenStyle: DWORD,
+ cWidth: DWORD,
+ plbrush: *const LOGBRUSH,
+ cStyle: DWORD,
+ pstyle: *const DWORD,
+ ) -> HPEN;
+ pub fn GetMiterLimit(
+ hdc: HDC,
+ plimit: PFLOAT,
+ ) -> BOOL;
+ pub fn GetArcDirection(
+ hdc: HDC,
+ ) -> c_int;
+ pub fn GetObjectA(
+ h: HANDLE,
+ c: c_int,
+ pv: LPVOID,
+ ) -> c_int;
+ pub fn GetObjectW(
+ h: HANDLE,
+ c: c_int,
+ pv: LPVOID,
+ ) -> c_int;
+ pub fn MoveToEx(
+ hdc: HDC,
+ X: c_int,
+ Y: c_int,
+ lpPoint:LPPOINT,
+ ) -> 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 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 PolyTextOutA(
+ hdc: HDC,
+ ppt: *const POLYTEXTA,
+ nstrings: c_int,
+ ) -> BOOL;
+ pub fn PolyTextOutW(
+ hdc: HDC,
+ ppt: *const POLYTEXTW,
+ nstrings: c_int,
+ ) -> BOOL;
+ pub fn CreatePolygonRgn(
+ lppt: *const POINT,
+ cPoints: c_int,
+ fnPolyFillMode: c_int,
+ ) -> HRGN;
+ pub fn DPtoLP(
+ hdc: HDC,
+ lppt: *mut POINT,
+ c: c_int,
+ ) -> BOOL;
+ pub fn LPtoDP(
+ hdc: HDC,
+ lppt: LPPOINT,
+ c: 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 PolyBezier(
+ hdc: HDC,
+ lppt: *const POINT,
+ cPoints: DWORD,
+ ) -> BOOL;
+ pub fn PolyBezierTo(
+ hdc: HDC,
+ lppt: *const POINT,
+ cPoints: DWORD,
+ ) -> BOOL;
+ pub fn PolylineTo(
+ hdc: HDC,
+ lppt: *const POINT,
+ cCount: DWORD,
+ ) -> BOOL;
+ pub fn SetViewportExtEx(
+ hdc: HDC,
+ x: c_int,
+ y: c_int,
+ lpsz: LPSIZE,
+ ) -> BOOL;
+ pub fn SetViewportOrgEx(
+ hdc: HDC,
+ x: c_int,
+ y: c_int,
+ lppt: *mut POINT,
+ ) -> BOOL;
+ pub fn SetWindowExtEx(
+ hdc: HDC,
+ x: c_int,
+ y: c_int,
+ lppt: LPSIZE,
+ ) -> BOOL;
+ pub fn SetWindowOrgEx(
+ hdc: HDC,
+ x: c_int,
+ y: c_int,
+ lppt: LPPOINT,
+ ) -> BOOL;
+ 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 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 SetBitmapDimensionEx(
+ hbm: HBITMAP,
+ w: c_int,
+ h: c_int,
+ lpsz: LPSIZE,
+ ) -> BOOL;
+ pub fn SetBrushOrgEx(
+ hdc: HDC,
+ x: c_int,
+ y: c_int,
+ lppt: LPPOINT,
+ ) -> 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;
+}
+STRUCT!{struct KERNINGPAIR {
+ wFirst: WORD,
+ wSecond: WORD,
+ iKernAmount: c_int,
+}}
+pub type LPKERNINGPAIR = *mut KERNINGPAIR;
+extern "system" {
+ pub fn GetKerningPairsA(
+ hdc: HDC,
+ nPairs: DWORD,
+ lpKernPair: LPKERNINGPAIR,
+ ) -> DWORD;
+ pub fn GetKerningPairsW(
+ hdc: HDC,
+ nPairs: DWORD,
+ lpKernPair: LPKERNINGPAIR,
+ ) -> DWORD;
+ pub fn GetDCOrgEx(
+ hdc: HDC,
+ lppt: LPPOINT,
+ ) -> BOOL;
+ pub fn FixBrushOrgEx(
+ hdc: HDC,
+ x: c_int,
+ y: c_int,
+ ptl: LPPOINT,
+ ) -> BOOL;
+ pub fn UnrealizeObject(
+ h: HGDIOBJ,
+ ) -> BOOL;
+ pub fn GdiFlush() -> BOOL;
+ pub fn GdiSetBatchLimit(
+ dw: DWORD,
+ ) -> DWORD;
+ pub fn GdiGetBatchLimit() -> DWORD;
+}
+pub const ICM_OFF: c_int = 1;
+pub const ICM_ON: c_int = 2;
+pub const ICM_QUERY: c_int = 3;
+pub const ICM_DONE_OUTSIDEDC: c_int = 4;
+FN!{stdcall ICMENUMPROCA(
+ LPSTR,
+ LPARAM,
+) -> c_int}
+FN!{stdcall ICMENUMPROCW(
+ LPWSTR,
+ LPARAM,
+) -> c_int}
+extern "system" {
+ pub fn SetICMMode(
+ hdc: HDC,
+ mode: c_int,
+ ) -> c_int;
+ pub fn CheckColorsInGamut(
+ hDC: HDC,
+ lpRGBTriples: LPVOID,
+ lpBuffer: LPVOID,
+ nCount: UINT,
+ ) -> BOOL;
+ pub fn GetColorSpace(
+ hdc: HDC,
+ ) -> HCOLORSPACE;
+ pub fn GetLogColorSpaceA(
+ hColorSpace: HCOLORSPACE,
+ lpBuffer: LPLOGCOLORSPACEA,
+ nSize: DWORD,
+ ) -> BOOL;
+ pub fn GetLogColorSpaceW(
+ hColorSpace: HCOLORSPACE,
+ lpBuffer: LPLOGCOLORSPACEW,
+ nSize: DWORD,
+ ) -> BOOL;
+ pub fn CreateColorSpaceA(
+ lpLogColorSpace: LPLOGCOLORSPACEA,
+ ) -> HCOLORSPACE;
+ pub fn CreateColorSpaceW(
+ lpLogColorSpace: LPLOGCOLORSPACEW,
+ ) -> HCOLORSPACE;
+ pub fn SetColorSpace(
+ hdc: HDC,
+ hcs: HCOLORSPACE,
+ ) -> HCOLORSPACE;
+ pub fn DeleteColorSpace(
+ hcs: HCOLORSPACE,
+ ) -> BOOL;
+ pub fn GetICMProfileA(
+ hdc: HDC,
+ pBufSize: LPDWORD,
+ pszFilename: LPSTR,
+ ) -> BOOL;
+ pub fn GetICMProfileW(
+ hdc: HDC,
+ pBufSize: LPDWORD,
+ pszFilename: LPWSTR,
+ ) -> BOOL;
+ pub fn SetICMProfileA(
+ hdc: HDC,
+ lpFileName: LPSTR,
+ ) -> BOOL;
+ pub fn SetICMProfileW(
+ hdc: HDC,
+ lpFileName: LPWSTR,
+ ) -> BOOL;
+ pub fn GetDeviceGammaRamp(
+ hdc: HDC,
+ lpRamp: LPVOID,
+ ) -> BOOL;
+ pub fn SetDeviceGammaRamp(
+ hdc: HDC,
+ lpRamp: LPVOID,
+ ) -> BOOL;
+ pub fn ColorMatchToTarget(
+ hDC: HDC,
+ hdcTarget: HDC,
+ uiAction: UINT,
+ ) -> BOOL;
+ pub fn EnumICMProfilesA(
+ hdc: HDC,
+ iproc: ICMENUMPROCA,
+ param: LPARAM,
+ ) -> c_int;
+ pub fn EnumICMProfilesW(
+ hdc: HDC,
+ iproc: ICMENUMPROCW,
+ param: LPARAM,
+ ) -> c_int;
+ 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 ColorCorrectPalette(
+ hDC: HDC,
+ hPalette: HPALETTE,
+ dwFirstEntry: DWORD,
+ dwNumOfEntries: DWORD,
+ ) -> BOOL;
+}
+pub const ENHMETA_SIGNATURE: DWORD = 0x464D4520;
+pub const ENHMETA_STOCK_OBJECT: DWORD = 0x80000000;
+pub const EMR_HEADER: DWORD = 1;
+pub const EMR_POLYBEZIER: DWORD = 2;
+pub const EMR_POLYGON: DWORD = 3;
+pub const EMR_POLYLINE: DWORD = 4;
+pub const EMR_POLYBEZIERTO: DWORD = 5;
+pub const EMR_POLYLINETO: DWORD = 6;
+pub const EMR_POLYPOLYLINE: DWORD = 7;
+pub const EMR_POLYPOLYGON: DWORD = 8;
+pub const EMR_SETWINDOWEXTEX: DWORD = 9;
+pub const EMR_SETWINDOWORGEX: DWORD = 10;
+pub const EMR_SETVIEWPORTEXTEX: DWORD = 11;
+pub const EMR_SETVIEWPORTORGEX: DWORD = 12;
+pub const EMR_SETBRUSHORGEX: DWORD = 13;
+pub const EMR_EOF: DWORD = 14;
+pub const EMR_SETPIXELV: DWORD = 15;
+pub const EMR_SETMAPPERFLAGS: DWORD = 16;
+pub const EMR_SETMAPMODE: DWORD = 17;
+pub const EMR_SETBKMODE: DWORD = 18;
+pub const EMR_SETPOLYFILLMODE: DWORD = 19;
+pub const EMR_SETROP2: DWORD = 20;
+pub const EMR_SETSTRETCHBLTMODE: DWORD = 21;
+pub const EMR_SETTEXTALIGN: DWORD = 22;
+pub const EMR_SETCOLORADJUSTMENT: DWORD = 23;
+pub const EMR_SETTEXTCOLOR: DWORD = 24;
+pub const EMR_SETBKCOLOR: DWORD = 25;
+pub const EMR_OFFSETCLIPRGN: DWORD = 26;
+pub const EMR_MOVETOEX: DWORD = 27;
+pub const EMR_SETMETARGN: DWORD = 28;
+pub const EMR_EXCLUDECLIPRECT: DWORD = 29;
+pub const EMR_INTERSECTCLIPRECT: DWORD = 30;
+pub const EMR_SCALEVIEWPORTEXTEX: DWORD = 31;
+pub const EMR_SCALEWINDOWEXTEX: DWORD = 32;
+pub const EMR_SAVEDC: DWORD = 33;
+pub const EMR_RESTOREDC: DWORD = 34;
+pub const EMR_SETWORLDTRANSFORM: DWORD = 35;
+pub const EMR_MODIFYWORLDTRANSFORM: DWORD = 36;
+pub const EMR_SELECTOBJECT: DWORD = 37;
+pub const EMR_CREATEPEN: DWORD = 38;
+pub const EMR_CREATEBRUSHINDIRECT: DWORD = 39;
+pub const EMR_DELETEOBJECT: DWORD = 40;
+pub const EMR_ANGLEARC: DWORD = 41;
+pub const EMR_ELLIPSE: DWORD = 42;
+pub const EMR_RECTANGLE: DWORD = 43;
+pub const EMR_ROUNDRECT: DWORD = 44;
+pub const EMR_ARC: DWORD = 45;
+pub const EMR_CHORD: DWORD = 46;
+pub const EMR_PIE: DWORD = 47;
+pub const EMR_SELECTPALETTE: DWORD = 48;
+pub const EMR_CREATEPALETTE: DWORD = 49;
+pub const EMR_SETPALETTEENTRIES: DWORD = 50;
+pub const EMR_RESIZEPALETTE: DWORD = 51;
+pub const EMR_REALIZEPALETTE: DWORD = 52;
+pub const EMR_EXTFLOODFILL: DWORD = 53;
+pub const EMR_LINETO: DWORD = 54;
+pub const EMR_ARCTO: DWORD = 55;
+pub const EMR_POLYDRAW: DWORD = 56;
+pub const EMR_SETARCDIRECTION: DWORD = 57;
+pub const EMR_SETMITERLIMIT: DWORD = 58;
+pub const EMR_BEGINPATH: DWORD = 59;
+pub const EMR_ENDPATH: DWORD = 60;
+pub const EMR_CLOSEFIGURE: DWORD = 61;
+pub const EMR_FILLPATH: DWORD = 62;
+pub const EMR_STROKEANDFILLPATH: DWORD = 63;
+pub const EMR_STROKEPATH: DWORD = 64;
+pub const EMR_FLATTENPATH: DWORD = 65;
+pub const EMR_WIDENPATH: DWORD = 66;
+pub const EMR_SELECTCLIPPATH: DWORD = 67;
+pub const EMR_ABORTPATH: DWORD = 68;
+pub const EMR_GDICOMMENT: DWORD = 70;
+pub const EMR_FILLRGN: DWORD = 71;
+pub const EMR_FRAMERGN: DWORD = 72;
+pub const EMR_INVERTRGN: DWORD = 73;
+pub const EMR_PAINTRGN: DWORD = 74;
+pub const EMR_EXTSELECTCLIPRGN: DWORD = 75;
+pub const EMR_BITBLT: DWORD = 76;
+pub const EMR_STRETCHBLT: DWORD = 77;
+pub const EMR_MASKBLT: DWORD = 78;
+pub const EMR_PLGBLT: DWORD = 79;
+pub const EMR_SETDIBITSTODEVICE: DWORD = 80;
+pub const EMR_STRETCHDIBITS: DWORD = 81;
+pub const EMR_EXTCREATEFONTINDIRECTW: DWORD = 82;
+pub const EMR_EXTTEXTOUTA: DWORD = 83;
+pub const EMR_EXTTEXTOUTW: DWORD = 84;
+pub const EMR_POLYBEZIER16: DWORD = 85;
+pub const EMR_POLYGON16: DWORD = 86;
+pub const EMR_POLYLINE16: DWORD = 87;
+pub const EMR_POLYBEZIERTO16: DWORD = 88;
+pub const EMR_POLYLINETO16: DWORD = 89;
+pub const EMR_POLYPOLYLINE16: DWORD = 90;
+pub const EMR_POLYPOLYGON16: DWORD = 91;
+pub const EMR_POLYDRAW16: DWORD = 92;
+pub const EMR_CREATEMONOBRUSH: DWORD = 93;
+pub const EMR_CREATEDIBPATTERNBRUSHPT: DWORD = 94;
+pub const EMR_EXTCREATEPEN: DWORD = 95;
+pub const EMR_POLYTEXTOUTA: DWORD = 96;
+pub const EMR_POLYTEXTOUTW: DWORD = 97;
+pub const EMR_SETICMMODE: DWORD = 98;
+pub const EMR_CREATECOLORSPACE: DWORD = 99;
+pub const EMR_SETCOLORSPACE: DWORD = 100;
+pub const EMR_DELETECOLORSPACE: DWORD = 101;
+pub const EMR_GLSRECORD: DWORD = 102;
+pub const EMR_GLSBOUNDEDRECORD: DWORD = 103;
+pub const EMR_PIXELFORMAT: DWORD = 104;
+pub const EMR_RESERVED_105: DWORD = 105;
+pub const EMR_RESERVED_106: DWORD = 106;
+pub const EMR_RESERVED_107: DWORD = 107;
+pub const EMR_RESERVED_108: DWORD = 108;
+pub const EMR_RESERVED_109: DWORD = 109;
+pub const EMR_RESERVED_110: DWORD = 110;
+pub const EMR_COLORCORRECTPALETTE: DWORD = 111;
+pub const EMR_SETICMPROFILEA: DWORD = 112;
+pub const EMR_SETICMPROFILEW: DWORD = 113;
+pub const EMR_ALPHABLEND: DWORD = 114;
+pub const EMR_SETLAYOUT: DWORD = 115;
+pub const EMR_TRANSPARENTBLT: DWORD = 116;
+pub const EMR_RESERVED_117: DWORD = 117;
+pub const EMR_GRADIENTFILL: DWORD = 118;
+pub const EMR_RESERVED_119: DWORD = 119;
+pub const EMR_RESERVED_120: DWORD = 120;
+pub const EMR_COLORMATCHTOTARGETW: DWORD = 121;
+pub const EMR_CREATECOLORSPACEW: DWORD = 122;
+pub const EMR_MIN: DWORD = 1;
+pub const EMR_MAX: DWORD = 122;
+STRUCT!{struct EMR {
+ iType: DWORD,
+ nSize: DWORD,
+}}
+pub type PEMR = *mut EMR;
+STRUCT!{struct EMRTEXT {
+ ptlReference: POINTL,
+ nChars: DWORD,
+ offString: DWORD,
+ fOptions: DWORD,
+ rcl: RECTL,
+ offDx: DWORD,
+}}
+pub type PEMRTEXT = *mut EMRTEXT;
+STRUCT!{struct EMRABORTPATH {
+ emr: EMR,
+}}
+pub type PEMRABORTPATH = *mut EMRABORTPATH;
+pub type EMRBEGINPATH = EMRABORTPATH;
+pub type PEMRBEGINPATH = *mut EMRABORTPATH;
+pub type EMRENDPATH = EMRABORTPATH;
+pub type PEMRENDPATH = *mut EMRABORTPATH;
+pub type EMRCLOSEFIGURE = EMRABORTPATH;
+pub type PEMRCLOSEFIGURE = *mut EMRABORTPATH;
+pub type EMRFLATTENPATH = EMRABORTPATH;
+pub type PEMRFLATTENPATH = *mut EMRABORTPATH;
+pub type EMRWIDENPATH = EMRABORTPATH;
+pub type PEMRWIDENPATH = *mut EMRABORTPATH;
+pub type EMRSETMETARGN = EMRABORTPATH;
+pub type PEMRSETMETARGN = *mut EMRABORTPATH;
+pub type EMRSAVEDC = EMRABORTPATH;
+pub type PEMRSAVEDC = *mut EMRABORTPATH;
+pub type EMRREALIZEPALETTE = EMRABORTPATH;
+pub type PEMRREALIZEPALETTE = *mut EMRABORTPATH;
+STRUCT!{struct EMRSELECTCLIPPATH {
+ emr: EMR,
+ iMode: DWORD,
+}}
+pub type PEMRSELECTCLIPPATH = *mut EMRSELECTCLIPPATH;
+pub type EMRSETBKMODE = EMRSELECTCLIPPATH;
+pub type PEMRSETBKMODE = *mut EMRSELECTCLIPPATH;
+pub type EMRSETMAPMODE = EMRSELECTCLIPPATH;
+pub type PEMRSETMAPMODE = *mut EMRSELECTCLIPPATH;
+pub type EMRSETLAYOUT = EMRSELECTCLIPPATH;
+pub type PEMRSETLAYOUT = *mut EMRSELECTCLIPPATH;
+pub type EMRSETPOLYFILLMODE = EMRSELECTCLIPPATH;
+pub type PEMRSETPOLYFILLMODE = *mut EMRSELECTCLIPPATH;
+pub type EMRSETROP2 = EMRSELECTCLIPPATH;
+pub type PEMRSETROP2 = *mut EMRSELECTCLIPPATH;
+pub type EMRSETSTRETCHBLTMODE = EMRSELECTCLIPPATH;
+pub type PEMRSETSTRETCHBLTMODE = *mut EMRSELECTCLIPPATH;
+pub type EMRSETICMMODE = EMRSELECTCLIPPATH;
+pub type PEMRSETICMMODE = *mut EMRSELECTCLIPPATH;
+pub type EMRSETTEXTALIGN = EMRSELECTCLIPPATH;
+pub type PEMRSETTEXTALIGN = *mut EMRSELECTCLIPPATH;
+STRUCT!{struct EMRSETMITERLIMIT {
+ emr: EMR,
+ eMiterLimit: FLOAT,
+}}
+pub type PEMRSETMITERLIMIT = *mut EMRSETMITERLIMIT;
+STRUCT!{struct EMRRESTOREDC {
+ emr: EMR,
+ iRelative: LONG,
+}}
+pub type PEMRRESTOREDC = *mut EMRRESTOREDC;
+STRUCT!{struct EMRSETARCDIRECTION {
+ emr: EMR,
+ iArcDirection: DWORD,
+}}
+pub type PEMRSETARCDIRECTION = *mut EMRSETARCDIRECTION;
+STRUCT!{struct EMRSETMAPPERFLAGS {
+ emr: EMR,
+ dwFlags: DWORD,
+}}
+pub type PEMRSETMAPPERFLAGS = *mut EMRSETMAPPERFLAGS;
+STRUCT!{struct EMRSETBKCOLOR {
+ emr: EMR,
+ crColor: COLORREF,
+}}
+pub type PEMRSETBKCOLOR = *mut EMRSETBKCOLOR;
+pub type EMRSETTEXTCOLOR = EMRSETBKCOLOR;
+pub type PEMRSETTEXTCOLOR = *mut EMRSETBKCOLOR;
+STRUCT!{struct EMRSELECTOBJECT {
+ emr: EMR,
+ ihObject: DWORD,
+}}
+pub type PEMRSELECTOBJECT = *mut EMRSELECTOBJECT;
+pub type EMRDELETEOBJECT = EMRSELECTOBJECT;
+pub type PEMRDELETEOBJECT = *mut EMRSELECTOBJECT;
+STRUCT!{struct EMRSELECTPALETTE {
+ emr: EMR,
+ ihPal: DWORD,
+}}
+pub type PEMRSELECTPALETTE = *mut EMRSELECTPALETTE;
+STRUCT!{struct EMRRESIZEPALETTE {
+ emr: EMR,
+ ihPal: DWORD,
+ cEntries: DWORD,
+}}
+pub type PEMRRESIZEPALETTE = *mut EMRRESIZEPALETTE;
+STRUCT!{struct EMRSETPALETTEENTRIES {
+ emr: EMR,
+ ihPal: DWORD,
+ iStart: DWORD,
+ cEntries: DWORD,
+ aPalEntries: [PALETTEENTRY; 1],
+}}
+pub type PEMRSETPALETTEENTRIES = *mut EMRSETPALETTEENTRIES;
+STRUCT!{struct EMRSETCOLORADJUSTMENT {
+ emr: EMR,
+ ColorAdjustment: COLORADJUSTMENT,
+}}
+pub type PEMRSETCOLORADJUSTMENT = *mut EMRSETCOLORADJUSTMENT;
+STRUCT!{struct EMRGDICOMMENT {
+ emr: EMR,
+ cbData: DWORD,
+ Data: [BYTE; 1],
+}}
+pub type PEMRGDICOMMENT = *mut EMRGDICOMMENT;
+STRUCT!{struct EMREOF {
+ emr: EMR,
+ nPalEntries: DWORD,
+ offPalEntries: DWORD,
+ nSizeLast: DWORD,
+}}
+pub type PEMREOF = *mut EMREOF;
+STRUCT!{struct EMRLINETO {
+ emr: EMR,
+ ptl: POINTL,
+}}
+pub type PEMRLINETO = *mut EMRLINETO;
+pub type EMRMOVETOEX = EMRLINETO;
+pub type PEMRMOVETOEX = *mut EMRLINETO;
+STRUCT!{struct EMROFFSETCLIPRGN {
+ emr: EMR,
+ ptlOffset: POINTL,
+}}
+pub type PEMROFFSETCLIPRGN = *mut EMROFFSETCLIPRGN;
+STRUCT!{struct EMRFILLPATH {
+ emr: EMR,
+ rclBounds: RECTL,
+}}
+pub type PEMRFILLPATH = *mut EMRFILLPATH;
+pub type EMRSTROKEANDFILLPATH = EMRFILLPATH;
+pub type PEMRSTROKEANDFILLPATH = *mut EMRFILLPATH;
+pub type EMRSTROKEPATH = EMRFILLPATH;
+pub type PEMRSTROKEPATH = *mut EMRFILLPATH;
+STRUCT!{struct EMREXCLUDECLIPRECT {
+ emr: EMR,
+ rclClip: RECTL,
+}}
+pub type PEMREXCLUDECLIPRECT = *mut EMREXCLUDECLIPRECT;
+pub type EMRINTERSECTCLIPRECT = EMREXCLUDECLIPRECT;
+pub type PEMRINTERSECTCLIPRECT = *mut EMREXCLUDECLIPRECT;
+STRUCT!{struct EMRSETVIEWPORTORGEX {
+ emr: EMR,
+ ptlOrigin: POINTL,
+}}
+pub type PEMRSETVIEWPORTORGEX = *mut EMRSETVIEWPORTORGEX;
+pub type EMRSETWINDOWORGEX = EMRSETVIEWPORTORGEX;
+pub type PEMRSETWINDOWORGEX = *mut EMRSETVIEWPORTORGEX;
+pub type EMRSETBRUSHORGEX = EMRSETVIEWPORTORGEX;
+pub type PEMRSETBRUSHORGEX = *mut EMRSETVIEWPORTORGEX;
+STRUCT!{struct EMRSETVIEWPORTEXTEX {
+ emr: EMR,
+ szlExtent: SIZEL,
+}}
+pub type PEMRSETVIEWPORTEXTEX = *mut EMRSETVIEWPORTEXTEX;
+pub type EMRSETWINDOWEXTEX = EMRSETVIEWPORTEXTEX;
+pub type PEMRSETWINDOWEXTEX = *mut EMRSETVIEWPORTEXTEX;
+STRUCT!{struct EMRSCALEVIEWPORTEXTEX {
+ emr: EMR,
+ xNum: LONG,
+ xDenom: LONG,
+ yNum: LONG,
+ yDenom: LONG,
+}}
+pub type PEMRSCALEVIEWPORTEXTEX = *mut EMRSCALEVIEWPORTEXTEX;
+pub type EMRSCALEWINDOWEXTEX = EMRSCALEVIEWPORTEXTEX;
+pub type PEMRSCALEWINDOWEXTEX = *mut EMRSCALEVIEWPORTEXTEX;
+STRUCT!{struct EMRSETWORLDTRANSFORM {
+ emr: EMR,
+ xform: XFORM,
+}}
+pub type PEMRSETWORLDTRANSFORM = *mut EMRSETWORLDTRANSFORM;
+STRUCT!{struct EMRMODIFYWORLDTRANSFORM {
+ emr: EMR,
+ xform: XFORM,
+ iMode: DWORD,
+}}
+pub type PEMRMODIFYWORLDTRANSFORM = *mut EMRMODIFYWORLDTRANSFORM;
+STRUCT!{struct EMRSETPIXELV {
+ emr: EMR,
+ ptlPixel: POINTL,
+ crColor: COLORREF,
+}}
+pub type PEMRSETPIXELV = *mut EMRSETPIXELV;
+STRUCT!{struct EMREXTFLOODFILL {
+ emr: EMR,
+ ptlStart: POINTL,
+ crColor: COLORREF,
+ iMode: DWORD,
+}}
+pub type PEMREXTFLOODFILL = *mut EMREXTFLOODFILL;
+STRUCT!{struct EMRELLIPSE {
+ emr: EMR,
+ rclBox: RECTL,
+}}
+pub type PEMRELLIPSE = *mut EMRELLIPSE;
+pub type EMRRECTANGLE = EMRELLIPSE;
+pub type PEMRRECTANGLE = *mut EMRELLIPSE;
+STRUCT!{struct EMRROUNDRECT {
+ emr: EMR,
+ rclBox: RECTL,
+ szlCorner: SIZEL,
+}}
+pub type PEMRROUNDRECT = *mut EMRROUNDRECT;
+STRUCT!{struct EMRARC {
+ emr: EMR,
+ rclBox: RECTL,
+ ptlStart: POINTL,
+ ptlEnd: POINTL,
+}}
+pub type PEMRARC = *mut EMRARC;
+pub type EMRARCTO = EMRARC;
+pub type PEMRARCTO = *mut EMRARC;
+pub type EMRCHORD = EMRARC;
+pub type PEMRCHORD = *mut EMRARC;
+pub type EMRPIE = EMRARC;
+pub type PEMRPIE = *mut EMRARC;
+STRUCT!{struct EMRANGLEARC {
+ emr: EMR,
+ ptlCenter: POINTL,
+ nRadius: DWORD,
+ eStartAngle: FLOAT,
+ eSweepAngle: FLOAT,
+}}
+pub type PEMRANGLEARC = *mut EMRANGLEARC;
+STRUCT!{struct EMRPOLYLINE {
+ emr: EMR,
+ rclBounds: RECTL,
+ cptl: DWORD,
+ aptl: [POINTL; 1],
+}}
+pub type PEMRPOLYLINE = *mut EMRPOLYLINE;
+pub type EMRPOLYBEZIER = EMRPOLYLINE;
+pub type PEMRPOLYBEZIER = *mut EMRPOLYLINE;
+pub type EMRPOLYGON = EMRPOLYLINE;
+pub type PEMRPOLYGON = *mut EMRPOLYLINE;
+pub type EMRPOLYBEZIERTO = EMRPOLYLINE;
+pub type PEMRPOLYBEZIERTO = *mut EMRPOLYLINE;
+pub type EMRPOLYLINETO = EMRPOLYLINE;
+pub type PEMRPOLYLINETO = *mut EMRPOLYLINE;
+STRUCT!{struct EMRPOLYLINE16 {
+ emr: EMR,
+ rclBounds: RECTL,
+ cpts: DWORD,
+ apts: [POINTS; 1],
+}}
+pub type PEMRPOLYLINE16 = *mut EMRPOLYLINE16;
+pub type EMRPOLYBEZIER16 = EMRPOLYLINE16;
+pub type PEMRPOLYBEZIER16 = *mut EMRPOLYLINE16;
+pub type EMRPOLYGON16 = EMRPOLYLINE16;
+pub type PEMRPOLYGON16 = *mut EMRPOLYLINE16;
+pub type EMRPOLYBEZIERTO16 = EMRPOLYLINE16;
+pub type PEMRPOLYBEZIERTO16 = *mut EMRPOLYLINE16;
+pub type EMRPOLYLINETO16 = EMRPOLYLINE16;
+pub type PEMRPOLYLINETO16 = *mut EMRPOLYLINE16;
+STRUCT!{struct EMRPOLYDRAW {
+ emr: EMR,
+ rclBounds: RECTL,
+ cptl: DWORD,
+ aptl: [POINTL; 1],
+ abTypes: [BYTE; 1],
+}}
+pub type PEMRPOLYDRAW = *mut EMRPOLYDRAW;
+STRUCT!{struct EMRPOLYDRAW16 {
+ emr: EMR,
+ rclBounds: RECTL,
+ cpts: DWORD,
+ apts: [POINTS; 1],
+ abTypes: [BYTE; 1],
+}}
+pub type PEMRPOLYDRAW16 = *mut EMRPOLYDRAW16;
+STRUCT!{struct EMRPOLYPOLYLINE {
+ emr: EMR,
+ rclBounds: RECTL,
+ nPolys: DWORD,
+ cptl: DWORD,
+ aPolyCounts: [DWORD; 1],
+ aptl: [POINTL; 1],
+}}
+pub type PEMRPOLYPOLYLINE = *mut EMRPOLYPOLYLINE;
+pub type EMRPOLYPOLYGON = EMRPOLYPOLYLINE;
+pub type PEMRPOLYPOLYGON = *mut EMRPOLYPOLYLINE;
+STRUCT!{struct EMRPOLYPOLYLINE16 {
+ emr: EMR,
+ rclBounds: RECTL,
+ nPolys: DWORD,
+ cpts: DWORD,
+ aPolyCounts: [DWORD; 1],
+ apts: [POINTS; 1],
+}}
+pub type PEMRPOLYPOLYLINE16 = *mut EMRPOLYPOLYLINE16;
+pub type EMRPOLYPOLYGON16 = EMRPOLYPOLYLINE16;
+pub type PEMRPOLYPOLYGON16 = *mut EMRPOLYPOLYLINE16;
+STRUCT!{struct EMRINVERTRGN {
+ emr: EMR,
+ rclBounds: RECTL,
+ cbRgnData: DWORD,
+ RgnData: [BYTE; 1],
+}}
+pub type PEMRINVERTRGN = *mut EMRINVERTRGN;
+pub type EMRPAINTRGN = EMRINVERTRGN;
+pub type PEMRPAINTRGN = *mut EMRINVERTRGN;
+STRUCT!{struct EMRFILLRGN {
+ emr: EMR,
+ rclBounds: RECTL,
+ cbRgnData: DWORD,
+ ihBrush: DWORD,
+ RgnData: [BYTE; 1],
+}}
+pub type PEMRFILLRGN = *mut EMRFILLRGN;
+STRUCT!{struct EMRFRAMERGN {
+ emr: EMR,
+ rclBounds: RECTL,
+ cbRgnData: DWORD,
+ ihBrush: DWORD,
+ szlStroke: SIZEL,
+ RgnData: [BYTE; 1],
+}}
+pub type PEMRFRAMERGN = *mut EMRFRAMERGN;
+STRUCT!{struct EMREXTSELECTCLIPRGN {
+ emr: EMR,
+ cbRgnData: DWORD,
+ iMode: DWORD,
+ RgnData: [BYTE; 1],
+}}
+pub type PEMREXTSELECTCLIPRGN = *mut EMREXTSELECTCLIPRGN;
+STRUCT!{struct EMREXTTEXTOUTA {
+ emr: EMR,
+ rclBounds: RECTL,
+ iGraphicsMode: DWORD,
+ exScale: FLOAT,
+ eyScale: FLOAT,
+ emrtext: EMRTEXT,
+}}
+pub type PEMREXTTEXTOUTA = *mut EMREXTTEXTOUTA;
+pub type EMREXTTEXTOUTW = EMREXTTEXTOUTA;
+pub type PEMREXTTEXTOUTW = *mut EMREXTTEXTOUTA;
+STRUCT!{struct EMRPOLYTEXTOUTA {
+ emr: EMR,
+ rclBounds: RECTL,
+ iGraphicsMode: DWORD,
+ exScale: FLOAT,
+ eyScale: FLOAT,
+ cStrings: LONG,
+ aemrtext: [EMRTEXT; 1],
+}}
+pub type PEMRPOLYTEXTOUTA = *mut EMRPOLYTEXTOUTA;
+pub type EMRPOLYTEXTOUTW = EMRPOLYTEXTOUTA;
+pub type PEMRPOLYTEXTOUTW = *mut EMRPOLYTEXTOUTA;
+STRUCT!{struct EMRBITBLT {
+ emr: EMR,
+ rclBounds: RECTL,
+ xDest: LONG,
+ yDest: LONG,
+ cxDest: LONG,
+ cyDest: LONG,
+ dwRop: DWORD,
+ xSrc: LONG,
+ ySrc: LONG,
+ xformSrc: XFORM,
+ crBkColorSrc: COLORREF,
+ iUsageSrc: DWORD,
+ offBmiSrc: DWORD,
+ cbBmiSrc: DWORD,
+ offBitsSrc: DWORD,
+ cbBitsSrc: DWORD,
+}}
+pub type PEMRBITBLT = *mut EMRBITBLT;
+STRUCT!{struct EMRSTRETCHBLT {
+ emr: EMR,
+ rclBounds: RECTL,
+ xDest: LONG,
+ yDest: LONG,
+ cxDest: LONG,
+ cyDest: LONG,
+ dwRop: DWORD,
+ xSrc: LONG,
+ ySrc: LONG,
+ xformSrc: XFORM,
+ crBkColorSrc: COLORREF,
+ iUsageSrc: DWORD,
+ offBmiSrc: DWORD,
+ cbBmiSrc: DWORD,
+ offBitsSrc: DWORD,
+ cbBitsSrc: DWORD,
+ cxSrc: LONG,
+ cySrc: LONG,
+}}
+pub type PEMRSTRETCHBLT = *mut EMRSTRETCHBLT;
+STRUCT!{struct EMRMASKBLT {
+ emr: EMR,
+ rclBounds: RECTL,
+ xDest: LONG,
+ yDest: LONG,
+ cxDest: LONG,
+ cyDest: LONG,
+ dwRop: DWORD,
+ xSrc: LONG,
+ ySrc: LONG,
+ xformSrc: XFORM,
+ crBkColorSrc: COLORREF,
+ iUsageSrc: DWORD,
+ offBmiSrc: DWORD,
+ cbBmiSrc: DWORD,
+ offBitsSrc: DWORD,
+ cbBitsSrc: DWORD,
+ xMask: LONG,
+ yMask: LONG,
+ iUsageMask: DWORD,
+ offBmiMask: DWORD,
+ cbBmiMask: DWORD,
+ offBitsMask: DWORD,
+ cbBitsMask: DWORD,
+}}
+pub type PEMRMASKBLT = *mut EMRMASKBLT;
+STRUCT!{struct EMRPLGBLT {
+ emr: EMR,
+ rclBounds: RECTL,
+ aptlDest: [POINTL; 3],
+ xSrc: LONG,
+ ySrc: LONG,
+ cxSrc: LONG,
+ cySrc: LONG,
+ xformSrc: XFORM,
+ crBkColorSrc: COLORREF,
+ iUsageSrc: DWORD,
+ offBmiSrc: DWORD,
+ cbBmiSrc: DWORD,
+ offBitsSrc: DWORD,
+ cbBitsSrc: DWORD,
+ xMask: LONG,
+ yMask: LONG,
+ iUsageMask: DWORD,
+ offBmiMask: DWORD,
+ cbBmiMask: DWORD,
+ offBitsMask: DWORD,
+ cbBitsMask: DWORD,
+}}
+pub type PEMRPLGBLT = *mut EMRPLGBLT;
+STRUCT!{struct EMRSETDIBITSTODEVICE {
+ emr: EMR,
+ rclBounds: RECTL,
+ xDest: LONG,
+ yDest: LONG,
+ xSrc: LONG,
+ ySrc: LONG,
+ cxSrc: LONG,
+ cySrc: LONG,
+ offBmiSrc: DWORD,
+ cbBmiSrc: DWORD,
+ offBitsSrc: DWORD,
+ cbBitsSrc: DWORD,
+ iUsageSrc: DWORD,
+ iStartScan: DWORD,
+ cScans: DWORD,
+}}
+pub type PEMRSETDIBITSTODEVICE = *mut EMRSETDIBITSTODEVICE;
+STRUCT!{struct EMRSTRETCHDIBITS {
+ emr: EMR,
+ rclBounds: RECTL,
+ xDest: LONG,
+ yDest: LONG,
+ xSrc: LONG,
+ ySrc: LONG,
+ cxSrc: LONG,
+ cySrc: LONG,
+ offBmiSrc: DWORD,
+ cbBmiSrc: DWORD,
+ offBitsSrc: DWORD,
+ cbBitsSrc: DWORD,
+ iUsageSrc: DWORD,
+ dwRop: DWORD,
+ cxDest: LONG,
+ cyDest: LONG,
+}}
+pub type PEMRSTRETCHDIBITS = *mut EMRSTRETCHDIBITS;
+STRUCT!{struct EMREXTCREATEFONTINDIRECTW {
+ emr: EMR,
+ ihFont: DWORD,
+ elfw: EXTLOGFONTW,
+}}
+pub type PEMREXTCREATEFONTINDIRECTW = *mut EMREXTCREATEFONTINDIRECTW;
+STRUCT!{struct EMRCREATEPALETTE {
+ emr: EMR,
+ ihPal: DWORD,
+ lgpl: LOGPALETTE,
+}}
+pub type PEMRCREATEPALETTE = *mut EMRCREATEPALETTE;
+STRUCT!{struct EMRCREATEPEN {
+ emr: EMR,
+ ihPen: DWORD,
+ lopn: LOGPEN,
+}}
+pub type PEMRCREATEPEN = *mut EMRCREATEPEN;
+STRUCT!{struct EMREXTCREATEPEN {
+ emr: EMR,
+ ihPen: DWORD,
+ offBmi: DWORD,
+ cbBmi: DWORD,
+ offBits: DWORD,
+ cbBits: DWORD,
+ elp: EXTLOGPEN32,
+}}
+pub type PEMREXTCREATEPEN = *mut EMREXTCREATEPEN;
+STRUCT!{struct EMRCREATEBRUSHINDIRECT {
+ emr: EMR,
+ ihBrush: DWORD,
+ lb: LOGBRUSH32,
+}}
+pub type PEMRCREATEBRUSHINDIRECT = *mut EMRCREATEBRUSHINDIRECT;
+STRUCT!{struct EMRCREATEMONOBRUSH {
+ emr: EMR,
+ ihBrush: DWORD,
+ iUsage: DWORD,
+ offBmi: DWORD,
+ cbBmi: DWORD,
+ offBits: DWORD,
+ cbBits: DWORD,
+}}
+pub type PEMRCREATEMONOBRUSH = *mut EMRCREATEMONOBRUSH;
+STRUCT!{struct EMRCREATEDIBPATTERNBRUSHPT {
+ emr: EMR,
+ ihBrush: DWORD,
+ iUsage: DWORD,
+ offBmi: DWORD,
+ cbBmi: DWORD,
+ offBits: DWORD,
+ cbBits: DWORD,
+}}
+pub type PEMRCREATEDIBPATTERNBRUSHPT = *mut EMRCREATEDIBPATTERNBRUSHPT;
+STRUCT!{struct EMRFORMAT {
+ dSignature: DWORD,
+ nVersion: DWORD,
+ cbData: DWORD,
+ offData: DWORD,
+}}
+pub type PEMRFORMAT = *mut EMRFORMAT;
+STRUCT!{struct EMRGLSRECORD {
+ emr: EMR,
+ cbData: DWORD,
+ Data: [BYTE; 1],
+}}
+pub type PEMRGLSRECORD = *mut EMRGLSRECORD;
+STRUCT!{struct EMRGLSBOUNDEDRECORD {
+ emr: EMR,
+ rclBounds: RECTL,
+ cbData: DWORD,
+ Data: [BYTE; 1],
+}}
+pub type PEMRGLSBOUNDEDRECORD = *mut EMRGLSBOUNDEDRECORD;
+STRUCT!{struct EMRPIXELFORMAT {
+ emr: EMR,
+ pfd: PIXELFORMATDESCRIPTOR,
+}}
+pub type PEMRPIXELFORMAT = *mut EMRPIXELFORMAT;
+STRUCT!{struct EMRCREATECOLORSPACE {
+ emr: EMR,
+ ihCS: DWORD,
+ lcs: LOGCOLORSPACEA,
+}}
+pub type PEMRCREATECOLORSPACE = *mut EMRCREATECOLORSPACE;
+STRUCT!{struct EMRSETCOLORSPACE {
+ emr: EMR,
+ ihCS: DWORD,
+}}
+pub type PEMRSETCOLORSPACE = *mut EMRSETCOLORSPACE;
+pub type EMRSELECTCOLORSPACE = EMRSETCOLORSPACE;
+pub type PEMRSELECTCOLORSPACE = *mut EMRSETCOLORSPACE;
+pub type EMRDELETECOLORSPACE = EMRSETCOLORSPACE;
+pub type PEMRDELETECOLORSPACE = *mut EMRSETCOLORSPACE;
+STRUCT!{struct EMREXTESCAPE {
+ emr: EMR,
+ iEscape: INT,
+ cbEscData: INT,
+ EscData: [BYTE; 1],
+}}
+pub type PEMREXTESCAPE = *mut EMREXTESCAPE;
+pub type EMRDRAWESCAPE = EMREXTESCAPE;
+pub type PEMRDRAWESCAPE = *mut EMREXTESCAPE;
+STRUCT!{struct EMRNAMEDESCAPE {
+ emr: EMR,
+ iEscape: INT,
+ cbDriver: INT,
+ cbEscData: INT,
+ EscData: [BYTE; 1],
+}}
+pub type PEMRNAMEDESCAPE = *mut EMRNAMEDESCAPE;
+pub const SETICMPROFILE_EMBEDED: DWORD = 0x00000001;
+STRUCT!{struct EMRSETICMPROFILE {
+ emr: EMR,
+ dwFlags: DWORD,
+ cbName: DWORD,
+ cbData: DWORD,
+ Data: [BYTE; 1],
+}}
+pub type PEMRSETICMPROFILE = *mut EMRSETICMPROFILE;
+pub type EMRSETICMPROFILEA = EMRSETICMPROFILE;
+pub type PEMRSETICMPROFILEA = *mut EMRSETICMPROFILE;
+pub type EMRSETICMPROFILEW = EMRSETICMPROFILE;
+pub type PEMRSETICMPROFILEW = *mut EMRSETICMPROFILE;
+pub const CREATECOLORSPACE_EMBEDED: DWORD = 0x00000001;
+STRUCT!{struct EMRCREATECOLORSPACEW {
+ emr: EMR,
+ ihCS: DWORD,
+ lcs: LOGCOLORSPACEW,
+ dwFlags: DWORD,
+ cbData: DWORD,
+ Data: [BYTE; 1],
+}}
+pub type PEMRCREATECOLORSPACEW = *mut EMRCREATECOLORSPACEW;
+pub const COLORMATCHTOTARGET_EMBEDED: DWORD = 0x00000001;
+STRUCT!{struct EMRCOLORMATCHTOTARGET {
+ emr: EMR,
+ dwAction: DWORD,
+ dwFlags: DWORD,
+ cbName: DWORD,
+ cbData: DWORD,
+ Data: [BYTE; 1],
+}}
+pub type PEMRCOLORMATCHTOTARGET = *mut EMRCOLORMATCHTOTARGET;
+STRUCT!{struct EMRCOLORCORRECTPALETTE {
+ emr: EMR,
+ ihPalette: DWORD,
+ nFirstEntry: DWORD,
+ nPalEntries: DWORD,
+ nReserved: DWORD,
+}}
+pub type PEMRCOLORCORRECTPALETTE = *mut EMRCOLORCORRECTPALETTE;
+STRUCT!{struct EMRALPHABLEND {
+ emr: EMR,
+ rclBounds: RECTL,
+ xDest: LONG,
+ yDest: LONG,
+ cxDest: LONG,
+ cyDest: LONG,
+ dwRop: DWORD,
+ xSrc: LONG,
+ ySrc: LONG,
+ xformSrc: XFORM,
+ crBkColorSrc: COLORREF,
+ iUsageSrc: DWORD,
+ offBmiSrc: DWORD,
+ cbBmiSrc: DWORD,
+ offBitsSrc: DWORD,
+ cbBitsSrc: DWORD,
+ cxSrc: LONG,
+ cySrc: LONG,
+}}
+pub type PEMRALPHABLEND = *mut EMRALPHABLEND;
+STRUCT!{struct EMRGRADIENTFILL {
+ emr: EMR,
+ rclBounds: RECTL,
+ nVer: DWORD,
+ nTri: DWORD,
+ ulMode: ULONG,
+ Ver: [TRIVERTEX; 1],
+}}
+pub type PEMRGRADIENTFILL = *mut EMRGRADIENTFILL;
+STRUCT!{struct EMRTRANSPARENTBLT {
+ emr: EMR,
+ rclBounds: RECTL,
+ xDest: LONG,
+ yDest: LONG,
+ cxDest: LONG,
+ cyDest: LONG,
+ dwRop: DWORD,
+ xSrc: LONG,
+ ySrc: LONG,
+ xformSrc: XFORM,
+ crBkColorSrc: COLORREF,
+ iUsageSrc: DWORD,
+ offBmiSrc: DWORD,
+ cbBmiSrc: DWORD,
+ offBitsSrc: DWORD,
+ cbBitsSrc: DWORD,
+ cxSrc: LONG,
+ cySrc: LONG,
+}}
+pub type PEMRTRANSPARENTBLT = *mut EMRTRANSPARENTBLT;
+pub const GDICOMMENT_IDENTIFIER: DWORD = 0x43494447;
+pub const GDICOMMENT_WINDOWS_METAFILE: DWORD = 0x80000001;
+pub const GDICOMMENT_BEGINGROUP: DWORD = 0x00000002;
+pub const GDICOMMENT_ENDGROUP: DWORD = 0x00000003;
+pub const GDICOMMENT_MULTIFORMATS: DWORD = 0x40000004;
+pub const EPS_SIGNATURE: DWORD = 0x46535045;
+pub const GDICOMMENT_UNICODE_STRING: DWORD = 0x00000040;
+pub const GDICOMMENT_UNICODE_END: DWORD = 0x00000080;
+extern "system" {
+ pub fn wglCopyContext(
+ hglrcSrc: HGLRC,
+ hglrcDst: HGLRC,
+ mask: UINT,
+ ) -> BOOL;
+ pub fn wglCreateContext(
+ hdc: HDC,
+ ) -> HGLRC;
+ pub fn wglCreateLayerContext(
+ hdc: HDC,
+ iLayerPlane: c_int,
+ ) -> HGLRC;
+ pub fn wglDeleteContext(
+ hglrc: HGLRC,
+ ) -> BOOL;
+ pub fn wglGetCurrentContext() -> HGLRC;
+ pub fn wglGetCurrentDC() -> HDC;
+ pub fn wglGetProcAddress(
+ lpszProc: LPCSTR,
+ ) -> PROC;
+ pub fn wglMakeCurrent(
+ hdc: HDC,
+ hglrc: HGLRC,
+ ) -> BOOL;
+ pub fn wglShareLists(
+ hglrc1: HGLRC,
+ hglrc2: HGLRC,
+ ) -> BOOL;
+ pub fn wglUseFontBitmapsA(
+ hdc: HDC,
+ first: DWORD,
+ count: DWORD,
+ listBase: DWORD,
+ ) -> BOOL;
+ pub fn wglUseFontBitmapsW(
+ hdc: HDC,
+ first: DWORD,
+ count: DWORD,
+ listBase: DWORD,
+ ) -> BOOL;
+ pub fn SwapBuffers(
+ hdc: HDC,
+ ) -> BOOL;
+}
+STRUCT!{struct POINTFLOAT {
+ x: FLOAT,
+ y: FLOAT,
+}}
+pub type PPOINTFLOAT = *mut POINTFLOAT;
+STRUCT!{struct GLYPHMETRICSFLOAT {
+ gmfBlackBoxX: FLOAT,
+ gmfBlackBoxY: FLOAT,
+ gmfptGlyphOrigin: POINTFLOAT,
+ gmfCellIncX: FLOAT,
+ gmfCellIncY: FLOAT,
+}}
+pub type PGLYPHMETRICSFLOAT = *mut GLYPHMETRICSFLOAT;
+pub type LPGLYPHMETRICSFLOAT = *mut GLYPHMETRICSFLOAT;
+pub const WGL_FONT_LINES: DWORD = 0;
+pub const WGL_FONT_POLYGONS: DWORD = 1;
+extern "system" {
+ pub fn wglUseFontOutlinesA(
+ hdc: HDC,
+ first: DWORD,
+ count: DWORD,
+ listBase: DWORD,
+ deviation: FLOAT,
+ extrusion: FLOAT,
+ format: c_int,
+ lpgmf: LPGLYPHMETRICSFLOAT,
+ ) -> BOOL;
+ pub fn wglUseFontOutlinesW(
+ hdc: HDC,
+ first: DWORD,
+ count: DWORD,
+ listBase: DWORD,
+ deviation: FLOAT,
+ extrusion: FLOAT,
+ format: c_int,
+ lpgmf: LPGLYPHMETRICSFLOAT,
+ ) -> BOOL;
+}
+STRUCT!{struct LAYERPLANEDESCRIPTOR {
+ nSize: WORD,
+ nVersion: WORD,
+ dwFlags: DWORD,
+ iPixelType: BYTE,
+ cColorBits: BYTE,
+ cRedBits: BYTE,
+ cRedShift: BYTE,
+ cGreenBits: BYTE,
+ cGreenShift: BYTE,
+ cBlueBits: BYTE,
+ cBlueShift: BYTE,
+ cAlphaBits: BYTE,
+ cAlphaShift: BYTE,
+ cAccumBits: BYTE,
+ cAccumRedBits: BYTE,
+ cAccumGreenBits: BYTE,
+ cAccumBlueBits: BYTE,
+ cAccumAlphaBits: BYTE,
+ cDepthBits: BYTE,
+ cStencilBits: BYTE,
+ cAuxBuffers: BYTE,
+ iLayerPlane: BYTE,
+ bReserved: BYTE,
+ crTransparent: COLORREF,
+}}
+pub type PLAYERPLANEDESCRIPTOR = *mut LAYERPLANEDESCRIPTOR;
+pub type LPLAYERPLANEDESCRIPTOR = *mut LAYERPLANEDESCRIPTOR;
+pub const LPD_DOUBLEBUFFER: DWORD = 0x00000001;
+pub const LPD_STEREO: DWORD = 0x00000002;
+pub const LPD_SUPPORT_GDI: DWORD = 0x00000010;
+pub const LPD_SUPPORT_OPENGL: DWORD = 0x00000020;
+pub const LPD_SHARE_DEPTH: DWORD = 0x00000040;
+pub const LPD_SHARE_STENCIL: DWORD = 0x00000080;
+pub const LPD_SHARE_ACCUM: DWORD = 0x00000100;
+pub const LPD_SWAP_EXCHANGE: DWORD = 0x00000200;
+pub const LPD_SWAP_COPY: DWORD = 0x00000400;
+pub const LPD_TRANSPARENT: DWORD = 0x00001000;
+pub const LPD_TYPE_RGBA: BYTE = 0;
+pub const LPD_TYPE_COLORINDEX: BYTE = 1;
+pub const WGL_SWAP_MAIN_PLANE: UINT = 0x00000001;
+pub const WGL_SWAP_OVERLAY1: UINT = 0x00000002;
+pub const WGL_SWAP_OVERLAY2: UINT = 0x00000004;
+pub const WGL_SWAP_OVERLAY3: UINT = 0x00000008;
+pub const WGL_SWAP_OVERLAY4: UINT = 0x00000010;
+pub const WGL_SWAP_OVERLAY5: UINT = 0x00000020;
+pub const WGL_SWAP_OVERLAY6: UINT = 0x00000040;
+pub const WGL_SWAP_OVERLAY7: UINT = 0x00000080;
+pub const WGL_SWAP_OVERLAY8: UINT = 0x00000100;
+pub const WGL_SWAP_OVERLAY9: UINT = 0x00000200;
+pub const WGL_SWAP_OVERLAY10: UINT = 0x00000400;
+pub const WGL_SWAP_OVERLAY11: UINT = 0x00000800;
+pub const WGL_SWAP_OVERLAY12: UINT = 0x00001000;
+pub const WGL_SWAP_OVERLAY13: UINT = 0x00002000;
+pub const WGL_SWAP_OVERLAY14: UINT = 0x00004000;
+pub const WGL_SWAP_OVERLAY15: UINT = 0x00008000;
+pub const WGL_SWAP_UNDERLAY1: UINT = 0x00010000;
+pub const WGL_SWAP_UNDERLAY2: UINT = 0x00020000;
+pub const WGL_SWAP_UNDERLAY3: UINT = 0x00040000;
+pub const WGL_SWAP_UNDERLAY4: UINT = 0x00080000;
+pub const WGL_SWAP_UNDERLAY5: UINT = 0x00100000;
+pub const WGL_SWAP_UNDERLAY6: UINT = 0x00200000;
+pub const WGL_SWAP_UNDERLAY7: UINT = 0x00400000;
+pub const WGL_SWAP_UNDERLAY8: UINT = 0x00800000;
+pub const WGL_SWAP_UNDERLAY9: UINT = 0x01000000;
+pub const WGL_SWAP_UNDERLAY10: UINT = 0x02000000;
+pub const WGL_SWAP_UNDERLAY11: UINT = 0x04000000;
+pub const WGL_SWAP_UNDERLAY12: UINT = 0x08000000;
+pub const WGL_SWAP_UNDERLAY13: UINT = 0x10000000;
+pub const WGL_SWAP_UNDERLAY14: UINT = 0x20000000;
+pub const WGL_SWAP_UNDERLAY15: UINT = 0x40000000;
+extern "system" {
+ pub fn wglDescribeLayerPlane(
+ hdc: HDC,
+ iPixelFormat: c_int,
+ iLayerPlane: c_int,
+ nBytes: UINT,
+ plpd: LPLAYERPLANEDESCRIPTOR,
+ ) -> BOOL;
+ pub fn wglSetLayerPaletteEntries(
+ hdc: HDC,
+ iLayerPlane: c_int,
+ iStart: c_int,
+ cEntries: c_int,
+ pcr: *const COLORREF,
+ ) -> c_int;
+ pub fn wglGetLayerPaletteEntries(
+ hdc: HDC,
+ iLayerPlane: c_int,
+ iStart: c_int,
+ cEntries: c_int,
+ pcr: *const COLORREF,
+ ) -> c_int;
+ pub fn wglRealizeLayerPalette(
+ hdc: HDC,
+ iLayerPlane: c_int,
+ bRealize: BOOL,
+ ) -> BOOL;
+ pub fn wglSwapLayerBuffers(
+ hdc: HDC,
+ fuPlanes: UINT,
+ ) -> BOOL;
+}
+STRUCT!{struct WGLSWAP {
+ hdc: HDC,
+ uiFlags: UINT,
+}}
+pub type PWGLSWAP = *mut WGLSWAP;
+pub type LPWGLSWAP = *mut WGLSWAP;
+pub const WGL_SWAPMULTIPLE_MAX: usize = 16;
+extern "system" {
+ pub fn wglSwapMultipleBuffers(
+ n: UINT,
+ ps: *const WGLSWAP,
+ ) -> DWORD;
+}
diff --git a/vendor/winapi/src/um/winhttp.rs b/vendor/winapi/src/um/winhttp.rs
new file mode 100644
index 000000000..f39c78f51
--- /dev/null
+++ b/vendor/winapi/src/um/winhttp.rs
@@ -0,0 +1,658 @@
+// 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.
+//! Windows HTTP Services API constant definitions and macros
+use ctypes::c_int;
+use shared::basetsd::DWORD_PTR;
+use shared::minwindef::{BOOL, DWORD, LPCVOID, LPDWORD, LPVOID, USHORT, WORD};
+use um::minwinbase::SYSTEMTIME;
+use um::winnt::{LPCWSTR, LPWSTR, PCWSTR, PVOID, PWSTR};
+pub type HINTERNET = LPVOID;
+pub type LPHINTERNET = *mut HINTERNET;
+pub type INTERNET_PORT = WORD;
+pub type LPINTERNET_PORT = *mut INTERNET_PORT;
+pub const INTERNET_DEFAULT_PORT: INTERNET_PORT = 0;
+pub const INTERNET_DEFAULT_HTTP_PORT: INTERNET_PORT = 80;
+pub const INTERNET_DEFAULT_HTTPS_PORT: INTERNET_PORT = 443;
+pub const WINHTTP_FLAG_ASYNC: DWORD = 0x10000000;
+pub const WINHTTP_FLAG_SECURE: DWORD = 0x00800000;
+pub const WINHTTP_FLAG_ESCAPE_PERCENT: DWORD = 0x00000004;
+pub const WINHTTP_FLAG_NULL_CODEPAGE: DWORD = 0x00000008;
+pub const WINHTTP_FLAG_BYPASS_PROXY_CACHE: DWORD = 0x00000100;
+pub const WINHTTP_FLAG_REFRESH: DWORD = WINHTTP_FLAG_BYPASS_PROXY_CACHE;
+pub const WINHTTP_FLAG_ESCAPE_DISABLE: DWORD = 0x00000040;
+pub const WINHTTP_FLAG_ESCAPE_DISABLE_QUERY: DWORD = 0x00000080;
+STRUCT!{struct WINHTTP_ASYNC_RESULT {
+ dwResult: DWORD_PTR,
+ dwError: DWORD,
+}}
+pub type LPWINHTTP_ASYNC_RESULT = *mut WINHTTP_ASYNC_RESULT;
+pub type INTERNET_SCHEME = c_int;
+pub type LPINTERNET_SCHEME = *mut c_int;
+pub const INTERNET_SCHEME_HTTP: INTERNET_SCHEME = 1;
+pub const INTERNET_SCHEME_HTTPS: INTERNET_SCHEME = 2;
+pub const INTERNET_SCHEME_FTP: INTERNET_SCHEME = 3;
+pub const INTERNET_SCHEME_SOCKS: INTERNET_SCHEME = 4;
+STRUCT!{struct URL_COMPONENTS {
+ dwStructSize: DWORD,
+ lpszScheme: LPWSTR,
+ dwSchemeLength: DWORD,
+ nScheme: INTERNET_SCHEME,
+ lpszHostName: LPWSTR,
+ dwHostNameLength: DWORD,
+ nPort: INTERNET_PORT,
+ lpszUserName: LPWSTR,
+ dwUserNameLength: DWORD,
+ lpszPassword: LPWSTR,
+ dwPasswordLength: DWORD,
+ lpszUrlPath: LPWSTR,
+ dwUrlPathLength: DWORD,
+ lpszExtraInfo: LPWSTR,
+ dwExtraInfoLength: DWORD,
+}}
+pub type LPURL_COMPONENTS = *mut URL_COMPONENTS;
+pub type URL_COMPONENTSW = URL_COMPONENTS;
+pub type LPURL_COMPONENTSW = LPURL_COMPONENTS;
+STRUCT!{struct WINHTTP_PROXY_INFO {
+ dwAccessType: DWORD,
+ lpszProxy: LPWSTR,
+ lpszProxyBypass: LPWSTR,
+}}
+pub type LPWINHTTP_PROXY_INFO = *mut WINHTTP_PROXY_INFO;
+pub type WINHTTP_PROXY_INFOW = WINHTTP_PROXY_INFO;
+pub type LPWINHTTP_PROXY_INFOW = LPWINHTTP_PROXY_INFO;
+STRUCT!{struct WINHTTP_AUTOPROXY_OPTIONS {
+ dwFlags: DWORD,
+ dwAutoDetectFlags: DWORD,
+ lpszAutoConfigUrl: LPCWSTR,
+ lpvReserved: LPVOID,
+ dwReserved: DWORD,
+ fAutoLogonIfChallenged: BOOL,
+}}
+pub const WINHTTP_AUTOPROXY_AUTO_DETECT: DWORD = 0x00000001;
+pub const WINHTTP_AUTOPROXY_CONFIG_URL: DWORD = 0x00000002;
+pub const WINHTTP_AUTOPROXY_HOST_KEEPCASE: DWORD = 0x00000004;
+pub const WINHTTP_AUTOPROXY_HOST_LOWERCASE: DWORD = 0x00000008;
+pub const WINHTTP_AUTOPROXY_RUN_INPROCESS: DWORD = 0x00010000;
+pub const WINHTTP_AUTOPROXY_RUN_OUTPROCESS_ONLY: DWORD = 0x00020000;
+pub const WINHTTP_AUTOPROXY_NO_DIRECTACCESS: DWORD = 0x00040000;
+pub const WINHTTP_AUTOPROXY_NO_CACHE_CLIENT: DWORD = 0x00080000;
+pub const WINHTTP_AUTOPROXY_NO_CACHE_SVC: DWORD = 0x00100000;
+pub const WINHTTP_AUTOPROXY_SORT_RESULTS: DWORD = 0x00400000;
+pub const WINHTTP_AUTO_DETECT_TYPE_DHCP: DWORD = 0x00000001;
+pub const WINHTTP_AUTO_DETECT_TYPE_DNS_A: DWORD = 0x00000002;
+STRUCT!{struct WINHTTP_PROXY_RESULT_ENTRY {
+ fProxy: BOOL,
+ fBypass: BOOL,
+ ProxyScheme: INTERNET_SCHEME,
+ pwszProxy: PWSTR,
+ ProxyPort: INTERNET_PORT,
+}}
+STRUCT!{struct WINHTTP_PROXY_RESULT {
+ cEntries: DWORD,
+ pEntries: *mut WINHTTP_PROXY_RESULT_ENTRY,
+}}
+pub const WINHTTP_FIRST_OPTION: DWORD = WINHTTP_OPTION_CALLBACK;
+pub const WINHTTP_OPTION_CALLBACK: DWORD = 1;
+pub const WINHTTP_OPTION_RESOLVE_TIMEOUT: DWORD = 2;
+pub const WINHTTP_OPTION_CONNECT_TIMEOUT: DWORD = 3;
+pub const WINHTTP_OPTION_CONNECT_RETRIES: DWORD = 4;
+pub const WINHTTP_OPTION_SEND_TIMEOUT: DWORD = 5;
+pub const WINHTTP_OPTION_RECEIVE_TIMEOUT: DWORD = 6;
+pub const WINHTTP_OPTION_RECEIVE_RESPONSE_TIMEOUT: DWORD = 7;
+pub const WINHTTP_OPTION_HANDLE_TYPE: DWORD = 9;
+pub const WINHTTP_OPTION_READ_BUFFER_SIZE: DWORD = 12;
+pub const WINHTTP_OPTION_WRITE_BUFFER_SIZE: DWORD = 13;
+pub const WINHTTP_OPTION_PARENT_HANDLE: DWORD = 21;
+pub const WINHTTP_OPTION_EXTENDED_ERROR: DWORD = 24;
+pub const WINHTTP_OPTION_SECURITY_FLAGS: DWORD = 31;
+pub const WINHTTP_OPTION_SECURITY_CERTIFICATE_STRUCT: DWORD = 32;
+pub const WINHTTP_OPTION_URL: DWORD = 34;
+pub const WINHTTP_OPTION_SECURITY_KEY_BITNESS: DWORD = 36;
+pub const WINHTTP_OPTION_PROXY: DWORD = 38;
+pub const WINHTTP_OPTION_PROXY_RESULT_ENTRY: DWORD = 39;
+pub const WINHTTP_OPTION_USER_AGENT: DWORD = 41;
+pub const WINHTTP_OPTION_CONTEXT_VALUE: DWORD = 45;
+pub const WINHTTP_OPTION_CLIENT_CERT_CONTEXT: DWORD = 47;
+pub const WINHTTP_OPTION_REQUEST_PRIORITY: DWORD = 58;
+pub const WINHTTP_OPTION_HTTP_VERSION: DWORD = 59;
+pub const WINHTTP_OPTION_DISABLE_FEATURE: DWORD = 63;
+pub const WINHTTP_OPTION_CODEPAGE: DWORD = 68;
+pub const WINHTTP_OPTION_MAX_CONNS_PER_SERVER: DWORD = 73;
+pub const WINHTTP_OPTION_MAX_CONNS_PER_1_0_SERVER: DWORD = 74;
+pub const WINHTTP_OPTION_AUTOLOGON_POLICY: DWORD = 77;
+pub const WINHTTP_OPTION_SERVER_CERT_CONTEXT: DWORD = 78;
+pub const WINHTTP_OPTION_ENABLE_FEATURE: DWORD = 79;
+pub const WINHTTP_OPTION_WORKER_THREAD_COUNT: DWORD = 80;
+pub const WINHTTP_OPTION_PASSPORT_COBRANDING_TEXT: DWORD = 81;
+pub const WINHTTP_OPTION_PASSPORT_COBRANDING_URL: DWORD = 82;
+pub const WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH: DWORD = 83;
+pub const WINHTTP_OPTION_SECURE_PROTOCOLS: DWORD = 84;
+pub const WINHTTP_OPTION_ENABLETRACING: DWORD = 85;
+pub const WINHTTP_OPTION_PASSPORT_SIGN_OUT: DWORD = 86;
+pub const WINHTTP_OPTION_PASSPORT_RETURN_URL: DWORD = 87;
+pub const WINHTTP_OPTION_REDIRECT_POLICY: DWORD = 88;
+pub const WINHTTP_OPTION_MAX_HTTP_AUTOMATIC_REDIRECTS: DWORD = 89;
+pub const WINHTTP_OPTION_MAX_HTTP_STATUS_CONTINUE: DWORD = 90;
+pub const WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE: DWORD = 91;
+pub const WINHTTP_OPTION_MAX_RESPONSE_DRAIN_SIZE: DWORD = 92;
+pub const WINHTTP_OPTION_CONNECTION_INFO: DWORD = 93;
+pub const WINHTTP_OPTION_CLIENT_CERT_ISSUER_LIST: DWORD = 94;
+pub const WINHTTP_OPTION_SPN: DWORD = 96;
+pub const WINHTTP_OPTION_GLOBAL_PROXY_CREDS: DWORD = 97;
+pub const WINHTTP_OPTION_GLOBAL_SERVER_CREDS: DWORD = 98;
+pub const WINHTTP_OPTION_UNLOAD_NOTIFY_EVENT: DWORD = 99;
+pub const WINHTTP_OPTION_REJECT_USERPWD_IN_URL: DWORD = 100;
+pub const WINHTTP_OPTION_USE_GLOBAL_SERVER_CREDENTIALS: DWORD = 101;
+pub const WINHTTP_OPTION_RECEIVE_PROXY_CONNECT_RESPONSE: DWORD = 103;
+pub const WINHTTP_OPTION_IS_PROXY_CONNECT_RESPONSE: DWORD = 104;
+pub const WINHTTP_OPTION_SERVER_SPN_USED: DWORD = 106;
+pub const WINHTTP_OPTION_PROXY_SPN_USED: DWORD = 107;
+pub const WINHTTP_OPTION_SERVER_CBT: DWORD = 108;
+pub const WINHTTP_OPTION_UNSAFE_HEADER_PARSING: DWORD = 110;
+pub const WINHTTP_OPTION_ASSURED_NON_BLOCKING_CALLBACKS: DWORD = 111;
+pub const WINHTTP_OPTION_UPGRADE_TO_WEB_SOCKET: DWORD = 114;
+pub const WINHTTP_OPTION_WEB_SOCKET_CLOSE_TIMEOUT: DWORD = 115;
+pub const WINHTTP_OPTION_WEB_SOCKET_KEEPALIVE_INTERVAL: DWORD = 116;
+pub const WINHTTP_OPTION_DECOMPRESSION: DWORD = 118;
+pub const WINHTTP_OPTION_WEB_SOCKET_RECEIVE_BUFFER_SIZE: DWORD = 122;
+pub const WINHTTP_OPTION_WEB_SOCKET_SEND_BUFFER_SIZE: DWORD = 123;
+pub const WINHTTP_LAST_OPTION: DWORD = WINHTTP_OPTION_WEB_SOCKET_SEND_BUFFER_SIZE;
+pub const WINHTTP_OPTION_USERNAME: DWORD = 0x1000;
+pub const WINHTTP_OPTION_PASSWORD: DWORD = 0x1001;
+pub const WINHTTP_OPTION_PROXY_USERNAME: DWORD = 0x1002;
+pub const WINHTTP_OPTION_PROXY_PASSWORD: DWORD = 0x1003;
+//569
+FN!{stdcall WINHTTP_STATUS_CALLBACK(
+ hInternet: HINTERNET,
+ dwContext: DWORD_PTR,
+ dwInternetStatus: DWORD,
+ lpvStatusInformation: LPVOID,
+ dwStatusInformationLength: DWORD,
+) -> ()}
+pub type LPWINHTTP_STATUS_CALLBACK = *mut WINHTTP_STATUS_CALLBACK;
+pub const WINHTTP_CALLBACK_STATUS_RESOLVING_NAME: DWORD = 0x00000001;
+pub const WINHTTP_CALLBACK_STATUS_NAME_RESOLVED: DWORD = 0x00000002;
+pub const WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER: DWORD = 0x00000004;
+pub const WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER: DWORD = 0x00000008;
+pub const WINHTTP_CALLBACK_STATUS_SENDING_REQUEST: DWORD = 0x00000010;
+pub const WINHTTP_CALLBACK_STATUS_REQUEST_SENT: DWORD = 0x00000020;
+pub const WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE: DWORD = 0x00000040;
+pub const WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED: DWORD = 0x00000080;
+pub const WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION: DWORD = 0x00000100;
+pub const WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED: DWORD = 0x00000200;
+pub const WINHTTP_CALLBACK_STATUS_HANDLE_CREATED: DWORD = 0x00000400;
+pub const WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING: DWORD = 0x00000800;
+pub const WINHTTP_CALLBACK_STATUS_DETECTING_PROXY: DWORD = 0x00001000;
+pub const WINHTTP_CALLBACK_STATUS_REDIRECT: DWORD = 0x00004000;
+pub const WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE: DWORD = 0x00008000;
+pub const WINHTTP_CALLBACK_STATUS_SECURE_FAILURE: DWORD = 0x00010000;
+pub const WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE: DWORD = 0x00020000;
+pub const WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE: DWORD = 0x00040000;
+pub const WINHTTP_CALLBACK_STATUS_READ_COMPLETE: DWORD = 0x00080000;
+pub const WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE: DWORD = 0x00100000;
+pub const WINHTTP_CALLBACK_STATUS_REQUEST_ERROR: DWORD = 0x00200000;
+pub const WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE: DWORD = 0x00400000;
+pub const WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE: DWORD = 0x01000000;
+pub const WINHTTP_CALLBACK_STATUS_CLOSE_COMPLETE: DWORD = 0x02000000;
+pub const WINHTTP_CALLBACK_STATUS_SHUTDOWN_COMPLETE: DWORD = 0x04000000;
+pub const WINHTTP_CALLBACK_FLAG_RESOLVE_NAME: DWORD = WINHTTP_CALLBACK_STATUS_RESOLVING_NAME
+ | WINHTTP_CALLBACK_STATUS_NAME_RESOLVED;
+pub const WINHTTP_CALLBACK_FLAG_CONNECT_TO_SERVER: DWORD =
+ WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER | WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER;
+pub const WINHTTP_CALLBACK_FLAG_SEND_REQUEST: DWORD =
+ WINHTTP_CALLBACK_STATUS_SENDING_REQUEST | WINHTTP_CALLBACK_STATUS_REQUEST_SENT;
+pub const WINHTTP_CALLBACK_FLAG_RECEIVE_RESPONSE: DWORD =
+ WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE | WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED;
+pub const WINHTTP_CALLBACK_FLAG_CLOSE_CONNECTION: DWORD =
+ WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION | WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED;
+pub const WINHTTP_CALLBACK_FLAG_HANDLES: DWORD =
+ WINHTTP_CALLBACK_STATUS_HANDLE_CREATED | WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING;
+pub const WINHTTP_CALLBACK_FLAG_DETECTING_PROXY: DWORD = WINHTTP_CALLBACK_STATUS_DETECTING_PROXY;
+pub const WINHTTP_CALLBACK_FLAG_REDIRECT: DWORD = WINHTTP_CALLBACK_STATUS_REDIRECT;
+pub const WINHTTP_CALLBACK_FLAG_INTERMEDIATE_RESPONSE: DWORD =
+ WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE;
+pub const WINHTTP_CALLBACK_FLAG_SECURE_FAILURE: DWORD = WINHTTP_CALLBACK_STATUS_SECURE_FAILURE;
+pub const WINHTTP_CALLBACK_FLAG_SENDREQUEST_COMPLETE: DWORD =
+ WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE;
+pub const WINHTTP_CALLBACK_FLAG_HEADERS_AVAILABLE: DWORD =
+ WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE;
+pub const WINHTTP_CALLBACK_FLAG_DATA_AVAILABLE: DWORD = WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE;
+pub const WINHTTP_CALLBACK_FLAG_READ_COMPLETE: DWORD = WINHTTP_CALLBACK_STATUS_READ_COMPLETE;
+pub const WINHTTP_CALLBACK_FLAG_WRITE_COMPLETE: DWORD = WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE;
+pub const WINHTTP_CALLBACK_FLAG_REQUEST_ERROR: DWORD = WINHTTP_CALLBACK_STATUS_REQUEST_ERROR;
+pub const WINHTTP_CALLBACK_FLAG_GETPROXYFORURL_COMPLETE: DWORD =
+ WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE;
+pub const WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS: DWORD =
+ WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE | WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
+ | WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE | WINHTTP_CALLBACK_STATUS_READ_COMPLETE
+ | WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE | WINHTTP_CALLBACK_STATUS_REQUEST_ERROR
+ | WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE;
+pub const WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS: DWORD = 0xffffffff;
+pub const WINHTTP_QUERY_MIME_VERSION: DWORD = 0;
+pub const WINHTTP_QUERY_CONTENT_TYPE: DWORD = 1;
+pub const WINHTTP_QUERY_CONTENT_TRANSFER_ENCODING: DWORD = 2;
+pub const WINHTTP_QUERY_CONTENT_ID: DWORD = 3;
+pub const WINHTTP_QUERY_CONTENT_DESCRIPTION: DWORD = 4;
+pub const WINHTTP_QUERY_CONTENT_LENGTH: DWORD = 5;
+pub const WINHTTP_QUERY_CONTENT_LANGUAGE: DWORD = 6;
+pub const WINHTTP_QUERY_ALLOW: DWORD = 7;
+pub const WINHTTP_QUERY_PUBLIC: DWORD = 8;
+pub const WINHTTP_QUERY_DATE: DWORD = 9;
+pub const WINHTTP_QUERY_EXPIRES: DWORD = 10;
+pub const WINHTTP_QUERY_LAST_MODIFIED: DWORD = 11;
+pub const WINHTTP_QUERY_MESSAGE_ID: DWORD = 12;
+pub const WINHTTP_QUERY_URI: DWORD = 13;
+pub const WINHTTP_QUERY_DERIVED_FROM: DWORD = 14;
+pub const WINHTTP_QUERY_COST: DWORD = 15;
+pub const WINHTTP_QUERY_LINK: DWORD = 16;
+pub const WINHTTP_QUERY_PRAGMA: DWORD = 17;
+pub const WINHTTP_QUERY_VERSION: DWORD = 18;
+pub const WINHTTP_QUERY_STATUS_CODE: DWORD = 19;
+pub const WINHTTP_QUERY_STATUS_TEXT: DWORD = 20;
+pub const WINHTTP_QUERY_RAW_HEADERS: DWORD = 21;
+pub const WINHTTP_QUERY_RAW_HEADERS_CRLF: DWORD = 22;
+pub const WINHTTP_QUERY_CONNECTION: DWORD = 23;
+pub const WINHTTP_QUERY_ACCEPT: DWORD = 24;
+pub const WINHTTP_QUERY_ACCEPT_CHARSET: DWORD = 25;
+pub const WINHTTP_QUERY_ACCEPT_ENCODING: DWORD = 26;
+pub const WINHTTP_QUERY_ACCEPT_LANGUAGE: DWORD = 27;
+pub const WINHTTP_QUERY_AUTHORIZATION: DWORD = 28;
+pub const WINHTTP_QUERY_CONTENT_ENCODING: DWORD = 29;
+pub const WINHTTP_QUERY_FORWARDED: DWORD = 30;
+pub const WINHTTP_QUERY_FROM: DWORD = 31;
+pub const WINHTTP_QUERY_IF_MODIFIED_SINCE: DWORD = 32;
+pub const WINHTTP_QUERY_LOCATION: DWORD = 33;
+pub const WINHTTP_QUERY_ORIG_URI: DWORD = 34;
+pub const WINHTTP_QUERY_REFERER: DWORD = 35;
+pub const WINHTTP_QUERY_RETRY_AFTER: DWORD = 36;
+pub const WINHTTP_QUERY_SERVER: DWORD = 37;
+pub const WINHTTP_QUERY_TITLE: DWORD = 38;
+pub const WINHTTP_QUERY_USER_AGENT: DWORD = 39;
+pub const WINHTTP_QUERY_WWW_AUTHENTICATE: DWORD = 40;
+pub const WINHTTP_QUERY_PROXY_AUTHENTICATE: DWORD = 41;
+pub const WINHTTP_QUERY_ACCEPT_RANGES: DWORD = 42;
+pub const WINHTTP_QUERY_SET_COOKIE: DWORD = 43;
+pub const WINHTTP_QUERY_COOKIE: DWORD = 44;
+pub const WINHTTP_QUERY_REQUEST_METHOD: DWORD = 45;
+pub const WINHTTP_QUERY_REFRESH: DWORD = 46;
+pub const WINHTTP_QUERY_CONTENT_DISPOSITION: DWORD = 47;
+pub const WINHTTP_QUERY_AGE: DWORD = 48;
+pub const WINHTTP_QUERY_CACHE_CONTROL: DWORD = 49;
+pub const WINHTTP_QUERY_CONTENT_BASE: DWORD = 50;
+pub const WINHTTP_QUERY_CONTENT_LOCATION: DWORD = 51;
+pub const WINHTTP_QUERY_CONTENT_MD5: DWORD = 52;
+pub const WINHTTP_QUERY_CONTENT_RANGE: DWORD = 53;
+pub const WINHTTP_QUERY_ETAG: DWORD = 54;
+pub const WINHTTP_QUERY_HOST: DWORD = 55;
+pub const WINHTTP_QUERY_IF_MATCH: DWORD = 56;
+pub const WINHTTP_QUERY_IF_NONE_MATCH: DWORD = 57;
+pub const WINHTTP_QUERY_IF_RANGE: DWORD = 58;
+pub const WINHTTP_QUERY_IF_UNMODIFIED_SINCE: DWORD = 59;
+pub const WINHTTP_QUERY_MAX_FORWARDS: DWORD = 60;
+pub const WINHTTP_QUERY_PROXY_AUTHORIZATION: DWORD = 61;
+pub const WINHTTP_QUERY_RANGE: DWORD = 62;
+pub const WINHTTP_QUERY_TRANSFER_ENCODING: DWORD = 63;
+pub const WINHTTP_QUERY_UPGRADE: DWORD = 64;
+pub const WINHTTP_QUERY_VARY: DWORD = 65;
+pub const WINHTTP_QUERY_VIA: DWORD = 66;
+pub const WINHTTP_QUERY_WARNING: DWORD = 67;
+pub const WINHTTP_QUERY_EXPECT: DWORD = 68;
+pub const WINHTTP_QUERY_PROXY_CONNECTION: DWORD = 69;
+pub const WINHTTP_QUERY_UNLESS_MODIFIED_SINCE: DWORD = 70;
+pub const WINHTTP_QUERY_PROXY_SUPPORT: DWORD = 75;
+pub const WINHTTP_QUERY_AUTHENTICATION_INFO: DWORD = 76;
+pub const WINHTTP_QUERY_PASSPORT_URLS: DWORD = 77;
+pub const WINHTTP_QUERY_PASSPORT_CONFIG: DWORD = 78;
+pub const WINHTTP_QUERY_MAX: DWORD = 78;
+pub const WINHTTP_QUERY_CUSTOM: DWORD = 65535;
+pub const WINHTTP_QUERY_FLAG_REQUEST_HEADERS: DWORD = 0x80000000;
+pub const WINHTTP_QUERY_FLAG_SYSTEMTIME: DWORD = 0x40000000;
+pub const WINHTTP_QUERY_FLAG_NUMBER: DWORD = 0x20000000;
+pub const HTTP_STATUS_CONTINUE: DWORD = 100;
+pub const HTTP_STATUS_SWITCH_PROTOCOLS: DWORD = 101;
+pub const HTTP_STATUS_OK: DWORD = 200;
+pub const HTTP_STATUS_CREATED: DWORD = 201;
+pub const HTTP_STATUS_ACCEPTED: DWORD = 202;
+pub const HTTP_STATUS_PARTIAL: DWORD = 203;
+pub const HTTP_STATUS_NO_CONTENT: DWORD = 204;
+pub const HTTP_STATUS_RESET_CONTENT: DWORD = 205;
+pub const HTTP_STATUS_PARTIAL_CONTENT: DWORD = 206;
+pub const HTTP_STATUS_WEBDAV_MULTI_STATUS: DWORD = 207;
+pub const HTTP_STATUS_AMBIGUOUS: DWORD = 300;
+pub const HTTP_STATUS_MOVED: DWORD = 301;
+pub const HTTP_STATUS_REDIRECT: DWORD = 302;
+pub const HTTP_STATUS_REDIRECT_METHOD: DWORD = 303;
+pub const HTTP_STATUS_NOT_MODIFIED: DWORD = 304;
+pub const HTTP_STATUS_USE_PROXY: DWORD = 305;
+pub const HTTP_STATUS_REDIRECT_KEEP_VERB: DWORD = 307;
+pub const HTTP_STATUS_BAD_REQUEST: DWORD = 400;
+pub const HTTP_STATUS_DENIED: DWORD = 401;
+pub const HTTP_STATUS_PAYMENT_REQ: DWORD = 402;
+pub const HTTP_STATUS_FORBIDDEN: DWORD = 403;
+pub const HTTP_STATUS_NOT_FOUND: DWORD = 404;
+pub const HTTP_STATUS_BAD_METHOD: DWORD = 405;
+pub const HTTP_STATUS_NONE_ACCEPTABLE: DWORD = 406;
+pub const HTTP_STATUS_PROXY_AUTH_REQ: DWORD = 407;
+pub const HTTP_STATUS_REQUEST_TIMEOUT: DWORD = 408;
+pub const HTTP_STATUS_CONFLICT: DWORD = 409;
+pub const HTTP_STATUS_GONE: DWORD = 410;
+pub const HTTP_STATUS_LENGTH_REQUIRED: DWORD = 411;
+pub const HTTP_STATUS_PRECOND_FAILED: DWORD = 412;
+pub const HTTP_STATUS_REQUEST_TOO_LARGE: DWORD = 413;
+pub const HTTP_STATUS_URI_TOO_LONG: DWORD = 414;
+pub const HTTP_STATUS_UNSUPPORTED_MEDIA: DWORD = 415;
+pub const HTTP_STATUS_RETRY_WITH: DWORD = 449;
+pub const HTTP_STATUS_SERVER_ERROR: DWORD = 500;
+pub const HTTP_STATUS_NOT_SUPPORTED: DWORD = 501;
+pub const HTTP_STATUS_BAD_GATEWAY: DWORD = 502;
+pub const HTTP_STATUS_SERVICE_UNAVAIL: DWORD = 503;
+pub const HTTP_STATUS_GATEWAY_TIMEOUT: DWORD = 504;
+pub const HTTP_STATUS_VERSION_NOT_SUP: DWORD = 505;
+pub const HTTP_STATUS_FIRST: DWORD = HTTP_STATUS_CONTINUE;
+pub const HTTP_STATUS_LAST: DWORD = HTTP_STATUS_VERSION_NOT_SUP;
+pub const WINHTTP_ACCESS_TYPE_DEFAULT_PROXY: DWORD = 0;
+pub const WINHTTP_ACCESS_TYPE_NO_PROXY: DWORD = 1;
+pub const WINHTTP_ACCESS_TYPE_NAMED_PROXY: DWORD = 3;
+pub const WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY: DWORD = 4;
+STRUCT!{struct WINHTTP_CURRENT_USER_IE_PROXY_CONFIG {
+ fAutoDetect: BOOL,
+ lpszAutoConfigUrl: LPWSTR,
+ lpszProxy: LPWSTR,
+ lpszProxyBypass: LPWSTR,
+}}
+pub const WINHTTP_ERROR_BASE: DWORD = 12000;
+pub const ERROR_WINHTTP_OUT_OF_HANDLES: DWORD = WINHTTP_ERROR_BASE + 1;
+pub const ERROR_WINHTTP_TIMEOUT: DWORD = WINHTTP_ERROR_BASE + 2;
+pub const ERROR_WINHTTP_INTERNAL_ERROR: DWORD = WINHTTP_ERROR_BASE + 4;
+pub const ERROR_WINHTTP_INVALID_URL: DWORD = WINHTTP_ERROR_BASE + 5;
+pub const ERROR_WINHTTP_UNRECOGNIZED_SCHEME: DWORD = WINHTTP_ERROR_BASE + 6;
+pub const ERROR_WINHTTP_NAME_NOT_RESOLVED: DWORD = WINHTTP_ERROR_BASE + 7;
+pub const ERROR_WINHTTP_INVALID_OPTION: DWORD = WINHTTP_ERROR_BASE + 9;
+pub const ERROR_WINHTTP_OPTION_NOT_SETTABLE: DWORD = WINHTTP_ERROR_BASE + 11;
+pub const ERROR_WINHTTP_SHUTDOWN: DWORD = WINHTTP_ERROR_BASE + 12;
+pub const ERROR_WINHTTP_LOGIN_FAILURE: DWORD = WINHTTP_ERROR_BASE + 15;
+pub const ERROR_WINHTTP_OPERATION_CANCELLED: DWORD = WINHTTP_ERROR_BASE + 17;
+pub const ERROR_WINHTTP_INCORRECT_HANDLE_TYPE: DWORD = WINHTTP_ERROR_BASE + 18;
+pub const ERROR_WINHTTP_INCORRECT_HANDLE_STATE: DWORD = WINHTTP_ERROR_BASE + 19;
+pub const ERROR_WINHTTP_CANNOT_CONNECT: DWORD = WINHTTP_ERROR_BASE + 29;
+pub const ERROR_WINHTTP_CONNECTION_ERROR: DWORD = WINHTTP_ERROR_BASE + 30;
+pub const ERROR_WINHTTP_RESEND_REQUEST: DWORD = WINHTTP_ERROR_BASE + 32;
+pub const ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED: DWORD = WINHTTP_ERROR_BASE + 44;
+pub const ERROR_WINHTTP_CANNOT_CALL_BEFORE_OPEN: DWORD = WINHTTP_ERROR_BASE + 100;
+pub const ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND: DWORD = WINHTTP_ERROR_BASE + 101;
+pub const ERROR_WINHTTP_CANNOT_CALL_AFTER_SEND: DWORD = WINHTTP_ERROR_BASE + 102;
+pub const ERROR_WINHTTP_CANNOT_CALL_AFTER_OPEN: DWORD = WINHTTP_ERROR_BASE + 103;
+pub const ERROR_WINHTTP_HEADER_NOT_FOUND: DWORD = WINHTTP_ERROR_BASE + 150;
+pub const ERROR_WINHTTP_INVALID_SERVER_RESPONSE: DWORD = WINHTTP_ERROR_BASE + 152;
+pub const ERROR_WINHTTP_INVALID_HEADER: DWORD = WINHTTP_ERROR_BASE + 153;
+pub const ERROR_WINHTTP_INVALID_QUERY_REQUEST: DWORD = WINHTTP_ERROR_BASE + 154;
+pub const ERROR_WINHTTP_HEADER_ALREADY_EXISTS: DWORD = WINHTTP_ERROR_BASE + 155;
+pub const ERROR_WINHTTP_REDIRECT_FAILED: DWORD = WINHTTP_ERROR_BASE + 156;
+pub const ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR: DWORD = WINHTTP_ERROR_BASE + 178;
+pub const ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT: DWORD = WINHTTP_ERROR_BASE + 166;
+pub const ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT: DWORD = WINHTTP_ERROR_BASE + 167;
+pub const ERROR_WINHTTP_UNHANDLED_SCRIPT_TYPE: DWORD = WINHTTP_ERROR_BASE + 176;
+pub const ERROR_WINHTTP_SCRIPT_EXECUTION_ERROR: DWORD = WINHTTP_ERROR_BASE + 177;
+pub const ERROR_WINHTTP_NOT_INITIALIZED: DWORD = WINHTTP_ERROR_BASE + 172;
+pub const ERROR_WINHTTP_SECURE_FAILURE: DWORD = WINHTTP_ERROR_BASE + 175;
+pub const ERROR_WINHTTP_SECURE_CERT_DATE_INVALID: DWORD = WINHTTP_ERROR_BASE + 37;
+pub const ERROR_WINHTTP_SECURE_CERT_CN_INVALID: DWORD = WINHTTP_ERROR_BASE + 38;
+pub const ERROR_WINHTTP_SECURE_INVALID_CA: DWORD = WINHTTP_ERROR_BASE + 45;
+pub const ERROR_WINHTTP_SECURE_CERT_REV_FAILED: DWORD = WINHTTP_ERROR_BASE + 57;
+pub const ERROR_WINHTTP_SECURE_CHANNEL_ERROR: DWORD = WINHTTP_ERROR_BASE + 157;
+pub const ERROR_WINHTTP_SECURE_INVALID_CERT: DWORD = WINHTTP_ERROR_BASE + 169;
+pub const ERROR_WINHTTP_SECURE_CERT_REVOKED: DWORD = WINHTTP_ERROR_BASE + 170;
+pub const ERROR_WINHTTP_SECURE_CERT_WRONG_USAGE: DWORD = WINHTTP_ERROR_BASE + 179;
+pub const ERROR_WINHTTP_AUTODETECTION_FAILED: DWORD = WINHTTP_ERROR_BASE + 180;
+pub const ERROR_WINHTTP_HEADER_COUNT_EXCEEDED: DWORD = WINHTTP_ERROR_BASE + 181;
+pub const ERROR_WINHTTP_HEADER_SIZE_OVERFLOW: DWORD = WINHTTP_ERROR_BASE + 182;
+pub const ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW: DWORD = WINHTTP_ERROR_BASE + 183;
+pub const ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW: DWORD = WINHTTP_ERROR_BASE + 184;
+pub const ERROR_WINHTTP_CLIENT_CERT_NO_PRIVATE_KEY: DWORD = WINHTTP_ERROR_BASE + 185;
+pub const ERROR_WINHTTP_CLIENT_CERT_NO_ACCESS_PRIVATE_KEY: DWORD = WINHTTP_ERROR_BASE + 186;
+pub const WINHTTP_ERROR_LAST: DWORD = WINHTTP_ERROR_BASE + 186;
+pub const WINHTTP_RESET_STATE: DWORD = 0x00000001;
+pub const WINHTTP_RESET_SWPAD_CURRENT_NETWORK: DWORD = 0x00000002;
+pub const WINHTTP_RESET_SWPAD_ALL: DWORD = 0x00000004;
+pub const WINHTTP_RESET_SCRIPT_CACHE: DWORD = 0x00000008;
+pub const WINHTTP_RESET_ALL: DWORD = 0x0000FFFF;
+pub const WINHTTP_RESET_NOTIFY_NETWORK_CHANGED: DWORD = 0x00010000;
+pub const WINHTTP_RESET_OUT_OF_PROC: DWORD = 0x00020000;
+extern "system" {
+ pub fn WinHttpSetStatusCallback(
+ hInternet: HINTERNET,
+ lpfnInternetCallback: WINHTTP_STATUS_CALLBACK,
+ dwNotificationFlags: DWORD,
+ dwReserved: DWORD_PTR,
+ ) -> WINHTTP_STATUS_CALLBACK;
+ pub fn WinHttpTimeFromSystemTime(
+ pst: *const SYSTEMTIME,
+ pwszTime: LPWSTR,
+ ) -> BOOL;
+ pub fn WinHttpTimeToSystemTime(
+ pwszTime: LPCWSTR,
+ pst: *mut SYSTEMTIME,
+ ) -> BOOL;
+ pub fn WinHttpCrackUrl(
+ pwszUrl: LPCWSTR,
+ dwUrlLength: DWORD,
+ dwFlags: DWORD,
+ lpUrlComponents: LPURL_COMPONENTS,
+ ) -> BOOL;
+ pub fn WinHttpCreateUrl(
+ lpUrlComponents: LPURL_COMPONENTS,
+ dwFlags: DWORD,
+ pwszUrl: LPWSTR,
+ pdwUrlLength: LPDWORD,
+ ) -> BOOL;
+ pub fn WinHttpCheckPlatform() -> BOOL;
+ pub fn WinHttpGetDefaultProxyConfiguration(
+ pProxyInfo: *mut WINHTTP_PROXY_INFO,
+ ) -> BOOL;
+ pub fn WinHttpSetDefaultProxyConfiguration(
+ pProxyInfo: *mut WINHTTP_PROXY_INFO,
+ ) -> BOOL;
+ pub fn WinHttpOpen(
+ pszAgentW: LPCWSTR,
+ dwAccessType: DWORD,
+ pszProxyW: LPCWSTR,
+ pszProxyBypassW: LPCWSTR,
+ dwFlags: DWORD,
+ ) -> HINTERNET;
+ pub fn WinHttpCloseHandle(
+ hInternet: HINTERNET,
+ ) -> BOOL;
+ pub fn WinHttpConnect(
+ hSession: HINTERNET,
+ pswzServerName: LPCWSTR,
+ nServerPort: INTERNET_PORT,
+ dwReserved: DWORD,
+ ) -> HINTERNET;
+ pub fn WinHttpReadData(
+ hRequest: HINTERNET,
+ lpBuffer: LPVOID,
+ dwNumberOfBytesToRead: DWORD,
+ lpdwNumberOfBytesRead: LPDWORD,
+ ) -> BOOL;
+ pub fn WinHttpWriteData(
+ hRequest: HINTERNET,
+ lpBuffer: LPCVOID,
+ dwNumberOfBytesToWrite: DWORD,
+ lpdwNumberOfBytesWritten: LPDWORD,
+ ) -> BOOL;
+ pub fn WinHttpQueryDataAvailable(
+ hRequest: HINTERNET,
+ lpdwNumberOfBytesAvailable: LPDWORD,
+ ) -> BOOL;
+ pub fn WinHttpQueryOption(
+ hInternet: HINTERNET,
+ dwOption: DWORD,
+ lpBuffer: LPVOID,
+ lpdwBufferLength: LPDWORD,
+ ) -> BOOL;
+ pub fn WinHttpSetOption(
+ hInternet: HINTERNET,
+ dwOption: DWORD,
+ lpBuffer: LPVOID,
+ dwBufferLength: DWORD,
+ ) -> BOOL;
+ pub fn WinHttpSetTimeouts(
+ hInternet: HINTERNET,
+ nResolveTimeout: c_int,
+ nConnectTimeout: c_int,
+ nSendTimeout: c_int,
+ nReceiveTimeout: c_int,
+ ) -> BOOL;
+ pub fn WinHttpOpenRequest(
+ hConnect: HINTERNET,
+ pwszVerb: LPCWSTR,
+ pwszObjectName: LPCWSTR,
+ pwszVersion: LPCWSTR,
+ pwszReferrer: LPCWSTR,
+ ppwszAcceptTypes: *mut LPCWSTR,
+ dwFlags: DWORD,
+ ) -> HINTERNET;
+ pub fn WinHttpAddRequestHeaders(
+ hRequest: HINTERNET,
+ lpszHeaders: LPCWSTR,
+ dwHeadersLength: DWORD,
+ dwModifiers: DWORD,
+ ) -> BOOL;
+ pub fn WinHttpSendRequest(
+ hRequest: HINTERNET,
+ lpszHeaders: LPCWSTR,
+ dwHeadersLength: DWORD,
+ lpOptional: LPVOID,
+ dwOptionalLength: DWORD,
+ dwTotalLength: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> BOOL;
+ pub fn WinHttpSetCredentials(
+ hRequest: HINTERNET,
+ AuthTargets: DWORD,
+ AuthScheme: DWORD,
+ pwszUserName: LPCWSTR,
+ pwszPassword: LPCWSTR,
+ pAuthParams: LPVOID,
+ ) -> BOOL;
+ pub fn WinHttpQueryAuthSchemes(
+ hRequest: HINTERNET,
+ lpdwSupportedSchemes: LPDWORD,
+ lpdwFirstScheme: LPDWORD,
+ pdwAuthTarget: LPDWORD,
+ ) -> BOOL;
+ pub fn WinHttpReceiveResponse(
+ hRequest: HINTERNET,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn WinHttpQueryHeaders(
+ hRequest: HINTERNET,
+ dwInfoLevel: DWORD,
+ pwszName: LPCWSTR,
+ lpBuffer: LPVOID,
+ lpdwBufferLength: LPDWORD,
+ lpdwIndex: LPDWORD,
+ ) -> BOOL;
+ pub fn WinHttpDetectAutoProxyConfigUrl(
+ dwAutoDetectFlags: DWORD,
+ ppwstrAutoConfigUrl: *mut LPWSTR,
+ ) -> BOOL;
+ pub fn WinHttpGetProxyForUrl(
+ hSession: HINTERNET,
+ lpcwszUrl: LPCWSTR,
+ pAutoProxyOptions: *mut WINHTTP_AUTOPROXY_OPTIONS,
+ pProxyInfo: *mut WINHTTP_PROXY_INFO,
+ ) -> BOOL;
+ pub fn WinHttpCreateProxyResolver(
+ hSession: HINTERNET,
+ phResolver: *mut HINTERNET,
+ ) -> DWORD;
+ pub fn WinHttpGetProxyForUrlEx(
+ hResolver: HINTERNET,
+ pcwszUrl: PCWSTR,
+ pAutoProxyOptions: *mut WINHTTP_AUTOPROXY_OPTIONS,
+ pContext: DWORD_PTR,
+ ) -> DWORD;
+ pub fn WinHttpGetProxyResult(
+ hResolver: HINTERNET,
+ pProxyResult: *mut WINHTTP_PROXY_RESULT,
+ ) -> DWORD;
+ pub fn WinHttpFreeProxyResult(
+ pProxyResult: *mut WINHTTP_PROXY_RESULT,
+ );
+ pub fn WinHttpResetAutoProxy(
+ hSession: HINTERNET,
+ dwFlags: DWORD,
+ ) -> DWORD;
+ pub fn WinHttpGetIEProxyConfigForCurrentUser(
+ pProxyConfig: *mut WINHTTP_CURRENT_USER_IE_PROXY_CONFIG,
+ ) -> BOOL;
+}
+ENUM!{enum WINHTTP_WEB_SOCKET_OPERATION {
+ WINHTTP_WEB_SOCKET_SEND_OPERATION = 0,
+ WINHTTP_WEB_SOCKET_RECEIVE_OPERATION = 1,
+ WINHTTP_WEB_SOCKET_CLOSE_OPERATION = 2,
+ WINHTTP_WEB_SOCKET_SHUTDOWN_OPERATION = 3,
+}}
+ENUM!{enum WINHTTP_WEB_SOCKET_BUFFER_TYPE {
+ WINHTTP_WEB_SOCKET_BINARY_MESSAGE_BUFFER_TYPE = 0,
+ WINHTTP_WEB_SOCKET_BINARY_FRAGMENT_BUFFER_TYPE = 1,
+ WINHTTP_WEB_SOCKET_UTF8_MESSAGE_BUFFER_TYPE = 2,
+ WINHTTP_WEB_SOCKET_UTF8_FRAGMENT_BUFFER_TYPE = 3,
+ WINHTTP_WEB_SOCKET_CLOSE_BUFFER_TYPE = 4,
+}}
+ENUM!{enum WINHTTP_WEB_SOCKET_CLOSE_STATUS {
+ WINHTTP_WEB_SOCKET_SUCCESS_CLOSE_STATUS = 1000,
+ WINHTTP_WEB_SOCKET_ENDPOINT_TERMINATED_CLOSE_STATUS = 1001,
+ WINHTTP_WEB_SOCKET_PROTOCOL_ERROR_CLOSE_STATUS = 1002,
+ WINHTTP_WEB_SOCKET_INVALID_DATA_TYPE_CLOSE_STATUS = 1003,
+ WINHTTP_WEB_SOCKET_EMPTY_CLOSE_STATUS = 1005,
+ WINHTTP_WEB_SOCKET_ABORTED_CLOSE_STATUS = 1006,
+ WINHTTP_WEB_SOCKET_INVALID_PAYLOAD_CLOSE_STATUS = 1007,
+ WINHTTP_WEB_SOCKET_POLICY_VIOLATION_CLOSE_STATUS = 1008,
+ WINHTTP_WEB_SOCKET_MESSAGE_TOO_BIG_CLOSE_STATUS = 1009,
+ WINHTTP_WEB_SOCKET_UNSUPPORTED_EXTENSIONS_CLOSE_STATUS = 1010,
+ WINHTTP_WEB_SOCKET_SERVER_ERROR_CLOSE_STATUS = 1011,
+ WINHTTP_WEB_SOCKET_SECURE_HANDSHAKE_ERROR_CLOSE_STATUS = 1015,
+}}
+extern "system" {
+ pub fn WinHttpWebSocketCompleteUpgrade(
+ hRequest: HINTERNET,
+ pContext: DWORD_PTR,
+ ) -> HINTERNET;
+ pub fn WinHttpWebSocketSend(
+ hWebSocket: HINTERNET,
+ eBufferType: WINHTTP_WEB_SOCKET_BUFFER_TYPE,
+ pvBuffer: PVOID,
+ dwBufferLength: DWORD,
+ ) -> DWORD;
+ pub fn WinHttpWebSocketReceive(
+ hWebSocket: HINTERNET,
+ pvBuffer: PVOID,
+ dwBufferLength: DWORD,
+ pdwBytesRead: *mut DWORD,
+ peBufferType: *mut WINHTTP_WEB_SOCKET_BUFFER_TYPE,
+ ) -> DWORD;
+ pub fn WinHttpWebSocketShutdown(
+ hWebSocket: HINTERNET,
+ usStatus: USHORT,
+ pvReason: PVOID,
+ dwReasonLength: DWORD,
+ ) -> DWORD;
+ pub fn WinHttpWebSocketClose(
+ hWebSocket: HINTERNET,
+ usStatus: USHORT,
+ pvReason: PVOID,
+ dwReasonLength: DWORD,
+ ) -> DWORD;
+ pub fn WinHttpWebSocketQueryCloseStatus(
+ hWebSocket: HINTERNET,
+ pusStatus: *mut USHORT,
+ pvReason: PVOID,
+ dwReasonLength: DWORD,
+ pdwReasonLengthConsumed: *mut DWORD,
+ ) -> DWORD;
+}
diff --git a/vendor/winapi/src/um/wininet.rs b/vendor/winapi/src/um/wininet.rs
new file mode 100644
index 000000000..9a83d6a5d
--- /dev/null
+++ b/vendor/winapi/src/um/wininet.rs
@@ -0,0 +1,2364 @@
+// 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.
+//! Windows Internet Services API procedure declarations, types and constants.
+use ctypes::c_int;
+use shared::basetsd::DWORD_PTR;
+use shared::minwindef::{
+ BOOL, DWORD, FALSE, FILETIME, INT, LPBYTE,
+ LPCVOID, LPDWORD, LPVOID, PBYTE, PDWORD, TRUE, WORD,
+};
+use shared::ntdef::{LONG, LONGLONG, PLONG};
+use shared::windef::HWND;
+use um::minwinbase::{LPWIN32_FIND_DATAA, LPWIN32_FIND_DATAW, SYSTEMTIME};
+use um::winineti::INTERNET_FLAG_BGUPDATE;
+use um::winnt::{
+ CHAR, DWORDLONG, HANDLE, LPCSTR, LPCWSTR,
+ LPSTR, LPWSTR, PCWSTR, PSTR, PWSTR, WCHAR,
+};
+pub type HINTERNET = LPVOID;
+pub type LPHINTERNET = *mut HINTERNET;
+pub type INTERNET_PORT = WORD;
+pub type LPINTERNET_PORT = *mut INTERNET_PORT;
+pub const INTERNET_INVALID_PORT_NUMBER: DWORD = 0;
+pub const INTERNET_DEFAULT_FTP_PORT: DWORD = 21;
+pub const INTERNET_DEFAULT_GOPHER_PORT: DWORD = 70;
+pub const INTERNET_DEFAULT_HTTP_PORT: DWORD = 80;
+pub const INTERNET_DEFAULT_HTTPS_PORT: DWORD = 443;
+pub const INTERNET_DEFAULT_SOCKS_PORT: DWORD = 1080;
+pub const INTERNET_MAX_HOST_NAME_LENGTH: usize = 256;
+pub const INTERNET_MAX_USER_NAME_LENGTH: usize = 128;
+pub const INTERNET_MAX_PASSWORD_LENGTH: usize = 128;
+pub const INTERNET_MAX_PORT_NUMBER_LENGTH: usize = 5;
+pub const INTERNET_MAX_PORT_NUMBER_VALUE: DWORD = 65535;
+pub const INTERNET_MAX_PATH_LENGTH: usize = 2048;
+pub const INTERNET_MAX_SCHEME_LENGTH: usize = 32;
+pub const INTERNET_MAX_URL_LENGTH: usize = INTERNET_MAX_SCHEME_LENGTH + 3
+ + INTERNET_MAX_PATH_LENGTH;
+pub const INTERNET_KEEP_ALIVE_UNKNOWN: DWORD = -1i32 as u32;
+pub const INTERNET_KEEP_ALIVE_ENABLED: DWORD = 1;
+pub const INTERNET_KEEP_ALIVE_DISABLED: DWORD = 0;
+pub const INTERNET_REQFLAG_FROM_CACHE: DWORD = 0x00000001;
+pub const INTERNET_REQFLAG_ASYNC: DWORD = 0x00000002;
+pub const INTERNET_REQFLAG_VIA_PROXY: DWORD = 0x00000004;
+pub const INTERNET_REQFLAG_NO_HEADERS: DWORD = 0x00000008;
+pub const INTERNET_REQFLAG_PASSIVE: DWORD = 0x00000010;
+pub const INTERNET_REQFLAG_CACHE_WRITE_DISABLED: DWORD = 0x00000040;
+pub const INTERNET_REQFLAG_NET_TIMEOUT: DWORD = 0x00000080;
+pub const INTERNET_FLAG_IDN_DIRECT: DWORD = 0x00000001;
+pub const INTERNET_FLAG_IDN_PROXY: DWORD = 0x00000002;
+pub const INTERNET_FLAG_RELOAD: DWORD = 0x80000000;
+pub const INTERNET_FLAG_RAW_DATA: DWORD = 0x40000000;
+pub const INTERNET_FLAG_EXISTING_CONNECT: DWORD = 0x20000000;
+pub const INTERNET_FLAG_ASYNC: DWORD = 0x10000000;
+pub const INTERNET_FLAG_PASSIVE: DWORD = 0x08000000;
+pub const INTERNET_FLAG_NO_CACHE_WRITE: DWORD = 0x04000000;
+pub const INTERNET_FLAG_DONT_CACHE: DWORD = INTERNET_FLAG_NO_CACHE_WRITE;
+pub const INTERNET_FLAG_MAKE_PERSISTENT: DWORD = 0x02000000;
+pub const INTERNET_FLAG_FROM_CACHE: DWORD = 0x01000000;
+pub const INTERNET_FLAG_OFFLINE: DWORD = INTERNET_FLAG_FROM_CACHE;
+pub const INTERNET_FLAG_SECURE: DWORD = 0x00800000;
+pub const INTERNET_FLAG_KEEP_CONNECTION: DWORD = 0x00400000;
+pub const INTERNET_FLAG_NO_AUTO_REDIRECT: DWORD = 0x00200000;
+pub const INTERNET_FLAG_READ_PREFETCH: DWORD = 0x00100000;
+pub const INTERNET_FLAG_NO_COOKIES: DWORD = 0x00080000;
+pub const INTERNET_FLAG_NO_AUTH: DWORD = 0x00040000;
+pub const INTERNET_FLAG_RESTRICTED_ZONE: DWORD = 0x00020000;
+pub const INTERNET_FLAG_CACHE_IF_NET_FAIL: DWORD = 0x00010000;
+pub const INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP: DWORD = 0x00008000;
+pub const INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS: DWORD = 0x00004000;
+pub const INTERNET_FLAG_IGNORE_CERT_DATE_INVALID: DWORD = 0x00002000;
+pub const INTERNET_FLAG_IGNORE_CERT_CN_INVALID: DWORD = 0x00001000;
+pub const INTERNET_FLAG_RESYNCHRONIZE: DWORD = 0x00000800;
+pub const INTERNET_FLAG_HYPERLINK: DWORD = 0x00000400;
+pub const INTERNET_FLAG_NO_UI: DWORD = 0x00000200;
+pub const INTERNET_FLAG_PRAGMA_NOCACHE: DWORD = 0x00000100;
+pub const INTERNET_FLAG_CACHE_ASYNC: DWORD = 0x00000080;
+pub const INTERNET_FLAG_FORMS_SUBMIT: DWORD = 0x00000040;
+pub const INTERNET_FLAG_FWD_BACK: DWORD = 0x00000020;
+pub const INTERNET_FLAG_NEED_FILE: DWORD = 0x00000010;
+pub const INTERNET_FLAG_MUST_CACHE_REQUEST: DWORD = INTERNET_FLAG_NEED_FILE;
+pub const INTERNET_FLAG_TRANSFER_ASCII: DWORD = FTP_TRANSFER_TYPE_ASCII;
+pub const INTERNET_FLAG_TRANSFER_BINARY: DWORD = FTP_TRANSFER_TYPE_BINARY;
+pub const SECURITY_INTERNET_MASK: DWORD = INTERNET_FLAG_IGNORE_CERT_CN_INVALID
+ | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS
+ | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP;
+pub const SECURITY_IGNORE_ERROR_MASK: DWORD = INTERNET_FLAG_IGNORE_CERT_CN_INVALID
+ | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID | SECURITY_FLAG_IGNORE_UNKNOWN_CA
+ | SECURITY_FLAG_IGNORE_REVOCATION;
+pub const INTERNET_FLAGS_MASK: DWORD = INTERNET_FLAG_RELOAD | INTERNET_FLAG_RAW_DATA
+ | INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_ASYNC | INTERNET_FLAG_PASSIVE
+ | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_MAKE_PERSISTENT | INTERNET_FLAG_FROM_CACHE
+ | INTERNET_FLAG_SECURE | INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_NO_AUTO_REDIRECT
+ | INTERNET_FLAG_READ_PREFETCH | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_AUTH
+ | INTERNET_FLAG_CACHE_IF_NET_FAIL | SECURITY_INTERNET_MASK | INTERNET_FLAG_RESYNCHRONIZE
+ | INTERNET_FLAG_HYPERLINK | INTERNET_FLAG_NO_UI | INTERNET_FLAG_PRAGMA_NOCACHE
+ | INTERNET_FLAG_CACHE_ASYNC | INTERNET_FLAG_FORMS_SUBMIT | INTERNET_FLAG_NEED_FILE
+ | INTERNET_FLAG_RESTRICTED_ZONE | INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_TRANSFER_ASCII
+ | INTERNET_FLAG_FWD_BACK | INTERNET_FLAG_BGUPDATE;
+pub const INTERNET_ERROR_MASK_INSERT_CDROM: DWORD = 0x1;
+pub const INTERNET_ERROR_MASK_COMBINED_SEC_CERT: DWORD = 0x2;
+pub const INTERNET_ERROR_MASK_NEED_MSN_SSPI_PKG: DWORD = 0x4;
+pub const INTERNET_ERROR_MASK_LOGIN_FAILURE_DISPLAY_ENTITY_BODY: DWORD = 0x8;
+pub const INTERNET_OPTIONS_MASK: DWORD = !INTERNET_FLAGS_MASK;
+pub const WININET_API_FLAG_ASYNC: DWORD = 0x00000001;
+pub const WININET_API_FLAG_SYNC: DWORD = 0x00000004;
+pub const WININET_API_FLAG_USE_CONTEXT: DWORD = 0x00000008;
+pub const INTERNET_NO_CALLBACK: DWORD = 0;
+ENUM!{enum INTERNET_SCHEME {
+ INTERNET_SCHEME_PARTIAL = -2i32 as u32,
+ INTERNET_SCHEME_UNKNOWN = -1i32 as u32,
+ INTERNET_SCHEME_DEFAULT = 0,
+ INTERNET_SCHEME_FTP,
+ INTERNET_SCHEME_GOPHER,
+ INTERNET_SCHEME_HTTP,
+ INTERNET_SCHEME_HTTPS,
+ INTERNET_SCHEME_FILE,
+ INTERNET_SCHEME_NEWS,
+ INTERNET_SCHEME_MAILTO,
+ INTERNET_SCHEME_SOCKS,
+ INTERNET_SCHEME_JAVASCRIPT,
+ INTERNET_SCHEME_VBSCRIPT,
+ INTERNET_SCHEME_RES,
+ INTERNET_SCHEME_FIRST = INTERNET_SCHEME_FTP,
+ INTERNET_SCHEME_LAST = INTERNET_SCHEME_RES,
+}}
+pub type LPINTERNET_SCHEME = *mut INTERNET_SCHEME;
+STRUCT!{struct INTERNET_ASYNC_RESULT {
+ dwResult: DWORD_PTR,
+ dwError: DWORD,
+}}
+pub type LPINTERNET_ASYNC_RESULT = *mut INTERNET_ASYNC_RESULT;
+STRUCT!{struct INTERNET_DIAGNOSTIC_SOCKET_INFO {
+ Socket: DWORD_PTR,
+ SourcePort: DWORD,
+ DestPort: DWORD,
+ Flags: DWORD,
+}}
+pub type LPINTERNET_DIAGNOSTIC_SOCKET_INFO = *mut INTERNET_DIAGNOSTIC_SOCKET_INFO;
+pub const IDSI_FLAG_KEEP_ALIVE: DWORD = 0x00000001;
+pub const IDSI_FLAG_SECURE: DWORD = 0x00000002;
+pub const IDSI_FLAG_PROXY: DWORD = 0x00000004;
+pub const IDSI_FLAG_TUNNEL: DWORD = 0x00000008;
+STRUCT!{struct INTERNET_PROXY_INFO {
+ dwAccessType: DWORD,
+ lpszProxy: LPCWSTR,
+ lpszProxyBypass: LPCWSTR,
+}}
+pub type LPINTERNET_PROXY_INFO = *mut INTERNET_PROXY_INFO;
+UNION!{union INTERNET_PER_CONN_OPTIONA_Value {
+ [u32; 2] [u64; 1],
+ dwValue dwValue_mut: DWORD,
+ pszValue pszValue_mut: LPSTR,
+ ftValue ftValue_mut: FILETIME,
+}}
+STRUCT!{struct INTERNET_PER_CONN_OPTIONA {
+ dwOption: DWORD,
+ Value: INTERNET_PER_CONN_OPTIONA_Value,
+}}
+pub type LPINTERNET_PER_CONN_OPTIONA = *mut INTERNET_PER_CONN_OPTIONA;
+UNION!{union INTERNET_PER_CONN_OPTIONW_Value {
+ [u32; 2] [u64; 1],
+ dwValue dwValue_mut: DWORD,
+ pszValue pszValue_mut: LPWSTR,
+ ftValue ftValue_mut: FILETIME,
+}}
+STRUCT!{struct INTERNET_PER_CONN_OPTIONW {
+ dwOption: DWORD,
+ Value: INTERNET_PER_CONN_OPTIONW_Value,
+}}
+pub type LPINTERNET_PER_CONN_OPTIONW = *mut INTERNET_PER_CONN_OPTIONW;
+STRUCT!{struct INTERNET_PER_CONN_OPTION_LISTA {
+ dwSize: DWORD,
+ pszConnection: LPSTR,
+ dwOptionCount: DWORD,
+ dwOptionError: DWORD,
+ pOptions: LPINTERNET_PER_CONN_OPTIONA,
+}}
+pub type LPINTERNET_PER_CONN_OPTION_LISTA = *mut INTERNET_PER_CONN_OPTION_LISTA;
+STRUCT!{struct INTERNET_PER_CONN_OPTION_LISTW {
+ dwSize: DWORD,
+ pszConnection: LPWSTR,
+ dwOptionCount: DWORD,
+ dwOptionError: DWORD,
+ pOptions: LPINTERNET_PER_CONN_OPTIONW,
+}}
+pub type LPINTERNET_PER_CONN_OPTION_LISTW = *mut INTERNET_PER_CONN_OPTION_LISTW;
+pub const INTERNET_PER_CONN_FLAGS: DWORD = 1;
+pub const INTERNET_PER_CONN_PROXY_SERVER: DWORD = 2;
+pub const INTERNET_PER_CONN_PROXY_BYPASS: DWORD = 3;
+pub const INTERNET_PER_CONN_AUTOCONFIG_URL: DWORD = 4;
+pub const INTERNET_PER_CONN_AUTODISCOVERY_FLAGS: DWORD = 5;
+pub const INTERNET_PER_CONN_AUTOCONFIG_SECONDARY_URL: DWORD = 6;
+pub const INTERNET_PER_CONN_AUTOCONFIG_RELOAD_DELAY_MINS: DWORD = 7;
+pub const INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_TIME: DWORD = 8;
+pub const INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_URL: DWORD = 9;
+pub const INTERNET_PER_CONN_FLAGS_UI: DWORD = 10;
+pub const PROXY_TYPE_DIRECT: DWORD = 0x00000001;
+pub const PROXY_TYPE_PROXY: DWORD = 0x00000002;
+pub const PROXY_TYPE_AUTO_PROXY_URL: DWORD = 0x00000004;
+pub const PROXY_TYPE_AUTO_DETECT: DWORD = 0x00000008;
+pub const AUTO_PROXY_FLAG_USER_SET: DWORD = 0x00000001;
+pub const AUTO_PROXY_FLAG_ALWAYS_DETECT: DWORD = 0x00000002;
+pub const AUTO_PROXY_FLAG_DETECTION_RUN: DWORD = 0x00000004;
+pub const AUTO_PROXY_FLAG_MIGRATED: DWORD = 0x00000008;
+pub const AUTO_PROXY_FLAG_DONT_CACHE_PROXY_RESULT: DWORD = 0x00000010;
+pub const AUTO_PROXY_FLAG_CACHE_INIT_RUN: DWORD = 0x00000020;
+pub const AUTO_PROXY_FLAG_DETECTION_SUSPECT: DWORD = 0x00000040;
+STRUCT!{struct INTERNET_VERSION_INFO {
+ dwMajorVersion: DWORD,
+ dwMinorVersion: DWORD,
+}}
+pub type LPINTERNET_VERSION_INFO = *mut INTERNET_VERSION_INFO;
+STRUCT!{struct HTTP_VERSION_INFO {
+ dwMajorVersion: DWORD,
+ dwMinorVersion: DWORD,
+}}
+pub type LPHTTP_VERSION_INFO = *mut HTTP_VERSION_INFO;
+STRUCT!{struct INTERNET_CONNECTED_INFO {
+ dwConnectedState: DWORD,
+ dwFlags: DWORD,
+}}
+pub type LPINTERNET_CONNECTED_INFO = *mut INTERNET_CONNECTED_INFO;
+pub const ISO_FORCE_DISCONNECTED: DWORD = 0x00000001;
+STRUCT!{struct URL_COMPONENTSA {
+ dwStructSize: DWORD,
+ lpszScheme: LPSTR,
+ dwSchemeLength: DWORD,
+ nScheme: INTERNET_SCHEME,
+ lpszHostName: LPSTR,
+ dwHostNameLength: DWORD,
+ nPort: INTERNET_PORT,
+ lpszUserName: LPSTR,
+ dwUserNameLength: DWORD,
+ lpszPassword: LPSTR,
+ dwPasswordLength: DWORD,
+ lpszUrlPath: LPSTR,
+ dwUrlPathLength: DWORD,
+ lpszExtraInfo: LPSTR,
+ dwExtraInfoLength: DWORD,
+}}
+pub type LPURL_COMPONENTSA = *mut URL_COMPONENTSA;
+STRUCT!{struct URL_COMPONENTSW {
+ dwStructSize: DWORD,
+ lpszScheme: LPWSTR,
+ dwSchemeLength: DWORD,
+ nScheme: INTERNET_SCHEME,
+ lpszHostName: LPWSTR,
+ dwHostNameLength: DWORD,
+ nPort: INTERNET_PORT,
+ lpszUserName: LPWSTR,
+ dwUserNameLength: DWORD,
+ lpszPassword: LPWSTR,
+ dwPasswordLength: DWORD,
+ lpszUrlPath: LPWSTR,
+ dwUrlPathLength: DWORD,
+ lpszExtraInfo: LPWSTR,
+ dwExtraInfoLength: DWORD,
+}}
+pub type LPURL_COMPONENTSW = *mut URL_COMPONENTSW;
+STRUCT!{struct INTERNET_CERTIFICATE_INFO {
+ ftExpiry: FILETIME,
+ ftStart: FILETIME,
+ lpszSubjectInfo: LPWSTR,
+ lpszIssuerInfo: LPWSTR,
+ lpszProtocolName: LPWSTR,
+ lpszSignatureAlgName: LPWSTR,
+ lpszEncryptionAlgName: LPWSTR,
+ dwKeySize: DWORD,
+}}
+pub type LPINTERNET_CERTIFICATE_INFO = *mut INTERNET_CERTIFICATE_INFO;
+STRUCT!{struct INTERNET_BUFFERSA {
+ dwStructSize: DWORD,
+ Next: *mut INTERNET_BUFFERSA,
+ lpcszHeader: LPCSTR,
+ dwHeadersLength: DWORD,
+ dwHeadersTotal: DWORD,
+ lpvBuffer: LPVOID,
+ dwBufferLength: DWORD,
+ dwBufferTotal: DWORD,
+ dwOffsetLow: DWORD,
+ dwOffsetHigh: DWORD,
+}}
+pub type LPINTERNET_BUFFERSA = *mut INTERNET_BUFFERSA;
+STRUCT!{struct INTERNET_BUFFERSW {
+ dwStructSize: DWORD,
+ Next: *mut INTERNET_BUFFERSW,
+ lpcszHeader: LPCWSTR,
+ dwHeadersLength: DWORD,
+ dwHeadersTotal: DWORD,
+ lpvBuffer: LPVOID,
+ dwBufferLength: DWORD,
+ dwBufferTotal: DWORD,
+ dwOffsetLow: DWORD,
+ dwOffsetHigh: DWORD,
+}}
+pub type LPINTERNET_BUFFERSW = *mut INTERNET_BUFFERSW;
+pub const INTERNET_RFC1123_FORMAT: DWORD = 0;
+pub const INTERNET_RFC1123_BUFSIZE: DWORD = 30;
+pub const ICU_ESCAPE: DWORD = 0x80000000;
+pub const ICU_USERNAME: DWORD = 0x40000000;
+pub const ICU_NO_ENCODE: DWORD = 0x20000000;
+pub const ICU_DECODE: DWORD = 0x10000000;
+pub const ICU_NO_META: DWORD = 0x08000000;
+pub const ICU_ENCODE_SPACES_ONLY: DWORD = 0x04000000;
+pub const ICU_BROWSER_MODE: DWORD = 0x02000000;
+pub const ICU_ENCODE_PERCENT: DWORD = 0x00001000;
+pub const INTERNET_OPEN_TYPE_PRECONFIG: DWORD = 0;
+pub const INTERNET_OPEN_TYPE_DIRECT: DWORD = 1;
+pub const INTERNET_OPEN_TYPE_PROXY: DWORD = 3;
+pub const INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY: DWORD = 4;
+pub const PRE_CONFIG_INTERNET_ACCESS: DWORD = INTERNET_OPEN_TYPE_PRECONFIG;
+pub const LOCAL_INTERNET_ACCESS: DWORD = INTERNET_OPEN_TYPE_DIRECT;
+pub const CERN_PROXY_INTERNET_ACCESS: DWORD = INTERNET_OPEN_TYPE_PROXY;
+pub const INTERNET_SERVICE_FTP: DWORD = 1;
+pub const INTERNET_SERVICE_GOPHER: DWORD = 2;
+pub const INTERNET_SERVICE_HTTP: DWORD = 3;
+pub const IRF_ASYNC: DWORD = WININET_API_FLAG_ASYNC;
+pub const IRF_SYNC: DWORD = WININET_API_FLAG_SYNC;
+pub const IRF_USE_CONTEXT: DWORD = WININET_API_FLAG_USE_CONTEXT;
+pub const IRF_NO_WAIT: DWORD = 0x00000008;
+pub const ISO_GLOBAL: DWORD = 0x00000001;
+pub const ISO_REGISTRY: DWORD = 0x00000002;
+pub const ISO_VALID_FLAGS: DWORD = ISO_GLOBAL | ISO_REGISTRY;
+pub const INTERNET_OPTION_CALLBACK: DWORD = 1;
+pub const INTERNET_OPTION_CONNECT_TIMEOUT: DWORD = 2;
+pub const INTERNET_OPTION_CONNECT_RETRIES: DWORD = 3;
+pub const INTERNET_OPTION_CONNECT_BACKOFF: DWORD = 4;
+pub const INTERNET_OPTION_SEND_TIMEOUT: DWORD = 5;
+pub const INTERNET_OPTION_CONTROL_SEND_TIMEOUT: DWORD = INTERNET_OPTION_SEND_TIMEOUT;
+pub const INTERNET_OPTION_RECEIVE_TIMEOUT: DWORD = 6;
+pub const INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT: DWORD = INTERNET_OPTION_RECEIVE_TIMEOUT;
+pub const INTERNET_OPTION_DATA_SEND_TIMEOUT: DWORD = 7;
+pub const INTERNET_OPTION_DATA_RECEIVE_TIMEOUT: DWORD = 8;
+pub const INTERNET_OPTION_HANDLE_TYPE: DWORD = 9;
+pub const INTERNET_OPTION_LISTEN_TIMEOUT: DWORD = 11;
+pub const INTERNET_OPTION_READ_BUFFER_SIZE: DWORD = 12;
+pub const INTERNET_OPTION_WRITE_BUFFER_SIZE: DWORD = 13;
+pub const INTERNET_OPTION_ASYNC_ID: DWORD = 15;
+pub const INTERNET_OPTION_ASYNC_PRIORITY: DWORD = 16;
+pub const INTERNET_OPTION_PARENT_HANDLE: DWORD = 21;
+pub const INTERNET_OPTION_KEEP_CONNECTION: DWORD = 22;
+pub const INTERNET_OPTION_REQUEST_FLAGS: DWORD = 23;
+pub const INTERNET_OPTION_EXTENDED_ERROR: DWORD = 24;
+pub const INTERNET_OPTION_OFFLINE_MODE: DWORD = 26;
+pub const INTERNET_OPTION_CACHE_STREAM_HANDLE: DWORD = 27;
+pub const INTERNET_OPTION_USERNAME: DWORD = 28;
+pub const INTERNET_OPTION_PASSWORD: DWORD = 29;
+pub const INTERNET_OPTION_ASYNC: DWORD = 30;
+pub const INTERNET_OPTION_SECURITY_FLAGS: DWORD = 31;
+pub const INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT: DWORD = 32;
+pub const INTERNET_OPTION_DATAFILE_NAME: DWORD = 33;
+pub const INTERNET_OPTION_URL: DWORD = 34;
+pub const INTERNET_OPTION_SECURITY_CERTIFICATE: DWORD = 35;
+pub const INTERNET_OPTION_SECURITY_KEY_BITNESS: DWORD = 36;
+pub const INTERNET_OPTION_REFRESH: DWORD = 37;
+pub const INTERNET_OPTION_PROXY: DWORD = 38;
+pub const INTERNET_OPTION_SETTINGS_CHANGED: DWORD = 39;
+pub const INTERNET_OPTION_VERSION: DWORD = 40;
+pub const INTERNET_OPTION_USER_AGENT: DWORD = 41;
+pub const INTERNET_OPTION_END_BROWSER_SESSION: DWORD = 42;
+pub const INTERNET_OPTION_PROXY_USERNAME: DWORD = 43;
+pub const INTERNET_OPTION_PROXY_PASSWORD: DWORD = 44;
+pub const INTERNET_OPTION_CONTEXT_VALUE: DWORD = 45;
+pub const INTERNET_OPTION_CONNECT_LIMIT: DWORD = 46;
+pub const INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT: DWORD = 47;
+pub const INTERNET_OPTION_POLICY: DWORD = 48;
+pub const INTERNET_OPTION_DISCONNECTED_TIMEOUT: DWORD = 49;
+pub const INTERNET_OPTION_CONNECTED_STATE: DWORD = 50;
+pub const INTERNET_OPTION_IDLE_STATE: DWORD = 51;
+pub const INTERNET_OPTION_OFFLINE_SEMANTICS: DWORD = 52;
+pub const INTERNET_OPTION_SECONDARY_CACHE_KEY: DWORD = 53;
+pub const INTERNET_OPTION_CALLBACK_FILTER: DWORD = 54;
+pub const INTERNET_OPTION_CONNECT_TIME: DWORD = 55;
+pub const INTERNET_OPTION_SEND_THROUGHPUT: DWORD = 56;
+pub const INTERNET_OPTION_RECEIVE_THROUGHPUT: DWORD = 57;
+pub const INTERNET_OPTION_REQUEST_PRIORITY: DWORD = 58;
+pub const INTERNET_OPTION_HTTP_VERSION: DWORD = 59;
+pub const INTERNET_OPTION_RESET_URLCACHE_SESSION: DWORD = 60;
+pub const INTERNET_OPTION_ERROR_MASK: DWORD = 62;
+pub const INTERNET_OPTION_FROM_CACHE_TIMEOUT: DWORD = 63;
+pub const INTERNET_OPTION_BYPASS_EDITED_ENTRY: DWORD = 64;
+pub const INTERNET_OPTION_HTTP_DECODING: DWORD = 65;
+pub const INTERNET_OPTION_DIAGNOSTIC_SOCKET_INFO: DWORD = 67;
+pub const INTERNET_OPTION_CODEPAGE: DWORD = 68;
+pub const INTERNET_OPTION_CACHE_TIMESTAMPS: DWORD = 69;
+pub const INTERNET_OPTION_DISABLE_AUTODIAL: DWORD = 70;
+pub const INTERNET_OPTION_MAX_CONNS_PER_SERVER: DWORD = 73;
+pub const INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER: DWORD = 74;
+pub const INTERNET_OPTION_PER_CONNECTION_OPTION: DWORD = 75;
+pub const INTERNET_OPTION_DIGEST_AUTH_UNLOAD: DWORD = 76;
+pub const INTERNET_OPTION_IGNORE_OFFLINE: DWORD = 77;
+pub const INTERNET_OPTION_IDENTITY: DWORD = 78;
+pub const INTERNET_OPTION_REMOVE_IDENTITY: DWORD = 79;
+pub const INTERNET_OPTION_ALTER_IDENTITY: DWORD = 80;
+pub const INTERNET_OPTION_SUPPRESS_BEHAVIOR: DWORD = 81;
+pub const INTERNET_OPTION_AUTODIAL_MODE: DWORD = 82;
+pub const INTERNET_OPTION_AUTODIAL_CONNECTION: DWORD = 83;
+pub const INTERNET_OPTION_CLIENT_CERT_CONTEXT: DWORD = 84;
+pub const INTERNET_OPTION_AUTH_FLAGS: DWORD = 85;
+pub const INTERNET_OPTION_COOKIES_3RD_PARTY: DWORD = 86;
+pub const INTERNET_OPTION_DISABLE_PASSPORT_AUTH: DWORD = 87;
+pub const INTERNET_OPTION_SEND_UTF8_SERVERNAME_TO_PROXY: DWORD = 88;
+pub const INTERNET_OPTION_EXEMPT_CONNECTION_LIMIT: DWORD = 89;
+pub const INTERNET_OPTION_ENABLE_PASSPORT_AUTH: DWORD = 90;
+pub const INTERNET_OPTION_HIBERNATE_INACTIVE_WORKER_THREADS: DWORD = 91;
+pub const INTERNET_OPTION_ACTIVATE_WORKER_THREADS: DWORD = 92;
+pub const INTERNET_OPTION_RESTORE_WORKER_THREAD_DEFAULTS: DWORD = 93;
+pub const INTERNET_OPTION_SOCKET_SEND_BUFFER_LENGTH: DWORD = 94;
+pub const INTERNET_OPTION_PROXY_SETTINGS_CHANGED: DWORD = 95;
+pub const INTERNET_OPTION_DATAFILE_EXT: DWORD = 96;
+pub const INTERNET_OPTION_CODEPAGE_PATH: DWORD = 100;
+pub const INTERNET_OPTION_CODEPAGE_EXTRA: DWORD = 101;
+pub const INTERNET_OPTION_IDN: DWORD = 102;
+pub const INTERNET_OPTION_MAX_CONNS_PER_PROXY: DWORD = 103;
+pub const INTERNET_OPTION_SUPPRESS_SERVER_AUTH: DWORD = 104;
+pub const INTERNET_OPTION_SERVER_CERT_CHAIN_CONTEXT: DWORD = 105;
+pub const INTERNET_OPTION_ENABLE_REDIRECT_CACHE_READ: DWORD = 122;
+pub const INTERNET_OPTION_ENCODE_EXTRA: DWORD = 155;
+pub const INTERNET_FIRST_OPTION: DWORD = INTERNET_OPTION_CALLBACK;
+pub const INTERNET_LAST_OPTION: DWORD = INTERNET_OPTION_ENCODE_EXTRA;
+pub const INTERNET_PRIORITY_FOREGROUND: DWORD = 1000;
+pub const INTERNET_HANDLE_TYPE_INTERNET: DWORD = 1;
+pub const INTERNET_HANDLE_TYPE_CONNECT_FTP: DWORD = 2;
+pub const INTERNET_HANDLE_TYPE_CONNECT_GOPHER: DWORD = 3;
+pub const INTERNET_HANDLE_TYPE_CONNECT_HTTP: DWORD = 4;
+pub const INTERNET_HANDLE_TYPE_FTP_FIND: DWORD = 5;
+pub const INTERNET_HANDLE_TYPE_FTP_FIND_HTML: DWORD = 6;
+pub const INTERNET_HANDLE_TYPE_FTP_FILE: DWORD = 7;
+pub const INTERNET_HANDLE_TYPE_FTP_FILE_HTML: DWORD = 8;
+pub const INTERNET_HANDLE_TYPE_GOPHER_FIND: DWORD = 9;
+pub const INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML: DWORD = 10;
+pub const INTERNET_HANDLE_TYPE_GOPHER_FILE: DWORD = 11;
+pub const INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML: DWORD = 12;
+pub const INTERNET_HANDLE_TYPE_HTTP_REQUEST: DWORD = 13;
+pub const INTERNET_HANDLE_TYPE_FILE_REQUEST: DWORD = 14;
+pub const AUTH_FLAG_DISABLE_NEGOTIATE: DWORD = 0x00000001;
+pub const AUTH_FLAG_ENABLE_NEGOTIATE: DWORD = 0x00000002;
+pub const AUTH_FLAG_DISABLE_BASIC_CLEARCHANNEL: DWORD = 0x00000004;
+pub const AUTH_FLAG_DISABLE_SERVER_AUTH: DWORD = 0x00000008;
+pub const SECURITY_FLAG_SECURE: DWORD = 0x00000001;
+pub const SECURITY_FLAG_STRENGTH_WEAK: DWORD = 0x10000000;
+pub const SECURITY_FLAG_STRENGTH_MEDIUM: DWORD = 0x40000000;
+pub const SECURITY_FLAG_STRENGTH_STRONG: DWORD = 0x20000000;
+pub const SECURITY_FLAG_UNKNOWNBIT: DWORD = 0x80000000;
+pub const SECURITY_FLAG_FORTEZZA: DWORD = 0x08000000;
+pub const SECURITY_FLAG_NORMALBITNESS: DWORD = SECURITY_FLAG_STRENGTH_WEAK;
+pub const SECURITY_FLAG_SSL: DWORD = 0x00000002;
+pub const SECURITY_FLAG_SSL3: DWORD = 0x00000004;
+pub const SECURITY_FLAG_PCT: DWORD = 0x00000008;
+pub const SECURITY_FLAG_PCT4: DWORD = 0x00000010;
+pub const SECURITY_FLAG_IETFSSL4: DWORD = 0x00000020;
+pub const SECURITY_FLAG_40BIT: DWORD = SECURITY_FLAG_STRENGTH_WEAK;
+pub const SECURITY_FLAG_128BIT: DWORD = SECURITY_FLAG_STRENGTH_STRONG;
+pub const SECURITY_FLAG_56BIT: DWORD = SECURITY_FLAG_STRENGTH_MEDIUM;
+pub const SECURITY_FLAG_IGNORE_REVOCATION: DWORD = 0x00000080;
+pub const SECURITY_FLAG_IGNORE_UNKNOWN_CA: DWORD = 0x00000100;
+pub const SECURITY_FLAG_IGNORE_WRONG_USAGE: DWORD = 0x00000200;
+pub const SECURITY_FLAG_IGNORE_CERT_CN_INVALID: DWORD = INTERNET_FLAG_IGNORE_CERT_CN_INVALID;
+pub const SECURITY_FLAG_IGNORE_CERT_DATE_INVALID: DWORD = INTERNET_FLAG_IGNORE_CERT_DATE_INVALID;
+pub const SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS: DWORD = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS;
+pub const SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP: DWORD = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP;
+pub const SECURITY_SET_MASK: DWORD = SECURITY_FLAG_IGNORE_REVOCATION
+ | SECURITY_FLAG_IGNORE_UNKNOWN_CA | SECURITY_FLAG_IGNORE_CERT_CN_INVALID
+ | SECURITY_FLAG_IGNORE_CERT_DATE_INVALID | SECURITY_FLAG_IGNORE_WRONG_USAGE;
+pub const AUTODIAL_MODE_NEVER: DWORD = 1;
+pub const AUTODIAL_MODE_ALWAYS: DWORD = 2;
+pub const AUTODIAL_MODE_NO_NETWORK_PRESENT: DWORD = 4;
+FN!{stdcall INTERNET_STATUS_CALLBACK(
+ HINTERNET,
+ DWORD_PTR,
+ DWORD,
+ LPVOID,
+ DWORD,
+) -> ()}
+pub type LPINTERNET_STATUS_CALLBACK = *mut INTERNET_STATUS_CALLBACK;
+pub const INTERNET_STATUS_RESOLVING_NAME: DWORD = 10;
+pub const INTERNET_STATUS_NAME_RESOLVED: DWORD = 11;
+pub const INTERNET_STATUS_CONNECTING_TO_SERVER: DWORD = 20;
+pub const INTERNET_STATUS_CONNECTED_TO_SERVER: DWORD = 21;
+pub const INTERNET_STATUS_SENDING_REQUEST: DWORD = 30;
+pub const INTERNET_STATUS_REQUEST_SENT: DWORD = 31;
+pub const INTERNET_STATUS_RECEIVING_RESPONSE: DWORD = 40;
+pub const INTERNET_STATUS_RESPONSE_RECEIVED: DWORD = 41;
+pub const INTERNET_STATUS_CTL_RESPONSE_RECEIVED: DWORD = 42;
+pub const INTERNET_STATUS_PREFETCH: DWORD = 43;
+pub const INTERNET_STATUS_CLOSING_CONNECTION: DWORD = 50;
+pub const INTERNET_STATUS_CONNECTION_CLOSED: DWORD = 51;
+pub const INTERNET_STATUS_HANDLE_CREATED: DWORD = 60;
+pub const INTERNET_STATUS_HANDLE_CLOSING: DWORD = 70;
+pub const INTERNET_STATUS_DETECTING_PROXY: DWORD = 80;
+pub const INTERNET_STATUS_REQUEST_COMPLETE: DWORD = 100;
+pub const INTERNET_STATUS_REDIRECT: DWORD = 110;
+pub const INTERNET_STATUS_INTERMEDIATE_RESPONSE: DWORD = 120;
+pub const INTERNET_STATUS_USER_INPUT_REQUIRED: DWORD = 140;
+pub const INTERNET_STATUS_STATE_CHANGE: DWORD = 200;
+pub const INTERNET_STATUS_COOKIE_SENT: DWORD = 320;
+pub const INTERNET_STATUS_COOKIE_RECEIVED: DWORD = 321;
+pub const INTERNET_STATUS_PRIVACY_IMPACTED: DWORD = 324;
+pub const INTERNET_STATUS_P3P_HEADER: DWORD = 325;
+pub const INTERNET_STATUS_P3P_POLICYREF: DWORD = 326;
+pub const INTERNET_STATUS_COOKIE_HISTORY: DWORD = 327;
+pub const INTERNET_STATE_CONNECTED: DWORD = 0x00000001;
+pub const INTERNET_STATE_DISCONNECTED: DWORD = 0x00000002;
+pub const INTERNET_STATE_DISCONNECTED_BY_USER: DWORD = 0x00000010;
+pub const INTERNET_STATE_IDLE: DWORD = 0x00000100;
+pub const INTERNET_STATE_BUSY: DWORD = 0x00000200;
+ENUM!{enum InternetCookieState {
+ COOKIE_STATE_UNKNOWN = 0x0,
+ COOKIE_STATE_ACCEPT = 0x1,
+ COOKIE_STATE_PROMPT = 0x2,
+ COOKIE_STATE_LEASH = 0x3,
+ COOKIE_STATE_DOWNGRADE = 0x4,
+ COOKIE_STATE_REJECT = 0x5,
+ COOKIE_STATE_MAX = COOKIE_STATE_REJECT,
+}}
+STRUCT!{struct IncomingCookieState {
+ cSession: c_int,
+ cPersistent: c_int,
+ cAccepted: c_int,
+ cLeashed: c_int,
+ cDowngraded: c_int,
+ cBlocked: c_int,
+ pszLocation: LPCSTR,
+}}
+STRUCT!{struct OutgoingCookieState {
+ cSent: c_int,
+ cSuppressed: c_int,
+ pszLocation: LPCSTR,
+}}
+STRUCT!{struct InternetCookieHistory {
+ fAccepted: BOOL,
+ fLeashed: BOOL,
+ fDowngraded: BOOL,
+ fRejected: BOOL,
+}}
+STRUCT!{struct CookieDecision {
+ dwCookieState: DWORD,
+ fAllowSession: BOOL,
+}}
+pub const INTERNET_INVALID_STATUS_CALLBACK: usize = -1isize as usize;
+pub const FTP_TRANSFER_TYPE_UNKNOWN: DWORD = 0x00000000;
+pub const FTP_TRANSFER_TYPE_ASCII: DWORD = 0x00000001;
+pub const FTP_TRANSFER_TYPE_BINARY: DWORD = 0x00000002;
+pub const FTP_TRANSFER_TYPE_MASK: DWORD = FTP_TRANSFER_TYPE_ASCII | FTP_TRANSFER_TYPE_BINARY;
+pub const MAX_GOPHER_DISPLAY_TEXT: usize = 128;
+pub const MAX_GOPHER_SELECTOR_TEXT: usize = 256;
+pub const MAX_GOPHER_HOST_NAME: usize = INTERNET_MAX_HOST_NAME_LENGTH;
+pub const MAX_GOPHER_LOCATOR_LENGTH: usize = 1 + MAX_GOPHER_DISPLAY_TEXT + 1
+ + MAX_GOPHER_SELECTOR_TEXT + 1 + MAX_GOPHER_HOST_NAME + 1 + INTERNET_MAX_PORT_NUMBER_LENGTH
+ + 1 + 1 + 2;
+STRUCT!{struct GOPHER_FIND_DATAA {
+ DisplayString: [CHAR; MAX_GOPHER_DISPLAY_TEXT+ 1],
+ GopherType: DWORD,
+ SizeLow: DWORD,
+ SizeHigh: DWORD,
+ LastModificationTime: FILETIME,
+ Locator: [CHAR; MAX_GOPHER_LOCATOR_LENGTH + 1],
+}}
+pub type LPGOPHER_FIND_DATAA = *mut GOPHER_FIND_DATAA;
+STRUCT!{struct GOPHER_FIND_DATAW {
+ DisplayString: [WCHAR; MAX_GOPHER_DISPLAY_TEXT+ 1],
+ GopherType: DWORD,
+ SizeLow: DWORD,
+ SizeHigh: DWORD,
+ LastModificationTime: FILETIME,
+ Locator: [WCHAR; MAX_GOPHER_LOCATOR_LENGTH + 1],
+}}
+pub type LPGOPHER_FIND_DATAW = *mut GOPHER_FIND_DATAW;
+pub const GOPHER_TYPE_TEXT_FILE: DWORD = 0x00000001;
+pub const GOPHER_TYPE_DIRECTORY: DWORD = 0x00000002;
+pub const GOPHER_TYPE_CSO: DWORD = 0x00000004;
+pub const GOPHER_TYPE_ERROR: DWORD = 0x00000008;
+pub const GOPHER_TYPE_MAC_BINHEX: DWORD = 0x00000010;
+pub const GOPHER_TYPE_DOS_ARCHIVE: DWORD = 0x00000020;
+pub const GOPHER_TYPE_UNIX_UUENCODED: DWORD = 0x00000040;
+pub const GOPHER_TYPE_INDEX_SERVER: DWORD = 0x00000080;
+pub const GOPHER_TYPE_TELNET: DWORD = 0x00000100;
+pub const GOPHER_TYPE_BINARY: DWORD = 0x00000200;
+pub const GOPHER_TYPE_REDUNDANT: DWORD = 0x00000400;
+pub const GOPHER_TYPE_TN3270: DWORD = 0x00000800;
+pub const GOPHER_TYPE_GIF: DWORD = 0x00001000;
+pub const GOPHER_TYPE_IMAGE: DWORD = 0x00002000;
+pub const GOPHER_TYPE_BITMAP: DWORD = 0x00004000;
+pub const GOPHER_TYPE_MOVIE: DWORD = 0x00008000;
+pub const GOPHER_TYPE_SOUND: DWORD = 0x00010000;
+pub const GOPHER_TYPE_HTML: DWORD = 0x00020000;
+pub const GOPHER_TYPE_PDF: DWORD = 0x00040000;
+pub const GOPHER_TYPE_CALENDAR: DWORD = 0x00080000;
+pub const GOPHER_TYPE_INLINE: DWORD = 0x00100000;
+pub const GOPHER_TYPE_UNKNOWN: DWORD = 0x20000000;
+pub const GOPHER_TYPE_ASK: DWORD = 0x40000000;
+pub const GOPHER_TYPE_GOPHER_PLUS: DWORD = 0x80000000;
+#[inline]
+pub fn IS_GOPHER_FILE(type_: DWORD) -> BOOL {
+ if (type_ & GOPHER_TYPE_FILE_MASK) != 0 { TRUE } else { FALSE }
+}
+#[inline]
+pub fn IS_GOPHER_DIRECTORY(type_: DWORD) -> BOOL {
+ if (type_ & GOPHER_TYPE_DIRECTORY) != 0 { TRUE } else { FALSE }
+}
+#[inline]
+pub fn IS_GOPHER_PHONE_SERVER(type_: DWORD) -> BOOL {
+ if (type_ & GOPHER_TYPE_CSO) != 0 { TRUE } else { FALSE }
+}
+#[inline]
+pub fn IS_GOPHER_ERROR(type_: DWORD) -> BOOL {
+ if (type_ & GOPHER_TYPE_ERROR) != 0 { TRUE } else { FALSE }
+}
+#[inline]
+pub fn IS_GOPHER_INDEX_SERVER(type_: DWORD) -> BOOL {
+ if (type_ & GOPHER_TYPE_INDEX_SERVER) != 0 { TRUE } else { FALSE }
+}
+#[inline]
+pub fn IS_GOPHER_TELNET_SESSION(type_: DWORD) -> BOOL {
+ if (type_ & GOPHER_TYPE_TELNET) != 0 { TRUE } else { FALSE }
+}
+#[inline]
+pub fn IS_GOPHER_BACKUP_SERVER(type_: DWORD) -> BOOL {
+ if (type_ & GOPHER_TYPE_REDUNDANT) != 0 { TRUE } else { FALSE }
+}
+#[inline]
+pub fn IS_GOPHER_TN3270_SESSION(type_: DWORD) -> BOOL {
+ if (type_ & GOPHER_TYPE_TN3270) != 0 { TRUE } else { FALSE }
+}
+#[inline]
+pub fn IS_GOPHER_ASK(type_: DWORD) -> BOOL {
+ if (type_ & GOPHER_TYPE_ASK) != 0 { TRUE } else { FALSE }
+}
+#[inline]
+pub fn IS_GOPHER_PLUS(type_: DWORD) -> BOOL {
+ if (type_ & GOPHER_TYPE_GOPHER_PLUS) != 0 { TRUE } else { FALSE }
+}
+#[inline]
+pub fn IS_GOPHER_TYPE_KNOWN(type_: DWORD) -> BOOL {
+ if (type_ & GOPHER_TYPE_UNKNOWN) != 0 { FALSE } else { TRUE }
+}
+pub const GOPHER_TYPE_FILE_MASK: DWORD = GOPHER_TYPE_TEXT_FILE | GOPHER_TYPE_MAC_BINHEX
+ | GOPHER_TYPE_DOS_ARCHIVE | GOPHER_TYPE_UNIX_UUENCODED | GOPHER_TYPE_BINARY | GOPHER_TYPE_GIF
+ | GOPHER_TYPE_IMAGE | GOPHER_TYPE_BITMAP | GOPHER_TYPE_MOVIE | GOPHER_TYPE_SOUND
+ | GOPHER_TYPE_HTML | GOPHER_TYPE_PDF | GOPHER_TYPE_CALENDAR | GOPHER_TYPE_INLINE;
+STRUCT!{struct GOPHER_ADMIN_ATTRIBUTE_TYPE {
+ Comment: LPCWSTR,
+ EmailAddress: LPCWSTR,
+}}
+pub type LPGOPHER_ADMIN_ATTRIBUTE_TYPE = *mut GOPHER_ADMIN_ATTRIBUTE_TYPE;
+STRUCT!{struct GOPHER_MOD_DATE_ATTRIBUTE_TYPE {
+ DateAndTime: FILETIME,
+}}
+pub type LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE = *mut GOPHER_MOD_DATE_ATTRIBUTE_TYPE;
+STRUCT!{struct GOPHER_TTL_ATTRIBUTE_TYPE {
+ Ttl: DWORD,
+}}
+pub type LPGOPHER_TTL_ATTRIBUTE_TYPE = *mut GOPHER_TTL_ATTRIBUTE_TYPE;
+STRUCT!{struct GOPHER_SCORE_ATTRIBUTE_TYPE {
+ Score: INT,
+}}
+pub type LPGOPHER_SCORE_ATTRIBUTE_TYPE = *mut GOPHER_SCORE_ATTRIBUTE_TYPE;
+STRUCT!{struct GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE {
+ LowerBound: INT,
+ UpperBound: INT,
+}}
+pub type LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE = *mut GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE;
+STRUCT!{struct GOPHER_SITE_ATTRIBUTE_TYPE {
+ Site: LPCWSTR,
+}}
+pub type LPGOPHER_SITE_ATTRIBUTE_TYPE = *mut GOPHER_SITE_ATTRIBUTE_TYPE;
+STRUCT!{struct GOPHER_ORGANIZATION_ATTRIBUTE_TYPE {
+ Organization: LPCWSTR,
+}}
+pub type LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPE = *mut GOPHER_ORGANIZATION_ATTRIBUTE_TYPE;
+STRUCT!{struct GOPHER_LOCATION_ATTRIBUTE_TYPE {
+ Location: LPCWSTR,
+}}
+pub type LPGOPHER_LOCATION_ATTRIBUTE_TYPE = *mut GOPHER_LOCATION_ATTRIBUTE_TYPE;
+STRUCT!{struct GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE {
+ DegreesNorth: INT,
+ MinutesNorth: INT,
+ SecondsNorth: INT,
+ DegreesEast: INT,
+ MinutesEast: INT,
+ SecondsEast: INT,
+}}
+pub type LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE =
+ *mut GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE;
+STRUCT!{struct GOPHER_TIMEZONE_ATTRIBUTE_TYPE {
+ Zone: INT,
+}}
+pub type LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE = *mut GOPHER_TIMEZONE_ATTRIBUTE_TYPE;
+STRUCT!{struct GOPHER_PROVIDER_ATTRIBUTE_TYPE {
+ Provider: LPCWSTR,
+}}
+pub type LPGOPHER_PROVIDER_ATTRIBUTE_TYPE = *mut GOPHER_PROVIDER_ATTRIBUTE_TYPE;
+STRUCT!{struct GOPHER_VERSION_ATTRIBUTE_TYPE {
+ Version: LPCWSTR,
+}}
+pub type LPGOPHER_VERSION_ATTRIBUTE_TYPE = *mut GOPHER_VERSION_ATTRIBUTE_TYPE;
+STRUCT!{struct GOPHER_ABSTRACT_ATTRIBUTE_TYPE {
+ ShortAbstract: LPCWSTR,
+ AbstractFile: LPCWSTR,
+}}
+pub type LPGOPHER_ABSTRACT_ATTRIBUTE_TYPE = *mut GOPHER_ABSTRACT_ATTRIBUTE_TYPE;
+STRUCT!{struct GOPHER_VIEW_ATTRIBUTE_TYPE {
+ ContentType: LPCWSTR,
+ Language: LPCWSTR,
+ Size: DWORD,
+}}
+pub type LPGOPHER_VIEW_ATTRIBUTE_TYPE = *mut GOPHER_VIEW_ATTRIBUTE_TYPE;
+STRUCT!{struct GOPHER_VERONICA_ATTRIBUTE_TYPE {
+ TreeWalk: BOOL,
+}}
+pub type LPGOPHER_VERONICA_ATTRIBUTE_TYPE = *mut GOPHER_VERONICA_ATTRIBUTE_TYPE;
+STRUCT!{struct GOPHER_ASK_ATTRIBUTE_TYPE {
+ QuestionType: LPCWSTR,
+ QuestionText: LPCWSTR,
+}}
+pub type LPGOPHER_ASK_ATTRIBUTE_TYPE = *mut GOPHER_ASK_ATTRIBUTE_TYPE;
+STRUCT!{struct GOPHER_UNKNOWN_ATTRIBUTE_TYPE {
+ Text: LPCWSTR,
+}}
+pub type LPGOPHER_UNKNOWN_ATTRIBUTE_TYPE = *mut GOPHER_UNKNOWN_ATTRIBUTE_TYPE;
+UNION!{union GOPHER_ATTRIBUTE_TYPE_AttributeType {
+ [u32; 6] [u64; 3],
+ Admin Admin_mut: GOPHER_ADMIN_ATTRIBUTE_TYPE,
+ ModDate ModDate_mut: GOPHER_MOD_DATE_ATTRIBUTE_TYPE,
+ Ttl Ttl_mut: GOPHER_TTL_ATTRIBUTE_TYPE,
+ Score Score_mut: GOPHER_SCORE_ATTRIBUTE_TYPE,
+ ScoreRange ScoreRange_mut: GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE,
+ Site Site_mut: GOPHER_SITE_ATTRIBUTE_TYPE,
+ Organization Organization_mut: GOPHER_ORGANIZATION_ATTRIBUTE_TYPE,
+ Location Location_mut: GOPHER_LOCATION_ATTRIBUTE_TYPE,
+ GeographicalLocation GeographicalLocation_mut: GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE,
+ TimeZone TimeZone_mut: GOPHER_TIMEZONE_ATTRIBUTE_TYPE,
+ Provider Provider_mut: GOPHER_PROVIDER_ATTRIBUTE_TYPE,
+ Version Version_mut: GOPHER_VERSION_ATTRIBUTE_TYPE,
+ Abstract Abstract_mut: GOPHER_ABSTRACT_ATTRIBUTE_TYPE,
+ View View_mut: GOPHER_VIEW_ATTRIBUTE_TYPE,
+ Veronica Veronica_mut: GOPHER_VERONICA_ATTRIBUTE_TYPE,
+ Ask Ask_mut: GOPHER_ASK_ATTRIBUTE_TYPE,
+ Unknown Unknown_mut: GOPHER_UNKNOWN_ATTRIBUTE_TYPE,
+}}
+STRUCT!{struct GOPHER_ATTRIBUTE_TYPE {
+ CategoryId: DWORD,
+ AttributeId: DWORD,
+ AttributeType: GOPHER_ATTRIBUTE_TYPE_AttributeType,
+}}
+pub type LPGOPHER_ATTRIBUTE_TYPE = *mut GOPHER_ATTRIBUTE_TYPE;
+pub const MAX_GOPHER_CATEGORY_NAME: DWORD = 128;
+pub const MAX_GOPHER_ATTRIBUTE_NAME: DWORD = 128;
+pub const MIN_GOPHER_ATTRIBUTE_LENGTH: DWORD = 256;
+pub const GOPHER_INFO_CATEGORY: &'static str = " + INFO";
+pub const GOPHER_ADMIN_CATEGORY: &'static str = " + ADMIN";
+pub const GOPHER_VIEWS_CATEGORY: &'static str = " + VIEWS";
+pub const GOPHER_ABSTRACT_CATEGORY: &'static str = " + ABSTRACT";
+pub const GOPHER_VERONICA_CATEGORY: &'static str = " + VERONICA";
+pub const GOPHER_ADMIN_ATTRIBUTE: &'static str = "Admin";
+pub const GOPHER_MOD_DATE_ATTRIBUTE: &'static str = "Mod-Date";
+pub const GOPHER_TTL_ATTRIBUTE: &'static str = "TTL";
+pub const GOPHER_SCORE_ATTRIBUTE: &'static str = "Score";
+pub const GOPHER_RANGE_ATTRIBUTE: &'static str = "Score-range";
+pub const GOPHER_SITE_ATTRIBUTE: &'static str = "Site";
+pub const GOPHER_ORG_ATTRIBUTE: &'static str = "Org";
+pub const GOPHER_LOCATION_ATTRIBUTE: &'static str = "Loc";
+pub const GOPHER_GEOG_ATTRIBUTE: &'static str = "Geog";
+pub const GOPHER_TIMEZONE_ATTRIBUTE: &'static str = "TZ";
+pub const GOPHER_PROVIDER_ATTRIBUTE: &'static str = "Provider";
+pub const GOPHER_VERSION_ATTRIBUTE: &'static str = "Version";
+pub const GOPHER_ABSTRACT_ATTRIBUTE: &'static str = "Abstract";
+pub const GOPHER_VIEW_ATTRIBUTE: &'static str = "View";
+pub const GOPHER_TREEWALK_ATTRIBUTE: &'static str = "treewalk";
+pub const GOPHER_ATTRIBUTE_ID_BASE: DWORD = 0xabcccc00;
+pub const GOPHER_CATEGORY_ID_ALL: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 1;
+pub const GOPHER_CATEGORY_ID_INFO: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 2;
+pub const GOPHER_CATEGORY_ID_ADMIN: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 3;
+pub const GOPHER_CATEGORY_ID_VIEWS: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 4;
+pub const GOPHER_CATEGORY_ID_ABSTRACT: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 5;
+pub const GOPHER_CATEGORY_ID_VERONICA: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 6;
+pub const GOPHER_CATEGORY_ID_ASK: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 7;
+pub const GOPHER_CATEGORY_ID_UNKNOWN: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 8;
+pub const GOPHER_ATTRIBUTE_ID_ALL: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 9;
+pub const GOPHER_ATTRIBUTE_ID_ADMIN: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 10;
+pub const GOPHER_ATTRIBUTE_ID_MOD_DATE: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 11;
+pub const GOPHER_ATTRIBUTE_ID_TTL: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 12;
+pub const GOPHER_ATTRIBUTE_ID_SCORE: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 13;
+pub const GOPHER_ATTRIBUTE_ID_RANGE: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 14;
+pub const GOPHER_ATTRIBUTE_ID_SITE: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 15;
+pub const GOPHER_ATTRIBUTE_ID_ORG: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 16;
+pub const GOPHER_ATTRIBUTE_ID_LOCATION: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 17;
+pub const GOPHER_ATTRIBUTE_ID_GEOG: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 18;
+pub const GOPHER_ATTRIBUTE_ID_TIMEZONE: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 19;
+pub const GOPHER_ATTRIBUTE_ID_PROVIDER: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 20;
+pub const GOPHER_ATTRIBUTE_ID_VERSION: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 21;
+pub const GOPHER_ATTRIBUTE_ID_ABSTRACT: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 22;
+pub const GOPHER_ATTRIBUTE_ID_VIEW: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 23;
+pub const GOPHER_ATTRIBUTE_ID_TREEWALK: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 24;
+pub const GOPHER_ATTRIBUTE_ID_UNKNOWN: DWORD = GOPHER_ATTRIBUTE_ID_BASE + 25;
+FN!{stdcall GOPHER_ATTRIBUTE_ENUMERATOR(
+ LPGOPHER_ATTRIBUTE_TYPE,
+ DWORD,
+) -> BOOL}
+pub const HTTP_MAJOR_VERSION: DWORD = 1;
+pub const HTTP_MINOR_VERSION: DWORD = 0;
+pub const HTTP_VERSION: &'static str = "HTTP/1.0";
+pub const HTTP_QUERY_MIME_VERSION: DWORD = 0;
+pub const HTTP_QUERY_CONTENT_TYPE: DWORD = 1;
+pub const HTTP_QUERY_CONTENT_TRANSFER_ENCODING: DWORD = 2;
+pub const HTTP_QUERY_CONTENT_ID: DWORD = 3;
+pub const HTTP_QUERY_CONTENT_DESCRIPTION: DWORD = 4;
+pub const HTTP_QUERY_CONTENT_LENGTH: DWORD = 5;
+pub const HTTP_QUERY_CONTENT_LANGUAGE: DWORD = 6;
+pub const HTTP_QUERY_ALLOW: DWORD = 7;
+pub const HTTP_QUERY_PUBLIC: DWORD = 8;
+pub const HTTP_QUERY_DATE: DWORD = 9;
+pub const HTTP_QUERY_EXPIRES: DWORD = 10;
+pub const HTTP_QUERY_LAST_MODIFIED: DWORD = 11;
+pub const HTTP_QUERY_MESSAGE_ID: DWORD = 12;
+pub const HTTP_QUERY_URI: DWORD = 13;
+pub const HTTP_QUERY_DERIVED_FROM: DWORD = 14;
+pub const HTTP_QUERY_COST: DWORD = 15;
+pub const HTTP_QUERY_LINK: DWORD = 16;
+pub const HTTP_QUERY_PRAGMA: DWORD = 17;
+pub const HTTP_QUERY_VERSION: DWORD = 18;
+pub const HTTP_QUERY_STATUS_CODE: DWORD = 19;
+pub const HTTP_QUERY_STATUS_TEXT: DWORD = 20;
+pub const HTTP_QUERY_RAW_HEADERS: DWORD = 21;
+pub const HTTP_QUERY_RAW_HEADERS_CRLF: DWORD = 22;
+pub const HTTP_QUERY_CONNECTION: DWORD = 23;
+pub const HTTP_QUERY_ACCEPT: DWORD = 24;
+pub const HTTP_QUERY_ACCEPT_CHARSET: DWORD = 25;
+pub const HTTP_QUERY_ACCEPT_ENCODING: DWORD = 26;
+pub const HTTP_QUERY_ACCEPT_LANGUAGE: DWORD = 27;
+pub const HTTP_QUERY_AUTHORIZATION: DWORD = 28;
+pub const HTTP_QUERY_CONTENT_ENCODING: DWORD = 29;
+pub const HTTP_QUERY_FORWARDED: DWORD = 30;
+pub const HTTP_QUERY_FROM: DWORD = 31;
+pub const HTTP_QUERY_IF_MODIFIED_SINCE: DWORD = 32;
+pub const HTTP_QUERY_LOCATION: DWORD = 33;
+pub const HTTP_QUERY_ORIG_URI: DWORD = 34;
+pub const HTTP_QUERY_REFERER: DWORD = 35;
+pub const HTTP_QUERY_RETRY_AFTER: DWORD = 36;
+pub const HTTP_QUERY_SERVER: DWORD = 37;
+pub const HTTP_QUERY_TITLE: DWORD = 38;
+pub const HTTP_QUERY_USER_AGENT: DWORD = 39;
+pub const HTTP_QUERY_WWW_AUTHENTICATE: DWORD = 40;
+pub const HTTP_QUERY_PROXY_AUTHENTICATE: DWORD = 41;
+pub const HTTP_QUERY_ACCEPT_RANGES: DWORD = 42;
+pub const HTTP_QUERY_SET_COOKIE: DWORD = 43;
+pub const HTTP_QUERY_COOKIE: DWORD = 44;
+pub const HTTP_QUERY_REQUEST_METHOD: DWORD = 45;
+pub const HTTP_QUERY_REFRESH: DWORD = 46;
+pub const HTTP_QUERY_CONTENT_DISPOSITION: DWORD = 47;
+pub const HTTP_QUERY_AGE: DWORD = 48;
+pub const HTTP_QUERY_CACHE_CONTROL: DWORD = 49;
+pub const HTTP_QUERY_CONTENT_BASE: DWORD = 50;
+pub const HTTP_QUERY_CONTENT_LOCATION: DWORD = 51;
+pub const HTTP_QUERY_CONTENT_MD5: DWORD = 52;
+pub const HTTP_QUERY_CONTENT_RANGE: DWORD = 53;
+pub const HTTP_QUERY_ETAG: DWORD = 54;
+pub const HTTP_QUERY_HOST: DWORD = 55;
+pub const HTTP_QUERY_IF_MATCH: DWORD = 56;
+pub const HTTP_QUERY_IF_NONE_MATCH: DWORD = 57;
+pub const HTTP_QUERY_IF_RANGE: DWORD = 58;
+pub const HTTP_QUERY_IF_UNMODIFIED_SINCE: DWORD = 59;
+pub const HTTP_QUERY_MAX_FORWARDS: DWORD = 60;
+pub const HTTP_QUERY_PROXY_AUTHORIZATION: DWORD = 61;
+pub const HTTP_QUERY_RANGE: DWORD = 62;
+pub const HTTP_QUERY_TRANSFER_ENCODING: DWORD = 63;
+pub const HTTP_QUERY_UPGRADE: DWORD = 64;
+pub const HTTP_QUERY_VARY: DWORD = 65;
+pub const HTTP_QUERY_VIA: DWORD = 66;
+pub const HTTP_QUERY_WARNING: DWORD = 67;
+pub const HTTP_QUERY_EXPECT: DWORD = 68;
+pub const HTTP_QUERY_PROXY_CONNECTION: DWORD = 69;
+pub const HTTP_QUERY_UNLESS_MODIFIED_SINCE: DWORD = 70;
+pub const HTTP_QUERY_ECHO_REQUEST: DWORD = 71;
+pub const HTTP_QUERY_ECHO_REPLY: DWORD = 72;
+pub const HTTP_QUERY_ECHO_HEADERS: DWORD = 73;
+pub const HTTP_QUERY_ECHO_HEADERS_CRLF: DWORD = 74;
+pub const HTTP_QUERY_PROXY_SUPPORT: DWORD = 75;
+pub const HTTP_QUERY_AUTHENTICATION_INFO: DWORD = 76;
+pub const HTTP_QUERY_PASSPORT_URLS: DWORD = 77;
+pub const HTTP_QUERY_PASSPORT_CONFIG: DWORD = 78;
+pub const HTTP_QUERY_X_CONTENT_TYPE_OPTIONS: DWORD = 79;
+pub const HTTP_QUERY_P3P: DWORD = 80;
+pub const HTTP_QUERY_X_P2P_PEERDIST: DWORD = 81;
+pub const HTTP_QUERY_TRANSLATE: DWORD = 82;
+pub const HTTP_QUERY_X_UA_COMPATIBLE: DWORD = 83;
+pub const HTTP_QUERY_DEFAULT_STYLE: DWORD = 84;
+pub const HTTP_QUERY_X_FRAME_OPTIONS: DWORD = 85;
+pub const HTTP_QUERY_X_XSS_PROTECTION: DWORD = 86;
+pub const HTTP_QUERY_SET_COOKIE2: DWORD = 87;
+pub const HTTP_QUERY_DO_NOT_TRACK: DWORD = 88;
+pub const HTTP_QUERY_KEEP_ALIVE: DWORD = 89;
+pub const HTTP_QUERY_MAX: DWORD = 89;
+pub const HTTP_QUERY_CUSTOM: DWORD = 65535;
+pub const HTTP_QUERY_FLAG_REQUEST_HEADERS: DWORD = 0x80000000;
+pub const HTTP_QUERY_FLAG_SYSTEMTIME: DWORD = 0x40000000;
+pub const HTTP_QUERY_FLAG_NUMBER: DWORD = 0x20000000;
+pub const HTTP_QUERY_FLAG_COALESCE: DWORD = 0x10000000;
+pub const HTTP_QUERY_FLAG_NUMBER64: DWORD = 0x08000000;
+pub const HTTP_QUERY_MODIFIER_FLAGS_MASK: DWORD = HTTP_QUERY_FLAG_REQUEST_HEADERS
+ | HTTP_QUERY_FLAG_SYSTEMTIME | HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_FLAG_COALESCE
+ | HTTP_QUERY_FLAG_NUMBER64;
+pub const HTTP_QUERY_HEADER_MASK: DWORD = !HTTP_QUERY_MODIFIER_FLAGS_MASK;
+pub const HTTP_STATUS_CONTINUE: DWORD = 100;
+pub const HTTP_STATUS_SWITCH_PROTOCOLS: DWORD = 101;
+pub const HTTP_STATUS_OK: DWORD = 200;
+pub const HTTP_STATUS_CREATED: DWORD = 201;
+pub const HTTP_STATUS_ACCEPTED: DWORD = 202;
+pub const HTTP_STATUS_PARTIAL: DWORD = 203;
+pub const HTTP_STATUS_NO_CONTENT: DWORD = 204;
+pub const HTTP_STATUS_RESET_CONTENT: DWORD = 205;
+pub const HTTP_STATUS_PARTIAL_CONTENT: DWORD = 206;
+pub const HTTP_STATUS_AMBIGUOUS: DWORD = 300;
+pub const HTTP_STATUS_MOVED: DWORD = 301;
+pub const HTTP_STATUS_REDIRECT: DWORD = 302;
+pub const HTTP_STATUS_REDIRECT_METHOD: DWORD = 303;
+pub const HTTP_STATUS_NOT_MODIFIED: DWORD = 304;
+pub const HTTP_STATUS_USE_PROXY: DWORD = 305;
+pub const HTTP_STATUS_REDIRECT_KEEP_VERB: DWORD = 307;
+pub const HTTP_STATUS_BAD_REQUEST: DWORD = 400;
+pub const HTTP_STATUS_DENIED: DWORD = 401;
+pub const HTTP_STATUS_PAYMENT_REQ: DWORD = 402;
+pub const HTTP_STATUS_FORBIDDEN: DWORD = 403;
+pub const HTTP_STATUS_NOT_FOUND: DWORD = 404;
+pub const HTTP_STATUS_BAD_METHOD: DWORD = 405;
+pub const HTTP_STATUS_NONE_ACCEPTABLE: DWORD = 406;
+pub const HTTP_STATUS_PROXY_AUTH_REQ: DWORD = 407;
+pub const HTTP_STATUS_REQUEST_TIMEOUT: DWORD = 408;
+pub const HTTP_STATUS_CONFLICT: DWORD = 409;
+pub const HTTP_STATUS_GONE: DWORD = 410;
+pub const HTTP_STATUS_LENGTH_REQUIRED: DWORD = 411;
+pub const HTTP_STATUS_PRECOND_FAILED: DWORD = 412;
+pub const HTTP_STATUS_REQUEST_TOO_LARGE: DWORD = 413;
+pub const HTTP_STATUS_URI_TOO_LONG: DWORD = 414;
+pub const HTTP_STATUS_UNSUPPORTED_MEDIA: DWORD = 415;
+pub const HTTP_STATUS_RETRY_WITH: DWORD = 449;
+pub const HTTP_STATUS_SERVER_ERROR: DWORD = 500;
+pub const HTTP_STATUS_NOT_SUPPORTED: DWORD = 501;
+pub const HTTP_STATUS_BAD_GATEWAY: DWORD = 502;
+pub const HTTP_STATUS_SERVICE_UNAVAIL: DWORD = 503;
+pub const HTTP_STATUS_GATEWAY_TIMEOUT: DWORD = 504;
+pub const HTTP_STATUS_VERSION_NOT_SUP: DWORD = 505;
+pub const HTTP_STATUS_FIRST: DWORD = HTTP_STATUS_CONTINUE;
+pub const HTTP_STATUS_LAST: DWORD = HTTP_STATUS_VERSION_NOT_SUP;
+pub const HTTP_ADDREQ_INDEX_MASK: DWORD = 0x0000FFFF;
+pub const HTTP_ADDREQ_FLAGS_MASK: DWORD = 0xFFFF0000;
+pub const HTTP_ADDREQ_FLAG_ADD_IF_NEW: DWORD = 0x10000000;
+pub const HTTP_ADDREQ_FLAG_ADD: DWORD = 0x20000000;
+pub const HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA: DWORD = 0x40000000;
+pub const HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON: DWORD = 0x01000000;
+pub const HTTP_ADDREQ_FLAG_COALESCE: DWORD = HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA;
+pub const HTTP_ADDREQ_FLAG_REPLACE: DWORD = 0x80000000;
+pub const HSR_ASYNC: DWORD = WININET_API_FLAG_ASYNC;
+pub const HSR_SYNC: DWORD = WININET_API_FLAG_SYNC;
+pub const HSR_USE_CONTEXT: DWORD = WININET_API_FLAG_USE_CONTEXT;
+pub const HSR_INITIATE: DWORD = 0x00000008;
+pub const HSR_DOWNLOAD: DWORD = 0x00000010;
+pub const HSR_CHUNKED: DWORD = 0x00000020;
+STRUCT!{struct INTERNET_COOKIE2 {
+ pwszName: PWSTR,
+ pwszValue: PWSTR,
+ pwszDomain: PWSTR,
+ pwszPath: PWSTR,
+ dwFlags: DWORD,
+ ftExpires: FILETIME,
+ fExpiresSet: BOOL,
+}}
+pub const INTERNET_COOKIE_IS_SECURE: DWORD = 0x01;
+pub const INTERNET_COOKIE_IS_SESSION: DWORD = 0x02;
+pub const INTERNET_COOKIE_THIRD_PARTY: DWORD = 0x10;
+pub const INTERNET_COOKIE_PROMPT_REQUIRED: DWORD = 0x20;
+pub const INTERNET_COOKIE_EVALUATE_P3P: DWORD = 0x40;
+pub const INTERNET_COOKIE_APPLY_P3P: DWORD = 0x80;
+pub const INTERNET_COOKIE_P3P_ENABLED: DWORD = 0x100;
+pub const INTERNET_COOKIE_IS_RESTRICTED: DWORD = 0x200;
+pub const INTERNET_COOKIE_IE6: DWORD = 0x400;
+pub const INTERNET_COOKIE_IS_LEGACY: DWORD = 0x800;
+pub const INTERNET_COOKIE_NON_SCRIPT: DWORD = 0x00001000;
+pub const INTERNET_COOKIE_HTTPONLY: DWORD = 0x00002000;
+pub const FLAG_ICC_FORCE_CONNECTION: DWORD = 0x00000001;
+pub const FLAGS_ERROR_UI_FILTER_FOR_ERRORS: DWORD = 0x01;
+pub const FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS: DWORD = 0x02;
+pub const FLAGS_ERROR_UI_FLAGS_GENERATE_DATA: DWORD = 0x04;
+pub const FLAGS_ERROR_UI_FLAGS_NO_UI: DWORD = 0x08;
+pub const FLAGS_ERROR_UI_SERIALIZE_DIALOGS: DWORD = 0x10;
+FN!{stdcall PFN_AUTH_NOTIFY(
+ DWORD_PTR,
+ DWORD,
+ LPVOID,
+) -> DWORD}
+STRUCT!{struct INTERNET_AUTH_NOTIFY_DATA {
+ cbStruct: DWORD,
+ dwOptions: DWORD,
+ pfnNotify: PFN_AUTH_NOTIFY,
+ dwContext: DWORD_PTR,
+}}
+pub const INTERNET_ERROR_BASE: DWORD = 12000;
+pub const ERROR_INTERNET_OUT_OF_HANDLES: DWORD = INTERNET_ERROR_BASE + 1;
+pub const ERROR_INTERNET_TIMEOUT: DWORD = INTERNET_ERROR_BASE + 2;
+pub const ERROR_INTERNET_EXTENDED_ERROR: DWORD = INTERNET_ERROR_BASE + 3;
+pub const ERROR_INTERNET_INTERNAL_ERROR: DWORD = INTERNET_ERROR_BASE + 4;
+pub const ERROR_INTERNET_INVALID_URL: DWORD = INTERNET_ERROR_BASE + 5;
+pub const ERROR_INTERNET_UNRECOGNIZED_SCHEME: DWORD = INTERNET_ERROR_BASE + 6;
+pub const ERROR_INTERNET_NAME_NOT_RESOLVED: DWORD = INTERNET_ERROR_BASE + 7;
+pub const ERROR_INTERNET_PROTOCOL_NOT_FOUND: DWORD = INTERNET_ERROR_BASE + 8;
+pub const ERROR_INTERNET_INVALID_OPTION: DWORD = INTERNET_ERROR_BASE + 9;
+pub const ERROR_INTERNET_BAD_OPTION_LENGTH: DWORD = INTERNET_ERROR_BASE + 10;
+pub const ERROR_INTERNET_OPTION_NOT_SETTABLE: DWORD = INTERNET_ERROR_BASE + 11;
+pub const ERROR_INTERNET_SHUTDOWN: DWORD = INTERNET_ERROR_BASE + 12;
+pub const ERROR_INTERNET_INCORRECT_USER_NAME: DWORD = INTERNET_ERROR_BASE + 13;
+pub const ERROR_INTERNET_INCORRECT_PASSWORD: DWORD = INTERNET_ERROR_BASE + 14;
+pub const ERROR_INTERNET_LOGIN_FAILURE: DWORD = INTERNET_ERROR_BASE + 15;
+pub const ERROR_INTERNET_INVALID_OPERATION: DWORD = INTERNET_ERROR_BASE + 16;
+pub const ERROR_INTERNET_OPERATION_CANCELLED: DWORD = INTERNET_ERROR_BASE + 17;
+pub const ERROR_INTERNET_INCORRECT_HANDLE_TYPE: DWORD = INTERNET_ERROR_BASE + 18;
+pub const ERROR_INTERNET_INCORRECT_HANDLE_STATE: DWORD = INTERNET_ERROR_BASE + 19;
+pub const ERROR_INTERNET_NOT_PROXY_REQUEST: DWORD = INTERNET_ERROR_BASE + 20;
+pub const ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND: DWORD = INTERNET_ERROR_BASE + 21;
+pub const ERROR_INTERNET_BAD_REGISTRY_PARAMETER: DWORD = INTERNET_ERROR_BASE + 22;
+pub const ERROR_INTERNET_NO_DIRECT_ACCESS: DWORD = INTERNET_ERROR_BASE + 23;
+pub const ERROR_INTERNET_NO_CONTEXT: DWORD = INTERNET_ERROR_BASE + 24;
+pub const ERROR_INTERNET_NO_CALLBACK: DWORD = INTERNET_ERROR_BASE + 25;
+pub const ERROR_INTERNET_REQUEST_PENDING: DWORD = INTERNET_ERROR_BASE + 26;
+pub const ERROR_INTERNET_INCORRECT_FORMAT: DWORD = INTERNET_ERROR_BASE + 27;
+pub const ERROR_INTERNET_ITEM_NOT_FOUND: DWORD = INTERNET_ERROR_BASE + 28;
+pub const ERROR_INTERNET_CANNOT_CONNECT: DWORD = INTERNET_ERROR_BASE + 29;
+pub const ERROR_INTERNET_CONNECTION_ABORTED: DWORD = INTERNET_ERROR_BASE + 30;
+pub const ERROR_INTERNET_CONNECTION_RESET: DWORD = INTERNET_ERROR_BASE + 31;
+pub const ERROR_INTERNET_FORCE_RETRY: DWORD = INTERNET_ERROR_BASE + 32;
+pub const ERROR_INTERNET_INVALID_PROXY_REQUEST: DWORD = INTERNET_ERROR_BASE + 33;
+pub const ERROR_INTERNET_NEED_UI: DWORD = INTERNET_ERROR_BASE + 34;
+pub const ERROR_INTERNET_HANDLE_EXISTS: DWORD = INTERNET_ERROR_BASE + 36;
+pub const ERROR_INTERNET_SEC_CERT_DATE_INVALID: DWORD = INTERNET_ERROR_BASE + 37;
+pub const ERROR_INTERNET_SEC_CERT_CN_INVALID: DWORD = INTERNET_ERROR_BASE + 38;
+pub const ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR: DWORD = INTERNET_ERROR_BASE + 39;
+pub const ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR: DWORD = INTERNET_ERROR_BASE + 40;
+pub const ERROR_INTERNET_MIXED_SECURITY: DWORD = INTERNET_ERROR_BASE + 41;
+pub const ERROR_INTERNET_CHG_POST_IS_NON_SECURE: DWORD = INTERNET_ERROR_BASE + 42;
+pub const ERROR_INTERNET_POST_IS_NON_SECURE: DWORD = INTERNET_ERROR_BASE + 43;
+pub const ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED: DWORD = INTERNET_ERROR_BASE + 44;
+pub const ERROR_INTERNET_INVALID_CA: DWORD = INTERNET_ERROR_BASE + 45;
+pub const ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP: DWORD = INTERNET_ERROR_BASE + 46;
+pub const ERROR_INTERNET_ASYNC_THREAD_FAILED: DWORD = INTERNET_ERROR_BASE + 47;
+pub const ERROR_INTERNET_REDIRECT_SCHEME_CHANGE: DWORD = INTERNET_ERROR_BASE + 48;
+pub const ERROR_INTERNET_DIALOG_PENDING: DWORD = INTERNET_ERROR_BASE + 49;
+pub const ERROR_INTERNET_RETRY_DIALOG: DWORD = INTERNET_ERROR_BASE + 50;
+pub const ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR: DWORD = INTERNET_ERROR_BASE + 52;
+pub const ERROR_INTERNET_INSERT_CDROM: DWORD = INTERNET_ERROR_BASE + 53;
+pub const ERROR_INTERNET_FORTEZZA_LOGIN_NEEDED: DWORD = INTERNET_ERROR_BASE + 54;
+pub const ERROR_INTERNET_SEC_CERT_ERRORS: DWORD = INTERNET_ERROR_BASE + 55;
+pub const ERROR_INTERNET_SEC_CERT_NO_REV: DWORD = INTERNET_ERROR_BASE + 56;
+pub const ERROR_INTERNET_SEC_CERT_REV_FAILED: DWORD = INTERNET_ERROR_BASE + 57;
+pub const ERROR_FTP_TRANSFER_IN_PROGRESS: DWORD = INTERNET_ERROR_BASE + 110;
+pub const ERROR_FTP_DROPPED: DWORD = INTERNET_ERROR_BASE + 111;
+pub const ERROR_FTP_NO_PASSIVE_MODE: DWORD = INTERNET_ERROR_BASE + 112;
+pub const ERROR_GOPHER_PROTOCOL_ERROR: DWORD = INTERNET_ERROR_BASE + 130;
+pub const ERROR_GOPHER_NOT_FILE: DWORD = INTERNET_ERROR_BASE + 131;
+pub const ERROR_GOPHER_DATA_ERROR: DWORD = INTERNET_ERROR_BASE + 132;
+pub const ERROR_GOPHER_END_OF_DATA: DWORD = INTERNET_ERROR_BASE + 133;
+pub const ERROR_GOPHER_INVALID_LOCATOR: DWORD = INTERNET_ERROR_BASE + 134;
+pub const ERROR_GOPHER_INCORRECT_LOCATOR_TYPE: DWORD = INTERNET_ERROR_BASE + 135;
+pub const ERROR_GOPHER_NOT_GOPHER_PLUS: DWORD = INTERNET_ERROR_BASE + 136;
+pub const ERROR_GOPHER_ATTRIBUTE_NOT_FOUND: DWORD = INTERNET_ERROR_BASE + 137;
+pub const ERROR_GOPHER_UNKNOWN_LOCATOR: DWORD = INTERNET_ERROR_BASE + 138;
+pub const ERROR_HTTP_HEADER_NOT_FOUND: DWORD = INTERNET_ERROR_BASE + 150;
+pub const ERROR_HTTP_DOWNLEVEL_SERVER: DWORD = INTERNET_ERROR_BASE + 151;
+pub const ERROR_HTTP_INVALID_SERVER_RESPONSE: DWORD = INTERNET_ERROR_BASE + 152;
+pub const ERROR_HTTP_INVALID_HEADER: DWORD = INTERNET_ERROR_BASE + 153;
+pub const ERROR_HTTP_INVALID_QUERY_REQUEST: DWORD = INTERNET_ERROR_BASE + 154;
+pub const ERROR_HTTP_HEADER_ALREADY_EXISTS: DWORD = INTERNET_ERROR_BASE + 155;
+pub const ERROR_HTTP_REDIRECT_FAILED: DWORD = INTERNET_ERROR_BASE + 156;
+pub const ERROR_HTTP_NOT_REDIRECTED: DWORD = INTERNET_ERROR_BASE + 160;
+pub const ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION: DWORD = INTERNET_ERROR_BASE + 161;
+pub const ERROR_HTTP_COOKIE_DECLINED: DWORD = INTERNET_ERROR_BASE + 162;
+pub const ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION: DWORD = INTERNET_ERROR_BASE + 168;
+pub const ERROR_INTERNET_SECURITY_CHANNEL_ERROR: DWORD = INTERNET_ERROR_BASE + 157;
+pub const ERROR_INTERNET_UNABLE_TO_CACHE_FILE: DWORD = INTERNET_ERROR_BASE + 158;
+pub const ERROR_INTERNET_TCPIP_NOT_INSTALLED: DWORD = INTERNET_ERROR_BASE + 159;
+pub const ERROR_INTERNET_DISCONNECTED: DWORD = INTERNET_ERROR_BASE + 163;
+pub const ERROR_INTERNET_SERVER_UNREACHABLE: DWORD = INTERNET_ERROR_BASE + 164;
+pub const ERROR_INTERNET_PROXY_SERVER_UNREACHABLE: DWORD = INTERNET_ERROR_BASE + 165;
+pub const ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT: DWORD = INTERNET_ERROR_BASE + 166;
+pub const ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT: DWORD = INTERNET_ERROR_BASE + 167;
+pub const ERROR_INTERNET_SEC_INVALID_CERT: DWORD = INTERNET_ERROR_BASE + 169;
+pub const ERROR_INTERNET_SEC_CERT_REVOKED: DWORD = INTERNET_ERROR_BASE + 170;
+pub const ERROR_INTERNET_FAILED_DUETOSECURITYCHECK: DWORD = INTERNET_ERROR_BASE + 171;
+pub const ERROR_INTERNET_NOT_INITIALIZED: DWORD = INTERNET_ERROR_BASE + 172;
+pub const ERROR_INTERNET_NEED_MSN_SSPI_PKG: DWORD = INTERNET_ERROR_BASE + 173;
+pub const ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY: DWORD = INTERNET_ERROR_BASE + 174;
+pub const ERROR_INTERNET_DECODING_FAILED: DWORD = INTERNET_ERROR_BASE + 175;
+pub const INTERNET_ERROR_LAST: DWORD = ERROR_INTERNET_DECODING_FAILED;
+pub const NORMAL_CACHE_ENTRY: DWORD = 0x00000001;
+pub const STICKY_CACHE_ENTRY: DWORD = 0x00000004;
+pub const EDITED_CACHE_ENTRY: DWORD = 0x00000008;
+pub const TRACK_OFFLINE_CACHE_ENTRY: DWORD = 0x00000010;
+pub const TRACK_ONLINE_CACHE_ENTRY: DWORD = 0x00000020;
+pub const SPARSE_CACHE_ENTRY: DWORD = 0x00010000;
+pub const COOKIE_CACHE_ENTRY: DWORD = 0x00100000;
+pub const URLHISTORY_CACHE_ENTRY: DWORD = 0x00200000;
+pub const URLCACHE_FIND_DEFAULT_FILTER: DWORD = NORMAL_CACHE_ENTRY | COOKIE_CACHE_ENTRY
+ | URLHISTORY_CACHE_ENTRY | TRACK_OFFLINE_CACHE_ENTRY | TRACK_ONLINE_CACHE_ENTRY
+ | STICKY_CACHE_ENTRY;
+UNION!{union INTERNET_CACHE_ENTRY_INFOA_u {
+ [u32; 1],
+ dwReserved dwReserved_mut: DWORD,
+ dwExemptDelta dwExemptDelta_mut: DWORD,
+}}
+STRUCT!{struct INTERNET_CACHE_ENTRY_INFOA {
+ dwStructSize: DWORD,
+ lpszSourceUrlName: LPSTR,
+ lpszLocalFileName: LPSTR,
+ CacheEntryType: DWORD,
+ dwUseCount: DWORD,
+ dwHitRate: DWORD,
+ dwSizeLow: DWORD,
+ dwSizeHigh: DWORD,
+ LastModifiedTime: FILETIME,
+ ExpireTime: FILETIME,
+ LastAccessTime: FILETIME,
+ LastSyncTime: FILETIME,
+ lpHeaderInfo: LPSTR,
+ dwHeaderInfoSize: DWORD,
+ lpszFileExtension: LPSTR,
+ u: INTERNET_CACHE_ENTRY_INFOA_u,
+}}
+pub type LPINTERNET_CACHE_ENTRY_INFOA = *mut INTERNET_CACHE_ENTRY_INFOA;
+UNION!{union INTERNET_CACHE_ENTRY_INFOW_u {
+ [u32; 1],
+ dwReserved dwReserved_mut: DWORD,
+ dwExemptDelta dwExemptDelta_mut: DWORD,
+}}
+STRUCT!{struct INTERNET_CACHE_ENTRY_INFOW {
+ dwStructSize: DWORD,
+ lpszSourceUrlName: LPWSTR,
+ lpszLocalFileName: LPWSTR,
+ CacheEntryType: DWORD,
+ dwUseCount: DWORD,
+ dwHitRate: DWORD,
+ dwSizeLow: DWORD,
+ dwSizeHigh: DWORD,
+ LastModifiedTime: FILETIME,
+ ExpireTime: FILETIME,
+ LastAccessTime: FILETIME,
+ LastSyncTime: FILETIME,
+ lpHeaderInfo: LPWSTR,
+ dwHeaderInfoSize: DWORD,
+ lpszFileExtension: LPWSTR,
+ u: INTERNET_CACHE_ENTRY_INFOW_u,
+}}
+pub type LPINTERNET_CACHE_ENTRY_INFOW = *mut INTERNET_CACHE_ENTRY_INFOW;
+STRUCT!{struct INTERNET_CACHE_TIMESTAMPS {
+ ftExpires: FILETIME,
+ ftLastModified: FILETIME,
+}}
+pub type LPINTERNET_CACHE_TIMESTAMPS = *mut INTERNET_CACHE_TIMESTAMPS;
+pub type GROUPID = LONGLONG;
+pub const CACHEGROUP_ATTRIBUTE_GET_ALL: DWORD = 0xffffffff;
+pub const CACHEGROUP_ATTRIBUTE_BASIC: DWORD = 0x00000001;
+pub const CACHEGROUP_ATTRIBUTE_FLAG: DWORD = 0x00000002;
+pub const CACHEGROUP_ATTRIBUTE_TYPE: DWORD = 0x00000004;
+pub const CACHEGROUP_ATTRIBUTE_QUOTA: DWORD = 0x00000008;
+pub const CACHEGROUP_ATTRIBUTE_GROUPNAME: DWORD = 0x00000010;
+pub const CACHEGROUP_ATTRIBUTE_STORAGE: DWORD = 0x00000020;
+pub const CACHEGROUP_FLAG_NONPURGEABLE: DWORD = 0x00000001;
+pub const CACHEGROUP_FLAG_GIDONLY: DWORD = 0x00000004;
+pub const CACHEGROUP_FLAG_FLUSHURL_ONDELETE: DWORD = 0x00000002;
+pub const CACHEGROUP_SEARCH_ALL: DWORD = 0x00000000;
+pub const CACHEGROUP_SEARCH_BYURL: DWORD = 0x00000001;
+pub const CACHEGROUP_TYPE_INVALID: DWORD = 0x00000001;
+pub const CACHEGROUP_READWRITE_MASK: DWORD = CACHEGROUP_ATTRIBUTE_TYPE
+ | CACHEGROUP_ATTRIBUTE_QUOTA | CACHEGROUP_ATTRIBUTE_GROUPNAME | CACHEGROUP_ATTRIBUTE_STORAGE;
+pub const GROUPNAME_MAX_LENGTH: usize = 120;
+pub const GROUP_OWNER_STORAGE_SIZE: usize = 4;
+STRUCT!{struct INTERNET_CACHE_GROUP_INFOA {
+ dwGroupSize: DWORD,
+ dwGroupFlags: DWORD,
+ dwGroupType: DWORD,
+ dwDiskUsage: DWORD,
+ dwDiskQuota: DWORD,
+ dwOwnerStorage: [DWORD; GROUP_OWNER_STORAGE_SIZE],
+ szGroupName: [CHAR; GROUPNAME_MAX_LENGTH],
+}}
+pub type LPINTERNET_CACHE_GROUP_INFOA = *mut INTERNET_CACHE_GROUP_INFOA;
+STRUCT!{struct INTERNET_CACHE_GROUP_INFOW {
+ dwGroupSize: DWORD,
+ dwGroupFlags: DWORD,
+ dwGroupType: DWORD,
+ dwDiskUsage: DWORD,
+ dwDiskQuota: DWORD,
+ dwOwnerStorage: [DWORD; GROUP_OWNER_STORAGE_SIZE],
+ szGroupName: [WCHAR; GROUPNAME_MAX_LENGTH],
+}}
+pub type LPINTERNET_CACHE_GROUP_INFOW = *mut INTERNET_CACHE_GROUP_INFOW;
+pub const CACHE_ENTRY_ATTRIBUTE_FC: DWORD = 0x00000004;
+pub const CACHE_ENTRY_HITRATE_FC: DWORD = 0x00000010;
+pub const CACHE_ENTRY_MODTIME_FC: DWORD = 0x00000040;
+pub const CACHE_ENTRY_EXPTIME_FC: DWORD = 0x00000080;
+pub const CACHE_ENTRY_ACCTIME_FC: DWORD = 0x00000100;
+pub const CACHE_ENTRY_SYNCTIME_FC: DWORD = 0x00000200;
+pub const CACHE_ENTRY_HEADERINFO_FC: DWORD = 0x00000400;
+pub const CACHE_ENTRY_EXEMPT_DELTA_FC: DWORD = 0x00000800;
+pub const INTERNET_CACHE_GROUP_ADD: DWORD = 0;
+pub const INTERNET_CACHE_GROUP_REMOVE: DWORD = 1;
+pub const INTERNET_DIAL_FORCE_PROMPT: DWORD = 0x2000;
+pub const INTERNET_DIAL_SHOW_OFFLINE: DWORD = 0x4000;
+pub const INTERNET_DIAL_UNATTENDED: DWORD = 0x8000;
+pub const INTERENT_GOONLINE_REFRESH: DWORD = 0x00000001;
+pub const INTERENT_GOONLINE_NOPROMPT: DWORD = 0x00000002;
+pub const INTERENT_GOONLINE_MASK: DWORD = 0x00000003;
+pub const INTERNET_AUTODIAL_FORCE_ONLINE: DWORD = 1;
+pub const INTERNET_AUTODIAL_FORCE_UNATTENDED: DWORD = 2;
+pub const INTERNET_AUTODIAL_FAILIFSECURITYCHECK: DWORD = 4;
+pub const INTERNET_AUTODIAL_OVERRIDE_NET_PRESENT: DWORD = 8;
+pub const INTERNET_AUTODIAL_FLAGS_MASK: DWORD = INTERNET_AUTODIAL_FORCE_ONLINE
+ | INTERNET_AUTODIAL_FORCE_UNATTENDED | INTERNET_AUTODIAL_FAILIFSECURITYCHECK
+ | INTERNET_AUTODIAL_OVERRIDE_NET_PRESENT;
+pub const PROXY_AUTO_DETECT_TYPE_DHCP: DWORD = 1;
+pub const PROXY_AUTO_DETECT_TYPE_DNS_A: DWORD = 2;
+STRUCT!{struct AutoProxyHelperVtbl {
+ IsResolvable: Option<unsafe extern "system" fn(
+ lpszHost: LPSTR,
+ ) -> BOOL>,
+ GetIPAddress: Option<unsafe extern "system" fn(
+ lpszIPAddress: LPSTR,
+ lpdwIPAddressSize: LPDWORD,
+ ) -> DWORD>,
+ ResolveHostName: Option<unsafe extern "system" fn(
+ lpszHostName: LPSTR,
+ lpszIPAddress: LPSTR,
+ lpdwIPAddressSize: LPDWORD,
+ ) -> DWORD>,
+ IsInNet: Option<unsafe extern "system" fn(
+ lpszIPAddress: LPSTR,
+ lpszDest: LPSTR,
+ lpszMask: LPSTR,
+ ) -> BOOL>,
+ IsResolvableEx: Option<unsafe extern "system" fn(
+ lpszHost: LPSTR,
+ ) -> BOOL>,
+ GetIPAddressEx: Option<unsafe extern "system" fn(
+ lpszIPAddress: LPSTR,
+ lpdwIPAddressSize: LPDWORD,
+ ) -> DWORD>,
+ ResolveHostNameEx: Option<unsafe extern "system" fn(
+ lpszHostName: LPSTR,
+ lpszIPAddress: LPSTR,
+ lpdwIPAddressSize: LPDWORD,
+ ) -> DWORD>,
+ IsInNetEx: Option<unsafe extern "system" fn(
+ lpszIPAddress: LPSTR,
+ lpszIPPrefix: LPSTR,
+ ) -> BOOL>,
+ SortIpList: Option<unsafe extern "system" fn(
+ lpszIPAddressList: LPSTR,
+ lpszIPSortedList: LPSTR,
+ lpdwIPSortedListSize: LPDWORD,
+ ) -> DWORD>,
+}}
+STRUCT!{struct AUTO_PROXY_SCRIPT_BUFFER {
+ dwStructSize: DWORD,
+ lpszScriptBuffer: LPSTR,
+ dwScriptBufferSize: DWORD,
+}}
+pub type LPAUTO_PROXY_SCRIPT_BUFFER = *mut AUTO_PROXY_SCRIPT_BUFFER;
+STRUCT!{struct AutoProxyHelperFunctions {
+ lpVtbl: *const AutoProxyHelperVtbl,
+}}
+FN!{stdcall pfnInternetInitializeAutoProxyDll(
+ DWORD,
+ LPSTR,
+ LPSTR,
+ *mut AutoProxyHelperFunctions,
+ LPAUTO_PROXY_SCRIPT_BUFFER,
+) -> BOOL}
+FN!{stdcall pfnInternetDeInitializeAutoProxyDll(
+ LPSTR,
+ DWORD,
+) -> BOOL}
+FN!{stdcall pfnInternetGetProxyInfo(
+ LPCSTR,
+ DWORD,
+ LPSTR,
+ DWORD,
+ *mut LPSTR,
+ LPDWORD,
+) -> BOOL}
+ENUM!{enum WPAD_CACHE_DELETE {
+ WPAD_CACHE_DELETE_CURRENT = 0x0,
+ WPAD_CACHE_DELETE_ALL = 0x1,
+}}
+pub const INTERNET_CONNECTION_MODEM: DWORD = 0x01;
+pub const INTERNET_CONNECTION_LAN: DWORD = 0x02;
+pub const INTERNET_CONNECTION_PROXY: DWORD = 0x04;
+pub const INTERNET_CONNECTION_MODEM_BUSY: DWORD = 0x08;
+pub const INTERNET_RAS_INSTALLED: DWORD = 0x10;
+pub const INTERNET_CONNECTION_OFFLINE: DWORD = 0x20;
+pub const INTERNET_CONNECTION_CONFIGURED: DWORD = 0x40;
+FN!{stdcall PFN_DIAL_HANDLER(
+ HWND,
+ LPCSTR,
+ DWORD,
+ LPDWORD,
+) -> DWORD}
+pub const INTERNET_CUSTOMDIAL_CONNECT: DWORD = 0;
+pub const INTERNET_CUSTOMDIAL_UNATTENDED: DWORD = 1;
+pub const INTERNET_CUSTOMDIAL_DISCONNECT: DWORD = 2;
+pub const INTERNET_CUSTOMDIAL_SHOWOFFLINE: DWORD = 4;
+pub const INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED: DWORD = 1;
+pub const INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE: DWORD = 2;
+pub const INTERNET_CUSTOMDIAL_CAN_HANGUP: DWORD = 4;
+pub const INTERNET_DIALSTATE_DISCONNECTED: DWORD = 1;
+pub const INTERNET_IDENTITY_FLAG_PRIVATE_CACHE: DWORD = 0x01;
+pub const INTERNET_IDENTITY_FLAG_SHARED_CACHE: DWORD = 0x02;
+pub const INTERNET_IDENTITY_FLAG_CLEAR_DATA: DWORD = 0x04;
+pub const INTERNET_IDENTITY_FLAG_CLEAR_COOKIES: DWORD = 0x08;
+pub const INTERNET_IDENTITY_FLAG_CLEAR_HISTORY: DWORD = 0x10;
+pub const INTERNET_IDENTITY_FLAG_CLEAR_CONTENT: DWORD = 0x20;
+pub const INTERNET_SUPPRESS_RESET_ALL: DWORD = 0x00;
+pub const INTERNET_SUPPRESS_COOKIE_POLICY: DWORD = 0x01;
+pub const INTERNET_SUPPRESS_COOKIE_POLICY_RESET: DWORD = 0x02;
+pub const PRIVACY_TEMPLATE_NO_COOKIES: DWORD = 0;
+pub const PRIVACY_TEMPLATE_HIGH: DWORD = 1;
+pub const PRIVACY_TEMPLATE_MEDIUM_HIGH: DWORD = 2;
+pub const PRIVACY_TEMPLATE_MEDIUM: DWORD = 3;
+pub const PRIVACY_TEMPLATE_MEDIUM_LOW: DWORD = 4;
+pub const PRIVACY_TEMPLATE_LOW: DWORD = 5;
+pub const PRIVACY_TEMPLATE_CUSTOM: DWORD = 100;
+pub const PRIVACY_TEMPLATE_ADVANCED: DWORD = 101;
+pub const PRIVACY_TEMPLATE_MAX: DWORD = PRIVACY_TEMPLATE_LOW;
+pub const PRIVACY_TYPE_FIRST_PARTY: DWORD = 0;
+pub const PRIVACY_TYPE_THIRD_PARTY: DWORD = 1;
+extern "system" {
+ pub fn CommitUrlCacheEntryA(
+ lpszUrlName: LPCSTR,
+ lpszLocalFileName: LPCSTR,
+ ExpireTime: FILETIME,
+ LastModifiedTime: FILETIME,
+ CacheEntryType: DWORD,
+ lpHeaderInfo: LPBYTE,
+ cchHeaderInfo: DWORD,
+ lpszFileExtension: LPCSTR,
+ lpszOriginalUrl: LPCSTR,
+ ) -> BOOL;
+ pub fn CommitUrlCacheEntryW(
+ lpszUrlName: LPCWSTR,
+ lpszLocalFileName: LPCWSTR,
+ ExpireTime: FILETIME,
+ LastModifiedTime: FILETIME,
+ CacheEntryType: DWORD,
+ lpszHeaderInfo: LPWSTR,
+ cchHeaderInfo: DWORD,
+ lpszFileExtension: LPCWSTR,
+ lpszOriginalUrl: LPCWSTR,
+ ) -> BOOL;
+ pub fn CreateMD5SSOHash (
+ pszChallengeInfo: PWSTR,
+ pwszRealm: PWSTR,
+ pwszTarget: PWSTR,
+ pbHexHash: PBYTE,
+ ) -> BOOL;
+ pub fn CreateUrlCacheEntryA(
+ lpszUrlName: LPCSTR,
+ dwExpectedFileSize: DWORD,
+ lpszFileExtension: LPCSTR,
+ lpszFileName: LPSTR,
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn CreateUrlCacheEntryW(
+ lpszUrlName: LPCWSTR,
+ dwExpectedFileSize: DWORD,
+ lpszFileExtension: LPCWSTR,
+ lpszFileName: LPWSTR,
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn CreateUrlCacheGroup(
+ dwFlags: DWORD,
+ lpReserved: LPVOID,
+ ) -> GROUPID;
+ pub fn DeleteUrlCacheEntryA(
+ lpszUrlName: LPCSTR,
+ ) -> BOOL;
+ pub fn DeleteUrlCacheEntryW(
+ lpszUrlName: LPCWSTR,
+ ) -> BOOL;
+ pub fn DeleteUrlCacheGroup(
+ GroupId: GROUPID,
+ dwFlags: DWORD,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn DeleteWpadCacheForNetworks(
+ arg0: WPAD_CACHE_DELETE,
+ ) -> BOOL;
+ pub fn DetectAutoProxyUrl(
+ pszAutoProxyUrl: PSTR,
+ cchAutoProxyUrl: DWORD,
+ dwDetectFlags: DWORD,
+ ) -> BOOL;
+ pub fn FindCloseUrlCache(
+ hEnumHandle: HANDLE,
+ ) -> BOOL;
+ pub fn FindFirstUrlCacheEntryA(
+ lpszUrlSearchPattern: LPCSTR,
+ lpFirstCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
+ lpcbCacheEntryInfo: LPDWORD,
+ ) -> HANDLE;
+ pub fn FindFirstUrlCacheEntryExA(
+ lpszUrlSearchPattern: LPCSTR,
+ dwFlags: DWORD,
+ dwFilter: DWORD,
+ GroupId: GROUPID,
+ lpFirstCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
+ lpcbCacheEntryInfo: LPDWORD,
+ lpGroupAttributes: LPVOID,
+ lpcbGroupAttributes: LPDWORD,
+ lpReserved: LPVOID,
+ ) -> HANDLE;
+ pub fn FindFirstUrlCacheEntryExW(
+ lpszUrlSearchPattern: LPCWSTR,
+ dwFlags: DWORD,
+ dwFilter: DWORD,
+ GroupId: GROUPID,
+ lpFirstCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
+ lpcbCacheEntryInfo: LPDWORD,
+ lpGroupAttributes: LPVOID,
+ lpcbGroupAttributes: LPDWORD,
+ lpReserved: LPVOID,
+ ) -> HANDLE;
+ pub fn FindFirstUrlCacheEntryW(
+ lpszUrlSearchPattern: LPCWSTR,
+ lpFirstCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
+ lpcbCacheEntryInfo: LPDWORD,
+ ) -> HANDLE;
+ pub fn FindFirstUrlCacheGroup(
+ dwFlags: DWORD,
+ dwFilter: DWORD,
+ lpSearchCondition: LPVOID,
+ dwSearchCondition: DWORD,
+ lpGroupId: *mut GROUPID,
+ lpReserved: LPVOID,
+ ) -> HANDLE;
+ pub fn FindNextUrlCacheEntryA(
+ hEnumHandle: HANDLE,
+ lpNextCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
+ lpcbCacheEntryInfo: LPDWORD,
+ ) -> BOOL;
+ pub fn FindNextUrlCacheEntryExA(
+ hEnumHandle: HANDLE,
+ lpNextCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
+ lpcbCacheEntryInfo: LPDWORD,
+ lpGroupAttributes: LPVOID,
+ lpcbGroupAttributes: LPDWORD,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn FindNextUrlCacheEntryExW(
+ hEnumHandle: HANDLE,
+ lpNextCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
+ lpcbCacheEntryInfo: LPDWORD,
+ lpGroupAttributes: LPVOID,
+ lpcbGroupAttributes: LPDWORD,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn FindNextUrlCacheEntryW(
+ hEnumHandle: HANDLE,
+ lpNextCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
+ lpcbCacheEntryInfo: LPDWORD,
+ ) -> BOOL;
+ pub fn FindNextUrlCacheGroup(
+ hFind: HANDLE,
+ lpGroupId: *mut GROUPID,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn FtpCommandA(
+ hConnect: HINTERNET,
+ fExpectResponse: BOOL,
+ dwFlags: DWORD,
+ lpszCommand: LPCSTR,
+ dwContext: DWORD_PTR,
+ phFtpCommand: *mut HINTERNET,
+ ) -> BOOL;
+ pub fn FtpCommandW(
+ hConnect: HINTERNET,
+ fExpectResponse: BOOL,
+ dwFlags: DWORD,
+ lpszCommand: LPCWSTR,
+ dwContext: DWORD_PTR,
+ phFtpCommand: *mut HINTERNET,
+ ) -> BOOL;
+ pub fn FtpCreateDirectoryA(
+ hConnect: HINTERNET,
+ lpszDirectory: LPCSTR,
+ ) -> BOOL;
+ pub fn FtpCreateDirectoryW(
+ hConnect: HINTERNET,
+ lpszDirectory: LPCWSTR,
+ ) -> BOOL;
+ pub fn FtpDeleteFileA(
+ hConnect: HINTERNET,
+ lpszFileName: LPCSTR,
+ ) -> BOOL;
+ pub fn FtpDeleteFileW(
+ hConnect: HINTERNET,
+ lpszFileName: LPCWSTR,
+ ) -> BOOL;
+ pub fn FtpFindFirstFileA(
+ hConnect: HINTERNET,
+ lpszSearchFile: LPCSTR,
+ lpFindFileData: LPWIN32_FIND_DATAA,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> HINTERNET;
+ pub fn FtpFindFirstFileW(
+ hConnect: HINTERNET,
+ lpszSearchFile: LPCWSTR,
+ lpFindFileData: LPWIN32_FIND_DATAW,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> HINTERNET;
+ pub fn FtpGetCurrentDirectoryA(
+ hConnect: HINTERNET,
+ lpszCurrentDirectory: LPSTR,
+ lpdwCurrentDirectory: LPDWORD,
+ ) -> BOOL;
+ pub fn FtpGetCurrentDirectoryW(
+ hConnect: HINTERNET,
+ lpszCurrentDirectory: LPWSTR,
+ lpdwCurrentDirectory: LPDWORD,
+ ) -> BOOL;
+ pub fn FtpGetFileA(
+ hConnect: HINTERNET,
+ lpszRemoteFile: LPCSTR,
+ lpszNewFile: LPCSTR,
+ fFailIfExists: BOOL,
+ dwFlagsAndAttributes: DWORD,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> BOOL;
+ pub fn FtpGetFileEx(
+ hFtpSession: HINTERNET,
+ lpszRemoteFile: LPCSTR,
+ lpszNewFile: LPCWSTR,
+ fFailIfExists: BOOL,
+ dwFlagsAndAttributes: DWORD,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> BOOL;
+ pub fn FtpGetFileSize(
+ hFile: HINTERNET,
+ lpdwFileSizeHigh: LPDWORD,
+ ) -> DWORD;
+ pub fn FtpGetFileW(
+ hConnect: HINTERNET,
+ lpszRemoteFile: LPCWSTR,
+ lpszNewFile: LPCWSTR,
+ fFailIfExists: BOOL,
+ dwFlagsAndAttributes: DWORD,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> BOOL;
+ pub fn FtpOpenFileA(
+ hConnect: HINTERNET,
+ lpszFileName: LPCSTR,
+ dwAccess: DWORD,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> HINTERNET;
+ pub fn FtpOpenFileW(
+ hConnect: HINTERNET,
+ lpszFileName: LPCWSTR,
+ dwAccess: DWORD,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> HINTERNET;
+ pub fn FtpPutFileA(
+ hConnect: HINTERNET,
+ lpszLocalFile: LPCSTR,
+ lpszNewRemoteFile: LPCSTR,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> BOOL;
+ pub fn FtpPutFileEx(
+ hFtpSession: HINTERNET,
+ lpszLocalFile: LPCWSTR,
+ lpszNewRemoteFile: LPCSTR,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> BOOL;
+ pub fn FtpPutFileW(
+ hConnect: HINTERNET,
+ lpszLocalFile: LPCWSTR,
+ lpszNewRemoteFile: LPCWSTR,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> BOOL;
+ pub fn FtpRemoveDirectoryA(
+ hConnect: HINTERNET,
+ lpszDirectory: LPCSTR,
+ ) -> BOOL;
+ pub fn FtpRemoveDirectoryW(
+ hConnect: HINTERNET,
+ lpszDirectory: LPCWSTR,
+ ) -> BOOL;
+ pub fn FtpRenameFileA(
+ hConnect: HINTERNET,
+ lpszExisting: LPCSTR,
+ lpszNew: LPCSTR,
+ ) -> BOOL;
+ pub fn FtpRenameFileW(
+ hConnect: HINTERNET,
+ lpszExisting: LPCWSTR,
+ lpszNew: LPCWSTR,
+ ) -> BOOL;
+ pub fn FtpSetCurrentDirectoryA(
+ hConnect: HINTERNET,
+ lpszDirectory: LPCSTR,
+ ) -> BOOL;
+ pub fn FtpSetCurrentDirectoryW(
+ hConnect: HINTERNET,
+ lpszDirectory: LPCWSTR,
+ ) -> BOOL;
+ pub fn GetUrlCacheEntryInfoA(
+ lpszUrlName: LPCSTR,
+ lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
+ lpcbCacheEntryInfo: LPDWORD,
+ ) -> BOOL;
+ pub fn GetUrlCacheEntryInfoExA(
+ lpszUrl: LPCSTR,
+ lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
+ lpcbCacheEntryInfo: LPDWORD,
+ lpszRedirectUrl: LPSTR,
+ lpcbRedirectUrl: LPDWORD,
+ lpReserved: LPVOID,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn GetUrlCacheEntryInfoExW(
+ lpszUrl: LPCWSTR,
+ lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
+ lpcbCacheEntryInfo: LPDWORD,
+ lpszRedirectUrl: LPWSTR,
+ lpcbRedirectUrl: LPDWORD,
+ lpReserved: LPVOID,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn GetUrlCacheEntryInfoW(
+ lpszUrlName: LPCWSTR,
+ lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
+ lpcbCacheEntryInfo: LPDWORD,
+ ) -> BOOL;
+ pub fn GetUrlCacheGroupAttributeA(
+ gid: GROUPID,
+ dwFlags: DWORD,
+ dwAttributes: DWORD,
+ lpGroupInfo: LPINTERNET_CACHE_GROUP_INFOA,
+ lpcbGroupInfo: LPDWORD,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn GetUrlCacheGroupAttributeW(
+ gid: GROUPID,
+ dwFlags: DWORD,
+ dwAttributes: DWORD,
+ lpGroupInfo: LPINTERNET_CACHE_GROUP_INFOW,
+ lpcbGroupInfo: LPDWORD,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn GopherCreateLocatorA(
+ lpszHost: LPCSTR,
+ nServerPort: INTERNET_PORT,
+ lpszDisplayString: LPCSTR,
+ lpszSelectorString: LPCSTR,
+ dwGopherType: DWORD,
+ lpszLocator: LPSTR,
+ lpdwBufferLength: LPDWORD,
+ ) -> BOOL;
+ pub fn GopherCreateLocatorW(
+ lpszHost: LPCWSTR,
+ nServerPort: INTERNET_PORT,
+ lpszDisplayString: LPCWSTR,
+ lpszSelectorString: LPCWSTR,
+ dwGopherType: DWORD,
+ lpszLocator: LPWSTR,
+ lpdwBufferLength: LPDWORD,
+ ) -> BOOL;
+ pub fn GopherFindFirstFileA(
+ hConnect: HINTERNET,
+ lpszLocator: LPCSTR,
+ lpszSearchString: LPCSTR,
+ lpFindData: LPGOPHER_FIND_DATAA,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> HINTERNET;
+ pub fn GopherFindFirstFileW(
+ hConnect: HINTERNET,
+ lpszLocator: LPCWSTR,
+ lpszSearchString: LPCWSTR,
+ lpFindData: LPGOPHER_FIND_DATAW,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> HINTERNET;
+ pub fn GopherGetAttributeA(
+ hConnect: HINTERNET,
+ lpszLocator: LPCSTR,
+ lpszAttributeName: LPCSTR,
+ lpBuffer: LPBYTE,
+ dwBufferLength: DWORD,
+ lpdwCharactersReturned: LPDWORD,
+ lpfnEnumerator: GOPHER_ATTRIBUTE_ENUMERATOR,
+ dwContext: DWORD_PTR,
+ ) -> BOOL;
+ pub fn GopherGetAttributeW(
+ hConnect: HINTERNET,
+ lpszLocator: LPCWSTR,
+ lpszAttributeName: LPCWSTR,
+ lpBuffer: LPBYTE,
+ dwBufferLength: DWORD,
+ lpdwCharactersReturned: LPDWORD,
+ lpfnEnumerator: GOPHER_ATTRIBUTE_ENUMERATOR,
+ dwContext: DWORD_PTR,
+ ) -> BOOL;
+ pub fn GopherGetLocatorTypeA(
+ lpszLocator: LPCSTR,
+ lpdwGopherType: LPDWORD,
+ ) -> BOOL;
+ pub fn GopherGetLocatorTypeW(
+ lpszLocator: LPCWSTR,
+ lpdwGopherType: LPDWORD,
+ ) -> BOOL;
+ pub fn GopherOpenFileA(
+ hConnect: HINTERNET,
+ lpszLocator: LPCSTR,
+ lpszView: LPCSTR,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> HINTERNET;
+ pub fn GopherOpenFileW(
+ hConnect: HINTERNET,
+ lpszLocator: LPCWSTR,
+ lpszView: LPCWSTR,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> HINTERNET;
+ pub fn HttpAddRequestHeadersA(
+ hRequest: HINTERNET,
+ lpszHeaders: LPCSTR,
+ dwHeadersLength: DWORD,
+ dwModifiers: DWORD,
+ ) -> BOOL;
+ pub fn HttpAddRequestHeadersW(
+ hRequest: HINTERNET,
+ lpszHeaders: LPCWSTR,
+ dwHeadersLength: DWORD,
+ dwModifiers: DWORD,
+ ) -> BOOL;
+ pub fn HttpEndRequestA(
+ hRequest: HINTERNET,
+ lpBuffersOut: LPINTERNET_BUFFERSA,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> BOOL;
+ pub fn HttpEndRequestW(
+ hRequest: HINTERNET,
+ lpBuffersOut: LPINTERNET_BUFFERSW,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> BOOL;
+ pub fn HttpOpenRequestA(
+ hConnect: HINTERNET,
+ lpszVerb: LPCSTR,
+ lpszObjectName: LPCSTR,
+ lpszVersion: LPCSTR,
+ lpszReferrer: LPCSTR,
+ lplpszAcceptTypes: *mut LPCSTR,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> HINTERNET;
+ pub fn HttpOpenRequestW(
+ hConnect: HINTERNET,
+ lpszVerb: LPCWSTR,
+ lpszObjectName: LPCWSTR,
+ lpszVersion: LPCWSTR,
+ lpszReferrer: LPCWSTR,
+ lplpszAcceptTypes: *mut LPCWSTR,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> HINTERNET;
+ pub fn HttpQueryInfoA(
+ hRequest: HINTERNET,
+ dwInfoLevel: DWORD,
+ lpBuffer: LPVOID,
+ lpdwBufferLength: LPDWORD,
+ lpdwIndex: LPDWORD,
+ ) -> BOOL;
+ pub fn HttpQueryInfoW(
+ hRequest: HINTERNET,
+ dwInfoLevel: DWORD,
+ lpBuffer: LPVOID,
+ lpdwBufferLength: LPDWORD,
+ lpdwIndex: LPDWORD,
+ ) -> BOOL;
+ pub fn HttpSendRequestA(
+ hRequest: HINTERNET,
+ lpszHeaders: LPCSTR,
+ dwHeadersLength: DWORD,
+ lpOptional: LPVOID,
+ dwOptionalLength: DWORD,
+ ) -> BOOL;
+ pub fn HttpSendRequestExA(
+ hRequest: HINTERNET,
+ lpBuffersIn: LPINTERNET_BUFFERSA,
+ lpBuffersOut: LPINTERNET_BUFFERSA,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> BOOL;
+ pub fn HttpSendRequestExW(
+ hRequest: HINTERNET,
+ lpBuffersIn: LPINTERNET_BUFFERSW,
+ lpBuffersOut: LPINTERNET_BUFFERSW,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> BOOL;
+ pub fn HttpSendRequestW(
+ hRequest: HINTERNET,
+ lpszHeaders: LPCWSTR,
+ dwHeadersLength: DWORD,
+ lpOptional: LPVOID,
+ dwOptionalLength: DWORD,
+ ) -> BOOL;
+ pub fn InternetAttemptConnect(
+ dwReserved: DWORD,
+ ) -> DWORD;
+ pub fn InternetAutodial(
+ dwFlags: DWORD,
+ hwndParent: HWND,
+ ) -> BOOL;
+ pub fn InternetAutodialHangup(
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn InternetCanonicalizeUrlA(
+ lpszUrl: LPCSTR,
+ lpszBuffer: LPSTR,
+ lpdwBufferLength: LPDWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn InternetCanonicalizeUrlW(
+ lpszUrl: LPCWSTR,
+ lpszBuffer: LPWSTR,
+ lpdwBufferLength: LPDWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn InternetCheckConnectionA(
+ lpszUrl: LPCSTR,
+ dwFlags: DWORD,
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn InternetCheckConnectionW(
+ lpszUrl: LPCWSTR,
+ dwFlags: DWORD,
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn InternetClearAllPerSiteCookieDecisions() -> BOOL;
+ pub fn InternetCloseHandle(
+ hInternet: HINTERNET,
+ ) -> BOOL;
+ pub fn InternetCombineUrlA(
+ lpszBaseUrl: LPCSTR,
+ lpszRelativeUrl: LPCSTR,
+ lpszBuffer: LPSTR,
+ lpdwBufferLength: LPDWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn InternetCombineUrlW(
+ lpszBaseUrl: LPCWSTR,
+ lpszRelativeUrl: LPCWSTR,
+ lpszBuffer: LPWSTR,
+ lpdwBufferLength: LPDWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn InternetConfirmZoneCrossingA(
+ hWnd: HWND,
+ szUrlPrev: LPSTR,
+ szUrlNew: LPSTR,
+ bPost: BOOL,
+ ) -> DWORD;
+ pub fn InternetConfirmZoneCrossingW(
+ hWnd: HWND,
+ szUrlPrev: LPWSTR,
+ szUrlNew: LPWSTR,
+ bPost: BOOL,
+ ) -> DWORD;
+ pub fn InternetConnectA(
+ hInternet: HINTERNET,
+ lpszServerName: LPCSTR,
+ nServerPort: INTERNET_PORT,
+ lpszUserName: LPCSTR,
+ lpszPassword: LPCSTR,
+ dwService: DWORD,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> HINTERNET;
+ pub fn InternetConnectW(
+ hInternet: HINTERNET,
+ lpszServerName: LPCWSTR,
+ nServerPort: INTERNET_PORT,
+ lpszUserName: LPCWSTR,
+ lpszPassword: LPCWSTR,
+ dwService: DWORD,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> HINTERNET;
+ pub fn InternetCrackUrlA(
+ lpszUrl: LPCSTR,
+ dwUrlLength: DWORD,
+ dwFlags: DWORD,
+ lpUrlComponents: LPURL_COMPONENTSA,
+ ) -> BOOL;
+ pub fn InternetCrackUrlW(
+ lpszUrl: LPCWSTR,
+ dwUrlLength: DWORD,
+ dwFlags: DWORD,
+ lpUrlComponents: LPURL_COMPONENTSW,
+ ) -> BOOL;
+ pub fn InternetCreateUrlA(
+ lpUrlComponents: LPURL_COMPONENTSA,
+ dwFlags: DWORD,
+ lpszUrl: LPSTR,
+ lpdwUrlLength: LPDWORD,
+ ) -> BOOL;
+ pub fn InternetCreateUrlW(
+ lpUrlComponents: LPURL_COMPONENTSW,
+ dwFlags: DWORD,
+ lpszUrl: LPWSTR,
+ lpdwUrlLength: LPDWORD,
+ ) -> BOOL;
+ pub fn InternetDialA(
+ hwndParent: HWND,
+ lpszConnectoid: LPSTR,
+ dwFlags: DWORD,
+ lpdwConnection: *mut DWORD_PTR,
+ dwReserved: DWORD,
+ ) -> DWORD;
+ pub fn InternetDialW(
+ hwndParent: HWND,
+ lpszConnectoid: LPWSTR,
+ dwFlags: DWORD,
+ lpdwConnection: *mut DWORD_PTR,
+ dwReserved: DWORD,
+ ) -> DWORD;
+ pub fn InternetEnumPerSiteCookieDecisionA(
+ pszSiteName: LPSTR,
+ pcSiteNameSize: *mut u32,
+ pdwDecision: *mut u32,
+ dwIndex: u32,
+ ) -> BOOL;
+ pub fn InternetEnumPerSiteCookieDecisionW(
+ pszSiteName: LPWSTR,
+ pcSiteNameSize: *mut u32,
+ pdwDecision: *mut u32,
+ dwIndex: u32,
+ ) -> BOOL;
+ pub fn InternetErrorDlg(
+ hWnd: HWND,
+ hRequest: HINTERNET,
+ dwError: DWORD,
+ dwFlags: DWORD,
+ lppvData: *mut LPVOID,
+ ) -> DWORD;
+ pub fn InternetFindNextFileA(
+ hFind: HINTERNET,
+ lpvFindData: LPVOID,
+ ) -> BOOL;
+ pub fn InternetFindNextFileW(
+ hFind: HINTERNET,
+ lpvFindData: LPVOID,
+ ) -> BOOL;
+ pub fn InternetFreeCookies(
+ pCookies: *mut INTERNET_COOKIE2,
+ dwCookieCount: DWORD,
+ ) -> ();
+ pub fn InternetGetConnectedState(
+ lpdwFlags: LPDWORD,
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn InternetGetConnectedStateExA(
+ lpdwFlags: LPDWORD,
+ lpszConnectionName: LPSTR,
+ cchNameLen: DWORD,
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn InternetGetConnectedStateExW(
+ lpdwFlags: LPDWORD,
+ lpszConnectionName: LPWSTR,
+ cchNameLen: DWORD,
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn InternetGetCookieA(
+ lpszUrl: LPCSTR,
+ lpszCookieName: LPCSTR,
+ lpszCookieData: LPSTR,
+ lpdwSize: LPDWORD,
+ ) -> BOOL;
+ pub fn InternetGetCookieEx2(
+ pcwszUrl: PCWSTR,
+ pcwszCookieName: PCWSTR,
+ dwFlags: DWORD,
+ ppCookies: *mut *mut INTERNET_COOKIE2,
+ pdwCookieCount: PDWORD,
+ ) -> DWORD;
+ pub fn InternetGetCookieExA(
+ lpszUrl: LPCSTR,
+ lpszCookieName: LPCSTR,
+ lpszCookieData: LPSTR,
+ lpdwSize: LPDWORD,
+ dwFlags: DWORD,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn InternetGetCookieExW(
+ lpszUrl: LPCWSTR,
+ lpszCookieName: LPCWSTR,
+ lpszCookieData: LPWSTR,
+ lpdwSize: LPDWORD,
+ dwFlags: DWORD,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn InternetGetCookieW(
+ lpszUrl: LPCWSTR,
+ lpszCookieName: LPCWSTR,
+ lpszCookieData: LPWSTR,
+ lpdwSize: LPDWORD,
+ ) -> BOOL;
+ pub fn InternetGetLastResponseInfoA(
+ lpdwError: LPDWORD,
+ lpszBuffer: LPSTR,
+ lpdwBufferLength: LPDWORD,
+ ) -> BOOL;
+ pub fn InternetGetLastResponseInfoW(
+ lpdwError: LPDWORD,
+ lpszBuffer: LPWSTR,
+ lpdwBufferLength: LPDWORD,
+ ) -> BOOL;
+ pub fn InternetGetPerSiteCookieDecisionA(
+ pchHostName: LPCSTR,
+ pResult: *mut u32,
+ ) -> BOOL;
+ pub fn InternetGetPerSiteCookieDecisionW(
+ pchHostName: LPCWSTR,
+ pResult: *mut u32,
+ ) -> BOOL;
+ pub fn InternetGoOnlineA(
+ lpszURL: LPCSTR,
+ hwndParent: HWND,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn InternetGoOnlineW(
+ lpszURL: LPCWSTR,
+ hwndParent: HWND,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn InternetHangUp(
+ dwConnection: DWORD_PTR,
+ dwReserved: DWORD,
+ ) -> DWORD;
+ pub fn InternetInitializeAutoProxyDll(
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn InternetLockRequestFile(
+ hInternet: HINTERNET,
+ lphLockRequestInfo: *mut HANDLE,
+ ) -> BOOL;
+ pub fn InternetOpenA(
+ lpszAgent: LPCSTR,
+ dwAccessType: DWORD,
+ lpszProxy: LPCSTR,
+ lpszProxyBypass: LPCSTR,
+ dwFlags: DWORD,
+ ) -> HINTERNET;
+ pub fn InternetOpenUrlA(
+ hInternet: HINTERNET,
+ lpszUrl: LPCSTR,
+ lpszHeaders: LPCSTR,
+ dwHeadersLength: DWORD,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> HINTERNET;
+ pub fn InternetOpenUrlW(
+ hInternet: HINTERNET,
+ lpszUrl: LPCWSTR,
+ lpszHeaders: LPCWSTR,
+ dwHeadersLength: DWORD,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> HINTERNET;
+ pub fn InternetOpenW(
+ lpszAgent: LPCWSTR,
+ dwAccessType: DWORD,
+ lpszProxy: LPCWSTR,
+ lpszProxyBypass: LPCWSTR,
+ dwFlags: DWORD,
+ ) -> HINTERNET;
+ pub fn InternetQueryDataAvailable(
+ hFile: HINTERNET,
+ lpdwNumberOfBytesAvailable: LPDWORD,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> BOOL;
+ pub fn InternetQueryOptionA(
+ hInternet: HINTERNET,
+ dwOption: DWORD,
+ lpBuffer: LPVOID,
+ lpdwBufferLength: LPDWORD,
+ ) -> BOOL;
+ pub fn InternetQueryOptionW(
+ hInternet: HINTERNET,
+ dwOption: DWORD,
+ lpBuffer: LPVOID,
+ lpdwBufferLength: LPDWORD,
+ ) -> BOOL;
+ pub fn InternetReadFile(
+ hFile: HINTERNET,
+ lpBuffer: LPVOID,
+ dwNumberOfBytesToRead: DWORD,
+ lpdwNumberOfBytesRead: LPDWORD,
+ ) -> BOOL;
+ pub fn InternetReadFileExA(
+ hFile: HINTERNET,
+ lpBuffersOut: LPINTERNET_BUFFERSA,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> BOOL;
+ pub fn InternetReadFileExW(
+ hFile: HINTERNET,
+ lpBuffersOut: LPINTERNET_BUFFERSW,
+ dwFlags: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> BOOL;
+ pub fn InternetSetCookieA(
+ lpszUrl: LPCSTR,
+ lpszCookieName: LPCSTR,
+ lpszCookieData: LPCSTR,
+ ) -> BOOL;
+ pub fn InternetSetCookieEx2(
+ pcwszUrl: PCWSTR,
+ pCookie: *const INTERNET_COOKIE2,
+ pcwszP3PPolicy: PCWSTR,
+ dwFlags: DWORD,
+ pdwCookieState: PDWORD,
+ ) -> DWORD;
+ pub fn InternetSetCookieExA(
+ lpszUrl: LPCSTR,
+ lpszCookieName: LPCSTR,
+ lpszCookieData: LPCSTR,
+ dwFlags: DWORD,
+ dwReserved: DWORD_PTR,
+ ) -> DWORD;
+ pub fn InternetSetCookieExW(
+ lpszUrl: LPCWSTR,
+ lpszCookieName: LPCWSTR,
+ lpszCookieData: LPCWSTR,
+ dwFlags: DWORD,
+ dwReserved: DWORD_PTR,
+ ) -> DWORD;
+ pub fn InternetSetCookieW(
+ lpszUrl: LPCWSTR,
+ lpszCookieName: LPCWSTR,
+ lpszCookieData: LPCWSTR,
+ ) -> BOOL;
+ pub fn InternetSetDialStateA(
+ lpszConnectoid: LPCSTR,
+ dwState: DWORD,
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn InternetSetDialStateW(
+ lpszConnectoid: LPCWSTR,
+ dwState: DWORD,
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn InternetSetFilePointer(
+ hFile: HINTERNET,
+ lDistanceToMove: LONG,
+ lpDistanceToMoveHigh: PLONG,
+ dwMoveMethod: DWORD,
+ dwContext: DWORD_PTR,
+ ) -> DWORD;
+ pub fn InternetSetOptionA(
+ hInternet: HINTERNET,
+ dwOption: DWORD,
+ lpBuffer: LPVOID,
+ dwBufferLength: DWORD,
+ ) -> BOOL;
+ pub fn InternetSetOptionExA(
+ hInternet: HINTERNET,
+ dwOption: DWORD,
+ lpBuffer: LPVOID,
+ dwBufferLength: DWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn InternetSetOptionExW(
+ hInternet: HINTERNET,
+ dwOption: DWORD,
+ lpBuffer: LPVOID,
+ dwBufferLength: DWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn InternetSetOptionW(
+ hInternet: HINTERNET,
+ dwOption: DWORD,
+ lpBuffer: LPVOID,
+ dwBufferLength: DWORD,
+ ) -> BOOL;
+ pub fn InternetSetPerSiteCookieDecisionA(
+ pchHostName: LPCSTR,
+ dwDecision: DWORD,
+ ) -> BOOL;
+ pub fn InternetSetPerSiteCookieDecisionW(
+ pchHostName: LPCWSTR,
+ dwDecision: DWORD,
+ ) -> BOOL;
+ pub fn InternetSetStatusCallbackA(
+ hInternet: HINTERNET,
+ lpfnInternetCallback: INTERNET_STATUS_CALLBACK,
+ ) -> INTERNET_STATUS_CALLBACK;
+ pub fn InternetSetStatusCallbackW(
+ hInternet: HINTERNET,
+ lpfnInternetCallback: INTERNET_STATUS_CALLBACK,
+ ) -> INTERNET_STATUS_CALLBACK;
+ pub fn InternetTimeFromSystemTimeA(
+ pst: *const SYSTEMTIME,
+ dwRFC: DWORD,
+ lpszTime: LPSTR,
+ cbTime: DWORD,
+ ) -> BOOL;
+ pub fn InternetTimeFromSystemTimeW(
+ pst: *const SYSTEMTIME,
+ dwRFC: DWORD,
+ lpszTime: LPWSTR,
+ cbTime: DWORD,
+ ) -> BOOL;
+ pub fn InternetTimeToSystemTimeA(
+ lpszTime: LPCSTR,
+ pst: *mut SYSTEMTIME,
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn InternetTimeToSystemTimeW(
+ lpszTime: LPCWSTR,
+ pst: *mut SYSTEMTIME,
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn InternetUnlockRequestFile(
+ hLockRequestInfo: HANDLE,
+ ) -> BOOL;
+ pub fn InternetWriteFile(
+ hFile: HINTERNET,
+ lpBuffer: LPCVOID,
+ dwNumberOfBytesToWrite: DWORD,
+ lpdwNumberOfBytesWritten: LPDWORD,
+ ) -> BOOL;
+ pub fn PrivacyGetZonePreferenceW(
+ dwZone: DWORD,
+ dwType: DWORD,
+ pdwTemplate: LPDWORD,
+ pszBuffer: LPWSTR,
+ pdwBufferLength: LPDWORD,
+ ) -> DWORD;
+ pub fn PrivacySetZonePreferenceW(
+ dwZone: DWORD,
+ dwType: DWORD,
+ dwTemplate: DWORD,
+ pszPreference: LPCWSTR,
+ ) -> DWORD;
+ pub fn ReadUrlCacheEntryStream(
+ hUrlCacheStream: HANDLE,
+ dwLocation: DWORD,
+ lpBuffer: LPVOID,
+ lpdwLen: LPDWORD,
+ Reserved: DWORD,
+ ) -> BOOL;
+ pub fn ReadUrlCacheEntryStreamEx(
+ hUrlCacheStream: HANDLE,
+ qwLocation: DWORDLONG,
+ lpBuffer: LPVOID,
+ lpdwLen: LPDWORD,
+ ) -> BOOL;
+ pub fn ResumeSuspendedDownload(
+ hRequest: HINTERNET,
+ dwResultCode: DWORD,
+ ) -> BOOL;
+ pub fn RetrieveUrlCacheEntryFileA(
+ lpszUrlName: LPCSTR,
+ lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
+ lpcbCacheEntryInfo: LPDWORD,
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn RetrieveUrlCacheEntryFileW(
+ lpszUrlName: LPCWSTR,
+ lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
+ lpcbCacheEntryInfo: LPDWORD,
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn RetrieveUrlCacheEntryStreamA(
+ lpszUrlName: LPCSTR,
+ lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
+ lpcbCacheEntryInfo: LPDWORD,
+ fRandomRead: BOOL,
+ dwReserved: DWORD,
+ ) -> HANDLE;
+ pub fn RetrieveUrlCacheEntryStreamW(
+ lpszUrlName: LPCWSTR,
+ lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
+ lpcbCacheEntryInfo: LPDWORD,
+ fRandomRead: BOOL,
+ dwReserved: DWORD,
+ ) -> HANDLE;
+ pub fn SetUrlCacheEntryGroupA(
+ lpszUrlName: LPCSTR,
+ dwFlags: DWORD,
+ GroupId: GROUPID,
+ pbGroupAttributes: LPBYTE,
+ cbGroupAttributes: DWORD,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn SetUrlCacheEntryGroupW(
+ lpszUrlName: LPCWSTR,
+ dwFlags: DWORD,
+ GroupId: GROUPID,
+ pbGroupAttributes: LPBYTE,
+ cbGroupAttributes: DWORD,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn SetUrlCacheEntryInfoA(
+ lpszUrlName: LPCSTR,
+ lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOA,
+ dwFieldControl: DWORD,
+ ) -> BOOL;
+ pub fn SetUrlCacheEntryInfoW(
+ lpszUrlName: LPCWSTR,
+ lpCacheEntryInfo: LPINTERNET_CACHE_ENTRY_INFOW,
+ dwFieldControl: DWORD,
+ ) -> BOOL;
+ pub fn SetUrlCacheGroupAttributeA(
+ gid: GROUPID,
+ dwFlags: DWORD,
+ dwAttributes: DWORD,
+ lpGroupInfo: LPINTERNET_CACHE_GROUP_INFOA,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn SetUrlCacheGroupAttributeW(
+ gid: GROUPID,
+ dwFlags: DWORD,
+ dwAttributes: DWORD,
+ lpGroupInfo: LPINTERNET_CACHE_GROUP_INFOW,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn UnlockUrlCacheEntryFileA(
+ lpszUrlName: LPCSTR,
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn UnlockUrlCacheEntryFileW(
+ lpszUrlName: LPCWSTR,
+ dwReserved: DWORD,
+ ) -> BOOL;
+ pub fn UnlockUrlCacheEntryStream(
+ hUrlCacheStream: HANDLE,
+ Reserved: DWORD,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/winineti.rs b/vendor/winapi/src/um/winineti.rs
new file mode 100644
index 000000000..c0076c0d0
--- /dev/null
+++ b/vendor/winapi/src/um/winineti.rs
@@ -0,0 +1,142 @@
+// 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.
+//! Windows Internet Services API procedure declarations, types and constants.
+// Currently, this only contains `INTERNET_FLAG_BGUPDATE`, which is needed to correctly define
+// `wininet::INTERNET_FLAGS_MASK`.
+use shared::minwindef::DWORD;
+pub const INTERNET_FLAG_BGUPDATE: DWORD = 0x00000008;
+// Functions from wininet.dll that *should* be in this header.
+// pub fn AppCacheCheckManifest();
+// pub fn AppCacheCloseHandle();
+// pub fn AppCacheCreateAndCommitFile();
+// pub fn AppCacheDeleteGroup();
+// pub fn AppCacheDeleteIEGroup();
+// pub fn AppCacheDuplicateHandle();
+// pub fn AppCacheFinalize();
+// pub fn AppCacheFreeDownloadList();
+// pub fn AppCacheFreeGroupList();
+// pub fn AppCacheFreeIESpace();
+// pub fn AppCacheFreeSpace();
+// pub fn AppCacheGetDownloadList();
+// pub fn AppCacheGetFallbackUrl();
+// pub fn AppCacheGetGroupList();
+// pub fn AppCacheGetIEGroupList();
+// pub fn AppCacheGetInfo();
+// pub fn AppCacheGetManifestUrl();
+// pub fn AppCacheLookup();
+// pub fn CommitUrlCacheEntryBinaryBlob();
+// pub fn CreateCacheServerRpcBinding();
+// pub fn CreateUrlCacheContainerA();
+// pub fn CreateUrlCacheContainerW();
+// pub fn CreateUrlCacheEntryExW();
+// pub fn DeleteIE3Cache();
+// pub fn DeleteUrlCacheContainerA();
+// pub fn DeleteUrlCacheContainerW();
+// pub fn DoConnectoidsExist();
+// pub fn ExportCookieFileA();
+// pub fn ExportCookieFileW();
+// pub fn FindFirstUrlCacheContainerA();
+// pub fn FindFirstUrlCacheContainerW();
+// pub fn FindNextUrlCacheContainerA();
+// pub fn FindNextUrlCacheContainerW();
+// pub fn FindP3PPolicySymbol();
+// pub fn ForceNexusLookupExW();
+// pub fn FreeP3PObject();
+// pub fn FreeUrlCacheSpaceA();
+// pub fn FreeUrlCacheSpaceW();
+// pub fn GetCacheServerConnection();
+// pub fn GetDiskInfoA();
+// pub fn GetP3PPolicy();
+// pub fn GetP3PRequestStatus();
+// pub fn GetUrlCacheConfigInfoA();
+// pub fn GetUrlCacheConfigInfoW();
+// pub fn GetUrlCacheEntryBinaryBlob();
+// pub fn GetUrlCacheHeaderData();
+// pub fn HttpCheckDavComplianceA();
+// pub fn HttpCheckDavComplianceW();
+// pub fn HttpCloseDependencyHandle();
+// pub fn HttpDuplicateDependencyHandle();
+// pub fn HttpGetServerCredentials();
+// pub fn HttpGetTunnelSocket();
+// pub fn HttpIsHostHstsEnabled();
+// pub fn HttpOpenDependencyHandle();
+// pub fn HttpPushClose();
+// pub fn HttpPushEnable();
+// pub fn HttpPushWait();
+// pub fn HttpWebSocketClose();
+// pub fn HttpWebSocketCompleteUpgrade();
+// pub fn HttpWebSocketQueryCloseStatus();
+// pub fn HttpWebSocketReceive();
+// pub fn HttpWebSocketSend();
+// pub fn HttpWebSocketShutdown();
+// pub fn ImportCookieFileA();
+// pub fn ImportCookieFileW();
+// pub fn IncrementUrlCacheHeaderData();
+// pub fn InternalInternetGetCookie();
+// pub fn InternetAlgIdToStringA();
+// pub fn InternetAlgIdToStringW();
+// pub fn InternetAutodialCallback();
+// pub fn InternetAutoProxyGetProxyForUrl();
+// pub fn InternetAutoProxyOnSendRequestComplete();
+// pub fn InternetFortezzaCommand();
+// pub fn InternetFreeProxyInfoList();
+// pub fn InternetGetCertByURLA();
+// pub fn InternetGetProxyForUrl();
+// pub fn InternetGetSecurityInfoByURLA();
+// pub fn InternetGetSecurityInfoByURLW();
+// pub fn InternetQueryFortezzaStatus();
+// pub fn InternetSecurityProtocolToStringA();
+// pub fn InternetSecurityProtocolToStringW();
+// pub fn InternetShowSecurityInfoByURLA();
+// pub fn InternetShowSecurityInfoByURLW();
+// pub fn InternetWriteFileExA();
+// pub fn InternetWriteFileExW();
+// pub fn IsDialUpConnection();
+// pub fn IsDomainLegalCookieDomainA();
+// pub fn IsDomainLegalCookieDomainW();
+// pub fn IsHostInProxyBypassList();
+// pub fn IsLanConnection();
+// pub fn IsProfilesEnabled();
+// pub fn IsUrlCacheEntryExpiredA();
+// pub fn IsUrlCacheEntryExpiredW();
+// pub fn LoadUrlCacheContent();
+// pub fn MapResourceToPolicy();
+// pub fn ParseX509EncodedCertificateForListBoxEntry();
+// pub fn PerformOperationOverUrlCacheA();
+// pub fn ReadGuidsForConnectedNetworks();
+// pub fn RegisterForNetworkChangeNotification();
+// pub fn RegisterUrlCacheNotification();
+// pub fn RunOnceUrlCache();
+// pub fn SetGlobalJetParameters();
+// pub fn SetUrlCacheConfigInfoA();
+// pub fn SetUrlCacheConfigInfoW();
+// pub fn SetUrlCacheHeaderData();
+// pub fn ShowCertificate();
+// pub fn ShowClientAuthCerts();
+// pub fn ShowSecurityInfo();
+// pub fn ShowX509EncodedCertificate();
+// pub fn UnRegisterNetworkChangeNotification();
+// pub fn UpdateUrlCacheContentPath();
+// pub fn UrlCacheCheckEntriesExist();
+// pub fn UrlCacheCloseEntryHandle();
+// pub fn UrlCacheContainerSetEntryMaximumAge();
+// pub fn UrlCacheCreateContainer();
+// pub fn UrlCacheFindFirstEntry();
+// pub fn UrlCacheFindNextEntry();
+// pub fn UrlCacheFreeEntryInfo();
+// pub fn UrlCacheFreeGlobalSpace();
+// pub fn UrlCacheGetContentPaths();
+// pub fn UrlCacheGetEntryInfo();
+// pub fn UrlCacheGetGlobalCacheSize();
+// pub fn UrlCacheGetGlobalLimit();
+// pub fn UrlCacheReadEntryStream();
+// pub fn UrlCacheReloadSettings();
+// pub fn UrlCacheRetrieveEntryFile();
+// pub fn UrlCacheRetrieveEntryStream();
+// pub fn UrlCacheServer();
+// pub fn UrlCacheSetGlobalLimit();
+// pub fn UrlCacheUpdateEntryExtraData();
+// pub fn UrlZonesDetach();
diff --git a/vendor/winapi/src/um/winioctl.rs b/vendor/winapi/src/um/winioctl.rs
new file mode 100644
index 000000000..f01b998ed
--- /dev/null
+++ b/vendor/winapi/src/um/winioctl.rs
@@ -0,0 +1,1091 @@
+// 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.
+//! This module defines the 32-Bit Windows Device I/O control codes.
+use shared::basetsd::DWORD64;
+use shared::devpropdef::DEVPROPKEY;
+use shared::guiddef::GUID;
+use shared::minwindef::{BYTE, DWORD, WORD};
+use um::winnt::{
+ ANYSIZE_ARRAY, BOOLEAN, FILE_READ_DATA, FILE_WRITE_DATA, HANDLE, LARGE_INTEGER, WCHAR,
+};
+DEFINE_GUID!{GUID_DEVINTERFACE_DISK,
+ 0x53f56307, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
+DEFINE_GUID!{GUID_DEVINTERFACE_CDROM,
+ 0x53f56308, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
+DEFINE_GUID!{GUID_DEVINTERFACE_PARTITION,
+ 0x53f5630a, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
+DEFINE_GUID!{GUID_DEVINTERFACE_TAPE,
+ 0x53f5630b, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
+DEFINE_GUID!{GUID_DEVINTERFACE_WRITEONCEDISK,
+ 0x53f5630c, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
+DEFINE_GUID!{GUID_DEVINTERFACE_VOLUME,
+ 0x53f5630d, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
+DEFINE_GUID!{GUID_DEVINTERFACE_MEDIUMCHANGER,
+ 0x53f56310, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
+DEFINE_GUID!{GUID_DEVINTERFACE_FLOPPY,
+ 0x53f56311, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
+DEFINE_GUID!{GUID_DEVINTERFACE_CDCHANGER,
+ 0x53f56312, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
+DEFINE_GUID!{GUID_DEVINTERFACE_STORAGEPORT,
+ 0x2accfe60, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
+DEFINE_GUID!{GUID_DEVINTERFACE_VMLUN,
+ 0x6f416619, 0x9f29, 0x42a5, 0xb2, 0x0b, 0x37, 0xe2, 0x19, 0xca, 0x02, 0xb0}
+DEFINE_GUID!{GUID_DEVINTERFACE_SES,
+ 0x1790c9ec, 0x47d5, 0x4df3, 0xb5, 0xaf, 0x9a, 0xdf, 0x3c, 0xf2, 0x3e, 0x48}
+DEFINE_GUID!{WDI_STORAGE_PREDICT_FAILURE_DPS_GUID,
+ 0xe9f2d03a, 0x747c, 0x41c2, 0xbb, 0x9a, 0x02, 0xc6, 0x2b, 0x6d, 0x5f, 0xcb}
+DEFINE_GUID!{GUID_DEVINTERFACE_SERVICE_VOLUME,
+ 0x6ead3d82, 0x25ec, 0x46bc, 0xb7, 0xfd, 0xc1, 0xf0, 0xdf, 0x8f, 0x50, 0x37}
+DEFINE_GUID!{GUID_DEVINTERFACE_HIDDEN_VOLUME,
+ 0x7f108a28, 0x9833, 0x4b3b, 0xb7, 0x80, 0x2c, 0x6b, 0x5f, 0xa5, 0xc0, 0x62}
+DEFINE_GUID!{GUID_DEVINTERFACE_UNIFIED_ACCESS_RPMB,
+ 0x27447c21, 0xbcc3, 0x4d07, 0xa0, 0x5b, 0xa3, 0x39, 0x5b, 0xb4, 0xee, 0xe7}
+DEFINE_GUID!{GUID_DEVINTERFACE_SCM_PHYSICAL_DEVICE,
+ 0x4283609d, 0x4dc2, 0x43be, 0xbb, 0xb4, 0x4f, 0x15, 0xdf, 0xce, 0x2c, 0x61}
+DEFINE_GUID!{GUID_SCM_PD_HEALTH_NOTIFICATION,
+ 0x9da2d386, 0x72f5, 0x4ee3, 0x81, 0x55, 0xec, 0xa0, 0x67, 0x8e, 0x3b, 0x06}
+DEFINE_GUID!{GUID_SCM_PD_PASSTHROUGH_INVDIMM,
+ 0x4309AC30, 0x0D11, 0x11E4, 0x91, 0x91, 0x08, 0x00, 0x20, 0x0C, 0x9A, 0x66}
+DEFINE_GUID!{GUID_DEVINTERFACE_COMPORT,
+ 0x86E0D1E0, 0x8089, 0x11D0, 0x9C, 0xE4, 0x08, 0x00, 0x3E, 0x30, 0x1F, 0x73}
+DEFINE_GUID!{GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR,
+ 0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18}
+//146
+DEFINE_DEVPROPKEY!{DEVPKEY_Storage_Portable,
+ 0x4d1ebee8, 0x803, 0x4774, 0x98, 0x42, 0xb7, 0x7d, 0xb5, 0x2, 0x65, 0xe9, 2}
+DEFINE_DEVPROPKEY!{DEVPKEY_Storage_Removable_Media,
+ 0x4d1ebee8, 0x803, 0x4774, 0x98, 0x42, 0xb7, 0x7d, 0xb5, 0x2, 0x65, 0xe9, 3}
+DEFINE_DEVPROPKEY!{DEVPKEY_Storage_System_Critical,
+ 0x4d1ebee8, 0x803, 0x4774, 0x98, 0x42, 0xb7, 0x7d, 0xb5, 0x2, 0x65, 0xe9, 4}
+//177
+pub type DEVICE_TYPE = DWORD;
+pub const FILE_DEVICE_BEEP: DEVICE_TYPE = 0x00000001;
+pub const FILE_DEVICE_CD_ROM: DEVICE_TYPE = 0x00000002;
+pub const FILE_DEVICE_CD_ROM_FILE_SYSTEM: DEVICE_TYPE = 0x00000003;
+pub const FILE_DEVICE_CONTROLLER: DEVICE_TYPE = 0x00000004;
+pub const FILE_DEVICE_DATALINK: DEVICE_TYPE = 0x00000005;
+pub const FILE_DEVICE_DFS: DEVICE_TYPE = 0x00000006;
+pub const FILE_DEVICE_DISK: DEVICE_TYPE = 0x00000007;
+pub const FILE_DEVICE_DISK_FILE_SYSTEM: DEVICE_TYPE = 0x00000008;
+pub const FILE_DEVICE_FILE_SYSTEM: DEVICE_TYPE = 0x00000009;
+pub const FILE_DEVICE_INPORT_PORT: DEVICE_TYPE = 0x0000000a;
+pub const FILE_DEVICE_KEYBOARD: DEVICE_TYPE = 0x0000000b;
+pub const FILE_DEVICE_MAILSLOT: DEVICE_TYPE = 0x0000000c;
+pub const FILE_DEVICE_MIDI_IN: DEVICE_TYPE = 0x0000000d;
+pub const FILE_DEVICE_MIDI_OUT: DEVICE_TYPE = 0x0000000e;
+pub const FILE_DEVICE_MOUSE: DEVICE_TYPE = 0x0000000f;
+pub const FILE_DEVICE_MULTI_UNC_PROVIDER: DEVICE_TYPE = 0x00000010;
+pub const FILE_DEVICE_NAMED_PIPE: DEVICE_TYPE = 0x00000011;
+pub const FILE_DEVICE_NETWORK: DEVICE_TYPE = 0x00000012;
+pub const FILE_DEVICE_NETWORK_BROWSER: DEVICE_TYPE = 0x00000013;
+pub const FILE_DEVICE_NETWORK_FILE_SYSTEM: DEVICE_TYPE = 0x00000014;
+pub const FILE_DEVICE_NULL: DEVICE_TYPE = 0x00000015;
+pub const FILE_DEVICE_PARALLEL_PORT: DEVICE_TYPE = 0x00000016;
+pub const FILE_DEVICE_PHYSICAL_NETCARD: DEVICE_TYPE = 0x00000017;
+pub const FILE_DEVICE_PRINTER: DEVICE_TYPE = 0x00000018;
+pub const FILE_DEVICE_SCANNER: DEVICE_TYPE = 0x00000019;
+pub const FILE_DEVICE_SERIAL_MOUSE_PORT: DEVICE_TYPE = 0x0000001a;
+pub const FILE_DEVICE_SERIAL_PORT: DEVICE_TYPE = 0x0000001b;
+pub const FILE_DEVICE_SCREEN: DEVICE_TYPE = 0x0000001c;
+pub const FILE_DEVICE_SOUND: DEVICE_TYPE = 0x0000001d;
+pub const FILE_DEVICE_STREAMS: DEVICE_TYPE = 0x0000001e;
+pub const FILE_DEVICE_TAPE: DEVICE_TYPE = 0x0000001f;
+pub const FILE_DEVICE_TAPE_FILE_SYSTEM: DEVICE_TYPE = 0x00000020;
+pub const FILE_DEVICE_TRANSPORT: DEVICE_TYPE = 0x00000021;
+pub const FILE_DEVICE_UNKNOWN: DEVICE_TYPE = 0x00000022;
+pub const FILE_DEVICE_VIDEO: DEVICE_TYPE = 0x00000023;
+pub const FILE_DEVICE_VIRTUAL_DISK: DEVICE_TYPE = 0x00000024;
+pub const FILE_DEVICE_WAVE_IN: DEVICE_TYPE = 0x00000025;
+pub const FILE_DEVICE_WAVE_OUT: DEVICE_TYPE = 0x00000026;
+pub const FILE_DEVICE_8042_PORT: DEVICE_TYPE = 0x00000027;
+pub const FILE_DEVICE_NETWORK_REDIRECTOR: DEVICE_TYPE = 0x00000028;
+pub const FILE_DEVICE_BATTERY: DEVICE_TYPE = 0x00000029;
+pub const FILE_DEVICE_BUS_EXTENDER: DEVICE_TYPE = 0x0000002a;
+pub const FILE_DEVICE_MODEM: DEVICE_TYPE = 0x0000002b;
+pub const FILE_DEVICE_VDM: DEVICE_TYPE = 0x0000002c;
+pub const FILE_DEVICE_MASS_STORAGE: DEVICE_TYPE = 0x0000002d;
+pub const FILE_DEVICE_SMB: DEVICE_TYPE = 0x0000002e;
+pub const FILE_DEVICE_KS: DEVICE_TYPE = 0x0000002f;
+pub const FILE_DEVICE_CHANGER: DEVICE_TYPE = 0x00000030;
+pub const FILE_DEVICE_SMARTCARD: DEVICE_TYPE = 0x00000031;
+pub const FILE_DEVICE_ACPI: DEVICE_TYPE = 0x00000032;
+pub const FILE_DEVICE_DVD: DEVICE_TYPE = 0x00000033;
+pub const FILE_DEVICE_FULLSCREEN_VIDEO: DEVICE_TYPE = 0x00000034;
+pub const FILE_DEVICE_DFS_FILE_SYSTEM: DEVICE_TYPE = 0x00000035;
+pub const FILE_DEVICE_DFS_VOLUME: DEVICE_TYPE = 0x00000036;
+pub const FILE_DEVICE_SERENUM: DEVICE_TYPE = 0x00000037;
+pub const FILE_DEVICE_TERMSRV: DEVICE_TYPE = 0x00000038;
+pub const FILE_DEVICE_KSEC: DEVICE_TYPE = 0x00000039;
+pub const FILE_DEVICE_FIPS: DEVICE_TYPE = 0x0000003A;
+pub const FILE_DEVICE_INFINIBAND: DEVICE_TYPE = 0x0000003B;
+pub const FILE_DEVICE_VMBUS: DEVICE_TYPE = 0x0000003E;
+pub const FILE_DEVICE_CRYPT_PROVIDER: DEVICE_TYPE = 0x0000003F;
+pub const FILE_DEVICE_WPD: DEVICE_TYPE = 0x00000040;
+pub const FILE_DEVICE_BLUETOOTH: DEVICE_TYPE = 0x00000041;
+pub const FILE_DEVICE_MT_COMPOSITE: DEVICE_TYPE = 0x00000042;
+pub const FILE_DEVICE_MT_TRANSPORT: DEVICE_TYPE = 0x00000043;
+pub const FILE_DEVICE_BIOMETRIC: DEVICE_TYPE = 0x00000044;
+pub const FILE_DEVICE_PMI: DEVICE_TYPE = 0x00000045;
+pub const FILE_DEVICE_EHSTOR: DEVICE_TYPE = 0x00000046;
+pub const FILE_DEVICE_DEVAPI: DEVICE_TYPE = 0x00000047;
+pub const FILE_DEVICE_GPIO: DEVICE_TYPE = 0x00000048;
+pub const FILE_DEVICE_USBEX: DEVICE_TYPE = 0x00000049;
+pub const FILE_DEVICE_CONSOLE: DEVICE_TYPE = 0x00000050;
+pub const FILE_DEVICE_NFP: DEVICE_TYPE = 0x00000051;
+pub const FILE_DEVICE_SYSENV: DEVICE_TYPE = 0x00000052;
+pub const FILE_DEVICE_VIRTUAL_BLOCK: DEVICE_TYPE = 0x00000053;
+pub const FILE_DEVICE_POINT_OF_SERVICE: DEVICE_TYPE = 0x00000054;
+pub const FILE_DEVICE_STORAGE_REPLICATION: DEVICE_TYPE = 0x00000055;
+pub const FILE_DEVICE_TRUST_ENV: DEVICE_TYPE = 0x00000056;
+pub const FILE_DEVICE_UCM: DEVICE_TYPE = 0x00000057;
+pub const FILE_DEVICE_UCMTCPCI: DEVICE_TYPE = 0x00000058;
+#[inline]
+pub fn CTL_CODE(
+ DeviceType: DWORD,
+ Function: DWORD,
+ Method: DWORD,
+ Access: DWORD,
+) -> DWORD {
+ (DeviceType << 16) | (Access << 14) | (Function << 2) | Method
+}
+//288
+pub const METHOD_BUFFERED: DWORD = 0;
+pub const METHOD_IN_DIRECT: DWORD = 1;
+pub const METHOD_OUT_DIRECT: DWORD = 2;
+pub const METHOD_NEITHER: DWORD = 3;
+//317
+pub const FILE_ANY_ACCESS: DWORD = 0;
+pub const FILE_SPECIAL_ACCESS: DWORD = FILE_ANY_ACCESS;
+pub const FILE_READ_ACCESS: DWORD = 0x0001;
+pub const FILE_WRITE_ACCESS: DWORD = 0x0002;
+//347
+pub const IOCTL_STORAGE_BASE: DWORD = FILE_DEVICE_MASS_STORAGE;
+pub const IOCTL_STORAGE_CHECK_VERIFY: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0200,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_STORAGE_CHECK_VERIFY2: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0200,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_STORAGE_MEDIA_REMOVAL: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0201,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_STORAGE_EJECT_MEDIA: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0202,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_STORAGE_LOAD_MEDIA: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0203,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_STORAGE_LOAD_MEDIA2: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0203,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_STORAGE_RESERVE: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED,
+ FILE_READ_ACCESS);
+pub const IOCTL_STORAGE_RELEASE: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED,
+ FILE_READ_ACCESS);
+pub const IOCTL_STORAGE_FIND_NEW_DEVICES: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0206,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_STORAGE_EJECTION_CONTROL: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0250,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_STORAGE_MCN_CONTROL: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0251,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_STORAGE_GET_MEDIA_TYPES: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0300,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_STORAGE_GET_MEDIA_TYPES_EX: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0301,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0304,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_STORAGE_GET_HOTPLUG_INFO: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0305,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_STORAGE_SET_HOTPLUG_INFO: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0306,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_STORAGE_RESET_BUS: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED,
+ FILE_READ_ACCESS);
+pub const IOCTL_STORAGE_RESET_DEVICE: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0401,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_STORAGE_BREAK_RESERVATION: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0405,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_STORAGE_PERSISTENT_RESERVE_IN: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0406,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_STORAGE_PERSISTENT_RESERVE_OUT: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0407,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_STORAGE_GET_DEVICE_NUMBER: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0420,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_STORAGE_PREDICT_FAILURE: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0440,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_STORAGE_FAILURE_PREDICTION_CONFIG: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0441,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_STORAGE_READ_CAPACITY: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0450,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_STORAGE_GET_DEVICE_TELEMETRY: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0470,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_STORAGE_DEVICE_TELEMETRY_NOTIFY: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0471,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_STORAGE_DEVICE_TELEMETRY_QUERY_CAPS: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE,
+ 0x0472, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_STORAGE_GET_DEVICE_TELEMETRY_RAW: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0473,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_STORAGE_QUERY_PROPERTY: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0500,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0501,
+ METHOD_BUFFERED, FILE_WRITE_ACCESS);
+pub const IOCTL_STORAGE_GET_LB_PROVISIONING_MAP_RESOURCES: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE,
+ 0x0502, METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_STORAGE_GET_BC_PROPERTIES: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0600,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_STORAGE_ALLOCATE_BC_STREAM: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0601,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_STORAGE_FREE_BC_STREAM: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0602,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_STORAGE_CHECK_PRIORITY_HINT_SUPPORT: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE,
+ 0x0620, METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_STORAGE_START_DATA_INTEGRITY_CHECK: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0621,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_STORAGE_STOP_DATA_INTEGRITY_CHECK: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0622,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const OBSOLETE_IOCTL_STORAGE_RESET_BUS: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0400,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const OBSOLETE_IOCTL_STORAGE_RESET_DEVICE: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0401,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_STORAGE_ENABLE_IDLE_POWER: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0720,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_STORAGE_GET_IDLE_POWERUP_REASON: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0721,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_STORAGE_POWER_ACTIVE: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0722,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_STORAGE_POWER_IDLE: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0723,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_STORAGE_EVENT_NOTIFICATION: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0724,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+//565
+STRUCT!{struct STORAGE_DEVICE_NUMBER {
+ DeviceType: DEVICE_TYPE,
+ DeviceNumber: DWORD,
+ PartitionNumber: DWORD,
+}}
+pub type PSTORAGE_DEVICE_NUMBER = *mut STORAGE_DEVICE_NUMBER;
+STRUCT!{struct STORAGE_DEVICE_NUMBERS {
+ NumberOfDevices: DWORD,
+ Devices: [STORAGE_DEVICE_NUMBER; ANYSIZE_ARRAY],
+}}
+pub type PSTORAGE_DEVICE_NUMBERS = *mut STORAGE_DEVICE_NUMBERS;
+//1040
+ENUM!{enum STORAGE_QUERY_TYPE {
+ PropertyStandardQuery = 0,
+ PropertyExistsQuery,
+ PropertyMaskQuery,
+ PropertyQueryMaxDefined,
+}}
+pub type PSTORAGE_QUERY_TYPE = *mut STORAGE_QUERY_TYPE;
+ENUM!{enum STORAGE_PROPERTY_ID {
+ StorageDeviceProperty = 0,
+ StorageAdapterProperty,
+ StorageDeviceIdProperty,
+ StorageDeviceUniqueIdProperty,
+ StorageDeviceWriteCacheProperty,
+ StorageMiniportProperty,
+ StorageAccessAlignmentProperty,
+ StorageDeviceSeekPenaltyProperty,
+ StorageDeviceTrimProperty,
+ StorageDeviceWriteAggregationProperty,
+ StorageDeviceDeviceTelemetryProperty,
+ StorageDeviceLBProvisioningProperty,
+ StorageDevicePowerProperty,
+ StorageDeviceCopyOffloadProperty,
+ StorageDeviceResiliencyProperty,
+ StorageDeviceMediumProductType,
+ StorageAdapterCryptoProperty,
+ StorageDeviceIoCapabilityProperty = 48,
+ StorageAdapterProtocolSpecificProperty,
+ StorageDeviceProtocolSpecificProperty,
+ StorageAdapterTemperatureProperty,
+ StorageDeviceTemperatureProperty,
+ StorageAdapterPhysicalTopologyProperty,
+ StorageDevicePhysicalTopologyProperty,
+ StorageDeviceAttributesProperty,
+ StorageDeviceManagementStatus,
+ StorageAdapterSerialNumberProperty,
+ StorageDeviceLocationProperty,
+ StorageDeviceNumaProperty,
+ StorageDeviceZonedDeviceProperty,
+ StorageDeviceUnsafeShutdownCount,
+}}
+pub type PSTORAGE_PROPERTY_ID = *mut STORAGE_PROPERTY_ID;
+STRUCT!{struct STORAGE_PROPERTY_QUERY {
+ PropertyId: STORAGE_PROPERTY_ID,
+ QueryType: STORAGE_QUERY_TYPE,
+ AdditionalParameters: [BYTE; 1],
+}}
+pub type PSTORAGE_PROPERTY_QUERY = *mut STORAGE_PROPERTY_QUERY;
+//1574
+STRUCT!{struct DEVICE_TRIM_DESCRIPTOR {
+ Version: DWORD,
+ Size: DWORD,
+ TrimEnabled: BOOLEAN,
+}}
+pub type PDEVICE_TRIM_DESCRIPTOR = *mut DEVICE_TRIM_DESCRIPTOR;
+//7540
+pub const IOCTL_DISK_BASE: DWORD = FILE_DEVICE_DISK;
+pub const IOCTL_DISK_GET_DRIVE_GEOMETRY: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0000,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_DISK_GET_PARTITION_INFO: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0001,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_DISK_SET_PARTITION_INFO: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0002,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_DISK_GET_DRIVE_LAYOUT: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0003,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_DISK_SET_DRIVE_LAYOUT: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0004,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_DISK_VERIFY: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const IOCTL_DISK_FORMAT_TRACKS: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED,
+ FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_DISK_REASSIGN_BLOCKS: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED,
+ FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_DISK_PERFORMANCE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const IOCTL_DISK_IS_WRITABLE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const IOCTL_DISK_LOGGING: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x000a, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const IOCTL_DISK_FORMAT_TRACKS_EX: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x000b,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_DISK_HISTOGRAM_STRUCTURE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x000c,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_DISK_HISTOGRAM_DATA: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x000d, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const IOCTL_DISK_HISTOGRAM_RESET: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x000e, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const IOCTL_DISK_REQUEST_STRUCTURE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x000f,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_DISK_REQUEST_DATA: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0010, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const IOCTL_DISK_PERFORMANCE_OFF: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0018, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const IOCTL_DISK_CONTROLLER_NUMBER: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0011,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const SMART_GET_VERSION: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED,
+ FILE_READ_ACCESS);
+pub const SMART_SEND_DRIVE_COMMAND: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED,
+ FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const SMART_RCV_DRIVE_DATA: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED,
+ FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_DISK_GET_PARTITION_INFO_EX: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0012,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_DISK_SET_PARTITION_INFO_EX: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0013,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_DISK_GET_DRIVE_LAYOUT_EX: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0014,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_DISK_SET_DRIVE_LAYOUT_EX: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0015,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_DISK_CREATE_DISK: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0016, METHOD_BUFFERED,
+ FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_DISK_GET_LENGTH_INFO: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0017, METHOD_BUFFERED,
+ FILE_READ_ACCESS);
+pub const IOCTL_DISK_GET_DRIVE_GEOMETRY_EX: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0028,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_DISK_REASSIGN_BLOCKS_EX: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0029,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_DISK_UPDATE_DRIVE_SIZE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0032,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_DISK_GROW_PARTITION: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0034, METHOD_BUFFERED,
+ FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_DISK_GET_CACHE_INFORMATION: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0035,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_DISK_SET_CACHE_INFORMATION: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0036,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_DISK_GET_WRITE_CACHE_STATE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0037,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const OBSOLETE_DISK_GET_WRITE_CACHE_STATE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0037,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_DISK_DELETE_DRIVE_LAYOUT: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0040,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_DISK_UPDATE_PROPERTIES: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0050,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_DISK_FORMAT_DRIVE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x00f3, METHOD_BUFFERED,
+ FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_DISK_SENSE_DEVICE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x00f8, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const IOCTL_DISK_CHECK_VERIFY: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED,
+ FILE_READ_ACCESS);
+pub const IOCTL_DISK_MEDIA_REMOVAL: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED,
+ FILE_READ_ACCESS);
+pub const IOCTL_DISK_EJECT_MEDIA: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED,
+ FILE_READ_ACCESS);
+pub const IOCTL_DISK_LOAD_MEDIA: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED,
+ FILE_READ_ACCESS);
+pub const IOCTL_DISK_RESERVE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED,
+ FILE_READ_ACCESS);
+pub const IOCTL_DISK_RELEASE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED,
+ FILE_READ_ACCESS);
+pub const IOCTL_DISK_FIND_NEW_DEVICES: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0206,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_DISK_GET_MEDIA_TYPES: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const IOCTL_DISK_GET_DISK_ATTRIBUTES: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x003c,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_DISK_SET_DISK_ATTRIBUTES: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x003d,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_DISK_RESET_SNAPSHOT_INFO: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0084,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+//7810
+ENUM!{enum MEDIA_TYPE {
+ Unknown,
+ F5_1Pt2_512,
+ F3_1Pt44_512,
+ F3_2Pt88_512,
+ F3_20Pt8_512,
+ F3_720_512,
+ F5_360_512,
+ F5_320_512,
+ F5_320_1024,
+ F5_180_512,
+ F5_160_512,
+ RemovableMedia,
+ FixedMedia,
+ F3_120M_512,
+ F3_640_512,
+ F5_640_512,
+ F5_720_512,
+ F3_1Pt2_512,
+ F3_1Pt23_1024,
+ F5_1Pt23_1024,
+ F3_128Mb_512,
+ F3_230Mb_512,
+ F8_256_128,
+ F3_200Mb_512,
+ F3_240M_512,
+ F3_32M_512,
+}}
+pub type PMEDIA_TYPE = *mut MEDIA_TYPE;
+//7884
+STRUCT!{struct DISK_GEOMETRY {
+ Cylinders: LARGE_INTEGER,
+ MediaType: MEDIA_TYPE,
+ TracksPerCylinder: DWORD,
+ SectorsPerTrack: DWORD,
+ BytesPerSector: DWORD,
+}}
+pub type PDISK_GEOMETRY = *mut DISK_GEOMETRY;
+DEFINE_GUID!{WMI_DISK_GEOMETRY_GUID,
+ 0x25007f51, 0x57c2, 0x11d1, 0xa5, 0x28, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0x10}
+STRUCT!{struct PARTITION_INFORMATION {
+ StartingOffset: LARGE_INTEGER,
+ PartitionLength: LARGE_INTEGER,
+ HiddenSectors: DWORD,
+ PartitionNumber: DWORD,
+ PartitionType: BYTE,
+ BootIndicator: BOOLEAN,
+ RecognizedPartition: BOOLEAN,
+ RewritePartition: BOOLEAN,
+}}
+pub type PPARTITION_INFORMATION = *mut PARTITION_INFORMATION;
+STRUCT!{struct SET_PARTITION_INFORMATION {
+ PartitionType: BYTE,
+}}
+pub type PSET_PARTITION_INFORMATION = *mut SET_PARTITION_INFORMATION;
+STRUCT!{struct DRIVE_LAYOUT_INFORMATION {
+ PartitionCount: DWORD,
+ Signature: DWORD,
+ PartitionEntry: [PARTITION_INFORMATION; 1],
+}}
+pub type PDRIVE_LAYOUT_INFORMATION = *mut DRIVE_LAYOUT_INFORMATION;
+STRUCT!{struct VERIFY_INFORMATION {
+ StartingOffset: LARGE_INTEGER,
+ Length: DWORD,
+}}
+pub type PVERIFY_INFORMATION = *mut VERIFY_INFORMATION;
+STRUCT!{struct REASSIGN_BLOCKS {
+ Reserved: WORD,
+ Count: WORD,
+ BlockNumber: [DWORD; 1],
+}}
+pub type PREASSIGN_BLOCKS = *mut REASSIGN_BLOCKS;
+STRUCT!{#[repr(packed)] struct REASSIGN_BLOCKS_EX {
+ Reserved: WORD,
+ Count: WORD,
+ BlockNumber: [LARGE_INTEGER; 1],
+}}
+pub type PREASSIGN_BLOCKS_EX = *mut REASSIGN_BLOCKS_EX;
+ENUM!{enum PARTITION_STYLE {
+ PARTITION_STYLE_MBR,
+ PARTITION_STYLE_GPT,
+ PARTITION_STYLE_RAW,
+}}
+STRUCT!{struct PARTITION_INFORMATION_GPT {
+ PartitionType: GUID,
+ PartitionId: GUID,
+ Attributes: DWORD64,
+ Name: [WCHAR; 36],
+}}
+pub type PPARTITION_INFORMATION_GPT = *mut PARTITION_INFORMATION_GPT;
+//8059
+STRUCT!{struct PARTITION_INFORMATION_MBR {
+ PartitionType: BYTE,
+ BootIndicator: BOOLEAN,
+ RecognizedPartition: BOOLEAN,
+ HiddenSectors: DWORD,
+ PartitionId: GUID,
+}}
+pub type PPARTITION_INFORMATION_MBR = *mut PARTITION_INFORMATION_MBR;
+pub type SET_PARTITION_INFORMATION_MBR = SET_PARTITION_INFORMATION;
+pub type SET_PARTITION_INFORMATION_GPT = PARTITION_INFORMATION_GPT;
+STRUCT!{struct SET_PARTITION_INFORMATION_EX {
+ PartitionStyle: PARTITION_STYLE,
+ u: SET_PARTITION_INFORMATION_EX_u,
+}}
+UNION!{union SET_PARTITION_INFORMATION_EX_u {
+ [u64; 14],
+ Mbr Mbr_mut: SET_PARTITION_INFORMATION_MBR,
+ Gpt Gpt_mut: SET_PARTITION_INFORMATION_GPT,
+}}
+STRUCT!{struct CREATE_DISK_GPT {
+ DiskId: GUID,
+ MaxPartitionCount: DWORD,
+}}
+pub type PCREATE_DISK_GPT = *mut CREATE_DISK_GPT;
+STRUCT!{struct CREATE_DISK_MBR {
+ Signature: DWORD,
+}}
+pub type PCREATE_DISK_MBR = *mut CREATE_DISK_MBR;
+STRUCT!{struct CREATE_DISK {
+ PartitionStyle: PARTITION_STYLE,
+ u: CREATE_DISK_u,
+}}
+pub type PCREATE_DISK = *mut CREATE_DISK;
+UNION!{union CREATE_DISK_u {
+ [u32; 5],
+ Mbr Mbr_mut: CREATE_DISK_MBR,
+ Gpt Gpt_mut: CREATE_DISK_GPT,
+}}
+STRUCT!{struct GET_LENGTH_INFORMATION {
+ Length: LARGE_INTEGER,
+}}
+pub type PGET_LENGTH_INFORMATION = *mut GET_LENGTH_INFORMATION;
+STRUCT!{struct PARTITION_INFORMATION_EX {
+ PartitionStyle: PARTITION_STYLE,
+ StartingOffset: LARGE_INTEGER,
+ PartitionLength: LARGE_INTEGER,
+ PartitionNumber: DWORD,
+ RewritePartition: BOOLEAN,
+ u: PARTITION_INFORMATION_EX_u,
+}}
+pub type PPARTITION_INFORMATION_EX = *mut PARTITION_INFORMATION_EX;
+UNION!{union PARTITION_INFORMATION_EX_u {
+ [u64; 14],
+ Mbr Mbr_mut: PARTITION_INFORMATION_MBR,
+ Gpt Gpt_mut: PARTITION_INFORMATION_GPT,
+}}
+STRUCT!{struct DRIVE_LAYOUT_INFORMATION_GPT {
+ DiskId: GUID,
+ StartingUsableOffset: LARGE_INTEGER,
+ UsableLength: LARGE_INTEGER,
+ MaxPartitionCount: DWORD,
+}}
+pub type PDRIVE_LAYOUT_INFORMATION_GPT = *mut DRIVE_LAYOUT_INFORMATION_GPT;
+STRUCT!{struct DRIVE_LAYOUT_INFORMATION_MBR {
+ Signature: DWORD,
+ CheckSum: DWORD,
+}}
+pub type PDRIVE_LAYOUT_INFORMATION_MBR = *mut DRIVE_LAYOUT_INFORMATION_MBR;
+STRUCT!{struct DRIVE_LAYOUT_INFORMATION_EX {
+ PartitionStyle: DWORD,
+ PartitionCount: DWORD,
+ u: DRIVE_LAYOUT_INFORMATION_EX_u,
+ PartitionEntry: [PARTITION_INFORMATION_EX; 1],
+}}
+pub type PDRIVE_LAYOUT_INFORMATION_EX = *mut DRIVE_LAYOUT_INFORMATION_EX;
+UNION! {union DRIVE_LAYOUT_INFORMATION_EX_u {
+ [u64; 5],
+ Mbr Mbr_mut: DRIVE_LAYOUT_INFORMATION_MBR,
+ Gpt Gpt_mut: DRIVE_LAYOUT_INFORMATION_GPT,
+}}
+//8350
+STRUCT!{struct DISK_GEOMETRY_EX {
+ Geometry: DISK_GEOMETRY,
+ DiskSize: LARGE_INTEGER,
+ Data: [BYTE; 1],
+}}
+//8933
+pub const IOCTL_CHANGER_BASE: DWORD = FILE_DEVICE_CHANGER;
+pub const IOCTL_CHANGER_GET_PARAMETERS: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0000,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_CHANGER_GET_STATUS: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0001,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_CHANGER_GET_PRODUCT_DATA: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0002,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_CHANGER_SET_ACCESS: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0004,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_CHANGER_GET_ELEMENT_STATUS: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0005,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_CHANGER_INITIALIZE_ELEMENT_STATUS: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0006,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_CHANGER_SET_POSITION: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0007,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_CHANGER_EXCHANGE_MEDIUM: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0008,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_CHANGER_MOVE_MEDIUM: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0009,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_CHANGER_REINITIALIZE_TRANSPORT: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x000A,
+ METHOD_BUFFERED, FILE_READ_ACCESS);
+pub const IOCTL_CHANGER_QUERY_VOLUME_TAGS: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x000B,
+ METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_SERIAL_LSRMST_INSERT: DWORD = CTL_CODE!(FILE_DEVICE_SERIAL_PORT, 31,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_SERENUM_EXPOSE_HARDWARE: DWORD = CTL_CODE!(FILE_DEVICE_SERENUM, 128,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_SERENUM_REMOVE_HARDWARE: DWORD = CTL_CODE!(FILE_DEVICE_SERENUM, 129,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_SERENUM_PORT_DESC: DWORD = CTL_CODE!(FILE_DEVICE_SERENUM, 130,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_SERENUM_GET_PORT_NAME: DWORD = CTL_CODE!(FILE_DEVICE_SERENUM, 131,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+//9717
+pub const FSCTL_REQUEST_OPLOCK_LEVEL_1: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 0,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_REQUEST_OPLOCK_LEVEL_2: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 1,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_REQUEST_BATCH_OPLOCK: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 2,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_OPLOCK_BREAK_ACKNOWLEDGE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 3,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_OPBATCH_ACK_CLOSE_PENDING: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 4,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_OPLOCK_BREAK_NOTIFY: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 5,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_LOCK_VOLUME: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_UNLOCK_VOLUME: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_DISMOUNT_VOLUME: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_IS_VOLUME_MOUNTED: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 10,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_IS_PATHNAME_VALID: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 11,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_MARK_VOLUME_DIRTY: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 12,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_QUERY_RETRIEVAL_POINTERS: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 14,
+ METHOD_NEITHER, FILE_ANY_ACCESS);
+pub const FSCTL_GET_COMPRESSION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_SET_COMPRESSION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED,
+ FILE_READ_DATA | FILE_WRITE_DATA);
+pub const FSCTL_SET_BOOTLOADER_ACCESSED: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 19,
+ METHOD_NEITHER, FILE_ANY_ACCESS);
+pub const FSCTL_MARK_AS_SYSTEM_HIVE: DWORD = FSCTL_SET_BOOTLOADER_ACCESSED;
+pub const FSCTL_OPLOCK_BREAK_ACK_NO_2: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 20,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_INVALIDATE_VOLUMES: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 21,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_QUERY_FAT_BPB: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_REQUEST_FILTER_OPLOCK: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 23,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_FILESYSTEM_GET_STATISTICS: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 24,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_GET_NTFS_VOLUME_DATA: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 25,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_GET_NTFS_FILE_RECORD: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 26,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_GET_VOLUME_BITMAP: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER,
+ FILE_ANY_ACCESS);
+pub const FSCTL_GET_RETRIEVAL_POINTERS: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 28,
+ METHOD_NEITHER, FILE_ANY_ACCESS);
+pub const FSCTL_MOVE_FILE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED,
+ FILE_SPECIAL_ACCESS);
+pub const FSCTL_IS_VOLUME_DIRTY: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_ALLOW_EXTENDED_DASD_IO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 32,
+ METHOD_NEITHER, FILE_ANY_ACCESS);
+pub const FSCTL_FIND_FILES_BY_SID: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER,
+ FILE_ANY_ACCESS);
+pub const FSCTL_SET_OBJECT_ID: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED,
+ FILE_SPECIAL_ACCESS);
+pub const FSCTL_GET_OBJECT_ID: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_DELETE_OBJECT_ID: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED,
+ FILE_SPECIAL_ACCESS);
+pub const FSCTL_SET_REPARSE_POINT: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 41,
+ METHOD_BUFFERED, FILE_SPECIAL_ACCESS);
+pub const FSCTL_GET_REPARSE_POINT: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 42,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_DELETE_REPARSE_POINT: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 43,
+ METHOD_BUFFERED, FILE_SPECIAL_ACCESS);
+pub const FSCTL_ENUM_USN_DATA: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 44,
+ METHOD_NEITHER, FILE_ANY_ACCESS);
+pub const FSCTL_SECURITY_ID_CHECK: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER,
+ FILE_READ_DATA);
+pub const FSCTL_READ_USN_JOURNAL: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER,
+ FILE_ANY_ACCESS);
+pub const FSCTL_SET_OBJECT_ID_EXTENDED: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 47,
+ METHOD_BUFFERED, FILE_SPECIAL_ACCESS);
+pub const FSCTL_CREATE_OR_GET_OBJECT_ID: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 48,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_SET_SPARSE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED,
+ FILE_SPECIAL_ACCESS);
+pub const FSCTL_SET_ZERO_DATA: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED,
+ FILE_WRITE_DATA);
+pub const FSCTL_QUERY_ALLOCATED_RANGES: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 51,
+ METHOD_NEITHER, FILE_READ_DATA);
+pub const FSCTL_ENABLE_UPGRADE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED,
+ FILE_WRITE_DATA);
+pub const FSCTL_SET_ENCRYPTION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_NEITHER,
+ FILE_ANY_ACCESS);
+pub const FSCTL_ENCRYPTION_FSCTL_IO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 54,
+ METHOD_NEITHER, FILE_ANY_ACCESS);
+pub const FSCTL_WRITE_RAW_ENCRYPTED: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 55,
+ METHOD_NEITHER, FILE_SPECIAL_ACCESS);
+pub const FSCTL_READ_RAW_ENCRYPTED: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 56,
+ METHOD_NEITHER, FILE_SPECIAL_ACCESS);
+pub const FSCTL_CREATE_USN_JOURNAL: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 57,
+ METHOD_NEITHER, FILE_ANY_ACCESS);
+pub const FSCTL_READ_FILE_USN_DATA: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 58,
+ METHOD_NEITHER, FILE_ANY_ACCESS);
+pub const FSCTL_WRITE_USN_CLOSE_RECORD: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 59,
+ METHOD_NEITHER, FILE_ANY_ACCESS);
+pub const FSCTL_EXTEND_VOLUME: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_QUERY_USN_JOURNAL: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 61,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_DELETE_USN_JOURNAL: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 62,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_MARK_HANDLE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_SIS_COPYFILE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_SIS_LINK_FILES: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED,
+ FILE_READ_DATA | FILE_WRITE_DATA);
+pub const FSCTL_RECALL_FILE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER,
+ FILE_ANY_ACCESS);
+pub const FSCTL_READ_FROM_PLEX: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT,
+ FILE_READ_DATA);
+pub const FSCTL_FILE_PREFETCH: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED,
+ FILE_SPECIAL_ACCESS);
+pub const FSCTL_MAKE_MEDIA_COMPATIBLE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 76,
+ METHOD_BUFFERED, FILE_WRITE_DATA);
+pub const FSCTL_SET_DEFECT_MANAGEMENT: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 77,
+ METHOD_BUFFERED, FILE_WRITE_DATA);
+pub const FSCTL_QUERY_SPARING_INFO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 78,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_QUERY_ON_DISK_VOLUME_INFO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 79,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_SET_VOLUME_COMPRESSION_STATE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 80,
+ METHOD_BUFFERED, FILE_SPECIAL_ACCESS);
+pub const FSCTL_TXFS_MODIFY_RM: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED,
+ FILE_WRITE_DATA);
+pub const FSCTL_TXFS_QUERY_RM_INFORMATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 82,
+ METHOD_BUFFERED, FILE_READ_DATA);
+pub const FSCTL_TXFS_ROLLFORWARD_REDO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 84,
+ METHOD_BUFFERED, FILE_WRITE_DATA);
+pub const FSCTL_TXFS_ROLLFORWARD_UNDO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 85,
+ METHOD_BUFFERED, FILE_WRITE_DATA);
+pub const FSCTL_TXFS_START_RM: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED,
+ FILE_WRITE_DATA);
+pub const FSCTL_TXFS_SHUTDOWN_RM: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED,
+ FILE_WRITE_DATA);
+pub const FSCTL_TXFS_READ_BACKUP_INFORMATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 88,
+ METHOD_BUFFERED, FILE_READ_DATA);
+pub const FSCTL_TXFS_WRITE_BACKUP_INFORMATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 89,
+ METHOD_BUFFERED, FILE_WRITE_DATA);
+pub const FSCTL_TXFS_CREATE_SECONDARY_RM: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 90,
+ METHOD_BUFFERED, FILE_WRITE_DATA);
+pub const FSCTL_TXFS_GET_METADATA_INFO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 91,
+ METHOD_BUFFERED, FILE_READ_DATA);
+pub const FSCTL_TXFS_GET_TRANSACTED_VERSION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 92,
+ METHOD_BUFFERED, FILE_READ_DATA);
+pub const FSCTL_TXFS_SAVEPOINT_INFORMATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 94,
+ METHOD_BUFFERED, FILE_WRITE_DATA);
+pub const FSCTL_TXFS_CREATE_MINIVERSION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 95,
+ METHOD_BUFFERED, FILE_WRITE_DATA);
+pub const FSCTL_TXFS_TRANSACTION_ACTIVE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 99,
+ METHOD_BUFFERED, FILE_READ_DATA);
+pub const FSCTL_SET_ZERO_ON_DEALLOCATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 101,
+ METHOD_BUFFERED, FILE_SPECIAL_ACCESS);
+pub const FSCTL_SET_REPAIR: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_GET_REPAIR: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_WAIT_FOR_REPAIR: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_INITIATE_REPAIR: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_CSC_INTERNAL: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER,
+ FILE_ANY_ACCESS);
+pub const FSCTL_SHRINK_VOLUME: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED,
+ FILE_SPECIAL_ACCESS);
+pub const FSCTL_SET_SHORT_NAME_BEHAVIOR: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 109,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_DFSR_SET_GHOST_HANDLE_STATE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 110,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM,
+ 120, METHOD_BUFFERED, FILE_READ_DATA);
+pub const FSCTL_TXFS_LIST_TRANSACTIONS: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 121,
+ METHOD_BUFFERED, FILE_READ_DATA);
+pub const FSCTL_QUERY_PAGEFILE_ENCRYPTION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 122,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_RESET_VOLUME_ALLOCATION_HINTS: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 123,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_QUERY_DEPENDENT_VOLUME: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 124,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_SD_GLOBAL_CHANGE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 125,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_TXFS_READ_BACKUP_INFORMATION2: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 126,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_LOOKUP_STREAM_FROM_CLUSTER: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 127,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_TXFS_WRITE_BACKUP_INFORMATION2: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 128,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_FILE_TYPE_NOTIFICATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 129,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_FILE_LEVEL_TRIM: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 130, METHOD_BUFFERED,
+ FILE_WRITE_DATA);
+pub const FSCTL_GET_BOOT_AREA_INFO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 140,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_GET_RETRIEVAL_POINTER_BASE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 141,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_SET_PERSISTENT_VOLUME_STATE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 142,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_QUERY_PERSISTENT_VOLUME_STATE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 143,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_REQUEST_OPLOCK: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_CSV_TUNNEL_REQUEST: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 145,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_IS_CSV_FILE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_QUERY_FILE_SYSTEM_RECOGNITION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 147,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_CSV_GET_VOLUME_PATH_NAME: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 148,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT: DWORD = CTL_CODE!(
+ FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME: DWORD = CTL_CODE!(
+ FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_IS_FILE_ON_CSV_VOLUME: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 151,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_CORRUPTION_HANDLING: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 152,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_OFFLOAD_READ: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 153, METHOD_BUFFERED,
+ FILE_READ_ACCESS);
+pub const FSCTL_OFFLOAD_WRITE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 154, METHOD_BUFFERED,
+ FILE_WRITE_ACCESS);
+pub const FSCTL_CSV_INTERNAL: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 155, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_SET_PURGE_FAILURE_MODE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 156,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_QUERY_FILE_LAYOUT: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 157,
+ METHOD_NEITHER, FILE_ANY_ACCESS);
+pub const FSCTL_IS_VOLUME_OWNED_BYCSVFS: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 158,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_GET_INTEGRITY_INFORMATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 159,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_SET_INTEGRITY_INFORMATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 160,
+ METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA);
+pub const FSCTL_QUERY_FILE_REGIONS: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 161,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_DEDUP_FILE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 165, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_DEDUP_QUERY_FILE_HASHES: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 166,
+ METHOD_NEITHER, FILE_READ_DATA);
+pub const FSCTL_DEDUP_QUERY_RANGE_STATE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 167,
+ METHOD_NEITHER, FILE_READ_DATA);
+pub const FSCTL_DEDUP_QUERY_REPARSE_INFO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 168,
+ METHOD_NEITHER, FILE_ANY_ACCESS);
+pub const FSCTL_RKF_INTERNAL: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 171, METHOD_NEITHER,
+ FILE_ANY_ACCESS);
+pub const FSCTL_SCRUB_DATA: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 172, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_REPAIR_COPIES: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 173, METHOD_BUFFERED,
+ FILE_READ_DATA | FILE_WRITE_DATA);
+pub const FSCTL_DISABLE_LOCAL_BUFFERING: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 174,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_CSV_MGMT_LOCK: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 175, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_CSV_QUERY_DOWN_LEVEL_FILE_SYSTEM_CHARACTERISTICS: DWORD = CTL_CODE!(
+ FILE_DEVICE_FILE_SYSTEM, 176, METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_ADVANCE_FILE_ID: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 177, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_CSV_SYNC_TUNNEL_REQUEST: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 178,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_CSV_QUERY_VETO_FILE_DIRECT_IO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 179,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_WRITE_USN_REASON: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 180,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_CSV_CONTROL: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 181, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const FSCTL_GET_REFS_VOLUME_DATA: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 182,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_CSV_H_BREAKING_SYNC_TUNNEL_REQUEST: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM,
+ 185, METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_QUERY_STORAGE_CLASSES: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 187,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_QUERY_REGION_INFO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 188,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_USN_TRACK_MODIFIED_RANGES: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 189,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_QUERY_SHARED_VIRTUAL_DISK_SUPPORT: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM,
+ 192, METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_SVHDX_SYNC_TUNNEL_REQUEST: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 193,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_SVHDX_SET_INITIATOR_INFORMATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 194,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_SET_EXTERNAL_BACKING: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 195,
+ METHOD_BUFFERED, FILE_SPECIAL_ACCESS);
+pub const FSCTL_GET_EXTERNAL_BACKING: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 196,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_DELETE_EXTERNAL_BACKING: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 197,
+ METHOD_BUFFERED, FILE_SPECIAL_ACCESS);
+pub const FSCTL_ENUM_EXTERNAL_BACKING: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 198,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const FSCTL_ENUM_OVERLAY: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 199, METHOD_NEITHER,
+ FILE_ANY_ACCESS);
+pub const FSCTL_ADD_OVERLAY: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 204, METHOD_BUFFERED,
+ FILE_WRITE_DATA);
+pub const FSCTL_REMOVE_OVERLAY: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 205, METHOD_BUFFERED,
+ FILE_WRITE_DATA);
+pub const FSCTL_UPDATE_OVERLAY: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 206, METHOD_BUFFERED,
+ FILE_WRITE_DATA);
+// FILE_DEVICE_AVIO is defined nowhere
+//pub const IOCTL_AVIO_ALLOCATE_STREAM: DWORD = CTL_CODE!(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED,
+// FILE_SPECIAL_ACCESS);
+//pub const IOCTL_AVIO_FREE_STREAM: DWORD = CTL_CODE!(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED,
+// FILE_SPECIAL_ACCESS);
+//pub const IOCTL_AVIO_MODIFY_STREAM: DWORD = CTL_CODE!(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED,
+// FILE_SPECIAL_ACCESS);
+STRUCT!{struct PATHNAME_BUFFER {
+ PathNameLength: DWORD,
+ Name: [WCHAR; 1],
+}}
+pub type PPATHNAME_BUFFER = *mut PATHNAME_BUFFER;
+STRUCT!{struct FSCTL_QUERY_FAT_BPB_BUFFER {
+ First0x24BytesOfBootSector: [BYTE; 0x24],
+}}
+pub type PFSCTL_QUERY_FAT_BPB_BUFFER = *mut FSCTL_QUERY_FAT_BPB_BUFFER;
+STRUCT!{struct NTFS_VOLUME_DATA_BUFFER {
+ VolumeSerialNumber: LARGE_INTEGER,
+ NumberSectors: LARGE_INTEGER,
+ TotalClusters: LARGE_INTEGER,
+ FreeClusters: LARGE_INTEGER,
+ TotalReserved: LARGE_INTEGER,
+ BytesPerSector: DWORD,
+ BytesPerCluster: DWORD,
+ BytesPerFileRecordSegment: DWORD,
+ ClustersPerFileRecordSegment: DWORD,
+ MftValidDataLength: LARGE_INTEGER,
+ MftStartLcn: LARGE_INTEGER,
+ Mft2StartLcn: LARGE_INTEGER,
+ MftZoneStart: LARGE_INTEGER,
+ MftZoneEnd: LARGE_INTEGER,
+}}
+pub type PNTFS_VOLUME_DATA_BUFFER = *mut NTFS_VOLUME_DATA_BUFFER;
+STRUCT!{struct NTFS_EXTENDED_VOLUME_DATA {
+ ByteCount: DWORD,
+ MajorVersion: WORD,
+ MinorVersion: WORD,
+ BytesPerPhysicalSector: DWORD,
+ LfsMajorVersion: WORD,
+ LfsMinorVersion: WORD,
+ MaxDeviceTrimExtentCount: DWORD,
+ MaxDeviceTrimByteCount: DWORD,
+ MaxVolumeTrimExtentCount: DWORD,
+ MaxVolumeTrimByteCount: DWORD,
+}}
+pub type PNTFS_EXTENDED_VOLUME_DATA = *mut NTFS_EXTENDED_VOLUME_DATA;
+STRUCT!{struct REFS_VOLUME_DATA_BUFFER {
+ ByteCount: DWORD,
+ MajorVersion: DWORD,
+ MinorVersion: DWORD,
+ BytesPerPhysicalSector: DWORD,
+ VolumeSerialNumber: LARGE_INTEGER,
+ NumberSectors: LARGE_INTEGER,
+ TotalClusters: LARGE_INTEGER,
+ FreeClusters: LARGE_INTEGER,
+ TotalReserved: LARGE_INTEGER,
+ BytesPerSector: DWORD,
+ BytesPerCluster: DWORD,
+ MaximumSizeOfResidentFile: LARGE_INTEGER,
+ Reserved: [LARGE_INTEGER; 10],
+}}
+pub type PREFS_VOLUME_DATA_BUFFER = *mut REFS_VOLUME_DATA_BUFFER;
+STRUCT!{struct STARTING_LCN_INPUT_BUFFER {
+ StartingLcn: LARGE_INTEGER,
+}}
+pub type PSTARTING_LCN_INPUT_BUFFER = *mut STARTING_LCN_INPUT_BUFFER;
+STRUCT!{struct VOLUME_BITMAP_BUFFER {
+ StartingLcn: LARGE_INTEGER,
+ BitmapSize: LARGE_INTEGER,
+ Buffer: [BYTE; 1],
+}}
+pub type PVOLUME_BITMAP_BUFFER = *mut VOLUME_BITMAP_BUFFER;
+STRUCT!{struct STARTING_VCN_INPUT_BUFFER {
+ StartingVcn: LARGE_INTEGER,
+}}
+pub type PSTARTING_VCN_INPUT_BUFFER = *mut STARTING_VCN_INPUT_BUFFER;
+STRUCT!{struct RETRIEVAL_POINTERS_BUFFER_INTERNAL {
+ NextVcn: LARGE_INTEGER,
+ Lcn: LARGE_INTEGER,
+}}
+STRUCT!{struct RETRIEVAL_POINTERS_BUFFER {
+ ExtentCount: DWORD,
+ StartingVcn: LARGE_INTEGER,
+ Extents: [RETRIEVAL_POINTERS_BUFFER_INTERNAL; 1],
+}}
+pub type PRETRIEVAL_POINTERS_BUFFER = *mut RETRIEVAL_POINTERS_BUFFER;
+STRUCT!{struct NTFS_FILE_RECORD_INPUT_BUFFER {
+ FileReferenceNumber: LARGE_INTEGER,
+}}
+pub type PNTFS_FILE_RECORD_INPUT_BUFFER = *mut NTFS_FILE_RECORD_INPUT_BUFFER;
+STRUCT!{struct NTFS_FILE_RECORD_OUTPUT_BUFFER {
+ FileReferenceNumber: LARGE_INTEGER,
+ FileRecordLength: DWORD,
+ FileRecordBuffer: [BYTE; 1],
+}}
+pub type PNTFS_FILE_RECORD_OUTPUT_BUFFER = *mut NTFS_FILE_RECORD_OUTPUT_BUFFER;
+STRUCT!{struct MOVE_FILE_DATA {
+ FileHandle: HANDLE,
+ StartingVcn: LARGE_INTEGER,
+ StartingLcn: LARGE_INTEGER,
+ ClusterCount: DWORD,
+}}
+pub type PMOVE_FILE_DATA = *mut MOVE_FILE_DATA;
+STRUCT!{struct MOVE_FILE_RECORD_DATA {
+ FileHandle: HANDLE,
+ SourceFileRecord: LARGE_INTEGER,
+ TargetFileRecord: LARGE_INTEGER,
+}}
+pub type PMOVE_FILE_RECORD_DATA = *mut MOVE_FILE_RECORD_DATA;
+//15468
+pub const IOCTL_VOLUME_BASE: DWORD = 0x00000056;
+pub const IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS: DWORD = CTL_CODE!(IOCTL_VOLUME_BASE, 0,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+STRUCT!{struct DISK_EXTENT {
+ DiskNumber: DWORD,
+ StartingOffset: LARGE_INTEGER,
+ ExtentLength: LARGE_INTEGER,
+}}
+pub type PDISK_EXTENT = *mut DISK_EXTENT;
+STRUCT!{struct VOLUME_DISK_EXTENTS {
+ NumberOfDiskExtents: DWORD,
+ Extents: [DISK_EXTENT; ANYSIZE_ARRAY],
+}}
+pub type PVOLUME_DISK_EXTENTS = *mut VOLUME_DISK_EXTENTS;
+pub const IOCTL_VOLUME_ONLINE: DWORD = CTL_CODE!(IOCTL_VOLUME_BASE, 2, METHOD_BUFFERED,
+ FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_VOLUME_OFFLINE: DWORD = CTL_CODE!(IOCTL_VOLUME_BASE, 3, METHOD_BUFFERED,
+ FILE_READ_ACCESS | FILE_WRITE_ACCESS);
+pub const IOCTL_VOLUME_IS_CLUSTERED: DWORD = CTL_CODE!(IOCTL_VOLUME_BASE, 12, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const IOCTL_VOLUME_GET_GPT_ATTRIBUTES: DWORD = CTL_CODE!(IOCTL_VOLUME_BASE, 14,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+STRUCT!{struct DISK_PERFORMANCE {
+ BytesRead: LARGE_INTEGER,
+ BytesWritten: LARGE_INTEGER,
+ ReadTime: LARGE_INTEGER,
+ WriteTime: LARGE_INTEGER,
+ IdleTime: LARGE_INTEGER,
+ ReadCount: DWORD,
+ WriteCount: DWORD,
+ QueueDepth: DWORD,
+ SplitCount: DWORD,
+ QueryTime: LARGE_INTEGER,
+ StorageDeviceNumber: DWORD,
+ StorageManagerName: [WCHAR; 8],
+}}
+pub type PDISK_PERFORMANCE = *mut DISK_PERFORMANCE;
diff --git a/vendor/winapi/src/um/winnetwk.rs b/vendor/winapi/src/um/winnetwk.rs
new file mode 100644
index 000000000..5680da124
--- /dev/null
+++ b/vendor/winapi/src/um/winnetwk.rs
@@ -0,0 +1,446 @@
+// 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.
+//! Standard WINNET Header File for WIN32
+use shared::basetsd::ULONG_PTR;
+use shared::minwindef::{BOOL, DWORD, LPDWORD, LPHANDLE, LPVOID, WORD};
+use shared::windef::HWND;
+use shared::winerror::{
+ ERROR_ACCESS_DENIED, ERROR_ALREADY_ASSIGNED, ERROR_ALREADY_INITIALIZED, ERROR_BAD_DEVICE,
+ ERROR_BAD_DEV_TYPE, ERROR_BAD_NET_NAME, ERROR_BAD_PROFILE, ERROR_BAD_PROVIDER,
+ ERROR_BAD_USERNAME, ERROR_BUSY, ERROR_CANCELLED, ERROR_CANNOT_OPEN_PROFILE,
+ ERROR_CONNECTED_OTHER_PASSWORD, ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT,
+ ERROR_CONNECTION_UNAVAIL, ERROR_DEVICE_ALREADY_REMEMBERED, ERROR_DEVICE_IN_USE,
+ ERROR_EXTENDED_ERROR, ERROR_GEN_FAILURE, ERROR_INVALID_ADDRESS, ERROR_INVALID_HANDLE,
+ ERROR_INVALID_LEVEL, ERROR_INVALID_PARAMETER, ERROR_INVALID_PASSWORD, ERROR_MORE_DATA,
+ ERROR_NOT_AUTHENTICATED, ERROR_NOT_CONNECTED, ERROR_NOT_CONTAINER, ERROR_NOT_ENOUGH_MEMORY,
+ ERROR_NOT_LOGGED_ON, ERROR_NOT_SUPPORTED, ERROR_NO_LOGON_SERVERS, ERROR_NO_MORE_DEVICES,
+ ERROR_NO_MORE_ITEMS, ERROR_NO_NETWORK, ERROR_NO_NET_OR_BAD_PATH, ERROR_OPEN_FILES, ERROR_RETRY,
+ ERROR_UNEXP_NET_ERR, NO_ERROR
+};
+use um::winnt::{HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR};
+pub const RESOURCE_CONNECTED: DWORD = 0x00000001;
+pub const RESOURCE_GLOBALNET: DWORD = 0x00000002;
+pub const RESOURCE_REMEMBERED: DWORD = 0x00000003;
+pub const RESOURCE_RECENT: DWORD = 0x00000004;
+pub const RESOURCE_CONTEXT: DWORD = 0x00000005;
+pub const RESOURCETYPE_ANY: DWORD = 0x00000000;
+pub const RESOURCETYPE_DISK: DWORD = 0x00000001;
+pub const RESOURCETYPE_PRINT: DWORD = 0x00000002;
+pub const RESOURCETYPE_RESERVED: DWORD = 0x00000008;
+pub const RESOURCETYPE_UNKNOWN: DWORD = 0xFFFFFFFF;
+pub const RESOURCEUSAGE_CONNECTABLE: DWORD = 0x00000001;
+pub const RESOURCEUSAGE_CONTAINER: DWORD = 0x00000002;
+pub const RESOURCEUSAGE_NOLOCALDEVICE: DWORD = 0x00000004;
+pub const RESOURCEUSAGE_SIBLING: DWORD = 0x00000008;
+pub const RESOURCEUSAGE_ATTACHED: DWORD = 0x00000010;
+pub const RESOURCEUSAGE_ALL: DWORD = RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER
+ | RESOURCEUSAGE_ATTACHED;
+pub const RESOURCEUSAGE_RESERVED: DWORD = 0x80000000;
+pub const RESOURCEDISPLAYTYPE_GENERIC: DWORD = 0x00000000;
+pub const RESOURCEDISPLAYTYPE_DOMAIN: DWORD = 0x00000001;
+pub const RESOURCEDISPLAYTYPE_SERVER: DWORD = 0x00000002;
+pub const RESOURCEDISPLAYTYPE_SHARE: DWORD = 0x00000003;
+pub const RESOURCEDISPLAYTYPE_FILE: DWORD = 0x00000004;
+pub const RESOURCEDISPLAYTYPE_GROUP: DWORD = 0x00000005;
+pub const RESOURCEDISPLAYTYPE_NETWORK: DWORD = 0x00000006;
+pub const RESOURCEDISPLAYTYPE_ROOT: DWORD = 0x00000007;
+pub const RESOURCEDISPLAYTYPE_SHAREADMIN: DWORD = 0x00000008;
+pub const RESOURCEDISPLAYTYPE_DIRECTORY: DWORD = 0x00000009;
+pub const RESOURCEDISPLAYTYPE_TREE: DWORD = 0x0000000A;
+pub const RESOURCEDISPLAYTYPE_NDSCONTAINER: DWORD = 0x0000000B;
+STRUCT!{struct NETRESOURCEA {
+ dwScope: DWORD,
+ dwType: DWORD,
+ dwDisplayType: DWORD,
+ dwUsage: DWORD,
+ lpLocalName: LPSTR,
+ lpRemoteName: LPSTR,
+ lpComment: LPSTR,
+ lpProvider: LPSTR,
+}}
+pub type LPNETRESOURCEA = *mut NETRESOURCEA;
+STRUCT!{struct NETRESOURCEW {
+ dwScope: DWORD,
+ dwType: DWORD,
+ dwDisplayType: DWORD,
+ dwUsage: DWORD,
+ lpLocalName: LPWSTR,
+ lpRemoteName: LPWSTR,
+ lpComment: LPWSTR,
+ lpProvider: LPWSTR,
+}}
+pub type LPNETRESOURCEW = *mut NETRESOURCEW;
+pub const NETPROPERTY_PERSISTENT: DWORD = 1;
+pub const CONNECT_UPDATE_PROFILE: DWORD = 0x00000001;
+pub const CONNECT_UPDATE_RECENT: DWORD = 0x00000002;
+pub const CONNECT_TEMPORARY: DWORD = 0x00000004;
+pub const CONNECT_INTERACTIVE: DWORD = 0x00000008;
+pub const CONNECT_PROMPT: DWORD = 0x00000010;
+pub const CONNECT_NEED_DRIVE: DWORD = 0x00000020;
+pub const CONNECT_REFCOUNT: DWORD = 0x00000040;
+pub const CONNECT_REDIRECT: DWORD = 0x00000080;
+pub const CONNECT_LOCALDRIVE: DWORD = 0x00000100;
+pub const CONNECT_CURRENT_MEDIA: DWORD = 0x00000200;
+pub const CONNECT_DEFERRED: DWORD = 0x00000400;
+pub const CONNECT_RESERVED: DWORD = 0xFF000000;
+pub const CONNECT_COMMANDLINE: DWORD = 0x00000800;
+pub const CONNECT_CMD_SAVECRED: DWORD = 0x00001000;
+pub const CONNECT_CRED_RESET: DWORD = 0x00002000;
+extern "system" {
+ pub fn WNetAddConnection2A(
+ lpNetResource: LPNETRESOURCEA,
+ lpPassword: LPCSTR,
+ lpUsername: LPCSTR,
+ dwFlags: DWORD,
+ ) -> DWORD;
+ pub fn WNetAddConnection2W(
+ lpNetResource: LPNETRESOURCEW,
+ lpPassword: LPCWSTR,
+ lpUsername: LPCWSTR,
+ dwFlags: DWORD,
+ ) -> DWORD;
+ pub fn WNetAddConnection3A(
+ hwndOwner: HWND,
+ lpNetResource: LPNETRESOURCEA,
+ lpPassword: LPCSTR,
+ lpUsername: LPCSTR,
+ dwFlags: DWORD,
+ ) -> DWORD;
+ pub fn WNetAddConnection3W(
+ hwndOwner: HWND,
+ lpNetResource: LPNETRESOURCEW,
+ lpPassword: LPCWSTR,
+ lpUsername: LPCWSTR,
+ dwFlags: DWORD,
+ ) -> DWORD;
+ pub fn WNetCancelConnectionA(
+ lpName: LPCSTR,
+ fForce: BOOL,
+ ) -> DWORD;
+ pub fn WNetCancelConnectionW(
+ lpName: LPCWSTR,
+ fForce: BOOL,
+ ) -> DWORD;
+ pub fn WNetCancelConnection2A(
+ lpName: LPCSTR,
+ dwFlags: DWORD,
+ fForce: BOOL,
+ ) -> DWORD;
+ pub fn WNetCancelConnection2W(
+ lpName: LPCWSTR,
+ dwFlags: DWORD,
+ fForce: BOOL,
+ ) -> DWORD;
+ pub fn WNetGetConnectionA(
+ lpLocalName: LPCSTR,
+ lpRemoteName: LPSTR,
+ lpnLength: LPDWORD,
+ ) -> DWORD;
+ pub fn WNetGetConnectionW(
+ lpLocalName: LPCWSTR,
+ lpRemoteName: LPWSTR,
+ lpnLength: LPDWORD,
+ ) -> DWORD;
+ pub fn WNetUseConnectionA(
+ hwndOwner: HWND,
+ lpNetResource: LPNETRESOURCEA,
+ lpPassword: LPCSTR,
+ lpUserId: LPCSTR,
+ dwFlags: DWORD,
+ lpAccessName: LPSTR,
+ lpBufferSize: LPDWORD,
+ lpResult: LPDWORD,
+ ) -> DWORD;
+ pub fn WNetUseConnectionW(
+ hwndOwner: HWND,
+ lpNetResource: LPNETRESOURCEW,
+ lpPassword: LPCWSTR,
+ lpUserId: LPCWSTR,
+ dwFlags: DWORD,
+ lpAccessName: LPWSTR,
+ lpBufferSize: LPDWORD,
+ lpResult: LPDWORD,
+ ) -> DWORD;
+ pub fn WNetConnectionDialog(
+ hwnd: HWND,
+ dwType: DWORD,
+ ) -> DWORD;
+ pub fn WNetDisconnectDialog(
+ hwnd: HWND,
+ dwType: DWORD,
+ ) -> DWORD;
+}
+STRUCT!{struct CONNECTDLGSTRUCTA {
+ cbStructure: DWORD,
+ hwndOwner: HWND,
+ lpConnRes: LPNETRESOURCEA,
+ dwFlags: DWORD,
+ dwDevNum: DWORD,
+}}
+pub type LPCONNECTDLGSTRUCTA = *mut CONNECTDLGSTRUCTA;
+STRUCT!{struct CONNECTDLGSTRUCTW {
+ cbStructure: DWORD,
+ hwndOwner: HWND,
+ lpConnRes: LPNETRESOURCEW,
+ dwFlags: DWORD,
+ dwDevNum: DWORD,
+}}
+pub type LPCONNECTDLGSTRUCTW = *mut CONNECTDLGSTRUCTW;
+pub const CONNDLG_RO_PATH: DWORD = 0x00000001;
+pub const CONNDLG_CONN_POINT: DWORD = 0x00000002;
+pub const CONNDLG_USE_MRU: DWORD = 0x00000004;
+pub const CONNDLG_HIDE_BOX: DWORD = 0x00000008;
+pub const CONNDLG_PERSIST: DWORD = 0x00000010;
+pub const CONNDLG_NOT_PERSIST: DWORD = 0x00000020;
+extern "system" {
+ pub fn WNetConnectionDialog1A(
+ lpConnDlgStruct: LPCONNECTDLGSTRUCTA,
+ ) -> DWORD;
+ pub fn WNetConnectionDialog1W(
+ lpConnDlgStruct: LPCONNECTDLGSTRUCTW,
+ ) -> DWORD;
+}
+STRUCT!{struct DISCDLGSTRUCTA {
+ cbStructure: DWORD,
+ hwndOwner: HWND,
+ lpLocalName: LPSTR,
+ lpRemoteName: LPSTR,
+ dwFlags: DWORD,
+}}
+pub type LPDISCDLGSTRUCTA = *mut DISCDLGSTRUCTA;
+STRUCT!{struct DISCDLGSTRUCTW {
+ cbStructure: DWORD,
+ hwndOwner: HWND,
+ lpLocalName: LPWSTR,
+ lpRemoteName: LPWSTR,
+ dwFlags: DWORD,
+}}
+pub type LPDISCDLGSTRUCTW = *mut DISCDLGSTRUCTW;
+pub const DISC_UPDATE_PROFILE: DWORD = 0x00000001;
+pub const DISC_NO_FORCE: DWORD = 0x00000040;
+extern "system" {
+ pub fn WNetDisconnectDialog1A(
+ lpConnDlgStruct: LPDISCDLGSTRUCTA,
+ ) -> DWORD;
+ pub fn WNetDisconnectDialog1W(
+ lpConnDlgStruct: LPDISCDLGSTRUCTW,
+ ) -> DWORD;
+ pub fn WNetOpenEnumA(
+ dwScope: DWORD,
+ dwType: DWORD,
+ dwUsage: DWORD,
+ lpNetResource: LPNETRESOURCEA,
+ lphEnum: LPHANDLE,
+ ) -> DWORD;
+ pub fn WNetOpenEnumW(
+ dwScope: DWORD,
+ dwType: DWORD,
+ dwUsage: DWORD,
+ lpNetResource: LPNETRESOURCEW,
+ lphEnum: LPHANDLE,
+ ) -> DWORD;
+ pub fn WNetEnumResourceA(
+ hEnum: HANDLE,
+ lpcCount: LPDWORD,
+ lpBuffer: LPVOID,
+ lpBufferSize: LPDWORD,
+ ) -> DWORD;
+ pub fn WNetEnumResourceW(
+ hEnum: HANDLE,
+ lpcCount: LPDWORD,
+ lpBuffer: LPVOID,
+ lpBufferSize: LPDWORD,
+ ) -> DWORD;
+ pub fn WNetCloseEnum(
+ hEnum: HANDLE,
+ ) -> DWORD;
+ pub fn WNetGetResourceParentA(
+ lpNetResource: LPNETRESOURCEA,
+ lpBuffer: LPVOID,
+ lpcbBuffer: LPDWORD,
+ ) -> DWORD;
+ pub fn WNetGetResourceParentW(
+ lpNetResource: LPNETRESOURCEW,
+ lpBuffer: LPVOID,
+ lpcbBuffer: LPDWORD,
+ ) -> DWORD;
+ pub fn WNetGetResourceInformationA(
+ lpNetResource: LPNETRESOURCEA,
+ lpBuffer: LPVOID,
+ lpcbBuffer: LPDWORD,
+ lplpSystem: *mut LPSTR,
+ ) -> DWORD;
+ pub fn WNetGetResourceInformationW(
+ lpNetResource: LPNETRESOURCEW,
+ lpBuffer: LPVOID,
+ lpcbBuffer: LPDWORD,
+ lplpSystem: *mut LPWSTR,
+ ) -> DWORD;
+}
+pub const UNIVERSAL_NAME_INFO_LEVEL: DWORD = 0x00000001;
+pub const REMOTE_NAME_INFO_LEVEL: DWORD = 0x00000002;
+STRUCT!{struct UNIVERSAL_NAME_INFOA {
+ lpUniversalName: LPSTR,
+}}
+pub type LPUNIVERSAL_NAME_INFOA = *mut UNIVERSAL_NAME_INFOA;
+STRUCT!{struct UNIVERSAL_NAME_INFOW {
+ lpUniversalName: LPWSTR,
+}}
+pub type LPUNIVERSAL_NAME_INFOW = *mut UNIVERSAL_NAME_INFOW;
+STRUCT!{struct REMOTE_NAME_INFOA {
+ lpUniversalName: LPSTR,
+ lpConnectionName: LPSTR,
+ lpRemainingPath: LPSTR,
+}}
+pub type LPREMOTE_NAME_INFOA = *mut REMOTE_NAME_INFOA;
+STRUCT!{struct REMOTE_NAME_INFOW {
+ lpUniversalName: LPWSTR,
+ lpConnectionName: LPWSTR,
+ lpRemainingPath: LPWSTR,
+}}
+pub type LPREMOTE_NAME_INFOW = *mut REMOTE_NAME_INFOW;
+extern "system" {
+ pub fn WNetGetUniversalNameA(
+ lpLocalPath: LPCSTR,
+ dwInfoLevel: DWORD,
+ lpBuffer: LPVOID,
+ lpBufferSize: LPDWORD,
+ ) -> DWORD;
+ pub fn WNetGetUniversalNameW(
+ lpLocalPath: LPCWSTR,
+ dwInfoLevel: DWORD,
+ lpBuffer: LPVOID,
+ lpBufferSize: LPDWORD,
+ ) -> DWORD;
+ pub fn WNetGetUserA(
+ lpName: LPCSTR,
+ lpUserName: LPSTR,
+ lpnLength: LPDWORD,
+ ) -> DWORD;
+ pub fn WNetGetUserW(
+ lpName: LPCWSTR,
+ lpUserName: LPWSTR,
+ lpnLength: LPDWORD,
+ ) -> DWORD;
+}
+pub const WNFMT_MULTILINE: DWORD = 0x01;
+pub const WNFMT_ABBREVIATED: DWORD = 0x02;
+pub const WNFMT_INENUM: DWORD = 0x10;
+pub const WNFMT_CONNECTION: DWORD = 0x20;
+extern "system" {
+ pub fn WNetGetProviderNameA(
+ dwNetType: DWORD,
+ lpProviderName: LPSTR,
+ lpBufferSize: LPDWORD,
+ ) -> DWORD;
+ pub fn WNetGetProviderNameW(
+ dwNetType: DWORD,
+ lpProviderName: LPWSTR,
+ lpBufferSize: LPDWORD,
+ ) -> DWORD;
+}
+STRUCT!{struct NETINFOSTRUCT {
+ cbStructure: DWORD,
+ dwProviderVersion: DWORD,
+ dwStatus: DWORD,
+ dwCharacteristics: DWORD,
+ dwHandle: ULONG_PTR,
+ wNetType: WORD,
+ dwPrinters: DWORD,
+ dwDrives: DWORD,
+}}
+pub type LPNETINFOSTRUCT = *mut NETINFOSTRUCT;
+pub const NETINFO_DLL16: DWORD = 0x00000001;
+pub const NETINFO_DISKRED: DWORD = 0x00000004;
+pub const NETINFO_PRINTERRED: DWORD = 0x00000008;
+extern "system" {
+ pub fn WNetGetNetworkInformationA(
+ lpProvider: LPCSTR,
+ lpNetInfoStruct: LPNETINFOSTRUCT,
+ ) -> DWORD;
+ pub fn WNetGetNetworkInformationW(
+ lpProvider: LPCWSTR,
+ lpNetInfoStruct: LPNETINFOSTRUCT,
+ ) -> DWORD;
+ pub fn WNetGetLastErrorA(
+ lpError: LPDWORD,
+ lpErrorBuf: LPSTR,
+ nErrorBufSize: DWORD,
+ lpNameBuf: LPSTR,
+ nNameBufSize: DWORD,
+ ) -> DWORD;
+ pub fn WNetGetLastErrorW(
+ lpError: LPDWORD,
+ lpErrorBuf: LPWSTR,
+ nErrorBufSize: DWORD,
+ lpNameBuf: LPWSTR,
+ nNameBufSize: DWORD,
+ ) -> DWORD;
+}
+pub const WN_SUCCESS: DWORD = NO_ERROR;
+pub const WN_NO_ERROR: DWORD = NO_ERROR;
+pub const WN_NOT_SUPPORTED: DWORD = ERROR_NOT_SUPPORTED;
+pub const WN_CANCEL: DWORD = ERROR_CANCELLED;
+pub const WN_RETRY: DWORD = ERROR_RETRY;
+pub const WN_NET_ERROR: DWORD = ERROR_UNEXP_NET_ERR;
+pub const WN_MORE_DATA: DWORD = ERROR_MORE_DATA;
+pub const WN_BAD_POINTER: DWORD = ERROR_INVALID_ADDRESS;
+pub const WN_BAD_VALUE: DWORD = ERROR_INVALID_PARAMETER;
+pub const WN_BAD_USER: DWORD = ERROR_BAD_USERNAME;
+pub const WN_BAD_PASSWORD: DWORD = ERROR_INVALID_PASSWORD;
+pub const WN_ACCESS_DENIED: DWORD = ERROR_ACCESS_DENIED;
+pub const WN_FUNCTION_BUSY: DWORD = ERROR_BUSY;
+pub const WN_WINDOWS_ERROR: DWORD = ERROR_UNEXP_NET_ERR;
+pub const WN_OUT_OF_MEMORY: DWORD = ERROR_NOT_ENOUGH_MEMORY;
+pub const WN_NO_NETWORK: DWORD = ERROR_NO_NETWORK;
+pub const WN_EXTENDED_ERROR: DWORD = ERROR_EXTENDED_ERROR;
+pub const WN_BAD_LEVEL: DWORD = ERROR_INVALID_LEVEL;
+pub const WN_BAD_HANDLE: DWORD = ERROR_INVALID_HANDLE;
+pub const WN_NOT_INITIALIZING: DWORD = ERROR_ALREADY_INITIALIZED;
+pub const WN_NO_MORE_DEVICES: DWORD = ERROR_NO_MORE_DEVICES;
+pub const WN_NOT_CONNECTED: DWORD = ERROR_NOT_CONNECTED;
+pub const WN_OPEN_FILES: DWORD = ERROR_OPEN_FILES;
+pub const WN_DEVICE_IN_USE: DWORD = ERROR_DEVICE_IN_USE;
+pub const WN_BAD_NETNAME: DWORD = ERROR_BAD_NET_NAME;
+pub const WN_BAD_LOCALNAME: DWORD = ERROR_BAD_DEVICE;
+pub const WN_ALREADY_CONNECTED: DWORD = ERROR_ALREADY_ASSIGNED;
+pub const WN_DEVICE_ERROR: DWORD = ERROR_GEN_FAILURE;
+pub const WN_CONNECTION_CLOSED: DWORD = ERROR_CONNECTION_UNAVAIL;
+pub const WN_NO_NET_OR_BAD_PATH: DWORD = ERROR_NO_NET_OR_BAD_PATH;
+pub const WN_BAD_PROVIDER: DWORD = ERROR_BAD_PROVIDER;
+pub const WN_CANNOT_OPEN_PROFILE: DWORD = ERROR_CANNOT_OPEN_PROFILE;
+pub const WN_BAD_PROFILE: DWORD = ERROR_BAD_PROFILE;
+pub const WN_BAD_DEV_TYPE: DWORD = ERROR_BAD_DEV_TYPE;
+pub const WN_DEVICE_ALREADY_REMEMBERED: DWORD = ERROR_DEVICE_ALREADY_REMEMBERED;
+pub const WN_CONNECTED_OTHER_PASSWORD: DWORD = ERROR_CONNECTED_OTHER_PASSWORD;
+pub const WN_CONNECTED_OTHER_PASSWORD_DEFAULT: DWORD = ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT;
+pub const WN_NO_MORE_ENTRIES: DWORD = ERROR_NO_MORE_ITEMS;
+pub const WN_NOT_CONTAINER: DWORD = ERROR_NOT_CONTAINER;
+pub const WN_NOT_AUTHENTICATED: DWORD = ERROR_NOT_AUTHENTICATED;
+pub const WN_NOT_LOGGED_ON: DWORD = ERROR_NOT_LOGGED_ON;
+pub const WN_NOT_VALIDATED: DWORD = ERROR_NO_LOGON_SERVERS;
+STRUCT!{struct NETCONNECTINFOSTRUCT {
+ cbStructure: DWORD,
+ dwFlags: DWORD,
+ dwSpeed: DWORD,
+ dwDelay: DWORD,
+ dwOptDataSize: DWORD,
+}}
+pub type LPNETCONNECTINFOSTRUCT = *mut NETCONNECTINFOSTRUCT;
+pub const WNCON_FORNETCARD: DWORD = 0x00000001;
+pub const WNCON_NOTROUTED: DWORD = 0x00000002;
+pub const WNCON_SLOWLINK: DWORD = 0x00000004;
+pub const WNCON_DYNAMIC: DWORD = 0x00000008;
+extern "system" {
+ pub fn MultinetGetConnectionPerformanceA(
+ lpNetResource: LPNETRESOURCEA,
+ lpNetConnectInfoStruct: LPNETCONNECTINFOSTRUCT,
+ ) -> DWORD;
+ pub fn MultinetGetConnectionPerformanceW(
+ lpNetResource: LPNETRESOURCEW,
+ lpNetConnectInfoStruct: LPNETCONNECTINFOSTRUCT,
+ ) -> DWORD;
+}
diff --git a/vendor/winapi/src/um/winnls.rs b/vendor/winapi/src/um/winnls.rs
new file mode 100644
index 000000000..fd68a2354
--- /dev/null
+++ b/vendor/winapi/src/um/winnls.rs
@@ -0,0 +1,817 @@
+// 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.
+//! Procedure declarations, constant definitions, and macros for the NLS component.
+use ctypes::c_int;
+use shared::basetsd::LONG_PTR;
+use shared::guiddef::GUID;
+use shared::minwindef::{
+ BOOL, BYTE, DWORD, INT, LPARAM, LPDWORD, LPINT, LPVOID, LPWORD, MAX_PATH, PDWORD, PULONG,
+ UINT,
+};
+use um::minwinbase::SYSTEMTIME;
+use um::winnt::{
+ CHAR, LANGID, LCID, LONG, LPCSTR, LPCWCH, LPCWSTR, LPSTR, LPWSTR, PCNZCH, PCNZWCH, PCWSTR,
+ PCZZWSTR, PULONGLONG, PWSTR, PZZWSTR, ULONGLONG, WCHAR,
+};
+pub const MAX_LEADBYTES: usize = 12;
+pub const MAX_DEFAULTCHAR: usize = 2;
+pub const MB_PRECOMPOSED: DWORD = 0x00000001;
+pub const MB_COMPOSITE: DWORD = 0x00000002;
+pub const MB_USEGLYPHCHARS: DWORD = 0x00000004;
+pub const MB_ERR_INVALID_CHARS: DWORD = 0x00000008;
+pub const WC_COMPOSITECHECK: DWORD = 0x00000200;
+pub const WC_DISCARDNS: DWORD = 0x00000010;
+pub const WC_SEPCHARS: DWORD = 0x00000020;
+pub const WC_DEFAULTCHAR: DWORD = 0x00000040;
+pub const WC_ERR_INVALID_CHARS: DWORD = 0x00000080;
+pub const WC_NO_BEST_FIT_CHARS: DWORD = 0x00000400;
+pub const CP_ACP: DWORD = 0;
+pub const CP_OEMCP: DWORD = 1;
+pub const CP_MACCP: DWORD = 2;
+pub const CP_THREAD_ACP: DWORD = 3;
+pub const CP_SYMBOL: DWORD = 42;
+pub const CP_UTF7: DWORD = 65000;
+pub const CP_UTF8: DWORD = 65001;
+pub type LGRPID = DWORD;
+pub type LCTYPE = DWORD;
+pub type CALTYPE = DWORD;
+pub type CALID = DWORD;
+STRUCT!{struct CPINFO {
+ MaxCharSize: UINT,
+ DefaultChar: [BYTE; MAX_DEFAULTCHAR],
+ LeadByte: [BYTE; MAX_LEADBYTES],
+}}
+pub type LPCPINFO = *mut CPINFO;
+STRUCT!{struct CPINFOEXA {
+ MaxCharSize: UINT,
+ DefaultChar: [BYTE; MAX_DEFAULTCHAR],
+ LeadByte: [BYTE; MAX_LEADBYTES],
+ UnicodeDefaultChar: WCHAR,
+ CodePage: UINT,
+ CodePageName: [CHAR; MAX_PATH],
+}}
+pub type LPCPINFOEXA = *mut CPINFOEXA;
+STRUCT!{struct CPINFOEXW {
+ MaxCharSize: UINT,
+ DefaultChar: [BYTE; MAX_DEFAULTCHAR],
+ LeadByte: [BYTE; MAX_LEADBYTES],
+ UnicodeDefaultChar: WCHAR,
+ CodePage: UINT,
+ CodePageName: [WCHAR; MAX_PATH],
+}}
+pub type LPCPINFOEXW = *mut CPINFOEXW;
+STRUCT!{struct NUMBERFMTA {
+ NumDigits: UINT,
+ LeadingZero: UINT,
+ Grouping: UINT,
+ lpDecimalSep: LPSTR,
+ lpThousandSep: LPSTR,
+ NegativeOrder: UINT,
+}}
+pub type LPNUMBERFMTA = *mut NUMBERFMTA;
+STRUCT!{struct NUMBERFMTW {
+ NumDigits: UINT,
+ LeadingZero: UINT,
+ Grouping: UINT,
+ lpDecimalSep: LPWSTR,
+ lpThousandSep: LPWSTR,
+ NegativeOrder: UINT,
+}}
+pub type LPNUMBERFMTW = *mut NUMBERFMTW;
+STRUCT!{struct CURRENCYFMTA {
+ NumDigits: UINT,
+ LeadingZero: UINT,
+ Grouping: UINT,
+ lpDecimalSep: LPSTR,
+ lpThousandSep: LPSTR,
+ NegativeOrder: UINT,
+ PositiveOrder: UINT,
+ lpCurrencySymbol: LPSTR,
+}}
+pub type LPCURRENCYFMTA = *mut CURRENCYFMTA;
+STRUCT!{struct CURRENCYFMTW {
+ NumDigits: UINT,
+ LeadingZero: UINT,
+ Grouping: UINT,
+ lpDecimalSep: LPWSTR,
+ lpThousandSep: LPWSTR,
+ NegativeOrder: UINT,
+ PositiveOrder: UINT,
+ lpCurrencySymbol: LPWSTR,
+}}
+pub type LPCURRENCYFMTW = *mut CURRENCYFMTW;
+pub type NLS_FUNCTION = DWORD;
+STRUCT!{struct NLSVERSIONINFO {
+ dwNLSVersionInfoSize: DWORD,
+ dwNLSVersion: DWORD,
+ dwDefinedVersion: DWORD,
+ dwEffectiveId: DWORD,
+ guidCustomVersion: GUID,
+}}
+pub type LPNLSVERSIONINFO = *mut NLSVERSIONINFO;
+STRUCT!{struct NLSVERSIONINFOEX {
+ dwNLSVersionInfoSize: DWORD,
+ dwNLSVersion: DWORD,
+ dwDefinedVersion: DWORD,
+ dwEffectiveId: DWORD,
+ guidCustomVersion: GUID,
+}}
+pub type LPNLSVERSIONINFOEX = *mut NLSVERSIONINFOEX;
+pub type GEOID = LONG;
+pub type GEOTYPE = DWORD;
+pub type GEOCLASS = DWORD;
+ENUM!{enum NORM_FORM {
+ NormalizationOther = 0,
+ NormalizationC = 0x1,
+ NormalizationD = 0x2,
+ NormalizationKC = 0x5,
+ NormalizationKD = 0x6,
+}}
+FN!{stdcall LANGUAGEGROUP_ENUMPROCA(
+ LGRPID,
+ LPSTR,
+ LPSTR,
+ DWORD,
+ LONG_PTR,
+) -> BOOL}
+FN!{stdcall LANGGROUPLOCALE_ENUMPROCA(
+ LGRPID,
+ LCID,
+ LPSTR,
+ LONG_PTR,
+) -> BOOL}
+FN!{stdcall UILANGUAGE_ENUMPROCA(
+ LPSTR,
+ LONG_PTR,
+) -> BOOL}
+FN!{stdcall CODEPAGE_ENUMPROCA(
+ LPSTR,
+) -> BOOL}
+FN!{stdcall DATEFMT_ENUMPROCA(
+ LPSTR,
+) -> BOOL}
+FN!{stdcall DATEFMT_ENUMPROCEXA(
+ LPSTR,
+ CALID,
+) -> BOOL}
+FN!{stdcall TIMEFMT_ENUMPROCA(
+ LPSTR,
+) -> BOOL}
+FN!{stdcall CALINFO_ENUMPROCA(
+ LPSTR,
+) -> BOOL}
+FN!{stdcall CALINFO_ENUMPROCEXA(
+ LPSTR,
+ CALID,
+) -> BOOL}
+FN!{stdcall LOCALE_ENUMPROCA(
+ LPSTR,
+) -> BOOL}
+FN!{stdcall LOCALE_ENUMPROCW(
+ LPWSTR,
+) -> BOOL}
+FN!{stdcall LANGUAGEGROUP_ENUMPROCW(
+ LGRPID,
+ LPWSTR,
+ LPWSTR,
+ DWORD,
+ LONG_PTR,
+) -> BOOL}
+FN!{stdcall LANGGROUPLOCALE_ENUMPROCW(
+ LGRPID,
+ LCID,
+ LPWSTR,
+ LONG_PTR,
+) -> BOOL}
+FN!{stdcall UILANGUAGE_ENUMPROCW(
+ LPWSTR,
+ LONG_PTR,
+) -> BOOL}
+FN!{stdcall CODEPAGE_ENUMPROCW(
+ LPWSTR,
+) -> BOOL}
+FN!{stdcall DATEFMT_ENUMPROCW(
+ LPWSTR,
+) -> BOOL}
+FN!{stdcall DATEFMT_ENUMPROCEXW(
+ LPWSTR,
+ CALID,
+) -> BOOL}
+FN!{stdcall TIMEFMT_ENUMPROCW(
+ LPWSTR,
+) -> BOOL}
+FN!{stdcall CALINFO_ENUMPROCW(
+ LPWSTR,
+) -> BOOL}
+FN!{stdcall CALINFO_ENUMPROCEXW(
+ LPWSTR,
+ CALID,
+) -> BOOL}
+FN!{stdcall GEO_ENUMPROC(
+ GEOID,
+) -> BOOL}
+STRUCT!{struct FILEMUIINFO {
+ dwSize: DWORD,
+ dwVersion: DWORD,
+ dwFileType: DWORD,
+ pChecksum: [BYTE; 16],
+ pServiceChecksum: [BYTE; 16],
+ dwLanguageNameOffset: DWORD,
+ dwTypeIDMainSize: DWORD,
+ dwTypeIDMainOffset: DWORD,
+ dwTypeNameMainOffset: DWORD,
+ dwTypeIDMUISize: DWORD,
+ dwTypeIDMUIOffset: DWORD,
+ dwTypeNameMUIOffset: DWORD,
+ abBuffer: [BYTE; 8],
+}}
+pub type PFILEMUIINFO = *mut FILEMUIINFO;
+FN!{stdcall CALINFO_ENUMPROCEXEX(
+ LPWSTR,
+ CALID,
+ LPWSTR,
+ LPARAM,
+) -> BOOL}
+FN!{stdcall DATEFMT_ENUMPROCEXEX(
+ LPWSTR,
+ CALID,
+ LPARAM,
+) -> BOOL}
+FN!{stdcall TIMEFMT_ENUMPROCEX(
+ LPWSTR,
+ LPARAM,
+) -> BOOL}
+FN!{stdcall LOCALE_ENUMPROCEX(
+ LPWSTR,
+ DWORD,
+ LPARAM,
+) -> BOOL}
+extern "system" {
+ pub fn CompareStringA(
+ Locale: LCID,
+ dwCmpFlags: DWORD,
+ lpString1: PCNZCH,
+ cchCount1: c_int,
+ lpString2: PCNZCH,
+ cchCount2: c_int,
+ ) -> c_int;
+ pub fn CompareStringEx(
+ lpLocaleName: LPCWSTR,
+ dwCmpFlags: DWORD,
+ lpString1: LPCWCH,
+ cchCount1: c_int,
+ lpString2: LPCWCH,
+ cchCount2: c_int,
+ lpVersionInformation: LPNLSVERSIONINFO,
+ lpReserved: LPVOID,
+ lParam: LPARAM,
+ ) -> c_int;
+ pub fn CompareStringW(
+ Locale: LCID,
+ dwCmpFlags: DWORD,
+ lpString1: PCNZWCH,
+ cchCount1: c_int,
+ lpString2: PCNZWCH,
+ cchCount2: c_int,
+ ) -> c_int;
+ pub fn ConvertDefaultLocale(Locale: LCID) -> LCID;
+ pub fn EnumCalendarInfoA(
+ lpCalInfoEnumProc: CALINFO_ENUMPROCA,
+ Locale: LCID,
+ Calendar: CALID,
+ CalType: CALTYPE,
+ ) -> BOOL;
+ pub fn EnumCalendarInfoExA(
+ lpCalInfoEnumProcEx: CALINFO_ENUMPROCEXA,
+ Locale: LCID,
+ Calendar: CALID,
+ CalType: CALTYPE,
+ ) -> BOOL;
+ pub fn EnumCalendarInfoExEx(
+ pCalInfoEnumProcExEx: CALINFO_ENUMPROCEXEX,
+ lpLocaleName: LPCWSTR,
+ Calendar: CALID,
+ lpReserved: LPCWSTR,
+ CalType: CALTYPE,
+ lParam: LPARAM,
+ ) -> BOOL;
+ pub fn EnumCalendarInfoExW(
+ lpCalInfoEnumProcEx: CALINFO_ENUMPROCEXW,
+ Locale: LCID,
+ Calendar: CALID,
+ CalType: CALTYPE,
+ ) -> BOOL;
+ pub fn EnumCalendarInfoW(
+ lpCalInfoEnumProc: CALINFO_ENUMPROCW,
+ Locale: LCID,
+ Calendar: CALID,
+ CalType: CALTYPE,
+ ) -> BOOL;
+ pub fn EnumDateFormatsA(
+ lpDateFmtEnumProc: DATEFMT_ENUMPROCA,
+ Locale: LCID,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn EnumDateFormatsExA(
+ lpDateFmtEnumProcEx: DATEFMT_ENUMPROCEXA,
+ Locale: LCID,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn EnumDateFormatsExEx(
+ lpDateFmtEnumProcExEx: DATEFMT_ENUMPROCEXEX,
+ lpLocaleName: LPCWSTR,
+ dwFlags: DWORD,
+ lParam: LPARAM,
+ ) -> BOOL;
+ pub fn EnumDateFormatsExW(
+ lpDateFmtEnumProcEx: DATEFMT_ENUMPROCEXW,
+ Locale: LCID,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn EnumDateFormatsW(
+ lpDateFmtEnumProc: DATEFMT_ENUMPROCW,
+ Locale: LCID,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn EnumLanguageGroupLocalesA(
+ lpLangGroupLocaleEnumProc: LANGGROUPLOCALE_ENUMPROCA,
+ LanguageGroup: LGRPID,
+ dwFlags: DWORD,
+ lParam: LONG_PTR,
+ ) -> BOOL;
+ pub fn EnumLanguageGroupLocalesW(
+ lpLangGroupLocaleEnumProc: LANGGROUPLOCALE_ENUMPROCW,
+ LanguageGroup: LGRPID,
+ dwFlags: DWORD,
+ lParam: LONG_PTR,
+ ) -> BOOL;
+ pub fn EnumSystemCodePagesA(
+ lpCodePageEnumProc: CODEPAGE_ENUMPROCA,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn EnumSystemCodePagesW(
+ lpCodePageEnumProc: CODEPAGE_ENUMPROCW,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn EnumSystemGeoID(
+ GeoClass: GEOCLASS,
+ ParentGeoId: GEOID,
+ lpGeoEnumProc: GEO_ENUMPROC,
+ ) -> BOOL;
+ pub fn EnumSystemLanguageGroupsA(
+ lpLanguageGroupEnumProc: LANGUAGEGROUP_ENUMPROCA,
+ dwFlags: DWORD,
+ lParam: LONG_PTR,
+ ) -> BOOL;
+ pub fn EnumSystemLanguageGroupsW(
+ lpLanguageGroupEnumProc: LANGUAGEGROUP_ENUMPROCW,
+ dwFlags: DWORD,
+ lParam: LONG_PTR,
+ ) -> BOOL;
+ pub fn EnumSystemLocalesA(
+ lpLocaleEnumProc: LOCALE_ENUMPROCA,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn EnumSystemLocalesEx(
+ lpLocaleEnumProcEx: LOCALE_ENUMPROCEX,
+ dwFlags: DWORD,
+ lParam: LPARAM,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn EnumSystemLocalesW(
+ lpLocaleEnumProc: LOCALE_ENUMPROCW,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn EnumTimeFormatsA(
+ lpTimeFmtEnumProc: TIMEFMT_ENUMPROCA,
+ Locale: LCID,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn EnumTimeFormatsEx(
+ lpTimeFmtEnumProcEx: TIMEFMT_ENUMPROCEX,
+ lpLocaleName: LPCWSTR,
+ dwFlags: DWORD,
+ lParam: LPARAM,
+ ) -> BOOL;
+ pub fn EnumTimeFormatsW(
+ lpTimeFmtEnumProc: TIMEFMT_ENUMPROCW,
+ Locale: LCID,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn EnumUILanguagesA(
+ lpUILanguageEnumProc: UILANGUAGE_ENUMPROCA,
+ dwFlags: DWORD,
+ lParam: LONG_PTR,
+ ) -> BOOL;
+ pub fn EnumUILanguagesW(
+ lpUILanguageEnumProc: UILANGUAGE_ENUMPROCW,
+ dwFlags: DWORD,
+ lParam: LONG_PTR,
+ ) -> BOOL;
+ pub fn FindNLSString(
+ Locale: LCID,
+ dwFindNLSStringFlags: DWORD,
+ lpStringSource: LPCWSTR,
+ cchSource: c_int,
+ lpStringValue: LPCWSTR,
+ cchValue: c_int,
+ pcchFound: LPINT,
+ ) -> c_int;
+ pub fn FindNLSStringEx(
+ lpLocaleName: LPCWSTR,
+ dwFindNLSStringFlags: DWORD,
+ lpStringSource: LPCWSTR,
+ cchSource: c_int,
+ lpStringValue: LPCWSTR,
+ cchValue: c_int,
+ pcchFound: LPINT,
+ lpVersionInformation: LPNLSVERSIONINFO,
+ lpReserved: LPVOID,
+ sortHandle: LPARAM,
+ ) -> c_int;
+ pub fn FoldStringA(
+ dwMapFlags: DWORD,
+ lpSrcStr: LPCSTR,
+ cchSrc: c_int,
+ lpDestStr: LPSTR,
+ cchDest: c_int,
+ ) -> c_int;
+ pub fn GetACP() -> UINT;
+ pub fn GetCPInfo(
+ CodePage: UINT,
+ lpCPInfo: LPCPINFO,
+ ) -> BOOL;
+ pub fn GetCPInfoExA(
+ CodePage: UINT,
+ dwFlags: DWORD,
+ lpCPInfoEx: LPCPINFOEXA,
+ ) -> BOOL;
+ pub fn GetCPInfoExW(
+ CodePage: UINT,
+ dwFlags: DWORD,
+ lpCPInfoEx: LPCPINFOEXW,
+ ) -> BOOL;
+ pub fn GetCalendarInfoA(
+ Locale: LCID,
+ Calendar: CALID,
+ CalType: CALTYPE,
+ lpCalData: LPSTR,
+ cchData: c_int,
+ lpValue: LPDWORD,
+ ) -> c_int;
+ pub fn GetCalendarInfoEx(
+ lpLocaleName: LPCWSTR,
+ Calendar: CALID,
+ lpReserved: LPCWSTR,
+ CalType: CALTYPE,
+ lpCalData: LPWSTR,
+ cchData: c_int,
+ lpValue: LPDWORD,
+ ) -> c_int;
+ pub fn GetCalendarInfoW(
+ Locale: LCID,
+ Calendar: CALID,
+ CalType: CALTYPE,
+ lpCalData: LPWSTR,
+ cchData: c_int,
+ lpValue: LPDWORD,
+ ) -> c_int;
+ pub fn GetCurrencyFormatA(
+ Locale: LCID,
+ dwFlags: DWORD,
+ lpValue: LPCSTR,
+ lpFormat: *const CURRENCYFMTA,
+ lpCurrencyStr: LPSTR,
+ cchCurrency: c_int,
+ ) -> c_int;
+ pub fn GetCurrencyFormatEx(
+ lpLocaleName: LPCWSTR,
+ dwFlags: DWORD,
+ lpValue: LPCWSTR,
+ lpFormat: *const CURRENCYFMTW,
+ lpCurrencyStr: LPWSTR,
+ cchCurrency: c_int,
+ ) -> c_int;
+ pub fn GetCurrencyFormatW(
+ Locale: LCID,
+ dwFlags: DWORD,
+ lpValue: LPCWSTR,
+ lpFormat: *const CURRENCYFMTW,
+ lpCurrencyStr: LPWSTR,
+ cchCurrency: c_int,
+ ) -> c_int;
+ pub fn GetDurationFormat(
+ Locale: LCID,
+ dwFlags: DWORD,
+ lpDuration: *const SYSTEMTIME,
+ ullDuration: ULONGLONG,
+ lpFormat: LPCWSTR,
+ lpDurationStr: LPWSTR,
+ cchDuration: c_int,
+ ) -> c_int;
+ pub fn GetDurationFormatEx(
+ lpLocaleName: LPCWSTR,
+ dwFlags: DWORD,
+ lpDuration: *const SYSTEMTIME,
+ ullDuration: ULONGLONG,
+ lpFormat: LPCWSTR,
+ lpDurationStr: LPWSTR,
+ cchDuration: c_int,
+ ) -> c_int;
+ pub fn GetFileMUIInfo(
+ dwFlags: DWORD,
+ pcwszFilePath: PCWSTR,
+ pFileMUIInfo: PFILEMUIINFO,
+ pcbFileMUIInfo: *mut DWORD,
+ ) -> BOOL;
+ pub fn GetFileMUIPath(
+ dwFlags: DWORD,
+ pcwszFilePath: PCWSTR,
+ pwszLanguage: PWSTR,
+ pcchLanguage: PULONG,
+ pwszFileMUIPath: PWSTR,
+ pcchFileMUIPath: PULONG,
+ pululEnumerator: PULONGLONG,
+ ) -> BOOL;
+ pub fn GetGeoInfoA(
+ Location: GEOID,
+ GeoType: GEOTYPE,
+ lpGeoData: LPSTR,
+ cchData: c_int,
+ LangId: LANGID,
+ ) -> c_int;
+ pub fn GetGeoInfoW(
+ Location: GEOID,
+ GeoType: GEOTYPE,
+ lpGeoData: LPWSTR,
+ cchData: c_int,
+ LangId: LANGID,
+ ) -> c_int;
+ pub fn GetLocaleInfoA(
+ Locale: LCID,
+ LCType: LCTYPE,
+ lpLCData: LPSTR,
+ cchData: c_int,
+ ) -> c_int;
+ pub fn GetLocaleInfoEx(
+ lpLocaleName: LPCWSTR,
+ LCType: LCTYPE,
+ lpLCData: LPWSTR,
+ cchData: c_int,
+ ) -> c_int;
+ pub fn GetLocaleInfoW(
+ Locale: LCID,
+ LCType: LCTYPE,
+ lpLCData: LPWSTR,
+ cchData: c_int,
+ ) -> c_int;
+ pub fn GetNLSVersion(
+ Function: NLS_FUNCTION,
+ Locale: LCID,
+ lpVersionInformation: LPNLSVERSIONINFO,
+ ) -> BOOL;
+ pub fn GetNLSVersionEx(
+ function: NLS_FUNCTION,
+ lpLocaleName: LPCWSTR,
+ lpVersionInformation: LPNLSVERSIONINFOEX,
+ ) -> BOOL;
+ pub fn GetNumberFormatA(
+ Locale: LCID,
+ dwFlags: DWORD,
+ lpValue: LPCSTR,
+ lpFormat: *const NUMBERFMTA,
+ lpNumberStr: LPSTR,
+ cchNumber: c_int,
+ ) -> c_int;
+ pub fn GetNumberFormatEx(
+ lpLocaleName: LPCWSTR,
+ dwFlags: DWORD,
+ lpValue: LPCWSTR,
+ lpFormat: *const NUMBERFMTW,
+ lpNumberStr: LPWSTR,
+ cchNumber: c_int,
+ ) -> c_int;
+ pub fn GetNumberFormatW(
+ Locale: LCID,
+ dwFlags: DWORD,
+ lpValue: LPCWSTR,
+ lpFormat: *const NUMBERFMTW,
+ lpNumberStr: LPWSTR,
+ cchNumber: c_int,
+ ) -> c_int;
+ pub fn GetOEMCP() -> UINT;
+ pub fn GetProcessPreferredUILanguages(
+ dwFlags: DWORD,
+ pulNumLanguages: PULONG,
+ pwszLanguagesBuffer: PZZWSTR,
+ pcchLanguagesBuffer: PULONG,
+ ) -> BOOL;
+ pub fn GetStringScripts(
+ dwFlags: DWORD,
+ lpString: LPCWSTR,
+ cchString: c_int,
+ lpScripts: LPWSTR,
+ cchScripts: c_int,
+ ) -> c_int;
+ pub fn GetStringTypeA(
+ Locale: LCID,
+ dwInfoType: DWORD,
+ lpSrcStr: LPCSTR,
+ cchSrc: c_int,
+ lpCharType: LPWORD,
+ ) -> BOOL;
+ pub fn GetStringTypeExA(
+ Locale: LCID,
+ dwInfoType: DWORD,
+ lpSrcStr: LPCSTR,
+ cchSrc: c_int,
+ lpCharType: LPWORD,
+ ) -> BOOL;
+ pub fn GetStringTypeW(
+ dwInfoType: DWORD,
+ lpSrcStr: LPCWCH,
+ cchSrc: c_int,
+ lpCharType: LPWORD,
+ ) -> BOOL;
+ pub fn GetSystemDefaultLCID() -> LCID;
+ pub fn GetSystemDefaultLangID() -> LANGID;
+ pub fn GetSystemDefaultLocaleName(
+ lpLocaleName: LPWSTR,
+ cchLocaleName: c_int,
+ ) -> c_int;
+ pub fn GetSystemDefaultUILanguage() -> LANGID;
+ pub fn GetSystemPreferredUILanguages(
+ dwFlags: DWORD,
+ pulNumLanguages: PULONG,
+ pwszLanguagesBuffer: PZZWSTR,
+ pcchLanguagesBuffer: PULONG,
+ ) -> BOOL;
+ pub fn GetThreadLocale() -> LCID;
+ pub fn GetThreadPreferredUILanguages(
+ dwFlags: DWORD,
+ pulNumLanguages: PULONG,
+ pwszLanguagesBuffer: PZZWSTR,
+ pcchLanguagesBuffer: PULONG,
+ ) -> BOOL;
+ pub fn GetThreadUILanguage() -> LANGID;
+ pub fn GetUILanguageInfo(
+ dwFlags: DWORD,
+ pwmszLanguage: PCZZWSTR,
+ pwszFallbackLanguages: PZZWSTR,
+ pcchFallbackLanguages: PDWORD,
+ pAttributes: PDWORD,
+ ) -> BOOL;
+ pub fn GetUserDefaultLCID() -> LCID;
+ pub fn GetUserDefaultLangID() -> LANGID;
+ pub fn GetUserDefaultLocaleName(
+ lpLocaleName: LPWSTR,
+ cchLocaleName: c_int,
+ ) -> c_int;
+ pub fn GetUserDefaultUILanguage() -> LANGID;
+ pub fn GetUserGeoID(GeoClass: GEOCLASS) -> GEOID;
+ pub fn GetUserPreferredUILanguages(
+ dwFlags: DWORD,
+ pulNumLanguages: PULONG,
+ pwszLanguagesBuffer: PZZWSTR,
+ pcchLanguagesBuffer: PULONG,
+ ) -> BOOL;
+ pub fn IsDBCSLeadByte(
+ TestChar: BYTE,
+ ) -> BOOL;
+ pub fn IsDBCSLeadByteEx(
+ CodePage: UINT,
+ TestChar: BYTE,
+ ) -> BOOL;
+ pub fn IsNLSDefinedString(
+ Function: NLS_FUNCTION,
+ dwFlags: DWORD,
+ lpVersionInformation: LPNLSVERSIONINFO,
+ lpString: LPCWSTR,
+ cchStr: INT,
+ ) -> BOOL;
+ pub fn IsNormalizedString(
+ NormForm: NORM_FORM,
+ lpString: LPCWSTR,
+ cwLength: c_int,
+ ) -> BOOL;
+ pub fn IsValidCodePage(
+ CodePage: UINT,
+ ) -> BOOL;
+ pub fn IsValidLanguageGroup(
+ LanguageGroup: LGRPID,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn IsValidLocale(
+ Locale: LCID,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn IsValidLocaleName(
+ lpLocaleName: LPCWSTR,
+ ) -> BOOL;
+ pub fn IsValidNLSVersion(
+ function: NLS_FUNCTION,
+ lpLocaleName: LPCWSTR,
+ lpVersionInformation: LPNLSVERSIONINFOEX,
+ ) -> BOOL;
+ pub fn LCIDToLocaleName(
+ Locale: LCID,
+ lpName: LPWSTR,
+ cchName: c_int,
+ dwFlags: DWORD,
+ ) -> c_int;
+ pub fn LCMapStringA(
+ Locale: LCID,
+ dwMapFlags: DWORD,
+ lpSrcStr: LPCSTR,
+ cchSrc: c_int,
+ lpDestStr: LPSTR,
+ cchDest: c_int,
+ ) -> c_int;
+ pub fn LCMapStringEx(
+ lpLocaleName: LPCWSTR,
+ dwMapFlags: DWORD,
+ lpSrcStr: LPCWSTR,
+ cchSrc: c_int,
+ lpDestStr: LPWSTR,
+ cchDest: c_int,
+ lpVersionInformation: LPNLSVERSIONINFO,
+ lpReserved: LPVOID,
+ sortHandle: LPARAM,
+ ) -> c_int;
+ pub fn LCMapStringW(
+ Locale: LCID,
+ dwMapFlags: DWORD,
+ lpSrcStr: LPCWSTR,
+ cchSrc: c_int,
+ lpDestStr: LPWSTR,
+ cchDest: c_int,
+ ) -> c_int;
+ pub fn LocaleNameToLCID(
+ lpName: LPCWSTR,
+ dwFlags: DWORD,
+ ) -> LCID;
+ pub fn NormalizeString(
+ NormForm: NORM_FORM,
+ lpSrcString: LPCWSTR,
+ cwSrcLength: c_int,
+ lpDstString: LPWSTR,
+ cwDstLength: c_int,
+ ) -> c_int;
+ pub fn NotifyUILanguageChange(
+ dwFlags: DWORD,
+ pcwstrNewLanguage: PCWSTR,
+ pcwstrPreviousLanguage: PCWSTR,
+ dwReserved: DWORD,
+ pdwStatusRtrn: PDWORD,
+ ) -> BOOL;
+ pub fn ResolveLocaleName(
+ lpNameToResolve: LPCWSTR,
+ lpLocaleName: LPWSTR,
+ cchLocaleName: c_int,
+ ) -> c_int;
+ pub fn SetCalendarInfoA(
+ Locale: LCID,
+ Calendar: CALID,
+ CalType: CALTYPE,
+ lpCalData: LPCSTR,
+ ) -> BOOL;
+ pub fn SetCalendarInfoW(
+ Locale: LCID,
+ Calendar: CALID,
+ CalType: CALTYPE,
+ lpCalData: LPCWSTR,
+ ) -> BOOL;
+ pub fn SetLocaleInfoA(
+ Locale: LCID,
+ LCType: LCTYPE,
+ lpLCData: LPCSTR,
+ ) -> BOOL;
+ pub fn SetLocaleInfoW(
+ Locale: LCID,
+ LCType: LCTYPE,
+ lpLCData: LPCWSTR,
+ ) -> BOOL;
+ pub fn SetProcessPreferredUILanguages(
+ dwFlags: DWORD,
+ pwszLanguagesBuffer: PCZZWSTR,
+ pulNumLanguages: PULONG,
+ ) -> BOOL;
+ pub fn SetThreadLocale(Locale: LCID) -> BOOL;
+ pub fn SetThreadPreferredUILanguages(
+ dwFlags: DWORD,
+ pwszLanguagesBuffer: PCZZWSTR,
+ pulNumLanguages: PULONG,
+ ) -> BOOL;
+ pub fn SetThreadUILanguage(LangId: LANGID) -> LANGID;
+ pub fn SetUserGeoID(GeoId: GEOID) -> BOOL;
+ pub fn VerifyScripts(
+ dwFlags: DWORD,
+ lpLocaleScripts: LPCWSTR,
+ cchLocaleScripts: c_int,
+ lpTestScripts: LPCWSTR,
+ cchTestScripts: c_int,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/winnt.rs b/vendor/winapi/src/um/winnt.rs
new file mode 100644
index 000000000..f687489bd
--- /dev/null
+++ b/vendor/winapi/src/um/winnt.rs
@@ -0,0 +1,8648 @@
+// 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.
+//! This module defines the 32-Bit Windows types and constants that are defined by NT, but exposed
+//! through the Win32 API.
+use ctypes::{__int64, __uint64, c_char, c_int, c_long, c_short, c_uint, c_ulong, c_void, wchar_t};
+use shared::basetsd::{
+ DWORD64, KAFFINITY, LONG64, LONG_PTR, PDWORD64, PLONG64, SIZE_T, ULONG64, ULONG_PTR,
+};
+use shared::guiddef::{CLSID, GUID};
+use shared::ktmtypes::UOW;
+use shared::minwindef::{BYTE, DWORD, FALSE, PDWORD, TRUE, ULONG, USHORT, WORD};
+#[cfg(target_arch = "aarch64")]
+use shared::minwindef::PBYTE;
+use vc::excpt::EXCEPTION_DISPOSITION;
+use vc::vcruntime::size_t;
+pub const ANYSIZE_ARRAY: usize = 1;
+#[cfg(target_pointer_width = "32")]
+IFDEF!{
+pub const MAX_NATURAL_ALIGNMENT: usize = 4;
+pub const MEMORY_ALLOCATION_ALIGNMENT: usize = 8;
+}
+#[cfg(target_pointer_width = "64")]
+IFDEF!{
+pub const MAX_NATURAL_ALIGNMENT: usize = 8;
+pub const MEMORY_ALLOCATION_ALIGNMENT: usize = 16;
+}
+pub const SYSTEM_CACHE_ALIGNMENT_SIZE: usize = 64;
+pub type PVOID = *mut c_void;
+pub type PVOID64 = u64; // This is a 64-bit pointer, even when in 32-bit
+pub type VOID = c_void;
+pub type CHAR = c_char;
+pub type SHORT = c_short;
+pub type LONG = c_long;
+pub type INT = c_int;
+pub type WCHAR = wchar_t;
+pub type PWCHAR = *mut WCHAR;
+pub type LPWCH = *mut WCHAR;
+pub type PWCH = *mut WCHAR;
+pub type LPCWCH = *const WCHAR;
+pub type PCWCH = *const WCHAR;
+pub type NWPSTR = *mut WCHAR;
+pub type LPWSTR = *mut WCHAR;
+pub type PWSTR = *mut WCHAR;
+pub type PZPWSTR = *mut PWSTR;
+pub type PCZPWSTR = *const PWSTR;
+pub type LPUWSTR = *mut WCHAR; // Unaligned pointer
+pub type PUWSTR = *mut WCHAR; // Unaligned pointer
+pub type LPCWSTR = *const WCHAR;
+pub type PCWSTR = *const WCHAR;
+pub type PZPCWSTR = *mut PCWSTR;
+pub type PCZPCWSTR = *const PCWSTR;
+pub type LPCUWSTR = *const WCHAR; // Unaligned pointer
+pub type PCUWSTR = *const WCHAR; // Unaligned pointer
+pub type PZZWSTR = *mut WCHAR;
+pub type PCZZWSTR = *const WCHAR;
+pub type PUZZWSTR = *mut WCHAR; // Unaligned pointer
+pub type PCUZZWSTR = *const WCHAR; // Unaligned pointer
+pub type PNZWCH = *mut WCHAR;
+pub type PCNZWCH = *const WCHAR;
+pub type PUNZWCH = *mut WCHAR; // Unaligned pointer
+pub type PCUNZWCH = *const WCHAR; // Unaligned pointer
+pub type LPCWCHAR = *const WCHAR;
+pub type PCWCHAR = *const WCHAR;
+pub type LPCUWCHAR = *const WCHAR; // Unaligned pointer
+pub type PCUWCHAR = *const WCHAR; // Unaligned pointer
+pub type UCSCHAR = c_ulong;
+pub const UCSCHAR_INVALID_CHARACTER: UCSCHAR = 0xffffffff;
+pub const MIN_UCSCHAR: UCSCHAR = 0;
+pub const MAX_UCSCHAR: UCSCHAR = 0x0010FFFF;
+pub type PUCSCHAR = *mut UCSCHAR;
+pub type PCUCSCHAR = *const UCSCHAR;
+pub type PUCSSTR = *mut UCSCHAR;
+pub type PUUCSSTR = *mut UCSCHAR; // Unaligned pointer
+pub type PCUCSSTR = *const UCSCHAR;
+pub type PCUUCSSTR = *const UCSCHAR; // Unaligned pointer
+pub type PUUCSCHAR = *mut UCSCHAR; // Unaligned pointer
+pub type PCUUCSCHAR = *const UCSCHAR; // Unaligned pointer
+pub type PCHAR = *mut CHAR;
+pub type LPCH = *mut CHAR;
+pub type PCH = *mut CHAR;
+pub type LPCCH = *const CHAR;
+pub type PCCH = *const CHAR;
+pub type NPSTR = *mut CHAR;
+pub type LPSTR = *mut CHAR;
+pub type PSTR = *mut CHAR;
+pub type PZPSTR = *mut PSTR;
+pub type PCZPSTR = *const PSTR;
+pub type LPCSTR = *const CHAR;
+pub type PCSTR = *const CHAR;
+pub type PZPCSTR = *mut PCSTR;
+pub type PCZPCSTR = *const PCSTR;
+pub type PZZSTR = *mut CHAR;
+pub type PCZZSTR = *const CHAR;
+pub type PNZCH = *mut CHAR;
+pub type PCNZCH = *const CHAR;
+// Skipping TCHAR things
+pub type PSHORT = *mut SHORT;
+pub type PLONG = *mut LONG;
+pub const ALL_PROCESSOR_GROUPS: WORD = 0xffff;
+STRUCT!{struct PROCESSOR_NUMBER {
+ Group: WORD,
+ Number: BYTE,
+ Reserved: BYTE,
+}}
+pub type PPROCESSOR_NUMBER = *mut PROCESSOR_NUMBER;
+STRUCT!{struct GROUP_AFFINITY {
+ Mask: KAFFINITY,
+ Group: WORD,
+ Reserved: [WORD; 3],
+}}
+pub type PGROUP_AFFINITY = *mut GROUP_AFFINITY;
+#[cfg(target_pointer_width = "32")]
+pub const MAXIMUM_PROC_PER_GROUP: BYTE = 32;
+#[cfg(target_pointer_width = "64")]
+pub const MAXIMUM_PROC_PER_GROUP: BYTE = 64;
+pub const MAXIMUM_PROCESSORS: BYTE = MAXIMUM_PROC_PER_GROUP;
+pub type HANDLE = *mut c_void;
+pub type PHANDLE = *mut HANDLE;
+pub type FCHAR = BYTE;
+pub type FSHORT = WORD;
+pub type FLONG = DWORD;
+pub type HRESULT = c_long;
+pub type CCHAR = c_char;
+pub type LCID = DWORD;
+pub type PLCID = PDWORD;
+pub type LANGID = WORD;
+ENUM!{enum COMPARTMENT_ID {
+ UNSPECIFIED_COMPARTMENT_ID = 0,
+ DEFAULT_COMPARTMENT_ID,
+}}
+pub type PCOMPARTMENT_ID = *mut COMPARTMENT_ID;
+pub const APPLICATION_ERROR_MASK: DWORD = 0x20000000;
+pub const ERROR_SEVERITY_SUCCESS: DWORD = 0x00000000;
+pub const ERROR_SEVERITY_INFORMATIONAL: DWORD = 0x40000000;
+pub const ERROR_SEVERITY_WARNING: DWORD = 0x80000000;
+pub const ERROR_SEVERITY_ERROR: DWORD = 0xC0000000;
+STRUCT!{struct FLOAT128 {
+ LowPart: __int64,
+ HighPart: __int64,
+}}
+pub type PFLOAT128 = *mut FLOAT128;
+pub type LONGLONG = __int64;
+pub type ULONGLONG = __uint64;
+pub const MAXLONGLONG: LONGLONG = 0x7fffffffffffffff;
+pub type PLONGLONG = *mut LONGLONG;
+pub type PULONGLONG = *mut ULONGLONG;
+pub type USN = LONGLONG;
+pub use shared::ntdef::LARGE_INTEGER;
+pub type PLARGE_INTEGER = *mut LARGE_INTEGER;
+pub use shared::ntdef::ULARGE_INTEGER;
+pub type PULARGE_INTEGER = *mut ULARGE_INTEGER;
+pub type RTL_REFERENCE_COUNT = LONG_PTR;
+pub type PRTL_REFERENCE_COUNT = *mut LONG_PTR;
+pub type RTL_REFERENCE_COUNT32 = LONG;
+pub type PRTL_REFERENCE_COUNT32 = *mut LONG;
+pub use shared::ntdef::LUID;
+pub type PLUID = *mut LUID;
+pub type DWORDLONG = ULONGLONG;
+pub type PDWORDLONG = *mut DWORDLONG;
+pub const ANSI_NULL: CHAR = 0;
+pub const UNICODE_NULL: WCHAR = 0;
+pub const UNICODE_STRING_MAX_BYTES: WORD = 65534;
+pub const UNICODE_STRING_MAX_CHARS: WORD = 32767;
+pub type BOOLEAN = BYTE;
+pub type PBOOLEAN = *mut BOOLEAN;
+STRUCT!{struct LIST_ENTRY {
+ Flink: *mut LIST_ENTRY,
+ Blink: *mut LIST_ENTRY,
+}}
+pub type PLIST_ENTRY = *mut LIST_ENTRY;
+pub type PRLIST_ENTRY = *mut LIST_ENTRY; // Restricted pointer
+STRUCT!{struct SINGLE_LIST_ENTRY {
+ Next: *mut SINGLE_LIST_ENTRY,
+}}
+pub type PSINGLE_LIST_ENTRY = *mut SINGLE_LIST_ENTRY;
+STRUCT!{struct LIST_ENTRY32 {
+ Flink: DWORD,
+ Blink: DWORD,
+}}
+pub type PLIST_ENTRY32 = *mut LIST_ENTRY32;
+STRUCT!{struct LIST_ENTRY64 {
+ Flink: ULONGLONG,
+ Blink: ULONGLONG,
+}}
+pub type PLIST_ENTRY64 = *mut LIST_ENTRY64;
+STRUCT!{struct OBJECTID {
+ Lineage: GUID,
+ Uniquifier: DWORD,
+}}
+pub const MINCHAR: CHAR = 0x80;
+pub const MAXCHAR: CHAR = 0x7f;
+pub const MINSHORT: SHORT = 0x8000;
+pub const MAXSHORT: SHORT = 0x7fff;
+pub const MINLONG: LONG = 0x80000000;
+pub const MAXLONG: LONG = 0x7fffffff;
+pub const MAXBYTE: BYTE = 0xff;
+pub const MAXWORD: WORD = 0xffff;
+pub const MAXDWORD: DWORD = 0xffffffff;
+FN!{stdcall PEXCEPTION_ROUTINE(
+ ExceptionRecord: *mut EXCEPTION_RECORD,
+ EstablisherFrame: PVOID,
+ ContextRecord: *mut CONTEXT,
+ DispatcherContext: PVOID,
+) -> EXCEPTION_DISPOSITION}
+pub const VER_SERVER_NT: DWORD = 0x80000000;
+pub const VER_WORKSTATION_NT: DWORD = 0x40000000;
+pub const VER_SUITE_SMALLBUSINESS: DWORD = 0x00000001;
+pub const VER_SUITE_ENTERPRISE: DWORD = 0x00000002;
+pub const VER_SUITE_BACKOFFICE: DWORD = 0x00000004;
+pub const VER_SUITE_COMMUNICATIONS: DWORD = 0x00000008;
+pub const VER_SUITE_TERMINAL: DWORD = 0x00000010;
+pub const VER_SUITE_SMALLBUSINESS_RESTRICTED: DWORD = 0x00000020;
+pub const VER_SUITE_EMBEDDEDNT: DWORD = 0x00000040;
+pub const VER_SUITE_DATACENTER: DWORD = 0x00000080;
+pub const VER_SUITE_SINGLEUSERTS: DWORD = 0x00000100;
+pub const VER_SUITE_PERSONAL: DWORD = 0x00000200;
+pub const VER_SUITE_BLADE: DWORD = 0x00000400;
+pub const VER_SUITE_EMBEDDED_RESTRICTED: DWORD = 0x00000800;
+pub const VER_SUITE_SECURITY_APPLIANCE: DWORD = 0x00001000;
+pub const VER_SUITE_STORAGE_SERVER: DWORD = 0x00002000;
+pub const VER_SUITE_COMPUTE_SERVER: DWORD = 0x00004000;
+pub const VER_SUITE_WH_SERVER: DWORD = 0x00008000;
+pub const PRODUCT_UNDEFINED: DWORD = 0x00000000;
+pub const PRODUCT_ULTIMATE: DWORD = 0x00000001;
+pub const PRODUCT_HOME_BASIC: DWORD = 0x00000002;
+pub const PRODUCT_HOME_PREMIUM: DWORD = 0x00000003;
+pub const PRODUCT_ENTERPRISE: DWORD = 0x00000004;
+pub const PRODUCT_HOME_BASIC_N: DWORD = 0x00000005;
+pub const PRODUCT_BUSINESS: DWORD = 0x00000006;
+pub const PRODUCT_STANDARD_SERVER: DWORD = 0x00000007;
+pub const PRODUCT_DATACENTER_SERVER: DWORD = 0x00000008;
+pub const PRODUCT_SMALLBUSINESS_SERVER: DWORD = 0x00000009;
+pub const PRODUCT_ENTERPRISE_SERVER: DWORD = 0x0000000A;
+pub const PRODUCT_STARTER: DWORD = 0x0000000B;
+pub const PRODUCT_DATACENTER_SERVER_CORE: DWORD = 0x0000000C;
+pub const PRODUCT_STANDARD_SERVER_CORE: DWORD = 0x0000000D;
+pub const PRODUCT_ENTERPRISE_SERVER_CORE: DWORD = 0x0000000E;
+pub const PRODUCT_ENTERPRISE_SERVER_IA64: DWORD = 0x0000000F;
+pub const PRODUCT_BUSINESS_N: DWORD = 0x00000010;
+pub const PRODUCT_WEB_SERVER: DWORD = 0x00000011;
+pub const PRODUCT_CLUSTER_SERVER: DWORD = 0x00000012;
+pub const PRODUCT_HOME_SERVER: DWORD = 0x00000013;
+pub const PRODUCT_STORAGE_EXPRESS_SERVER: DWORD = 0x00000014;
+pub const PRODUCT_STORAGE_STANDARD_SERVER: DWORD = 0x00000015;
+pub const PRODUCT_STORAGE_WORKGROUP_SERVER: DWORD = 0x00000016;
+pub const PRODUCT_STORAGE_ENTERPRISE_SERVER: DWORD = 0x00000017;
+pub const PRODUCT_SERVER_FOR_SMALLBUSINESS: DWORD = 0x00000018;
+pub const PRODUCT_SMALLBUSINESS_SERVER_PREMIUM: DWORD = 0x00000019;
+pub const PRODUCT_HOME_PREMIUM_N: DWORD = 0x0000001A;
+pub const PRODUCT_ENTERPRISE_N: DWORD = 0x0000001B;
+pub const PRODUCT_ULTIMATE_N: DWORD = 0x0000001C;
+pub const PRODUCT_WEB_SERVER_CORE: DWORD = 0x0000001D;
+pub const PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT: DWORD = 0x0000001E;
+pub const PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY: DWORD = 0x0000001F;
+pub const PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING: DWORD = 0x00000020;
+pub const PRODUCT_SERVER_FOUNDATION: DWORD = 0x00000021;
+pub const PRODUCT_HOME_PREMIUM_SERVER: DWORD = 0x00000022;
+pub const PRODUCT_SERVER_FOR_SMALLBUSINESS_V: DWORD = 0x00000023;
+pub const PRODUCT_STANDARD_SERVER_V: DWORD = 0x00000024;
+pub const PRODUCT_DATACENTER_SERVER_V: DWORD = 0x00000025;
+pub const PRODUCT_ENTERPRISE_SERVER_V: DWORD = 0x00000026;
+pub const PRODUCT_DATACENTER_SERVER_CORE_V: DWORD = 0x00000027;
+pub const PRODUCT_STANDARD_SERVER_CORE_V: DWORD = 0x00000028;
+pub const PRODUCT_ENTERPRISE_SERVER_CORE_V: DWORD = 0x00000029;
+pub const PRODUCT_HYPERV: DWORD = 0x0000002A;
+pub const PRODUCT_STORAGE_EXPRESS_SERVER_CORE: DWORD = 0x0000002B;
+pub const PRODUCT_STORAGE_STANDARD_SERVER_CORE: DWORD = 0x0000002C;
+pub const PRODUCT_STORAGE_WORKGROUP_SERVER_CORE: DWORD = 0x0000002D;
+pub const PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE: DWORD = 0x0000002E;
+pub const PRODUCT_STARTER_N: DWORD = 0x0000002F;
+pub const PRODUCT_PROFESSIONAL: DWORD = 0x00000030;
+pub const PRODUCT_PROFESSIONAL_N: DWORD = 0x00000031;
+pub const PRODUCT_SB_SOLUTION_SERVER: DWORD = 0x00000032;
+pub const PRODUCT_SERVER_FOR_SB_SOLUTIONS: DWORD = 0x00000033;
+pub const PRODUCT_STANDARD_SERVER_SOLUTIONS: DWORD = 0x00000034;
+pub const PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE: DWORD = 0x00000035;
+pub const PRODUCT_SB_SOLUTION_SERVER_EM: DWORD = 0x00000036;
+pub const PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM: DWORD = 0x00000037;
+pub const PRODUCT_SOLUTION_EMBEDDEDSERVER: DWORD = 0x00000038;
+pub const PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE: DWORD = 0x00000039;
+pub const PRODUCT_PROFESSIONAL_EMBEDDED: DWORD = 0x0000003A;
+pub const PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT: DWORD = 0x0000003B;
+pub const PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL: DWORD = 0x0000003C;
+pub const PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC: DWORD = 0x0000003D;
+pub const PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC: DWORD = 0x0000003E;
+pub const PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE: DWORD = 0x0000003F;
+pub const PRODUCT_CLUSTER_SERVER_V: DWORD = 0x00000040;
+pub const PRODUCT_EMBEDDED: DWORD = 0x00000041;
+pub const PRODUCT_STARTER_E: DWORD = 0x00000042;
+pub const PRODUCT_HOME_BASIC_E: DWORD = 0x00000043;
+pub const PRODUCT_HOME_PREMIUM_E: DWORD = 0x00000044;
+pub const PRODUCT_PROFESSIONAL_E: DWORD = 0x00000045;
+pub const PRODUCT_ENTERPRISE_E: DWORD = 0x00000046;
+pub const PRODUCT_ULTIMATE_E: DWORD = 0x00000047;
+pub const PRODUCT_ENTERPRISE_EVALUATION: DWORD = 0x00000048;
+pub const PRODUCT_MULTIPOINT_STANDARD_SERVER: DWORD = 0x0000004C;
+pub const PRODUCT_MULTIPOINT_PREMIUM_SERVER: DWORD = 0x0000004D;
+pub const PRODUCT_STANDARD_EVALUATION_SERVER: DWORD = 0x0000004F;
+pub const PRODUCT_DATACENTER_EVALUATION_SERVER: DWORD = 0x00000050;
+pub const PRODUCT_ENTERPRISE_N_EVALUATION: DWORD = 0x00000054;
+pub const PRODUCT_EMBEDDED_AUTOMOTIVE: DWORD = 0x00000055;
+pub const PRODUCT_EMBEDDED_INDUSTRY_A: DWORD = 0x00000056;
+pub const PRODUCT_THINPC: DWORD = 0x00000057;
+pub const PRODUCT_EMBEDDED_A: DWORD = 0x00000058;
+pub const PRODUCT_EMBEDDED_INDUSTRY: DWORD = 0x00000059;
+pub const PRODUCT_EMBEDDED_E: DWORD = 0x0000005A;
+pub const PRODUCT_EMBEDDED_INDUSTRY_E: DWORD = 0x0000005B;
+pub const PRODUCT_EMBEDDED_INDUSTRY_A_E: DWORD = 0x0000005C;
+pub const PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER: DWORD = 0x0000005F;
+pub const PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER: DWORD = 0x00000060;
+pub const PRODUCT_CORE_ARM: DWORD = 0x00000061;
+pub const PRODUCT_CORE_N: DWORD = 0x00000062;
+pub const PRODUCT_CORE_COUNTRYSPECIFIC: DWORD = 0x00000063;
+pub const PRODUCT_CORE_SINGLELANGUAGE: DWORD = 0x00000064;
+pub const PRODUCT_CORE: DWORD = 0x00000065;
+pub const PRODUCT_PROFESSIONAL_WMC: DWORD = 0x00000067;
+pub const PRODUCT_MOBILE_CORE: DWORD = 0x00000068;
+pub const PRODUCT_EMBEDDED_INDUSTRY_EVAL: DWORD = 0x00000069;
+pub const PRODUCT_EMBEDDED_INDUSTRY_E_EVAL: DWORD = 0x0000006A;
+pub const PRODUCT_EMBEDDED_EVAL: DWORD = 0x0000006B;
+pub const PRODUCT_EMBEDDED_E_EVAL: DWORD = 0x0000006C;
+pub const PRODUCT_NANO_SERVER: DWORD = 0x0000006D;
+pub const PRODUCT_CLOUD_STORAGE_SERVER: DWORD = 0x0000006E;
+pub const PRODUCT_CORE_CONNECTED: DWORD = 0x0000006F;
+pub const PRODUCT_PROFESSIONAL_STUDENT: DWORD = 0x00000070;
+pub const PRODUCT_CORE_CONNECTED_N: DWORD = 0x00000071;
+pub const PRODUCT_PROFESSIONAL_STUDENT_N: DWORD = 0x00000072;
+pub const PRODUCT_CORE_CONNECTED_SINGLELANGUAGE: DWORD = 0x00000073;
+pub const PRODUCT_CORE_CONNECTED_COUNTRYSPECIFIC: DWORD = 0x00000074;
+pub const PRODUCT_CONNECTED_CAR: DWORD = 0x00000075;
+pub const PRODUCT_INDUSTRY_HANDHELD: DWORD = 0x00000076;
+pub const PRODUCT_PPI_PRO: DWORD = 0x00000077;
+pub const PRODUCT_ARM64_SERVER: DWORD = 0x00000078;
+pub const PRODUCT_EDUCATION: DWORD = 0x00000079;
+pub const PRODUCT_EDUCATION_N: DWORD = 0x0000007A;
+pub const PRODUCT_IOTUAP: DWORD = 0x0000007B;
+pub const PRODUCT_CLOUD_HOST_INFRASTRUCTURE_SERVER: DWORD = 0x0000007C;
+pub const PRODUCT_ENTERPRISE_S: DWORD = 0x0000007D;
+pub const PRODUCT_ENTERPRISE_S_N: DWORD = 0x0000007E;
+pub const PRODUCT_PROFESSIONAL_S: DWORD = 0x0000007F;
+pub const PRODUCT_PROFESSIONAL_S_N: DWORD = 0x00000080;
+pub const PRODUCT_ENTERPRISE_S_EVALUATION: DWORD = 0x00000081;
+pub const PRODUCT_ENTERPRISE_S_N_EVALUATION: DWORD = 0x00000082;
+pub const PRODUCT_HOLOGRAPHIC: DWORD = 0x00000087;
+pub const PRODUCT_PRO_SINGLE_LANGUAGE: DWORD = 0x0000008A;
+pub const PRODUCT_PRO_CHINA: DWORD = 0x0000008B;
+pub const PRODUCT_ENTERPRISE_SUBSCRIPTION: DWORD = 0x0000008C;
+pub const PRODUCT_ENTERPRISE_SUBSCRIPTION_N: DWORD = 0x0000008D;
+pub const PRODUCT_DATACENTER_NANO_SERVER: DWORD = 0x0000008F;
+pub const PRODUCT_STANDARD_NANO_SERVER: DWORD = 0x00000090;
+pub const PRODUCT_DATACENTER_A_SERVER_CORE: DWORD = 0x00000091;
+pub const PRODUCT_STANDARD_A_SERVER_CORE: DWORD = 0x00000092;
+pub const PRODUCT_DATACENTER_WS_SERVER_CORE: DWORD = 0x00000093;
+pub const PRODUCT_STANDARD_WS_SERVER_CORE: DWORD = 0x00000094;
+pub const PRODUCT_UTILITY_VM: DWORD = 0x00000095;
+pub const PRODUCT_DATACENTER_EVALUATION_SERVER_CORE: DWORD = 0x0000009F;
+pub const PRODUCT_STANDARD_EVALUATION_SERVER_CORE: DWORD = 0x000000A0;
+pub const PRODUCT_PRO_WORKSTATION: DWORD = 0x000000A1;
+pub const PRODUCT_PRO_WORKSTATION_N: DWORD = 0x000000A2;
+pub const PRODUCT_PRO_FOR_EDUCATION: DWORD = 0x000000A4;
+pub const PRODUCT_PRO_FOR_EDUCATION_N: DWORD = 0x000000A5;
+pub const PRODUCT_AZURE_SERVER_CORE: DWORD = 0x000000A8;
+pub const PRODUCT_AZURE_NANO_SERVER: DWORD = 0x000000A9;
+pub const PRODUCT_ENTERPRISEG: DWORD = 0x000000AB;
+pub const PRODUCT_ENTERPRISEGN: DWORD = 0x000000AC;
+pub const PRODUCT_CLOUD: DWORD = 0x000000B2;
+pub const PRODUCT_CLOUDN: DWORD = 0x000000B3;
+pub const PRODUCT_UNLICENSED: DWORD = 0xABCDABCD;
+pub const LANG_NEUTRAL: WORD = 0x00;
+pub const LANG_INVARIANT: WORD = 0x7f;
+pub const LANG_AFRIKAANS: WORD = 0x36;
+pub const LANG_ALBANIAN: WORD = 0x1c;
+pub const LANG_ALSATIAN: WORD = 0x84;
+pub const LANG_AMHARIC: WORD = 0x5e;
+pub const LANG_ARABIC: WORD = 0x01;
+pub const LANG_ARMENIAN: WORD = 0x2b;
+pub const LANG_ASSAMESE: WORD = 0x4d;
+pub const LANG_AZERI: WORD = 0x2c;
+pub const LANG_AZERBAIJANI: WORD = 0x2c;
+pub const LANG_BANGLA: WORD = 0x45;
+pub const LANG_BASHKIR: WORD = 0x6d;
+pub const LANG_BASQUE: WORD = 0x2d;
+pub const LANG_BELARUSIAN: WORD = 0x23;
+pub const LANG_BENGALI: WORD = 0x45;
+pub const LANG_BRETON: WORD = 0x7e;
+pub const LANG_BOSNIAN: WORD = 0x1a;
+pub const LANG_BOSNIAN_NEUTRAL: WORD = 0x781a;
+pub const LANG_BULGARIAN: WORD = 0x02;
+pub const LANG_CATALAN: WORD = 0x03;
+pub const LANG_CENTRAL_KURDISH: WORD = 0x92;
+pub const LANG_CHEROKEE: WORD = 0x5c;
+pub const LANG_CHINESE: WORD = 0x04;
+pub const LANG_CHINESE_SIMPLIFIED: WORD = 0x04;
+pub const LANG_CHINESE_TRADITIONAL: WORD = 0x7c04;
+pub const LANG_CORSICAN: WORD = 0x83;
+pub const LANG_CROATIAN: WORD = 0x1a;
+pub const LANG_CZECH: WORD = 0x05;
+pub const LANG_DANISH: WORD = 0x06;
+pub const LANG_DARI: WORD = 0x8c;
+pub const LANG_DIVEHI: WORD = 0x65;
+pub const LANG_DUTCH: WORD = 0x13;
+pub const LANG_ENGLISH: WORD = 0x09;
+pub const LANG_ESTONIAN: WORD = 0x25;
+pub const LANG_FAEROESE: WORD = 0x38;
+pub const LANG_FARSI: WORD = 0x29;
+pub const LANG_FILIPINO: WORD = 0x64;
+pub const LANG_FINNISH: WORD = 0x0b;
+pub const LANG_FRENCH: WORD = 0x0c;
+pub const LANG_FRISIAN: WORD = 0x62;
+pub const LANG_FULAH: WORD = 0x67;
+pub const LANG_GALICIAN: WORD = 0x56;
+pub const LANG_GEORGIAN: WORD = 0x37;
+pub const LANG_GERMAN: WORD = 0x07;
+pub const LANG_GREEK: WORD = 0x08;
+pub const LANG_GREENLANDIC: WORD = 0x6f;
+pub const LANG_GUJARATI: WORD = 0x47;
+pub const LANG_HAUSA: WORD = 0x68;
+pub const LANG_HAWAIIAN: WORD = 0x75;
+pub const LANG_HEBREW: WORD = 0x0d;
+pub const LANG_HINDI: WORD = 0x39;
+pub const LANG_HUNGARIAN: WORD = 0x0e;
+pub const LANG_ICELANDIC: WORD = 0x0f;
+pub const LANG_IGBO: WORD = 0x70;
+pub const LANG_INDONESIAN: WORD = 0x21;
+pub const LANG_INUKTITUT: WORD = 0x5d;
+pub const LANG_IRISH: WORD = 0x3c;
+pub const LANG_ITALIAN: WORD = 0x10;
+pub const LANG_JAPANESE: WORD = 0x11;
+pub const LANG_KANNADA: WORD = 0x4b;
+pub const LANG_KASHMIRI: WORD = 0x60;
+pub const LANG_KAZAK: WORD = 0x3f;
+pub const LANG_KHMER: WORD = 0x53;
+pub const LANG_KICHE: WORD = 0x86;
+pub const LANG_KINYARWANDA: WORD = 0x87;
+pub const LANG_KONKANI: WORD = 0x57;
+pub const LANG_KOREAN: WORD = 0x12;
+pub const LANG_KYRGYZ: WORD = 0x40;
+pub const LANG_LAO: WORD = 0x54;
+pub const LANG_LATVIAN: WORD = 0x26;
+pub const LANG_LITHUANIAN: WORD = 0x27;
+pub const LANG_LOWER_SORBIAN: WORD = 0x2e;
+pub const LANG_LUXEMBOURGISH: WORD = 0x6e;
+pub const LANG_MACEDONIAN: WORD = 0x2f;
+pub const LANG_MALAY: WORD = 0x3e;
+pub const LANG_MALAYALAM: WORD = 0x4c;
+pub const LANG_MALTESE: WORD = 0x3a;
+pub const LANG_MANIPURI: WORD = 0x58;
+pub const LANG_MAORI: WORD = 0x81;
+pub const LANG_MAPUDUNGUN: WORD = 0x7a;
+pub const LANG_MARATHI: WORD = 0x4e;
+pub const LANG_MOHAWK: WORD = 0x7c;
+pub const LANG_MONGOLIAN: WORD = 0x50;
+pub const LANG_NEPALI: WORD = 0x61;
+pub const LANG_NORWEGIAN: WORD = 0x14;
+pub const LANG_OCCITAN: WORD = 0x82;
+pub const LANG_ODIA: WORD = 0x48;
+pub const LANG_ORIYA: WORD = 0x48;
+pub const LANG_PASHTO: WORD = 0x63;
+pub const LANG_PERSIAN: WORD = 0x29;
+pub const LANG_POLISH: WORD = 0x15;
+pub const LANG_PORTUGUESE: WORD = 0x16;
+pub const LANG_PULAR: WORD = 0x67;
+pub const LANG_PUNJABI: WORD = 0x46;
+pub const LANG_QUECHUA: WORD = 0x6b;
+pub const LANG_ROMANIAN: WORD = 0x18;
+pub const LANG_ROMANSH: WORD = 0x17;
+pub const LANG_RUSSIAN: WORD = 0x19;
+pub const LANG_SAKHA: WORD = 0x85;
+pub const LANG_SAMI: WORD = 0x3b;
+pub const LANG_SANSKRIT: WORD = 0x4f;
+pub const LANG_SCOTTISH_GAELIC: WORD = 0x91;
+pub const LANG_SERBIAN: WORD = 0x1a;
+pub const LANG_SERBIAN_NEUTRAL: WORD = 0x7c1a;
+pub const LANG_SINDHI: WORD = 0x59;
+pub const LANG_SINHALESE: WORD = 0x5b;
+pub const LANG_SLOVAK: WORD = 0x1b;
+pub const LANG_SLOVENIAN: WORD = 0x24;
+pub const LANG_SOTHO: WORD = 0x6c;
+pub const LANG_SPANISH: WORD = 0x0a;
+pub const LANG_SWAHILI: WORD = 0x41;
+pub const LANG_SWEDISH: WORD = 0x1d;
+pub const LANG_SYRIAC: WORD = 0x5a;
+pub const LANG_TAJIK: WORD = 0x28;
+pub const LANG_TAMAZIGHT: WORD = 0x5f;
+pub const LANG_TAMIL: WORD = 0x49;
+pub const LANG_TATAR: WORD = 0x44;
+pub const LANG_TELUGU: WORD = 0x4a;
+pub const LANG_THAI: WORD = 0x1e;
+pub const LANG_TIBETAN: WORD = 0x51;
+pub const LANG_TIGRIGNA: WORD = 0x73;
+pub const LANG_TIGRINYA: WORD = 0x73;
+pub const LANG_TSWANA: WORD = 0x32;
+pub const LANG_TURKISH: WORD = 0x1f;
+pub const LANG_TURKMEN: WORD = 0x42;
+pub const LANG_UIGHUR: WORD = 0x80;
+pub const LANG_UKRAINIAN: WORD = 0x22;
+pub const LANG_UPPER_SORBIAN: WORD = 0x2e;
+pub const LANG_URDU: WORD = 0x20;
+pub const LANG_UZBEK: WORD = 0x43;
+pub const LANG_VALENCIAN: WORD = 0x03;
+pub const LANG_VIETNAMESE: WORD = 0x2a;
+pub const LANG_WELSH: WORD = 0x52;
+pub const LANG_WOLOF: WORD = 0x88;
+pub const LANG_XHOSA: WORD = 0x34;
+pub const LANG_YAKUT: WORD = 0x85;
+pub const LANG_YI: WORD = 0x78;
+pub const LANG_YORUBA: WORD = 0x6a;
+pub const LANG_ZULU: WORD = 0x35;
+pub const SUBLANG_NEUTRAL: WORD = 0x00;
+pub const SUBLANG_DEFAULT: WORD = 0x01;
+pub const SUBLANG_SYS_DEFAULT: WORD = 0x02;
+pub const SUBLANG_CUSTOM_DEFAULT: WORD = 0x03;
+pub const SUBLANG_CUSTOM_UNSPECIFIED: WORD = 0x04;
+pub const SUBLANG_UI_CUSTOM_DEFAULT: WORD = 0x05;
+pub const SUBLANG_AFRIKAANS_SOUTH_AFRICA: WORD = 0x01;
+pub const SUBLANG_ALBANIAN_ALBANIA: WORD = 0x01;
+pub const SUBLANG_ALSATIAN_FRANCE: WORD = 0x01;
+pub const SUBLANG_AMHARIC_ETHIOPIA: WORD = 0x01;
+pub const SUBLANG_ARABIC_SAUDI_ARABIA: WORD = 0x01;
+pub const SUBLANG_ARABIC_IRAQ: WORD = 0x02;
+pub const SUBLANG_ARABIC_EGYPT: WORD = 0x03;
+pub const SUBLANG_ARABIC_LIBYA: WORD = 0x04;
+pub const SUBLANG_ARABIC_ALGERIA: WORD = 0x05;
+pub const SUBLANG_ARABIC_MOROCCO: WORD = 0x06;
+pub const SUBLANG_ARABIC_TUNISIA: WORD = 0x07;
+pub const SUBLANG_ARABIC_OMAN: WORD = 0x08;
+pub const SUBLANG_ARABIC_YEMEN: WORD = 0x09;
+pub const SUBLANG_ARABIC_SYRIA: WORD = 0x0a;
+pub const SUBLANG_ARABIC_JORDAN: WORD = 0x0b;
+pub const SUBLANG_ARABIC_LEBANON: WORD = 0x0c;
+pub const SUBLANG_ARABIC_KUWAIT: WORD = 0x0d;
+pub const SUBLANG_ARABIC_UAE: WORD = 0x0e;
+pub const SUBLANG_ARABIC_BAHRAIN: WORD = 0x0f;
+pub const SUBLANG_ARABIC_QATAR: WORD = 0x10;
+pub const SUBLANG_ARMENIAN_ARMENIA: WORD = 0x01;
+pub const SUBLANG_ASSAMESE_INDIA: WORD = 0x01;
+pub const SUBLANG_AZERI_LATIN: WORD = 0x01;
+pub const SUBLANG_AZERI_CYRILLIC: WORD = 0x02;
+pub const SUBLANG_AZERBAIJANI_AZERBAIJAN_LATIN: WORD = 0x01;
+pub const SUBLANG_AZERBAIJANI_AZERBAIJAN_CYRILLIC: WORD = 0x02;
+pub const SUBLANG_BANGLA_INDIA: WORD = 0x01;
+pub const SUBLANG_BANGLA_BANGLADESH: WORD = 0x02;
+pub const SUBLANG_BASHKIR_RUSSIA: WORD = 0x01;
+pub const SUBLANG_BASQUE_BASQUE: WORD = 0x01;
+pub const SUBLANG_BELARUSIAN_BELARUS: WORD = 0x01;
+pub const SUBLANG_BENGALI_INDIA: WORD = 0x01;
+pub const SUBLANG_BENGALI_BANGLADESH: WORD = 0x02;
+pub const SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN: WORD = 0x05;
+pub const SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC: WORD = 0x08;
+pub const SUBLANG_BRETON_FRANCE: WORD = 0x01;
+pub const SUBLANG_BULGARIAN_BULGARIA: WORD = 0x01;
+pub const SUBLANG_CATALAN_CATALAN: WORD = 0x01;
+pub const SUBLANG_CENTRAL_KURDISH_IRAQ: WORD = 0x01;
+pub const SUBLANG_CHEROKEE_CHEROKEE: WORD = 0x01;
+pub const SUBLANG_CHINESE_TRADITIONAL: WORD = 0x01;
+pub const SUBLANG_CHINESE_SIMPLIFIED: WORD = 0x02;
+pub const SUBLANG_CHINESE_HONGKONG: WORD = 0x03;
+pub const SUBLANG_CHINESE_SINGAPORE: WORD = 0x04;
+pub const SUBLANG_CHINESE_MACAU: WORD = 0x05;
+pub const SUBLANG_CORSICAN_FRANCE: WORD = 0x01;
+pub const SUBLANG_CZECH_CZECH_REPUBLIC: WORD = 0x01;
+pub const SUBLANG_CROATIAN_CROATIA: WORD = 0x01;
+pub const SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN: WORD = 0x04;
+pub const SUBLANG_DANISH_DENMARK: WORD = 0x01;
+pub const SUBLANG_DARI_AFGHANISTAN: WORD = 0x01;
+pub const SUBLANG_DIVEHI_MALDIVES: WORD = 0x01;
+pub const SUBLANG_DUTCH: WORD = 0x01;
+pub const SUBLANG_DUTCH_BELGIAN: WORD = 0x02;
+pub const SUBLANG_ENGLISH_US: WORD = 0x01;
+pub const SUBLANG_ENGLISH_UK: WORD = 0x02;
+pub const SUBLANG_ENGLISH_AUS: WORD = 0x03;
+pub const SUBLANG_ENGLISH_CAN: WORD = 0x04;
+pub const SUBLANG_ENGLISH_NZ: WORD = 0x05;
+pub const SUBLANG_ENGLISH_EIRE: WORD = 0x06;
+pub const SUBLANG_ENGLISH_SOUTH_AFRICA: WORD = 0x07;
+pub const SUBLANG_ENGLISH_JAMAICA: WORD = 0x08;
+pub const SUBLANG_ENGLISH_CARIBBEAN: WORD = 0x09;
+pub const SUBLANG_ENGLISH_BELIZE: WORD = 0x0a;
+pub const SUBLANG_ENGLISH_TRINIDAD: WORD = 0x0b;
+pub const SUBLANG_ENGLISH_ZIMBABWE: WORD = 0x0c;
+pub const SUBLANG_ENGLISH_PHILIPPINES: WORD = 0x0d;
+pub const SUBLANG_ENGLISH_INDIA: WORD = 0x10;
+pub const SUBLANG_ENGLISH_MALAYSIA: WORD = 0x11;
+pub const SUBLANG_ENGLISH_SINGAPORE: WORD = 0x12;
+pub const SUBLANG_ESTONIAN_ESTONIA: WORD = 0x01;
+pub const SUBLANG_FAEROESE_FAROE_ISLANDS: WORD = 0x01;
+pub const SUBLANG_FILIPINO_PHILIPPINES: WORD = 0x01;
+pub const SUBLANG_FINNISH_FINLAND: WORD = 0x01;
+pub const SUBLANG_FRENCH: WORD = 0x01;
+pub const SUBLANG_FRENCH_BELGIAN: WORD = 0x02;
+pub const SUBLANG_FRENCH_CANADIAN: WORD = 0x03;
+pub const SUBLANG_FRENCH_SWISS: WORD = 0x04;
+pub const SUBLANG_FRENCH_LUXEMBOURG: WORD = 0x05;
+pub const SUBLANG_FRENCH_MONACO: WORD = 0x06;
+pub const SUBLANG_FRISIAN_NETHERLANDS: WORD = 0x01;
+pub const SUBLANG_FULAH_SENEGAL: WORD = 0x02;
+pub const SUBLANG_GALICIAN_GALICIAN: WORD = 0x01;
+pub const SUBLANG_GEORGIAN_GEORGIA: WORD = 0x01;
+pub const SUBLANG_GERMAN: WORD = 0x01;
+pub const SUBLANG_GERMAN_SWISS: WORD = 0x02;
+pub const SUBLANG_GERMAN_AUSTRIAN: WORD = 0x03;
+pub const SUBLANG_GERMAN_LUXEMBOURG: WORD = 0x04;
+pub const SUBLANG_GERMAN_LIECHTENSTEIN: WORD = 0x05;
+pub const SUBLANG_GREEK_GREECE: WORD = 0x01;
+pub const SUBLANG_GREENLANDIC_GREENLAND: WORD = 0x01;
+pub const SUBLANG_GUJARATI_INDIA: WORD = 0x01;
+pub const SUBLANG_HAUSA_NIGERIA_LATIN: WORD = 0x01;
+pub const SUBLANG_HAWAIIAN_US: WORD = 0x01;
+pub const SUBLANG_HEBREW_ISRAEL: WORD = 0x01;
+pub const SUBLANG_HINDI_INDIA: WORD = 0x01;
+pub const SUBLANG_HUNGARIAN_HUNGARY: WORD = 0x01;
+pub const SUBLANG_ICELANDIC_ICELAND: WORD = 0x01;
+pub const SUBLANG_IGBO_NIGERIA: WORD = 0x01;
+pub const SUBLANG_INDONESIAN_INDONESIA: WORD = 0x01;
+pub const SUBLANG_INUKTITUT_CANADA: WORD = 0x01;
+pub const SUBLANG_INUKTITUT_CANADA_LATIN: WORD = 0x02;
+pub const SUBLANG_IRISH_IRELAND: WORD = 0x02;
+pub const SUBLANG_ITALIAN: WORD = 0x01;
+pub const SUBLANG_ITALIAN_SWISS: WORD = 0x02;
+pub const SUBLANG_JAPANESE_JAPAN: WORD = 0x01;
+pub const SUBLANG_KANNADA_INDIA: WORD = 0x01;
+pub const SUBLANG_KASHMIRI_SASIA: WORD = 0x02;
+pub const SUBLANG_KASHMIRI_INDIA: WORD = 0x02;
+pub const SUBLANG_KAZAK_KAZAKHSTAN: WORD = 0x01;
+pub const SUBLANG_KHMER_CAMBODIA: WORD = 0x01;
+pub const SUBLANG_KICHE_GUATEMALA: WORD = 0x01;
+pub const SUBLANG_KINYARWANDA_RWANDA: WORD = 0x01;
+pub const SUBLANG_KONKANI_INDIA: WORD = 0x01;
+pub const SUBLANG_KOREAN: WORD = 0x01;
+pub const SUBLANG_KYRGYZ_KYRGYZSTAN: WORD = 0x01;
+pub const SUBLANG_LAO_LAO: WORD = 0x01;
+pub const SUBLANG_LATVIAN_LATVIA: WORD = 0x01;
+pub const SUBLANG_LITHUANIAN: WORD = 0x01;
+pub const SUBLANG_LOWER_SORBIAN_GERMANY: WORD = 0x02;
+pub const SUBLANG_LUXEMBOURGISH_LUXEMBOURG: WORD = 0x01;
+pub const SUBLANG_MACEDONIAN_MACEDONIA: WORD = 0x01;
+pub const SUBLANG_MALAY_MALAYSIA: WORD = 0x01;
+pub const SUBLANG_MALAY_BRUNEI_DARUSSALAM: WORD = 0x02;
+pub const SUBLANG_MALAYALAM_INDIA: WORD = 0x01;
+pub const SUBLANG_MALTESE_MALTA: WORD = 0x01;
+pub const SUBLANG_MAORI_NEW_ZEALAND: WORD = 0x01;
+pub const SUBLANG_MAPUDUNGUN_CHILE: WORD = 0x01;
+pub const SUBLANG_MARATHI_INDIA: WORD = 0x01;
+pub const SUBLANG_MOHAWK_MOHAWK: WORD = 0x01;
+pub const SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA: WORD = 0x01;
+pub const SUBLANG_MONGOLIAN_PRC: WORD = 0x02;
+pub const SUBLANG_NEPALI_INDIA: WORD = 0x02;
+pub const SUBLANG_NEPALI_NEPAL: WORD = 0x01;
+pub const SUBLANG_NORWEGIAN_BOKMAL: WORD = 0x01;
+pub const SUBLANG_NORWEGIAN_NYNORSK: WORD = 0x02;
+pub const SUBLANG_OCCITAN_FRANCE: WORD = 0x01;
+pub const SUBLANG_ODIA_INDIA: WORD = 0x01;
+pub const SUBLANG_ORIYA_INDIA: WORD = 0x01;
+pub const SUBLANG_PASHTO_AFGHANISTAN: WORD = 0x01;
+pub const SUBLANG_PERSIAN_IRAN: WORD = 0x01;
+pub const SUBLANG_POLISH_POLAND: WORD = 0x01;
+pub const SUBLANG_PORTUGUESE: WORD = 0x02;
+pub const SUBLANG_PORTUGUESE_BRAZILIAN: WORD = 0x01;
+pub const SUBLANG_PULAR_SENEGAL: WORD = 0x02;
+pub const SUBLANG_PUNJABI_INDIA: WORD = 0x01;
+pub const SUBLANG_PUNJABI_PAKISTAN: WORD = 0x02;
+pub const SUBLANG_QUECHUA_BOLIVIA: WORD = 0x01;
+pub const SUBLANG_QUECHUA_ECUADOR: WORD = 0x02;
+pub const SUBLANG_QUECHUA_PERU: WORD = 0x03;
+pub const SUBLANG_ROMANIAN_ROMANIA: WORD = 0x01;
+pub const SUBLANG_ROMANSH_SWITZERLAND: WORD = 0x01;
+pub const SUBLANG_RUSSIAN_RUSSIA: WORD = 0x01;
+pub const SUBLANG_SAKHA_RUSSIA: WORD = 0x01;
+pub const SUBLANG_SAMI_NORTHERN_NORWAY: WORD = 0x01;
+pub const SUBLANG_SAMI_NORTHERN_SWEDEN: WORD = 0x02;
+pub const SUBLANG_SAMI_NORTHERN_FINLAND: WORD = 0x03;
+pub const SUBLANG_SAMI_LULE_NORWAY: WORD = 0x04;
+pub const SUBLANG_SAMI_LULE_SWEDEN: WORD = 0x05;
+pub const SUBLANG_SAMI_SOUTHERN_NORWAY: WORD = 0x06;
+pub const SUBLANG_SAMI_SOUTHERN_SWEDEN: WORD = 0x07;
+pub const SUBLANG_SAMI_SKOLT_FINLAND: WORD = 0x08;
+pub const SUBLANG_SAMI_INARI_FINLAND: WORD = 0x09;
+pub const SUBLANG_SANSKRIT_INDIA: WORD = 0x01;
+pub const SUBLANG_SCOTTISH_GAELIC: WORD = 0x01;
+pub const SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN: WORD = 0x06;
+pub const SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC: WORD = 0x07;
+pub const SUBLANG_SERBIAN_MONTENEGRO_LATIN: WORD = 0x0b;
+pub const SUBLANG_SERBIAN_MONTENEGRO_CYRILLIC: WORD = 0x0c;
+pub const SUBLANG_SERBIAN_SERBIA_LATIN: WORD = 0x09;
+pub const SUBLANG_SERBIAN_SERBIA_CYRILLIC: WORD = 0x0a;
+pub const SUBLANG_SERBIAN_CROATIA: WORD = 0x01;
+pub const SUBLANG_SERBIAN_LATIN: WORD = 0x02;
+pub const SUBLANG_SERBIAN_CYRILLIC: WORD = 0x03;
+pub const SUBLANG_SINDHI_INDIA: WORD = 0x01;
+pub const SUBLANG_SINDHI_PAKISTAN: WORD = 0x02;
+pub const SUBLANG_SINDHI_AFGHANISTAN: WORD = 0x02;
+pub const SUBLANG_SINHALESE_SRI_LANKA: WORD = 0x01;
+pub const SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA: WORD = 0x01;
+pub const SUBLANG_SLOVAK_SLOVAKIA: WORD = 0x01;
+pub const SUBLANG_SLOVENIAN_SLOVENIA: WORD = 0x01;
+pub const SUBLANG_SPANISH: WORD = 0x01;
+pub const SUBLANG_SPANISH_MEXICAN: WORD = 0x02;
+pub const SUBLANG_SPANISH_MODERN: WORD = 0x03;
+pub const SUBLANG_SPANISH_GUATEMALA: WORD = 0x04;
+pub const SUBLANG_SPANISH_COSTA_RICA: WORD = 0x05;
+pub const SUBLANG_SPANISH_PANAMA: WORD = 0x06;
+pub const SUBLANG_SPANISH_DOMINICAN_REPUBLIC: WORD = 0x07;
+pub const SUBLANG_SPANISH_VENEZUELA: WORD = 0x08;
+pub const SUBLANG_SPANISH_COLOMBIA: WORD = 0x09;
+pub const SUBLANG_SPANISH_PERU: WORD = 0x0a;
+pub const SUBLANG_SPANISH_ARGENTINA: WORD = 0x0b;
+pub const SUBLANG_SPANISH_ECUADOR: WORD = 0x0c;
+pub const SUBLANG_SPANISH_CHILE: WORD = 0x0d;
+pub const SUBLANG_SPANISH_URUGUAY: WORD = 0x0e;
+pub const SUBLANG_SPANISH_PARAGUAY: WORD = 0x0f;
+pub const SUBLANG_SPANISH_BOLIVIA: WORD = 0x10;
+pub const SUBLANG_SPANISH_EL_SALVADOR: WORD = 0x11;
+pub const SUBLANG_SPANISH_HONDURAS: WORD = 0x12;
+pub const SUBLANG_SPANISH_NICARAGUA: WORD = 0x13;
+pub const SUBLANG_SPANISH_PUERTO_RICO: WORD = 0x14;
+pub const SUBLANG_SPANISH_US: WORD = 0x15;
+pub const SUBLANG_SWAHILI_KENYA: WORD = 0x01;
+pub const SUBLANG_SWEDISH: WORD = 0x01;
+pub const SUBLANG_SWEDISH_FINLAND: WORD = 0x02;
+pub const SUBLANG_SYRIAC_SYRIA: WORD = 0x01;
+pub const SUBLANG_TAJIK_TAJIKISTAN: WORD = 0x01;
+pub const SUBLANG_TAMAZIGHT_ALGERIA_LATIN: WORD = 0x02;
+pub const SUBLANG_TAMAZIGHT_MOROCCO_TIFINAGH: WORD = 0x04;
+pub const SUBLANG_TAMIL_INDIA: WORD = 0x01;
+pub const SUBLANG_TAMIL_SRI_LANKA: WORD = 0x02;
+pub const SUBLANG_TATAR_RUSSIA: WORD = 0x01;
+pub const SUBLANG_TELUGU_INDIA: WORD = 0x01;
+pub const SUBLANG_THAI_THAILAND: WORD = 0x01;
+pub const SUBLANG_TIBETAN_PRC: WORD = 0x01;
+pub const SUBLANG_TIGRIGNA_ERITREA: WORD = 0x02;
+pub const SUBLANG_TIGRINYA_ERITREA: WORD = 0x02;
+pub const SUBLANG_TIGRINYA_ETHIOPIA: WORD = 0x01;
+pub const SUBLANG_TSWANA_BOTSWANA: WORD = 0x02;
+pub const SUBLANG_TSWANA_SOUTH_AFRICA: WORD = 0x01;
+pub const SUBLANG_TURKISH_TURKEY: WORD = 0x01;
+pub const SUBLANG_TURKMEN_TURKMENISTAN: WORD = 0x01;
+pub const SUBLANG_UIGHUR_PRC: WORD = 0x01;
+pub const SUBLANG_UKRAINIAN_UKRAINE: WORD = 0x01;
+pub const SUBLANG_UPPER_SORBIAN_GERMANY: WORD = 0x01;
+pub const SUBLANG_URDU_PAKISTAN: WORD = 0x01;
+pub const SUBLANG_URDU_INDIA: WORD = 0x02;
+pub const SUBLANG_UZBEK_LATIN: WORD = 0x01;
+pub const SUBLANG_UZBEK_CYRILLIC: WORD = 0x02;
+pub const SUBLANG_VALENCIAN_VALENCIA: WORD = 0x02;
+pub const SUBLANG_VIETNAMESE_VIETNAM: WORD = 0x01;
+pub const SUBLANG_WELSH_UNITED_KINGDOM: WORD = 0x01;
+pub const SUBLANG_WOLOF_SENEGAL: WORD = 0x01;
+pub const SUBLANG_XHOSA_SOUTH_AFRICA: WORD = 0x01;
+pub const SUBLANG_YAKUT_RUSSIA: WORD = 0x01;
+pub const SUBLANG_YI_PRC: WORD = 0x01;
+pub const SUBLANG_YORUBA_NIGERIA: WORD = 0x01;
+pub const SUBLANG_ZULU_SOUTH_AFRICA: WORD = 0x01;
+pub const SORT_DEFAULT: WORD = 0x0;
+pub const SORT_INVARIANT_MATH: WORD = 0x1;
+pub const SORT_JAPANESE_XJIS: WORD = 0x0;
+pub const SORT_JAPANESE_UNICODE: WORD = 0x1;
+pub const SORT_JAPANESE_RADICALSTROKE: WORD = 0x4;
+pub const SORT_CHINESE_BIG5: WORD = 0x0;
+pub const SORT_CHINESE_PRCP: WORD = 0x0;
+pub const SORT_CHINESE_UNICODE: WORD = 0x1;
+pub const SORT_CHINESE_PRC: WORD = 0x2;
+pub const SORT_CHINESE_BOPOMOFO: WORD = 0x3;
+pub const SORT_CHINESE_RADICALSTROKE: WORD = 0x4;
+pub const SORT_KOREAN_KSC: WORD = 0x0;
+pub const SORT_KOREAN_UNICODE: WORD = 0x1;
+pub const SORT_GERMAN_PHONE_BOOK: WORD = 0x1;
+pub const SORT_HUNGARIAN_DEFAULT: WORD = 0x0;
+pub const SORT_HUNGARIAN_TECHNICAL: WORD = 0x1;
+pub const SORT_GEORGIAN_TRADITIONAL: WORD = 0x0;
+pub const SORT_GEORGIAN_MODERN: WORD = 0x1;
+macro_rules! MAKELANGID { ($p:expr, $s:expr) => (($s << 10) | $p) }
+#[inline]
+pub fn MAKELANGID(p: WORD, s: WORD) -> LANGID {
+ (s << 10) | p
+}
+#[inline]
+pub fn PRIMARYLANGID(lgid: LANGID) -> WORD {
+ lgid & 0x3ff
+}
+#[inline]
+pub fn SUBLANGID(lgid: LANGID) -> WORD {
+ lgid >> 10
+}
+pub const NLS_VALID_LOCALE_MASK: DWORD = 0x000fffff;
+macro_rules! MAKELCID {
+ ($lgid:expr, $srtid:expr) => ((($srtid as DWORD) << 16) | ($lgid as DWORD))
+}
+#[inline]
+pub fn MAKELCID(lgid: LANGID, srtid: WORD) -> LCID {
+ ((srtid as DWORD) << 16) | (lgid as DWORD)
+}
+#[inline]
+pub fn MAKESORTLCID(lgid: LANGID, srtid: WORD, ver: WORD) -> LCID {
+ MAKELCID(lgid, srtid) | ((ver as DWORD) << 20)
+}
+#[inline]
+pub fn LANGIDFROMLCID(lcid: LCID) -> LANGID {
+ lcid as LANGID
+}
+#[inline]
+pub fn SORTIDFROMLCID(lcid: LCID) -> WORD {
+ ((lcid >> 16) & 0xf) as WORD
+}
+#[inline]
+pub fn SORTVERSIONFROMLCID(lcid: LCID) -> WORD {
+ ((lcid >> 16) & 0xf) as WORD
+}
+pub const LOCALE_NAME_MAX_LENGTH: usize = 85;
+pub const LANG_SYSTEM_DEFAULT: LANGID = MAKELANGID!(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT);
+pub const LANG_USER_DEFAULT: LANGID = MAKELANGID!(LANG_NEUTRAL, SUBLANG_DEFAULT);
+pub const LOCALE_SYSTEM_DEFAULT: LCID = MAKELCID!(LANG_SYSTEM_DEFAULT, SORT_DEFAULT);
+pub const LOCALE_USER_DEFAULT: LCID = MAKELCID!(LANG_USER_DEFAULT, SORT_DEFAULT);
+pub const LOCALE_CUSTOM_DEFAULT: LCID
+ = MAKELCID!(MAKELANGID!(LANG_NEUTRAL, SUBLANG_CUSTOM_DEFAULT), SORT_DEFAULT);
+pub const LOCALE_CUSTOM_UNSPECIFIED: LCID
+ = MAKELCID!(MAKELANGID!(LANG_NEUTRAL, SUBLANG_CUSTOM_UNSPECIFIED), SORT_DEFAULT);
+pub const LOCALE_CUSTOM_UI_DEFAULT: LCID
+ = MAKELCID!(MAKELANGID!(LANG_NEUTRAL, SUBLANG_UI_CUSTOM_DEFAULT), SORT_DEFAULT);
+pub const LOCALE_NEUTRAL: LCID
+ = MAKELCID!(MAKELANGID!(LANG_NEUTRAL, SUBLANG_NEUTRAL), SORT_DEFAULT);
+pub const LOCALE_INVARIANT: LCID
+ = MAKELCID!(MAKELANGID!(LANG_INVARIANT, SUBLANG_NEUTRAL), SORT_DEFAULT);
+pub const LOCALE_TRANSIENT_KEYBOARD1: LCID = 0x2000;
+pub const LOCALE_TRANSIENT_KEYBOARD2: LCID = 0x2400;
+pub const LOCALE_TRANSIENT_KEYBOARD3: LCID = 0x2800;
+pub const LOCALE_TRANSIENT_KEYBOARD4: LCID = 0x2c00;
+pub const LOCALE_UNASSIGNED_LCID: LCID = LOCALE_CUSTOM_UNSPECIFIED;
+pub const STATUS_WAIT_0: DWORD = 0x00000000;
+pub const STATUS_ABANDONED_WAIT_0: DWORD = 0x00000080;
+pub const STATUS_USER_APC: DWORD = 0x000000C0;
+pub const STATUS_TIMEOUT: DWORD = 0x00000102;
+pub const STATUS_PENDING: DWORD = 0x00000103;
+pub const DBG_EXCEPTION_HANDLED: DWORD = 0x00010001;
+pub const DBG_CONTINUE: DWORD = 0x00010002;
+pub const STATUS_SEGMENT_NOTIFICATION: DWORD = 0x40000005;
+pub const STATUS_FATAL_APP_EXIT: DWORD = 0x40000015;
+pub const DBG_REPLY_LATER: DWORD = 0x40010001;
+pub const DBG_TERMINATE_THREAD: DWORD = 0x40010003;
+pub const DBG_TERMINATE_PROCESS: DWORD = 0x40010004;
+pub const DBG_CONTROL_C: DWORD = 0x40010005;
+pub const DBG_PRINTEXCEPTION_C: DWORD = 0x40010006;
+pub const DBG_RIPEXCEPTION: DWORD = 0x40010007;
+pub const DBG_CONTROL_BREAK: DWORD = 0x40010008;
+pub const DBG_COMMAND_EXCEPTION: DWORD = 0x40010009;
+pub const DBG_PRINTEXCEPTION_WIDE_C: DWORD = 0x4001000A;
+pub const STATUS_GUARD_PAGE_VIOLATION: DWORD = 0x80000001;
+pub const STATUS_DATATYPE_MISALIGNMENT: DWORD = 0x80000002;
+pub const STATUS_BREAKPOINT: DWORD = 0x80000003;
+pub const STATUS_SINGLE_STEP: DWORD = 0x80000004;
+pub const STATUS_LONGJUMP: DWORD = 0x80000026;
+pub const STATUS_UNWIND_CONSOLIDATE: DWORD = 0x80000029;
+pub const DBG_EXCEPTION_NOT_HANDLED: DWORD = 0x80010001;
+pub const STATUS_ACCESS_VIOLATION: DWORD = 0xC0000005;
+pub const STATUS_IN_PAGE_ERROR: DWORD = 0xC0000006;
+pub const STATUS_INVALID_HANDLE: DWORD = 0xC0000008;
+pub const STATUS_INVALID_PARAMETER: DWORD = 0xC000000D;
+pub const STATUS_NO_MEMORY: DWORD = 0xC0000017;
+pub const STATUS_ILLEGAL_INSTRUCTION: DWORD = 0xC000001D;
+pub const STATUS_NONCONTINUABLE_EXCEPTION: DWORD = 0xC0000025;
+pub const STATUS_INVALID_DISPOSITION: DWORD = 0xC0000026;
+pub const STATUS_ARRAY_BOUNDS_EXCEEDED: DWORD = 0xC000008C;
+pub const STATUS_FLOAT_DENORMAL_OPERAND: DWORD = 0xC000008D;
+pub const STATUS_FLOAT_DIVIDE_BY_ZERO: DWORD = 0xC000008E;
+pub const STATUS_FLOAT_INEXACT_RESULT: DWORD = 0xC000008F;
+pub const STATUS_FLOAT_INVALID_OPERATION: DWORD = 0xC0000090;
+pub const STATUS_FLOAT_OVERFLOW: DWORD = 0xC0000091;
+pub const STATUS_FLOAT_STACK_CHECK: DWORD = 0xC0000092;
+pub const STATUS_FLOAT_UNDERFLOW: DWORD = 0xC0000093;
+pub const STATUS_INTEGER_DIVIDE_BY_ZERO: DWORD = 0xC0000094;
+pub const STATUS_INTEGER_OVERFLOW: DWORD = 0xC0000095;
+pub const STATUS_PRIVILEGED_INSTRUCTION: DWORD = 0xC0000096;
+pub const STATUS_STACK_OVERFLOW: DWORD = 0xC00000FD;
+pub const STATUS_DLL_NOT_FOUND: DWORD = 0xC0000135;
+pub const STATUS_ORDINAL_NOT_FOUND: DWORD = 0xC0000138;
+pub const STATUS_ENTRYPOINT_NOT_FOUND: DWORD = 0xC0000139;
+pub const STATUS_CONTROL_C_EXIT: DWORD = 0xC000013A;
+pub const STATUS_DLL_INIT_FAILED: DWORD = 0xC0000142;
+pub const STATUS_FLOAT_MULTIPLE_FAULTS: DWORD = 0xC00002B4;
+pub const STATUS_FLOAT_MULTIPLE_TRAPS: DWORD = 0xC00002B5;
+pub const STATUS_REG_NAT_CONSUMPTION: DWORD = 0xC00002C9;
+pub const STATUS_HEAP_CORRUPTION: DWORD = 0xC0000374;
+pub const STATUS_STACK_BUFFER_OVERRUN: DWORD = 0xC0000409;
+pub const STATUS_INVALID_CRUNTIME_PARAMETER: DWORD = 0xC0000417;
+pub const STATUS_ASSERTION_FAILURE: DWORD = 0xC0000420;
+pub const STATUS_SXS_EARLY_DEACTIVATION: DWORD = 0xC015000F;
+pub const STATUS_SXS_INVALID_DEACTIVATION: DWORD = 0xC0150010;
+pub const MAXIMUM_WAIT_OBJECTS: DWORD = 64;
+pub const MAXIMUM_SUSPEND_COUNT: CHAR = MAXCHAR;
+pub type KSPIN_LOCK = ULONG_PTR;
+pub type PKSPIN_LOCK = *mut KSPIN_LOCK;
+STRUCT!{struct M128A { // FIXME align 16
+ Low: ULONGLONG,
+ High: LONGLONG,
+}}
+pub type PM128A = *mut M128A;
+#[cfg(target_pointer_width = "32")]
+STRUCT!{struct XSAVE_FORMAT { // FIXME align 16
+ ControlWord: WORD,
+ StatusWord: WORD,
+ TagWord: BYTE,
+ Reserved1: BYTE,
+ ErrorOpcode: WORD,
+ ErrorOffset: DWORD,
+ ErrorSelector: WORD,
+ Reserved2: WORD,
+ DataOffset: DWORD,
+ DataSelector: WORD,
+ Reserved3: WORD,
+ MxCsr: DWORD,
+ MxCsr_Mask: DWORD,
+ FloatRegisters: [M128A; 8],
+ XmmRegisters: [M128A; 8],
+ Reserved4: [BYTE; 224],
+}}
+#[cfg(target_pointer_width = "64")]
+STRUCT!{struct XSAVE_FORMAT { // FIXME align 16
+ ControlWord: WORD,
+ StatusWord: WORD,
+ TagWord: BYTE,
+ Reserved1: BYTE,
+ ErrorOpcode: WORD,
+ ErrorOffset: DWORD,
+ ErrorSelector: WORD,
+ Reserved2: WORD,
+ DataOffset: DWORD,
+ DataSelector: WORD,
+ Reserved3: WORD,
+ MxCsr: DWORD,
+ MxCsr_Mask: DWORD,
+ FloatRegisters: [M128A; 8],
+ XmmRegisters: [M128A; 16],
+ Reserved4: [BYTE; 96],
+}}
+#[cfg(target_arch = "x86")]
+STRUCT!{struct XSTATE_CONTEXT {
+ Mask: DWORD64,
+ Length: DWORD,
+ Reserved1: DWORD,
+ Area: PXSAVE_AREA,
+ Reserved2: DWORD,
+ Buffer: PVOID,
+ Reserved3: DWORD,
+}}
+#[cfg(not(target_arch = "x86"))]
+STRUCT!{struct XSTATE_CONTEXT {
+ Mask: DWORD64,
+ Length: DWORD,
+ Reserved1: DWORD,
+ Area: PXSAVE_AREA,
+ Buffer: PVOID,
+}}
+pub type PXSAVE_FORMAT = *mut XSAVE_FORMAT;
+STRUCT!{struct XSAVE_AREA_HEADER { // FIXME align 8
+ Mask: DWORD64,
+ CompactionMask: DWORD64,
+ Reserved2: [DWORD64; 6],
+}}
+pub type PXSAVE_AREA_HEADER = *mut XSAVE_AREA_HEADER;
+STRUCT!{struct XSAVE_AREA { // FIXME align 16
+ LegacyState: XSAVE_FORMAT,
+ Header: XSAVE_AREA_HEADER,
+}}
+pub type PXSAVE_AREA = *mut XSAVE_AREA;
+pub type PXSTATE_CONTEXT = *mut XSTATE_CONTEXT;
+STRUCT!{struct SCOPE_TABLE_AMD64 {
+ Count: DWORD,
+ ScopeRecord: [SCOPE_TABLE_AMD64_ScopeRecord; 1],
+}}
+STRUCT!{struct SCOPE_TABLE_AMD64_ScopeRecord {
+ BeginAddress: DWORD,
+ EndAddress: DWORD,
+ HandlerAddress: DWORD,
+ JumpTarget: DWORD,
+}}
+pub type PSCOPE_TABLE_AMD64 = *mut SCOPE_TABLE_AMD64;
+STRUCT!{struct SCOPE_TABLE_ARM64 {
+ Count: DWORD,
+ ScopeRecord: [SCOPE_TABLE_ARM64_ScopeRecord; 1],
+}}
+STRUCT!{struct SCOPE_TABLE_ARM64_ScopeRecord {
+ BeginAddress: DWORD,
+ EndAddress: DWORD,
+ HandlerAddress: DWORD,
+ JumpTarget: DWORD,
+}}
+pub type PSCOPE_TABLE_ARM64 = *mut SCOPE_TABLE_ARM64;
+// Skip interlocked and bit manipulation stuff because it is all intrinsics
+// Use the native Rust equivalents instead
+#[cfg(target_arch = "x86_64")]
+IFDEF!{
+pub const EXCEPTION_READ_FAULT: DWORD = 0;
+pub const EXCEPTION_WRITE_FAULT: DWORD = 1;
+pub const EXCEPTION_EXECUTE_FAULT: DWORD = 8;
+pub const CONTEXT_AMD64: DWORD = 0x00100000;
+pub const CONTEXT_CONTROL: DWORD = CONTEXT_AMD64 | 0x00000001;
+pub const CONTEXT_INTEGER: DWORD = CONTEXT_AMD64 | 0x00000002;
+pub const CONTEXT_SEGMENTS: DWORD = CONTEXT_AMD64 | 0x00000004;
+pub const CONTEXT_FLOATING_POINT: DWORD = CONTEXT_AMD64 | 0x00000008;
+pub const CONTEXT_DEBUG_REGISTERS: DWORD = CONTEXT_AMD64 | 0x00000010;
+pub const CONTEXT_FULL: DWORD = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT;
+pub const CONTEXT_ALL: DWORD = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS
+ | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS;
+pub const CONTEXT_XSTATE: DWORD = CONTEXT_AMD64 | 0x00000040;
+pub const CONTEXT_EXCEPTION_ACTIVE: DWORD = 0x08000000;
+pub const CONTEXT_SERVICE_ACTIVE: DWORD = 0x10000000;
+pub const CONTEXT_EXCEPTION_REQUEST: DWORD = 0x40000000;
+pub const CONTEXT_EXCEPTION_REPORTING: DWORD = 0x80000000;
+pub const INITIAL_MXCSR: DWORD = 0x1f80;
+pub const INITIAL_FPCSR: DWORD = 0x027f;
+pub type XMM_SAVE_AREA32 = XSAVE_FORMAT;
+pub type PXMM_SAVE_AREA32 = *mut XSAVE_FORMAT;
+STRUCT!{struct CONTEXT_u_s {
+ Header: [M128A; 2],
+ Legacy: [M128A; 8],
+ Xmm0: M128A,
+ Xmm1: M128A,
+ Xmm2: M128A,
+ Xmm3: M128A,
+ Xmm4: M128A,
+ Xmm5: M128A,
+ Xmm6: M128A,
+ Xmm7: M128A,
+ Xmm8: M128A,
+ Xmm9: M128A,
+ Xmm10: M128A,
+ Xmm11: M128A,
+ Xmm12: M128A,
+ Xmm13: M128A,
+ Xmm14: M128A,
+ Xmm15: M128A,
+}}
+UNION!{union CONTEXT_u {
+ [u64; 64],
+ FltSave FltSave_mut: XMM_SAVE_AREA32,
+ s s_mut: CONTEXT_u_s,
+}}
+STRUCT!{struct CONTEXT { // FIXME align 16
+ P1Home: DWORD64,
+ P2Home: DWORD64,
+ P3Home: DWORD64,
+ P4Home: DWORD64,
+ P5Home: DWORD64,
+ P6Home: DWORD64,
+ ContextFlags: DWORD,
+ MxCsr: DWORD,
+ SegCs: WORD,
+ SegDs: WORD,
+ SegEs: WORD,
+ SegFs: WORD,
+ SegGs: WORD,
+ SegSs: WORD,
+ EFlags: DWORD,
+ Dr0: DWORD64,
+ Dr1: DWORD64,
+ Dr2: DWORD64,
+ Dr3: DWORD64,
+ Dr6: DWORD64,
+ Dr7: DWORD64,
+ Rax: DWORD64,
+ Rcx: DWORD64,
+ Rdx: DWORD64,
+ Rbx: DWORD64,
+ Rsp: DWORD64,
+ Rbp: DWORD64,
+ Rsi: DWORD64,
+ Rdi: DWORD64,
+ R8: DWORD64,
+ R9: DWORD64,
+ R10: DWORD64,
+ R11: DWORD64,
+ R12: DWORD64,
+ R13: DWORD64,
+ R14: DWORD64,
+ R15: DWORD64,
+ Rip: DWORD64,
+ u: CONTEXT_u,
+ VectorRegister: [M128A; 26],
+ VectorControl: DWORD64,
+ DebugControl: DWORD64,
+ LastBranchToRip: DWORD64,
+ LastBranchFromRip: DWORD64,
+ LastExceptionToRip: DWORD64,
+ LastExceptionFromRip: DWORD64,
+}}
+pub type PCONTEXT = *mut CONTEXT;
+pub type RUNTIME_FUNCTION = IMAGE_RUNTIME_FUNCTION_ENTRY;
+pub type PRUNTIME_FUNCTION = *mut IMAGE_RUNTIME_FUNCTION_ENTRY;
+pub type SCOPE_TABLE = SCOPE_TABLE_AMD64;
+pub type PSCOPE_TABLE = *mut SCOPE_TABLE_AMD64;
+pub const RUNTIME_FUNCTION_INDIRECT: DWORD = 0x1;
+pub const UNW_FLAG_NHANDLER: DWORD = 0x0;
+pub const UNW_FLAG_EHANDLER: DWORD = 0x1;
+pub const UNW_FLAG_UHANDLER: DWORD = 0x2;
+pub const UNW_FLAG_CHAININFO: DWORD = 0x4;
+pub const UNW_FLAG_NO_EPILOGUE: DWORD = 0x80000000;
+pub const UNWIND_HISTORY_TABLE_SIZE: usize = 12;
+STRUCT!{struct UNWIND_HISTORY_TABLE_ENTRY {
+ ImageBase: DWORD64,
+ FunctionEntry: PRUNTIME_FUNCTION,
+}}
+pub type PUNWIND_HISTORY_TABLE_ENTRY = *mut UNWIND_HISTORY_TABLE_ENTRY;
+STRUCT!{struct UNWIND_HISTORY_TABLE {
+ Count: DWORD,
+ LocalHint: BYTE,
+ GlobalHint: BYTE,
+ Search: BYTE,
+ Once: BYTE,
+ LowAddress: DWORD64,
+ HighAddress: DWORD64,
+ Entry: [UNWIND_HISTORY_TABLE_ENTRY; UNWIND_HISTORY_TABLE_SIZE],
+}}
+pub type PUNWIND_HISTORY_TABLE = *mut UNWIND_HISTORY_TABLE;
+FN!{cdecl PGET_RUNTIME_FUNCTION_CALLBACK(
+ ControlPc: DWORD64,
+ Context: PVOID,
+) -> PRUNTIME_FUNCTION}
+FN!{cdecl POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK(
+ Process: HANDLE,
+ TableAddress: PVOID,
+ Entries: PDWORD,
+ Functions: *mut PRUNTIME_FUNCTION,
+) -> DWORD}
+pub const OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME: &'static str
+ = "OutOfProcessFunctionTableCallback";
+STRUCT!{struct DISPATCHER_CONTEXT {
+ ControlPc: DWORD64,
+ ImageBase: DWORD64,
+ FunctionEntry: PRUNTIME_FUNCTION,
+ EstablisherFrame: DWORD64,
+ TargetIp: DWORD64,
+ ContextRecord: PCONTEXT,
+ LanguageHandler: PEXCEPTION_ROUTINE,
+ HandlerData: PVOID,
+ HistoryTable: PUNWIND_HISTORY_TABLE,
+ ScopeIndex: DWORD,
+ Fill0: DWORD,
+}}
+pub type PDISPATCHER_CONTEXT = *mut DISPATCHER_CONTEXT;
+FN!{cdecl PEXCEPTION_FILTER(
+ ExceptionPointers: *mut EXCEPTION_POINTERS,
+ EstablisherFrame: PVOID,
+) -> LONG}
+FN!{cdecl PTERMINATION_HANDLER(
+ AbnormalTermination: BOOLEAN,
+ EstablisherFrame: PVOID,
+) -> ()}
+STRUCT!{struct KNONVOLATILE_CONTEXT_POINTERS_u1_s {
+ Xmm0: PM128A,
+ Xmm1: PM128A,
+ Xmm2: PM128A,
+ Xmm3: PM128A,
+ Xmm4: PM128A,
+ Xmm5: PM128A,
+ Xmm6: PM128A,
+ Xmm7: PM128A,
+ Xmm8: PM128A,
+ Xmm9: PM128A,
+ Xmm10: PM128A,
+ Xmm11: PM128A,
+ Xmm12: PM128A,
+ Xmm13: PM128A,
+ Xmm14: PM128A,
+ Xmm15: PM128A,
+}}
+UNION!{union KNONVOLATILE_CONTEXT_POINTERS_u1 {
+ [u64; 16],
+ FloatingContext FloatingContext_mut: [PM128A; 16],
+ s s_mut: KNONVOLATILE_CONTEXT_POINTERS_u1_s,
+}}
+STRUCT!{struct KNONVOLATILE_CONTEXT_POINTERS_u2_s {
+ Rax: PDWORD64,
+ Rcx: PDWORD64,
+ Rdx: PDWORD64,
+ Rbx: PDWORD64,
+ Rsp: PDWORD64,
+ Rbp: PDWORD64,
+ Rsi: PDWORD64,
+ Rdi: PDWORD64,
+ R8: PDWORD64,
+ R9: PDWORD64,
+ R10: PDWORD64,
+ R11: PDWORD64,
+ R12: PDWORD64,
+ R13: PDWORD64,
+ R14: PDWORD64,
+ R15: PDWORD64,
+}}
+UNION!{union KNONVOLATILE_CONTEXT_POINTERS_u2 {
+ [u64; 16],
+ IntegerContext IntegerContext_mut: [PDWORD64; 16],
+ s s_mut: KNONVOLATILE_CONTEXT_POINTERS_u2_s,
+}}
+STRUCT!{struct KNONVOLATILE_CONTEXT_POINTERS {
+ u1: KNONVOLATILE_CONTEXT_POINTERS_u1,
+ u2: KNONVOLATILE_CONTEXT_POINTERS_u2,
+}}
+pub type PKNONVOLATILE_CONTEXT_POINTERS = *mut KNONVOLATILE_CONTEXT_POINTERS;
+} // IFDEF(x86_64)
+#[cfg(target_arch = "x86")]
+IFDEF!{
+pub const EXCEPTION_READ_FAULT: DWORD = 0;
+pub const EXCEPTION_WRITE_FAULT: DWORD = 1;
+pub const EXCEPTION_EXECUTE_FAULT: DWORD = 8;
+pub const SIZE_OF_80387_REGISTERS: usize = 80;
+pub const CONTEXT_i386: DWORD = 0x00010000;
+pub const CONTEXT_i486: DWORD = 0x00010000;
+pub const CONTEXT_CONTROL: DWORD = CONTEXT_i386 | 0x00000001;
+pub const CONTEXT_INTEGER: DWORD = CONTEXT_i386 | 0x00000002;
+pub const CONTEXT_SEGMENTS: DWORD = CONTEXT_i386 | 0x00000004;
+pub const CONTEXT_FLOATING_POINT: DWORD = CONTEXT_i386 | 0x00000008;
+pub const CONTEXT_DEBUG_REGISTERS: DWORD = CONTEXT_i386 | 0x00000010;
+pub const CONTEXT_EXTENDED_REGISTERS: DWORD = CONTEXT_i386 | 0x00000020;
+pub const CONTEXT_FULL: DWORD = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS;
+pub const CONTEXT_ALL: DWORD = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS
+ | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS;
+pub const CONTEXT_XSTATE: DWORD = CONTEXT_i386 | 0x00000040;
+pub const CONTEXT_EXCEPTION_ACTIVE: DWORD = 0x08000000;
+pub const CONTEXT_SERVICE_ACTIVE: DWORD = 0x10000000;
+pub const CONTEXT_EXCEPTION_REQUEST: DWORD = 0x40000000;
+pub const CONTEXT_EXCEPTION_REPORTING: DWORD = 0x80000000;
+STRUCT!{struct FLOATING_SAVE_AREA {
+ ControlWord: DWORD,
+ StatusWord: DWORD,
+ TagWord: DWORD,
+ ErrorOffset: DWORD,
+ ErrorSelector: DWORD,
+ DataOffset: DWORD,
+ DataSelector: DWORD,
+ RegisterArea: [BYTE; SIZE_OF_80387_REGISTERS],
+ Spare0: DWORD,
+}}
+pub type PFLOATING_SAVE_AREA = *mut FLOATING_SAVE_AREA;
+pub const MAXIMUM_SUPPORTED_EXTENSION: usize = 512;
+STRUCT!{struct CONTEXT {
+ ContextFlags: DWORD,
+ Dr0: DWORD,
+ Dr1: DWORD,
+ Dr2: DWORD,
+ Dr3: DWORD,
+ Dr6: DWORD,
+ Dr7: DWORD,
+ FloatSave: FLOATING_SAVE_AREA,
+ SegGs: DWORD,
+ SegFs: DWORD,
+ SegEs: DWORD,
+ SegDs: DWORD,
+ Edi: DWORD,
+ Esi: DWORD,
+ Ebx: DWORD,
+ Edx: DWORD,
+ Ecx: DWORD,
+ Eax: DWORD,
+ Ebp: DWORD,
+ Eip: DWORD,
+ SegCs: DWORD,
+ EFlags: DWORD,
+ Esp: DWORD,
+ SegSs: DWORD,
+ ExtendedRegisters: [BYTE; MAXIMUM_SUPPORTED_EXTENSION],
+}}
+pub type PCONTEXT = *mut CONTEXT;
+} // IFDEF(x86)
+STRUCT!{struct LDT_ENTRY_Bytes {
+ BaseMid: BYTE,
+ Flags1: BYTE,
+ Flags2: BYTE,
+ BaseHi: BYTE,
+}}
+STRUCT!{struct LDT_ENTRY_Bits {
+ Bitfield: DWORD,
+}}
+BITFIELD!{LDT_ENTRY_Bits Bitfield: DWORD [
+ BaseMid set_BaseMid[0..8],
+ Type set_Type[8..13],
+ Dpl set_Dpl[13..15],
+ Pres set_Pres[15..16],
+ LimitHi set_LimitHi[16..20],
+ Sys set_Sys[20..21],
+ Reserved_0 set_Reserved_0[21..22],
+ Default_Big set_Default_Big[22..23],
+ Granularity set_Granularity[23..24],
+ BaseHi set_BaseHi[24..32],
+]}
+UNION!{union LDT_ENTRY_HighWord {
+ [u32; 1],
+ Bytes Bytes_mut: LDT_ENTRY_Bytes,
+ Bits Bits_mut: LDT_ENTRY_Bits,
+}}
+STRUCT!{struct LDT_ENTRY {
+ LimitLow: WORD,
+ BaseLow: WORD,
+ HighWord: LDT_ENTRY_HighWord,
+}}
+pub type PLDT_ENTRY = *mut LDT_ENTRY;
+#[cfg(target_arch = "aarch64")]
+IFDEF!{
+pub const ARM64_MAX_BREAKPOINTS: usize = 8;
+pub const ARM64_MAX_WATCHPOINTS: usize = 2;
+pub const EXCEPTION_READ_FAULT: DWORD = 0;
+pub const EXCEPTION_WRITE_FAULT: DWORD = 1;
+pub const EXCEPTION_EXECUTE_FAULT: DWORD = 8;
+pub const CONTEXT_ARM64: DWORD = 0x00400000;
+pub const CONTEXT_CONTROL: DWORD = CONTEXT_ARM64 | 0x00000001;
+pub const CONTEXT_INTEGER: DWORD = CONTEXT_ARM64 | 0x00000002;
+pub const CONTEXT_FLOATING_POINT: DWORD = CONTEXT_ARM64 | 0x00000004;
+pub const CONTEXT_DEBUG_REGISTERS: DWORD = CONTEXT_ARM64 | 0x00000008;
+pub const CONTEXT_X18: DWORD = CONTEXT_ARM64 | 0x00000010;
+pub const CONTEXT_FULL: DWORD = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT;
+pub const CONTEXT_ALL: DWORD = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT
+ | CONTEXT_DEBUG_REGISTERS | CONTEXT_X18;
+pub const CONTEXT_EXCEPTION_ACTIVE: DWORD = 0x08000000;
+pub const CONTEXT_SERVICE_ACTIVE: DWORD = 0x10000000;
+pub const CONTEXT_EXCEPTION_REQUEST: DWORD = 0x40000000;
+pub const CONTEXT_EXCEPTION_REPORTING: DWORD = 0x80000000;
+STRUCT!{struct CONTEXT_u_s {
+ X0: DWORD64,
+ X1: DWORD64,
+ X2: DWORD64,
+ X3: DWORD64,
+ X4: DWORD64,
+ X5: DWORD64,
+ X6: DWORD64,
+ X7: DWORD64,
+ X8: DWORD64,
+ X9: DWORD64,
+ X10: DWORD64,
+ X11: DWORD64,
+ X12: DWORD64,
+ X13: DWORD64,
+ X14: DWORD64,
+ X15: DWORD64,
+ X16: DWORD64,
+ X17: DWORD64,
+ X18: DWORD64,
+ X19: DWORD64,
+ X20: DWORD64,
+ X21: DWORD64,
+ X22: DWORD64,
+ X23: DWORD64,
+ X24: DWORD64,
+ X25: DWORD64,
+ X26: DWORD64,
+ X27: DWORD64,
+ X28: DWORD64,
+ Fp: DWORD64,
+ Lr: DWORD64,
+}}
+UNION!{union CONTEXT_u {
+ [u64; 31],
+ s s_mut: CONTEXT_u_s,
+}}
+STRUCT!{struct ARM64_NT_NEON128_s {
+ Low: ULONGLONG,
+ High: LONGLONG,
+}}
+UNION!{union ARM64_NT_NEON128 {
+ [u64; 2],
+ s s_mut: ARM64_NT_NEON128_s,
+ D D_mut: [f64; 2],
+ S S_mut: [f32; 4],
+ H H_mut: [WORD; 8],
+ B B_mut: [BYTE; 16],
+}}
+STRUCT!{struct CONTEXT { // FIXME align 16
+ ContextFlags: DWORD,
+ Cpsr: DWORD,
+ u: CONTEXT_u,
+ Sp: DWORD64,
+ Pc: DWORD64,
+ V: [ARM64_NT_NEON128; 32],
+ Fpcr: DWORD,
+ Fpsr: DWORD,
+ Bcr: [DWORD; ARM64_MAX_BREAKPOINTS],
+ Bvr: [DWORD64; ARM64_MAX_BREAKPOINTS],
+ Wcr: [DWORD; ARM64_MAX_WATCHPOINTS],
+ Wvr: [DWORD64; ARM64_MAX_WATCHPOINTS],
+}}
+pub type PCONTEXT = *mut CONTEXT;
+pub type RUNTIME_FUNCTION = IMAGE_RUNTIME_FUNCTION_ENTRY;
+pub type PRUNTIME_FUNCTION = *mut IMAGE_RUNTIME_FUNCTION_ENTRY;
+pub type SCOPE_TABLE = SCOPE_TABLE_ARM64;
+pub type PSCOPE_TABLE = *mut SCOPE_TABLE_ARM64;
+pub const RUNTIME_FUNCTION_INDIRECT: DWORD = 0x1;
+pub const UNW_FLAG_NHANDLER: DWORD = 0x0;
+pub const UNW_FLAG_EHANDLER: DWORD = 0x1;
+pub const UNW_FLAG_UHANDLER: DWORD = 0x2;
+pub const UNWIND_HISTORY_TABLE_SIZE: usize = 12;
+STRUCT!{struct UNWIND_HISTORY_TABLE_ENTRY {
+ ImageBase: DWORD64,
+ FunctionEntry: PRUNTIME_FUNCTION,
+}}
+pub type PUNWIND_HISTORY_TABLE_ENTRY = *mut UNWIND_HISTORY_TABLE_ENTRY;
+STRUCT!{struct UNWIND_HISTORY_TABLE {
+ Count: DWORD,
+ LocalHint: BYTE,
+ GlobalHint: BYTE,
+ Search: BYTE,
+ Once: BYTE,
+ LowAddress: DWORD64,
+ HighAddress: DWORD64,
+ Entry: [UNWIND_HISTORY_TABLE_ENTRY; UNWIND_HISTORY_TABLE_SIZE],
+}}
+pub type PUNWIND_HISTORY_TABLE = *mut UNWIND_HISTORY_TABLE;
+FN!{cdecl PGET_RUNTIME_FUNCTION_CALLBACK(
+ ControlPc: DWORD64,
+ Context: PVOID,
+) -> PRUNTIME_FUNCTION}
+FN!{cdecl POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK(
+ Process: HANDLE,
+ TableAddress: PVOID,
+ Entries: PDWORD,
+ Functions: *mut PRUNTIME_FUNCTION,
+) -> DWORD}
+pub const OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME: &'static str
+ = "OutOfProcessFunctionTableCallback";
+STRUCT!{struct DISPATCHER_CONTEXT {
+ ControlPc: ULONG_PTR,
+ ImageBase: ULONG_PTR,
+ FunctionEntry: PRUNTIME_FUNCTION,
+ EstablisherFrame: ULONG_PTR,
+ TargetPc: ULONG_PTR,
+ ContextRecord: PCONTEXT,
+ LanguageHandler: PEXCEPTION_ROUTINE,
+ HandlerData: PVOID,
+ HistoryTable: PUNWIND_HISTORY_TABLE,
+ ScopeIndex: DWORD,
+ ControlPcIsUnwound: BOOLEAN,
+ NonVolatileRegisters: PBYTE,
+}}
+pub type PDISPATCHER_CONTEXT = *mut DISPATCHER_CONTEXT;
+FN!{cdecl PEXCEPTION_FILTER(
+ ExceptionPointers: *mut EXCEPTION_POINTERS,
+ EstablisherFrame: DWORD64,
+) -> LONG}
+FN!{cdecl PTERMINATION_HANDLER(
+ AbnormalTermination: BOOLEAN,
+ EstablisherFrame: DWORD64,
+) -> ()}
+STRUCT!{struct KNONVOLATILE_CONTEXT_POINTERS {
+ X19: PDWORD64,
+ X20: PDWORD64,
+ X21: PDWORD64,
+ X22: PDWORD64,
+ X23: PDWORD64,
+ X24: PDWORD64,
+ X25: PDWORD64,
+ X26: PDWORD64,
+ X27: PDWORD64,
+ X28: PDWORD64,
+ Fp: PDWORD64,
+ Lr: PDWORD64,
+ D8: PDWORD64,
+ D9: PDWORD64,
+ D10: PDWORD64,
+ D11: PDWORD64,
+ D12: PDWORD64,
+ D13: PDWORD64,
+ D14: PDWORD64,
+ D15: PDWORD64,
+}}
+pub type PKNONVOLATILE_CONTEXT_POINTERS = *mut KNONVOLATILE_CONTEXT_POINTERS;
+} // IFDEF(aarch64)
+#[cfg(target_arch = "arm")]
+IFDEF!{
+pub const ARM_MAX_BREAKPOINTS: usize = 8;
+pub const ARM_MAX_WATCHPOINTS: usize = 1;
+STRUCT!{struct NEON128 {
+ Low: ULONGLONG,
+ High: LONGLONG,
+}}
+pub type PNEON128 = *mut NEON128;
+UNION!{union CONTEXT_u {
+ [u64; 32],
+ Q Q_mut: [NEON128; 16],
+ D D_mut: [ULONGLONG; 32],
+ S S_mut: [DWORD; 32],
+}}
+STRUCT!{struct CONTEXT {
+ ContextFlags: DWORD,
+ R0: DWORD,
+ R1: DWORD,
+ R2: DWORD,
+ R3: DWORD,
+ R4: DWORD,
+ R5: DWORD,
+ R6: DWORD,
+ R7: DWORD,
+ R8: DWORD,
+ R9: DWORD,
+ R10: DWORD,
+ R11: DWORD,
+ R12: DWORD,
+ Sp: DWORD,
+ Lr: DWORD,
+ Pc: DWORD,
+ Cpsr: DWORD,
+ Fpsrc: DWORD,
+ Padding: DWORD,
+ u: CONTEXT_u,
+ Bvr: [DWORD; ARM_MAX_BREAKPOINTS],
+ Bcr: [DWORD; ARM_MAX_BREAKPOINTS],
+ Wvr: [DWORD; ARM_MAX_WATCHPOINTS],
+ Wcr: [DWORD; ARM_MAX_WATCHPOINTS],
+ Padding2: [DWORD; 2],
+}}
+pub type PCONTEXT = *mut CONTEXT;
+} // IFDEF(arm)
+pub const WOW64_CONTEXT_i386: DWORD = 0x00010000;
+pub const WOW64_CONTEXT_i486: DWORD = 0x00010000;
+pub const WOW64_CONTEXT_CONTROL: DWORD = WOW64_CONTEXT_i386 | 0x00000001;
+pub const WOW64_CONTEXT_INTEGER: DWORD = WOW64_CONTEXT_i386 | 0x00000002;
+pub const WOW64_CONTEXT_SEGMENTS: DWORD = WOW64_CONTEXT_i386 | 0x00000004;
+pub const WOW64_CONTEXT_FLOATING_POINT: DWORD = WOW64_CONTEXT_i386 | 0x00000008;
+pub const WOW64_CONTEXT_DEBUG_REGISTERS: DWORD = WOW64_CONTEXT_i386 | 0x00000010;
+pub const WOW64_CONTEXT_EXTENDED_REGISTERS: DWORD = WOW64_CONTEXT_i386 | 0x00000020;
+pub const WOW64_CONTEXT_FULL: DWORD = WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER
+ | WOW64_CONTEXT_SEGMENTS;
+pub const WOW64_CONTEXT_ALL: DWORD = WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER
+ | WOW64_CONTEXT_SEGMENTS | WOW64_CONTEXT_FLOATING_POINT | WOW64_CONTEXT_DEBUG_REGISTERS
+ | WOW64_CONTEXT_EXTENDED_REGISTERS;
+pub const WOW64_CONTEXT_XSTATE: DWORD = WOW64_CONTEXT_i386 | 0x00000040;
+pub const WOW64_CONTEXT_EXCEPTION_ACTIVE: DWORD = 0x08000000;
+pub const WOW64_CONTEXT_SERVICE_ACTIVE: DWORD = 0x10000000;
+pub const WOW64_CONTEXT_EXCEPTION_REQUEST: DWORD = 0x40000000;
+pub const WOW64_CONTEXT_EXCEPTION_REPORTING: DWORD = 0x80000000;
+pub const WOW64_SIZE_OF_80387_REGISTERS: usize = 80;
+pub const WOW64_MAXIMUM_SUPPORTED_EXTENSION: usize = 512;
+STRUCT!{struct WOW64_FLOATING_SAVE_AREA {
+ ControlWord: DWORD,
+ StatusWord: DWORD,
+ TagWord: DWORD,
+ ErrorOffset: DWORD,
+ ErrorSelector: DWORD,
+ DataOffset: DWORD,
+ DataSelector: DWORD,
+ RegisterArea: [BYTE; WOW64_SIZE_OF_80387_REGISTERS],
+ Cr0NpxState: DWORD,
+}}
+pub type PWOW64_FLOATING_SAVE_AREA = *mut WOW64_FLOATING_SAVE_AREA;
+STRUCT!{struct WOW64_CONTEXT {
+ ContextFlags: DWORD,
+ Dr0: DWORD,
+ Dr1: DWORD,
+ Dr2: DWORD,
+ Dr3: DWORD,
+ Dr6: DWORD,
+ Dr7: DWORD,
+ FloatSave: WOW64_FLOATING_SAVE_AREA,
+ SegGs: DWORD,
+ SegFs: DWORD,
+ SegEs: DWORD,
+ SegDs: DWORD,
+ Edi: DWORD,
+ Esi: DWORD,
+ Ebx: DWORD,
+ Edx: DWORD,
+ Ecx: DWORD,
+ Eax: DWORD,
+ Ebp: DWORD,
+ Eip: DWORD,
+ SegCs: DWORD,
+ EFlags: DWORD,
+ Esp: DWORD,
+ SegSs: DWORD,
+ ExtendedRegisters: [BYTE; WOW64_MAXIMUM_SUPPORTED_EXTENSION],
+}}
+pub type PWOW64_CONTEXT = *mut WOW64_CONTEXT;
+STRUCT!{struct WOW64_LDT_ENTRY_Bytes {
+ BaseMid: BYTE,
+ Flags1: BYTE,
+ Flags2: BYTE,
+ BaseHi: BYTE,
+}}
+STRUCT!{struct WOW64_LDT_ENTRY_Bits {
+ BitFields: DWORD,
+}}
+BITFIELD!{WOW64_LDT_ENTRY_Bits BitFields: DWORD [
+ BaseMid set_BaseMid[0..8],
+ Type set_Type[8..13],
+ Dpl set_Dpl[13..15],
+ Pres set_Pres[15..16],
+ LimitHi set_LimitHi[16..20],
+ Sys set_Sys[20..21],
+ Reserved_0 set_Reserved_0[21..22],
+ Default_Big set_Default_Big[22..23],
+ Granularity set_Granularity[23..24],
+ BaseHi set_BaseHi[24..32],
+]}
+UNION!{union WOW64_LDT_ENTRY_HighWord {
+ [u32; 1],
+ Bytes Bytes_mut: WOW64_LDT_ENTRY_Bytes,
+ Bits Bits_mut: WOW64_LDT_ENTRY_Bits,
+}}
+STRUCT!{struct WOW64_LDT_ENTRY {
+ LimitLow: WORD,
+ BaseLow: WORD,
+ HighWord: WOW64_LDT_ENTRY_HighWord,
+}}
+pub type PWOW64_LDT_ENTRY = *mut WOW64_LDT_ENTRY;
+STRUCT!{struct WOW64_DESCRIPTOR_TABLE_ENTRY {
+ Selector: DWORD,
+ Descriptor: WOW64_LDT_ENTRY,
+}}
+pub type PWOW64_DESCRIPTOR_TABLE_ENTRY = *mut WOW64_DESCRIPTOR_TABLE_ENTRY;
+pub const EXCEPTION_NONCONTINUABLE: DWORD = 0x1;
+pub const EXCEPTION_UNWINDING: DWORD = 0x2;
+pub const EXCEPTION_EXIT_UNWIND: DWORD = 0x4;
+pub const EXCEPTION_STACK_INVALID: DWORD = 0x8;
+pub const EXCEPTION_NESTED_CALL: DWORD = 0x10;
+pub const EXCEPTION_TARGET_UNWIND: DWORD = 0x20;
+pub const EXCEPTION_COLLIDED_UNWIND: DWORD = 0x40;
+pub const EXCEPTION_UNWIND: DWORD = EXCEPTION_UNWINDING | EXCEPTION_EXIT_UNWIND
+ | EXCEPTION_TARGET_UNWIND | EXCEPTION_COLLIDED_UNWIND;
+#[inline]
+pub fn IS_UNWINDING(Flag: DWORD) -> bool {
+ (Flag & EXCEPTION_UNWIND) != 0
+}
+#[inline]
+pub fn IS_DISPATCHING(Flag: DWORD) -> bool {
+ (Flag & EXCEPTION_UNWIND) == 0
+}
+#[inline]
+pub fn IS_TARGET_UNWIND(Flag: DWORD) -> bool {
+ (Flag & EXCEPTION_TARGET_UNWIND) != 0
+}
+pub const EXCEPTION_MAXIMUM_PARAMETERS: usize = 15;
+STRUCT!{struct EXCEPTION_RECORD {
+ ExceptionCode: DWORD,
+ ExceptionFlags: DWORD,
+ ExceptionRecord: *mut EXCEPTION_RECORD,
+ ExceptionAddress: PVOID,
+ NumberParameters: DWORD,
+ ExceptionInformation: [ULONG_PTR; EXCEPTION_MAXIMUM_PARAMETERS],
+}}
+pub type PEXCEPTION_RECORD = *mut EXCEPTION_RECORD;
+STRUCT!{struct EXCEPTION_RECORD32 {
+ ExceptionCode: DWORD,
+ ExceptionFlags: DWORD,
+ ExceptionRecord: DWORD,
+ ExceptionAddress: DWORD,
+ NumberParameters: DWORD,
+ ExceptionInformation: [DWORD; EXCEPTION_MAXIMUM_PARAMETERS],
+}}
+pub type PEXCEPTION_RECORD32 = *mut EXCEPTION_RECORD32;
+STRUCT!{struct EXCEPTION_RECORD64 {
+ ExceptionCode: DWORD,
+ ExceptionFlags: DWORD,
+ ExceptionRecord: DWORD64,
+ ExceptionAddress: DWORD64,
+ NumberParameters: DWORD,
+ __unusedAlignment: DWORD,
+ ExceptionInformation: [DWORD64; EXCEPTION_MAXIMUM_PARAMETERS],
+}}
+pub type PEXCEPTION_RECORD64 = *mut EXCEPTION_RECORD64;
+STRUCT!{struct EXCEPTION_POINTERS {
+ ExceptionRecord: PEXCEPTION_RECORD,
+ ContextRecord: PCONTEXT,
+}}
+pub type PEXCEPTION_POINTERS = *mut EXCEPTION_POINTERS;
+pub type PACCESS_TOKEN = PVOID;
+pub type PSECURITY_DESCRIPTOR = PVOID;
+pub type PSID = PVOID;
+pub type PCLAIMS_BLOB = PVOID;
+pub type ACCESS_MASK = DWORD;
+pub type PACCESS_MASK = *mut ACCESS_MASK;
+pub const DELETE: DWORD = 0x00010000;
+pub const READ_CONTROL: DWORD = 0x00020000;
+pub const WRITE_DAC: DWORD = 0x00040000;
+pub const WRITE_OWNER: DWORD = 0x00080000;
+pub const SYNCHRONIZE: DWORD = 0x00100000;
+pub const STANDARD_RIGHTS_REQUIRED: DWORD = 0x000F0000;
+pub const STANDARD_RIGHTS_READ: DWORD = READ_CONTROL;
+pub const STANDARD_RIGHTS_WRITE: DWORD = READ_CONTROL;
+pub const STANDARD_RIGHTS_EXECUTE: DWORD = READ_CONTROL;
+pub const STANDARD_RIGHTS_ALL: DWORD = 0x001F0000;
+pub const SPECIFIC_RIGHTS_ALL: DWORD = 0x0000FFFF;
+pub const ACCESS_SYSTEM_SECURITY: DWORD = 0x01000000;
+pub const MAXIMUM_ALLOWED: DWORD = 0x02000000;
+pub const GENERIC_READ: DWORD = 0x80000000;
+pub const GENERIC_WRITE: DWORD = 0x40000000;
+pub const GENERIC_EXECUTE: DWORD = 0x20000000;
+pub const GENERIC_ALL: DWORD = 0x10000000;
+STRUCT!{struct GENERIC_MAPPING {
+ GenericRead: ACCESS_MASK,
+ GenericWrite: ACCESS_MASK,
+ GenericExecute: ACCESS_MASK,
+ GenericAll: ACCESS_MASK,
+}}
+pub type PGENERIC_MAPPING = *mut GENERIC_MAPPING;
+STRUCT!{struct LUID_AND_ATTRIBUTES {
+ Luid: LUID,
+ Attributes: DWORD,
+}}
+pub type PLUID_AND_ATTRIBUTES = *mut LUID_AND_ATTRIBUTES;
+pub type LUID_AND_ATTRIBUTES_ARRAY = LUID_AND_ATTRIBUTES;
+pub type PLUID_AND_ATTRIBUTES_ARRAY = *mut LUID_AND_ATTRIBUTES;
+STRUCT!{struct SID_IDENTIFIER_AUTHORITY {
+ Value: [BYTE; 6],
+}}
+pub type PSID_IDENTIFIER_AUTHORITY = *mut SID_IDENTIFIER_AUTHORITY;
+STRUCT!{struct SID {
+ Revision: BYTE,
+ SubAuthorityCount: BYTE,
+ IdentifierAuthority: SID_IDENTIFIER_AUTHORITY,
+ SubAuthority: [DWORD; 1],
+}}
+pub type PISID = *mut SID;
+pub const SID_REVISION: BYTE = 1;
+pub const SID_MAX_SUB_AUTHORITIES: BYTE = 15;
+pub const SID_RECOMMENDED_SUB_AUTHORITIES: BYTE = 1;
+pub const SECURITY_MAX_SID_SIZE: usize = 12 - 4 + (SID_MAX_SUB_AUTHORITIES as usize * 4);
+pub const SECURITY_MAX_SID_STRING_CHARACTERS: BYTE = 2 + 4 + 15 + (11 * SID_MAX_SUB_AUTHORITIES)
+ + 1;
+UNION!{union SE_SID {
+ [u32; 17],
+ Sid Sid_mut: SID,
+ Buffer Buffer_mut: [BYTE; SECURITY_MAX_SID_SIZE],
+}}
+pub type PSE_SID = *mut SE_SID;
+ENUM!{enum SID_NAME_USE {
+ SidTypeUser = 1,
+ SidTypeGroup,
+ SidTypeDomain,
+ SidTypeAlias,
+ SidTypeWellKnownGroup,
+ SidTypeDeletedAccount,
+ SidTypeInvalid,
+ SidTypeUnknown,
+ SidTypeComputer,
+ SidTypeLabel,
+ SidTypeLogonSession,
+}}
+pub type PSID_NAME_USE = *mut SID_NAME_USE;
+STRUCT!{struct SID_AND_ATTRIBUTES {
+ Sid: PSID,
+ Attributes: DWORD,
+}}
+pub type PSID_AND_ATTRIBUTES = *mut SID_AND_ATTRIBUTES;
+pub type SID_AND_ATTRIBUTES_ARRAY = SID_AND_ATTRIBUTES;
+pub type PSID_AND_ATTRIBUTES_ARRAY = *mut SID_AND_ATTRIBUTES;
+pub const SID_HASH_SIZE: usize = 32;
+pub type SID_HASH_ENTRY = ULONG_PTR;
+pub type PSID_HASH_ENTRY = *mut ULONG_PTR;
+STRUCT!{struct SID_AND_ATTRIBUTES_HASH {
+ SidCount: DWORD,
+ SidAttr: PSID_AND_ATTRIBUTES,
+ Hash: [SID_HASH_ENTRY; SID_HASH_SIZE],
+}}
+pub type PSID_AND_ATTRIBUTES_HASH = *mut SID_AND_ATTRIBUTES_HASH;
+pub const SECURITY_NULL_SID_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 0];
+pub const SECURITY_WORLD_SID_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 1];
+pub const SECURITY_LOCAL_SID_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 2];
+pub const SECURITY_CREATOR_SID_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 3];
+pub const SECURITY_NON_UNIQUE_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 4];
+pub const SECURITY_RESOURCE_MANAGER_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 9];
+pub const SECURITY_NULL_RID: DWORD = 0x00000000;
+pub const SECURITY_WORLD_RID: DWORD = 0x00000000;
+pub const SECURITY_LOCAL_RID: DWORD = 0x00000000;
+pub const SECURITY_LOCAL_LOGON_RID: DWORD = 0x00000001;
+pub const SECURITY_CREATOR_OWNER_RID: DWORD = 0x00000000;
+pub const SECURITY_CREATOR_GROUP_RID: DWORD = 0x00000001;
+pub const SECURITY_CREATOR_OWNER_SERVER_RID: DWORD = 0x00000002;
+pub const SECURITY_CREATOR_GROUP_SERVER_RID: DWORD = 0x00000003;
+pub const SECURITY_CREATOR_OWNER_RIGHTS_RID: DWORD = 0x00000004;
+pub const SECURITY_NT_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 5];
+pub const SECURITY_DIALUP_RID: DWORD = 0x00000001;
+pub const SECURITY_NETWORK_RID: DWORD = 0x00000002;
+pub const SECURITY_BATCH_RID: DWORD = 0x00000003;
+pub const SECURITY_INTERACTIVE_RID: DWORD = 0x00000004;
+pub const SECURITY_LOGON_IDS_RID: DWORD = 0x00000005;
+pub const SECURITY_LOGON_IDS_RID_COUNT: DWORD = 3;
+pub const SECURITY_SERVICE_RID: DWORD = 0x00000006;
+pub const SECURITY_ANONYMOUS_LOGON_RID: DWORD = 0x00000007;
+pub const SECURITY_PROXY_RID: DWORD = 0x00000008;
+pub const SECURITY_ENTERPRISE_CONTROLLERS_RID: DWORD = 0x00000009;
+pub const SECURITY_SERVER_LOGON_RID: DWORD = SECURITY_ENTERPRISE_CONTROLLERS_RID;
+pub const SECURITY_PRINCIPAL_SELF_RID: DWORD = 0x0000000A;
+pub const SECURITY_AUTHENTICATED_USER_RID: DWORD = 0x0000000B;
+pub const SECURITY_RESTRICTED_CODE_RID: DWORD = 0x0000000C;
+pub const SECURITY_TERMINAL_SERVER_RID: DWORD = 0x0000000D;
+pub const SECURITY_REMOTE_LOGON_RID: DWORD = 0x0000000E;
+pub const SECURITY_THIS_ORGANIZATION_RID: DWORD = 0x0000000F;
+pub const SECURITY_IUSER_RID: DWORD = 0x00000011;
+pub const SECURITY_LOCAL_SYSTEM_RID: DWORD = 0x00000012;
+pub const SECURITY_LOCAL_SERVICE_RID: DWORD = 0x00000013;
+pub const SECURITY_NETWORK_SERVICE_RID: DWORD = 0x00000014;
+pub const SECURITY_NT_NON_UNIQUE: DWORD = 0x00000015;
+pub const SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT: DWORD = 3;
+pub const SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID: DWORD = 0x00000016;
+pub const SECURITY_BUILTIN_DOMAIN_RID: DWORD = 0x00000020;
+pub const SECURITY_WRITE_RESTRICTED_CODE_RID: DWORD = 0x00000021;
+pub const SECURITY_PACKAGE_BASE_RID: DWORD = 0x00000040;
+pub const SECURITY_PACKAGE_RID_COUNT: DWORD = 2;
+pub const SECURITY_PACKAGE_NTLM_RID: DWORD = 0x0000000A;
+pub const SECURITY_PACKAGE_SCHANNEL_RID: DWORD = 0x0000000E;
+pub const SECURITY_PACKAGE_DIGEST_RID: DWORD = 0x00000015;
+pub const SECURITY_CRED_TYPE_BASE_RID: DWORD = 0x00000041;
+pub const SECURITY_CRED_TYPE_RID_COUNT: DWORD = 2;
+pub const SECURITY_CRED_TYPE_THIS_ORG_CERT_RID: DWORD = 0x00000001;
+pub const SECURITY_MIN_BASE_RID: DWORD = 0x00000050;
+pub const SECURITY_SERVICE_ID_BASE_RID: DWORD = 0x00000050;
+pub const SECURITY_SERVICE_ID_RID_COUNT: DWORD = 6;
+pub const SECURITY_RESERVED_ID_BASE_RID: DWORD = 0x00000051;
+pub const SECURITY_APPPOOL_ID_BASE_RID: DWORD = 0x00000052;
+pub const SECURITY_APPPOOL_ID_RID_COUNT: DWORD = 6;
+pub const SECURITY_VIRTUALSERVER_ID_BASE_RID: DWORD = 0x00000053;
+pub const SECURITY_VIRTUALSERVER_ID_RID_COUNT: DWORD = 6;
+pub const SECURITY_USERMODEDRIVERHOST_ID_BASE_RID: DWORD = 0x00000054;
+pub const SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT: DWORD = 6;
+pub const SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID: DWORD = 0x00000055;
+pub const SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT: DWORD = 6;
+pub const SECURITY_WMIHOST_ID_BASE_RID: DWORD = 0x00000056;
+pub const SECURITY_WMIHOST_ID_RID_COUNT: DWORD = 6;
+pub const SECURITY_TASK_ID_BASE_RID: DWORD = 0x00000057;
+pub const SECURITY_NFS_ID_BASE_RID: DWORD = 0x00000058;
+pub const SECURITY_COM_ID_BASE_RID: DWORD = 0x00000059;
+pub const SECURITY_WINDOW_MANAGER_BASE_RID: DWORD = 0x0000005A;
+pub const SECURITY_RDV_GFX_BASE_RID: DWORD = 0x0000005B;
+pub const SECURITY_DASHOST_ID_BASE_RID: DWORD = 0x0000005C;
+pub const SECURITY_DASHOST_ID_RID_COUNT: DWORD = 6;
+pub const SECURITY_USERMANAGER_ID_BASE_RID: DWORD = 0x0000005D;
+pub const SECURITY_USERMANAGER_ID_RID_COUNT: DWORD = 6;
+pub const SECURITY_WINRM_ID_BASE_RID: DWORD = 0x0000005E;
+pub const SECURITY_WINRM_ID_RID_COUNT: DWORD = 6;
+pub const SECURITY_CCG_ID_BASE_RID: DWORD = 0x0000005F;
+pub const SECURITY_UMFD_BASE_RID: DWORD = 0x00000060;
+pub const SECURITY_VIRTUALACCOUNT_ID_RID_COUNT: DWORD = 6;
+pub const SECURITY_MAX_BASE_RID: DWORD = 0x0000006F;
+pub const SECURITY_MAX_ALWAYS_FILTERED: DWORD = 0x000003E7;
+pub const SECURITY_MIN_NEVER_FILTERED: DWORD = 0x000003E8;
+pub const SECURITY_OTHER_ORGANIZATION_RID: DWORD = 0x000003E8;
+pub const SECURITY_WINDOWSMOBILE_ID_BASE_RID: DWORD = 0x00000070;
+pub const SECURITY_INSTALLER_GROUP_CAPABILITY_BASE: DWORD = 0x20;
+pub const SECURITY_INSTALLER_GROUP_CAPABILITY_RID_COUNT: DWORD = 9;
+pub const SECURITY_INSTALLER_CAPABILITY_RID_COUNT: DWORD = 10;
+pub const SECURITY_LOCAL_ACCOUNT_RID: DWORD = 0x00000071;
+pub const SECURITY_LOCAL_ACCOUNT_AND_ADMIN_RID: DWORD = 0x00000072;
+pub const DOMAIN_GROUP_RID_AUTHORIZATION_DATA_IS_COMPOUNDED: DWORD = 0x000001F0;
+pub const DOMAIN_GROUP_RID_AUTHORIZATION_DATA_CONTAINS_CLAIMS: DWORD = 0x000001F1;
+pub const DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS: DWORD = 0x000001F2;
+pub const FOREST_USER_RID_MAX: DWORD = 0x000001F3;
+pub const DOMAIN_USER_RID_ADMIN: DWORD = 0x000001F4;
+pub const DOMAIN_USER_RID_GUEST: DWORD = 0x000001F5;
+pub const DOMAIN_USER_RID_KRBTGT: DWORD = 0x000001F6;
+pub const DOMAIN_USER_RID_DEFAULT_ACCOUNT: DWORD = 0x000001F7;
+pub const DOMAIN_USER_RID_MAX: DWORD = 0x000003E7;
+pub const DOMAIN_GROUP_RID_ADMINS: DWORD = 0x00000200;
+pub const DOMAIN_GROUP_RID_USERS: DWORD = 0x00000201;
+pub const DOMAIN_GROUP_RID_GUESTS: DWORD = 0x00000202;
+pub const DOMAIN_GROUP_RID_COMPUTERS: DWORD = 0x00000203;
+pub const DOMAIN_GROUP_RID_CONTROLLERS: DWORD = 0x00000204;
+pub const DOMAIN_GROUP_RID_CERT_ADMINS: DWORD = 0x00000205;
+pub const DOMAIN_GROUP_RID_SCHEMA_ADMINS: DWORD = 0x00000206;
+pub const DOMAIN_GROUP_RID_ENTERPRISE_ADMINS: DWORD = 0x00000207;
+pub const DOMAIN_GROUP_RID_POLICY_ADMINS: DWORD = 0x00000208;
+pub const DOMAIN_GROUP_RID_READONLY_CONTROLLERS: DWORD = 0x00000209;
+pub const DOMAIN_GROUP_RID_CLONEABLE_CONTROLLERS: DWORD = 0x0000020A;
+pub const DOMAIN_GROUP_RID_CDC_RESERVED: DWORD = 0x0000020C;
+pub const DOMAIN_GROUP_RID_PROTECTED_USERS: DWORD = 0x0000020D;
+pub const DOMAIN_GROUP_RID_KEY_ADMINS: DWORD = 0x0000020E;
+pub const DOMAIN_GROUP_RID_ENTERPRISE_KEY_ADMINS: DWORD = 0x0000020F;
+pub const DOMAIN_ALIAS_RID_ADMINS: DWORD = 0x00000220;
+pub const DOMAIN_ALIAS_RID_USERS: DWORD = 0x00000221;
+pub const DOMAIN_ALIAS_RID_GUESTS: DWORD = 0x00000222;
+pub const DOMAIN_ALIAS_RID_POWER_USERS: DWORD = 0x00000223;
+pub const DOMAIN_ALIAS_RID_ACCOUNT_OPS: DWORD = 0x00000224;
+pub const DOMAIN_ALIAS_RID_SYSTEM_OPS: DWORD = 0x00000225;
+pub const DOMAIN_ALIAS_RID_PRINT_OPS: DWORD = 0x00000226;
+pub const DOMAIN_ALIAS_RID_BACKUP_OPS: DWORD = 0x00000227;
+pub const DOMAIN_ALIAS_RID_REPLICATOR: DWORD = 0x00000228;
+pub const DOMAIN_ALIAS_RID_RAS_SERVERS: DWORD = 0x00000229;
+pub const DOMAIN_ALIAS_RID_PREW2KCOMPACCESS: DWORD = 0x0000022A;
+pub const DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS: DWORD = 0x0000022B;
+pub const DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS: DWORD = 0x0000022C;
+pub const DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS: DWORD = 0x0000022D;
+pub const DOMAIN_ALIAS_RID_MONITORING_USERS: DWORD = 0x0000022E;
+pub const DOMAIN_ALIAS_RID_LOGGING_USERS: DWORD = 0x0000022F;
+pub const DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS: DWORD = 0x00000230;
+pub const DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS: DWORD = 0x00000231;
+pub const DOMAIN_ALIAS_RID_DCOM_USERS: DWORD = 0x00000232;
+pub const DOMAIN_ALIAS_RID_IUSERS: DWORD = 0x00000238;
+pub const DOMAIN_ALIAS_RID_CRYPTO_OPERATORS: DWORD = 0x00000239;
+pub const DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP: DWORD = 0x0000023B;
+pub const DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP: DWORD = 0x0000023C;
+pub const DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP: DWORD = 0x0000023D;
+pub const DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP: DWORD = 0x0000023E;
+pub const DOMAIN_ALIAS_RID_RDS_REMOTE_ACCESS_SERVERS: DWORD = 0x0000023F;
+pub const DOMAIN_ALIAS_RID_RDS_ENDPOINT_SERVERS: DWORD = 0x00000240;
+pub const DOMAIN_ALIAS_RID_RDS_MANAGEMENT_SERVERS: DWORD = 0x00000241;
+pub const DOMAIN_ALIAS_RID_HYPER_V_ADMINS: DWORD = 0x00000242;
+pub const DOMAIN_ALIAS_RID_ACCESS_CONTROL_ASSISTANCE_OPS: DWORD = 0x00000243;
+pub const DOMAIN_ALIAS_RID_REMOTE_MANAGEMENT_USERS: DWORD = 0x00000244;
+pub const DOMAIN_ALIAS_RID_DEFAULT_ACCOUNT: DWORD = 0x00000245;
+pub const DOMAIN_ALIAS_RID_STORAGE_REPLICA_ADMINS: DWORD = 0x00000246;
+pub const SECURITY_APP_PACKAGE_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 15];
+pub const SECURITY_APP_PACKAGE_BASE_RID: DWORD = 0x00000002;
+pub const SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT: DWORD = 2;
+pub const SECURITY_APP_PACKAGE_RID_COUNT: DWORD = 8;
+pub const SECURITY_CAPABILITY_BASE_RID: DWORD = 0x00000003;
+pub const SECURITY_CAPABILITY_APP_RID: DWORD = 0x00000040;
+pub const SECURITY_BUILTIN_CAPABILITY_RID_COUNT: DWORD = 2;
+pub const SECURITY_CAPABILITY_RID_COUNT: DWORD = 5;
+pub const SECURITY_PARENT_PACKAGE_RID_COUNT: DWORD = SECURITY_APP_PACKAGE_RID_COUNT;
+pub const SECURITY_CHILD_PACKAGE_RID_COUNT: DWORD = 12;
+pub const SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE: DWORD = 0x00000001;
+pub const SECURITY_BUILTIN_PACKAGE_ANY_RESTRICTED_PACKAGE: DWORD = 0x00000002;
+pub const SECURITY_CAPABILITY_INTERNET_CLIENT: DWORD = 0x00000001;
+pub const SECURITY_CAPABILITY_INTERNET_CLIENT_SERVER: DWORD = 0x00000002;
+pub const SECURITY_CAPABILITY_PRIVATE_NETWORK_CLIENT_SERVER: DWORD = 0x00000003;
+pub const SECURITY_CAPABILITY_PICTURES_LIBRARY: DWORD = 0x00000004;
+pub const SECURITY_CAPABILITY_VIDEOS_LIBRARY: DWORD = 0x00000005;
+pub const SECURITY_CAPABILITY_MUSIC_LIBRARY: DWORD = 0x00000006;
+pub const SECURITY_CAPABILITY_DOCUMENTS_LIBRARY: DWORD = 0x00000007;
+pub const SECURITY_CAPABILITY_ENTERPRISE_AUTHENTICATION: DWORD = 0x00000008;
+pub const SECURITY_CAPABILITY_SHARED_USER_CERTIFICATES: DWORD = 0x00000009;
+pub const SECURITY_CAPABILITY_REMOVABLE_STORAGE: DWORD = 0x0000000A;
+pub const SECURITY_CAPABILITY_APPOINTMENTS: DWORD = 0x0000000B;
+pub const SECURITY_CAPABILITY_CONTACTS: DWORD = 0x0000000C;
+pub const SECURITY_CAPABILITY_INTERNET_EXPLORER: DWORD = 0x00001000;
+pub const SECURITY_MANDATORY_LABEL_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 16];
+pub const SECURITY_MANDATORY_UNTRUSTED_RID: DWORD = 0x00000000;
+pub const SECURITY_MANDATORY_LOW_RID: DWORD = 0x00001000;
+pub const SECURITY_MANDATORY_MEDIUM_RID: DWORD = 0x00002000;
+pub const SECURITY_MANDATORY_MEDIUM_PLUS_RID: DWORD = SECURITY_MANDATORY_MEDIUM_RID + 0x10;
+pub const SECURITY_MANDATORY_HIGH_RID: DWORD = 0x00003000;
+pub const SECURITY_MANDATORY_SYSTEM_RID: DWORD = 0x00004000;
+pub const SECURITY_MANDATORY_MAXIMUM_USER_RID: DWORD = SECURITY_MANDATORY_SYSTEM_RID;
+#[inline]
+pub fn MANDATORY_LEVEL_TO_MANDATORY_RID(IL: DWORD) -> DWORD {
+ IL * 0x1000
+}
+pub const SECURITY_SCOPED_POLICY_ID_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 17];
+pub const SECURITY_AUTHENTICATION_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 18];
+pub const SECURITY_AUTHENTICATION_AUTHORITY_RID_COUNT: DWORD = 1;
+pub const SECURITY_AUTHENTICATION_AUTHORITY_ASSERTED_RID: DWORD = 0x00000001;
+pub const SECURITY_AUTHENTICATION_SERVICE_ASSERTED_RID: DWORD = 0x00000002;
+pub const SECURITY_AUTHENTICATION_FRESH_KEY_AUTH_RID: DWORD = 0x00000003;
+pub const SECURITY_AUTHENTICATION_KEY_TRUST_RID: DWORD = 0x00000004;
+pub const SECURITY_AUTHENTICATION_KEY_PROPERTY_MFA_RID: DWORD = 0x00000005;
+pub const SECURITY_AUTHENTICATION_KEY_PROPERTY_ATTESTATION_RID: DWORD = 0x00000006;
+pub const SECURITY_PROCESS_TRUST_AUTHORITY: [BYTE; 6] = [0, 0, 0, 0, 0, 19];
+pub const SECURITY_PROCESS_TRUST_AUTHORITY_RID_COUNT: DWORD = 2;
+pub const SECURITY_PROCESS_PROTECTION_TYPE_FULL_RID: DWORD = 0x00000400;
+pub const SECURITY_PROCESS_PROTECTION_TYPE_LITE_RID: DWORD = 0x00000200;
+pub const SECURITY_PROCESS_PROTECTION_TYPE_NONE_RID: DWORD = 0x00000000;
+pub const SECURITY_PROCESS_PROTECTION_LEVEL_WINTCB_RID: DWORD = 0x00002000;
+pub const SECURITY_PROCESS_PROTECTION_LEVEL_WINDOWS_RID: DWORD = 0x00001000;
+pub const SECURITY_PROCESS_PROTECTION_LEVEL_APP_RID: DWORD = 0x00000800;
+pub const SECURITY_PROCESS_PROTECTION_LEVEL_NONE_RID: DWORD = 0x00000000;
+pub const SECURITY_TRUSTED_INSTALLER_RID1: DWORD = 95600888;
+pub const SECURITY_TRUSTED_INSTALLER_RID2: DWORD = 341852264;
+pub const SECURITY_TRUSTED_INSTALLER_RID3: DWORD = 183103804;
+pub const SECURITY_TRUSTED_INSTALLER_RID4: DWORD = 185329263;
+pub const SECURITY_TRUSTED_INSTALLER_RID5: DWORD = 227147846;
+ENUM!{enum WELL_KNOWN_SID_TYPE {
+ WinNullSid = 0,
+ WinWorldSid = 1,
+ WinLocalSid = 2,
+ WinCreatorOwnerSid = 3,
+ WinCreatorGroupSid = 4,
+ WinCreatorOwnerServerSid = 5,
+ WinCreatorGroupServerSid = 6,
+ WinNtAuthoritySid = 7,
+ WinDialupSid = 8,
+ WinNetworkSid = 9,
+ WinBatchSid = 10,
+ WinInteractiveSid = 11,
+ WinServiceSid = 12,
+ WinAnonymousSid = 13,
+ WinProxySid = 14,
+ WinEnterpriseControllersSid = 15,
+ WinSelfSid = 16,
+ WinAuthenticatedUserSid = 17,
+ WinRestrictedCodeSid = 18,
+ WinTerminalServerSid = 19,
+ WinRemoteLogonIdSid = 20,
+ WinLogonIdsSid = 21,
+ WinLocalSystemSid = 22,
+ WinLocalServiceSid = 23,
+ WinNetworkServiceSid = 24,
+ WinBuiltinDomainSid = 25,
+ WinBuiltinAdministratorsSid = 26,
+ WinBuiltinUsersSid = 27,
+ WinBuiltinGuestsSid = 28,
+ WinBuiltinPowerUsersSid = 29,
+ WinBuiltinAccountOperatorsSid = 30,
+ WinBuiltinSystemOperatorsSid = 31,
+ WinBuiltinPrintOperatorsSid = 32,
+ WinBuiltinBackupOperatorsSid = 33,
+ WinBuiltinReplicatorSid = 34,
+ WinBuiltinPreWindows2000CompatibleAccessSid = 35,
+ WinBuiltinRemoteDesktopUsersSid = 36,
+ WinBuiltinNetworkConfigurationOperatorsSid = 37,
+ WinAccountAdministratorSid = 38,
+ WinAccountGuestSid = 39,
+ WinAccountKrbtgtSid = 40,
+ WinAccountDomainAdminsSid = 41,
+ WinAccountDomainUsersSid = 42,
+ WinAccountDomainGuestsSid = 43,
+ WinAccountComputersSid = 44,
+ WinAccountControllersSid = 45,
+ WinAccountCertAdminsSid = 46,
+ WinAccountSchemaAdminsSid = 47,
+ WinAccountEnterpriseAdminsSid = 48,
+ WinAccountPolicyAdminsSid = 49,
+ WinAccountRasAndIasServersSid = 50,
+ WinNTLMAuthenticationSid = 51,
+ WinDigestAuthenticationSid = 52,
+ WinSChannelAuthenticationSid = 53,
+ WinThisOrganizationSid = 54,
+ WinOtherOrganizationSid = 55,
+ WinBuiltinIncomingForestTrustBuildersSid = 56,
+ WinBuiltinPerfMonitoringUsersSid = 57,
+ WinBuiltinPerfLoggingUsersSid = 58,
+ WinBuiltinAuthorizationAccessSid = 59,
+ WinBuiltinTerminalServerLicenseServersSid = 60,
+ WinBuiltinDCOMUsersSid = 61,
+ WinBuiltinIUsersSid = 62,
+ WinIUserSid = 63,
+ WinBuiltinCryptoOperatorsSid = 64,
+ WinUntrustedLabelSid = 65,
+ WinLowLabelSid = 66,
+ WinMediumLabelSid = 67,
+ WinHighLabelSid = 68,
+ WinSystemLabelSid = 69,
+ WinWriteRestrictedCodeSid = 70,
+ WinCreatorOwnerRightsSid = 71,
+ WinCacheablePrincipalsGroupSid = 72,
+ WinNonCacheablePrincipalsGroupSid = 73,
+ WinEnterpriseReadonlyControllersSid = 74,
+ WinAccountReadonlyControllersSid = 75,
+ WinBuiltinEventLogReadersGroup = 76,
+ WinNewEnterpriseReadonlyControllersSid = 77,
+ WinBuiltinCertSvcDComAccessGroup = 78,
+ WinMediumPlusLabelSid = 79,
+ WinLocalLogonSid = 80,
+ WinConsoleLogonSid = 81,
+ WinThisOrganizationCertificateSid = 82,
+ WinApplicationPackageAuthoritySid = 83,
+ WinBuiltinAnyPackageSid = 84,
+ WinCapabilityInternetClientSid = 85,
+ WinCapabilityInternetClientServerSid = 86,
+ WinCapabilityPrivateNetworkClientServerSid = 87,
+ WinCapabilityPicturesLibrarySid = 88,
+ WinCapabilityVideosLibrarySid = 89,
+ WinCapabilityMusicLibrarySid = 90,
+ WinCapabilityDocumentsLibrarySid = 91,
+ WinCapabilitySharedUserCertificatesSid = 92,
+ WinCapabilityEnterpriseAuthenticationSid = 93,
+ WinCapabilityRemovableStorageSid = 94,
+ WinBuiltinRDSRemoteAccessServersSid = 95,
+ WinBuiltinRDSEndpointServersSid = 96,
+ WinBuiltinRDSManagementServersSid = 97,
+ WinUserModeDriversSid = 98,
+ WinBuiltinHyperVAdminsSid = 99,
+ WinAccountCloneableControllersSid = 100,
+ WinBuiltinAccessControlAssistanceOperatorsSid = 101,
+ WinBuiltinRemoteManagementUsersSid = 102,
+ WinAuthenticationAuthorityAssertedSid = 103,
+ WinAuthenticationServiceAssertedSid = 104,
+ WinLocalAccountSid = 105,
+ WinLocalAccountAndAdministratorSid = 106,
+ WinAccountProtectedUsersSid = 107,
+ WinCapabilityAppointmentsSid = 108,
+ WinCapabilityContactsSid = 109,
+ WinAccountDefaultSystemManagedSid = 110,
+ WinBuiltinDefaultSystemManagedGroupSid = 111,
+ WinBuiltinStorageReplicaAdminsSid = 112,
+ WinAccountKeyAdminsSid = 113,
+ WinAccountEnterpriseKeyAdminsSid = 114,
+ WinAuthenticationKeyTrustSid = 115,
+ WinAuthenticationKeyPropertyMFASid = 116,
+ WinAuthenticationKeyPropertyAttestationSid = 117,
+ WinAuthenticationFreshKeyAuthSid = 118,
+}}
+pub const SYSTEM_LUID: LUID = LUID { LowPart: 0x3e7, HighPart: 0x0 };
+pub const ANONYMOUS_LOGON_LUID: LUID = LUID { LowPart: 0x3e6, HighPart: 0x0 };
+pub const LOCALSERVICE_LUID: LUID = LUID { LowPart: 0x3e5, HighPart: 0x0 };
+pub const NETWORKSERVICE_LUID: LUID = LUID { LowPart: 0x3e4, HighPart: 0x0 };
+pub const IUSER_LUID: LUID = LUID { LowPart: 0x3e3, HighPart: 0x0 };
+pub const SE_GROUP_MANDATORY: DWORD = 0x00000001;
+pub const SE_GROUP_ENABLED_BY_DEFAULT: DWORD = 0x00000002;
+pub const SE_GROUP_ENABLED: DWORD = 0x00000004;
+pub const SE_GROUP_OWNER: DWORD = 0x00000008;
+pub const SE_GROUP_USE_FOR_DENY_ONLY: DWORD = 0x00000010;
+pub const SE_GROUP_INTEGRITY: DWORD = 0x00000020;
+pub const SE_GROUP_INTEGRITY_ENABLED: DWORD = 0x00000040;
+pub const SE_GROUP_LOGON_ID: DWORD = 0xC0000000;
+pub const SE_GROUP_RESOURCE: DWORD = 0x20000000;
+pub const SE_GROUP_VALID_ATTRIBUTES: DWORD = SE_GROUP_MANDATORY | SE_GROUP_ENABLED_BY_DEFAULT
+ | SE_GROUP_ENABLED | SE_GROUP_OWNER | SE_GROUP_USE_FOR_DENY_ONLY | SE_GROUP_LOGON_ID
+ | SE_GROUP_RESOURCE | SE_GROUP_INTEGRITY | SE_GROUP_INTEGRITY_ENABLED;
+pub const ACL_REVISION: BYTE = 2;
+pub const ACL_REVISION_DS: BYTE = 4;
+pub const ACL_REVISION1: BYTE = 1;
+pub const MIN_ACL_REVISION: BYTE = ACL_REVISION2;
+pub const ACL_REVISION2: BYTE = 2;
+pub const ACL_REVISION3: BYTE = 3;
+pub const ACL_REVISION4: BYTE = 4;
+pub const MAX_ACL_REVISION: BYTE = ACL_REVISION4;
+STRUCT!{struct ACL {
+ AclRevision: BYTE,
+ Sbz1: BYTE,
+ AclSize: WORD,
+ AceCount: WORD,
+ Sbz2: WORD,
+}}
+pub type PACL = *mut ACL;
+STRUCT!{struct ACE_HEADER {
+ AceType: BYTE,
+ AceFlags: BYTE,
+ AceSize: WORD,
+}}
+pub type PACE_HEADER = *mut ACE_HEADER;
+pub const ACCESS_MIN_MS_ACE_TYPE: BYTE = 0x0;
+pub const ACCESS_ALLOWED_ACE_TYPE: BYTE = 0x0;
+pub const ACCESS_DENIED_ACE_TYPE: BYTE = 0x1;
+pub const SYSTEM_AUDIT_ACE_TYPE: BYTE = 0x2;
+pub const SYSTEM_ALARM_ACE_TYPE: BYTE = 0x3;
+pub const ACCESS_MAX_MS_V2_ACE_TYPE: BYTE = 0x3;
+pub const ACCESS_ALLOWED_COMPOUND_ACE_TYPE: BYTE = 0x4;
+pub const ACCESS_MAX_MS_V3_ACE_TYPE: BYTE = 0x4;
+pub const ACCESS_MIN_MS_OBJECT_ACE_TYPE: BYTE = 0x5;
+pub const ACCESS_ALLOWED_OBJECT_ACE_TYPE: BYTE = 0x5;
+pub const ACCESS_DENIED_OBJECT_ACE_TYPE: BYTE = 0x6;
+pub const SYSTEM_AUDIT_OBJECT_ACE_TYPE: BYTE = 0x7;
+pub const SYSTEM_ALARM_OBJECT_ACE_TYPE: BYTE = 0x8;
+pub const ACCESS_MAX_MS_OBJECT_ACE_TYPE: BYTE = 0x8;
+pub const ACCESS_MAX_MS_V4_ACE_TYPE: BYTE = 0x8;
+pub const ACCESS_MAX_MS_ACE_TYPE: BYTE = 0x8;
+pub const ACCESS_ALLOWED_CALLBACK_ACE_TYPE: BYTE = 0x9;
+pub const ACCESS_DENIED_CALLBACK_ACE_TYPE: BYTE = 0xA;
+pub const ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE: BYTE = 0xB;
+pub const ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE: BYTE = 0xC;
+pub const SYSTEM_AUDIT_CALLBACK_ACE_TYPE: BYTE = 0xD;
+pub const SYSTEM_ALARM_CALLBACK_ACE_TYPE: BYTE = 0xE;
+pub const SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE: BYTE = 0xF;
+pub const SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE: BYTE = 0x10;
+pub const SYSTEM_MANDATORY_LABEL_ACE_TYPE: BYTE = 0x11;
+pub const SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE: BYTE = 0x12;
+pub const SYSTEM_SCOPED_POLICY_ID_ACE_TYPE: BYTE = 0x13;
+pub const SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE: BYTE = 0x14;
+pub const SYSTEM_ACCESS_FILTER_ACE_TYPE: BYTE = 0x15;
+pub const ACCESS_MAX_MS_V5_ACE_TYPE: BYTE = 0x15;
+pub const OBJECT_INHERIT_ACE: BYTE = 0x1;
+pub const CONTAINER_INHERIT_ACE: BYTE = 0x2;
+pub const NO_PROPAGATE_INHERIT_ACE: BYTE = 0x4;
+pub const INHERIT_ONLY_ACE: BYTE = 0x8;
+pub const INHERITED_ACE: BYTE = 0x10;
+pub const VALID_INHERIT_FLAGS: BYTE = 0x1F;
+pub const SUCCESSFUL_ACCESS_ACE_FLAG: BYTE = 0x40;
+pub const FAILED_ACCESS_ACE_FLAG: BYTE = 0x80;
+pub const TRUST_PROTECTED_FILTER_ACE_FLAG: BYTE = 0x40;
+STRUCT!{struct ACCESS_ALLOWED_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ SidStart: DWORD,
+}}
+pub type PACCESS_ALLOWED_ACE = *mut ACCESS_ALLOWED_ACE;
+STRUCT!{struct ACCESS_DENIED_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ SidStart: DWORD,
+}}
+pub type PACCESS_DENIED_ACE = *mut ACCESS_DENIED_ACE;
+STRUCT!{struct SYSTEM_AUDIT_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ SidStart: DWORD,
+}}
+pub type PSYSTEM_AUDIT_ACE = *mut SYSTEM_AUDIT_ACE;
+STRUCT!{struct SYSTEM_ALARM_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ SidStart: DWORD,
+}}
+pub type PSYSTEM_ALARM_ACE = *mut SYSTEM_ALARM_ACE;
+STRUCT!{struct SYSTEM_RESOURCE_ATTRIBUTE_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ SidStart: DWORD,
+}}
+pub type PSYSTEM_RESOURCE_ATTRIBUTE_ACE = *mut SYSTEM_RESOURCE_ATTRIBUTE_ACE;
+STRUCT!{struct SYSTEM_SCOPED_POLICY_ID_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ SidStart: DWORD,
+}}
+pub type PSYSTEM_SCOPED_POLICY_ID_ACE = *mut SYSTEM_SCOPED_POLICY_ID_ACE;
+STRUCT!{struct SYSTEM_MANDATORY_LABEL_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ SidStart: DWORD,
+}}
+pub type PSYSTEM_MANDATORY_LABEL_ACE = *mut SYSTEM_MANDATORY_LABEL_ACE;
+STRUCT!{struct SYSTEM_PROCESS_TRUST_LABEL_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ SidStart: DWORD,
+}}
+pub type PSYSTEM_PROCESS_TRUST_LABEL_ACE = *mut SYSTEM_PROCESS_TRUST_LABEL_ACE;
+STRUCT!{struct SYSTEM_ACCESS_FILTER_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ SidStart: DWORD,
+}}
+pub type PSYSTEM_ACCESS_FILTER_ACE = *mut SYSTEM_ACCESS_FILTER_ACE;
+pub const SYSTEM_MANDATORY_LABEL_NO_WRITE_UP: ACCESS_MASK = 0x1;
+pub const SYSTEM_MANDATORY_LABEL_NO_READ_UP: ACCESS_MASK = 0x2;
+pub const SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP: ACCESS_MASK = 0x4;
+pub const SYSTEM_MANDATORY_LABEL_VALID_MASK: ACCESS_MASK = SYSTEM_MANDATORY_LABEL_NO_WRITE_UP
+ | SYSTEM_MANDATORY_LABEL_NO_READ_UP | SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP;
+pub const SYSTEM_PROCESS_TRUST_LABEL_VALID_MASK: ACCESS_MASK = 0x00ffffff;
+pub const SYSTEM_PROCESS_TRUST_NOCONSTRAINT_MASK: ACCESS_MASK = 0xffffffff;
+pub const SYSTEM_ACCESS_FILTER_VALID_MASK: ACCESS_MASK = 0x00ffffff;
+pub const SYSTEM_ACCESS_FILTER_NOCONSTRAINT_MASK: ACCESS_MASK = 0xffffffff;
+STRUCT!{struct ACCESS_ALLOWED_OBJECT_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ Flags: DWORD,
+ ObjectType: GUID,
+ InheritedObjectType: GUID,
+ SidStart: DWORD,
+}}
+pub type PACCESS_ALLOWED_OBJECT_ACE = *mut ACCESS_ALLOWED_OBJECT_ACE;
+STRUCT!{struct ACCESS_DENIED_OBJECT_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ Flags: DWORD,
+ ObjectType: GUID,
+ InheritedObjectType: GUID,
+ SidStart: DWORD,
+}}
+pub type PACCESS_DENIED_OBJECT_ACE = *mut ACCESS_DENIED_OBJECT_ACE;
+STRUCT!{struct SYSTEM_AUDIT_OBJECT_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ Flags: DWORD,
+ ObjectType: GUID,
+ InheritedObjectType: GUID,
+ SidStart: DWORD,
+}}
+pub type PSYSTEM_AUDIT_OBJECT_ACE = *mut SYSTEM_AUDIT_OBJECT_ACE;
+STRUCT!{struct SYSTEM_ALARM_OBJECT_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ Flags: DWORD,
+ ObjectType: GUID,
+ InheritedObjectType: GUID,
+ SidStart: DWORD,
+}}
+pub type PSYSTEM_ALARM_OBJECT_ACE = *mut SYSTEM_ALARM_OBJECT_ACE;
+STRUCT!{struct ACCESS_ALLOWED_CALLBACK_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ SidStart: DWORD,
+}}
+pub type PACCESS_ALLOWED_CALLBACK_ACE = *mut ACCESS_ALLOWED_CALLBACK_ACE;
+STRUCT!{struct ACCESS_DENIED_CALLBACK_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ SidStart: DWORD,
+}}
+pub type PACCESS_DENIED_CALLBACK_ACE = *mut ACCESS_DENIED_CALLBACK_ACE;
+STRUCT!{struct SYSTEM_AUDIT_CALLBACK_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ SidStart: DWORD,
+}}
+pub type PSYSTEM_AUDIT_CALLBACK_ACE = *mut SYSTEM_AUDIT_CALLBACK_ACE;
+STRUCT!{struct SYSTEM_ALARM_CALLBACK_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ SidStart: DWORD,
+}}
+pub type PSYSTEM_ALARM_CALLBACK_ACE = *mut SYSTEM_ALARM_CALLBACK_ACE;
+STRUCT!{struct ACCESS_ALLOWED_CALLBACK_OBJECT_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ Flags: DWORD,
+ ObjectType: GUID,
+ InheritedObjectType: GUID,
+ SidStart: DWORD,
+}}
+pub type PACCESS_ALLOWED_CALLBACK_OBJECT_ACE = *mut ACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
+STRUCT!{struct ACCESS_DENIED_CALLBACK_OBJECT_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ Flags: DWORD,
+ ObjectType: GUID,
+ InheritedObjectType: GUID,
+ SidStart: DWORD,
+}}
+pub type PACCESS_DENIED_CALLBACK_OBJECT_ACE = *mut ACCESS_DENIED_CALLBACK_OBJECT_ACE;
+STRUCT!{struct SYSTEM_AUDIT_CALLBACK_OBJECT_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ Flags: DWORD,
+ ObjectType: GUID,
+ InheritedObjectType: GUID,
+ SidStart: DWORD,
+}}
+pub type PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE = *mut SYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
+STRUCT!{struct SYSTEM_ALARM_CALLBACK_OBJECT_ACE {
+ Header: ACE_HEADER,
+ Mask: ACCESS_MASK,
+ Flags: DWORD,
+ ObjectType: GUID,
+ InheritedObjectType: GUID,
+ SidStart: DWORD,
+}}
+pub type PSYSTEM_ALARM_CALLBACK_OBJECT_ACE = *mut SYSTEM_ALARM_CALLBACK_OBJECT_ACE;
+pub const ACE_OBJECT_TYPE_PRESENT: DWORD = 0x1;
+pub const ACE_INHERITED_OBJECT_TYPE_PRESENT: DWORD = 0x2;
+ENUM!{enum ACL_INFORMATION_CLASS {
+ AclRevisionInformation = 1,
+ AclSizeInformation,
+}}
+STRUCT!{struct ACL_REVISION_INFORMATION {
+ AclRevision: DWORD,
+}}
+pub type PACL_REVISION_INFORMATION = *mut ACL_REVISION_INFORMATION;
+STRUCT!{struct ACL_SIZE_INFORMATION {
+ AceCount: DWORD,
+ AclBytesInUse: DWORD,
+ AclBytesFree: DWORD,
+}}
+pub type PACL_SIZE_INFORMATION = *mut ACL_SIZE_INFORMATION;
+pub const SECURITY_DESCRIPTOR_REVISION: DWORD = 1;
+pub const SECURITY_DESCRIPTOR_REVISION1: DWORD = 1;
+#[cfg(target_pointer_width = "64")]
+pub const SECURITY_DESCRIPTOR_MIN_LENGTH: usize = 40;
+#[cfg(target_pointer_width = "32")]
+pub const SECURITY_DESCRIPTOR_MIN_LENGTH: usize = 20;
+pub type SECURITY_DESCRIPTOR_CONTROL = WORD;
+pub type PSECURITY_DESCRIPTOR_CONTROL = *mut WORD;
+pub const SE_OWNER_DEFAULTED: SECURITY_DESCRIPTOR_CONTROL = 0x0001;
+pub const SE_GROUP_DEFAULTED: SECURITY_DESCRIPTOR_CONTROL = 0x0002;
+pub const SE_DACL_PRESENT: SECURITY_DESCRIPTOR_CONTROL = 0x0004;
+pub const SE_DACL_DEFAULTED: SECURITY_DESCRIPTOR_CONTROL = 0x0008;
+pub const SE_SACL_PRESENT: SECURITY_DESCRIPTOR_CONTROL = 0x0010;
+pub const SE_SACL_DEFAULTED: SECURITY_DESCRIPTOR_CONTROL = 0x0020;
+pub const SE_DACL_AUTO_INHERIT_REQ: SECURITY_DESCRIPTOR_CONTROL = 0x0100;
+pub const SE_SACL_AUTO_INHERIT_REQ: SECURITY_DESCRIPTOR_CONTROL = 0x0200;
+pub const SE_DACL_AUTO_INHERITED: SECURITY_DESCRIPTOR_CONTROL = 0x0400;
+pub const SE_SACL_AUTO_INHERITED: SECURITY_DESCRIPTOR_CONTROL = 0x0800;
+pub const SE_DACL_PROTECTED: SECURITY_DESCRIPTOR_CONTROL = 0x1000;
+pub const SE_SACL_PROTECTED: SECURITY_DESCRIPTOR_CONTROL = 0x2000;
+pub const SE_RM_CONTROL_VALID: SECURITY_DESCRIPTOR_CONTROL = 0x4000;
+pub const SE_SELF_RELATIVE: SECURITY_DESCRIPTOR_CONTROL = 0x8000;
+STRUCT!{struct SECURITY_DESCRIPTOR_RELATIVE {
+ Revision: BYTE,
+ Sbz1: BYTE,
+ Control: SECURITY_DESCRIPTOR_CONTROL,
+ Owner: DWORD,
+ Group: DWORD,
+ Sacl: DWORD,
+ Dacl: DWORD,
+}}
+pub type PISECURITY_DESCRIPTOR_RELATIVE = *mut SECURITY_DESCRIPTOR_RELATIVE;
+STRUCT!{struct SECURITY_DESCRIPTOR {
+ Revision: BYTE,
+ Sbz1: BYTE,
+ Control: SECURITY_DESCRIPTOR_CONTROL,
+ Owner: PSID,
+ Group: PSID,
+ Sacl: PACL,
+ Dacl: PACL,
+}}
+pub type PISECURITY_DESCRIPTOR = *mut SECURITY_DESCRIPTOR;
+STRUCT!{struct SECURITY_OBJECT_AI_PARAMS {
+ Size: DWORD,
+ ConstraintMask: DWORD,
+}}
+pub type PSECURITY_OBJECT_AI_PARAMS = *mut SECURITY_OBJECT_AI_PARAMS;
+STRUCT!{struct OBJECT_TYPE_LIST {
+ Level: WORD,
+ Sbz: WORD,
+ ObjectType: *mut GUID,
+}}
+pub type POBJECT_TYPE_LIST = *mut OBJECT_TYPE_LIST;
+pub const ACCESS_OBJECT_GUID: WORD = 0;
+pub const ACCESS_PROPERTY_SET_GUID: WORD = 1;
+pub const ACCESS_PROPERTY_GUID: WORD = 2;
+pub const ACCESS_MAX_LEVEL: WORD = 4;
+ENUM!{enum AUDIT_EVENT_TYPE {
+ AuditEventObjectAccess,
+ AuditEventDirectoryServiceAccess,
+}}
+pub const AUDIT_ALLOW_NO_PRIVILEGE: DWORD = 0x1;
+pub const ACCESS_DS_SOURCE: &'static str = "DS";
+pub const ACCESS_DS_OBJECT_TYPE_NAME: &'static str = "Directory Service Object";
+pub const SE_PRIVILEGE_ENABLED_BY_DEFAULT: DWORD = 0x00000001;
+pub const SE_PRIVILEGE_ENABLED: DWORD = 0x00000002;
+pub const SE_PRIVILEGE_REMOVED: DWORD = 0x00000004;
+pub const SE_PRIVILEGE_USED_FOR_ACCESS: DWORD = 0x80000000;
+pub const SE_PRIVILEGE_VALID_ATTRIBUTES: DWORD = SE_PRIVILEGE_ENABLED_BY_DEFAULT
+ | SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_REMOVED | SE_PRIVILEGE_USED_FOR_ACCESS;
+pub const PRIVILEGE_SET_ALL_NECESSARY: DWORD = 1;
+STRUCT!{struct PRIVILEGE_SET {
+ PrivilegeCount: DWORD,
+ Control: DWORD,
+ Privilege: [LUID_AND_ATTRIBUTES; ANYSIZE_ARRAY],
+}}
+pub type PPRIVILEGE_SET = *mut PRIVILEGE_SET;
+pub const ACCESS_REASON_TYPE_MASK: ACCESS_REASON = 0x00ff0000;
+pub const ACCESS_REASON_DATA_MASK: ACCESS_REASON = 0x0000ffff;
+pub const ACCESS_REASON_STAGING_MASK: ACCESS_REASON = 0x80000000;
+pub const ACCESS_REASON_EXDATA_MASK: ACCESS_REASON = 0x7f000000;
+ENUM!{enum ACCESS_REASON_TYPE {
+ AccessReasonNone = 0x00000000,
+ AccessReasonAllowedAce = 0x00010000,
+ AccessReasonDeniedAce = 0x00020000,
+ AccessReasonAllowedParentAce = 0x00030000,
+ AccessReasonDeniedParentAce = 0x00040000,
+ AccessReasonNotGrantedByCape = 0x00050000,
+ AccessReasonNotGrantedByParentCape = 0x00060000,
+ AccessReasonNotGrantedToAppContainer = 0x00070000,
+ AccessReasonMissingPrivilege = 0x00100000,
+ AccessReasonFromPrivilege = 0x00200000,
+ AccessReasonIntegrityLevel = 0x00300000,
+ AccessReasonOwnership = 0x00400000,
+ AccessReasonNullDacl = 0x00500000,
+ AccessReasonEmptyDacl = 0x00600000,
+ AccessReasonNoSD = 0x00700000,
+ AccessReasonNoGrant = 0x00800000,
+ AccessReasonTrustLabel = 0x00900000,
+ AccessReasonFilterAce = 0x00a00000,
+}}
+pub type ACCESS_REASON = DWORD;
+STRUCT!{struct ACCESS_REASONS {
+ Data: [ACCESS_REASON; 32],
+}}
+pub type PACCESS_REASONS = *mut ACCESS_REASONS;
+pub const SE_SECURITY_DESCRIPTOR_FLAG_NO_OWNER_ACE: DWORD = 0x00000001;
+pub const SE_SECURITY_DESCRIPTOR_FLAG_NO_LABEL_ACE: DWORD = 0x00000002;
+pub const SE_SECURITY_DESCRIPTOR_FLAG_NO_ACCESS_FILTER_ACE: DWORD = 0x00000004;
+pub const SE_SECURITY_DESCRIPTOR_VALID_FLAGS: DWORD = 0x00000007;
+STRUCT!{struct SE_SECURITY_DESCRIPTOR {
+ Size: DWORD,
+ Flags: DWORD,
+ SecurityDescriptor: PSECURITY_DESCRIPTOR,
+}}
+pub type PSE_SECURITY_DESCRIPTOR = *mut SE_SECURITY_DESCRIPTOR;
+STRUCT!{struct SE_ACCESS_REQUEST {
+ Size: DWORD,
+ SeSecurityDescriptor: PSE_SECURITY_DESCRIPTOR,
+ DesiredAccess: ACCESS_MASK,
+ PreviouslyGrantedAccess: ACCESS_MASK,
+ PrincipalSelfSid: PSID,
+ GenericMapping: PGENERIC_MAPPING,
+ ObjectTypeListCount: DWORD,
+ ObjectTypeList: POBJECT_TYPE_LIST,
+}}
+pub type PSE_ACCESS_REQUEST = *mut SE_ACCESS_REQUEST;
+STRUCT!{struct SE_ACCESS_REPLY {
+ Size: DWORD,
+ ResultListCount: DWORD,
+ GrantedAccess: PACCESS_MASK,
+ AccessStatus: PDWORD,
+ AccessReason: PACCESS_REASONS,
+ Privileges: *mut PPRIVILEGE_SET,
+}}
+pub type PSE_ACCESS_REPLY = *mut SE_ACCESS_REPLY;
+pub const SE_CREATE_TOKEN_NAME: &'static str = "SeCreateTokenPrivilege";
+pub const SE_ASSIGNPRIMARYTOKEN_NAME: &'static str = "SeAssignPrimaryTokenPrivilege";
+pub const SE_LOCK_MEMORY_NAME: &'static str = "SeLockMemoryPrivilege";
+pub const SE_INCREASE_QUOTA_NAME: &'static str = "SeIncreaseQuotaPrivilege";
+pub const SE_UNSOLICITED_INPUT_NAME: &'static str = "SeUnsolicitedInputPrivilege";
+pub const SE_MACHINE_ACCOUNT_NAME: &'static str = "SeMachineAccountPrivilege";
+pub const SE_TCB_NAME: &'static str = "SeTcbPrivilege";
+pub const SE_SECURITY_NAME: &'static str = "SeSecurityPrivilege";
+pub const SE_TAKE_OWNERSHIP_NAME: &'static str = "SeTakeOwnershipPrivilege";
+pub const SE_LOAD_DRIVER_NAME: &'static str = "SeLoadDriverPrivilege";
+pub const SE_SYSTEM_PROFILE_NAME: &'static str = "SeSystemProfilePrivilege";
+pub const SE_SYSTEMTIME_NAME: &'static str = "SeSystemtimePrivilege";
+pub const SE_PROF_SINGLE_PROCESS_NAME: &'static str = "SeProfileSingleProcessPrivilege";
+pub const SE_INC_BASE_PRIORITY_NAME: &'static str = "SeIncreaseBasePriorityPrivilege";
+pub const SE_CREATE_PAGEFILE_NAME: &'static str = "SeCreatePagefilePrivilege";
+pub const SE_CREATE_PERMANENT_NAME: &'static str = "SeCreatePermanentPrivilege";
+pub const SE_BACKUP_NAME: &'static str = "SeBackupPrivilege";
+pub const SE_RESTORE_NAME: &'static str = "SeRestorePrivilege";
+pub const SE_SHUTDOWN_NAME: &'static str = "SeShutdownPrivilege";
+pub const SE_DEBUG_NAME: &'static str = "SeDebugPrivilege";
+pub const SE_AUDIT_NAME: &'static str = "SeAuditPrivilege";
+pub const SE_SYSTEM_ENVIRONMENT_NAME: &'static str = "SeSystemEnvironmentPrivilege";
+pub const SE_CHANGE_NOTIFY_NAME: &'static str = "SeChangeNotifyPrivilege";
+pub const SE_REMOTE_SHUTDOWN_NAME: &'static str = "SeRemoteShutdownPrivilege";
+pub const SE_UNDOCK_NAME: &'static str = "SeUndockPrivilege";
+pub const SE_SYNC_AGENT_NAME: &'static str = "SeSyncAgentPrivilege";
+pub const SE_ENABLE_DELEGATION_NAME: &'static str = "SeEnableDelegationPrivilege";
+pub const SE_MANAGE_VOLUME_NAME: &'static str = "SeManageVolumePrivilege";
+pub const SE_IMPERSONATE_NAME: &'static str = "SeImpersonatePrivilege";
+pub const SE_CREATE_GLOBAL_NAME: &'static str = "SeCreateGlobalPrivilege";
+pub const SE_TRUSTED_CREDMAN_ACCESS_NAME: &'static str = "SeTrustedCredManAccessPrivilege";
+pub const SE_RELABEL_NAME: &'static str = "SeRelabelPrivilege";
+pub const SE_INC_WORKING_SET_NAME: &'static str = "SeIncreaseWorkingSetPrivilege";
+pub const SE_TIME_ZONE_NAME: &'static str = "SeTimeZonePrivilege";
+pub const SE_CREATE_SYMBOLIC_LINK_NAME: &'static str = "SeCreateSymbolicLinkPrivilege";
+pub const SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME: &'static str
+ = "SeDelegateSessionUserImpersonatePrivilege";
+pub const SE_ACTIVATE_AS_USER_CAPABILITY: &'static str = "activateAsUser";
+pub const SE_CONSTRAINED_IMPERSONATION_CAPABILITY: &'static str = "constrainedImpersonation";
+pub const SE_SESSION_IMPERSONATION_CAPABILITY: &'static str = "sessionImpersonation";
+pub const SE_MUMA_CAPABILITY: &'static str = "muma";
+pub const SE_DEVELOPMENT_MODE_NETWORK_CAPABILITY: &'static str = "developmentModeNetwork";
+ENUM!{enum SECURITY_IMPERSONATION_LEVEL {
+ SecurityAnonymous,
+ SecurityIdentification,
+ SecurityImpersonation,
+ SecurityDelegation,
+}}
+pub type PSECURITY_IMPERSONATION_LEVEL = *mut SECURITY_IMPERSONATION_LEVEL;
+pub const SECURITY_MAX_IMPERSONATION_LEVEL: SECURITY_IMPERSONATION_LEVEL = SecurityDelegation;
+pub const SECURITY_MIN_IMPERSONATION_LEVEL: SECURITY_IMPERSONATION_LEVEL = SecurityAnonymous;
+pub const DEFAULT_IMPERSONATION_LEVEL: SECURITY_IMPERSONATION_LEVEL = SecurityImpersonation;
+#[inline]
+pub fn VALID_IMPERSONATION_LEVEL(L: SECURITY_IMPERSONATION_LEVEL) -> bool {
+ (L >= SECURITY_MIN_IMPERSONATION_LEVEL) && (L <= SECURITY_MAX_IMPERSONATION_LEVEL)
+}
+pub const TOKEN_ASSIGN_PRIMARY: DWORD = 0x0001;
+pub const TOKEN_DUPLICATE: DWORD = 0x0002;
+pub const TOKEN_IMPERSONATE: DWORD = 0x0004;
+pub const TOKEN_QUERY: DWORD = 0x0008;
+pub const TOKEN_QUERY_SOURCE: DWORD = 0x0010;
+pub const TOKEN_ADJUST_PRIVILEGES: DWORD = 0x0020;
+pub const TOKEN_ADJUST_GROUPS: DWORD = 0x0040;
+pub const TOKEN_ADJUST_DEFAULT: DWORD = 0x0080;
+pub const TOKEN_ADJUST_SESSIONID: DWORD = 0x0100;
+pub const TOKEN_ALL_ACCESS_P: DWORD = STANDARD_RIGHTS_REQUIRED | TOKEN_ASSIGN_PRIMARY
+ | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY | TOKEN_QUERY_SOURCE
+ | TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT;
+pub const TOKEN_ALL_ACCESS: DWORD = TOKEN_ALL_ACCESS_P | TOKEN_ADJUST_SESSIONID;
+pub const TOKEN_READ: DWORD = STANDARD_RIGHTS_READ | TOKEN_QUERY;
+pub const TOKEN_WRITE: DWORD = STANDARD_RIGHTS_WRITE | TOKEN_ADJUST_PRIVILEGES
+ | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT;
+pub const TOKEN_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE;
+pub const TOKEN_TRUST_CONSTRAINT_MASK: DWORD = STANDARD_RIGHTS_READ | TOKEN_QUERY
+ | TOKEN_QUERY_SOURCE;
+pub const TOKEN_ACCESS_PSEUDO_HANDLE_WIN8: DWORD = TOKEN_QUERY | TOKEN_QUERY_SOURCE;
+pub const TOKEN_ACCESS_PSEUDO_HANDLE: DWORD = TOKEN_ACCESS_PSEUDO_HANDLE_WIN8;
+ENUM!{enum TOKEN_TYPE {
+ TokenPrimary = 1,
+ TokenImpersonation,
+}}
+pub type PTOKEN_TYPE = *mut TOKEN_TYPE;
+ENUM!{enum TOKEN_ELEVATION_TYPE {
+ TokenElevationTypeDefault = 1,
+ TokenElevationTypeFull,
+ TokenElevationTypeLimited,
+}}
+pub type PTOKEN_ELEVATION_TYPE = *mut TOKEN_ELEVATION_TYPE;
+ENUM!{enum TOKEN_INFORMATION_CLASS {
+ TokenUser = 1,
+ TokenGroups,
+ TokenPrivileges,
+ TokenOwner,
+ TokenPrimaryGroup,
+ TokenDefaultDacl,
+ TokenSource,
+ TokenType,
+ TokenImpersonationLevel,
+ TokenStatistics,
+ TokenRestrictedSids,
+ TokenSessionId,
+ TokenGroupsAndPrivileges,
+ TokenSessionReference,
+ TokenSandBoxInert,
+ TokenAuditPolicy,
+ TokenOrigin,
+ TokenElevationType,
+ TokenLinkedToken,
+ TokenElevation,
+ TokenHasRestrictions,
+ TokenAccessInformation,
+ TokenVirtualizationAllowed,
+ TokenVirtualizationEnabled,
+ TokenIntegrityLevel,
+ TokenUIAccess,
+ TokenMandatoryPolicy,
+ TokenLogonSid,
+ TokenIsAppContainer,
+ TokenCapabilities,
+ TokenAppContainerSid,
+ TokenAppContainerNumber,
+ TokenUserClaimAttributes,
+ TokenDeviceClaimAttributes,
+ TokenRestrictedUserClaimAttributes,
+ TokenRestrictedDeviceClaimAttributes,
+ TokenDeviceGroups,
+ TokenRestrictedDeviceGroups,
+ TokenSecurityAttributes,
+ TokenIsRestricted,
+ TokenProcessTrustLevel,
+ TokenPrivateNameSpace,
+ TokenSingletonAttributes,
+ TokenBnoIsolation,
+ MaxTokenInfoClass,
+}}
+pub type PTOKEN_INFORMATION_CLASS = *mut TOKEN_INFORMATION_CLASS;
+STRUCT!{struct TOKEN_USER {
+ User: SID_AND_ATTRIBUTES,
+}}
+pub type PTOKEN_USER = *mut TOKEN_USER;
+UNION!{union SE_TOKEN_USER_u1 {
+ [usize; 2],
+ TokenUser TokenUser_mut: TOKEN_USER,
+ User User_mut: SID_AND_ATTRIBUTES,
+}}
+UNION!{union SE_TOKEN_USER_u2 {
+ [u32; 17],
+ Sid Sid_mut: SID,
+ Buffer Buffer_mut: [BYTE; SECURITY_MAX_SID_SIZE],
+}}
+STRUCT!{struct SE_TOKEN_USER {
+ u1: SE_TOKEN_USER_u1,
+ u2: SE_TOKEN_USER_u2,
+}}
+pub type PSE_TOKEN_USER = *mut SE_TOKEN_USER;
+STRUCT!{struct TOKEN_GROUPS {
+ GroupCount: DWORD,
+ Groups: [SID_AND_ATTRIBUTES; ANYSIZE_ARRAY],
+}}
+pub type PTOKEN_GROUPS = *mut TOKEN_GROUPS;
+STRUCT!{struct TOKEN_PRIVILEGES {
+ PrivilegeCount: DWORD,
+ Privileges: [LUID_AND_ATTRIBUTES; ANYSIZE_ARRAY],
+}}
+pub type PTOKEN_PRIVILEGES = *mut TOKEN_PRIVILEGES;
+STRUCT!{struct TOKEN_OWNER {
+ Owner: PSID,
+}}
+pub type PTOKEN_OWNER = *mut TOKEN_OWNER;
+STRUCT!{struct TOKEN_PRIMARY_GROUP {
+ PrimaryGroup: PSID,
+}}
+pub type PTOKEN_PRIMARY_GROUP = *mut TOKEN_PRIMARY_GROUP;
+STRUCT!{struct TOKEN_DEFAULT_DACL {
+ DefaultDacl: PACL,
+}}
+pub type PTOKEN_DEFAULT_DACL = *mut TOKEN_DEFAULT_DACL;
+STRUCT!{struct TOKEN_USER_CLAIMS {
+ UserClaims: PCLAIMS_BLOB,
+}}
+pub type PTOKEN_USER_CLAIMS = *mut TOKEN_USER_CLAIMS;
+STRUCT!{struct TOKEN_DEVICE_CLAIMS {
+ DeviceClaims: PCLAIMS_BLOB,
+}}
+pub type PTOKEN_DEVICE_CLAIMS = *mut TOKEN_DEVICE_CLAIMS;
+STRUCT!{struct TOKEN_GROUPS_AND_PRIVILEGES {
+ SidCount: DWORD,
+ SidLength: DWORD,
+ Sids: PSID_AND_ATTRIBUTES,
+ RestrictedSidCount: DWORD,
+ RestrictedSidLength: DWORD,
+ RestrictedSids: PSID_AND_ATTRIBUTES,
+ PrivilegeCount: DWORD,
+ PrivilegeLength: DWORD,
+ Privileges: PLUID_AND_ATTRIBUTES,
+ AuthenticationId: LUID,
+}}
+pub type PTOKEN_GROUPS_AND_PRIVILEGES = *mut TOKEN_GROUPS_AND_PRIVILEGES;
+STRUCT!{struct TOKEN_LINKED_TOKEN {
+ LinkedToken: HANDLE,
+}}
+pub type PTOKEN_LINKED_TOKEN = *mut TOKEN_LINKED_TOKEN;
+STRUCT!{struct TOKEN_ELEVATION {
+ TokenIsElevated: DWORD,
+}}
+pub type PTOKEN_ELEVATION = *mut TOKEN_ELEVATION;
+STRUCT!{struct TOKEN_MANDATORY_LABEL {
+ Label: SID_AND_ATTRIBUTES,
+}}
+pub type PTOKEN_MANDATORY_LABEL = *mut TOKEN_MANDATORY_LABEL;
+pub const TOKEN_MANDATORY_POLICY_OFF: DWORD = 0x0;
+pub const TOKEN_MANDATORY_POLICY_NO_WRITE_UP: DWORD = 0x1;
+pub const TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN: DWORD = 0x2;
+pub const TOKEN_MANDATORY_POLICY_VALID_MASK: DWORD = TOKEN_MANDATORY_POLICY_NO_WRITE_UP
+ | TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN;
+STRUCT!{struct TOKEN_MANDATORY_POLICY {
+ Policy: DWORD,
+}}
+pub type PTOKEN_MANDATORY_POLICY = *mut TOKEN_MANDATORY_POLICY;
+pub type PSECURITY_ATTRIBUTES_OPAQUE = PVOID;
+STRUCT!{struct TOKEN_ACCESS_INFORMATION {
+ SidHash: PSID_AND_ATTRIBUTES_HASH,
+ RestrictedSidHash: PSID_AND_ATTRIBUTES_HASH,
+ Privileges: PTOKEN_PRIVILEGES,
+ AuthenticationId: LUID,
+ TokenType: TOKEN_TYPE,
+ ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL,
+ MandatoryPolicy: TOKEN_MANDATORY_POLICY,
+ Flags: DWORD,
+ AppContainerNumber: DWORD,
+ PackageSid: PSID,
+ CapabilitiesHash: PSID_AND_ATTRIBUTES_HASH,
+ TrustLevelSid: PSID,
+ SecurityAttributes: PSECURITY_ATTRIBUTES_OPAQUE,
+}}
+pub type PTOKEN_ACCESS_INFORMATION = *mut TOKEN_ACCESS_INFORMATION;
+pub const POLICY_AUDIT_SUBCATEGORY_COUNT: usize = 59;
+STRUCT!{struct TOKEN_AUDIT_POLICY {
+ PerUserPolicy: [BYTE; (POLICY_AUDIT_SUBCATEGORY_COUNT >> 1) + 1],
+}}
+pub type PTOKEN_AUDIT_POLICY = *mut TOKEN_AUDIT_POLICY;
+pub const TOKEN_SOURCE_LENGTH: usize = 8;
+STRUCT!{struct TOKEN_SOURCE {
+ SourceName: [CHAR; TOKEN_SOURCE_LENGTH],
+ SourceIdentifier: LUID,
+}}
+pub type PTOKEN_SOURCE = *mut TOKEN_SOURCE;
+STRUCT!{struct TOKEN_STATISTICS {
+ TokenId: LUID,
+ AuthenticationId: LUID,
+ ExpirationTime: LARGE_INTEGER,
+ TokenType: TOKEN_TYPE,
+ ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL,
+ DynamicCharged: DWORD,
+ DynamicAvailable: DWORD,
+ GroupCount: DWORD,
+ PrivilegeCount: DWORD,
+ ModifiedId: LUID,
+}}
+pub type PTOKEN_STATISTICS = *mut TOKEN_STATISTICS;
+STRUCT!{struct TOKEN_CONTROL {
+ TokenId: LUID,
+ AuthenticationId: LUID,
+ ModifiedId: LUID,
+ TokenSource: TOKEN_SOURCE,
+}}
+pub type PTOKEN_CONTROL = *mut TOKEN_CONTROL;
+STRUCT!{struct TOKEN_ORIGIN {
+ OriginatingLogonSession: LUID,
+}}
+pub type PTOKEN_ORIGIN = *mut TOKEN_ORIGIN;
+ENUM!{enum MANDATORY_LEVEL {
+ MandatoryLevelUntrusted = 0,
+ MandatoryLevelLow,
+ MandatoryLevelMedium,
+ MandatoryLevelHigh,
+ MandatoryLevelSystem,
+ MandatoryLevelSecureProcess,
+ MandatoryLevelCount,
+}}
+pub type PMANDATORY_LEVEL = *mut MANDATORY_LEVEL;
+STRUCT!{struct TOKEN_APPCONTAINER_INFORMATION {
+ TokenAppContainer: PSID,
+}}
+pub type PTOKEN_APPCONTAINER_INFORMATION = *mut TOKEN_APPCONTAINER_INFORMATION;
+STRUCT!{struct TOKEN_SID_INFORMATION {
+ Sid: PSID,
+}}
+pub type PTOKEN_SID_INFORMATION = *mut TOKEN_SID_INFORMATION;
+STRUCT!{struct TOKEN_BNO_ISOLATION_INFORMATION {
+ IsolationPrefix: PWSTR,
+ IsolationEnabled: BOOLEAN,
+}}
+pub type PTOKEN_BNO_ISOLATION_INFORMATION = *mut TOKEN_BNO_ISOLATION_INFORMATION;
+pub const CLAIM_SECURITY_ATTRIBUTE_TYPE_INVALID: WORD = 0x00;
+pub const CLAIM_SECURITY_ATTRIBUTE_TYPE_INT64: WORD = 0x01;
+pub const CLAIM_SECURITY_ATTRIBUTE_TYPE_UINT64: WORD = 0x02;
+pub const CLAIM_SECURITY_ATTRIBUTE_TYPE_STRING: WORD = 0x03;
+STRUCT!{struct CLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE {
+ Version: DWORD64,
+ Name: PWSTR,
+}}
+pub type PCLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE = *mut CLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE;
+pub const CLAIM_SECURITY_ATTRIBUTE_TYPE_FQBN: WORD = 0x04;
+pub const CLAIM_SECURITY_ATTRIBUTE_TYPE_SID: WORD = 0x05;
+pub const CLAIM_SECURITY_ATTRIBUTE_TYPE_BOOLEAN: WORD = 0x06;
+STRUCT!{struct CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE {
+ pValue: PVOID,
+ ValueLength: DWORD,
+}}
+pub type PCLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE =
+ *mut CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE;
+pub const CLAIM_SECURITY_ATTRIBUTE_TYPE_OCTET_STRING: WORD = 0x10;
+pub const CLAIM_SECURITY_ATTRIBUTE_NON_INHERITABLE: DWORD = 0x0001;
+pub const CLAIM_SECURITY_ATTRIBUTE_VALUE_CASE_SENSITIVE: DWORD = 0x0002;
+pub const CLAIM_SECURITY_ATTRIBUTE_USE_FOR_DENY_ONLY: DWORD = 0x0004;
+pub const CLAIM_SECURITY_ATTRIBUTE_DISABLED_BY_DEFAULT: DWORD = 0x0008;
+pub const CLAIM_SECURITY_ATTRIBUTE_DISABLED: DWORD = 0x0010;
+pub const CLAIM_SECURITY_ATTRIBUTE_MANDATORY: DWORD = 0x0020;
+pub const CLAIM_SECURITY_ATTRIBUTE_VALID_FLAGS: DWORD = CLAIM_SECURITY_ATTRIBUTE_NON_INHERITABLE
+ | CLAIM_SECURITY_ATTRIBUTE_VALUE_CASE_SENSITIVE | CLAIM_SECURITY_ATTRIBUTE_USE_FOR_DENY_ONLY
+ | CLAIM_SECURITY_ATTRIBUTE_DISABLED_BY_DEFAULT | CLAIM_SECURITY_ATTRIBUTE_DISABLED
+ | CLAIM_SECURITY_ATTRIBUTE_MANDATORY;
+pub const CLAIM_SECURITY_ATTRIBUTE_CUSTOM_FLAGS: DWORD = 0xFFFF0000;
+UNION!{union CLAIM_SECURITY_ATTRIBUTE_V1_Values {
+ [usize; 1],
+ pInt64 pInt64_mut: PLONG64,
+ pUint64 pUint64_mut: PDWORD64,
+ ppString ppString_mut: PWSTR,
+ pFqbn pFqbn_mut: PCLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE,
+ pOctetString pOctetString_mut: PCLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE,
+}}
+STRUCT!{struct CLAIM_SECURITY_ATTRIBUTE_V1 {
+ Name: PWSTR,
+ ValueType: WORD,
+ Reserved: WORD,
+ Flags: DWORD,
+ ValueCount: DWORD,
+ Values: CLAIM_SECURITY_ATTRIBUTE_V1_Values,
+}}
+pub type PCLAIM_SECURITY_ATTRIBUTE_V1 = *mut CLAIM_SECURITY_ATTRIBUTE_V1;
+UNION!{union CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1_Values {
+ [u32; 1],
+ pInt64 pInt64_mut: [DWORD; ANYSIZE_ARRAY],
+ pUint64 pUint64_mut: [DWORD; ANYSIZE_ARRAY],
+ ppString ppString_mut: [DWORD; ANYSIZE_ARRAY],
+ pFqbn pFqbn_mut: [DWORD; ANYSIZE_ARRAY],
+ pOctetString pOctetString_mut: [DWORD; ANYSIZE_ARRAY],
+}}
+STRUCT!{struct CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1 {
+ Name: DWORD,
+ ValueType: WORD,
+ Reserved: WORD,
+ Flags: DWORD,
+ ValueCount: DWORD,
+ Values: CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1_Values,
+}}
+pub type PCLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1 = *mut CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1;
+pub const CLAIM_SECURITY_ATTRIBUTES_INFORMATION_VERSION_V1: WORD = 1;
+pub const CLAIM_SECURITY_ATTRIBUTES_INFORMATION_VERSION: WORD =
+ CLAIM_SECURITY_ATTRIBUTES_INFORMATION_VERSION_V1;
+UNION!{union CLAIM_SECURITY_ATTRIBUTES_INFORMATION_Attribute {
+ [usize; 1],
+ pAttributeV1 pAttributeV1_mut: PCLAIM_SECURITY_ATTRIBUTE_V1,
+}}
+STRUCT!{struct CLAIM_SECURITY_ATTRIBUTES_INFORMATION {
+ Version: WORD,
+ Reserved: WORD,
+ AttributeCount: DWORD,
+ Attribute: CLAIM_SECURITY_ATTRIBUTES_INFORMATION_Attribute,
+}}
+pub type PCLAIM_SECURITY_ATTRIBUTES_INFORMATION = *mut CLAIM_SECURITY_ATTRIBUTES_INFORMATION;
+pub const SECURITY_DYNAMIC_TRACKING: BOOLEAN = TRUE as u8;
+pub const SECURITY_STATIC_TRACKING: BOOLEAN = FALSE as u8;
+pub type SECURITY_CONTEXT_TRACKING_MODE = BOOLEAN;
+pub type PSECURITY_CONTEXT_TRACKING_MODE = *mut BOOLEAN;
+STRUCT!{struct SECURITY_QUALITY_OF_SERVICE {
+ Length: DWORD,
+ ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL,
+ ContextTrackingMode: SECURITY_CONTEXT_TRACKING_MODE,
+ EffectiveOnly: BOOLEAN,
+}}
+pub type PSECURITY_QUALITY_OF_SERVICE = *mut SECURITY_QUALITY_OF_SERVICE;
+STRUCT!{struct SE_IMPERSONATION_STATE {
+ Token: PACCESS_TOKEN,
+ CopyOnOpen: BOOLEAN,
+ EffectiveOnly: BOOLEAN,
+ Level: SECURITY_IMPERSONATION_LEVEL,
+}}
+pub type PSE_IMPERSONATION_STATE = *mut SE_IMPERSONATION_STATE;
+pub const DISABLE_MAX_PRIVILEGE: DWORD = 0x1;
+pub const SANDBOX_INERT: DWORD = 0x2;
+pub const LUA_TOKEN: DWORD = 0x4;
+pub const WRITE_RESTRICTED: DWORD = 0x8;
+pub type SECURITY_INFORMATION = DWORD;
+pub type PSECURITY_INFORMATION = *mut DWORD;
+pub const OWNER_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000001;
+pub const GROUP_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000002;
+pub const DACL_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000004;
+pub const SACL_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000008;
+pub const LABEL_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000010;
+pub const ATTRIBUTE_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000020;
+pub const SCOPE_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000040;
+pub const PROCESS_TRUST_LABEL_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000080;
+pub const ACCESS_FILTER_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00000100;
+pub const BACKUP_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x00010000;
+pub const PROTECTED_DACL_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x80000000;
+pub const PROTECTED_SACL_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x40000000;
+pub const UNPROTECTED_DACL_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x20000000;
+pub const UNPROTECTED_SACL_SECURITY_INFORMATION: SECURITY_INFORMATION = 0x10000000;
+pub type SE_SIGNING_LEVEL = BYTE;
+pub type PSE_SIGNING_LEVEL = *mut BYTE;
+pub const SE_SIGNING_LEVEL_UNCHECKED: BYTE = 0x00000000;
+pub const SE_SIGNING_LEVEL_UNSIGNED: BYTE = 0x00000001;
+pub const SE_SIGNING_LEVEL_ENTERPRISE: BYTE = 0x00000002;
+pub const SE_SIGNING_LEVEL_CUSTOM_1: BYTE = 0x00000003;
+pub const SE_SIGNING_LEVEL_AUTHENTICODE: BYTE = 0x00000004;
+pub const SE_SIGNING_LEVEL_CUSTOM_2: BYTE = 0x00000005;
+pub const SE_SIGNING_LEVEL_STORE: BYTE = 0x00000006;
+pub const SE_SIGNING_LEVEL_CUSTOM_3: BYTE = 0x00000007;
+pub const SE_SIGNING_LEVEL_ANTIMALWARE: BYTE = SE_SIGNING_LEVEL_CUSTOM_3;
+pub const SE_SIGNING_LEVEL_MICROSOFT: BYTE = 0x00000008;
+pub const SE_SIGNING_LEVEL_CUSTOM_4: BYTE = 0x00000009;
+pub const SE_SIGNING_LEVEL_CUSTOM_5: BYTE = 0x0000000A;
+pub const SE_SIGNING_LEVEL_DYNAMIC_CODEGEN: BYTE = 0x0000000B;
+pub const SE_SIGNING_LEVEL_WINDOWS: BYTE = 0x0000000C;
+pub const SE_SIGNING_LEVEL_CUSTOM_7: BYTE = 0x0000000D;
+pub const SE_SIGNING_LEVEL_WINDOWS_TCB: BYTE = 0x0000000E;
+pub const SE_SIGNING_LEVEL_CUSTOM_6: BYTE = 0x0000000F;
+ENUM!{enum SE_IMAGE_SIGNATURE_TYPE {
+ SeImageSignatureNone = 0,
+ SeImageSignatureEmbedded,
+ SeImageSignatureCache,
+ SeImageSignatureCatalogCached,
+ SeImageSignatureCatalogNotCached,
+ SeImageSignatureCatalogHint,
+ SeImageSignaturePackageCatalog,
+}}
+pub type PSE_IMAGE_SIGNATURE_TYPE = *mut SE_IMAGE_SIGNATURE_TYPE;
+ENUM!{enum SE_LEARNING_MODE_DATA_TYPE {
+ SeLearningModeInvalidType = 0,
+ SeLearningModeSettings,
+ SeLearningModeMax,
+}}
+STRUCT!{struct SECURITY_CAPABILITIES {
+ AppContainerSid: PSID,
+ Capabilities: PSID_AND_ATTRIBUTES,
+ CapabilityCount: DWORD,
+ Reserved: DWORD,
+}}
+pub type PSECURITY_CAPABILITIES = *mut SECURITY_CAPABILITIES;
+pub type LPSECURITY_CAPABILITIES = *mut SECURITY_CAPABILITIES;
+pub const PROCESS_TERMINATE: DWORD = 0x0001;
+pub const PROCESS_CREATE_THREAD: DWORD = 0x0002;
+pub const PROCESS_SET_SESSIONID: DWORD = 0x0004;
+pub const PROCESS_VM_OPERATION: DWORD = 0x0008;
+pub const PROCESS_VM_READ: DWORD = 0x0010;
+pub const PROCESS_VM_WRITE: DWORD = 0x0020;
+pub const PROCESS_DUP_HANDLE: DWORD = 0x0040;
+pub const PROCESS_CREATE_PROCESS: DWORD = 0x0080;
+pub const PROCESS_SET_QUOTA: DWORD = 0x0100;
+pub const PROCESS_SET_INFORMATION: DWORD = 0x0200;
+pub const PROCESS_QUERY_INFORMATION: DWORD = 0x0400;
+pub const PROCESS_SUSPEND_RESUME: DWORD = 0x0800;
+pub const PROCESS_QUERY_LIMITED_INFORMATION: DWORD = 0x1000;
+pub const PROCESS_SET_LIMITED_INFORMATION: DWORD = 0x2000;
+pub const PROCESS_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF;
+pub const THREAD_TERMINATE: DWORD = 0x0001;
+pub const THREAD_SUSPEND_RESUME: DWORD = 0x0002;
+pub const THREAD_GET_CONTEXT: DWORD = 0x0008;
+pub const THREAD_SET_CONTEXT: DWORD = 0x0010;
+pub const THREAD_QUERY_INFORMATION: DWORD = 0x0040;
+pub const THREAD_SET_INFORMATION: DWORD = 0x0020;
+pub const THREAD_SET_THREAD_TOKEN: DWORD = 0x0080;
+pub const THREAD_IMPERSONATE: DWORD = 0x0100;
+pub const THREAD_DIRECT_IMPERSONATION: DWORD = 0x0200;
+pub const THREAD_SET_LIMITED_INFORMATION: DWORD = 0x0400;
+pub const THREAD_QUERY_LIMITED_INFORMATION: DWORD = 0x0800;
+pub const THREAD_RESUME: DWORD = 0x1000;
+pub const THREAD_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF;
+pub const JOB_OBJECT_ASSIGN_PROCESS: DWORD = 0x0001;
+pub const JOB_OBJECT_SET_ATTRIBUTES: DWORD = 0x0002;
+pub const JOB_OBJECT_QUERY: DWORD = 0x0004;
+pub const JOB_OBJECT_TERMINATE: DWORD = 0x0008;
+pub const JOB_OBJECT_SET_SECURITY_ATTRIBUTES: DWORD = 0x0010;
+pub const JOB_OBJECT_IMPERSONATE: DWORD = 0x0020;
+pub const JOB_OBJECT_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3F;
+STRUCT!{struct JOB_SET_ARRAY {
+ JobHandle: HANDLE,
+ MemberLevel: DWORD,
+ Flags: DWORD,
+}}
+pub type PJOB_SET_ARRAY = *mut JOB_SET_ARRAY;
+pub const FLS_MAXIMUM_AVAILABLE: DWORD = 128;
+pub const TLS_MINIMUM_AVAILABLE: DWORD = 64;
+STRUCT!{struct EXCEPTION_REGISTRATION_RECORD {
+ Next: *mut EXCEPTION_REGISTRATION_RECORD,
+ Handler: PEXCEPTION_ROUTINE,
+}}
+pub type PEXCEPTION_REGISTRATION_RECORD = *mut EXCEPTION_REGISTRATION_RECORD;
+UNION!{union NT_TIB_u {
+ [usize; 1],
+ FiberData FiberData_mut: PVOID,
+ Version Version_mut: DWORD,
+}}
+STRUCT!{struct NT_TIB {
+ ExceptionList: *mut EXCEPTION_REGISTRATION_RECORD,
+ StackBase: PVOID,
+ StackLimit: PVOID,
+ SubSystemTib: PVOID,
+ u: NT_TIB_u,
+ ArbitraryUserPointer: PVOID,
+ _Self: *mut NT_TIB,
+}}
+pub type PNT_TIB = *mut NT_TIB;
+UNION!{union NT_TIB32_u {
+ [u32; 1],
+ FiberData FiberData_mut: DWORD,
+ Version Version_mut: DWORD,
+}}
+STRUCT!{struct NT_TIB32 {
+ ExceptionList: DWORD,
+ StackBase: DWORD,
+ StackLimit: DWORD,
+ SubSystemTib: DWORD,
+ u: NT_TIB32_u,
+ ArbitraryUserPointer: DWORD,
+ Self_: DWORD,
+}}
+pub type PNT_TIB32 = *mut NT_TIB32;
+UNION!{union NT_TIB64_u {
+ [u64; 1],
+ FiberData FiberData_mut: DWORD64,
+ Version Version_mut: DWORD,
+}}
+STRUCT!{struct NT_TIB64 {
+ ExceptionList: DWORD64,
+ StackBase: DWORD64,
+ StackLimit: DWORD64,
+ SubSystemTib: DWORD64,
+ u: NT_TIB64_u,
+ ArbitraryUserPointer: DWORD64,
+ _Self: DWORD64,
+}}
+pub type PNT_TIB64 = *mut NT_TIB64;
+pub const THREAD_DYNAMIC_CODE_ALLOW: DWORD = 1;
+pub const THREAD_BASE_PRIORITY_LOWRT: DWORD = 15;
+pub const THREAD_BASE_PRIORITY_MAX: DWORD = 2;
+pub const THREAD_BASE_PRIORITY_MIN: DWORD = -2i32 as u32;
+pub const THREAD_BASE_PRIORITY_IDLE: DWORD = -15i32 as u32;
+STRUCT!{struct UMS_CREATE_THREAD_ATTRIBUTES {
+ UmsVersion: DWORD,
+ UmsContext: PVOID,
+ UmsCompletionList: PVOID,
+}}
+pub type PUMS_CREATE_THREAD_ATTRIBUTES = *mut UMS_CREATE_THREAD_ATTRIBUTES;
+STRUCT!{struct WOW64_ARCHITECTURE_INFORMATION {
+ BitFields: DWORD,
+}}
+pub type PWOW64_ARCHITECTURE_INFORMATION = *mut WOW64_ARCHITECTURE_INFORMATION;
+BITFIELD!{WOW64_ARCHITECTURE_INFORMATION BitFields: DWORD [
+ Machine set_Machine[0..16],
+ KernelMode set_KernelMode[16..17],
+ UserMode set_UserMode[17..18],
+ Native set_Native[18..19],
+ Process set_Process[19..20],
+ ReservedZero0 set_ReservedZero0[20..32],
+]}
+pub const MEMORY_PRIORITY_LOWEST: ULONG = 0;
+pub const MEMORY_PRIORITY_VERY_LOW: ULONG = 1;
+pub const MEMORY_PRIORITY_LOW: ULONG = 2;
+pub const MEMORY_PRIORITY_MEDIUM: ULONG = 3;
+pub const MEMORY_PRIORITY_BELOW_NORMAL: ULONG = 4;
+pub const MEMORY_PRIORITY_NORMAL: ULONG = 5;
+STRUCT!{struct QUOTA_LIMITS {
+ PagedPoolLimit: SIZE_T,
+ NonPagedPoolLimit: SIZE_T,
+ MinimumWorkingSetSize: SIZE_T,
+ MaximumWorkingSetSize: SIZE_T,
+ PagefileLimit: SIZE_T,
+ TimeLimit: LARGE_INTEGER,
+}}
+pub type PQUOTA_LIMITS = *mut QUOTA_LIMITS;
+pub const QUOTA_LIMITS_HARDWS_MIN_ENABLE: DWORD = 0x00000001;
+pub const QUOTA_LIMITS_HARDWS_MIN_DISABLE: DWORD = 0x00000002;
+pub const QUOTA_LIMITS_HARDWS_MAX_ENABLE: DWORD = 0x00000004;
+pub const QUOTA_LIMITS_HARDWS_MAX_DISABLE: DWORD = 0x00000008;
+pub const QUOTA_LIMITS_USE_DEFAULT_LIMITS: DWORD = 0x00000010;
+STRUCT!{struct RATE_QUOTA_LIMIT {
+ RateData: DWORD,
+}}
+BITFIELD!{RATE_QUOTA_LIMIT RateData: DWORD [
+ RatePercent set_RatePercent[0..7],
+ Reserved0 set_Reserved0[7..32],
+]}
+pub type PRATE_QUOTA_LIMIT = *mut RATE_QUOTA_LIMIT;
+STRUCT!{struct QUOTA_LIMITS_EX {
+ PagedPoolLimit: SIZE_T,
+ NonPagedPoolLimit: SIZE_T,
+ MinimumWorkingSetSize: SIZE_T,
+ MaximumWorkingSetSize: SIZE_T,
+ PagefileLimit: SIZE_T,
+ TimeLimit: LARGE_INTEGER,
+ WorkingSetLimit: SIZE_T,
+ Reserved2: SIZE_T,
+ Reserved3: SIZE_T,
+ Reserved4: SIZE_T,
+ Flags: DWORD,
+ CpuRateLimit: RATE_QUOTA_LIMIT,
+}}
+pub type PQUOTA_LIMITS_EX = *mut QUOTA_LIMITS_EX;
+STRUCT!{struct IO_COUNTERS {
+ ReadOperationCount: ULONGLONG,
+ WriteOperationCount: ULONGLONG,
+ OtherOperationCount: ULONGLONG,
+ ReadTransferCount: ULONGLONG,
+ WriteTransferCount: ULONGLONG,
+ OtherTransferCount: ULONGLONG,
+}}
+pub type PIO_COUNTERS = *mut IO_COUNTERS;
+pub const MAX_HW_COUNTERS: usize = 16;
+pub const THREAD_PROFILING_FLAG_DISPATCH: DWORD = 0x00000001;
+ENUM!{enum HARDWARE_COUNTER_TYPE {
+ PMCCounter,
+ MaxHardwareCounterType,
+}}
+pub type PHARDWARE_COUNTER_TYPE = *mut HARDWARE_COUNTER_TYPE;
+ENUM!{enum PROCESS_MITIGATION_POLICY {
+ ProcessDEPPolicy,
+ ProcessASLRPolicy,
+ ProcessDynamicCodePolicy,
+ ProcessStrictHandleCheckPolicy,
+ ProcessSystemCallDisablePolicy,
+ ProcessMitigationOptionsMask,
+ ProcessExtensionPointDisablePolicy,
+ ProcessControlFlowGuardPolicy,
+ ProcessSignaturePolicy,
+ ProcessFontDisablePolicy,
+ ProcessImageLoadPolicy,
+ MaxProcessMitigationPolicy,
+}}
+pub type PPROCESS_MITIGATION_POLICY = *mut PROCESS_MITIGATION_POLICY;
+STRUCT!{struct PROCESS_MITIGATION_ASLR_POLICY {
+ Flags: DWORD,
+}}
+BITFIELD!{PROCESS_MITIGATION_ASLR_POLICY Flags: DWORD [
+ EnableBottomUpRandomization set_EnableBottomUpRandomization[0..1],
+ EnableForceRelocateImages set_EnableForceRelocateImages[1..2],
+ EnableHighEntropy set_EnableHighEntropy[2..3],
+ DisallowStrippedImages set_DisallowStrippedImages[3..4],
+ ReservedFlags set_ReservedFlags[4..32],
+]}
+pub type PPROCESS_MITIGATION_ASLR_POLICY = *mut PROCESS_MITIGATION_ASLR_POLICY;
+STRUCT!{struct PROCESS_MITIGATION_DEP_POLICY {
+ Flags: DWORD,
+ Permanent: BOOLEAN,
+}}
+BITFIELD!{PROCESS_MITIGATION_DEP_POLICY Flags: DWORD [
+ Enable set_Enable[0..1],
+ DisableAtlThunkEmulation set_DisableAtlThunkEmulation[1..2],
+ ReservedFlags set_ReservedFlags[2..32],
+]}
+pub type PPROCESS_MITIGATION_DEP_POLICY = *mut PROCESS_MITIGATION_DEP_POLICY;
+STRUCT!{struct PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY {
+ Flags: DWORD,
+}}
+BITFIELD!{PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY Flags: DWORD [
+ RaiseExceptionOnInvalidHandleReference set_RaiseExceptionOnInvalidHandleReference[0..1],
+ HandleExceptionsPermanentlyEnabled set_HandleExceptionsPermanentlyEnabled[1..2],
+ ReservedFlags set_ReservedFlags[2..32],
+]}
+pub type PPROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY
+ = *mut PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY;
+STRUCT!{struct PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY {
+ Flags: DWORD,
+}}
+BITFIELD!{PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY Flags: DWORD [
+ DisallowWin32kSystemCalls set_DisallowWin32kSystemCalls[0..1],
+ ReservedFlags set_ReservedFlags[1..32],
+]}
+pub type PPROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY
+ = *mut PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY;
+STRUCT!{struct PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY {
+ Flags: DWORD,
+}}
+BITFIELD!{PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY Flags: DWORD [
+ DisableExtensionPoints set_DisableExtensionPoints[0..1],
+ ReservedFlags set_ReservedFlags[1..32],
+]}
+pub type PPROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY
+ = *mut PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY;
+STRUCT!{struct PROCESS_MITIGATION_DYNAMIC_CODE_POLICY {
+ Flags: DWORD,
+}}
+BITFIELD!{PROCESS_MITIGATION_DYNAMIC_CODE_POLICY Flags: DWORD [
+ ProhibitDynamicCode set_ProhibitDynamicCode[0..1],
+ AllowThreadOptOut set_AllowThreadOptOut[1..2],
+ AllowRemoteDowngrade set_AllowRemoteDowngrade[2..3],
+ ReservedFlags set_ReservedFlags[3..32],
+]}
+pub type PPROCESS_MITIGATION_DYNAMIC_CODE_POLICY = *mut PROCESS_MITIGATION_DYNAMIC_CODE_POLICY;
+STRUCT!{struct PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY {
+ Flags: DWORD,
+}}
+BITFIELD!{PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY Flags: DWORD [
+ EnableControlFlowGuard set_EnableControlFlowGuard[0..1],
+ EnableExportSuppression set_EnableExportSuppression[1..2],
+ StrictMode set_StrictMode[2..3],
+ ReservedFlags set_ReservedFlags[3..32],
+]}
+pub type PPROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY
+ = *mut PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY;
+STRUCT!{struct PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY {
+ Flags: DWORD,
+}}
+BITFIELD!{PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY Flags: DWORD [
+ MicrosoftSignedOnly set_MicrosoftSignedOnly[0..1],
+ StoreSignedOnly set_StoreSignedOnly[1..2],
+ MitigationOptIn set_MitigationOptIn[2..3],
+ ReservedFlags set_ReservedFlags[3..32],
+]}
+pub type PPROCESS_MITIGATION_BINARY_SIGNATURE_POLICY
+ = *mut PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY;
+STRUCT!{struct PROCESS_MITIGATION_FONT_DISABLE_POLICY {
+ Flags: DWORD,
+}}
+BITFIELD!{PROCESS_MITIGATION_FONT_DISABLE_POLICY Flags: DWORD [
+ DisableNonSystemFonts set_DisableNonSystemFonts[0..1],
+ AuditNonSystemFontLoading set_AuditNonSystemFontLoading[1..2],
+ ReservedFlags set_ReservedFlags[2..32],
+]}
+pub type PPROCESS_MITIGATION_FONT_DISABLE_POLICY = *mut PROCESS_MITIGATION_FONT_DISABLE_POLICY;
+STRUCT!{struct PROCESS_MITIGATION_IMAGE_LOAD_POLICY {
+ Flags: DWORD,
+}}
+BITFIELD!{PROCESS_MITIGATION_IMAGE_LOAD_POLICY Flags: DWORD [
+ NoRemoteImages set_NoRemoteImages[0..1],
+ NoLowMandatoryLabelImages set_NoLowMandatoryLabelImages[1..2],
+ PreferSystem32Images set_PreferSystem32Images[2..3],
+ ReservedFlags set_ReservedFlags[3..32],
+]}
+pub type PPROCESS_MITIGATION_IMAGE_LOAD_POLICY = *mut PROCESS_MITIGATION_IMAGE_LOAD_POLICY;
+STRUCT!{struct PROCESS_MITIGATION_SYSTEM_CALL_FILTER_POLICY {
+ Flags: DWORD,
+}}
+pub type PPPROCESS_MITIGATION_SYSTEM_CALL_FILTER_POLICY =
+ *mut PROCESS_MITIGATION_SYSTEM_CALL_FILTER_POLICY;
+BITFIELD!{PROCESS_MITIGATION_SYSTEM_CALL_FILTER_POLICY Flags: DWORD [
+ FilterId set_FilterId[0..4],
+ ReservedFlags set_ReservedFlags[4..32],
+]}
+STRUCT!{struct PROCESS_MITIGATION_PAYLOAD_RESTRICTION_POLICY {
+ Flags: DWORD,
+}}
+pub type PPROCESS_MITIGATION_PAYLOAD_RESTRICTION_POLICY =
+ *mut PROCESS_MITIGATION_PAYLOAD_RESTRICTION_POLICY;
+BITFIELD!{PROCESS_MITIGATION_PAYLOAD_RESTRICTION_POLICY Flags: DWORD [
+ EnableExportAddressFilter set_EnableExportAddressFilter[0..1],
+ AuditExportAddressFilter set_AuditExportAddressFilter[1..2],
+ EnableExportAddressFilterPlus set_EnableExportAddressFilterPlus[2..3],
+ AuditExportAddressFilterPlus set_AuditExportAddressFilterPlus[3..4],
+ EnableImportAddressFilter set_EnableImportAddressFilter[4..5],
+ AuditImportAddressFilter set_AuditImportAddressFilter[5..6],
+ EnableRopStackPivot set_EnableRopStackPivot[6..7],
+ AuditRopStackPivot set_AuditRopStackPivot[7..8],
+ EnableRopCallerCheck set_EnableRopCallerCheck[8..9],
+ AuditRopCallerCheck set_AuditRopCallerCheck[9..10],
+ EnableRopSimExec set_EnableRopSimExec[10..11],
+ AuditRopSimExec set_AuditRopSimExec[11..12],
+ ReservedFlags set_ReservedFlags[12..32],
+]}
+STRUCT!{struct PROCESS_MITIGATION_CHILD_PROCESS_POLICY {
+ Flags: DWORD,
+}}
+pub type PPROCESS_MITIGATION_CHILD_PROCESS_POLICY = *mut PROCESS_MITIGATION_CHILD_PROCESS_POLICY;
+BITFIELD!{PROCESS_MITIGATION_CHILD_PROCESS_POLICY Flags: DWORD [
+ NoChildProcessCreation set_NoChildProcessCreation[0..1],
+ AuditNoChildProcessCreation set_AuditNoChildProcessCreation[1..2],
+ AllowSecureProcessCreation set_AllowSecureProcessCreation[2..3],
+ ReservedFlags set_ReservedFlags[3..32],
+]}
+STRUCT!{struct JOBOBJECT_BASIC_ACCOUNTING_INFORMATION {
+ TotalUserTime: LARGE_INTEGER,
+ TotalKernelTime: LARGE_INTEGER,
+ ThisPeriodTotalUserTime: LARGE_INTEGER,
+ ThisPeriodTotalKernelTime: LARGE_INTEGER,
+ TotalPageFaultCount: DWORD,
+ TotalProcesses: DWORD,
+ ActiveProcesses: DWORD,
+ TotalTerminatedProcesses: DWORD,
+}}
+pub type PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION = *mut JOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
+STRUCT!{struct JOBOBJECT_BASIC_LIMIT_INFORMATION {
+ PerProcessUserTimeLimit: LARGE_INTEGER,
+ PerJobUserTimeLimit: LARGE_INTEGER,
+ LimitFlags: DWORD,
+ MinimumWorkingSetSize: SIZE_T,
+ MaximumWorkingSetSize: SIZE_T,
+ ActiveProcessLimit: DWORD,
+ Affinity: ULONG_PTR,
+ PriorityClass: DWORD,
+ SchedulingClass: DWORD,
+}}
+pub type PJOBOBJECT_BASIC_LIMIT_INFORMATION = *mut JOBOBJECT_BASIC_LIMIT_INFORMATION;
+STRUCT!{struct JOBOBJECT_EXTENDED_LIMIT_INFORMATION {
+ BasicLimitInformation: JOBOBJECT_BASIC_LIMIT_INFORMATION,
+ IoInfo: IO_COUNTERS,
+ ProcessMemoryLimit: SIZE_T,
+ JobMemoryLimit: SIZE_T,
+ PeakProcessMemoryUsed: SIZE_T,
+ PeakJobMemoryUsed: SIZE_T,
+}}
+pub type PJOBOBJECT_EXTENDED_LIMIT_INFORMATION = *mut JOBOBJECT_EXTENDED_LIMIT_INFORMATION;
+STRUCT!{struct JOBOBJECT_BASIC_PROCESS_ID_LIST {
+ NumberOfAssignedProcesses: DWORD,
+ NumberOfProcessIdsInList: DWORD,
+ ProcessIdList: [ULONG_PTR; 1],
+}}
+pub type PJOBOBJECT_BASIC_PROCESS_ID_LIST = *mut JOBOBJECT_BASIC_PROCESS_ID_LIST;
+STRUCT!{struct JOBOBJECT_BASIC_UI_RESTRICTIONS {
+ UIRestrictionsClass: DWORD,
+}}
+pub type PJOBOBJECT_BASIC_UI_RESTRICTIONS = *mut JOBOBJECT_BASIC_UI_RESTRICTIONS;
+STRUCT!{struct JOBOBJECT_SECURITY_LIMIT_INFORMATION {
+ SecurityLimitFlags: DWORD,
+ JobToken: HANDLE,
+ SidsToDisable: PTOKEN_GROUPS,
+ PrivilegesToDelete: PTOKEN_PRIVILEGES,
+ RestrictedSids: PTOKEN_GROUPS,
+}}
+pub type PJOBOBJECT_SECURITY_LIMIT_INFORMATION = *mut JOBOBJECT_SECURITY_LIMIT_INFORMATION;
+STRUCT!{struct JOBOBJECT_END_OF_JOB_TIME_INFORMATION {
+ EndOfJobTimeAction: DWORD,
+}}
+pub type PJOBOBJECT_END_OF_JOB_TIME_INFORMATION = *mut JOBOBJECT_END_OF_JOB_TIME_INFORMATION;
+STRUCT!{struct JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
+ CompletionKey: PVOID,
+ CompletionPort: HANDLE,
+}}
+pub type PJOBOBJECT_ASSOCIATE_COMPLETION_PORT = *mut JOBOBJECT_ASSOCIATE_COMPLETION_PORT;
+STRUCT!{struct JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION {
+ BasicInfo: JOBOBJECT_BASIC_ACCOUNTING_INFORMATION,
+ IoInfo: IO_COUNTERS,
+}}
+pub type PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
+ = *mut JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
+STRUCT!{struct JOBOBJECT_JOBSET_INFORMATION {
+ MemberLevel: DWORD,
+}}
+pub type PJOBOBJECT_JOBSET_INFORMATION = *mut JOBOBJECT_JOBSET_INFORMATION;
+ENUM!{enum JOBOBJECT_RATE_CONTROL_TOLERANCE {
+ ToleranceLow = 1,
+ ToleranceMedium,
+ ToleranceHigh,
+}}
+pub type PJOBOBJECT_RATE_CONTROL_TOLERANCE = *mut JOBOBJECT_RATE_CONTROL_TOLERANCE;
+ENUM!{enum JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL {
+ ToleranceIntervalShort = 1,
+ ToleranceIntervalMedium,
+ ToleranceIntervalLong,
+}}
+pub type PJOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL
+ = *mut JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL;
+STRUCT!{struct JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION {
+ IoReadBytesLimit: DWORD64,
+ IoWriteBytesLimit: DWORD64,
+ PerJobUserTimeLimit: LARGE_INTEGER,
+ JobMemoryLimit: DWORD64,
+ RateControlTolerance: JOBOBJECT_RATE_CONTROL_TOLERANCE,
+ RateControlToleranceInterval: JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL,
+ LimitFlags: DWORD,
+}}
+pub type PJOBOBJECT_NOTIFICATION_LIMIT_INFORMATION = *mut JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION;
+UNION!{union JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2_u1 {
+ [u64; 1],
+ JobHighMemoryLimit JobHighMemoryLimit_mut: DWORD64,
+ JobMemoryLimit JobMemoryLimit_mut: DWORD64,
+}}
+UNION!{union JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2_u2 {
+ [u32; 1],
+ RateControlTolerance RateControlTolerance_mut: JOBOBJECT_RATE_CONTROL_TOLERANCE,
+ CpuRateControlTolerance CpuRateControlTolerance_mut: JOBOBJECT_RATE_CONTROL_TOLERANCE,
+}}
+UNION!{union JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2_u3 {
+ [u32; 1],
+ RateControlToleranceInterval RateControlToleranceInterval_mut:
+ JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL,
+ CpuRateControlToleranceInterval CpuRateControlToleranceInterval_mut:
+ JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL,
+}}
+STRUCT!{struct JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2 {
+ IoReadBytesLimit: DWORD64,
+ IoWriteBytesLimit: DWORD64,
+ PerJobUserTimeLimit: LARGE_INTEGER,
+ u1: JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2_u1,
+ u2: JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2_u2,
+ u3: JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2_u3,
+ LimitFlags: DWORD,
+ IoRateControlTolerance: JOBOBJECT_RATE_CONTROL_TOLERANCE,
+ JobLowMemoryLimit: DWORD64,
+ IoRateControlToleranceInterval: JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL,
+ NetRateControlTolerance: JOBOBJECT_RATE_CONTROL_TOLERANCE,
+ NetRateControlToleranceInterval: JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL,
+}}
+STRUCT!{struct JOBOBJECT_LIMIT_VIOLATION_INFORMATION {
+ LimitFlags: DWORD,
+ ViolationLimitFlags: DWORD,
+ IoReadBytes: DWORD64,
+ IoReadBytesLimit: DWORD64,
+ IoWriteBytes: DWORD64,
+ IoWriteBytesLimit: DWORD64,
+ PerJobUserTime: LARGE_INTEGER,
+ PerJobUserTimeLimit: LARGE_INTEGER,
+ JobMemory: DWORD64,
+ JobMemoryLimit: DWORD64,
+ RateControlTolerance: JOBOBJECT_RATE_CONTROL_TOLERANCE,
+ RateControlToleranceLimit: JOBOBJECT_RATE_CONTROL_TOLERANCE,
+}}
+pub type PJOBOBJECT_LIMIT_VIOLATION_INFORMATION = *mut JOBOBJECT_LIMIT_VIOLATION_INFORMATION;
+UNION!{union JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2_u1 {
+ [u64; 1],
+ JobHighMemoryLimit JobHighMemoryLimit_mut: DWORD64,
+ JobMemoryLimit JobMemoryLimit_mut: DWORD64,
+}}
+UNION!{union JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2_u2 {
+ [u32; 1],
+ RateControlTolerance RateControlTolerance_mut: JOBOBJECT_RATE_CONTROL_TOLERANCE,
+ CpuRateControlTolerance CpuRateControlTolerance_mut: JOBOBJECT_RATE_CONTROL_TOLERANCE,
+}}
+UNION!{union JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2_u3 {
+ [u32; 1],
+ RateControlToleranceLimit RateControlToleranceLimit_mut: JOBOBJECT_RATE_CONTROL_TOLERANCE,
+ CpuRateControlToleranceLimit CpuRateControlToleranceLimit_mut:
+ JOBOBJECT_RATE_CONTROL_TOLERANCE,
+}}
+STRUCT!{struct JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2 {
+ LimitFlags: DWORD,
+ ViolationLimitFlags: DWORD,
+ IoReadBytes: DWORD64,
+ IoReadBytesLimit: DWORD64,
+ IoWriteBytes: DWORD64,
+ IoWriteBytesLimit: DWORD64,
+ PerJobUserTime: LARGE_INTEGER,
+ PerJobUserTimeLimit: LARGE_INTEGER,
+ JobMemory: DWORD64,
+ u1: JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2_u1,
+ u2: JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2_u2,
+ u3: JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2_u3,
+ JobLowMemoryLimit: DWORD64,
+ IoRateControlTolerance: JOBOBJECT_RATE_CONTROL_TOLERANCE,
+ IoRateControlToleranceLimit: JOBOBJECT_RATE_CONTROL_TOLERANCE,
+ NetRateControlTolerance: JOBOBJECT_RATE_CONTROL_TOLERANCE,
+ NetRateControlToleranceLimit: JOBOBJECT_RATE_CONTROL_TOLERANCE,
+}}
+STRUCT!{struct JOBOBJECT_CPU_RATE_CONTROL_INFORMATION_u_s {
+ MinRate: WORD,
+ MaxRate: WORD,
+}}
+UNION!{union JOBOBJECT_CPU_RATE_CONTROL_INFORMATION_u {
+ [u32; 1],
+ CpuRate CpuRate_mut: DWORD,
+ Weight Weight_mut: DWORD,
+ s s_mut: JOBOBJECT_CPU_RATE_CONTROL_INFORMATION_u_s,
+}}
+STRUCT!{struct JOBOBJECT_CPU_RATE_CONTROL_INFORMATION {
+ ControlFlags: DWORD,
+ u: JOBOBJECT_CPU_RATE_CONTROL_INFORMATION_u,
+}}
+pub type PJOBOBJECT_CPU_RATE_CONTROL_INFORMATION = *mut JOBOBJECT_CPU_RATE_CONTROL_INFORMATION;
+ENUM!{enum JOB_OBJECT_NET_RATE_CONTROL_FLAGS {
+ JOB_OBJECT_NET_RATE_CONTROL_ENABLE = 0x1,
+ JOB_OBJECT_NET_RATE_CONTROL_MAX_BANDWIDTH = 0x2,
+ JOB_OBJECT_NET_RATE_CONTROL_DSCP_TAG = 0x4,
+ JOB_OBJECT_NET_RATE_CONTROL_VALID_FLAGS = 0x7,
+}}
+pub const JOB_OBJECT_NET_RATE_CONTROL_MAX_DSCP_TAG: DWORD = 64;
+STRUCT!{struct JOBOBJECT_NET_RATE_CONTROL_INFORMATION {
+ MaxBandwidth: DWORD64,
+ ControlFlags: JOB_OBJECT_NET_RATE_CONTROL_FLAGS,
+ DscpTag: BYTE,
+}}
+ENUM!{enum JOB_OBJECT_IO_RATE_CONTROL_FLAGS {
+ JOB_OBJECT_IO_RATE_CONTROL_ENABLE = 0x1,
+ JOB_OBJECT_IO_RATE_CONTROL_STANDALONE_VOLUME = 0x2,
+ JOB_OBJECT_IO_RATE_CONTROL_VALID_FLAGS = JOB_OBJECT_IO_RATE_CONTROL_ENABLE
+ | JOB_OBJECT_IO_RATE_CONTROL_STANDALONE_VOLUME,
+}}
+STRUCT!{struct JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE {
+ MaxIops: LONG64,
+ MaxBandwidth: LONG64,
+ ReservationIops: LONG64,
+ VolumeName: PWSTR,
+ BaseIoSize: DWORD,
+ ControlFlags: JOB_OBJECT_IO_RATE_CONTROL_FLAGS,
+ VolumeNameLength: WORD,
+}}
+pub type JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V1
+ = JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE;
+STRUCT!{struct JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V2 {
+ MaxIops: LONG64,
+ MaxBandwidth: LONG64,
+ ReservationIops: LONG64,
+ VolumeName: PWSTR,
+ BaseIoSize: DWORD,
+ ControlFlags: JOB_OBJECT_IO_RATE_CONTROL_FLAGS,
+ VolumeNameLength: WORD,
+ CriticalReservationIops: LONG64,
+ ReservationBandwidth: LONG64,
+ CriticalReservationBandwidth: LONG64,
+ MaxTimePercent: LONG64,
+ ReservationTimePercent: LONG64,
+ CriticalReservationTimePercent: LONG64,
+}}
+STRUCT!{struct JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V3 {
+ MaxIops: LONG64,
+ MaxBandwidth: LONG64,
+ ReservationIops: LONG64,
+ VolumeName: PWSTR,
+ BaseIoSize: DWORD,
+ ControlFlags: JOB_OBJECT_IO_RATE_CONTROL_FLAGS,
+ VolumeNameLength: WORD,
+ CriticalReservationIops: LONG64,
+ ReservationBandwidth: LONG64,
+ CriticalReservationBandwidth: LONG64,
+ MaxTimePercent: LONG64,
+ ReservationTimePercent: LONG64,
+ CriticalReservationTimePercent: LONG64,
+ SoftMaxIops: LONG64,
+ SoftMaxBandwidth: LONG64,
+ SoftMaxTimePercent: LONG64,
+ LimitExcessNotifyIops: LONG64,
+ LimitExcessNotifyBandwidth: LONG64,
+ LimitExcessNotifyTimePercent: LONG64,
+}}
+ENUM!{enum JOBOBJECT_IO_ATTRIBUTION_CONTROL_FLAGS {
+ JOBOBJECT_IO_ATTRIBUTION_CONTROL_ENABLE = 0x1,
+ JOBOBJECT_IO_ATTRIBUTION_CONTROL_DISABLE = 0x2,
+ JOBOBJECT_IO_ATTRIBUTION_CONTROL_VALID_FLAGS = 0x3,
+}}
+STRUCT!{struct JOBOBJECT_IO_ATTRIBUTION_STATS {
+ IoCount: ULONG_PTR,
+ TotalNonOverlappedQueueTime: ULONGLONG,
+ TotalNonOverlappedServiceTime: ULONGLONG,
+ TotalSize: ULONGLONG,
+}}
+pub type PJOBOBJECT_IO_ATTRIBUTION_STATS = *mut JOBOBJECT_IO_ATTRIBUTION_STATS;
+STRUCT!{struct JOBOBJECT_IO_ATTRIBUTION_INFORMATION {
+ ControlFlags: DWORD,
+ ReadStats: JOBOBJECT_IO_ATTRIBUTION_STATS,
+ WriteStats: JOBOBJECT_IO_ATTRIBUTION_STATS,
+}}
+pub type PJOBOBJECT_IO_ATTRIBUTION_INFORMATION = *mut JOBOBJECT_IO_ATTRIBUTION_INFORMATION;
+pub const JOB_OBJECT_TERMINATE_AT_END_OF_JOB: DWORD = 0;
+pub const JOB_OBJECT_POST_AT_END_OF_JOB: DWORD = 1;
+pub const JOB_OBJECT_MSG_END_OF_JOB_TIME: DWORD = 1;
+pub const JOB_OBJECT_MSG_END_OF_PROCESS_TIME: DWORD = 2;
+pub const JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT: DWORD = 3;
+pub const JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO: DWORD = 4;
+pub const JOB_OBJECT_MSG_NEW_PROCESS: DWORD = 6;
+pub const JOB_OBJECT_MSG_EXIT_PROCESS: DWORD = 7;
+pub const JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS: DWORD = 8;
+pub const JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT: DWORD = 9;
+pub const JOB_OBJECT_MSG_JOB_MEMORY_LIMIT: DWORD = 10;
+pub const JOB_OBJECT_MSG_NOTIFICATION_LIMIT: DWORD = 11;
+pub const JOB_OBJECT_MSG_JOB_CYCLE_TIME_LIMIT: DWORD = 12;
+pub const JOB_OBJECT_MSG_SILO_TERMINATED: DWORD = 13;
+pub const JOB_OBJECT_MSG_MINIMUM: DWORD = 1;
+pub const JOB_OBJECT_MSG_MAXIMUM: DWORD = 13;
+pub const JOB_OBJECT_VALID_COMPLETION_FILTER: DWORD = ((1 << (JOB_OBJECT_MSG_MAXIMUM + 1)) - 1)
+ - ((1 << JOB_OBJECT_MSG_MINIMUM) - 1);
+pub const JOB_OBJECT_LIMIT_WORKINGSET: DWORD = 0x00000001;
+pub const JOB_OBJECT_LIMIT_PROCESS_TIME: DWORD = 0x00000002;
+pub const JOB_OBJECT_LIMIT_JOB_TIME: DWORD = 0x00000004;
+pub const JOB_OBJECT_LIMIT_ACTIVE_PROCESS: DWORD = 0x00000008;
+pub const JOB_OBJECT_LIMIT_AFFINITY: DWORD = 0x00000010;
+pub const JOB_OBJECT_LIMIT_PRIORITY_CLASS: DWORD = 0x00000020;
+pub const JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME: DWORD = 0x00000040;
+pub const JOB_OBJECT_LIMIT_SCHEDULING_CLASS: DWORD = 0x00000080;
+pub const JOB_OBJECT_LIMIT_PROCESS_MEMORY: DWORD = 0x00000100;
+pub const JOB_OBJECT_LIMIT_JOB_MEMORY: DWORD = 0x00000200;
+pub const JOB_OBJECT_LIMIT_JOB_MEMORY_HIGH: DWORD = JOB_OBJECT_LIMIT_JOB_MEMORY;
+pub const JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION: DWORD = 0x00000400;
+pub const JOB_OBJECT_LIMIT_BREAKAWAY_OK: DWORD = 0x00000800;
+pub const JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK: DWORD = 0x00001000;
+pub const JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE: DWORD = 0x00002000;
+pub const JOB_OBJECT_LIMIT_SUBSET_AFFINITY: DWORD = 0x00004000;
+pub const JOB_OBJECT_LIMIT_JOB_MEMORY_LOW: DWORD = 0x00008000;
+pub const JOB_OBJECT_LIMIT_JOB_READ_BYTES: DWORD = 0x00010000;
+pub const JOB_OBJECT_LIMIT_JOB_WRITE_BYTES: DWORD = 0x00020000;
+pub const JOB_OBJECT_LIMIT_RATE_CONTROL: DWORD = 0x00040000;
+pub const JOB_OBJECT_LIMIT_CPU_RATE_CONTROL: DWORD = JOB_OBJECT_LIMIT_RATE_CONTROL;
+pub const JOB_OBJECT_LIMIT_IO_RATE_CONTROL: DWORD = 0x00008000;
+pub const JOB_OBJECT_LIMIT_NET_RATE_CONTROL: DWORD = 0x00010000;
+pub const JOB_OBJECT_LIMIT_VALID_FLAGS: DWORD = 0x0007ffff;
+pub const JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS: DWORD = 0x000000ff;
+pub const JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS: DWORD = 0x00007fff;
+pub const JOB_OBJECT_NOTIFICATION_LIMIT_VALID_FLAGS: DWORD = JOB_OBJECT_LIMIT_JOB_READ_BYTES
+ | JOB_OBJECT_LIMIT_JOB_WRITE_BYTES | JOB_OBJECT_LIMIT_JOB_TIME
+ | JOB_OBJECT_LIMIT_JOB_MEMORY_LOW | JOB_OBJECT_LIMIT_JOB_MEMORY_HIGH
+ | JOB_OBJECT_LIMIT_CPU_RATE_CONTROL | JOB_OBJECT_LIMIT_IO_RATE_CONTROL
+ | JOB_OBJECT_LIMIT_NET_RATE_CONTROL;
+pub const JOB_OBJECT_UILIMIT_NONE: DWORD = 0x00000000;
+pub const JOB_OBJECT_UILIMIT_HANDLES: DWORD = 0x00000001;
+pub const JOB_OBJECT_UILIMIT_READCLIPBOARD: DWORD = 0x00000002;
+pub const JOB_OBJECT_UILIMIT_WRITECLIPBOARD: DWORD = 0x00000004;
+pub const JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS: DWORD = 0x00000008;
+pub const JOB_OBJECT_UILIMIT_DISPLAYSETTINGS: DWORD = 0x00000010;
+pub const JOB_OBJECT_UILIMIT_GLOBALATOMS: DWORD = 0x00000020;
+pub const JOB_OBJECT_UILIMIT_DESKTOP: DWORD = 0x00000040;
+pub const JOB_OBJECT_UILIMIT_EXITWINDOWS: DWORD = 0x00000080;
+pub const JOB_OBJECT_UILIMIT_ALL: DWORD = 0x000000FF;
+pub const JOB_OBJECT_UI_VALID_FLAGS: DWORD = 0x000000FF;
+pub const JOB_OBJECT_SECURITY_NO_ADMIN: DWORD = 0x00000001;
+pub const JOB_OBJECT_SECURITY_RESTRICTED_TOKEN: DWORD = 0x00000002;
+pub const JOB_OBJECT_SECURITY_ONLY_TOKEN: DWORD = 0x00000004;
+pub const JOB_OBJECT_SECURITY_FILTER_TOKENS: DWORD = 0x00000008;
+pub const JOB_OBJECT_SECURITY_VALID_FLAGS: DWORD = 0x0000000f;
+pub const JOB_OBJECT_CPU_RATE_CONTROL_ENABLE: DWORD = 0x1;
+pub const JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED: DWORD = 0x2;
+pub const JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP: DWORD = 0x4;
+pub const JOB_OBJECT_CPU_RATE_CONTROL_NOTIFY: DWORD = 0x8;
+pub const JOB_OBJECT_CPU_RATE_CONTROL_MIN_MAX_RATE: DWORD = 0x10;
+pub const JOB_OBJECT_CPU_RATE_CONTROL_VALID_FLAGS: DWORD = 0x1f;
+ENUM!{enum JOBOBJECTINFOCLASS {
+ JobObjectBasicAccountingInformation = 1,
+ JobObjectBasicLimitInformation,
+ JobObjectBasicProcessIdList,
+ JobObjectBasicUIRestrictions,
+ JobObjectSecurityLimitInformation,
+ JobObjectEndOfJobTimeInformation,
+ JobObjectAssociateCompletionPortInformation,
+ JobObjectBasicAndIoAccountingInformation,
+ JobObjectExtendedLimitInformation,
+ JobObjectJobSetInformation,
+ JobObjectGroupInformation,
+ JobObjectNotificationLimitInformation,
+ JobObjectLimitViolationInformation,
+ JobObjectGroupInformationEx,
+ JobObjectCpuRateControlInformation,
+ JobObjectCompletionFilter,
+ JobObjectCompletionCounter,
+ JobObjectReserved1Information = 18,
+ JobObjectReserved2Information,
+ JobObjectReserved3Information,
+ JobObjectReserved4Information,
+ JobObjectReserved5Information,
+ JobObjectReserved6Information,
+ JobObjectReserved7Information,
+ JobObjectReserved8Information,
+ JobObjectReserved9Information,
+ JobObjectReserved10Information,
+ JobObjectReserved11Information,
+ JobObjectReserved12Information,
+ JobObjectReserved13Information,
+ JobObjectReserved14Information = 31,
+ JobObjectNetRateControlInformation,
+ JobObjectNotificationLimitInformation2,
+ JobObjectLimitViolationInformation2,
+ JobObjectCreateSilo,
+ JobObjectSiloBasicInformation,
+ JobObjectReserved15Information = 37,
+ JobObjectReserved16Information = 38,
+ JobObjectReserved17Information = 39,
+ JobObjectReserved18Information = 40,
+ JobObjectReserved19Information = 41,
+ JobObjectReserved20Information = 42,
+ JobObjectReserved21Information = 43,
+ JobObjectReserved22Information = 44,
+ JobObjectReserved23Information = 45,
+ JobObjectReserved24Information = 46,
+ JobObjectReserved25Information = 47,
+ MaxJobObjectInfoClass,
+}}
+STRUCT!{struct SILOOBJECT_BASIC_INFORMATION {
+ SiloId: DWORD,
+ SiloParentId: DWORD,
+ NumberOfProcesses: DWORD,
+ IsInServerSilo: BOOLEAN,
+ Reserved: [BYTE; 3],
+}}
+pub type PSILOOBJECT_BASIC_INFORMATION = *mut SILOOBJECT_BASIC_INFORMATION;
+ENUM!{enum SERVERSILO_STATE {
+ SERVERSILO_INITING = 0,
+ SERVERSILO_STARTED,
+ SERVERSILO_SHUTTING_DOWN,
+ SERVERSILO_TERMINATING,
+ SERVERSILO_TERMINATED,
+}}
+pub type PSERVERSILO_STATE = *mut SERVERSILO_STATE;
+STRUCT!{struct SERVERSILO_BASIC_INFORMATION {
+ ServiceSessionId: DWORD,
+ State: SERVERSILO_STATE,
+ ExitStatus: DWORD,
+}}
+pub type PSERVERSILO_BASIC_INFORMATION = *mut SERVERSILO_BASIC_INFORMATION;
+ENUM!{enum FIRMWARE_TYPE {
+ FirmwareTypeUnknown,
+ FirmwareTypeBios,
+ FirmwareTypeUefi,
+ FirmwareTypeMax,
+}}
+pub type PFIRMWARE_TYPE = *mut FIRMWARE_TYPE;
+pub const EVENT_MODIFY_STATE: DWORD = 0x0002;
+pub const EVENT_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3;
+pub const MUTANT_QUERY_STATE: DWORD = 0x0001;
+pub const MUTANT_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | MUTANT_QUERY_STATE;
+pub const SEMAPHORE_MODIFY_STATE: DWORD = 0x0002;
+pub const SEMAPHORE_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3;
+pub const TIMER_QUERY_STATE: DWORD = 0x0001;
+pub const TIMER_MODIFY_STATE: DWORD = 0x0002;
+pub const TIMER_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | TIMER_QUERY_STATE
+ | TIMER_MODIFY_STATE;
+pub const TIME_ZONE_ID_UNKNOWN: DWORD = 0;
+pub const TIME_ZONE_ID_STANDARD: DWORD = 1;
+pub const TIME_ZONE_ID_DAYLIGHT: DWORD = 2;
+ENUM!{enum LOGICAL_PROCESSOR_RELATIONSHIP {
+ RelationProcessorCore,
+ RelationNumaNode,
+ RelationCache,
+ RelationProcessorPackage,
+ RelationGroup,
+ RelationAll = 0xffff,
+}}
+pub const LTP_PC_SMT: BYTE = 0x1;
+ENUM!{enum PROCESSOR_CACHE_TYPE {
+ CacheUnified,
+ CacheInstruction,
+ CacheData,
+ CacheTrace,
+}}
+pub const CACHE_FULLY_ASSOCIATIVE: BYTE = 0xFF;
+STRUCT!{struct CACHE_DESCRIPTOR {
+ Level: BYTE,
+ Associativity: BYTE,
+ LineSize: WORD,
+ Size: DWORD,
+ Type: PROCESSOR_CACHE_TYPE,
+}}
+pub type PCACHE_DESCRIPTOR = *mut CACHE_DESCRIPTOR;
+STRUCT!{struct SYSTEM_LOGICAL_PROCESSOR_INFORMATION_ProcessorCore {
+ Flags: BYTE,
+}}
+STRUCT!{struct SYSTEM_LOGICAL_PROCESSOR_INFORMATION_NumaNode {
+ NodeNumber: DWORD,
+}}
+UNION!{union SYSTEM_LOGICAL_PROCESSOR_INFORMATION_u {
+ [u64; 2],
+ ProcessorCore ProcessorCore_mut: SYSTEM_LOGICAL_PROCESSOR_INFORMATION_ProcessorCore,
+ NumaNode NumaNode_mut: SYSTEM_LOGICAL_PROCESSOR_INFORMATION_NumaNode,
+ Cache Cache_mut: CACHE_DESCRIPTOR,
+ Reserved Reserved_mut: [ULONGLONG; 2],
+}}
+STRUCT!{struct SYSTEM_LOGICAL_PROCESSOR_INFORMATION {
+ ProcessorMask: ULONG_PTR,
+ Relationship: LOGICAL_PROCESSOR_RELATIONSHIP,
+ u: SYSTEM_LOGICAL_PROCESSOR_INFORMATION_u,
+}}
+pub type PSYSTEM_LOGICAL_PROCESSOR_INFORMATION = *mut SYSTEM_LOGICAL_PROCESSOR_INFORMATION;
+STRUCT!{struct PROCESSOR_RELATIONSHIP {
+ Flags: BYTE,
+ EfficiencyClass: BYTE,
+ Reserved: [BYTE; 20],
+ GroupCount: WORD,
+ GroupMask: [GROUP_AFFINITY; ANYSIZE_ARRAY],
+}}
+pub type PPROCESSOR_RELATIONSHIP = *mut PROCESSOR_RELATIONSHIP;
+STRUCT!{struct NUMA_NODE_RELATIONSHIP {
+ NodeNumber: DWORD,
+ Reserved: [BYTE; 20],
+ GroupMask: GROUP_AFFINITY,
+}}
+pub type PNUMA_NODE_RELATIONSHIP = *mut NUMA_NODE_RELATIONSHIP;
+STRUCT!{struct CACHE_RELATIONSHIP {
+ Level: BYTE,
+ Associativity: BYTE,
+ LineSize: WORD,
+ CacheSize: DWORD,
+ Type: PROCESSOR_CACHE_TYPE,
+ Reserved: [BYTE; 20],
+ GroupMask: GROUP_AFFINITY,
+}}
+pub type PCACHE_RELATIONSHIP = *mut CACHE_RELATIONSHIP;
+STRUCT!{struct PROCESSOR_GROUP_INFO {
+ MaximumProcessorCount: BYTE,
+ ActiveProcessorCount: BYTE,
+ Reserved: [BYTE; 38],
+ ActiveProcessorMask: KAFFINITY,
+}}
+pub type PPROCESSOR_GROUP_INFO = *mut PROCESSOR_GROUP_INFO;
+STRUCT!{struct GROUP_RELATIONSHIP {
+ MaximumGroupCount: WORD,
+ ActiveGroupCount: WORD,
+ Reserved: [BYTE; 20],
+ GroupInfo: [PROCESSOR_GROUP_INFO; ANYSIZE_ARRAY],
+}}
+pub type PGROUP_RELATIONSHIP = *mut GROUP_RELATIONSHIP;
+UNION!{union SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX_u {
+ [u32; 17] [u64; 9],
+ Processor Processor_mut: PROCESSOR_RELATIONSHIP,
+ NumaNode NumaNode_mut: NUMA_NODE_RELATIONSHIP,
+ Cache Cache_mut: CACHE_RELATIONSHIP,
+ Group Group_mut: GROUP_RELATIONSHIP,
+}}
+STRUCT!{struct SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX {
+ Relationship: LOGICAL_PROCESSOR_RELATIONSHIP,
+ Size: DWORD,
+ u: SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX_u,
+}}
+pub type PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX = *mut SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;
+ENUM!{enum CPU_SET_INFORMATION_TYPE {
+ CpuSetInformation,
+}}
+pub type PCPU_SET_INFORMATION_TYPE = *mut CPU_SET_INFORMATION_TYPE;
+pub const SYSTEM_CPU_SET_INFORMATION_PARKED: BYTE = 0x1;
+pub const SYSTEM_CPU_SET_INFORMATION_ALLOCATED: BYTE = 0x2;
+pub const SYSTEM_CPU_SET_INFORMATION_ALLOCATED_TO_TARGET_PROCESS: BYTE = 0x4;
+pub const SYSTEM_CPU_SET_INFORMATION_REALTIME: BYTE = 0x8;
+STRUCT!{struct SYSTEM_CPU_SET_INFORMATION_CpuSet {
+ Id: DWORD,
+ Group: WORD,
+ LogicalProcessorIndex: BYTE,
+ CoreIndex: BYTE,
+ LastLevelCacheIndex: BYTE,
+ NumaNodeIndex: BYTE,
+ EfficiencyClass: BYTE,
+ AllFlags: BYTE,
+ Reserved: DWORD,
+ AllocationTag: DWORD64,
+}}
+BITFIELD!{SYSTEM_CPU_SET_INFORMATION_CpuSet AllFlags: BYTE [
+ Parked set_Parked[0..1],
+ Allocated set_Allocated[1..2],
+ AllocatedToTargetProcess set_AllocatedToTargetProcess[2..3],
+ RealTime set_RealTime[3..4],
+ ReservedFlags set_ReservedFlags[4..8],
+]}
+STRUCT!{struct SYSTEM_CPU_SET_INFORMATION {
+ Size: DWORD,
+ Type: CPU_SET_INFORMATION_TYPE,
+ CpuSet: SYSTEM_CPU_SET_INFORMATION_CpuSet,
+}}
+pub type PSYSTEM_CPU_SET_INFORMATION = *mut SYSTEM_CPU_SET_INFORMATION;
+STRUCT!{struct SYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION {
+ CycleTime: DWORD64,
+}}
+pub type PSYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION = *mut SYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION;
+pub const PROCESSOR_INTEL_386: DWORD = 386;
+pub const PROCESSOR_INTEL_486: DWORD = 486;
+pub const PROCESSOR_INTEL_PENTIUM: DWORD = 586;
+pub const PROCESSOR_INTEL_IA64: DWORD = 2200;
+pub const PROCESSOR_AMD_X8664: DWORD = 8664;
+pub const PROCESSOR_MIPS_R4000: DWORD = 4000;
+pub const PROCESSOR_ALPHA_21064: DWORD = 21064;
+pub const PROCESSOR_PPC_601: DWORD = 601;
+pub const PROCESSOR_PPC_603: DWORD = 603;
+pub const PROCESSOR_PPC_604: DWORD = 604;
+pub const PROCESSOR_PPC_620: DWORD = 620;
+pub const PROCESSOR_HITACHI_SH3: DWORD = 10003;
+pub const PROCESSOR_HITACHI_SH3E: DWORD = 10004;
+pub const PROCESSOR_HITACHI_SH4: DWORD = 10005;
+pub const PROCESSOR_MOTOROLA_821: DWORD = 821;
+pub const PROCESSOR_SHx_SH3: DWORD = 103;
+pub const PROCESSOR_SHx_SH4: DWORD = 104;
+pub const PROCESSOR_STRONGARM: DWORD = 2577;
+pub const PROCESSOR_ARM720: DWORD = 1824;
+pub const PROCESSOR_ARM820: DWORD = 2080;
+pub const PROCESSOR_ARM920: DWORD = 2336;
+pub const PROCESSOR_ARM_7TDMI: DWORD = 70001;
+pub const PROCESSOR_OPTIL: DWORD = 0x494f;
+pub const PROCESSOR_ARCHITECTURE_INTEL: WORD = 0;
+pub const PROCESSOR_ARCHITECTURE_MIPS: WORD = 1;
+pub const PROCESSOR_ARCHITECTURE_ALPHA: WORD = 2;
+pub const PROCESSOR_ARCHITECTURE_PPC: WORD = 3;
+pub const PROCESSOR_ARCHITECTURE_SHX: WORD = 4;
+pub const PROCESSOR_ARCHITECTURE_ARM: WORD = 5;
+pub const PROCESSOR_ARCHITECTURE_IA64: WORD = 6;
+pub const PROCESSOR_ARCHITECTURE_ALPHA64: WORD = 7;
+pub const PROCESSOR_ARCHITECTURE_MSIL: WORD = 8;
+pub const PROCESSOR_ARCHITECTURE_AMD64: WORD = 9;
+pub const PROCESSOR_ARCHITECTURE_IA32_ON_WIN64: WORD = 10;
+pub const PROCESSOR_ARCHITECTURE_NEUTRAL: WORD = 11;
+pub const PROCESSOR_ARCHITECTURE_ARM64: WORD = 12;
+pub const PROCESSOR_ARCHITECTURE_ARM32_ON_WIN64: WORD = 13;
+pub const PROCESSOR_ARCHITECTURE_IA32_ON_ARM64: WORD = 14;
+pub const PROCESSOR_ARCHITECTURE_UNKNOWN: WORD = 0xFFFF;
+pub const PF_FLOATING_POINT_PRECISION_ERRATA: DWORD = 0;
+pub const PF_FLOATING_POINT_EMULATED: DWORD = 1;
+pub const PF_COMPARE_EXCHANGE_DOUBLE: DWORD = 2;
+pub const PF_MMX_INSTRUCTIONS_AVAILABLE: DWORD = 3;
+pub const PF_PPC_MOVEMEM_64BIT_OK: DWORD = 4;
+pub const PF_ALPHA_BYTE_INSTRUCTIONS: DWORD = 5;
+pub const PF_XMMI_INSTRUCTIONS_AVAILABLE: DWORD = 6;
+pub const PF_3DNOW_INSTRUCTIONS_AVAILABLE: DWORD = 7;
+pub const PF_RDTSC_INSTRUCTION_AVAILABLE: DWORD = 8;
+pub const PF_PAE_ENABLED: DWORD = 9;
+pub const PF_XMMI64_INSTRUCTIONS_AVAILABLE: DWORD = 10;
+pub const PF_SSE_DAZ_MODE_AVAILABLE: DWORD = 11;
+pub const PF_NX_ENABLED: DWORD = 12;
+pub const PF_SSE3_INSTRUCTIONS_AVAILABLE: DWORD = 13;
+pub const PF_COMPARE_EXCHANGE128: DWORD = 14;
+pub const PF_COMPARE64_EXCHANGE128: DWORD = 15;
+pub const PF_CHANNELS_ENABLED: DWORD = 16;
+pub const PF_XSAVE_ENABLED: DWORD = 17;
+pub const PF_ARM_VFP_32_REGISTERS_AVAILABLE: DWORD = 18;
+pub const PF_ARM_NEON_INSTRUCTIONS_AVAILABLE: DWORD = 19;
+pub const PF_SECOND_LEVEL_ADDRESS_TRANSLATION: DWORD = 20;
+pub const PF_VIRT_FIRMWARE_ENABLED: DWORD = 21;
+pub const PF_RDWRFSGSBASE_AVAILABLE: DWORD = 22;
+pub const PF_FASTFAIL_AVAILABLE: DWORD = 23;
+pub const PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE: DWORD = 24;
+pub const PF_ARM_64BIT_LOADSTORE_ATOMIC: DWORD = 25;
+pub const PF_ARM_EXTERNAL_CACHE_AVAILABLE: DWORD = 26;
+pub const PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE: DWORD = 27;
+pub const PF_RDRAND_INSTRUCTION_AVAILABLE: DWORD = 28;
+pub const PF_ARM_V8_INSTRUCTIONS_AVAILABLE: DWORD = 29;
+pub const PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE: DWORD = 30;
+pub const PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE: DWORD = 31;
+pub const PF_RDTSCP_INSTRUCTION_AVAILABLE: DWORD = 32;
+pub const XSTATE_LEGACY_FLOATING_POINT: ULONG64 = 0;
+pub const XSTATE_LEGACY_SSE: ULONG64 = 1;
+pub const XSTATE_GSSE: ULONG64 = 2;
+pub const XSTATE_AVX: ULONG64 = XSTATE_GSSE;
+pub const XSTATE_MPX_BNDREGS: ULONG64 = 3;
+pub const XSTATE_MPX_BNDCSR: ULONG64 = 4;
+pub const XSTATE_AVX512_KMASK: ULONG64 = 5;
+pub const XSTATE_AVX512_ZMM_H: ULONG64 = 6;
+pub const XSTATE_AVX512_ZMM: ULONG64 = 7;
+pub const XSTATE_IPT: ULONG64 = 8;
+pub const XSTATE_LWP: ULONG64 = 62;
+pub const MAXIMUM_XSTATE_FEATURES: usize = 64;
+pub const XSTATE_MASK_LEGACY_FLOATING_POINT: ULONG64 = 1 << XSTATE_LEGACY_FLOATING_POINT;
+pub const XSTATE_MASK_LEGACY_SSE: ULONG64 = 1 << XSTATE_LEGACY_SSE;
+pub const XSTATE_MASK_LEGACY: ULONG64 = XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE;
+pub const XSTATE_MASK_GSSE: ULONG64 = 1 << XSTATE_GSSE;
+pub const XSTATE_MASK_AVX: ULONG64 = XSTATE_MASK_GSSE;
+pub const XSTATE_MASK_MPX: ULONG64 = (1 << XSTATE_MPX_BNDREGS) | (1 << XSTATE_MPX_BNDCSR);
+pub const XSTATE_MASK_AVX512: ULONG64 = (1 << XSTATE_AVX512_KMASK) | (1 << XSTATE_AVX512_ZMM_H)
+ | (1 << XSTATE_AVX512_ZMM);
+pub const XSTATE_MASK_IPT: ULONG64 = 1 << XSTATE_IPT;
+pub const XSTATE_MASK_LWP: ULONG64 = 1 << XSTATE_LWP;
+pub const XSTATE_MASK_ALLOWED: ULONG64 = XSTATE_MASK_LEGACY | XSTATE_MASK_AVX | XSTATE_MASK_MPX
+ | XSTATE_MASK_AVX512 | XSTATE_MASK_IPT | XSTATE_MASK_LWP;
+pub const XSTATE_MASK_PERSISTENT: ULONG64 = (1 << XSTATE_MPX_BNDCSR) | XSTATE_MASK_LWP;
+pub const XSTATE_COMPACTION_ENABLE: ULONG64 = 63;
+pub const XSTATE_COMPACTION_ENABLE_MASK: ULONG64 = 1 << XSTATE_COMPACTION_ENABLE;
+pub const XSTATE_ALIGN_BIT: ULONG64 = 1;
+pub const XSTATE_ALIGN_MASK: ULONG64 = 1 << XSTATE_ALIGN_BIT;
+pub const XSTATE_CONTROLFLAG_XSAVEOPT_MASK: ULONG64 = 1;
+pub const XSTATE_CONTROLFLAG_XSAVEC_MASK: ULONG64 = 2;
+pub const XSTATE_CONTROLFLAG_VALID_MASK: ULONG64 = XSTATE_CONTROLFLAG_XSAVEOPT_MASK
+ | XSTATE_CONTROLFLAG_XSAVEC_MASK;
+STRUCT!{struct XSTATE_FEATURE {
+ Offset: DWORD,
+ Size: DWORD,
+}}
+pub type PXSTATE_FEATURE = *mut XSTATE_FEATURE;
+STRUCT!{struct XSTATE_CONFIGURATION {
+ EnabledFeatures: DWORD64,
+ EnabledVolatileFeatures: DWORD64,
+ Size: DWORD,
+ ControlFlags: DWORD,
+ Features: [XSTATE_FEATURE; MAXIMUM_XSTATE_FEATURES],
+ EnabledSupervisorFeatures: DWORD64,
+ AlignedFeatures: DWORD64,
+ AllFeatureSize: DWORD,
+ AllFeatures: [DWORD; MAXIMUM_XSTATE_FEATURES],
+}}
+BITFIELD!{XSTATE_CONFIGURATION ControlFlags: DWORD [
+ OptimizedSave set_OptimizedSave[0..1],
+ CompactionEnabled set_CompactionEnabled[1..2],
+]}
+pub type PXSTATE_CONFIGURATION = *mut XSTATE_CONFIGURATION;
+STRUCT!{struct MEMORY_BASIC_INFORMATION {
+ BaseAddress: PVOID,
+ AllocationBase: PVOID,
+ AllocationProtect: DWORD,
+ RegionSize: SIZE_T,
+ State: DWORD,
+ Protect: DWORD,
+ Type: DWORD,
+}}
+pub type PMEMORY_BASIC_INFORMATION = *mut MEMORY_BASIC_INFORMATION;
+STRUCT!{struct MEMORY_BASIC_INFORMATION32 {
+ BaseAddress: DWORD,
+ AllocationBase: DWORD,
+ AllocationProtect: DWORD,
+ RegionSize: DWORD,
+ State: DWORD,
+ Protect: DWORD,
+ Type: DWORD,
+}}
+pub type PMEMORY_BASIC_INFORMATION32 = *mut MEMORY_BASIC_INFORMATION32;
+STRUCT!{struct MEMORY_BASIC_INFORMATION64 { // FIXME: align 16
+ BaseAddress: ULONGLONG,
+ AllocationBase: ULONGLONG,
+ AllocationProtect: DWORD,
+ __alignment1: DWORD,
+ RegionSize: ULONGLONG,
+ State: DWORD,
+ Protect: DWORD,
+ Type: DWORD,
+ __alignment2: DWORD,
+}}
+pub type PMEMORY_BASIC_INFORMATION64 = *mut MEMORY_BASIC_INFORMATION64;
+pub const CFG_CALL_TARGET_VALID: ULONG_PTR = 0x00000001;
+pub const CFG_CALL_TARGET_PROCESSED: ULONG_PTR = 0x00000002;
+pub const CFG_CALL_TARGET_CONVERT_EXPORT_SUPPRESSED_TO_VALID: ULONG_PTR = 0x00000004;
+STRUCT!{struct CFG_CALL_TARGET_INFO {
+ Offset: ULONG_PTR,
+ Flags: ULONG_PTR,
+}}
+pub type PCFG_CALL_TARGET_INFO = *mut CFG_CALL_TARGET_INFO;
+pub const SECTION_QUERY: DWORD = 0x0001;
+pub const SECTION_MAP_WRITE: DWORD = 0x0002;
+pub const SECTION_MAP_READ: DWORD = 0x0004;
+pub const SECTION_MAP_EXECUTE: DWORD = 0x0008;
+pub const SECTION_EXTEND_SIZE: DWORD = 0x0010;
+pub const SECTION_MAP_EXECUTE_EXPLICIT: DWORD = 0x0020;
+pub const SECTION_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SECTION_QUERY
+ | SECTION_MAP_WRITE | SECTION_MAP_READ | SECTION_MAP_EXECUTE | SECTION_EXTEND_SIZE;
+pub const SESSION_QUERY_ACCESS: DWORD = 0x0001;
+pub const SESSION_MODIFY_ACCESS: DWORD = 0x0002;
+pub const SESSION_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SESSION_QUERY_ACCESS
+ | SESSION_MODIFY_ACCESS;
+pub const MEMORY_PARTITION_QUERY_ACCESS: DWORD = 0x0001;
+pub const MEMORY_PARTITION_MODIFY_ACCESS: DWORD = 0x0002;
+pub const MEMORY_PARTITION_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE
+ | MEMORY_PARTITION_QUERY_ACCESS | MEMORY_PARTITION_MODIFY_ACCESS;
+pub const PAGE_NOACCESS: DWORD = 0x01;
+pub const PAGE_READONLY: DWORD = 0x02;
+pub const PAGE_READWRITE: DWORD = 0x04;
+pub const PAGE_WRITECOPY: DWORD = 0x08;
+pub const PAGE_EXECUTE: DWORD = 0x10;
+pub const PAGE_EXECUTE_READ: DWORD = 0x20;
+pub const PAGE_EXECUTE_READWRITE: DWORD = 0x40;
+pub const PAGE_EXECUTE_WRITECOPY: DWORD = 0x80;
+pub const PAGE_GUARD: DWORD = 0x100;
+pub const PAGE_NOCACHE: DWORD = 0x200;
+pub const PAGE_WRITECOMBINE: DWORD = 0x400;
+pub const PAGE_ENCLAVE_THREAD_CONTROL: DWORD = 0x80000000;
+pub const PAGE_REVERT_TO_FILE_MAP: DWORD = 0x80000000;
+pub const PAGE_TARGETS_NO_UPDATE: DWORD = 0x40000000;
+pub const PAGE_TARGETS_INVALID: DWORD = 0x40000000;
+pub const PAGE_ENCLAVE_UNVALIDATED: DWORD = 0x20000000;
+pub const PAGE_ENCLAVE_DECOMMIT: DWORD = 0x10000000;
+pub const MEM_COMMIT: DWORD = 0x1000;
+pub const MEM_RESERVE: DWORD = 0x2000;
+pub const MEM_DECOMMIT: DWORD = 0x4000;
+pub const MEM_RELEASE: DWORD = 0x8000;
+pub const MEM_FREE: DWORD = 0x10000;
+pub const MEM_PRIVATE: DWORD = 0x20000;
+pub const MEM_MAPPED: DWORD = 0x40000;
+pub const MEM_RESET: DWORD = 0x80000;
+pub const MEM_TOP_DOWN: DWORD = 0x100000;
+pub const MEM_WRITE_WATCH: DWORD = 0x200000;
+pub const MEM_PHYSICAL: DWORD = 0x400000;
+pub const MEM_ROTATE: DWORD = 0x800000;
+pub const MEM_DIFFERENT_IMAGE_BASE_OK: DWORD = 0x800000;
+pub const MEM_RESET_UNDO: DWORD = 0x1000000;
+pub const MEM_LARGE_PAGES: DWORD = 0x20000000;
+pub const MEM_4MB_PAGES: DWORD = 0x80000000;
+pub const MEM_64K_PAGES: DWORD = MEM_LARGE_PAGES | MEM_PHYSICAL;
+pub const SEC_64K_PAGES: DWORD = 0x00080000;
+pub const SEC_FILE: DWORD = 0x800000;
+pub const SEC_IMAGE: DWORD = 0x1000000;
+pub const SEC_PROTECTED_IMAGE: DWORD = 0x2000000;
+pub const SEC_RESERVE: DWORD = 0x4000000;
+pub const SEC_COMMIT: DWORD = 0x8000000;
+pub const SEC_NOCACHE: DWORD = 0x10000000;
+pub const SEC_WRITECOMBINE: DWORD = 0x40000000;
+pub const SEC_LARGE_PAGES: DWORD = 0x80000000;
+pub const SEC_IMAGE_NO_EXECUTE: DWORD = SEC_IMAGE | SEC_NOCACHE;
+pub const MEM_IMAGE: DWORD = SEC_IMAGE;
+pub const WRITE_WATCH_FLAG_RESET: DWORD = 0x01;
+pub const MEM_UNMAP_WITH_TRANSIENT_BOOST: DWORD = 0x01;
+pub const ENCLAVE_TYPE_SGX: DWORD = 0x00000001;
+pub const ENCLAVE_TYPE_SGX2: DWORD = 0x00000002;
+STRUCT!{struct ENCLAVE_CREATE_INFO_SGX {
+ Secs: [BYTE; 4096],
+}}
+pub type PENCLAVE_CREATE_INFO_SGX = *mut ENCLAVE_CREATE_INFO_SGX;
+STRUCT!{struct ENCLAVE_INIT_INFO_SGX {
+ SigStruct: [BYTE; 1808],
+ Reserved1: [BYTE; 240],
+ EInitToken: [BYTE; 304],
+ Reserved2: [BYTE; 1744],
+}}
+pub type PENCLAVE_INIT_INFO_SGX = *mut ENCLAVE_INIT_INFO_SGX;
+pub const FILE_READ_DATA: DWORD = 0x0001;
+pub const FILE_LIST_DIRECTORY: DWORD = 0x0001;
+pub const FILE_WRITE_DATA: DWORD = 0x0002;
+pub const FILE_ADD_FILE: DWORD = 0x0002;
+pub const FILE_APPEND_DATA: DWORD = 0x0004;
+pub const FILE_ADD_SUBDIRECTORY: DWORD = 0x0004;
+pub const FILE_CREATE_PIPE_INSTANCE: DWORD = 0x0004;
+pub const FILE_READ_EA: DWORD = 0x0008;
+pub const FILE_WRITE_EA: DWORD = 0x0010;
+pub const FILE_EXECUTE: DWORD = 0x0020;
+pub const FILE_TRAVERSE: DWORD = 0x0020;
+pub const FILE_DELETE_CHILD: DWORD = 0x0040;
+pub const FILE_READ_ATTRIBUTES: DWORD = 0x0080;
+pub const FILE_WRITE_ATTRIBUTES: DWORD = 0x0100;
+pub const FILE_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF;
+pub const FILE_GENERIC_READ: DWORD = STANDARD_RIGHTS_READ | FILE_READ_DATA
+ | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE;
+pub const FILE_GENERIC_WRITE: DWORD = STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA
+ | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE;
+pub const FILE_GENERIC_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES
+ | FILE_EXECUTE | SYNCHRONIZE;
+pub const FILE_SHARE_READ: DWORD = 0x00000001;
+pub const FILE_SHARE_WRITE: DWORD = 0x00000002;
+pub const FILE_SHARE_DELETE: DWORD = 0x00000004;
+pub const FILE_ATTRIBUTE_READONLY: DWORD = 0x00000001;
+pub const FILE_ATTRIBUTE_HIDDEN: DWORD = 0x00000002;
+pub const FILE_ATTRIBUTE_SYSTEM: DWORD = 0x00000004;
+pub const FILE_ATTRIBUTE_DIRECTORY: DWORD = 0x00000010;
+pub const FILE_ATTRIBUTE_ARCHIVE: DWORD = 0x00000020;
+pub const FILE_ATTRIBUTE_DEVICE: DWORD = 0x00000040;
+pub const FILE_ATTRIBUTE_NORMAL: DWORD = 0x00000080;
+pub const FILE_ATTRIBUTE_TEMPORARY: DWORD = 0x00000100;
+pub const FILE_ATTRIBUTE_SPARSE_FILE: DWORD = 0x00000200;
+pub const FILE_ATTRIBUTE_REPARSE_POINT: DWORD = 0x00000400;
+pub const FILE_ATTRIBUTE_COMPRESSED: DWORD = 0x00000800;
+pub const FILE_ATTRIBUTE_OFFLINE: DWORD = 0x00001000;
+pub const FILE_ATTRIBUTE_NOT_CONTENT_INDEXED: DWORD = 0x00002000;
+pub const FILE_ATTRIBUTE_ENCRYPTED: DWORD = 0x00004000;
+pub const FILE_ATTRIBUTE_INTEGRITY_STREAM: DWORD = 0x00008000;
+pub const FILE_ATTRIBUTE_VIRTUAL: DWORD = 0x00010000;
+pub const FILE_ATTRIBUTE_NO_SCRUB_DATA: DWORD = 0x00020000;
+pub const FILE_ATTRIBUTE_EA: DWORD = 0x00040000;
+pub const FILE_ATTRIBUTE_PINNED: DWORD = 0x00080000;
+pub const FILE_ATTRIBUTE_UNPINNED: DWORD = 0x00100000;
+pub const FILE_ATTRIBUTE_RECALL_ON_OPEN: DWORD = 0x00040000;
+pub const FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS: DWORD = 0x00400000;
+pub const FILE_NOTIFY_CHANGE_FILE_NAME: DWORD = 0x00000001;
+pub const FILE_NOTIFY_CHANGE_DIR_NAME: DWORD = 0x00000002;
+pub const FILE_NOTIFY_CHANGE_ATTRIBUTES: DWORD = 0x00000004;
+pub const FILE_NOTIFY_CHANGE_SIZE: DWORD = 0x00000008;
+pub const FILE_NOTIFY_CHANGE_LAST_WRITE: DWORD = 0x00000010;
+pub const FILE_NOTIFY_CHANGE_LAST_ACCESS: DWORD = 0x00000020;
+pub const FILE_NOTIFY_CHANGE_CREATION: DWORD = 0x00000040;
+pub const FILE_NOTIFY_CHANGE_SECURITY: DWORD = 0x00000100;
+pub const FILE_ACTION_ADDED: DWORD = 0x00000001;
+pub const FILE_ACTION_REMOVED: DWORD = 0x00000002;
+pub const FILE_ACTION_MODIFIED: DWORD = 0x00000003;
+pub const FILE_ACTION_RENAMED_OLD_NAME: DWORD = 0x00000004;
+pub const FILE_ACTION_RENAMED_NEW_NAME: DWORD = 0x00000005;
+pub const MAILSLOT_NO_MESSAGE: DWORD = 0xFFFFFFFF;
+pub const MAILSLOT_WAIT_FOREVER: DWORD = 0xFFFFFFFF;
+pub const FILE_CASE_SENSITIVE_SEARCH: DWORD = 0x00000001;
+pub const FILE_CASE_PRESERVED_NAMES: DWORD = 0x00000002;
+pub const FILE_UNICODE_ON_DISK: DWORD = 0x00000004;
+pub const FILE_PERSISTENT_ACLS: DWORD = 0x00000008;
+pub const FILE_FILE_COMPRESSION: DWORD = 0x00000010;
+pub const FILE_VOLUME_QUOTAS: DWORD = 0x00000020;
+pub const FILE_SUPPORTS_SPARSE_FILES: DWORD = 0x00000040;
+pub const FILE_SUPPORTS_REPARSE_POINTS: DWORD = 0x00000080;
+pub const FILE_SUPPORTS_REMOTE_STORAGE: DWORD = 0x00000100;
+pub const FILE_RETURNS_CLEANUP_RESULT_INFO: DWORD = 0x00000200;
+pub const FILE_VOLUME_IS_COMPRESSED: DWORD = 0x00008000;
+pub const FILE_SUPPORTS_OBJECT_IDS: DWORD = 0x00010000;
+pub const FILE_SUPPORTS_ENCRYPTION: DWORD = 0x00020000;
+pub const FILE_NAMED_STREAMS: DWORD = 0x00040000;
+pub const FILE_READ_ONLY_VOLUME: DWORD = 0x00080000;
+pub const FILE_SEQUENTIAL_WRITE_ONCE: DWORD = 0x00100000;
+pub const FILE_SUPPORTS_TRANSACTIONS: DWORD = 0x00200000;
+pub const FILE_SUPPORTS_HARD_LINKS: DWORD = 0x00400000;
+pub const FILE_SUPPORTS_EXTENDED_ATTRIBUTES: DWORD = 0x00800000;
+pub const FILE_SUPPORTS_OPEN_BY_FILE_ID: DWORD = 0x01000000;
+pub const FILE_SUPPORTS_USN_JOURNAL: DWORD = 0x02000000;
+pub const FILE_SUPPORTS_INTEGRITY_STREAMS: DWORD = 0x04000000;
+pub const FILE_SUPPORTS_BLOCK_REFCOUNTING: DWORD = 0x08000000;
+pub const FILE_SUPPORTS_SPARSE_VDL: DWORD = 0x10000000;
+pub const FILE_DAX_VOLUME: DWORD = 0x20000000;
+pub const FILE_SUPPORTS_GHOSTING: DWORD = 0x40000000;
+pub const FILE_INVALID_FILE_ID: LONGLONG = -1;
+STRUCT!{struct FILE_ID_128 {
+ Identifier: [BYTE; 16],
+}}
+pub type PFILE_ID_128 = *mut FILE_ID_128;
+STRUCT!{struct FILE_NOTIFY_INFORMATION {
+ NextEntryOffset: DWORD,
+ Action: DWORD,
+ FileNameLength: DWORD,
+ FileName: [WCHAR; 1],
+}}
+UNION!{union FILE_SEGMENT_ELEMENT {
+ [u64; 1],
+ Buffer Buffer_mut: PVOID64,
+ Alignment Alignment_mut: ULONGLONG,
+}}
+pub type PFILE_SEGMENT_ELEMENT = *mut FILE_SEGMENT_ELEMENT;
+pub const FLUSH_FLAGS_FILE_DATA_ONLY: ULONG = 0x00000001;
+pub const FLUSH_FLAGS_NO_SYNC: ULONG = 0x00000002;
+pub const FLUSH_FLAGS_FILE_DATA_SYNC_ONLY: ULONG = 0x00000004;
+STRUCT!{struct REPARSE_GUID_DATA_BUFFER_GenericReparseBuffer {
+ DataBuffer: [BYTE; 1],
+}}
+STRUCT!{struct REPARSE_GUID_DATA_BUFFER {
+ ReparseTag: DWORD,
+ ReparseDataLength: WORD,
+ Reserved: WORD,
+ ReparseGuid: GUID,
+ GenericReparseBuffer: REPARSE_GUID_DATA_BUFFER_GenericReparseBuffer,
+}}
+pub type PREPARSE_GUID_DATA_BUFFER = *mut REPARSE_GUID_DATA_BUFFER;
+pub const MAXIMUM_REPARSE_DATA_BUFFER_SIZE: DWORD = 16 * 1024;
+pub const IO_REPARSE_TAG_RESERVED_ZERO: DWORD = 0;
+pub const IO_REPARSE_TAG_RESERVED_ONE: DWORD = 1;
+pub const IO_REPARSE_TAG_RESERVED_TWO: DWORD = 2;
+pub const IO_REPARSE_TAG_RESERVED_RANGE: DWORD = IO_REPARSE_TAG_RESERVED_TWO;
+#[inline]
+pub fn IsReparseTagMicrosoft(_tag: DWORD) -> bool {
+ (_tag & 0x80000000) != 0
+}
+#[inline]
+pub fn IsReparseTagNameSurrogate(_tag: DWORD) -> bool {
+ (_tag & 0x20000000) != 0
+}
+#[inline]
+pub fn IsReparseTagDirectory(_tag: DWORD) -> bool {
+ (_tag & 0x10000000) != 0
+}
+pub const IO_REPARSE_TAG_MOUNT_POINT: DWORD = 0xA0000003;
+pub const IO_REPARSE_TAG_HSM: DWORD = 0xC0000004;
+pub const IO_REPARSE_TAG_HSM2: DWORD = 0x80000006;
+pub const IO_REPARSE_TAG_SIS: DWORD = 0x80000007;
+pub const IO_REPARSE_TAG_WIM: DWORD = 0x80000008;
+pub const IO_REPARSE_TAG_CSV: DWORD = 0x80000009;
+pub const IO_REPARSE_TAG_DFS: DWORD = 0x8000000A;
+pub const IO_REPARSE_TAG_SYMLINK: DWORD = 0xA000000C;
+pub const IO_REPARSE_TAG_DFSR: DWORD = 0x80000012;
+pub const IO_REPARSE_TAG_DEDUP: DWORD = 0x80000013;
+pub const IO_REPARSE_TAG_NFS: DWORD = 0x80000014;
+pub const IO_REPARSE_TAG_FILE_PLACEHOLDER: DWORD = 0x80000015;
+pub const IO_REPARSE_TAG_WOF: DWORD = 0x80000017;
+pub const IO_REPARSE_TAG_WCI: DWORD = 0x80000018;
+pub const IO_REPARSE_TAG_GLOBAL_REPARSE: DWORD = 0xA0000019;
+pub const IO_REPARSE_TAG_CLOUD: DWORD = 0x9000001A;
+pub const IO_REPARSE_TAG_CLOUD_ROOT: DWORD = 0x9000101A;
+pub const IO_REPARSE_TAG_CLOUD_ON_DEMAND: DWORD = 0x9000201A;
+pub const IO_REPARSE_TAG_CLOUD_ROOT_ON_DEMAND: DWORD = 0x9000301A;
+pub const IO_REPARSE_TAG_APPEXECLINK: DWORD = 0x8000001B;
+pub const IO_REPARSE_TAG_GVFS: DWORD = 0x9000001C;
+pub const IO_REPARSE_TAG_WCI_TOMBSTONE: DWORD = 0xA000001F;
+pub const IO_REPARSE_TAG_UNHANDLED: DWORD = 0x80000020;
+pub const IO_REPARSE_TAG_ONEDRIVE: DWORD = 0x80000021;
+pub const IO_REPARSE_TAG_GVFS_TOMBSTONE: DWORD = 0xA0000022;
+pub const SCRUB_DATA_INPUT_FLAG_RESUME: DWORD = 0x00000001;
+pub const SCRUB_DATA_INPUT_FLAG_SKIP_IN_SYNC: DWORD = 0x00000002;
+pub const SCRUB_DATA_INPUT_FLAG_SKIP_NON_INTEGRITY_DATA: DWORD = 0x00000004;
+pub const SCRUB_DATA_OUTPUT_FLAG_INCOMPLETE: DWORD = 0x00000001;
+pub const SCRUB_DATA_OUTPUT_FLAG_NON_USER_DATA_RANGE: DWORD = 0x00010000;
+pub const SCRUB_DATA_OUTPUT_FLAG_PARITY_EXTENT_DATA_RETURNED: DWORD = 0x00020000;
+pub const SCRUB_DATA_OUTPUT_FLAG_RESUME_CONTEXT_LENGTH_SPECIFIED: DWORD = 0x00040000;
+STRUCT!{struct SCRUB_DATA_INPUT {
+ Size: DWORD,
+ Flags: DWORD,
+ MaximumIos: DWORD,
+ Reserved: [DWORD; 17],
+ ResumeContext: [BYTE; 816],
+}}
+pub type PSCRUB_DATA_INPUT = *mut SCRUB_DATA_INPUT;
+STRUCT!{struct SCRUB_PARITY_EXTENT {
+ Offset: LONGLONG,
+ Length: ULONGLONG,
+}}
+pub type PSCRUB_PARITY_EXTENT = *mut SCRUB_PARITY_EXTENT;
+STRUCT!{struct SCRUB_PARITY_EXTENT_DATA {
+ Size: WORD,
+ Flags: WORD,
+ NumberOfParityExtents: WORD,
+ MaximumNumberOfParityExtents: WORD,
+ ParityExtents: [SCRUB_PARITY_EXTENT; ANYSIZE_ARRAY],
+}}
+pub type PSCRUB_PARITY_EXTENT_DATA = *mut SCRUB_PARITY_EXTENT_DATA;
+STRUCT!{struct SCRUB_DATA_OUTPUT {
+ Size: DWORD,
+ Flags: DWORD,
+ Status: DWORD,
+ ErrorFileOffset: ULONGLONG,
+ ErrorLength: ULONGLONG,
+ NumberOfBytesRepaired: ULONGLONG,
+ NumberOfBytesFailed: ULONGLONG,
+ InternalFileReference: ULONGLONG,
+ ResumeContextLength: WORD,
+ ParityExtentDataOffset: WORD,
+ Reserved: [DWORD; 5],
+ ResumeContext: [BYTE; 816],
+}}
+pub type PSCRUB_DATA_OUTPUT = *mut SCRUB_DATA_OUTPUT;
+ENUM!{enum SharedVirtualDiskSupportType {
+ SharedVirtualDisksUnsupported = 0,
+ SharedVirtualDisksSupported = 1,
+ SharedVirtualDiskSnapshotsSupported = 3,
+ SharedVirtualDiskCDPSnapshotsSupported = 7,
+}}
+ENUM!{enum SharedVirtualDiskHandleState {
+ SharedVirtualDiskHandleStateNone = 0,
+ SharedVirtualDiskHandleStateFileShared = 1,
+ SharedVirtualDiskHandleStateHandleShared = 3,
+}}
+STRUCT!{struct SHARED_VIRTUAL_DISK_SUPPORT {
+ SharedVirtualDiskSupport: SharedVirtualDiskSupportType,
+ HandleState: SharedVirtualDiskHandleState,
+}}
+pub type PSHARED_VIRTUAL_DISK_SUPPORT = *mut SHARED_VIRTUAL_DISK_SUPPORT;
+#[inline]
+pub fn IsVirtualDiskFileShared(HandleState: SharedVirtualDiskHandleState) -> bool {
+ (HandleState & SharedVirtualDiskHandleStateFileShared) != 0
+}
+pub const IO_COMPLETION_MODIFY_STATE: DWORD = 0x0002;
+pub const IO_COMPLETION_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3;
+pub const IO_QOS_MAX_RESERVATION: DWORD64 = 1000000000;
+pub const SMB_CCF_APP_INSTANCE_EA_NAME: &'static str = "ClusteredApplicationInstance";
+pub const NETWORK_APP_INSTANCE_CSV_FLAGS_VALID_ONLY_IF_CSV_COORDINATOR: DWORD = 0x00000001;
+STRUCT!{struct NETWORK_APP_INSTANCE_EA {
+ AppInstanceID: GUID,
+ CsvFlags: DWORD,
+}}
+pub type PNETWORK_APP_INSTANCE_EA = *mut NETWORK_APP_INSTANCE_EA;
+pub const DUPLICATE_CLOSE_SOURCE: DWORD = 0x00000001;
+pub const DUPLICATE_SAME_ACCESS: DWORD = 0x00000002;
+DEFINE_GUID!{GUID_MAX_POWER_SAVINGS,
+ 0xa1841308, 0x3541, 0x4fab, 0xbc, 0x81, 0xf7, 0x15, 0x56, 0xf2, 0x0b, 0x4a}
+DEFINE_GUID!{GUID_MIN_POWER_SAVINGS,
+ 0x8c5e7fda, 0xe8bf, 0x4a96, 0x9a, 0x85, 0xa6, 0xe2, 0x3a, 0x8c, 0x63, 0x5c}
+DEFINE_GUID!{GUID_TYPICAL_POWER_SAVINGS,
+ 0x381b4222, 0xf694, 0x41f0, 0x96, 0x85, 0xff, 0x5b, 0xb2, 0x60, 0xdf, 0x2e}
+DEFINE_GUID!{NO_SUBGROUP_GUID,
+ 0xfea3413e, 0x7e05, 0x4911, 0x9a, 0x71, 0x70, 0x03, 0x31, 0xf1, 0xc2, 0x94}
+DEFINE_GUID!{ALL_POWERSCHEMES_GUID,
+ 0x68a1e95e, 0x13ea, 0x41e1, 0x80, 0x11, 0x0c, 0x49, 0x6c, 0xa4, 0x90, 0xb0}
+DEFINE_GUID!{GUID_POWERSCHEME_PERSONALITY,
+ 0x245d8541, 0x3943, 0x4422, 0xb0, 0x25, 0x13, 0xa7, 0x84, 0xf6, 0x79, 0xb7}
+DEFINE_GUID!{GUID_ACTIVE_POWERSCHEME,
+ 0x31f9f286, 0x5084, 0x42fe, 0xb7, 0x20, 0x2b, 0x02, 0x64, 0x99, 0x37, 0x63}
+DEFINE_GUID!{GUID_IDLE_RESILIENCY_SUBGROUP,
+ 0x2e601130, 0x5351, 0x4d9d, 0x8e, 0x4, 0x25, 0x29, 0x66, 0xba, 0xd0, 0x54}
+DEFINE_GUID!{GUID_IDLE_RESILIENCY_PERIOD,
+ 0xc42b79aa, 0xaa3a, 0x484b, 0xa9, 0x8f, 0x2c, 0xf3, 0x2a, 0xa9, 0xa, 0x28}
+DEFINE_GUID!{GUID_DEEP_SLEEP_ENABLED,
+ 0xd502f7ee, 0x1dc7, 0x4efd, 0xa5, 0x5d, 0xf0, 0x4b, 0x6f, 0x5c, 0x5, 0x45}
+DEFINE_GUID!{GUID_DEEP_SLEEP_PLATFORM_STATE,
+ 0xd23f2fb8, 0x9536, 0x4038, 0x9c, 0x94, 0x1c, 0xe0, 0x2e, 0x5c, 0x21, 0x52}
+DEFINE_GUID!{GUID_DISK_COALESCING_POWERDOWN_TIMEOUT,
+ 0xc36f0eb4, 0x2988, 0x4a70, 0x8e, 0xee, 0x8, 0x84, 0xfc, 0x2c, 0x24, 0x33}
+DEFINE_GUID!{GUID_EXECUTION_REQUIRED_REQUEST_TIMEOUT,
+ 0x3166bc41, 0x7e98, 0x4e03, 0xb3, 0x4e, 0xec, 0xf, 0x5f, 0x2b, 0x21, 0x8e}
+DEFINE_GUID!{GUID_VIDEO_SUBGROUP,
+ 0x7516b95f, 0xf776, 0x4464, 0x8c, 0x53, 0x06, 0x16, 0x7f, 0x40, 0xcc, 0x99}
+DEFINE_GUID!{GUID_VIDEO_POWERDOWN_TIMEOUT,
+ 0x3c0bc021, 0xc8a8, 0x4e07, 0xa9, 0x73, 0x6b, 0x14, 0xcb, 0xcb, 0x2b, 0x7e}
+DEFINE_GUID!{GUID_VIDEO_ANNOYANCE_TIMEOUT,
+ 0x82dbcf2d, 0xcd67, 0x40c5, 0xbf, 0xdc, 0x9f, 0x1a, 0x5c, 0xcd, 0x46, 0x63}
+DEFINE_GUID!{GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE,
+ 0xeed904df, 0xb142, 0x4183, 0xb1, 0x0b, 0x5a, 0x11, 0x97, 0xa3, 0x78, 0x64}
+DEFINE_GUID!{GUID_VIDEO_DIM_TIMEOUT,
+ 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee}
+DEFINE_GUID!{GUID_VIDEO_ADAPTIVE_POWERDOWN,
+ 0x90959d22, 0xd6a1, 0x49b9, 0xaf, 0x93, 0xbc, 0xe8, 0x85, 0xad, 0x33, 0x5b}
+DEFINE_GUID!{GUID_MONITOR_POWER_ON,
+ 0x02731015, 0x4510, 0x4526, 0x99, 0xe6, 0xe5, 0xa1, 0x7e, 0xbd, 0x1a, 0xea}
+DEFINE_GUID!{GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS,
+ 0xaded5e82, 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb}
+DEFINE_GUID!{GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS,
+ 0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96}
+DEFINE_GUID!{GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS,
+ 0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff}
+DEFINE_GUID!{GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS,
+ 0xfbd9aa66, 0x9553, 0x4097, 0xba, 0x44, 0xed, 0x6e, 0x9d, 0x65, 0xea, 0xb8}
+DEFINE_GUID!{GUID_CONSOLE_DISPLAY_STATE,
+ 0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47}
+DEFINE_GUID!{GUID_ALLOW_DISPLAY_REQUIRED,
+ 0xa9ceb8da, 0xcd46, 0x44fb, 0xa9, 0x8b, 0x02, 0xaf, 0x69, 0xde, 0x46, 0x23}
+DEFINE_GUID!{GUID_VIDEO_CONSOLE_LOCK_TIMEOUT,
+ 0x8ec4b3a5, 0x6868, 0x48c2, 0xbe, 0x75, 0x4f, 0x30, 0x44, 0xbe, 0x88, 0xa7}
+DEFINE_GUID!{GUID_ADAPTIVE_POWER_BEHAVIOR_SUBGROUP,
+ 0x8619b916, 0xe004, 0x4dd8, 0x9b, 0x66, 0xda, 0xe8, 0x6f, 0x80, 0x66, 0x98}
+DEFINE_GUID!{GUID_NON_ADAPTIVE_INPUT_TIMEOUT,
+ 0x5adbbfbc, 0x74e, 0x4da1, 0xba, 0x38, 0xdb, 0x8b, 0x36, 0xb2, 0xc8, 0xf3}
+DEFINE_GUID!{GUID_ADAPTIVE_INPUT_CONTROLLER_STATE,
+ 0xe98fae9, 0xf45a, 0x4de1, 0xa7, 0x57, 0x60, 0x31, 0xf1, 0x97, 0xf6, 0xea}
+DEFINE_GUID!{GUID_DISK_SUBGROUP,
+ 0x0012ee47, 0x9041, 0x4b5d, 0x9b, 0x77, 0x53, 0x5f, 0xba, 0x8b, 0x14, 0x42}
+DEFINE_GUID!{GUID_DISK_MAX_POWER,
+ 0x51dea550, 0xbb38, 0x4bc4, 0x99, 0x1b, 0xea, 0xcf, 0x37, 0xbe, 0x5e, 0xc8}
+DEFINE_GUID!{GUID_DISK_POWERDOWN_TIMEOUT,
+ 0x6738e2c4, 0xe8a5, 0x4a42, 0xb1, 0x6a, 0xe0, 0x40, 0xe7, 0x69, 0x75, 0x6e}
+DEFINE_GUID!{GUID_DISK_IDLE_TIMEOUT,
+ 0x58e39ba8, 0xb8e6, 0x4ef6, 0x90, 0xd0, 0x89, 0xae, 0x32, 0xb2, 0x58, 0xd6}
+DEFINE_GUID!{GUID_DISK_BURST_IGNORE_THRESHOLD,
+ 0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63}
+DEFINE_GUID!{GUID_DISK_ADAPTIVE_POWERDOWN,
+ 0x396a32e1, 0x499a, 0x40b2, 0x91, 0x24, 0xa9, 0x6a, 0xfe, 0x70, 0x76, 0x67}
+DEFINE_GUID!{GUID_SLEEP_SUBGROUP,
+ 0x238c9fa8, 0x0aad, 0x41ed, 0x83, 0xf4, 0x97, 0xbe, 0x24, 0x2c, 0x8f, 0x20}
+DEFINE_GUID!{GUID_SLEEP_IDLE_THRESHOLD,
+ 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70}
+DEFINE_GUID!{GUID_STANDBY_TIMEOUT,
+ 0x29f6c1db, 0x86da, 0x48c5, 0x9f, 0xdb, 0xf2, 0xb6, 0x7b, 0x1f, 0x44, 0xda}
+DEFINE_GUID!{GUID_UNATTEND_SLEEP_TIMEOUT,
+ 0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0}
+DEFINE_GUID!{GUID_HIBERNATE_TIMEOUT,
+ 0x9d7815a6, 0x7ee4, 0x497e, 0x88, 0x88, 0x51, 0x5a, 0x05, 0xf0, 0x23, 0x64}
+DEFINE_GUID!{GUID_HIBERNATE_FASTS4_POLICY,
+ 0x94ac6d29, 0x73ce, 0x41a6, 0x80, 0x9f, 0x63, 0x63, 0xba, 0x21, 0xb4, 0x7e}
+DEFINE_GUID!{GUID_CRITICAL_POWER_TRANSITION,
+ 0xb7a27025, 0xe569, 0x46c2, 0xa5, 0x04, 0x2b, 0x96, 0xca, 0xd2, 0x25, 0xa1}
+DEFINE_GUID!{GUID_SYSTEM_AWAYMODE,
+ 0x98a7f580, 0x01f7, 0x48aa, 0x9c, 0x0f, 0x44, 0x35, 0x2c, 0x29, 0xe5, 0xc0}
+DEFINE_GUID!{GUID_ALLOW_AWAYMODE,
+ 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87}
+DEFINE_GUID!{GUID_USER_PRESENCE_PREDICTION,
+ 0x82011705, 0xfb95, 0x4d46, 0x8d, 0x35, 0x40, 0x42, 0xb1, 0xd2, 0xd, 0xef}
+DEFINE_GUID!{GUID_STANDBY_BUDGET_GRACE_PERIOD,
+ 0x60c07fe1, 0x0556, 0x45cf, 0x99, 0x03, 0xd5, 0x6e, 0x32, 0x21, 0x2, 0x42}
+DEFINE_GUID!{GUID_STANDBY_BUDGET_PERCENT,
+ 0x9fe527be, 0x1b70, 0x48da, 0x93, 0x0d, 0x7b, 0xcf, 0x17, 0xb4, 0x49, 0x90}
+DEFINE_GUID!{GUID_STANDBY_RESERVE_GRACE_PERIOD,
+ 0xc763ee92, 0x71e8, 0x4127, 0x84, 0xeb, 0xf6, 0xed, 0x04, 0x3a, 0x3e, 0x3d}
+DEFINE_GUID!{GUID_STANDBY_RESERVE_TIME,
+ 0x468fe7e5, 0x1158, 0x46ec, 0x88, 0xbc, 0x5b, 0x96, 0xc9, 0xe4, 0x4f, 0xd0}
+DEFINE_GUID!{GUID_STANDBY_RESET_PERCENT,
+ 0x49cb11a5, 0x56e2, 0x4afb, 0x9d, 0x38, 0x3d, 0xf4, 0x78, 0x72, 0xe2, 0x1b}
+DEFINE_GUID!{GUID_ALLOW_STANDBY_STATES,
+ 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab}
+DEFINE_GUID!{GUID_ALLOW_RTC_WAKE,
+ 0xbd3b718a, 0x0680, 0x4d9d, 0x8a, 0xb2, 0xe1, 0xd2, 0xb4, 0xac, 0x80, 0x6d}
+DEFINE_GUID!{GUID_ALLOW_SYSTEM_REQUIRED,
+ 0xa4b195f5, 0x8225, 0x47d8, 0x80, 0x12, 0x9d, 0x41, 0x36, 0x97, 0x86, 0xe2}
+DEFINE_GUID!{GUID_POWER_SAVING_STATUS,
+ 0xe00958c0, 0xc213, 0x4ace, 0xac, 0x77, 0xfe, 0xcc, 0xed, 0x2e, 0xee, 0xa5}
+DEFINE_GUID!{GUID_ENERGY_SAVER_SUBGROUP,
+ 0xde830923, 0xa562, 0x41af, 0xa0, 0x86, 0xe3, 0xa2, 0xc6, 0xba, 0xd2, 0xda}
+DEFINE_GUID!{GUID_ENERGY_SAVER_BATTERY_THRESHOLD,
+ 0xe69653ca, 0xcf7f, 0x4f05, 0xaa, 0x73, 0xcb, 0x83, 0x3f, 0xa9, 0x0a, 0xd4}
+DEFINE_GUID!{GUID_ENERGY_SAVER_BRIGHTNESS,
+ 0x13d09884, 0xf74e, 0x474a, 0xa8, 0x52, 0xb6, 0xbd, 0xe8, 0xad, 0x03, 0xa8}
+DEFINE_GUID!{GUID_ENERGY_SAVER_POLICY,
+ 0x5c5bb349, 0xad29, 0x4ee2, 0x9d, 0xb, 0x2b, 0x25, 0x27, 0xf, 0x7a, 0x81}
+DEFINE_GUID!{GUID_SYSTEM_BUTTON_SUBGROUP,
+ 0x4f971e89, 0xeebd, 0x4455, 0xa8, 0xde, 0x9e, 0x59, 0x04, 0x0e, 0x73, 0x47}
+pub const POWERBUTTON_ACTION_INDEX_NOTHING: DWORD = 0;
+pub const POWERBUTTON_ACTION_INDEX_SLEEP: DWORD = 1;
+pub const POWERBUTTON_ACTION_INDEX_HIBERNATE: DWORD = 2;
+pub const POWERBUTTON_ACTION_INDEX_SHUTDOWN: DWORD = 3;
+pub const POWERBUTTON_ACTION_INDEX_TURN_OFF_THE_DISPLAY: DWORD = 4;
+pub const POWERBUTTON_ACTION_VALUE_NOTHING: DWORD = 0;
+pub const POWERBUTTON_ACTION_VALUE_SLEEP: DWORD = 2;
+pub const POWERBUTTON_ACTION_VALUE_HIBERNATE: DWORD = 3;
+pub const POWERBUTTON_ACTION_VALUE_SHUTDOWN: DWORD = 6;
+pub const POWERBUTTON_ACTION_VALUE_TURN_OFF_THE_DISPLAY: DWORD = 8;
+DEFINE_GUID!{GUID_POWERBUTTON_ACTION,
+ 0x7648efa3, 0xdd9c, 0x4e3e, 0xb5, 0x66, 0x50, 0xf9, 0x29, 0x38, 0x62, 0x80}
+DEFINE_GUID!{GUID_SLEEPBUTTON_ACTION,
+ 0x96996bc0, 0xad50, 0x47ec, 0x92, 0x3b, 0x6f, 0x41, 0x87, 0x4d, 0xd9, 0xeb}
+DEFINE_GUID!{GUID_USERINTERFACEBUTTON_ACTION,
+ 0xa7066653, 0x8d6c, 0x40a8, 0x91, 0x0e, 0xa1, 0xf5, 0x4b, 0x84, 0xc7, 0xe5}
+DEFINE_GUID!{GUID_LIDCLOSE_ACTION,
+ 0x5ca83367, 0x6e45, 0x459f, 0xa2, 0x7b, 0x47, 0x6b, 0x1d, 0x01, 0xc9, 0x36}
+DEFINE_GUID!{GUID_LIDOPEN_POWERSTATE,
+ 0x99ff10e7, 0x23b1, 0x4c07, 0xa9, 0xd1, 0x5c, 0x32, 0x06, 0xd7, 0x41, 0xb4}
+DEFINE_GUID!{GUID_BATTERY_SUBGROUP,
+ 0xe73a048d, 0xbf27, 0x4f12, 0x97, 0x31, 0x8b, 0x20, 0x76, 0xe8, 0x89, 0x1f}
+DEFINE_GUID!{GUID_BATTERY_DISCHARGE_ACTION_0,
+ 0x637ea02f, 0xbbcb, 0x4015, 0x8e, 0x2c, 0xa1, 0xc7, 0xb9, 0xc0, 0xb5, 0x46}
+DEFINE_GUID!{GUID_BATTERY_DISCHARGE_LEVEL_0,
+ 0x9a66d8d7, 0x4ff7, 0x4ef9, 0xb5, 0xa2, 0x5a, 0x32, 0x6c, 0xa2, 0xa4, 0x69}
+DEFINE_GUID!{GUID_BATTERY_DISCHARGE_FLAGS_0,
+ 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f}
+DEFINE_GUID!{GUID_BATTERY_DISCHARGE_ACTION_1,
+ 0xd8742dcb, 0x3e6a, 0x4b3c, 0xb3, 0xfe, 0x37, 0x46, 0x23, 0xcd, 0xcf, 0x06}
+DEFINE_GUID!{GUID_BATTERY_DISCHARGE_LEVEL_1,
+ 0x8183ba9a, 0xe910, 0x48da, 0x87, 0x69, 0x14, 0xae, 0x6d, 0xc1, 0x17, 0x0a}
+DEFINE_GUID!{GUID_BATTERY_DISCHARGE_FLAGS_1,
+ 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58}
+DEFINE_GUID!{GUID_BATTERY_DISCHARGE_ACTION_2,
+ 0x421cba38, 0x1a8e, 0x4881, 0xac, 0x89, 0xe3, 0x3a, 0x8b, 0x04, 0xec, 0xe4}
+DEFINE_GUID!{GUID_BATTERY_DISCHARGE_LEVEL_2,
+ 0x07a07ca2, 0xadaf, 0x40d7, 0xb0, 0x77, 0x53, 0x3a, 0xad, 0xed, 0x1b, 0xfa}
+DEFINE_GUID!{GUID_BATTERY_DISCHARGE_FLAGS_2,
+ 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82}
+DEFINE_GUID!{GUID_BATTERY_DISCHARGE_ACTION_3,
+ 0x80472613, 0x9780, 0x455e, 0xb3, 0x08, 0x72, 0xd3, 0x00, 0x3c, 0xf2, 0xf8}
+DEFINE_GUID!{GUID_BATTERY_DISCHARGE_LEVEL_3,
+ 0x58afd5a6, 0xc2dd, 0x47d2, 0x9f, 0xbf, 0xef, 0x70, 0xcc, 0x5c, 0x59, 0x65}
+DEFINE_GUID!{GUID_BATTERY_DISCHARGE_FLAGS_3,
+ 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3}
+DEFINE_GUID!{GUID_PROCESSOR_SETTINGS_SUBGROUP,
+ 0x54533251, 0x82be, 0x4824, 0x96, 0xc1, 0x47, 0xb6, 0x0b, 0x74, 0x0d, 0x00}
+DEFINE_GUID!{GUID_PROCESSOR_THROTTLE_POLICY,
+ 0x57027304, 0x4af6, 0x4104, 0x92, 0x60, 0xe3, 0xd9, 0x52, 0x48, 0xfc, 0x36}
+pub const PERFSTATE_POLICY_CHANGE_IDEAL: DWORD = 0;
+pub const PERFSTATE_POLICY_CHANGE_SINGLE: DWORD = 1;
+pub const PERFSTATE_POLICY_CHANGE_ROCKET: DWORD = 2;
+pub const PERFSTATE_POLICY_CHANGE_IDEAL_AGGRESSIVE: DWORD = 3;
+pub const PERFSTATE_POLICY_CHANGE_DECREASE_MAX: DWORD = PERFSTATE_POLICY_CHANGE_ROCKET;
+pub const PERFSTATE_POLICY_CHANGE_INCREASE_MAX: DWORD = PERFSTATE_POLICY_CHANGE_IDEAL_AGGRESSIVE;
+DEFINE_GUID!{GUID_PROCESSOR_THROTTLE_MAXIMUM,
+ 0xbc5038f7, 0x23e0, 0x4960, 0x96, 0xda, 0x33, 0xab, 0xaf, 0x59, 0x35, 0xec}
+DEFINE_GUID!{GUID_PROCESSOR_THROTTLE_MAXIMUM_1,
+ 0xbc5038f7, 0x23e0, 0x4960, 0x96, 0xda, 0x33, 0xab, 0xaf, 0x59, 0x35, 0xed}
+DEFINE_GUID!{GUID_PROCESSOR_THROTTLE_MINIMUM,
+ 0x893dee8e, 0x2bef, 0x41e0, 0x89, 0xc6, 0xb5, 0x5d, 0x09, 0x29, 0x96, 0x4c}
+DEFINE_GUID!{GUID_PROCESSOR_THROTTLE_MINIMUM_1,
+ 0x893dee8e, 0x2bef, 0x41e0, 0x89, 0xc6, 0xb5, 0x5d, 0x09, 0x29, 0x96, 0x4d}
+DEFINE_GUID!{GUID_PROCESSOR_FREQUENCY_LIMIT,
+ 0x75b0ae3f, 0xbce0, 0x45a7, 0x8c, 0x89, 0xc9, 0x61, 0x1c, 0x25, 0xe1, 0x00}
+DEFINE_GUID!{GUID_PROCESSOR_FREQUENCY_LIMIT_1,
+ 0x75b0ae3f, 0xbce0, 0x45a7, 0x8c, 0x89, 0xc9, 0x61, 0x1c, 0x25, 0xe1, 0x01}
+DEFINE_GUID!{GUID_PROCESSOR_ALLOW_THROTTLING,
+ 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb}
+pub const PROCESSOR_THROTTLE_DISABLED: DWORD = 0;
+pub const PROCESSOR_THROTTLE_ENABLED: DWORD = 1;
+pub const PROCESSOR_THROTTLE_AUTOMATIC: DWORD = 2;
+DEFINE_GUID!{GUID_PROCESSOR_IDLESTATE_POLICY,
+ 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c}
+DEFINE_GUID!{GUID_PROCESSOR_PERFSTATE_POLICY,
+ 0xbbdc3814, 0x18e9, 0x4463, 0x8a, 0x55, 0xd1, 0x97, 0x32, 0x7c, 0x45, 0xc0}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_INCREASE_THRESHOLD,
+ 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_INCREASE_THRESHOLD_1,
+ 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5e}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_DECREASE_THRESHOLD,
+ 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_DECREASE_THRESHOLD_1,
+ 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa7}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_INCREASE_POLICY,
+ 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_INCREASE_POLICY_1,
+ 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x19}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_DECREASE_POLICY,
+ 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_DECREASE_POLICY_1,
+ 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc7}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_INCREASE_TIME,
+ 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_INCREASE_TIME_1,
+ 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xab}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_DECREASE_TIME,
+ 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_DECREASE_TIME_1,
+ 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc9}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_TIME_CHECK,
+ 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_BOOST_POLICY,
+ 0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59}
+pub const PROCESSOR_PERF_BOOST_POLICY_DISABLED: DWORD = 0;
+pub const PROCESSOR_PERF_BOOST_POLICY_MAX: DWORD = 100;
+DEFINE_GUID!{GUID_PROCESSOR_PERF_BOOST_MODE,
+ 0xbe337238, 0xd82, 0x4146, 0xa9, 0x60, 0x4f, 0x37, 0x49, 0xd4, 0x70, 0xc7}
+pub const PROCESSOR_PERF_BOOST_MODE_DISABLED: DWORD = 0;
+pub const PROCESSOR_PERF_BOOST_MODE_ENABLED: DWORD = 1;
+pub const PROCESSOR_PERF_BOOST_MODE_AGGRESSIVE: DWORD = 2;
+pub const PROCESSOR_PERF_BOOST_MODE_EFFICIENT_ENABLED: DWORD = 3;
+pub const PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE: DWORD = 4;
+pub const PROCESSOR_PERF_BOOST_MODE_AGGRESSIVE_AT_GUARANTEED: DWORD = 5;
+pub const PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE_AT_GUARANTEED: DWORD = 6;
+pub const PROCESSOR_PERF_BOOST_MODE_MAX: DWORD
+ = PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE_AT_GUARANTEED;
+DEFINE_GUID!{GUID_PROCESSOR_PERF_AUTONOMOUS_MODE,
+ 0x8baa4a8a, 0x14c6, 0x4451, 0x8e, 0x8b, 0x14, 0xbd, 0xbd, 0x19, 0x75, 0x37}
+pub const PROCESSOR_PERF_AUTONOMOUS_MODE_DISABLED: DWORD = 0;
+pub const PROCESSOR_PERF_AUTONOMOUS_MODE_ENABLED: DWORD = 1;
+DEFINE_GUID!{GUID_PROCESSOR_PERF_ENERGY_PERFORMANCE_PREFERENCE,
+ 0x36687f9e, 0xe3a5, 0x4dbf, 0xb1, 0xdc, 0x15, 0xeb, 0x38, 0x1c, 0x68, 0x63}
+pub const PROCESSOR_PERF_PERFORMANCE_PREFERENCE: DWORD = 0xff;
+pub const PROCESSOR_PERF_ENERGY_PREFERENCE: DWORD = 0;
+DEFINE_GUID!{GUID_PROCESSOR_PERF_AUTONOMOUS_ACTIVITY_WINDOW,
+ 0xcfeda3d0, 0x7697, 0x4566, 0xa9, 0x22, 0xa9, 0x8, 0x6c, 0xd4, 0x9d, 0xfa}
+pub const PROCESSOR_PERF_MINIMUM_ACTIVITY_WINDOW: DWORD = 0;
+pub const PROCESSOR_PERF_MAXIMUM_ACTIVITY_WINDOW: DWORD = 1270000000;
+DEFINE_GUID!{GUID_PROCESSOR_DUTY_CYCLING,
+ 0x4e4450b3, 0x6179, 0x4e91, 0xb8, 0xf1, 0x5b, 0xb9, 0x93, 0x8f, 0x81, 0xa1}
+pub const PROCESSOR_DUTY_CYCLING_DISABLED: DWORD = 0;
+pub const PROCESSOR_DUTY_CYCLING_ENABLED: DWORD = 1;
+DEFINE_GUID!{GUID_PROCESSOR_IDLE_ALLOW_SCALING,
+ 0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6}
+DEFINE_GUID!{GUID_PROCESSOR_IDLE_DISABLE,
+ 0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad}
+DEFINE_GUID!{GUID_PROCESSOR_IDLE_STATE_MAXIMUM,
+ 0x9943e905, 0x9a30, 0x4ec1, 0x9b, 0x99, 0x44, 0xdd, 0x3b, 0x76, 0xf7, 0xa2}
+DEFINE_GUID!{GUID_PROCESSOR_IDLE_TIME_CHECK,
+ 0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b}
+DEFINE_GUID!{GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD,
+ 0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19}
+DEFINE_GUID!{GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD,
+ 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c}
+DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD,
+ 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1}
+DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD,
+ 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa}
+DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY,
+ 0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6}
+pub const CORE_PARKING_POLICY_CHANGE_IDEAL: DWORD = 0;
+pub const CORE_PARKING_POLICY_CHANGE_SINGLE: DWORD = 1;
+pub const CORE_PARKING_POLICY_CHANGE_ROCKET: DWORD = 2;
+pub const CORE_PARKING_POLICY_CHANGE_MULTISTEP: DWORD = 3;
+pub const CORE_PARKING_POLICY_CHANGE_MAX: DWORD = CORE_PARKING_POLICY_CHANGE_MULTISTEP;
+DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY,
+ 0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b}
+DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_MAX_CORES,
+ 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28}
+DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_MAX_CORES_1,
+ 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x29}
+DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_MIN_CORES,
+ 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83}
+DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_MIN_CORES_1,
+ 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x84}
+DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME,
+ 0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32}
+DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME,
+ 0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82}
+DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR,
+ 0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82}
+DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD,
+ 0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9}
+DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING,
+ 0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20}
+DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR,
+ 0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d}
+DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD,
+ 0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29}
+DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING,
+ 0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb}
+DEFINE_GUID!{GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD,
+ 0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1}
+DEFINE_GUID!{GUID_PROCESSOR_PARKING_CORE_OVERRIDE,
+ 0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f}
+DEFINE_GUID!{GUID_PROCESSOR_PARKING_PERF_STATE,
+ 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b}
+DEFINE_GUID!{GUID_PROCESSOR_PARKING_PERF_STATE_1,
+ 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2c}
+DEFINE_GUID!{GUID_PROCESSOR_PARKING_CONCURRENCY_THRESHOLD,
+ 0x2430ab6f, 0xa520, 0x44a2, 0x96, 0x01, 0xf7, 0xf2, 0x3b, 0x51, 0x34, 0xb1}
+DEFINE_GUID!{GUID_PROCESSOR_PARKING_HEADROOM_THRESHOLD,
+ 0xf735a673, 0x2066, 0x4f80, 0xa0, 0xc5, 0xdd, 0xee, 0x0c, 0xf1, 0xbf, 0x5d}
+DEFINE_GUID!{GUID_PROCESSOR_PARKING_DISTRIBUTION_THRESHOLD,
+ 0x4bdaf4e9, 0xd103, 0x46d7, 0xa5, 0xf0, 0x62, 0x80, 0x12, 0x16, 0x16, 0xef}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_HISTORY,
+ 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_HISTORY_1,
+ 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x60}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_INCREASE_HISTORY,
+ 0x99b3ef01, 0x752f, 0x46a1, 0x80, 0xfb, 0x77, 0x30, 0x1, 0x1f, 0x23, 0x54}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_DECREASE_HISTORY,
+ 0x300f6f8, 0xabd6, 0x45a9, 0xb7, 0x4f, 0x49, 0x8, 0x69, 0x1a, 0x40, 0xb5}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_CORE_PARKING_HISTORY,
+ 0x77d7f282, 0x8f1a, 0x42cd, 0x85, 0x37, 0x45, 0x45, 0xa, 0x83, 0x9b, 0xe8}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_LATENCY_HINT,
+ 0x0822df31, 0x9c83, 0x441c, 0xa0, 0x79, 0x0d, 0xe4, 0xcf, 0x00, 0x9c, 0x7b}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_LATENCY_HINT_PERF,
+ 0x619b7505, 0x3b, 0x4e82, 0xb7, 0xa6, 0x4d, 0xd2, 0x9c, 0x30, 0x9, 0x71}
+DEFINE_GUID!{GUID_PROCESSOR_PERF_LATENCY_HINT_PERF_1,
+ 0x619b7505, 0x3b, 0x4e82, 0xb7, 0xa6, 0x4d, 0xd2, 0x9c, 0x30, 0x9, 0x72}
+DEFINE_GUID!{GUID_PROCESSOR_LATENCY_HINT_MIN_UNPARK,
+ 0x616cdaa5, 0x695e, 0x4545, 0x97, 0xad, 0x97, 0xdc, 0x2d, 0x1b, 0xdd, 0x88}
+DEFINE_GUID!{GUID_PROCESSOR_LATENCY_HINT_MIN_UNPARK_1,
+ 0x616cdaa5, 0x695e, 0x4545, 0x97, 0xad, 0x97, 0xdc, 0x2d, 0x1b, 0xdd, 0x89}
+DEFINE_GUID!{GUID_PROCESSOR_DISTRIBUTE_UTILITY,
+ 0xe0007330, 0xf589, 0x42ed, 0xa4, 0x01, 0x5d, 0xdb, 0x10, 0xe7, 0x85, 0xd3}
+DEFINE_GUID!{GUID_PROCESSOR_HETEROGENEOUS_POLICY,
+ 0x7f2f5cfa, 0xf10c, 0x4823, 0xb5, 0xe1, 0xe9, 0x3a, 0xe8, 0x5f, 0x46, 0xb5}
+DEFINE_GUID!{GUID_PROCESSOR_HETERO_DECREASE_TIME,
+ 0x7f2492b6, 0x60b1, 0x45e5, 0xae, 0x55, 0x77, 0x3f, 0x8c, 0xd5, 0xca, 0xec}
+DEFINE_GUID!{GUID_PROCESSOR_HETERO_INCREASE_TIME,
+ 0x4009efa7, 0xe72d, 0x4cba, 0x9e, 0xdf, 0x91, 0x08, 0x4e, 0xa8, 0xcb, 0xc3}
+DEFINE_GUID!{GUID_PROCESSOR_HETERO_DECREASE_THRESHOLD,
+ 0xf8861c27, 0x95e7, 0x475c, 0x86, 0x5b, 0x13, 0xc0, 0xcb, 0x3f, 0x9d, 0x6b}
+DEFINE_GUID!{GUID_PROCESSOR_HETERO_INCREASE_THRESHOLD,
+ 0xb000397d, 0x9b0b, 0x483d, 0x98, 0xc9, 0x69, 0x2a, 0x60, 0x60, 0xcf, 0xbf}
+DEFINE_GUID!{GUID_PROCESSOR_CLASS0_FLOOR_PERF,
+ 0xfddc842b, 0x8364, 0x4edc, 0x94, 0xcf, 0xc1, 0x7f, 0x60, 0xde, 0x1c, 0x80}
+DEFINE_GUID!{GUID_PROCESSOR_CLASS1_INITIAL_PERF,
+ 0x1facfc65, 0xa930, 0x4bc5, 0x9f, 0x38, 0x50, 0x4e, 0xc0, 0x97, 0xbb, 0xc0}
+DEFINE_GUID!{GUID_SYSTEM_COOLING_POLICY,
+ 0x94d3a615, 0xa899, 0x4ac5, 0xae, 0x2b, 0xe4, 0xd8, 0xf6, 0x34, 0x36, 0x7f}
+DEFINE_GUID!{GUID_LOCK_CONSOLE_ON_WAKE,
+ 0x0e796bdb, 0x100d, 0x47d6, 0xa2, 0xd5, 0xf7, 0xd2, 0xda, 0xa5, 0x1f, 0x51}
+DEFINE_GUID!{GUID_DEVICE_IDLE_POLICY,
+ 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19}
+pub const POWER_DEVICE_IDLE_POLICY_PERFORMANCE: DWORD = 0;
+pub const POWER_DEVICE_IDLE_POLICY_CONSERVATIVE: DWORD = 1;
+DEFINE_GUID!{GUID_CONNECTIVITY_IN_STANDBY,
+ 0xf15576e8, 0x98b7, 0x4186, 0xb9, 0x44, 0xea, 0xfa, 0x66, 0x44, 0x02, 0xd9}
+pub const POWER_CONNECTIVITY_IN_STANDBY_DISABLED: DWORD = 0;
+pub const POWER_CONNECTIVITY_IN_STANDBY_ENABLED: DWORD = 1;
+pub const POWER_CONNECTIVITY_IN_STANDBY_DISABLED_LID_CLOSE: DWORD = 2;
+DEFINE_GUID!{GUID_DISCONNECTED_STANDBY_MODE,
+ 0x68afb2d9, 0xee95, 0x47a8, 0x8f, 0x50, 0x41, 0x15, 0x08, 0x80, 0x73, 0xb1}
+pub const POWER_DISCONNECTED_STANDBY_MODE_NORMAL: DWORD = 0;
+pub const POWER_DISCONNECTED_STANDBY_MODE_AGGRESSIVE: DWORD = 1;
+DEFINE_GUID!{GUID_ACDC_POWER_SOURCE,
+ 0x5d3e9a59, 0xe9d5, 0x4b00, 0xa6, 0xbd, 0xff, 0x34, 0xff, 0x51, 0x65, 0x48}
+DEFINE_GUID!{GUID_LIDSWITCH_STATE_CHANGE,
+ 0xba3e0f4d, 0xb817, 0x4094, 0xa2, 0xd1, 0xd5, 0x63, 0x79, 0xe6, 0xa0, 0xf3}
+DEFINE_GUID!{GUID_BATTERY_PERCENTAGE_REMAINING,
+ 0xa7ad8041, 0xb45a, 0x4cae, 0x87, 0xa3, 0xee, 0xcb, 0xb4, 0x68, 0xa9, 0xe1}
+DEFINE_GUID!{GUID_BATTERY_COUNT,
+ 0x7d263f15, 0xfca4, 0x49e5, 0x85, 0x4b, 0xa9, 0xf2, 0xbf, 0xbd, 0x5c, 0x24}
+DEFINE_GUID!{GUID_GLOBAL_USER_PRESENCE,
+ 0x786e8a1d, 0xb427, 0x4344, 0x92, 0x7, 0x9, 0xe7, 0xb, 0xdc, 0xbe, 0xa9}
+DEFINE_GUID!{GUID_SESSION_DISPLAY_STATUS,
+ 0x2b84c20e, 0xad23, 0x4ddf, 0x93, 0xdb, 0x5, 0xff, 0xbd, 0x7e, 0xfc, 0xa5}
+DEFINE_GUID!{GUID_SESSION_USER_PRESENCE,
+ 0x3c0f4548, 0xc03f, 0x4c4d, 0xb9, 0xf2, 0x23, 0x7e, 0xde, 0x68, 0x63, 0x76}
+DEFINE_GUID!{GUID_IDLE_BACKGROUND_TASK,
+ 0x515c31d8, 0xf734, 0x163d, 0xa0, 0xfd, 0x11, 0xa0, 0x8c, 0x91, 0xe8, 0xf1}
+DEFINE_GUID!{GUID_BACKGROUND_TASK_NOTIFICATION,
+ 0xcf23f240, 0x2a54, 0x48d8, 0xb1, 0x14, 0xde, 0x15, 0x18, 0xff, 0x05, 0x2e}
+DEFINE_GUID!{GUID_APPLAUNCH_BUTTON,
+ 0x1a689231, 0x7399, 0x4e9a, 0x8f, 0x99, 0xb7, 0x1f, 0x99, 0x9d, 0xb3, 0xfa}
+DEFINE_GUID!{GUID_PCIEXPRESS_SETTINGS_SUBGROUP,
+ 0x501a4d13, 0x42af,0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20}
+DEFINE_GUID!{GUID_PCIEXPRESS_ASPM_POLICY,
+ 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5}
+DEFINE_GUID!{GUID_ENABLE_SWITCH_FORCED_SHUTDOWN,
+ 0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6}
+DEFINE_GUID!{GUID_INTSTEER_SUBGROUP,
+ 0x48672f38, 0x7a9a, 0x4bb2, 0x8b, 0xf8, 0x3d, 0x85, 0xbe, 0x19, 0xde, 0x4e}
+DEFINE_GUID!{GUID_INTSTEER_MODE,
+ 0x2bfc24f9, 0x5ea2, 0x4801, 0x82, 0x13, 0x3d, 0xba, 0xe0, 0x1a, 0xa3, 0x9d}
+DEFINE_GUID!{GUID_INTSTEER_LOAD_PER_PROC_TRIGGER,
+ 0x73cde64d, 0xd720, 0x4bb2, 0xa8, 0x60, 0xc7, 0x55, 0xaf, 0xe7, 0x7e, 0xf2}
+DEFINE_GUID!{GUID_INTSTEER_TIME_UNPARK_TRIGGER,
+ 0xd6ba4903, 0x386f, 0x4c2c, 0x8a, 0xdb, 0x5c, 0x21, 0xb3, 0x32, 0x8d, 0x25}
+ENUM!{enum SYSTEM_POWER_STATE {
+ PowerSystemUnspecified = 0,
+ PowerSystemWorking = 1,
+ PowerSystemSleeping1 = 2,
+ PowerSystemSleeping2 = 3,
+ PowerSystemSleeping3 = 4,
+ PowerSystemHibernate = 5,
+ PowerSystemShutdown = 6,
+ PowerSystemMaximum = 7,
+}}
+pub type PSYSTEM_POWER_STATE = *mut SYSTEM_POWER_STATE;
+pub const POWER_SYSTEM_MAXIMUM: usize = 7;
+ENUM!{enum POWER_ACTION {
+ PowerActionNone = 0,
+ PowerActionReserved,
+ PowerActionSleep,
+ PowerActionHibernate,
+ PowerActionShutdown,
+ PowerActionShutdownReset,
+ PowerActionShutdownOff,
+ PowerActionWarmEject,
+ PowerActionDisplayOff,
+}}
+pub type PPOWER_ACTION = *mut POWER_ACTION;
+ENUM!{enum DEVICE_POWER_STATE {
+ PowerDeviceUnspecified = 0,
+ PowerDeviceD0,
+ PowerDeviceD1,
+ PowerDeviceD2,
+ PowerDeviceD3,
+ PowerDeviceMaximum,
+}}
+pub type PDEVICE_POWER_STATE = *mut DEVICE_POWER_STATE;
+ENUM!{enum MONITOR_DISPLAY_STATE {
+ PowerMonitorOff = 0,
+ PowerMonitorOn,
+ PowerMonitorDim,
+}}
+pub type PMONITOR_DISPLAY_STATE = *mut MONITOR_DISPLAY_STATE;
+ENUM!{enum USER_ACTIVITY_PRESENCE {
+ PowerUserPresent = 0,
+ PowerUserNotPresent,
+ PowerUserInactive,
+ PowerUserMaximum,
+ PowerUserInvalid = PowerUserMaximum,
+}}
+pub type PUSER_ACTIVITY_PRESENCE = *mut USER_ACTIVITY_PRESENCE;
+pub const ES_SYSTEM_REQUIRED: DWORD = 0x00000001;
+pub const ES_DISPLAY_REQUIRED: DWORD = 0x00000002;
+pub const ES_USER_PRESENT: DWORD = 0x00000004;
+pub const ES_AWAYMODE_REQUIRED: DWORD = 0x00000040;
+pub const ES_CONTINUOUS: DWORD = 0x80000000;
+pub type EXECUTION_STATE = DWORD;
+pub type PEXECUTION_STATE = *mut DWORD;
+ENUM!{enum LATENCY_TIME {
+ LT_DONT_CARE,
+ LT_LOWEST_LATENCY,
+}}
+pub const DIAGNOSTIC_REASON_VERSION: ULONG = 0;
+pub const DIAGNOSTIC_REASON_SIMPLE_STRING: ULONG = 0x00000001;
+pub const DIAGNOSTIC_REASON_DETAILED_STRING: ULONG = 0x00000002;
+pub const DIAGNOSTIC_REASON_NOT_SPECIFIED: ULONG = 0x80000000;
+pub const DIAGNOSTIC_REASON_INVALID_FLAGS: ULONG = !0x80000007;
+pub const POWER_REQUEST_CONTEXT_VERSION: ULONG = DIAGNOSTIC_REASON_VERSION;
+pub const POWER_REQUEST_CONTEXT_SIMPLE_STRING: ULONG = DIAGNOSTIC_REASON_SIMPLE_STRING;
+pub const POWER_REQUEST_CONTEXT_DETAILED_STRING: ULONG = DIAGNOSTIC_REASON_DETAILED_STRING;
+ENUM!{enum POWER_REQUEST_TYPE {
+ PowerRequestDisplayRequired,
+ PowerRequestSystemRequired,
+ PowerRequestAwayModeRequired,
+ PowerRequestExecutionRequired,
+}}
+pub type PPOWER_REQUEST_TYPE = *mut POWER_REQUEST_TYPE;
+pub const PDCAP_D0_SUPPORTED: DWORD = 0x00000001;
+pub const PDCAP_D1_SUPPORTED: DWORD = 0x00000002;
+pub const PDCAP_D2_SUPPORTED: DWORD = 0x00000004;
+pub const PDCAP_D3_SUPPORTED: DWORD = 0x00000008;
+pub const PDCAP_WAKE_FROM_D0_SUPPORTED: DWORD = 0x00000010;
+pub const PDCAP_WAKE_FROM_D1_SUPPORTED: DWORD = 0x00000020;
+pub const PDCAP_WAKE_FROM_D2_SUPPORTED: DWORD = 0x00000040;
+pub const PDCAP_WAKE_FROM_D3_SUPPORTED: DWORD = 0x00000080;
+pub const PDCAP_WARM_EJECT_SUPPORTED: DWORD = 0x00000100;
+STRUCT!{struct CM_POWER_DATA {
+ PD_Size: DWORD,
+ PD_MostRecentPowerState: DEVICE_POWER_STATE,
+ PD_Capabilities: DWORD,
+ PD_D1Latency: DWORD,
+ PD_D2Latency: DWORD,
+ PD_D3Latency: DWORD,
+ PD_PowerStateMapping: [DEVICE_POWER_STATE; POWER_SYSTEM_MAXIMUM],
+ PD_DeepestSystemWake: SYSTEM_POWER_STATE,
+}}
+pub type PCM_POWER_DATA = *mut CM_POWER_DATA;
+ENUM!{enum POWER_INFORMATION_LEVEL {
+ SystemPowerPolicyAc,
+ SystemPowerPolicyDc,
+ VerifySystemPolicyAc,
+ VerifySystemPolicyDc,
+ SystemPowerCapabilities,
+ SystemBatteryState,
+ SystemPowerStateHandler,
+ ProcessorStateHandler,
+ SystemPowerPolicyCurrent,
+ AdministratorPowerPolicy,
+ SystemReserveHiberFile,
+ ProcessorInformation,
+ SystemPowerInformation,
+ ProcessorStateHandler2,
+ LastWakeTime,
+ LastSleepTime,
+ SystemExecutionState,
+ SystemPowerStateNotifyHandler,
+ ProcessorPowerPolicyAc,
+ ProcessorPowerPolicyDc,
+ VerifyProcessorPowerPolicyAc,
+ VerifyProcessorPowerPolicyDc,
+ ProcessorPowerPolicyCurrent,
+ SystemPowerStateLogging,
+ SystemPowerLoggingEntry,
+ SetPowerSettingValue,
+ NotifyUserPowerSetting,
+ PowerInformationLevelUnused0,
+ SystemMonitorHiberBootPowerOff,
+ SystemVideoState,
+ TraceApplicationPowerMessage,
+ TraceApplicationPowerMessageEnd,
+ ProcessorPerfStates,
+ ProcessorIdleStates,
+ ProcessorCap,
+ SystemWakeSource,
+ SystemHiberFileInformation,
+ TraceServicePowerMessage,
+ ProcessorLoad,
+ PowerShutdownNotification,
+ MonitorCapabilities,
+ SessionPowerInit,
+ SessionDisplayState,
+ PowerRequestCreate,
+ PowerRequestAction,
+ GetPowerRequestList,
+ ProcessorInformationEx,
+ NotifyUserModeLegacyPowerEvent,
+ GroupPark,
+ ProcessorIdleDomains,
+ WakeTimerList,
+ SystemHiberFileSize,
+ ProcessorIdleStatesHv,
+ ProcessorPerfStatesHv,
+ ProcessorPerfCapHv,
+ ProcessorSetIdle,
+ LogicalProcessorIdling,
+ UserPresence,
+ PowerSettingNotificationName,
+ GetPowerSettingValue,
+ IdleResiliency,
+ SessionRITState,
+ SessionConnectNotification,
+ SessionPowerCleanup,
+ SessionLockState,
+ SystemHiberbootState,
+ PlatformInformation,
+ PdcInvocation,
+ MonitorInvocation,
+ FirmwareTableInformationRegistered,
+ SetShutdownSelectedTime,
+ SuspendResumeInvocation,
+ PlmPowerRequestCreate,
+ ScreenOff,
+ CsDeviceNotification,
+ PlatformRole,
+ LastResumePerformance,
+ DisplayBurst,
+ ExitLatencySamplingPercentage,
+ RegisterSpmPowerSettings,
+ PlatformIdleStates,
+ ProcessorIdleVeto,
+ PlatformIdleVeto,
+ SystemBatteryStatePrecise,
+ ThermalEvent,
+ PowerRequestActionInternal,
+ BatteryDeviceState,
+ PowerInformationInternal,
+ ThermalStandby,
+ SystemHiberFileType,
+ PhysicalPowerButtonPress,
+ QueryPotentialDripsConstraint,
+ EnergyTrackerCreate,
+ EnergyTrackerQuery,
+ UpdateBlackBoxRecorder,
+ PowerInformationLevelMaximum,
+}}
+ENUM!{enum POWER_USER_PRESENCE_TYPE {
+ UserNotPresent = 0,
+ UserPresent = 1,
+ UserUnknown = 0xff,
+}}
+pub type PPOWER_USER_PRESENCE_TYPE = *mut POWER_USER_PRESENCE_TYPE;
+STRUCT!{struct POWER_USER_PRESENCE {
+ UserPresence: POWER_USER_PRESENCE_TYPE,
+}}
+pub type PPOWER_USER_PRESENCE = *mut POWER_USER_PRESENCE;
+STRUCT!{struct POWER_SESSION_CONNECT {
+ Connected: BOOLEAN,
+ Console: BOOLEAN,
+}}
+pub type PPOWER_SESSION_CONNECT = *mut POWER_SESSION_CONNECT;
+STRUCT!{struct POWER_SESSION_TIMEOUTS {
+ InputTimeout: DWORD,
+ DisplayTimeout: DWORD,
+}}
+pub type PPOWER_SESSION_TIMEOUTS = *mut POWER_SESSION_TIMEOUTS;
+STRUCT!{struct POWER_SESSION_RIT_STATE {
+ Active: BOOLEAN,
+ LastInputTime: DWORD,
+}}
+pub type PPOWER_SESSION_RIT_STATE = *mut POWER_SESSION_RIT_STATE;
+STRUCT!{struct POWER_SESSION_WINLOGON {
+ SessionId: DWORD,
+ Console: BOOLEAN,
+ Locked: BOOLEAN,
+}}
+pub type PPOWER_SESSION_WINLOGON = *mut POWER_SESSION_WINLOGON;
+STRUCT!{struct POWER_IDLE_RESILIENCY {
+ CoalescingTimeout: DWORD,
+ IdleResiliencyPeriod: DWORD,
+}}
+pub type PPOWER_IDLE_RESILIENCY = *mut POWER_IDLE_RESILIENCY;
+ENUM!{enum POWER_MONITOR_REQUEST_REASON {
+ MonitorRequestReasonUnknown,
+ MonitorRequestReasonPowerButton,
+ MonitorRequestReasonRemoteConnection,
+ MonitorRequestReasonScMonitorpower,
+ MonitorRequestReasonUserInput,
+ MonitorRequestReasonAcDcDisplayBurst,
+ MonitorRequestReasonUserDisplayBurst,
+ MonitorRequestReasonPoSetSystemState,
+ MonitorRequestReasonSetThreadExecutionState,
+ MonitorRequestReasonFullWake,
+ MonitorRequestReasonSessionUnlock,
+ MonitorRequestReasonScreenOffRequest,
+ MonitorRequestReasonIdleTimeout,
+ MonitorRequestReasonPolicyChange,
+ MonitorRequestReasonSleepButton,
+ MonitorRequestReasonLid,
+ MonitorRequestReasonBatteryCountChange,
+ MonitorRequestReasonGracePeriod,
+ MonitorRequestReasonPnP,
+ MonitorRequestReasonDP,
+ MonitorRequestReasonSxTransition,
+ MonitorRequestReasonSystemIdle,
+ MonitorRequestReasonNearProximity,
+ MonitorRequestReasonThermalStandby,
+ MonitorRequestReasonResumePdc,
+ MonitorRequestReasonResumeS4,
+ MonitorRequestReasonTerminal,
+ MonitorRequestReasonPdcSignal,
+ MonitorRequestReasonAcDcDisplayBurstSuppressed,
+ MonitorRequestReasonSystemStateEntered,
+ MonitorRequestReasonWinrt,
+ MonitorRequestReasonMax,
+}}
+ENUM!{enum POWER_MONITOR_REQUEST_TYPE {
+ MonitorRequestTypeOff,
+ MonitorRequestTypeOnAndPresent,
+ MonitorRequestTypeToggleOn,
+}}
+STRUCT!{struct POWER_MONITOR_INVOCATION {
+ Console: BOOLEAN,
+ RequestReason: POWER_MONITOR_REQUEST_REASON,
+}}
+pub type PPOWER_MONITOR_INVOCATION = *mut POWER_MONITOR_INVOCATION;
+STRUCT!{struct RESUME_PERFORMANCE {
+ PostTimeMs: DWORD,
+ TotalResumeTimeMs: ULONGLONG,
+ ResumeCompleteTimestamp: ULONGLONG,
+}}
+pub type PRESUME_PERFORMANCE = *mut RESUME_PERFORMANCE;
+ENUM!{enum SYSTEM_POWER_CONDITION {
+ PoAc,
+ PoDc,
+ PoHot,
+ PoConditionMaximum,
+}}
+STRUCT!{struct SET_POWER_SETTING_VALUE {
+ Version: DWORD,
+ Guid: GUID,
+ PowerCondition: SYSTEM_POWER_CONDITION,
+ DataLength: DWORD,
+ Data: [BYTE; ANYSIZE_ARRAY],
+}}
+pub type PSET_POWER_SETTING_VALUE = *mut SET_POWER_SETTING_VALUE;
+STRUCT!{struct NOTIFY_USER_POWER_SETTING {
+ Guid: GUID,
+}}
+pub type PNOTIFY_USER_POWER_SETTING = *mut NOTIFY_USER_POWER_SETTING;
+STRUCT!{struct APPLICATIONLAUNCH_SETTING_VALUE {
+ ActivationTime: LARGE_INTEGER,
+ Flags: DWORD,
+ ButtonInstanceID: DWORD,
+}}
+pub type PAPPLICATIONLAUNCH_SETTING_VALUE = *mut APPLICATIONLAUNCH_SETTING_VALUE;
+ENUM!{enum POWER_PLATFORM_ROLE {
+ PlatformRoleUnspecified = 0,
+ PlatformRoleDesktop,
+ PlatformRoleMobile,
+ PlatformRoleWorkstation,
+ PlatformRoleEnterpriseServer,
+ PlatformRoleSOHOServer,
+ PlatformRoleAppliancePC,
+ PlatformRolePerformanceServer,
+ PlatformRoleSlate,
+ PlatformRoleMaximum,
+}}
+pub type PPOWER_PLATFORM_ROLE = *mut POWER_PLATFORM_ROLE;
+pub const POWER_PLATFORM_ROLE_V1: ULONG = 0x00000001;
+pub const POWER_PLATFORM_ROLE_V1_MAX: POWER_PLATFORM_ROLE = PlatformRolePerformanceServer + 1;
+pub const POWER_PLATFORM_ROLE_V2: ULONG = 0x00000002;
+pub const POWER_PLATFORM_ROLE_V2_MAX: POWER_PLATFORM_ROLE = PlatformRoleSlate + 1;
+pub const POWER_PLATFORM_ROLE_VERSION: ULONG = POWER_PLATFORM_ROLE_V2;
+pub const POWER_PLATFORM_ROLE_VERSION_MAX: POWER_PLATFORM_ROLE = POWER_PLATFORM_ROLE_V2_MAX;
+STRUCT!{struct POWER_PLATFORM_INFORMATION {
+ AoAc: BOOLEAN,
+}}
+pub type PPOWER_PLATFORM_INFORMATION = *mut POWER_PLATFORM_INFORMATION;
+STRUCT!{struct BATTERY_REPORTING_SCALE {
+ Granularity: DWORD,
+ Capacity: DWORD,
+}}
+pub type PBATTERY_REPORTING_SCALE = *mut BATTERY_REPORTING_SCALE;
+STRUCT!{struct PPM_WMI_LEGACY_PERFSTATE {
+ Frequency: DWORD,
+ Flags: DWORD,
+ PercentFrequency: DWORD,
+}}
+pub type PPPM_WMI_LEGACY_PERFSTATE = *mut PPM_WMI_LEGACY_PERFSTATE;
+STRUCT!{struct PPM_WMI_IDLE_STATE {
+ Latency: DWORD,
+ Power: DWORD,
+ TimeCheck: DWORD,
+ PromotePercent: BYTE,
+ DemotePercent: BYTE,
+ StateType: BYTE,
+ Reserved: BYTE,
+ StateFlags: DWORD,
+ Context: DWORD,
+ IdleHandler: DWORD,
+ Reserved1: DWORD,
+}}
+pub type PPPM_WMI_IDLE_STATE = *mut PPM_WMI_IDLE_STATE;
+STRUCT!{struct PPM_WMI_IDLE_STATES {
+ Type: DWORD,
+ Count: DWORD,
+ TargetState: DWORD,
+ OldState: DWORD,
+ TargetProcessors: DWORD64,
+ State: [PPM_WMI_IDLE_STATE; ANYSIZE_ARRAY],
+}}
+pub type PPPM_WMI_IDLE_STATES = *mut PPM_WMI_IDLE_STATES;
+STRUCT!{struct PPM_WMI_IDLE_STATES_EX {
+ Type: DWORD,
+ Count: DWORD,
+ TargetState: DWORD,
+ OldState: DWORD,
+ TargetProcessors: PVOID,
+ State: [PPM_WMI_IDLE_STATE; ANYSIZE_ARRAY],
+}}
+pub type PPPM_WMI_IDLE_STATES_EX = *mut PPM_WMI_IDLE_STATES_EX;
+STRUCT!{struct PPM_WMI_PERF_STATE {
+ Frequency: DWORD,
+ Power: DWORD,
+ PercentFrequency: BYTE,
+ IncreaseLevel: BYTE,
+ DecreaseLevel: BYTE,
+ Type: BYTE,
+ IncreaseTime: DWORD,
+ DecreaseTime: DWORD,
+ Control: DWORD64,
+ Status: DWORD64,
+ HitCount: DWORD,
+ Reserved1: DWORD,
+ Reserved2: DWORD64,
+ Reserved3: DWORD64,
+}}
+pub type PPPM_WMI_PERF_STATE = *mut PPM_WMI_PERF_STATE;
+STRUCT!{struct PPM_WMI_PERF_STATES {
+ Count: DWORD,
+ MaxFrequency: DWORD,
+ CurrentState: DWORD,
+ MaxPerfState: DWORD,
+ MinPerfState: DWORD,
+ LowestPerfState: DWORD,
+ ThermalConstraint: DWORD,
+ BusyAdjThreshold: BYTE,
+ PolicyType: BYTE,
+ Type: BYTE,
+ Reserved: BYTE,
+ TimerInterval: DWORD,
+ TargetProcessors: DWORD64,
+ PStateHandler: DWORD,
+ PStateContext: DWORD,
+ TStateHandler: DWORD,
+ TStateContext: DWORD,
+ FeedbackHandler: DWORD,
+ Reserved1: DWORD,
+ Reserved2: DWORD64,
+ State: [PPM_WMI_PERF_STATE; ANYSIZE_ARRAY],
+}}
+pub type PPPM_WMI_PERF_STATES = *mut PPM_WMI_PERF_STATES;
+STRUCT!{struct PPM_WMI_PERF_STATES_EX {
+ Count: DWORD,
+ MaxFrequency: DWORD,
+ CurrentState: DWORD,
+ MaxPerfState: DWORD,
+ MinPerfState: DWORD,
+ LowestPerfState: DWORD,
+ ThermalConstraint: DWORD,
+ BusyAdjThreshold: BYTE,
+ PolicyType: BYTE,
+ Type: BYTE,
+ Reserved: BYTE,
+ TimerInterval: DWORD,
+ TargetProcessors: PVOID,
+ PStateHandler: DWORD,
+ PStateContext: DWORD,
+ TStateHandler: DWORD,
+ TStateContext: DWORD,
+ FeedbackHandler: DWORD,
+ Reserved1: DWORD,
+ Reserved2: DWORD64,
+ State: [PPM_WMI_PERF_STATE; ANYSIZE_ARRAY],
+}}
+pub type PPPM_WMI_PERF_STATES_EX = *mut PPM_WMI_PERF_STATES_EX;
+pub const PROC_IDLE_BUCKET_COUNT: usize = 6;
+STRUCT!{struct PPM_IDLE_STATE_ACCOUNTING {
+ IdleTransitions: DWORD,
+ FailedTransitions: DWORD,
+ InvalidBucketIndex: DWORD,
+ TotalTime: DWORD64,
+ IdleTimeBuckets: [DWORD; PROC_IDLE_BUCKET_COUNT],
+}}
+pub type PPPM_IDLE_STATE_ACCOUNTING = *mut PPM_IDLE_STATE_ACCOUNTING;
+STRUCT!{struct PPM_IDLE_ACCOUNTING {
+ StateCount: DWORD,
+ TotalTransitions: DWORD,
+ ResetCount: DWORD,
+ StartTime: DWORD64,
+ State: [PPM_IDLE_STATE_ACCOUNTING; ANYSIZE_ARRAY],
+}}
+pub type PPPM_IDLE_ACCOUNTING = *mut PPM_IDLE_ACCOUNTING;
+pub const PROC_IDLE_BUCKET_COUNT_EX: usize = 16;
+STRUCT!{struct PPM_IDLE_STATE_BUCKET_EX {
+ TotalTimeUs: DWORD64,
+ MinTimeUs: DWORD,
+ MaxTimeUs: DWORD,
+ Count: DWORD,
+}}
+pub type PPPM_IDLE_STATE_BUCKET_EX = *mut PPM_IDLE_STATE_BUCKET_EX;
+STRUCT!{struct PPM_IDLE_STATE_ACCOUNTING_EX {
+ TotalTime: DWORD64,
+ IdleTransitions: DWORD,
+ FailedTransitions: DWORD,
+ InvalidBucketIndex: DWORD,
+ MinTimeUs: DWORD,
+ MaxTimeUs: DWORD,
+ CancelledTransitions: DWORD,
+ IdleTimeBuckets: [PPM_IDLE_STATE_BUCKET_EX; PROC_IDLE_BUCKET_COUNT_EX],
+}}
+pub type PPPM_IDLE_STATE_ACCOUNTING_EX = *mut PPM_IDLE_STATE_ACCOUNTING_EX;
+STRUCT!{struct PPM_IDLE_ACCOUNTING_EX {
+ StateCount: DWORD,
+ TotalTransitions: DWORD,
+ ResetCount: DWORD,
+ AbortCount: DWORD,
+ StartTime: DWORD64,
+ State: [PPM_IDLE_STATE_ACCOUNTING_EX; ANYSIZE_ARRAY],
+}}
+pub type PPPM_IDLE_ACCOUNTING_EX = *mut PPM_IDLE_ACCOUNTING_EX;
+pub const ACPI_PPM_SOFTWARE_ALL: DWORD = 0xFC;
+pub const ACPI_PPM_SOFTWARE_ANY: DWORD = 0xFD;
+pub const ACPI_PPM_HARDWARE_ALL: DWORD = 0xFE;
+pub const MS_PPM_SOFTWARE_ALL: DWORD = 0x1;
+pub const PPM_FIRMWARE_ACPI1C2: DWORD = 0x00000001;
+pub const PPM_FIRMWARE_ACPI1C3: DWORD = 0x00000002;
+pub const PPM_FIRMWARE_ACPI1TSTATES: DWORD = 0x00000004;
+pub const PPM_FIRMWARE_CST: DWORD = 0x00000008;
+pub const PPM_FIRMWARE_CSD: DWORD = 0x00000010;
+pub const PPM_FIRMWARE_PCT: DWORD = 0x00000020;
+pub const PPM_FIRMWARE_PSS: DWORD = 0x00000040;
+pub const PPM_FIRMWARE_XPSS: DWORD = 0x00000080;
+pub const PPM_FIRMWARE_PPC: DWORD = 0x00000100;
+pub const PPM_FIRMWARE_PSD: DWORD = 0x00000200;
+pub const PPM_FIRMWARE_PTC: DWORD = 0x00000400;
+pub const PPM_FIRMWARE_TSS: DWORD = 0x00000800;
+pub const PPM_FIRMWARE_TPC: DWORD = 0x00001000;
+pub const PPM_FIRMWARE_TSD: DWORD = 0x00002000;
+pub const PPM_FIRMWARE_PCCH: DWORD = 0x00004000;
+pub const PPM_FIRMWARE_PCCP: DWORD = 0x00008000;
+pub const PPM_FIRMWARE_OSC: DWORD = 0x00010000;
+pub const PPM_FIRMWARE_PDC: DWORD = 0x00020000;
+pub const PPM_FIRMWARE_CPC: DWORD = 0x00040000;
+pub const PPM_FIRMWARE_LPI: DWORD = 0x00080000;
+pub const PPM_PERFORMANCE_IMPLEMENTATION_NONE: DWORD = 0x00000000;
+pub const PPM_PERFORMANCE_IMPLEMENTATION_PSTATES: DWORD = 0x00000001;
+pub const PPM_PERFORMANCE_IMPLEMENTATION_PCCV1: DWORD = 0x00000002;
+pub const PPM_PERFORMANCE_IMPLEMENTATION_CPPC: DWORD = 0x00000003;
+pub const PPM_PERFORMANCE_IMPLEMENTATION_PEP: DWORD = 0x00000004;
+pub const PPM_IDLE_IMPLEMENTATION_NONE: DWORD = 0x00000000;
+pub const PPM_IDLE_IMPLEMENTATION_CSTATES: DWORD = 0x00000001;
+pub const PPM_IDLE_IMPLEMENTATION_PEP: DWORD = 0x00000002;
+pub const PPM_IDLE_IMPLEMENTATION_MICROPEP: DWORD = 0x00000003;
+pub const PPM_IDLE_IMPLEMENTATION_LPISTATES: DWORD = 0x00000004;
+DEFINE_GUID!{PPM_PERFSTATE_CHANGE_GUID,
+ 0xa5b32ddd, 0x7f39, 0x4abc, 0xb8, 0x92, 0x90, 0xe, 0x43, 0xb5, 0x9e, 0xbb}
+DEFINE_GUID!{PPM_PERFSTATE_DOMAIN_CHANGE_GUID,
+ 0x995e6b7f, 0xd653, 0x497a, 0xb9, 0x78, 0x36, 0xa3, 0xc, 0x29, 0xbf, 0x1}
+DEFINE_GUID!{PPM_IDLESTATE_CHANGE_GUID,
+ 0x4838fe4f, 0xf71c, 0x4e51, 0x9e, 0xcc, 0x84, 0x30, 0xa7, 0xac, 0x4c, 0x6c}
+DEFINE_GUID!{PPM_PERFSTATES_DATA_GUID,
+ 0x5708cc20, 0x7d40, 0x4bf4, 0xb4, 0xaa, 0x2b, 0x01, 0x33, 0x8d, 0x01, 0x26}
+DEFINE_GUID!{PPM_IDLESTATES_DATA_GUID,
+ 0xba138e10, 0xe250, 0x4ad7, 0x86, 0x16, 0xcf, 0x1a, 0x7a, 0xd4, 0x10, 0xe7}
+DEFINE_GUID!{PPM_IDLE_ACCOUNTING_GUID,
+ 0xe2a26f78, 0xae07, 0x4ee0, 0xa3, 0x0f, 0xce, 0x54, 0xf5, 0x5a, 0x94, 0xcd}
+DEFINE_GUID!{PPM_IDLE_ACCOUNTING_EX_GUID,
+ 0xd67abd39, 0x81f8, 0x4a5e, 0x81, 0x52, 0x72, 0xe3, 0x1e, 0xc9, 0x12, 0xee}
+DEFINE_GUID!{PPM_THERMALCONSTRAINT_GUID,
+ 0xa852c2c8, 0x1a4c, 0x423b, 0x8c, 0x2c, 0xf3, 0x0d, 0x82, 0x93, 0x1a, 0x88}
+DEFINE_GUID!{PPM_PERFMON_PERFSTATE_GUID,
+ 0x7fd18652, 0xcfe, 0x40d2, 0xb0, 0xa1, 0xb, 0x6, 0x6a, 0x87, 0x75, 0x9e}
+DEFINE_GUID!{PPM_THERMAL_POLICY_CHANGE_GUID,
+ 0x48f377b8, 0x6880, 0x4c7b, 0x8b, 0xdc, 0x38, 0x1, 0x76, 0xc6, 0x65, 0x4d}
+STRUCT!{struct PPM_PERFSTATE_EVENT {
+ State: DWORD,
+ Status: DWORD,
+ Latency: DWORD,
+ Speed: DWORD,
+ Processor: DWORD,
+}}
+pub type PPPM_PERFSTATE_EVENT = *mut PPM_PERFSTATE_EVENT;
+STRUCT!{struct PPM_PERFSTATE_DOMAIN_EVENT {
+ State: DWORD,
+ Latency: DWORD,
+ Speed: DWORD,
+ Processors: DWORD64,
+}}
+pub type PPPM_PERFSTATE_DOMAIN_EVENT = *mut PPM_PERFSTATE_DOMAIN_EVENT;
+STRUCT!{struct PPM_IDLESTATE_EVENT {
+ NewState: DWORD,
+ OldState: DWORD,
+ Processors: DWORD64,
+}}
+pub type PPPM_IDLESTATE_EVENT = *mut PPM_IDLESTATE_EVENT;
+STRUCT!{struct PPM_THERMALCHANGE_EVENT {
+ ThermalConstraint: DWORD,
+ Processors: DWORD64,
+}}
+pub type PPPM_THERMALCHANGE_EVENT = *mut PPM_THERMALCHANGE_EVENT;
+STRUCT!{struct PPM_THERMAL_POLICY_EVENT {
+ Mode: BYTE,
+ Processors: DWORD64,
+}}
+pub type PPPM_THERMAL_POLICY_EVENT = *mut PPM_THERMAL_POLICY_EVENT;
+STRUCT!{struct POWER_ACTION_POLICY {
+ Action: POWER_ACTION,
+ Flags: DWORD,
+ EventCode: DWORD,
+}}
+pub type PPOWER_ACTION_POLICY = *mut POWER_ACTION_POLICY;
+pub const POWER_ACTION_QUERY_ALLOWED: DWORD = 0x00000001;
+pub const POWER_ACTION_UI_ALLOWED: DWORD = 0x00000002;
+pub const POWER_ACTION_OVERRIDE_APPS: DWORD = 0x00000004;
+pub const POWER_ACTION_HIBERBOOT: DWORD = 0x00000008;
+pub const POWER_ACTION_USER_NOTIFY: DWORD = 0x00000010;
+pub const POWER_ACTION_DOZE_TO_HIBERNATE: DWORD = 0x00000020;
+pub const POWER_ACTION_PSEUDO_TRANSITION: DWORD = 0x08000000;
+pub const POWER_ACTION_LIGHTEST_FIRST: DWORD = 0x10000000;
+pub const POWER_ACTION_LOCK_CONSOLE: DWORD = 0x20000000;
+pub const POWER_ACTION_DISABLE_WAKES: DWORD = 0x40000000;
+pub const POWER_ACTION_CRITICAL: DWORD = 0x80000000;
+pub const POWER_LEVEL_USER_NOTIFY_TEXT: DWORD = 0x00000001;
+pub const POWER_LEVEL_USER_NOTIFY_SOUND: DWORD = 0x00000002;
+pub const POWER_LEVEL_USER_NOTIFY_EXEC: DWORD = 0x00000004;
+pub const POWER_USER_NOTIFY_BUTTON: DWORD = 0x00000008;
+pub const POWER_USER_NOTIFY_SHUTDOWN: DWORD = 0x00000010;
+pub const POWER_USER_NOTIFY_FORCED_SHUTDOWN: DWORD = 0x00000020;
+pub const POWER_FORCE_TRIGGER_RESET: DWORD = 0x80000000;
+pub const BATTERY_DISCHARGE_FLAGS_EVENTCODE_MASK: DWORD = 0x00000007;
+pub const BATTERY_DISCHARGE_FLAGS_ENABLE: DWORD = 0x80000000;
+STRUCT!{struct SYSTEM_POWER_LEVEL {
+ Enable: BOOLEAN,
+ Spare: [BYTE; 3],
+ BatteryLevel: DWORD,
+ PowerPolicy: POWER_ACTION_POLICY,
+ MinSystemState: SYSTEM_POWER_STATE,
+}}
+pub type PSYSTEM_POWER_LEVEL = *mut SYSTEM_POWER_LEVEL;
+pub const NUM_DISCHARGE_POLICIES: usize = 4;
+pub const DISCHARGE_POLICY_CRITICAL: DWORD = 0;
+pub const DISCHARGE_POLICY_LOW: DWORD = 1;
+STRUCT!{struct SYSTEM_POWER_POLICY {
+ Revision: DWORD,
+ PowerButton: POWER_ACTION_POLICY,
+ SleepButton: POWER_ACTION_POLICY,
+ LidClose: POWER_ACTION_POLICY,
+ LidOpenWake: SYSTEM_POWER_STATE,
+ Reserved: DWORD,
+ Idle: POWER_ACTION_POLICY,
+ IdleTimeout: DWORD,
+ IdleSensitivity: BYTE,
+ DynamicThrottle: BYTE,
+ Spare2: [BYTE; 2],
+ MinSleep: SYSTEM_POWER_STATE,
+ MaxSleep: SYSTEM_POWER_STATE,
+ ReducedLatencySleep: SYSTEM_POWER_STATE,
+ WinLogonFlags: DWORD,
+ Spare3: DWORD,
+ DozeS4Timeout: DWORD,
+ BroadcastCapacityResolution: DWORD,
+ DischargePolicy: [SYSTEM_POWER_LEVEL; NUM_DISCHARGE_POLICIES],
+ VideoTimeout: DWORD,
+ VideoDimDisplay: BOOLEAN,
+ VideoReserved: [DWORD; 3],
+ SpindownTimeout: DWORD,
+ OptimizeForPower: BOOLEAN,
+ FanThrottleTolerance: BYTE,
+ ForcedThrottle: BYTE,
+ MinThrottle: BYTE,
+ OverThrottled: POWER_ACTION_POLICY,
+}}
+pub type PSYSTEM_POWER_POLICY = *mut SYSTEM_POWER_POLICY;
+pub const PROCESSOR_IDLESTATE_POLICY_COUNT: usize = 0x3;
+STRUCT!{struct PROCESSOR_IDLESTATE_INFO {
+ TimeCheck: DWORD,
+ DemotePercent: BYTE,
+ PromotePercent: BYTE,
+ Spare: [BYTE; 2],
+}}
+pub type PPROCESSOR_IDLESTATE_INFO = *mut PROCESSOR_IDLESTATE_INFO;
+STRUCT!{struct PROCESSOR_IDLESTATE_POLICY_Flags {
+ AsWORD: WORD,
+}}
+BITFIELD!{PROCESSOR_IDLESTATE_POLICY_Flags AsWORD: WORD [
+ AllowScaling set_AllowScaling[0..1],
+ Disabled set_Disabled[1..2],
+ Reserved set_Reserved[2..16],
+]}
+STRUCT!{struct PROCESSOR_IDLESTATE_POLICY {
+ Revision: WORD,
+ Flags: PROCESSOR_IDLESTATE_POLICY_Flags,
+ PolicyCount: DWORD,
+ Policy: [PROCESSOR_IDLESTATE_INFO; PROCESSOR_IDLESTATE_POLICY_COUNT],
+}}
+pub type PPROCESSOR_IDLESTATE_POLICY = *mut PROCESSOR_IDLESTATE_POLICY;
+pub const PO_THROTTLE_NONE: DWORD = 0;
+pub const PO_THROTTLE_CONSTANT: DWORD = 1;
+pub const PO_THROTTLE_DEGRADE: DWORD = 2;
+pub const PO_THROTTLE_ADAPTIVE: DWORD = 3;
+pub const PO_THROTTLE_MAXIMUM: DWORD = 4;
+STRUCT!{struct PROCESSOR_POWER_POLICY_INFO {
+ TimeCheck: DWORD,
+ DemoteLimit: DWORD,
+ PromoteLimit: DWORD,
+ DemotePercent: BYTE,
+ PromotePercent: BYTE,
+ Spare: [BYTE; 2],
+ Reserved: DWORD,
+}}
+BITFIELD!{PROCESSOR_POWER_POLICY_INFO Reserved: DWORD [
+ AllowDemotion set_AllowDemotion[0..1],
+ AllowPromotion set_AllowPromotion[1..2],
+ Reserved set_Reserved[2..32],
+]}
+pub type PPROCESSOR_POWER_POLICY_INFO = *mut PROCESSOR_POWER_POLICY_INFO;
+STRUCT!{struct PROCESSOR_POWER_POLICY {
+ Revision: DWORD,
+ DynamicThrottle: BYTE,
+ Spare: [BYTE; 3],
+ BitFields: DWORD,
+ PolicyCount: DWORD,
+ Policy: [PROCESSOR_POWER_POLICY_INFO; 3],
+}}
+BITFIELD!{PROCESSOR_POWER_POLICY BitFields: DWORD [
+ DisableCStates set_DisableCStates[0..1],
+ Reserved set_Reserved[1..32],
+]}
+pub type PPROCESSOR_POWER_POLICY = *mut PROCESSOR_POWER_POLICY;
+STRUCT!{struct PROCESSOR_PERFSTATE_POLICY_u_Flags {
+ AsBYTE: BYTE,
+}}
+BITFIELD!{PROCESSOR_PERFSTATE_POLICY_u_Flags AsBYTE: BYTE [
+ NoDomainAccounting set_NoDomainAccounting[0..1],
+ IncreasePolicy set_IncreasePolicy[1..3],
+ DecreasePolicy set_DecreasePolicy[3..5],
+ Reserved set_Reserved[5..8],
+]}
+UNION!{union PROCESSOR_PERFSTATE_POLICY_u {
+ [u8; 1],
+ Spare Spare_mut: BYTE,
+ Flags Flags_mut: PROCESSOR_PERFSTATE_POLICY_u_Flags,
+}}
+STRUCT!{struct PROCESSOR_PERFSTATE_POLICY {
+ Revision: DWORD,
+ MaxThrottle: BYTE,
+ MinThrottle: BYTE,
+ BusyAdjThreshold: BYTE,
+ u: PROCESSOR_PERFSTATE_POLICY_u,
+ TimeCheck: DWORD,
+ IncreaseTime: DWORD,
+ DecreaseTime: DWORD,
+ IncreasePercent: DWORD,
+ DecreasePercent: DWORD,
+}}
+pub type PPROCESSOR_PERFSTATE_POLICY = *mut PROCESSOR_PERFSTATE_POLICY;
+STRUCT!{struct ADMINISTRATOR_POWER_POLICY {
+ MinSleep: SYSTEM_POWER_STATE,
+ MaxSleep: SYSTEM_POWER_STATE,
+ MinVideoTimeout: DWORD,
+ MaxVideoTimeout: DWORD,
+ MinSpindownTimeout: DWORD,
+ MaxSpindownTimeout: DWORD,
+}}
+pub type PADMINISTRATOR_POWER_POLICY = *mut ADMINISTRATOR_POWER_POLICY;
+ENUM!{enum HIBERFILE_BUCKET_SIZE {
+ HiberFileBucket1GB = 0,
+ HiberFileBucket2GB,
+ HiberFileBucket4GB,
+ HiberFileBucket8GB,
+ HiberFileBucket16GB,
+ HiberFileBucket32GB,
+ HiberFileBucketUnlimited,
+ HiberFileBucketMax,
+}}
+pub const HIBERFILE_TYPE_NONE: BYTE = 0x00;
+pub const HIBERFILE_TYPE_REDUCED: BYTE = 0x01;
+pub const HIBERFILE_TYPE_FULL: BYTE = 0x02;
+pub const HIBERFILE_TYPE_MAX: usize = 0x03;
+STRUCT!{struct HIBERFILE_BUCKET {
+ MaxPhysicalMemory: DWORD64,
+ PhysicalMemoryPercent: [DWORD; HIBERFILE_TYPE_MAX],
+}}
+pub type PHIBERFILE_BUCKET = *mut HIBERFILE_BUCKET;
+STRUCT!{struct SYSTEM_POWER_CAPABILITIES {
+ PowerButtonPresent: BOOLEAN,
+ SleepButtonPresent: BOOLEAN,
+ LidPresent: BOOLEAN,
+ SystemS1: BOOLEAN,
+ SystemS2: BOOLEAN,
+ SystemS3: BOOLEAN,
+ SystemS4: BOOLEAN,
+ SystemS5: BOOLEAN,
+ HiberFilePresent: BOOLEAN,
+ FullWake: BOOLEAN,
+ VideoDimPresent: BOOLEAN,
+ ApmPresent: BOOLEAN,
+ UpsPresent: BOOLEAN,
+ ThermalControl: BOOLEAN,
+ ProcessorThrottle: BOOLEAN,
+ ProcessorMinThrottle: BYTE,
+ ProcessorMaxThrottle: BYTE,
+ FastSystemS4: BOOLEAN,
+ Hiberboot: BOOLEAN,
+ WakeAlarmPresent: BOOLEAN,
+ AoAc: BOOLEAN,
+ DiskSpinDown: BOOLEAN,
+ HiberFileType: BYTE,
+ AoAcConnectivitySupported: BOOLEAN,
+ spare3: [BYTE; 6],
+ SystemBatteriesPresent: BOOLEAN,
+ BatteriesAreShortTerm: BOOLEAN,
+ BatteryScale: [BATTERY_REPORTING_SCALE; 3],
+ AcOnLineWake: SYSTEM_POWER_STATE,
+ SoftLidWake: SYSTEM_POWER_STATE,
+ RtcWake: SYSTEM_POWER_STATE,
+ MinDeviceWakeState: SYSTEM_POWER_STATE,
+ DefaultLowLatencyWake: SYSTEM_POWER_STATE,
+}}
+pub type PSYSTEM_POWER_CAPABILITIES = *mut SYSTEM_POWER_CAPABILITIES;
+STRUCT!{struct SYSTEM_BATTERY_STATE {
+ AcOnLine: BOOLEAN,
+ BatteryPresent: BOOLEAN,
+ Charging: BOOLEAN,
+ Discharging: BOOLEAN,
+ Spare1: [BOOLEAN; 3],
+ Tag: BYTE,
+ MaxCapacity: DWORD,
+ RemainingCapacity: DWORD,
+ Rate: DWORD,
+ EstimatedTime: DWORD,
+ DefaultAlert1: DWORD,
+ DefaultAlert2: DWORD,
+}}
+pub type PSYSTEM_BATTERY_STATE = *mut SYSTEM_BATTERY_STATE;
+pub const IMAGE_DOS_SIGNATURE: WORD = 0x5A4D;
+pub const IMAGE_OS2_SIGNATURE: WORD = 0x454E;
+pub const IMAGE_OS2_SIGNATURE_LE: WORD = 0x454C;
+pub const IMAGE_VXD_SIGNATURE: WORD = 0x454C;
+pub const IMAGE_NT_SIGNATURE: DWORD = 0x00004550;
+STRUCT!{struct IMAGE_DOS_HEADER {
+ e_magic: WORD,
+ e_cblp: WORD,
+ e_cp: WORD,
+ e_crlc: WORD,
+ e_cparhdr: WORD,
+ e_minalloc: WORD,
+ e_maxalloc: WORD,
+ e_ss: WORD,
+ e_sp: WORD,
+ e_csum: WORD,
+ e_ip: WORD,
+ e_cs: WORD,
+ e_lfarlc: WORD,
+ e_ovno: WORD,
+ e_res: [WORD; 4],
+ e_oemid: WORD,
+ e_oeminfo: WORD,
+ e_res2: [WORD; 10],
+ e_lfanew: LONG,
+}}
+pub type PIMAGE_DOS_HEADER = *mut IMAGE_DOS_HEADER;
+STRUCT!{struct IMAGE_OS2_HEADER {
+ ne_magic: WORD,
+ ne_ver: CHAR,
+ ne_rev: CHAR,
+ ne_enttab: WORD,
+ ne_cbenttab: WORD,
+ ne_crc: LONG,
+ ne_flags: WORD,
+ ne_autodata: WORD,
+ ne_heap: WORD,
+ ne_stack: WORD,
+ ne_csip: LONG,
+ ne_sssp: LONG,
+ ne_cseg: WORD,
+ ne_cmod: WORD,
+ ne_cbnrestab: WORD,
+ ne_segtab: WORD,
+ ne_rsrctab: WORD,
+ ne_restab: WORD,
+ ne_modtab: WORD,
+ ne_imptab: WORD,
+ ne_nrestab: LONG,
+ ne_cmovent: WORD,
+ ne_align: WORD,
+ ne_cres: WORD,
+ ne_exetyp: BYTE,
+ ne_flagsothers: BYTE,
+ ne_pretthunks: WORD,
+ ne_psegrefbytes: WORD,
+ ne_swaparea: WORD,
+ ne_expver: WORD,
+}}
+pub type PIMAGE_OS2_HEADER = *mut IMAGE_OS2_HEADER;
+STRUCT!{struct IMAGE_VXD_HEADER {
+ e32_magic: WORD,
+ e32_border: BYTE,
+ e32_worder: BYTE,
+ e32_level: DWORD,
+ e32_cpu: WORD,
+ e32_os: WORD,
+ e32_ver: DWORD,
+ e32_mflags: DWORD,
+ e32_mpages: DWORD,
+ e32_startobj: DWORD,
+ e32_eip: DWORD,
+ e32_stackobj: DWORD,
+ e32_esp: DWORD,
+ e32_pagesize: DWORD,
+ e32_lastpagesize: DWORD,
+ e32_fixupsize: DWORD,
+ e32_fixupsum: DWORD,
+ e32_ldrsize: DWORD,
+ e32_ldrsum: DWORD,
+ e32_objtab: DWORD,
+ e32_objcnt: DWORD,
+ e32_objmap: DWORD,
+ e32_itermap: DWORD,
+ e32_rsrctab: DWORD,
+ e32_rsrccnt: DWORD,
+ e32_restab: DWORD,
+ e32_enttab: DWORD,
+ e32_dirtab: DWORD,
+ e32_dircnt: DWORD,
+ e32_fpagetab: DWORD,
+ e32_frectab: DWORD,
+ e32_impmod: DWORD,
+ e32_impmodcnt: DWORD,
+ e32_impproc: DWORD,
+ e32_pagesum: DWORD,
+ e32_datapage: DWORD,
+ e32_preload: DWORD,
+ e32_nrestab: DWORD,
+ e32_cbnrestab: DWORD,
+ e32_nressum: DWORD,
+ e32_autodata: DWORD,
+ e32_debuginfo: DWORD,
+ e32_debuglen: DWORD,
+ e32_instpreload: DWORD,
+ e32_instdemand: DWORD,
+ e32_heapsize: DWORD,
+ e32_res3: [BYTE; 12],
+ e32_winresoff: DWORD,
+ e32_winreslen: DWORD,
+ e32_devid: WORD,
+ e32_ddkver: WORD,
+}}
+pub type PIMAGE_VXD_HEADER = *mut IMAGE_VXD_HEADER;
+STRUCT!{struct IMAGE_FILE_HEADER {
+ Machine: WORD,
+ NumberOfSections: WORD,
+ TimeDateStamp: DWORD,
+ PointerToSymbolTable: DWORD,
+ NumberOfSymbols: DWORD,
+ SizeOfOptionalHeader: WORD,
+ Characteristics: WORD,
+}}
+pub type PIMAGE_FILE_HEADER = *mut IMAGE_FILE_HEADER;
+pub const IMAGE_SIZEOF_FILE_HEADER: usize = 20;
+pub const IMAGE_FILE_RELOCS_STRIPPED: WORD = 0x0001;
+pub const IMAGE_FILE_EXECUTABLE_IMAGE: WORD = 0x0002;
+pub const IMAGE_FILE_LINE_NUMS_STRIPPED: WORD = 0x0004;
+pub const IMAGE_FILE_LOCAL_SYMS_STRIPPED: WORD = 0x0008;
+pub const IMAGE_FILE_AGGRESIVE_WS_TRIM: WORD = 0x0010;
+pub const IMAGE_FILE_LARGE_ADDRESS_AWARE: WORD = 0x0020;
+pub const IMAGE_FILE_BYTES_REVERSED_LO: WORD = 0x0080;
+pub const IMAGE_FILE_32BIT_MACHINE: WORD = 0x0100;
+pub const IMAGE_FILE_DEBUG_STRIPPED: WORD = 0x0200;
+pub const IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP: WORD = 0x0400;
+pub const IMAGE_FILE_NET_RUN_FROM_SWAP: WORD = 0x0800;
+pub const IMAGE_FILE_SYSTEM: WORD = 0x1000;
+pub const IMAGE_FILE_DLL: WORD = 0x2000;
+pub const IMAGE_FILE_UP_SYSTEM_ONLY: WORD = 0x4000;
+pub const IMAGE_FILE_BYTES_REVERSED_HI: WORD = 0x8000;
+pub const IMAGE_FILE_MACHINE_UNKNOWN: WORD = 0;
+pub const IMAGE_FILE_MACHINE_TARGET_HOST: WORD = 0x0001;
+pub const IMAGE_FILE_MACHINE_I386: WORD = 0x014c;
+pub const IMAGE_FILE_MACHINE_R3000: WORD = 0x0162;
+pub const IMAGE_FILE_MACHINE_R4000: WORD = 0x0166;
+pub const IMAGE_FILE_MACHINE_R10000: WORD = 0x0168;
+pub const IMAGE_FILE_MACHINE_WCEMIPSV2: WORD = 0x0169;
+pub const IMAGE_FILE_MACHINE_ALPHA: WORD = 0x0184;
+pub const IMAGE_FILE_MACHINE_SH3: WORD = 0x01a2;
+pub const IMAGE_FILE_MACHINE_SH3DSP: WORD = 0x01a3;
+pub const IMAGE_FILE_MACHINE_SH3E: WORD = 0x01a4;
+pub const IMAGE_FILE_MACHINE_SH4: WORD = 0x01a6;
+pub const IMAGE_FILE_MACHINE_SH5: WORD = 0x01a8;
+pub const IMAGE_FILE_MACHINE_ARM: WORD = 0x01c0;
+pub const IMAGE_FILE_MACHINE_THUMB: WORD = 0x01c2;
+pub const IMAGE_FILE_MACHINE_ARMNT: WORD = 0x01c4;
+pub const IMAGE_FILE_MACHINE_AM33: WORD = 0x01d3;
+pub const IMAGE_FILE_MACHINE_POWERPC: WORD = 0x01F0;
+pub const IMAGE_FILE_MACHINE_POWERPCFP: WORD = 0x01f1;
+pub const IMAGE_FILE_MACHINE_IA64: WORD = 0x0200;
+pub const IMAGE_FILE_MACHINE_MIPS16: WORD = 0x0266;
+pub const IMAGE_FILE_MACHINE_ALPHA64: WORD = 0x0284;
+pub const IMAGE_FILE_MACHINE_MIPSFPU: WORD = 0x0366;
+pub const IMAGE_FILE_MACHINE_MIPSFPU16: WORD = 0x0466;
+pub const IMAGE_FILE_MACHINE_AXP64: WORD = IMAGE_FILE_MACHINE_ALPHA64;
+pub const IMAGE_FILE_MACHINE_TRICORE: WORD = 0x0520;
+pub const IMAGE_FILE_MACHINE_CEF: WORD = 0x0CEF;
+pub const IMAGE_FILE_MACHINE_EBC: WORD = 0x0EBC;
+pub const IMAGE_FILE_MACHINE_AMD64: WORD = 0x8664;
+pub const IMAGE_FILE_MACHINE_M32R: WORD = 0x9041;
+pub const IMAGE_FILE_MACHINE_ARM64: WORD = 0xAA64;
+pub const IMAGE_FILE_MACHINE_CEE: WORD = 0xC0EE;
+STRUCT!{struct IMAGE_DATA_DIRECTORY {
+ VirtualAddress: DWORD,
+ Size: DWORD,
+}}
+pub type PIMAGE_DATA_DIRECTORY = *mut IMAGE_DATA_DIRECTORY;
+pub const IMAGE_NUMBEROF_DIRECTORY_ENTRIES: usize = 16;
+STRUCT!{struct IMAGE_OPTIONAL_HEADER32 {
+ Magic: WORD,
+ MajorLinkerVersion: BYTE,
+ MinorLinkerVersion: BYTE,
+ SizeOfCode: DWORD,
+ SizeOfInitializedData: DWORD,
+ SizeOfUninitializedData: DWORD,
+ AddressOfEntryPoint: DWORD,
+ BaseOfCode: DWORD,
+ BaseOfData: DWORD,
+ ImageBase: DWORD,
+ SectionAlignment: DWORD,
+ FileAlignment: DWORD,
+ MajorOperatingSystemVersion: WORD,
+ MinorOperatingSystemVersion: WORD,
+ MajorImageVersion: WORD,
+ MinorImageVersion: WORD,
+ MajorSubsystemVersion: WORD,
+ MinorSubsystemVersion: WORD,
+ Win32VersionValue: DWORD,
+ SizeOfImage: DWORD,
+ SizeOfHeaders: DWORD,
+ CheckSum: DWORD,
+ Subsystem: WORD,
+ DllCharacteristics: WORD,
+ SizeOfStackReserve: DWORD,
+ SizeOfStackCommit: DWORD,
+ SizeOfHeapReserve: DWORD,
+ SizeOfHeapCommit: DWORD,
+ LoaderFlags: DWORD,
+ NumberOfRvaAndSizes: DWORD,
+ DataDirectory: [IMAGE_DATA_DIRECTORY; IMAGE_NUMBEROF_DIRECTORY_ENTRIES],
+}}
+pub type PIMAGE_OPTIONAL_HEADER32 = *mut IMAGE_OPTIONAL_HEADER32;
+STRUCT!{struct IMAGE_ROM_OPTIONAL_HEADER {
+ Magic: WORD,
+ MajorLinkerVersion: BYTE,
+ MinorLinkerVersion: BYTE,
+ SizeOfCode: DWORD,
+ SizeOfInitializedData: DWORD,
+ SizeOfUninitializedData: DWORD,
+ AddressOfEntryPoint: DWORD,
+ BaseOfCode: DWORD,
+ BaseOfData: DWORD,
+ BaseOfBss: DWORD,
+ GprMask: DWORD,
+ CprMask: [DWORD; 4],
+ GpValue: DWORD,
+}}
+pub type PIMAGE_ROM_OPTIONAL_HEADER = *mut IMAGE_ROM_OPTIONAL_HEADER;
+STRUCT!{struct IMAGE_OPTIONAL_HEADER64 {
+ Magic: WORD,
+ MajorLinkerVersion: BYTE,
+ MinorLinkerVersion: BYTE,
+ SizeOfCode: DWORD,
+ SizeOfInitializedData: DWORD,
+ SizeOfUninitializedData: DWORD,
+ AddressOfEntryPoint: DWORD,
+ BaseOfCode: DWORD,
+ ImageBase: ULONGLONG,
+ SectionAlignment: DWORD,
+ FileAlignment: DWORD,
+ MajorOperatingSystemVersion: WORD,
+ MinorOperatingSystemVersion: WORD,
+ MajorImageVersion: WORD,
+ MinorImageVersion: WORD,
+ MajorSubsystemVersion: WORD,
+ MinorSubsystemVersion: WORD,
+ Win32VersionValue: DWORD,
+ SizeOfImage: DWORD,
+ SizeOfHeaders: DWORD,
+ CheckSum: DWORD,
+ Subsystem: WORD,
+ DllCharacteristics: WORD,
+ SizeOfStackReserve: ULONGLONG,
+ SizeOfStackCommit: ULONGLONG,
+ SizeOfHeapReserve: ULONGLONG,
+ SizeOfHeapCommit: ULONGLONG,
+ LoaderFlags: DWORD,
+ NumberOfRvaAndSizes: DWORD,
+ DataDirectory: [IMAGE_DATA_DIRECTORY; IMAGE_NUMBEROF_DIRECTORY_ENTRIES],
+}}
+pub type PIMAGE_OPTIONAL_HEADER64 = *mut IMAGE_OPTIONAL_HEADER64;
+pub const IMAGE_NT_OPTIONAL_HDR32_MAGIC: WORD = 0x10b;
+pub const IMAGE_NT_OPTIONAL_HDR64_MAGIC: WORD = 0x20b;
+pub const IMAGE_ROM_OPTIONAL_HDR_MAGIC: WORD = 0x107;
+#[cfg(target_pointer_width = "64")]
+IFDEF!{
+pub type IMAGE_OPTIONAL_HEADER = IMAGE_OPTIONAL_HEADER64;
+pub type PIMAGE_OPTIONAL_HEADER = PIMAGE_OPTIONAL_HEADER64;
+pub const IMAGE_NT_OPTIONAL_HDR_MAGIC: WORD = IMAGE_NT_OPTIONAL_HDR64_MAGIC;
+}
+#[cfg(target_pointer_width = "32")]
+IFDEF!{
+pub type IMAGE_OPTIONAL_HEADER = IMAGE_OPTIONAL_HEADER32;
+pub type PIMAGE_OPTIONAL_HEADER = PIMAGE_OPTIONAL_HEADER32;
+pub const IMAGE_NT_OPTIONAL_HDR_MAGIC: WORD = IMAGE_NT_OPTIONAL_HDR32_MAGIC;
+}
+STRUCT!{struct IMAGE_NT_HEADERS64 {
+ Signature: DWORD,
+ FileHeader: IMAGE_FILE_HEADER,
+ OptionalHeader: IMAGE_OPTIONAL_HEADER64,
+}}
+pub type PIMAGE_NT_HEADERS64 = *mut IMAGE_NT_HEADERS64;
+STRUCT!{struct IMAGE_NT_HEADERS32 {
+ Signature: DWORD,
+ FileHeader: IMAGE_FILE_HEADER,
+ OptionalHeader: IMAGE_OPTIONAL_HEADER32,
+}}
+pub type PIMAGE_NT_HEADERS32 = *mut IMAGE_NT_HEADERS32;
+STRUCT!{struct IMAGE_ROM_HEADERS {
+ FileHeader: IMAGE_FILE_HEADER,
+ OptionalHeader: IMAGE_ROM_OPTIONAL_HEADER,
+}}
+pub type PIMAGE_ROM_HEADERS = *mut IMAGE_ROM_HEADERS;
+#[cfg(target_pointer_width = "64")]
+IFDEF!{
+pub type IMAGE_NT_HEADERS = IMAGE_NT_HEADERS64;
+pub type PIMAGE_NT_HEADERS = PIMAGE_NT_HEADERS64;
+}
+#[cfg(target_pointer_width = "32")]
+IFDEF!{
+pub type IMAGE_NT_HEADERS = IMAGE_NT_HEADERS32;
+pub type PIMAGE_NT_HEADERS = PIMAGE_NT_HEADERS32;
+}
+pub const IMAGE_SUBSYSTEM_UNKNOWN: WORD = 0;
+pub const IMAGE_SUBSYSTEM_NATIVE: WORD = 1;
+pub const IMAGE_SUBSYSTEM_WINDOWS_GUI: WORD = 2;
+pub const IMAGE_SUBSYSTEM_WINDOWS_CUI: WORD = 3;
+pub const IMAGE_SUBSYSTEM_OS2_CUI: WORD = 5;
+pub const IMAGE_SUBSYSTEM_POSIX_CUI: WORD = 7;
+pub const IMAGE_SUBSYSTEM_NATIVE_WINDOWS: WORD = 8;
+pub const IMAGE_SUBSYSTEM_WINDOWS_CE_GUI: WORD = 9;
+pub const IMAGE_SUBSYSTEM_EFI_APPLICATION: WORD = 10;
+pub const IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER: WORD = 11;
+pub const IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER: WORD = 12;
+pub const IMAGE_SUBSYSTEM_EFI_ROM: WORD = 13;
+pub const IMAGE_SUBSYSTEM_XBOX: WORD = 14;
+pub const IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION: WORD = 16;
+pub const IMAGE_SUBSYSTEM_XBOX_CODE_CATALOG: WORD = 17;
+pub const IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA: WORD = 0x0020;
+pub const IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE: WORD = 0x0040;
+pub const IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY: WORD = 0x0080;
+pub const IMAGE_DLLCHARACTERISTICS_NX_COMPAT: WORD = 0x0100;
+pub const IMAGE_DLLCHARACTERISTICS_NO_ISOLATION: WORD = 0x0200;
+pub const IMAGE_DLLCHARACTERISTICS_NO_SEH: WORD = 0x0400;
+pub const IMAGE_DLLCHARACTERISTICS_NO_BIND: WORD = 0x0800;
+pub const IMAGE_DLLCHARACTERISTICS_APPCONTAINER: WORD = 0x1000;
+pub const IMAGE_DLLCHARACTERISTICS_WDM_DRIVER: WORD = 0x2000;
+pub const IMAGE_DLLCHARACTERISTICS_GUARD_CF: WORD = 0x4000;
+pub const IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE: WORD = 0x8000;
+pub const IMAGE_DIRECTORY_ENTRY_EXPORT: WORD = 0;
+pub const IMAGE_DIRECTORY_ENTRY_IMPORT: WORD = 1;
+pub const IMAGE_DIRECTORY_ENTRY_RESOURCE: WORD = 2;
+pub const IMAGE_DIRECTORY_ENTRY_EXCEPTION: WORD = 3;
+pub const IMAGE_DIRECTORY_ENTRY_SECURITY: WORD = 4;
+pub const IMAGE_DIRECTORY_ENTRY_BASERELOC: WORD = 5;
+pub const IMAGE_DIRECTORY_ENTRY_DEBUG: WORD = 6;
+pub const IMAGE_DIRECTORY_ENTRY_ARCHITECTURE: WORD = 7;
+pub const IMAGE_DIRECTORY_ENTRY_GLOBALPTR: WORD = 8;
+pub const IMAGE_DIRECTORY_ENTRY_TLS: WORD = 9;
+pub const IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG: WORD = 10;
+pub const IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT: WORD = 11;
+pub const IMAGE_DIRECTORY_ENTRY_IAT: WORD = 12;
+pub const IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT: WORD = 13;
+pub const IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR: WORD = 14;
+STRUCT!{struct ANON_OBJECT_HEADER {
+ Sig1: WORD,
+ Sig2: WORD,
+ Version: WORD,
+ Machine: WORD,
+ TimeDateStamp: DWORD,
+ ClassID: CLSID,
+ SizeOfData: DWORD,
+}}
+STRUCT!{struct ANON_OBJECT_HEADER_V2 {
+ Sig1: WORD,
+ Sig2: WORD,
+ Version: WORD,
+ Machine: WORD,
+ TimeDateStamp: DWORD,
+ ClassID: CLSID,
+ SizeOfData: DWORD,
+ Flags: DWORD,
+ MetaDataSize: DWORD,
+ MetaDataOffset: DWORD,
+}}
+STRUCT!{struct ANON_OBJECT_HEADER_BIGOBJ {
+ Sig1: WORD,
+ Sig2: WORD,
+ Version: WORD,
+ Machine: WORD,
+ TimeDateStamp: DWORD,
+ ClassID: CLSID,
+ SizeOfData: DWORD,
+ Flags: DWORD,
+ MetaDataSize: DWORD,
+ MetaDataOffset: DWORD,
+ NumberOfSections: DWORD,
+ PointerToSymbolTable: DWORD,
+ NumberOfSymbols: DWORD,
+}}
+pub const IMAGE_SIZEOF_SHORT_NAME: usize = 8;
+UNION!{union IMAGE_SECTION_HEADER_Misc {
+ [u32; 1],
+ PhysicalAddress PhysicalAddress_mut: DWORD,
+ VirtualSize VirtualSize_mut: DWORD,
+}}
+STRUCT!{struct IMAGE_SECTION_HEADER {
+ Name: [BYTE; IMAGE_SIZEOF_SHORT_NAME],
+ Misc: IMAGE_SECTION_HEADER_Misc,
+ VirtualAddress: DWORD,
+ SizeOfRawData: DWORD,
+ PointerToRawData: DWORD,
+ PointerToRelocations: DWORD,
+ PointerToLinenumbers: DWORD,
+ NumberOfRelocations: WORD,
+ NumberOfLinenumbers: WORD,
+ Characteristics: DWORD,
+}}
+pub type PIMAGE_SECTION_HEADER = *mut IMAGE_SECTION_HEADER;
+pub const IMAGE_SIZEOF_SECTION_HEADER: usize = 40;
+pub const IMAGE_SCN_TYPE_NO_PAD: DWORD = 0x00000008;
+pub const IMAGE_SCN_CNT_CODE: DWORD = 0x00000020;
+pub const IMAGE_SCN_CNT_INITIALIZED_DATA: DWORD = 0x00000040;
+pub const IMAGE_SCN_CNT_UNINITIALIZED_DATA: DWORD = 0x00000080;
+pub const IMAGE_SCN_LNK_OTHER: DWORD = 0x00000100;
+pub const IMAGE_SCN_LNK_INFO: DWORD = 0x00000200;
+pub const IMAGE_SCN_LNK_REMOVE: DWORD = 0x00000800;
+pub const IMAGE_SCN_LNK_COMDAT: DWORD = 0x00001000;
+pub const IMAGE_SCN_NO_DEFER_SPEC_EXC: DWORD = 0x00004000;
+pub const IMAGE_SCN_GPREL: DWORD = 0x00008000;
+pub const IMAGE_SCN_MEM_FARDATA: DWORD = 0x00008000;
+pub const IMAGE_SCN_MEM_PURGEABLE: DWORD = 0x00020000;
+pub const IMAGE_SCN_MEM_16BIT: DWORD = 0x00020000;
+pub const IMAGE_SCN_MEM_LOCKED: DWORD = 0x00040000;
+pub const IMAGE_SCN_MEM_PRELOAD: DWORD = 0x00080000;
+pub const IMAGE_SCN_ALIGN_1BYTES: DWORD = 0x00100000;
+pub const IMAGE_SCN_ALIGN_2BYTES: DWORD = 0x00200000;
+pub const IMAGE_SCN_ALIGN_4BYTES: DWORD = 0x00300000;
+pub const IMAGE_SCN_ALIGN_8BYTES: DWORD = 0x00400000;
+pub const IMAGE_SCN_ALIGN_16BYTES: DWORD = 0x00500000;
+pub const IMAGE_SCN_ALIGN_32BYTES: DWORD = 0x00600000;
+pub const IMAGE_SCN_ALIGN_64BYTES: DWORD = 0x00700000;
+pub const IMAGE_SCN_ALIGN_128BYTES: DWORD = 0x00800000;
+pub const IMAGE_SCN_ALIGN_256BYTES: DWORD = 0x00900000;
+pub const IMAGE_SCN_ALIGN_512BYTES: DWORD = 0x00A00000;
+pub const IMAGE_SCN_ALIGN_1024BYTES: DWORD = 0x00B00000;
+pub const IMAGE_SCN_ALIGN_2048BYTES: DWORD = 0x00C00000;
+pub const IMAGE_SCN_ALIGN_4096BYTES: DWORD = 0x00D00000;
+pub const IMAGE_SCN_ALIGN_8192BYTES: DWORD = 0x00E00000;
+pub const IMAGE_SCN_ALIGN_MASK: DWORD = 0x00F00000;
+pub const IMAGE_SCN_LNK_NRELOC_OVFL: DWORD = 0x01000000;
+pub const IMAGE_SCN_MEM_DISCARDABLE: DWORD = 0x02000000;
+pub const IMAGE_SCN_MEM_NOT_CACHED: DWORD = 0x04000000;
+pub const IMAGE_SCN_MEM_NOT_PAGED: DWORD = 0x08000000;
+pub const IMAGE_SCN_MEM_SHARED: DWORD = 0x10000000;
+pub const IMAGE_SCN_MEM_EXECUTE: DWORD = 0x20000000;
+pub const IMAGE_SCN_MEM_READ: DWORD = 0x40000000;
+pub const IMAGE_SCN_MEM_WRITE: DWORD = 0x80000000;
+pub const IMAGE_SCN_SCALE_INDEX: DWORD = 0x00000001;
+STRUCT!{struct IMAGE_SYMBOL_N_Name {
+ Short: DWORD,
+ Long: DWORD,
+}}
+UNION!{union IMAGE_SYMBOL_N {
+ [u32; 2],
+ ShortName ShortName_mut: [BYTE; 8],
+ Name Name_mut: IMAGE_SYMBOL_N_Name,
+ LongName LongName_mut: [DWORD; 2],
+}}
+STRUCT!{struct IMAGE_SYMBOL {
+ N: IMAGE_SYMBOL_N,
+ Value: DWORD,
+ SectionNumber: SHORT,
+ Type: WORD,
+ StorageClass: BYTE,
+ NumberOfAuxSymbols: BYTE,
+}}
+pub type PIMAGE_SYMBOL = *mut IMAGE_SYMBOL;
+pub const IMAGE_SIZEOF_SYMBOL: usize = 18;
+STRUCT!{struct IMAGE_SYMBOL_EX_N_Name {
+ Short: DWORD,
+ Long: DWORD,
+}}
+UNION!{union IMAGE_SYMBOL_EX_N {
+ [u32; 2],
+ ShortName ShortName_mut: [BYTE; 8],
+ Name Name_mut: IMAGE_SYMBOL_EX_N_Name,
+ LongName LongName_mut: [DWORD; 2],
+}}
+STRUCT!{struct IMAGE_SYMBOL_EX {
+ N: IMAGE_SYMBOL_EX_N,
+ Value: DWORD,
+ SectionNumber: LONG,
+ Type: WORD,
+ StorageClass: BYTE,
+ NumberOfAuxSymbols: BYTE,
+}}
+pub type PIMAGE_SYMBOL_EX = *mut IMAGE_SYMBOL_EX;
+pub const IMAGE_SYM_UNDEFINED: SHORT = 0;
+pub const IMAGE_SYM_ABSOLUTE: SHORT = -1;
+pub const IMAGE_SYM_DEBUG: SHORT = -2;
+pub const IMAGE_SYM_SECTION_MAX: USHORT = 0xFEFF;
+pub const IMAGE_SYM_SECTION_MAX_EX: LONG = MAXLONG;
+pub const IMAGE_SYM_TYPE_NULL: WORD = 0x0000;
+pub const IMAGE_SYM_TYPE_VOID: WORD = 0x0001;
+pub const IMAGE_SYM_TYPE_CHAR: WORD = 0x0002;
+pub const IMAGE_SYM_TYPE_SHORT: WORD = 0x0003;
+pub const IMAGE_SYM_TYPE_INT: WORD = 0x0004;
+pub const IMAGE_SYM_TYPE_LONG: WORD = 0x0005;
+pub const IMAGE_SYM_TYPE_FLOAT: WORD = 0x0006;
+pub const IMAGE_SYM_TYPE_DOUBLE: WORD = 0x0007;
+pub const IMAGE_SYM_TYPE_STRUCT: WORD = 0x0008;
+pub const IMAGE_SYM_TYPE_UNION: WORD = 0x0009;
+pub const IMAGE_SYM_TYPE_ENUM: WORD = 0x000A;
+pub const IMAGE_SYM_TYPE_MOE: WORD = 0x000B;
+pub const IMAGE_SYM_TYPE_BYTE: WORD = 0x000C;
+pub const IMAGE_SYM_TYPE_WORD: WORD = 0x000D;
+pub const IMAGE_SYM_TYPE_UINT: WORD = 0x000E;
+pub const IMAGE_SYM_TYPE_DWORD: WORD = 0x000F;
+pub const IMAGE_SYM_TYPE_PCODE: WORD = 0x8000;
+pub const IMAGE_SYM_DTYPE_NULL: WORD = 0;
+pub const IMAGE_SYM_DTYPE_POINTER: WORD = 1;
+pub const IMAGE_SYM_DTYPE_FUNCTION: WORD = 2;
+pub const IMAGE_SYM_DTYPE_ARRAY: WORD = 3;
+pub const IMAGE_SYM_CLASS_END_OF_FUNCTION: BYTE = -1i8 as u8;
+pub const IMAGE_SYM_CLASS_NULL: BYTE = 0x0000;
+pub const IMAGE_SYM_CLASS_AUTOMATIC: BYTE = 0x0001;
+pub const IMAGE_SYM_CLASS_EXTERNAL: BYTE = 0x0002;
+pub const IMAGE_SYM_CLASS_STATIC: BYTE = 0x0003;
+pub const IMAGE_SYM_CLASS_REGISTER: BYTE = 0x0004;
+pub const IMAGE_SYM_CLASS_EXTERNAL_DEF: BYTE = 0x0005;
+pub const IMAGE_SYM_CLASS_LABEL: BYTE = 0x0006;
+pub const IMAGE_SYM_CLASS_UNDEFINED_LABEL: BYTE = 0x0007;
+pub const IMAGE_SYM_CLASS_MEMBER_OF_STRUCT: BYTE = 0x0008;
+pub const IMAGE_SYM_CLASS_ARGUMENT: BYTE = 0x0009;
+pub const IMAGE_SYM_CLASS_STRUCT_TAG: BYTE = 0x000A;
+pub const IMAGE_SYM_CLASS_MEMBER_OF_UNION: BYTE = 0x000B;
+pub const IMAGE_SYM_CLASS_UNION_TAG: BYTE = 0x000C;
+pub const IMAGE_SYM_CLASS_TYPE_DEFINITION: BYTE = 0x000D;
+pub const IMAGE_SYM_CLASS_UNDEFINED_STATIC: BYTE = 0x000E;
+pub const IMAGE_SYM_CLASS_ENUM_TAG: BYTE = 0x000F;
+pub const IMAGE_SYM_CLASS_MEMBER_OF_ENUM: BYTE = 0x0010;
+pub const IMAGE_SYM_CLASS_REGISTER_PARAM: BYTE = 0x0011;
+pub const IMAGE_SYM_CLASS_BIT_FIELD: BYTE = 0x0012;
+pub const IMAGE_SYM_CLASS_FAR_EXTERNAL: BYTE = 0x0044;
+pub const IMAGE_SYM_CLASS_BLOCK: BYTE = 0x0064;
+pub const IMAGE_SYM_CLASS_FUNCTION: BYTE = 0x0065;
+pub const IMAGE_SYM_CLASS_END_OF_STRUCT: BYTE = 0x0066;
+pub const IMAGE_SYM_CLASS_FILE: BYTE = 0x0067;
+pub const IMAGE_SYM_CLASS_SECTION: BYTE = 0x0068;
+pub const IMAGE_SYM_CLASS_WEAK_EXTERNAL: BYTE = 0x0069;
+pub const IMAGE_SYM_CLASS_CLR_TOKEN: BYTE = 0x006B;
+pub const N_BTMASK: WORD = 0x000F;
+pub const N_TMASK: WORD = 0x0030;
+pub const N_TMASK1: WORD = 0x00C0;
+pub const N_TMASK2: WORD = 0x00F0;
+pub const N_BTSHFT: usize = 4;
+pub const N_TSHIFT: usize = 2;
+#[inline]
+pub fn BTYPE(x: WORD) -> bool {
+ (x & N_BTMASK) != 0
+}
+#[inline]
+pub fn ISPTR(x: WORD) -> bool {
+ (x & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT)
+}
+#[inline]
+pub fn ISFCN(x: WORD) -> bool {
+ (x & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT)
+}
+#[inline]
+pub fn ISARY(x: WORD) -> bool {
+ (x & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT)
+}
+#[inline]
+pub fn ISTAG(x: BYTE) -> bool {
+ (x == IMAGE_SYM_CLASS_STRUCT_TAG) || (x == IMAGE_SYM_CLASS_UNION_TAG)
+ || (x == IMAGE_SYM_CLASS_ENUM_TAG)
+}
+#[inline]
+pub fn INCREF(x: WORD) -> WORD {
+ ((x & !N_BTMASK) << N_TSHIFT) | (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT) | (x & N_BTMASK)
+}
+#[inline]
+pub fn DECREF(x: WORD) -> WORD {
+ ((x >> N_TSHIFT) & !N_BTMASK) | (x & N_BTMASK)
+}
+STRUCT!{struct IMAGE_AUX_SYMBOL_TOKEN_DEF {
+ bAuxType: BYTE,
+ bReserved: BYTE,
+ SymbolTableIndex: DWORD,
+ rgbReserved: [BYTE; 12],
+}}
+pub type PIMAGE_AUX_SYMBOL_TOKEN_DEF = *mut IMAGE_AUX_SYMBOL_TOKEN_DEF;
+STRUCT!{struct IMAGE_AUX_SYMBOL_Sym_Misc_LnSz {
+ Linenumber: WORD,
+ Size: WORD,
+}}
+UNION!{union IMAGE_AUX_SYMBOL_Sym_Misc {
+ [u32; 1],
+ LnSz LnSz_mut: IMAGE_AUX_SYMBOL_Sym_Misc_LnSz,
+ TotalSize TotalSize_mut: DWORD,
+}}
+STRUCT!{struct IMAGE_AUX_SYMBOL_Sym_FcnAry_Function {
+ PointerToLinenumber: DWORD,
+ PointerToNextFunction: DWORD,
+}}
+STRUCT!{struct IMAGE_AUX_SYMBOL_Sym_FcnAry_Array {
+ Dimension: [WORD; 4],
+}}
+UNION!{union IMAGE_AUX_SYMBOL_Sym_FcnAry {
+ [u32; 2],
+ Function Function_mut: IMAGE_AUX_SYMBOL_Sym_FcnAry_Function,
+ Array Array_mut: IMAGE_AUX_SYMBOL_Sym_FcnAry_Array,
+}}
+STRUCT!{struct IMAGE_AUX_SYMBOL_Sym {
+ TagIndex: DWORD,
+ Misc: IMAGE_AUX_SYMBOL_Sym_Misc,
+ FcnAry: IMAGE_AUX_SYMBOL_Sym_FcnAry,
+ TvIndex: WORD,
+}}
+STRUCT!{struct IMAGE_AUX_SYMBOL_File {
+ Name: [BYTE; IMAGE_SIZEOF_SYMBOL],
+}}
+STRUCT!{struct IMAGE_AUX_SYMBOL_Section {
+ Length: DWORD,
+ NumberOfRelocations: WORD,
+ NumberOfLinenumbers: WORD,
+ CheckSum: DWORD,
+ Number: SHORT,
+ Selection: BYTE,
+ bReserved: BYTE,
+ HighNumber: SHORT,
+}}
+STRUCT!{struct IMAGE_AUX_SYMBOL_CRC {
+ crc: DWORD,
+ rgbReserved: [BYTE; 14],
+}}
+STRUCT!{struct IMAGE_AUX_SYMBOL {
+ Sym: IMAGE_AUX_SYMBOL_Sym,
+ File: IMAGE_AUX_SYMBOL_File,
+ Section: IMAGE_AUX_SYMBOL_Section,
+ TokenDef: IMAGE_AUX_SYMBOL_TOKEN_DEF,
+ CRC: IMAGE_AUX_SYMBOL_CRC,
+}}
+pub type PIMAGE_AUX_SYMBOL = *mut IMAGE_AUX_SYMBOL;
+STRUCT!{struct IMAGE_AUX_SYMBOL_EX_Sym {
+ WeakDefaultSymIndex: DWORD,
+ WeakSearchType: DWORD,
+ rgbReserved: [BYTE; 12],
+}}
+STRUCT!{struct IMAGE_AUX_SYMBOL_EX_File {
+ Name: [BYTE; 20],
+}}
+STRUCT!{struct IMAGE_AUX_SYMBOL_EX_Section {
+ Length: DWORD,
+ NumberOfRelocations: WORD,
+ NumberOfLinenumbers: WORD,
+ CheckSum: DWORD,
+ Number: SHORT,
+ Selection: BYTE,
+ bReserved: BYTE,
+ HighNumber: SHORT,
+ rgbReserved: [BYTE; 2],
+}}
+STRUCT!{struct IMAGE_AUX_SYMBOL_EX_s {
+ TokenDef: IMAGE_AUX_SYMBOL_TOKEN_DEF,
+ rgbReserved: [BYTE; 2],
+}}
+STRUCT!{struct IMAGE_AUX_SYMBOL_EX_CRC {
+ crc: DWORD,
+ rgbReserved: [BYTE; 16],
+}}
+STRUCT!{struct IMAGE_AUX_SYMBOL_EX {
+ Sym: IMAGE_AUX_SYMBOL_EX_Sym,
+ File: IMAGE_AUX_SYMBOL_EX_File,
+ Section: IMAGE_AUX_SYMBOL_EX_Section,
+ s: IMAGE_AUX_SYMBOL_EX_s,
+ CRC: IMAGE_AUX_SYMBOL_EX_CRC,
+}}
+pub type PIMAGE_AUX_SYMBOL_EX = *mut IMAGE_AUX_SYMBOL_EX;
+ENUM!{enum IMAGE_AUX_SYMBOL_TYPE {
+ IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF = 1,
+}}
+pub const IMAGE_COMDAT_SELECT_NODUPLICATES: BYTE = 1;
+pub const IMAGE_COMDAT_SELECT_ANY: BYTE = 2;
+pub const IMAGE_COMDAT_SELECT_SAME_SIZE: BYTE = 3;
+pub const IMAGE_COMDAT_SELECT_EXACT_MATCH: BYTE = 4;
+pub const IMAGE_COMDAT_SELECT_ASSOCIATIVE: BYTE = 5;
+pub const IMAGE_COMDAT_SELECT_LARGEST: BYTE = 6;
+pub const IMAGE_COMDAT_SELECT_NEWEST: BYTE = 7;
+pub const IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY: BYTE = 1;
+pub const IMAGE_WEAK_EXTERN_SEARCH_LIBRARY: BYTE = 2;
+pub const IMAGE_WEAK_EXTERN_SEARCH_ALIAS: BYTE = 3;
+UNION!{union IMAGE_RELOCATION_u {
+ [u32; 1],
+ VirtualAddress VirtualAddress_mut: DWORD,
+ RelocCount RelocCount_mut: DWORD,
+}}
+STRUCT!{struct IMAGE_RELOCATION {
+ u: IMAGE_RELOCATION_u,
+ SymbolTableIndex: DWORD,
+ Type: WORD,
+}}
+pub type PIMAGE_RELOCATION = *mut IMAGE_RELOCATION;
+pub const IMAGE_REL_I386_ABSOLUTE: WORD = 0x0000;
+pub const IMAGE_REL_I386_DIR16: WORD = 0x0001;
+pub const IMAGE_REL_I386_REL16: WORD = 0x0002;
+pub const IMAGE_REL_I386_DIR32: WORD = 0x0006;
+pub const IMAGE_REL_I386_DIR32NB: WORD = 0x0007;
+pub const IMAGE_REL_I386_SEG12: WORD = 0x0009;
+pub const IMAGE_REL_I386_SECTION: WORD = 0x000A;
+pub const IMAGE_REL_I386_SECREL: WORD = 0x000B;
+pub const IMAGE_REL_I386_TOKEN: WORD = 0x000C;
+pub const IMAGE_REL_I386_SECREL7: WORD = 0x000D;
+pub const IMAGE_REL_I386_REL32: WORD = 0x0014;
+pub const IMAGE_REL_MIPS_ABSOLUTE: WORD = 0x0000;
+pub const IMAGE_REL_MIPS_REFHALF: WORD = 0x0001;
+pub const IMAGE_REL_MIPS_REFWORD: WORD = 0x0002;
+pub const IMAGE_REL_MIPS_JMPADDR: WORD = 0x0003;
+pub const IMAGE_REL_MIPS_REFHI: WORD = 0x0004;
+pub const IMAGE_REL_MIPS_REFLO: WORD = 0x0005;
+pub const IMAGE_REL_MIPS_GPREL: WORD = 0x0006;
+pub const IMAGE_REL_MIPS_LITERAL: WORD = 0x0007;
+pub const IMAGE_REL_MIPS_SECTION: WORD = 0x000A;
+pub const IMAGE_REL_MIPS_SECREL: WORD = 0x000B;
+pub const IMAGE_REL_MIPS_SECRELLO: WORD = 0x000C;
+pub const IMAGE_REL_MIPS_SECRELHI: WORD = 0x000D;
+pub const IMAGE_REL_MIPS_TOKEN: WORD = 0x000E;
+pub const IMAGE_REL_MIPS_JMPADDR16: WORD = 0x0010;
+pub const IMAGE_REL_MIPS_REFWORDNB: WORD = 0x0022;
+pub const IMAGE_REL_MIPS_PAIR: WORD = 0x0025;
+pub const IMAGE_REL_ALPHA_ABSOLUTE: WORD = 0x0000;
+pub const IMAGE_REL_ALPHA_REFLONG: WORD = 0x0001;
+pub const IMAGE_REL_ALPHA_REFQUAD: WORD = 0x0002;
+pub const IMAGE_REL_ALPHA_GPREL32: WORD = 0x0003;
+pub const IMAGE_REL_ALPHA_LITERAL: WORD = 0x0004;
+pub const IMAGE_REL_ALPHA_LITUSE: WORD = 0x0005;
+pub const IMAGE_REL_ALPHA_GPDISP: WORD = 0x0006;
+pub const IMAGE_REL_ALPHA_BRADDR: WORD = 0x0007;
+pub const IMAGE_REL_ALPHA_HINT: WORD = 0x0008;
+pub const IMAGE_REL_ALPHA_INLINE_REFLONG: WORD = 0x0009;
+pub const IMAGE_REL_ALPHA_REFHI: WORD = 0x000A;
+pub const IMAGE_REL_ALPHA_REFLO: WORD = 0x000B;
+pub const IMAGE_REL_ALPHA_PAIR: WORD = 0x000C;
+pub const IMAGE_REL_ALPHA_MATCH: WORD = 0x000D;
+pub const IMAGE_REL_ALPHA_SECTION: WORD = 0x000E;
+pub const IMAGE_REL_ALPHA_SECREL: WORD = 0x000F;
+pub const IMAGE_REL_ALPHA_REFLONGNB: WORD = 0x0010;
+pub const IMAGE_REL_ALPHA_SECRELLO: WORD = 0x0011;
+pub const IMAGE_REL_ALPHA_SECRELHI: WORD = 0x0012;
+pub const IMAGE_REL_ALPHA_REFQ3: WORD = 0x0013;
+pub const IMAGE_REL_ALPHA_REFQ2: WORD = 0x0014;
+pub const IMAGE_REL_ALPHA_REFQ1: WORD = 0x0015;
+pub const IMAGE_REL_ALPHA_GPRELLO: WORD = 0x0016;
+pub const IMAGE_REL_ALPHA_GPRELHI: WORD = 0x0017;
+pub const IMAGE_REL_PPC_ABSOLUTE: WORD = 0x0000;
+pub const IMAGE_REL_PPC_ADDR64: WORD = 0x0001;
+pub const IMAGE_REL_PPC_ADDR32: WORD = 0x0002;
+pub const IMAGE_REL_PPC_ADDR24: WORD = 0x0003;
+pub const IMAGE_REL_PPC_ADDR16: WORD = 0x0004;
+pub const IMAGE_REL_PPC_ADDR14: WORD = 0x0005;
+pub const IMAGE_REL_PPC_REL24: WORD = 0x0006;
+pub const IMAGE_REL_PPC_REL14: WORD = 0x0007;
+pub const IMAGE_REL_PPC_TOCREL16: WORD = 0x0008;
+pub const IMAGE_REL_PPC_TOCREL14: WORD = 0x0009;
+pub const IMAGE_REL_PPC_ADDR32NB: WORD = 0x000A;
+pub const IMAGE_REL_PPC_SECREL: WORD = 0x000B;
+pub const IMAGE_REL_PPC_SECTION: WORD = 0x000C;
+pub const IMAGE_REL_PPC_IFGLUE: WORD = 0x000D;
+pub const IMAGE_REL_PPC_IMGLUE: WORD = 0x000E;
+pub const IMAGE_REL_PPC_SECREL16: WORD = 0x000F;
+pub const IMAGE_REL_PPC_REFHI: WORD = 0x0010;
+pub const IMAGE_REL_PPC_REFLO: WORD = 0x0011;
+pub const IMAGE_REL_PPC_PAIR: WORD = 0x0012;
+pub const IMAGE_REL_PPC_SECRELLO: WORD = 0x0013;
+pub const IMAGE_REL_PPC_SECRELHI: WORD = 0x0014;
+pub const IMAGE_REL_PPC_GPREL: WORD = 0x0015;
+pub const IMAGE_REL_PPC_TOKEN: WORD = 0x0016;
+pub const IMAGE_REL_PPC_TYPEMASK: WORD = 0x00FF;
+pub const IMAGE_REL_PPC_NEG: WORD = 0x0100;
+pub const IMAGE_REL_PPC_BRTAKEN: WORD = 0x0200;
+pub const IMAGE_REL_PPC_BRNTAKEN: WORD = 0x0400;
+pub const IMAGE_REL_PPC_TOCDEFN: WORD = 0x0800;
+pub const IMAGE_REL_SH3_ABSOLUTE: WORD = 0x0000;
+pub const IMAGE_REL_SH3_DIRECT16: WORD = 0x0001;
+pub const IMAGE_REL_SH3_DIRECT32: WORD = 0x0002;
+pub const IMAGE_REL_SH3_DIRECT8: WORD = 0x0003;
+pub const IMAGE_REL_SH3_DIRECT8_WORD: WORD = 0x0004;
+pub const IMAGE_REL_SH3_DIRECT8_LONG: WORD = 0x0005;
+pub const IMAGE_REL_SH3_DIRECT4: WORD = 0x0006;
+pub const IMAGE_REL_SH3_DIRECT4_WORD: WORD = 0x0007;
+pub const IMAGE_REL_SH3_DIRECT4_LONG: WORD = 0x0008;
+pub const IMAGE_REL_SH3_PCREL8_WORD: WORD = 0x0009;
+pub const IMAGE_REL_SH3_PCREL8_LONG: WORD = 0x000A;
+pub const IMAGE_REL_SH3_PCREL12_WORD: WORD = 0x000B;
+pub const IMAGE_REL_SH3_STARTOF_SECTION: WORD = 0x000C;
+pub const IMAGE_REL_SH3_SIZEOF_SECTION: WORD = 0x000D;
+pub const IMAGE_REL_SH3_SECTION: WORD = 0x000E;
+pub const IMAGE_REL_SH3_SECREL: WORD = 0x000F;
+pub const IMAGE_REL_SH3_DIRECT32_NB: WORD = 0x0010;
+pub const IMAGE_REL_SH3_GPREL4_LONG: WORD = 0x0011;
+pub const IMAGE_REL_SH3_TOKEN: WORD = 0x0012;
+pub const IMAGE_REL_SHM_PCRELPT: WORD = 0x0013;
+pub const IMAGE_REL_SHM_REFLO: WORD = 0x0014;
+pub const IMAGE_REL_SHM_REFHALF: WORD = 0x0015;
+pub const IMAGE_REL_SHM_RELLO: WORD = 0x0016;
+pub const IMAGE_REL_SHM_RELHALF: WORD = 0x0017;
+pub const IMAGE_REL_SHM_PAIR: WORD = 0x0018;
+pub const IMAGE_REL_SH_NOMODE: WORD = 0x8000;
+pub const IMAGE_REL_ARM_ABSOLUTE: WORD = 0x0000;
+pub const IMAGE_REL_ARM_ADDR32: WORD = 0x0001;
+pub const IMAGE_REL_ARM_ADDR32NB: WORD = 0x0002;
+pub const IMAGE_REL_ARM_BRANCH24: WORD = 0x0003;
+pub const IMAGE_REL_ARM_BRANCH11: WORD = 0x0004;
+pub const IMAGE_REL_ARM_TOKEN: WORD = 0x0005;
+pub const IMAGE_REL_ARM_GPREL12: WORD = 0x0006;
+pub const IMAGE_REL_ARM_GPREL7: WORD = 0x0007;
+pub const IMAGE_REL_ARM_BLX24: WORD = 0x0008;
+pub const IMAGE_REL_ARM_BLX11: WORD = 0x0009;
+pub const IMAGE_REL_ARM_SECTION: WORD = 0x000E;
+pub const IMAGE_REL_ARM_SECREL: WORD = 0x000F;
+pub const IMAGE_REL_ARM_MOV32A: WORD = 0x0010;
+pub const IMAGE_REL_ARM_MOV32: WORD = 0x0010;
+pub const IMAGE_REL_ARM_MOV32T: WORD = 0x0011;
+pub const IMAGE_REL_THUMB_MOV32: WORD = 0x0011;
+pub const IMAGE_REL_ARM_BRANCH20T: WORD = 0x0012;
+pub const IMAGE_REL_THUMB_BRANCH20: WORD = 0x0012;
+pub const IMAGE_REL_ARM_BRANCH24T: WORD = 0x0014;
+pub const IMAGE_REL_THUMB_BRANCH24: WORD = 0x0014;
+pub const IMAGE_REL_ARM_BLX23T: WORD = 0x0015;
+pub const IMAGE_REL_THUMB_BLX23: WORD = 0x0015;
+pub const IMAGE_REL_AM_ABSOLUTE: WORD = 0x0000;
+pub const IMAGE_REL_AM_ADDR32: WORD = 0x0001;
+pub const IMAGE_REL_AM_ADDR32NB: WORD = 0x0002;
+pub const IMAGE_REL_AM_CALL32: WORD = 0x0003;
+pub const IMAGE_REL_AM_FUNCINFO: WORD = 0x0004;
+pub const IMAGE_REL_AM_REL32_1: WORD = 0x0005;
+pub const IMAGE_REL_AM_REL32_2: WORD = 0x0006;
+pub const IMAGE_REL_AM_SECREL: WORD = 0x0007;
+pub const IMAGE_REL_AM_SECTION: WORD = 0x0008;
+pub const IMAGE_REL_AM_TOKEN: WORD = 0x0009;
+pub const IMAGE_REL_ARM64_ABSOLUTE: WORD = 0x0000;
+pub const IMAGE_REL_ARM64_ADDR32: WORD = 0x0001;
+pub const IMAGE_REL_ARM64_ADDR32NB: WORD = 0x0002;
+pub const IMAGE_REL_ARM64_BRANCH26: WORD = 0x0003;
+pub const IMAGE_REL_ARM64_PAGEBASE_REL21: WORD = 0x0004;
+pub const IMAGE_REL_ARM64_REL21: WORD = 0x0005;
+pub const IMAGE_REL_ARM64_PAGEOFFSET_12A: WORD = 0x0006;
+pub const IMAGE_REL_ARM64_PAGEOFFSET_12L: WORD = 0x0007;
+pub const IMAGE_REL_ARM64_SECREL: WORD = 0x0008;
+pub const IMAGE_REL_ARM64_SECREL_LOW12A: WORD = 0x0009;
+pub const IMAGE_REL_ARM64_SECREL_HIGH12A: WORD = 0x000A;
+pub const IMAGE_REL_ARM64_SECREL_LOW12L: WORD = 0x000B;
+pub const IMAGE_REL_ARM64_TOKEN: WORD = 0x000C;
+pub const IMAGE_REL_ARM64_SECTION: WORD = 0x000D;
+pub const IMAGE_REL_ARM64_ADDR64: WORD = 0x000E;
+pub const IMAGE_REL_ARM64_BRANCH19: WORD = 0x000F;
+pub const IMAGE_REL_AMD64_ABSOLUTE: WORD = 0x0000;
+pub const IMAGE_REL_AMD64_ADDR64: WORD = 0x0001;
+pub const IMAGE_REL_AMD64_ADDR32: WORD = 0x0002;
+pub const IMAGE_REL_AMD64_ADDR32NB: WORD = 0x0003;
+pub const IMAGE_REL_AMD64_REL32: WORD = 0x0004;
+pub const IMAGE_REL_AMD64_REL32_1: WORD = 0x0005;
+pub const IMAGE_REL_AMD64_REL32_2: WORD = 0x0006;
+pub const IMAGE_REL_AMD64_REL32_3: WORD = 0x0007;
+pub const IMAGE_REL_AMD64_REL32_4: WORD = 0x0008;
+pub const IMAGE_REL_AMD64_REL32_5: WORD = 0x0009;
+pub const IMAGE_REL_AMD64_SECTION: WORD = 0x000A;
+pub const IMAGE_REL_AMD64_SECREL: WORD = 0x000B;
+pub const IMAGE_REL_AMD64_SECREL7: WORD = 0x000C;
+pub const IMAGE_REL_AMD64_TOKEN: WORD = 0x000D;
+pub const IMAGE_REL_AMD64_SREL32: WORD = 0x000E;
+pub const IMAGE_REL_AMD64_PAIR: WORD = 0x000F;
+pub const IMAGE_REL_AMD64_SSPAN32: WORD = 0x0010;
+pub const IMAGE_REL_IA64_ABSOLUTE: WORD = 0x0000;
+pub const IMAGE_REL_IA64_IMM14: WORD = 0x0001;
+pub const IMAGE_REL_IA64_IMM22: WORD = 0x0002;
+pub const IMAGE_REL_IA64_IMM64: WORD = 0x0003;
+pub const IMAGE_REL_IA64_DIR32: WORD = 0x0004;
+pub const IMAGE_REL_IA64_DIR64: WORD = 0x0005;
+pub const IMAGE_REL_IA64_PCREL21B: WORD = 0x0006;
+pub const IMAGE_REL_IA64_PCREL21M: WORD = 0x0007;
+pub const IMAGE_REL_IA64_PCREL21F: WORD = 0x0008;
+pub const IMAGE_REL_IA64_GPREL22: WORD = 0x0009;
+pub const IMAGE_REL_IA64_LTOFF22: WORD = 0x000A;
+pub const IMAGE_REL_IA64_SECTION: WORD = 0x000B;
+pub const IMAGE_REL_IA64_SECREL22: WORD = 0x000C;
+pub const IMAGE_REL_IA64_SECREL64I: WORD = 0x000D;
+pub const IMAGE_REL_IA64_SECREL32: WORD = 0x000E;
+pub const IMAGE_REL_IA64_DIR32NB: WORD = 0x0010;
+pub const IMAGE_REL_IA64_SREL14: WORD = 0x0011;
+pub const IMAGE_REL_IA64_SREL22: WORD = 0x0012;
+pub const IMAGE_REL_IA64_SREL32: WORD = 0x0013;
+pub const IMAGE_REL_IA64_UREL32: WORD = 0x0014;
+pub const IMAGE_REL_IA64_PCREL60X: WORD = 0x0015;
+pub const IMAGE_REL_IA64_PCREL60B: WORD = 0x0016;
+pub const IMAGE_REL_IA64_PCREL60F: WORD = 0x0017;
+pub const IMAGE_REL_IA64_PCREL60I: WORD = 0x0018;
+pub const IMAGE_REL_IA64_PCREL60M: WORD = 0x0019;
+pub const IMAGE_REL_IA64_IMMGPREL64: WORD = 0x001A;
+pub const IMAGE_REL_IA64_TOKEN: WORD = 0x001B;
+pub const IMAGE_REL_IA64_GPREL32: WORD = 0x001C;
+pub const IMAGE_REL_IA64_ADDEND: WORD = 0x001F;
+pub const IMAGE_REL_CEF_ABSOLUTE: WORD = 0x0000;
+pub const IMAGE_REL_CEF_ADDR32: WORD = 0x0001;
+pub const IMAGE_REL_CEF_ADDR64: WORD = 0x0002;
+pub const IMAGE_REL_CEF_ADDR32NB: WORD = 0x0003;
+pub const IMAGE_REL_CEF_SECTION: WORD = 0x0004;
+pub const IMAGE_REL_CEF_SECREL: WORD = 0x0005;
+pub const IMAGE_REL_CEF_TOKEN: WORD = 0x0006;
+pub const IMAGE_REL_CEE_ABSOLUTE: WORD = 0x0000;
+pub const IMAGE_REL_CEE_ADDR32: WORD = 0x0001;
+pub const IMAGE_REL_CEE_ADDR64: WORD = 0x0002;
+pub const IMAGE_REL_CEE_ADDR32NB: WORD = 0x0003;
+pub const IMAGE_REL_CEE_SECTION: WORD = 0x0004;
+pub const IMAGE_REL_CEE_SECREL: WORD = 0x0005;
+pub const IMAGE_REL_CEE_TOKEN: WORD = 0x0006;
+pub const IMAGE_REL_M32R_ABSOLUTE: WORD = 0x0000;
+pub const IMAGE_REL_M32R_ADDR32: WORD = 0x0001;
+pub const IMAGE_REL_M32R_ADDR32NB: WORD = 0x0002;
+pub const IMAGE_REL_M32R_ADDR24: WORD = 0x0003;
+pub const IMAGE_REL_M32R_GPREL16: WORD = 0x0004;
+pub const IMAGE_REL_M32R_PCREL24: WORD = 0x0005;
+pub const IMAGE_REL_M32R_PCREL16: WORD = 0x0006;
+pub const IMAGE_REL_M32R_PCREL8: WORD = 0x0007;
+pub const IMAGE_REL_M32R_REFHALF: WORD = 0x0008;
+pub const IMAGE_REL_M32R_REFHI: WORD = 0x0009;
+pub const IMAGE_REL_M32R_REFLO: WORD = 0x000A;
+pub const IMAGE_REL_M32R_PAIR: WORD = 0x000B;
+pub const IMAGE_REL_M32R_SECTION: WORD = 0x000C;
+pub const IMAGE_REL_M32R_SECREL32: WORD = 0x000D;
+pub const IMAGE_REL_M32R_TOKEN: WORD = 0x000E;
+pub const IMAGE_REL_EBC_ABSOLUTE: WORD = 0x0000;
+pub const IMAGE_REL_EBC_ADDR32NB: WORD = 0x0001;
+pub const IMAGE_REL_EBC_REL32: WORD = 0x0002;
+pub const IMAGE_REL_EBC_SECTION: WORD = 0x0003;
+pub const IMAGE_REL_EBC_SECREL: WORD = 0x0004;
+UNION!{union IMAGE_LINENUMBER_Type {
+ [u32; 1],
+ SymbolTableIndex SymbolTableIndex_mut: DWORD,
+ VirtualAddress VirtualAddress_mut: DWORD,
+}}
+STRUCT!{struct IMAGE_LINENUMBER {
+ Type: IMAGE_LINENUMBER_Type,
+ Linenumber: WORD,
+}}
+pub type PIMAGE_LINENUMBER = *mut IMAGE_LINENUMBER;
+STRUCT!{struct IMAGE_BASE_RELOCATION {
+ VirtualAddress: DWORD,
+ SizeOfBlock: DWORD,
+}}
+pub type PIMAGE_BASE_RELOCATION = *mut IMAGE_BASE_RELOCATION;
+pub const IMAGE_REL_BASED_ABSOLUTE: WORD = 0;
+pub const IMAGE_REL_BASED_HIGH: WORD = 1;
+pub const IMAGE_REL_BASED_LOW: WORD = 2;
+pub const IMAGE_REL_BASED_HIGHLOW: WORD = 3;
+pub const IMAGE_REL_BASED_HIGHADJ: WORD = 4;
+pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_5: WORD = 5;
+pub const IMAGE_REL_BASED_RESERVED: WORD = 6;
+pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_7: WORD = 7;
+pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_8: WORD = 8;
+pub const IMAGE_REL_BASED_MACHINE_SPECIFIC_9: WORD = 9;
+pub const IMAGE_REL_BASED_DIR64: WORD = 10;
+pub const IMAGE_REL_BASED_IA64_IMM64: WORD = 9;
+pub const IMAGE_REL_BASED_MIPS_JMPADDR: WORD = 5;
+pub const IMAGE_REL_BASED_MIPS_JMPADDR16: WORD = 9;
+pub const IMAGE_REL_BASED_ARM_MOV32: WORD = 5;
+pub const IMAGE_REL_BASED_THUMB_MOV32: WORD = 7;
+pub const IMAGE_ARCHIVE_START_SIZE: usize = 8;
+pub const IMAGE_ARCHIVE_START: &'static str = "!<arch>\n";
+pub const IMAGE_ARCHIVE_END: &'static str = "`\n";
+pub const IMAGE_ARCHIVE_PAD: &'static str = "\n";
+pub const IMAGE_ARCHIVE_LINKER_MEMBER: &'static str = "/ ";
+pub const IMAGE_ARCHIVE_LONGNAMES_MEMBER: &'static str = "// ";
+pub const IMAGE_ARCHIVE_HYBRIDMAP_MEMBER: &'static str = "/<HYBRIDMAP>/ ";
+STRUCT!{struct IMAGE_ARCHIVE_MEMBER_HEADER {
+ Name: [BYTE; 16],
+ Date: [BYTE; 12],
+ UserID: [BYTE; 6],
+ GroupID: [BYTE; 6],
+ Mode: [BYTE; 8],
+ Size: [BYTE; 10],
+ EndHeader: [BYTE; 2],
+}}
+pub type PIMAGE_ARCHIVE_MEMBER_HEADER = *mut IMAGE_ARCHIVE_MEMBER_HEADER;
+pub const IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR: usize = 60;
+STRUCT!{struct IMAGE_EXPORT_DIRECTORY {
+ Characteristics: DWORD,
+ TimeDateStamp: DWORD,
+ MajorVersion: WORD,
+ MinorVersion: WORD,
+ Name: DWORD,
+ Base: DWORD,
+ NumberOfFunctions: DWORD,
+ NumberOfNames: DWORD,
+ AddressOfFunctions: DWORD,
+ AddressOfNames: DWORD,
+ AddressOfNameOrdinals: DWORD,
+}}
+pub type PIMAGE_EXPORT_DIRECTORY = *mut IMAGE_EXPORT_DIRECTORY;
+STRUCT!{struct IMAGE_IMPORT_BY_NAME {
+ Hint: WORD,
+ Name: [CHAR; 1],
+}}
+pub type PIMAGE_IMPORT_BY_NAME = *mut IMAGE_IMPORT_BY_NAME;
+UNION!{union IMAGE_THUNK_DATA64_u1 {
+ [u64; 1],
+ ForwarderString ForwarderString_mut: ULONGLONG,
+ Function Function_mut: ULONGLONG,
+ Ordinal Ordinal_mut: ULONGLONG,
+ AddressOfData AddressOfData_mut: ULONGLONG,
+}}
+STRUCT!{struct IMAGE_THUNK_DATA64 {
+ u1: IMAGE_THUNK_DATA64_u1,
+}}
+pub type PIMAGE_THUNK_DATA64 = *mut IMAGE_THUNK_DATA64;
+UNION!{union IMAGE_THUNK_DATA32_u1 {
+ [u32; 1],
+ ForwarderString ForwarderString_mut: DWORD,
+ Function Function_mut: DWORD,
+ Ordinal Ordinal_mut: DWORD,
+ AddressOfData AddressOfData_mut: DWORD,
+}}
+STRUCT!{struct IMAGE_THUNK_DATA32 {
+ u1: IMAGE_THUNK_DATA32_u1,
+}}
+pub type PIMAGE_THUNK_DATA32 = *mut IMAGE_THUNK_DATA32;
+pub const IMAGE_ORDINAL_FLAG64: ULONGLONG = 0x8000000000000000;
+pub const IMAGE_ORDINAL_FLAG32: DWORD = 0x80000000;
+#[inline]
+pub fn IMAGE_ORDINAL64(Ordinal: ULONGLONG) -> ULONGLONG {
+ Ordinal & 0xffff
+}
+#[inline]
+pub fn IMAGE_ORDINAL32(Ordinal: DWORD) -> DWORD {
+ Ordinal & 0xffff
+}
+#[inline]
+pub fn IMAGE_SNAP_BY_ORDINAL64(Ordinal: ULONGLONG) -> bool {
+ (Ordinal & IMAGE_ORDINAL_FLAG64) != 0
+}
+#[inline]
+pub fn IMAGE_SNAP_BY_ORDINAL32(Ordinal: DWORD) -> bool {
+ (Ordinal & IMAGE_ORDINAL_FLAG32) != 0
+}
+FN!{stdcall PIMAGE_TLS_CALLBACK(
+ DllHandle: PVOID,
+ Reason: DWORD,
+ Reserved: PVOID,
+) -> ()}
+STRUCT!{struct IMAGE_TLS_DIRECTORY64 {
+ StartAddressOfRawData: ULONGLONG,
+ EndAddressOfRawData: ULONGLONG,
+ AddressOfIndex: ULONGLONG,
+ AddressOfCallBacks: ULONGLONG,
+ SizeOfZeroFill: DWORD,
+ Characteristics: DWORD,
+}}
+BITFIELD!{IMAGE_TLS_DIRECTORY64 Characteristics: DWORD [
+ Reserved0 set_Reserved0[0..20],
+ Alignment set_Alignment[20..24],
+ Reserved1 set_Reserved1[24..32],
+]}
+pub type PIMAGE_TLS_DIRECTORY64 = *mut IMAGE_TLS_DIRECTORY64;
+STRUCT!{struct IMAGE_TLS_DIRECTORY32 {
+ StartAddressOfRawData: DWORD,
+ EndAddressOfRawData: DWORD,
+ AddressOfIndex: DWORD,
+ AddressOfCallBacks: DWORD,
+ SizeOfZeroFill: DWORD,
+ Characteristics: DWORD,
+}}
+BITFIELD!{IMAGE_TLS_DIRECTORY32 Characteristics: DWORD [
+ Reserved0 set_Reserved0[0..20],
+ Alignment set_Alignment[20..24],
+ Reserved1 set_Reserved1[24..32],
+]}
+pub type PIMAGE_TLS_DIRECTORY32 = *mut IMAGE_TLS_DIRECTORY32;
+#[cfg(target_pointer_width = "64")]
+IFDEF!{
+pub const IMAGE_ORDINAL_FLAG: ULONGLONG = IMAGE_ORDINAL_FLAG64;
+#[inline]
+pub fn IMAGE_ORDINAL(Ordinal: ULONGLONG) -> ULONGLONG {
+ IMAGE_ORDINAL64(Ordinal)
+}
+pub type IMAGE_THUNK_DATA = IMAGE_THUNK_DATA64;
+pub type PIMAGE_THUNK_DATA = PIMAGE_THUNK_DATA64;
+#[inline]
+pub fn IMAGE_SNAP_BY_ORDINAL(Ordinal: ULONGLONG) -> bool {
+ IMAGE_SNAP_BY_ORDINAL64(Ordinal)
+}
+pub type IMAGE_TLS_DIRECTORY = IMAGE_TLS_DIRECTORY64;
+pub type PIMAGE_TLS_DIRECTORY = PIMAGE_TLS_DIRECTORY64;
+}
+#[cfg(target_pointer_width = "32")]
+IFDEF!{
+pub const IMAGE_ORDINAL_FLAG: DWORD = IMAGE_ORDINAL_FLAG32;
+#[inline]
+pub fn IMAGE_ORDINAL(Ordinal: DWORD) -> DWORD {
+ IMAGE_ORDINAL32(Ordinal)
+}
+pub type IMAGE_THUNK_DATA = IMAGE_THUNK_DATA32;
+pub type PIMAGE_THUNK_DATA = PIMAGE_THUNK_DATA32;
+#[inline]
+pub fn IMAGE_SNAP_BY_ORDINAL(Ordinal: DWORD) -> bool {
+ IMAGE_SNAP_BY_ORDINAL32(Ordinal)
+}
+pub type IMAGE_TLS_DIRECTORY = IMAGE_TLS_DIRECTORY32;
+pub type PIMAGE_TLS_DIRECTORY = PIMAGE_TLS_DIRECTORY32;
+}
+UNION!{union IMAGE_IMPORT_DESCRIPTOR_u {
+ [u32; 1],
+ Characteristics Characteristics_mut: DWORD,
+ OriginalFirstThunk OriginalFirstThunk_mut: DWORD,
+}}
+STRUCT!{struct IMAGE_IMPORT_DESCRIPTOR {
+ u: IMAGE_IMPORT_DESCRIPTOR_u,
+ TimeDateStamp: DWORD,
+ ForwarderChain: DWORD,
+ Name: DWORD,
+ FirstThunk: DWORD,
+}}
+pub type PIMAGE_IMPORT_DESCRIPTOR = *mut IMAGE_IMPORT_DESCRIPTOR;
+STRUCT!{struct IMAGE_BOUND_IMPORT_DESCRIPTOR {
+ TimeDateStamp: DWORD,
+ OffsetModuleName: WORD,
+ NumberOfModuleForwarderRefs: WORD,
+}}
+pub type PIMAGE_BOUND_IMPORT_DESCRIPTOR = *mut IMAGE_BOUND_IMPORT_DESCRIPTOR;
+STRUCT!{struct IMAGE_BOUND_FORWARDER_REF {
+ TimeDateStamp: DWORD,
+ OffsetModuleName: WORD,
+ Reserved: WORD,
+}}
+pub type PIMAGE_BOUND_FORWARDER_REF = *mut IMAGE_BOUND_FORWARDER_REF;
+STRUCT!{struct IMAGE_DELAYLOAD_DESCRIPTOR_Attributes {
+ AllAttributes: DWORD,
+}}
+BITFIELD!{IMAGE_DELAYLOAD_DESCRIPTOR_Attributes AllAttributes: DWORD [
+ RvaBased set_RvaBased[0..1],
+ ReservedAttributes set_ReservedAttributes[1..32],
+]}
+STRUCT!{struct IMAGE_DELAYLOAD_DESCRIPTOR {
+ Attributes: IMAGE_DELAYLOAD_DESCRIPTOR_Attributes,
+ DllNameRVA: DWORD,
+ ModuleHandleRVA: DWORD,
+ ImportAddressTableRVA: DWORD,
+ ImportNameTableRVA: DWORD,
+ BoundImportAddressTableRVA: DWORD,
+ UnloadInformationTableRVA: DWORD,
+ TimeDateStamp: DWORD,
+}}
+pub type PIMAGE_DELAYLOAD_DESCRIPTOR = *mut IMAGE_DELAYLOAD_DESCRIPTOR;
+pub type PCIMAGE_DELAYLOAD_DESCRIPTOR = *const IMAGE_DELAYLOAD_DESCRIPTOR;
+STRUCT!{struct IMAGE_RESOURCE_DIRECTORY {
+ Characteristics: DWORD,
+ TimeDateStamp: DWORD,
+ MajorVersion: WORD,
+ MinorVersion: WORD,
+ NumberOfNamedEntries: WORD,
+ NumberOfIdEntries: WORD,
+}}
+pub type PIMAGE_RESOURCE_DIRECTORY = *mut IMAGE_RESOURCE_DIRECTORY;
+pub const IMAGE_RESOURCE_NAME_IS_STRING: DWORD = 0x80000000;
+pub const IMAGE_RESOURCE_DATA_IS_DIRECTORY: DWORD = 0x80000000;
+STRUCT!{struct IMAGE_RESOURCE_DIRECTORY_ENTRY_u_s {
+ BitFields: DWORD,
+}}
+BITFIELD!{IMAGE_RESOURCE_DIRECTORY_ENTRY_u_s BitFields: DWORD [
+ NameOffset set_NameOffset[0..31],
+ NameIsString set_NameIsString[31..32],
+]}
+UNION!{union IMAGE_RESOURCE_DIRECTORY_ENTRY_u {
+ [u32; 1],
+ s s_mut: IMAGE_RESOURCE_DIRECTORY_ENTRY_u_s,
+ Name Name_mut: DWORD,
+ Id Id_mut: WORD,
+}}
+STRUCT!{struct IMAGE_RESOURCE_DIRECTORY_ENTRY {
+ u: IMAGE_RESOURCE_DIRECTORY_ENTRY_u,
+ OffsetToData: DWORD,
+}}
+BITFIELD!{IMAGE_RESOURCE_DIRECTORY_ENTRY OffsetToData: DWORD [
+ OffsetToDirectory set_OffsetToDirectory[0..31],
+ DataIsDirectory set_DataIsDirectory[31..32],
+]}
+pub type PIMAGE_RESOURCE_DIRECTORY_ENTRY = *mut IMAGE_RESOURCE_DIRECTORY_ENTRY;
+STRUCT!{struct IMAGE_RESOURCE_DIRECTORY_STRING {
+ Length: WORD,
+ NameString: [CHAR; 1],
+}}
+pub type PIMAGE_RESOURCE_DIRECTORY_STRING = *mut IMAGE_RESOURCE_DIRECTORY_STRING;
+STRUCT!{struct IMAGE_RESOURCE_DIR_STRING_U {
+ Length: WORD,
+ NameString: [WCHAR; 1],
+}}
+pub type PIMAGE_RESOURCE_DIR_STRING_U = *mut IMAGE_RESOURCE_DIR_STRING_U;
+STRUCT!{struct IMAGE_RESOURCE_DATA_ENTRY {
+ OffsetToData: DWORD,
+ Size: DWORD,
+ CodePage: DWORD,
+ Reserved: DWORD,
+}}
+pub type PIMAGE_RESOURCE_DATA_ENTRY = *mut IMAGE_RESOURCE_DATA_ENTRY;
+STRUCT!{struct IMAGE_LOAD_CONFIG_CODE_INTEGRITY {
+ Flags: WORD,
+ Catalog: WORD,
+ CatalogOffset: DWORD,
+ Reserved: DWORD,
+}}
+pub type PIMAGE_LOAD_CONFIG_CODE_INTEGRITY = *mut IMAGE_LOAD_CONFIG_CODE_INTEGRITY;
+STRUCT!{struct IMAGE_DYNAMIC_RELOCATION_TABLE {
+ Version: DWORD,
+ Size: DWORD,
+}}
+pub type PIMAGE_DYNAMIC_RELOCATION_TABLE = *mut IMAGE_DYNAMIC_RELOCATION_TABLE;
+STRUCT!{#[repr(packed)] struct IMAGE_DYNAMIC_RELOCATION32 {
+ Symbol: DWORD,
+ BaseRelocSize: DWORD,
+}}
+pub type PIMAGE_DYNAMIC_RELOCATION32 = *mut IMAGE_DYNAMIC_RELOCATION32;
+STRUCT!{#[repr(packed)] struct IMAGE_DYNAMIC_RELOCATION64 {
+ Symbol: ULONGLONG,
+ BaseRelocSize: DWORD,
+}}
+pub type PIMAGE_DYNAMIC_RELOCATION64 = *mut IMAGE_DYNAMIC_RELOCATION64;
+STRUCT!{#[repr(packed)] struct IMAGE_DYNAMIC_RELOCATION32_V2 {
+ HeaderSize: DWORD,
+ FixupInfoSize: DWORD,
+ Symbol: DWORD,
+ SymbolGroup: DWORD,
+ Flags: DWORD,
+}}
+pub type PIMAGE_DYNAMIC_RELOCATION32_V2 = *mut IMAGE_DYNAMIC_RELOCATION32_V2;
+STRUCT!{#[repr(packed)] struct IMAGE_DYNAMIC_RELOCATION64_V2 {
+ HeaderSize: DWORD,
+ FixupInfoSize: DWORD,
+ Symbol: ULONGLONG,
+ SymbolGroup: DWORD,
+ Flags: DWORD,
+}}
+pub type PIMAGE_DYNAMIC_RELOCATION64_V2 = *mut IMAGE_DYNAMIC_RELOCATION64_V2;
+#[cfg(target_pointer_width = "64")]
+IFDEF!{
+pub type IMAGE_DYNAMIC_RELOCATION = IMAGE_DYNAMIC_RELOCATION64;
+pub type PIMAGE_DYNAMIC_RELOCATION = PIMAGE_DYNAMIC_RELOCATION64;
+pub type IMAGE_DYNAMIC_RELOCATION_V2 = IMAGE_DYNAMIC_RELOCATION64_V2;
+pub type PIMAGE_DYNAMIC_RELOCATION_V2 = PIMAGE_DYNAMIC_RELOCATION64_V2;
+}
+#[cfg(target_pointer_width = "32")]
+IFDEF!{
+pub type IMAGE_DYNAMIC_RELOCATION = IMAGE_DYNAMIC_RELOCATION32;
+pub type PIMAGE_DYNAMIC_RELOCATION = PIMAGE_DYNAMIC_RELOCATION32;
+pub type IMAGE_DYNAMIC_RELOCATION_V2 = IMAGE_DYNAMIC_RELOCATION32_V2;
+pub type PIMAGE_DYNAMIC_RELOCATION_V2 = PIMAGE_DYNAMIC_RELOCATION32_V2;
+}
+pub const IMAGE_DYNAMIC_RELOCATION_GUARD_RF_PROLOGUE: DWORD = 0x00000001;
+pub const IMAGE_DYNAMIC_RELOCATION_GUARD_RF_EPILOGUE: DWORD = 0x00000002;
+STRUCT!{#[repr(packed)] struct IMAGE_PROLOGUE_DYNAMIC_RELOCATION_HEADER {
+ PrologueByteCount: BYTE,
+}}
+pub type PIMAGE_PROLOGUE_DYNAMIC_RELOCATION_HEADER = *mut IMAGE_PROLOGUE_DYNAMIC_RELOCATION_HEADER;
+STRUCT!{#[repr(packed)] struct IMAGE_EPILOGUE_DYNAMIC_RELOCATION_HEADER {
+ EpilogueCount: DWORD,
+ EpilogueByteCount: BYTE,
+ BranchDescriptorElementSize: BYTE,
+ BranchDescriptorCount: WORD,
+}}
+pub type PIMAGE_EPILOGUE_DYNAMIC_RELOCATION_HEADER = *mut IMAGE_EPILOGUE_DYNAMIC_RELOCATION_HEADER;
+STRUCT!{struct IMAGE_LOAD_CONFIG_DIRECTORY32 {
+ Size: DWORD,
+ TimeDateStamp: DWORD,
+ MajorVersion: WORD,
+ MinorVersion: WORD,
+ GlobalFlagsClear: DWORD,
+ GlobalFlagsSet: DWORD,
+ CriticalSectionDefaultTimeout: DWORD,
+ DeCommitFreeBlockThreshold: DWORD,
+ DeCommitTotalFreeThreshold: DWORD,
+ LockPrefixTable: DWORD,
+ MaximumAllocationSize: DWORD,
+ VirtualMemoryThreshold: DWORD,
+ ProcessHeapFlags: DWORD,
+ ProcessAffinityMask: DWORD,
+ CSDVersion: WORD,
+ DependentLoadFlags: WORD,
+ EditList: DWORD,
+ SecurityCookie: DWORD,
+ SEHandlerTable: DWORD,
+ SEHandlerCount: DWORD,
+ GuardCFCheckFunctionPointer: DWORD,
+ GuardCFDispatchFunctionPointer: DWORD,
+ GuardCFFunctionTable: DWORD,
+ GuardCFFunctionCount: DWORD,
+ GuardFlags: DWORD,
+ CodeIntegrity: IMAGE_LOAD_CONFIG_CODE_INTEGRITY,
+ GuardAddressTakenIatEntryTable: DWORD,
+ GuardAddressTakenIatEntryCount: DWORD,
+ GuardLongJumpTargetTable: DWORD,
+ GuardLongJumpTargetCount: DWORD,
+ DynamicValueRelocTable: DWORD,
+ CHPEMetadataPointer: DWORD,
+ GuardRFFailureRoutine: DWORD,
+ GuardRFFailureRoutineFunctionPointer: DWORD,
+ DynamicValueRelocTableOffset: DWORD,
+ DynamicValueRelocTableSection: WORD,
+ Reserved2: WORD,
+ GuardRFVerifyStackPointerFunctionPointer: DWORD,
+ HotPatchTableOffset: DWORD,
+ Reserved3: DWORD,
+ EnclaveConfigurationPointer: DWORD,
+}}
+pub type PIMAGE_LOAD_CONFIG_DIRECTORY32 = *mut IMAGE_LOAD_CONFIG_DIRECTORY32;
+STRUCT!{struct IMAGE_LOAD_CONFIG_DIRECTORY64 {
+ Size: DWORD,
+ TimeDateStamp: DWORD,
+ MajorVersion: WORD,
+ MinorVersion: WORD,
+ GlobalFlagsClear: DWORD,
+ GlobalFlagsSet: DWORD,
+ CriticalSectionDefaultTimeout: DWORD,
+ DeCommitFreeBlockThreshold: ULONGLONG,
+ DeCommitTotalFreeThreshold: ULONGLONG,
+ LockPrefixTable: ULONGLONG,
+ MaximumAllocationSize: ULONGLONG,
+ VirtualMemoryThreshold: ULONGLONG,
+ ProcessAffinityMask: ULONGLONG,
+ ProcessHeapFlags: DWORD,
+ CSDVersion: WORD,
+ DependentLoadFlags: WORD,
+ EditList: ULONGLONG,
+ SecurityCookie: ULONGLONG,
+ SEHandlerTable: ULONGLONG,
+ SEHandlerCount: ULONGLONG,
+ GuardCFCheckFunctionPointer: ULONGLONG,
+ GuardCFDispatchFunctionPointer: ULONGLONG,
+ GuardCFFunctionTable: ULONGLONG,
+ GuardCFFunctionCount: ULONGLONG,
+ GuardFlags: DWORD,
+ CodeIntegrity: IMAGE_LOAD_CONFIG_CODE_INTEGRITY,
+ GuardAddressTakenIatEntryTable: ULONGLONG,
+ GuardAddressTakenIatEntryCount: ULONGLONG,
+ GuardLongJumpTargetTable: ULONGLONG,
+ GuardLongJumpTargetCount: ULONGLONG,
+ DynamicValueRelocTable: ULONGLONG,
+ CHPEMetadataPointer: ULONGLONG,
+ GuardRFFailureRoutine: ULONGLONG,
+ GuardRFFailureRoutineFunctionPointer: ULONGLONG,
+ DynamicValueRelocTableOffset: DWORD,
+ DynamicValueRelocTableSection: WORD,
+ Reserved2: WORD,
+ GuardRFVerifyStackPointerFunctionPointer: ULONGLONG,
+ HotPatchTableOffset: DWORD,
+ Reserved3: DWORD,
+ EnclaveConfigurationPointer: ULONGLONG,
+}}
+pub type PIMAGE_LOAD_CONFIG_DIRECTORY64 = *mut IMAGE_LOAD_CONFIG_DIRECTORY64;
+#[cfg(target_pointer_width = "64")]
+IFDEF!{
+pub type IMAGE_LOAD_CONFIG_DIRECTORY = IMAGE_LOAD_CONFIG_DIRECTORY64;
+pub type PIMAGE_LOAD_CONFIG_DIRECTORY = PIMAGE_LOAD_CONFIG_DIRECTORY64;
+}
+#[cfg(target_pointer_width = "32")]
+IFDEF!{
+pub type IMAGE_LOAD_CONFIG_DIRECTORY = IMAGE_LOAD_CONFIG_DIRECTORY32;
+pub type PIMAGE_LOAD_CONFIG_DIRECTORY = PIMAGE_LOAD_CONFIG_DIRECTORY32;
+}
+STRUCT!{struct IMAGE_HOT_PATCH_INFO {
+ Version: DWORD,
+ Size: DWORD,
+ SequenceNumber: DWORD,
+ BaseImageList: DWORD,
+ BaseImageCount: DWORD,
+ BufferOffset: DWORD,
+}}
+pub type PIMAGE_HOT_PATCH_INFO = *mut IMAGE_HOT_PATCH_INFO;
+STRUCT!{struct IMAGE_HOT_PATCH_BASE {
+ SequenceNumber: DWORD,
+ Flags: DWORD,
+ OriginalTimeDateStamp: DWORD,
+ OriginalCheckSum: DWORD,
+ CodeIntegrityInfo: DWORD,
+ CodeIntegritySize: DWORD,
+ PatchTable: DWORD,
+ BufferOffset: DWORD,
+}}
+pub type PIMAGE_HOT_PATCH_BASE = *mut IMAGE_HOT_PATCH_BASE;
+STRUCT!{struct IMAGE_HOT_PATCH_HASHES {
+ SHA256: [BYTE; 32],
+ SHA1: [BYTE; 20],
+}}
+pub type PIMAGE_HOT_PATCH_HASHES = *mut IMAGE_HOT_PATCH_HASHES;
+pub const IMAGE_HOT_PATCH_BASE_OBLIGATORY: DWORD = 0x00000001;
+pub const IMAGE_HOT_PATCH_CHUNK_INVERSE: DWORD = 0x80000000;
+pub const IMAGE_HOT_PATCH_CHUNK_OBLIGATORY: DWORD = 0x40000000;
+pub const IMAGE_HOT_PATCH_CHUNK_RESERVED: DWORD = 0x3FF03000;
+pub const IMAGE_HOT_PATCH_CHUNK_TYPE: DWORD = 0x000FC000;
+pub const IMAGE_HOT_PATCH_CHUNK_SOURCE_RVA: DWORD = 0x00008000;
+pub const IMAGE_HOT_PATCH_CHUNK_TARGET_RVA: DWORD = 0x00004000;
+pub const IMAGE_HOT_PATCH_CHUNK_SIZE: DWORD = 0x00000FFF;
+pub const IMAGE_HOT_PATCH_NONE: DWORD = 0x00000000;
+pub const IMAGE_HOT_PATCH_FUNCTION: DWORD = 0x0001C000;
+pub const IMAGE_HOT_PATCH_ABSOLUTE: DWORD = 0x0002C000;
+pub const IMAGE_HOT_PATCH_REL32: DWORD = 0x0003C000;
+pub const IMAGE_HOT_PATCH_CALL_TARGET: DWORD = 0x00044000;
+pub const IMAGE_HOT_PATCH_INDIRECT: DWORD = 0x0005C000;
+pub const IMAGE_HOT_PATCH_NO_CALL_TARGET: DWORD = 0x00064000;
+pub const IMAGE_HOT_PATCH_DYNAMIC_VALUE: DWORD = 0x00078000;
+pub const IMAGE_GUARD_CF_INSTRUMENTED: DWORD = 0x00000100;
+pub const IMAGE_GUARD_CFW_INSTRUMENTED: DWORD = 0x00000200;
+pub const IMAGE_GUARD_CF_FUNCTION_TABLE_PRESENT: DWORD = 0x00000400;
+pub const IMAGE_GUARD_SECURITY_COOKIE_UNUSED: DWORD = 0x00000800;
+pub const IMAGE_GUARD_PROTECT_DELAYLOAD_IAT: DWORD = 0x00001000;
+pub const IMAGE_GUARD_DELAYLOAD_IAT_IN_ITS_OWN_SECTION: DWORD = 0x00002000;
+pub const IMAGE_GUARD_CF_EXPORT_SUPPRESSION_INFO_PRESENT: DWORD = 0x00004000;
+pub const IMAGE_GUARD_CF_ENABLE_EXPORT_SUPPRESSION: DWORD = 0x00008000;
+pub const IMAGE_GUARD_CF_LONGJUMP_TABLE_PRESENT: DWORD = 0x00010000;
+pub const IMAGE_GUARD_RF_INSTRUMENTED: DWORD = 0x00020000;
+pub const IMAGE_GUARD_RF_ENABLE: DWORD = 0x00040000;
+pub const IMAGE_GUARD_RF_STRICT: DWORD = 0x00080000;
+pub const IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_MASK: DWORD = 0xF0000000;
+pub const IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_SHIFT: usize = 28;
+pub const IMAGE_GUARD_FLAG_FID_SUPPRESSED: DWORD = 0x01;
+pub const IMAGE_GUARD_FLAG_EXPORT_SUPPRESSED: DWORD = 0x02;
+STRUCT!{struct IMAGE_CE_RUNTIME_FUNCTION_ENTRY {
+ FuncStart: DWORD,
+ BitFields: DWORD,
+}}
+BITFIELD!{IMAGE_CE_RUNTIME_FUNCTION_ENTRY BitFields: DWORD [
+ PrologLen set_PrologLen[0..8],
+ FuncLen set_FuncLen[8..30],
+ ThirtyTwoBit set_ThirtyTwoBit[30..31],
+ ExceptionFlag set_ExceptionFlag[31..32],
+]}
+pub type PIMAGE_CE_RUNTIME_FUNCTION_ENTRY = *mut IMAGE_CE_RUNTIME_FUNCTION_ENTRY;
+STRUCT!{struct IMAGE_ARM_RUNTIME_FUNCTION_ENTRY {
+ BeginAddress: DWORD,
+ UnwindData: DWORD,
+}}
+BITFIELD!{IMAGE_ARM_RUNTIME_FUNCTION_ENTRY UnwindData: DWORD [
+ Flag set_Flag[0..2],
+ FunctionLength set_FunctionLength[2..13],
+ Ret set_Ret[13..15],
+ H set_H[15..16],
+ Reg set_Reg[16..19],
+ R set_R[19..20],
+ L set_L[20..21],
+ C set_c[21..22],
+ StackAdjust set_StackAdjust[22..32],
+]}
+pub type PIMAGE_ARM_RUNTIME_FUNCTION_ENTRY = *mut IMAGE_ARM_RUNTIME_FUNCTION_ENTRY;
+STRUCT!{struct IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY {
+ BeginAddress: DWORD,
+ UnwindData: DWORD,
+}}
+BITFIELD!{IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY UnwindData: DWORD [
+ Flag set_Flag[0..2],
+ FunctionLength set_FunctionLength[2..13],
+ RegF set_RegF[13..16],
+ RegI set_RegI[16..20],
+ H set_H[20..21],
+ CR set_cR[21..23],
+ FrameSize set_FrameSize[23..32],
+]}
+pub type PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY = *mut IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY;
+STRUCT!{struct IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY {
+ BeginAddress: ULONGLONG,
+ EndAddress: ULONGLONG,
+ ExceptionHandler: ULONGLONG,
+ HandlerData: ULONGLONG,
+ PrologEndAddress: ULONGLONG,
+}}
+pub type PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY = *mut IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY;
+STRUCT!{struct IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY {
+ BeginAddress: DWORD,
+ EndAddress: DWORD,
+ ExceptionHandler: DWORD,
+ HandlerData: DWORD,
+ PrologEndAddress: DWORD,
+}}
+pub type PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY = *mut IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY;
+UNION!{union IMAGE_RUNTIME_FUNCTION_ENTRY_u {
+ [u32; 1],
+ UnwindInfoAddress UnwindInfoAddress_mut: DWORD,
+ UnwindData UnwindData_mut: DWORD,
+}}
+STRUCT!{struct _IMAGE_RUNTIME_FUNCTION_ENTRY {
+ BeginAddress: DWORD,
+ EndAddress: DWORD,
+ u: IMAGE_RUNTIME_FUNCTION_ENTRY_u,
+}}
+pub type _PIMAGE_RUNTIME_FUNCTION_ENTRY = *mut _IMAGE_RUNTIME_FUNCTION_ENTRY;
+pub type IMAGE_IA64_RUNTIME_FUNCTION_ENTRY = _IMAGE_RUNTIME_FUNCTION_ENTRY;
+pub type PIMAGE_IA64_RUNTIME_FUNCTION_ENTRY = _PIMAGE_RUNTIME_FUNCTION_ENTRY;
+#[cfg(target_arch = "aarch64")]
+IFDEF!{
+pub type IMAGE_RUNTIME_FUNCTION_ENTRY = IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY;
+pub type PIMAGE_RUNTIME_FUNCTION_ENTRY = PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY;
+}
+#[cfg(not(target_arch = "aarch64"))]
+IFDEF!{
+pub type IMAGE_RUNTIME_FUNCTION_ENTRY = _IMAGE_RUNTIME_FUNCTION_ENTRY;
+pub type PIMAGE_RUNTIME_FUNCTION_ENTRY = _PIMAGE_RUNTIME_FUNCTION_ENTRY;
+}
+STRUCT!{struct IMAGE_DEBUG_DIRECTORY {
+ Characteristics: DWORD,
+ TimeDateStamp: DWORD,
+ MajorVersion: WORD,
+ MinorVersion: WORD,
+ Type: DWORD,
+ SizeOfData: DWORD,
+ AddressOfRawData: DWORD,
+ PointerToRawData: DWORD,
+}}
+pub type PIMAGE_DEBUG_DIRECTORY = *mut IMAGE_DEBUG_DIRECTORY;
+pub const IMAGE_DEBUG_TYPE_UNKNOWN: DWORD = 0;
+pub const IMAGE_DEBUG_TYPE_COFF: DWORD = 1;
+pub const IMAGE_DEBUG_TYPE_CODEVIEW: DWORD = 2;
+pub const IMAGE_DEBUG_TYPE_FPO: DWORD = 3;
+pub const IMAGE_DEBUG_TYPE_MISC: DWORD = 4;
+pub const IMAGE_DEBUG_TYPE_EXCEPTION: DWORD = 5;
+pub const IMAGE_DEBUG_TYPE_FIXUP: DWORD = 6;
+pub const IMAGE_DEBUG_TYPE_OMAP_TO_SRC: DWORD = 7;
+pub const IMAGE_DEBUG_TYPE_OMAP_FROM_SRC: DWORD = 8;
+pub const IMAGE_DEBUG_TYPE_BORLAND: DWORD = 9;
+pub const IMAGE_DEBUG_TYPE_RESERVED10: DWORD = 10;
+pub const IMAGE_DEBUG_TYPE_CLSID: DWORD = 11;
+pub const IMAGE_DEBUG_TYPE_VC_FEATURE: DWORD = 12;
+pub const IMAGE_DEBUG_TYPE_POGO: DWORD = 13;
+pub const IMAGE_DEBUG_TYPE_ILTCG: DWORD = 14;
+pub const IMAGE_DEBUG_TYPE_MPX: DWORD = 15;
+pub const IMAGE_DEBUG_TYPE_REPRO: DWORD = 16;
+STRUCT!{struct IMAGE_COFF_SYMBOLS_HEADER {
+ NumberOfSymbols: DWORD,
+ LvaToFirstSymbol: DWORD,
+ NumberOfLinenumbers: DWORD,
+ LvaToFirstLinenumber: DWORD,
+ RvaToFirstByteOfCode: DWORD,
+ RvaToLastByteOfCode: DWORD,
+ RvaToFirstByteOfData: DWORD,
+ RvaToLastByteOfData: DWORD,
+}}
+pub type PIMAGE_COFF_SYMBOLS_HEADER = *mut IMAGE_COFF_SYMBOLS_HEADER;
+pub const FRAME_FPO: WORD = 0;
+pub const FRAME_TRAP: WORD = 1;
+pub const FRAME_TSS: WORD = 2;
+pub const FRAME_NONFPO: WORD = 3;
+STRUCT!{struct FPO_DATA {
+ ulOffStart: DWORD,
+ cbProcSize: DWORD,
+ cdwLocals: DWORD,
+ cdwParams: WORD,
+ BitFields: WORD,
+}}
+BITFIELD!{FPO_DATA BitFields: WORD [
+ cbProlog set_cbProlog[0..8],
+ cbRegs set_cbRegs[8..11],
+ fHasSEH set_fHasSEH[11..12],
+ fUseBP set_fUseBP[12..13],
+ reserved set_reserved[13..14],
+ cbFrame set_cbFrame[14..16],
+]}
+pub type PFPO_DATA = *mut FPO_DATA;
+pub const SIZEOF_RFPO_DATA: usize = 16;
+pub const IMAGE_DEBUG_MISC_EXENAME: DWORD = 1;
+STRUCT!{struct IMAGE_DEBUG_MISC {
+ DataType: DWORD,
+ Length: DWORD,
+ Unicode: BOOLEAN,
+ Reserved: [BYTE; 3],
+ Data: [BYTE; 1],
+}}
+pub type PIMAGE_DEBUG_MISC = *mut IMAGE_DEBUG_MISC;
+STRUCT!{struct IMAGE_FUNCTION_ENTRY {
+ StartingAddress: DWORD,
+ EndingAddress: DWORD,
+ EndOfPrologue: DWORD,
+}}
+pub type PIMAGE_FUNCTION_ENTRY = *mut IMAGE_FUNCTION_ENTRY;
+UNION!{union IMAGE_FUNCTION_ENTRY64_u {
+ [u64; 1],
+ EndOfPrologue EndOfPrologue_mut: ULONGLONG,
+ UnwindInfoAddress UnwindInfoAddress_mut: ULONGLONG,
+}}
+STRUCT!{struct IMAGE_FUNCTION_ENTRY64 {
+ StartingAddress: ULONGLONG,
+ EndingAddress: ULONGLONG,
+ u: IMAGE_FUNCTION_ENTRY64_u,
+}}
+pub type PIMAGE_FUNCTION_ENTRY64 = *mut IMAGE_FUNCTION_ENTRY64;
+STRUCT!{struct IMAGE_SEPARATE_DEBUG_HEADER {
+ Signature: WORD,
+ Flags: WORD,
+ Machine: WORD,
+ Characteristics: WORD,
+ TimeDateStamp: DWORD,
+ CheckSum: DWORD,
+ ImageBase: DWORD,
+ SizeOfImage: DWORD,
+ NumberOfSections: DWORD,
+ ExportedNamesSize: DWORD,
+ DebugDirectorySize: DWORD,
+ SectionAlignment: DWORD,
+ Reserved: [DWORD; 2],
+}}
+pub type PIMAGE_SEPARATE_DEBUG_HEADER = *mut IMAGE_SEPARATE_DEBUG_HEADER;
+STRUCT!{struct NON_PAGED_DEBUG_INFO {
+ Signature: WORD,
+ Flags: WORD,
+ Size: DWORD,
+ Machine: WORD,
+ Characteristics: WORD,
+ TimeDateStamp: DWORD,
+ CheckSum: DWORD,
+ SizeOfImage: DWORD,
+ ImageBase: ULONGLONG,
+}}
+pub type PNON_PAGED_DEBUG_INFO = *mut NON_PAGED_DEBUG_INFO;
+pub const IMAGE_SEPARATE_DEBUG_SIGNATURE: WORD = 0x4944;
+pub const NON_PAGED_DEBUG_SIGNATURE: WORD = 0x494E;
+pub const IMAGE_SEPARATE_DEBUG_FLAGS_MASK: WORD = 0x8000;
+pub const IMAGE_SEPARATE_DEBUG_MISMATCH: WORD = 0x8000;
+STRUCT!{struct IMAGE_ARCHITECTURE_HEADER {
+ BitFields: c_uint,
+ FirstEntryRVA: DWORD,
+}}
+BITFIELD!{IMAGE_ARCHITECTURE_HEADER BitFields: c_uint [
+ AmaskValue set_AmaskValue[0..1],
+ unused1 set_unused1[1..8],
+ AmaskShift set_AmaskShift[8..16],
+ unused2 set_unused2[8..32],
+]}
+pub type PIMAGE_ARCHITECTURE_HEADER = *mut IMAGE_ARCHITECTURE_HEADER;
+STRUCT!{struct IMAGE_ARCHITECTURE_ENTRY {
+ FixupInstRVA: DWORD,
+ NewInst: DWORD,
+}}
+pub type PIMAGE_ARCHITECTURE_ENTRY = *mut IMAGE_ARCHITECTURE_ENTRY;
+pub const IMPORT_OBJECT_HDR_SIG2: WORD = 0xffff;
+UNION!{union IMPORT_OBJECT_HEADER_u {
+ [u16; 1],
+ Ordinal Ordinal_mut: WORD,
+ Hint Hint_mut: WORD,
+}}
+STRUCT!{struct IMPORT_OBJECT_HEADER {
+ Sig1: WORD,
+ Sig2: WORD,
+ Version: WORD,
+ Machine: WORD,
+ TimeDateStamp: DWORD,
+ SizeOfData: DWORD,
+ u: IMPORT_OBJECT_HEADER_u,
+ BitFields: WORD,
+}}
+BITFIELD!{IMPORT_OBJECT_HEADER BitFields: WORD [
+ Type set_Type[0..2],
+ NameType set_NameType[2..5],
+ Reserved set_Reserved[5..16],
+]}
+ENUM!{enum IMPORT_OBJECT_TYPE {
+ IMPORT_OBJECT_CODE = 0,
+ IMPORT_OBJECT_DATA = 1,
+ IMPORT_OBJECT_CONST = 2,
+}}
+ENUM!{enum IMPORT_OBJECT_NAME_TYPE {
+ IMPORT_OBJECT_ORDINAL = 0,
+ IMPORT_OBJECT_NAME = 1,
+ IMPORT_OBJECT_NAME_NO_PREFIX = 2,
+ IMPORT_OBJECT_NAME_UNDECORATE = 3,
+ IMPORT_OBJECT_NAME_EXPORTAS = 4,
+}}
+ENUM!{enum ReplacesCorHdrNumericDefines {
+ COMIMAGE_FLAGS_ILONLY = 0x00000001,
+ COMIMAGE_FLAGS_32BITREQUIRED = 0x00000002,
+ COMIMAGE_FLAGS_IL_LIBRARY = 0x00000004,
+ COMIMAGE_FLAGS_STRONGNAMESIGNED = 0x00000008,
+ COMIMAGE_FLAGS_NATIVE_ENTRYPOINT = 0x00000010,
+ COMIMAGE_FLAGS_TRACKDEBUGDATA = 0x00010000,
+ COMIMAGE_FLAGS_32BITPREFERRED = 0x00020000,
+ COR_VERSION_MAJOR_V2 = 2,
+ COR_VERSION_MAJOR = COR_VERSION_MAJOR_V2,
+ COR_VERSION_MINOR = 5,
+ COR_DELETED_NAME_LENGTH = 8,
+ COR_VTABLEGAP_NAME_LENGTH = 8,
+ NATIVE_TYPE_MAX_CB = 1,
+ COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE= 0xFF,
+ IMAGE_COR_MIH_METHODRVA = 0x01,
+ IMAGE_COR_MIH_EHRVA = 0x02,
+ IMAGE_COR_MIH_BASICBLOCK = 0x08,
+ COR_VTABLE_32BIT = 0x01,
+ COR_VTABLE_64BIT = 0x02,
+ COR_VTABLE_FROM_UNMANAGED = 0x04,
+ COR_VTABLE_FROM_UNMANAGED_RETAIN_APPDOMAIN = 0x08,
+ COR_VTABLE_CALL_MOST_DERIVED = 0x10,
+ IMAGE_COR_EATJ_THUNK_SIZE = 32,
+ MAX_CLASS_NAME = 1024,
+ MAX_PACKAGE_NAME = 1024,
+}}
+UNION!{union IMAGE_COR20_HEADER_u {
+ [u32; 1],
+ EntryPointToken EntryPointToken_mut: DWORD,
+ EntryPointRVA EntryPointRVA_mut: DWORD,
+}}
+STRUCT!{struct IMAGE_COR20_HEADER {
+ cb: DWORD,
+ MajorRuntimeVersion: WORD,
+ MinorRuntimeVersion: WORD,
+ MetaData: IMAGE_DATA_DIRECTORY,
+ Flags: DWORD,
+ u: IMAGE_COR20_HEADER_u,
+ Resources: IMAGE_DATA_DIRECTORY,
+ StrongNameSignature: IMAGE_DATA_DIRECTORY,
+ CodeManagerTable: IMAGE_DATA_DIRECTORY,
+ VTableFixups: IMAGE_DATA_DIRECTORY,
+ ExportAddressTableJumps: IMAGE_DATA_DIRECTORY,
+ ManagedNativeHeader: IMAGE_DATA_DIRECTORY,
+}}
+pub type PIMAGE_COR20_HEADER = *mut IMAGE_COR20_HEADER;
+extern "system" {
+ pub fn RtlCaptureStackBackTrace(
+ FramesToSkip: DWORD,
+ FramesToCapture: DWORD,
+ BackTrace: *mut PVOID,
+ BackTraceHash: PDWORD,
+ ) -> WORD;
+ pub fn RtlCaptureContext(
+ ContextRecord: PCONTEXT,
+ );
+ pub fn RtlUnwind(
+ TargetFrame: PVOID,
+ TargetIp: PVOID,
+ ExceptionRecord: PEXCEPTION_RECORD,
+ ReturnValue: PVOID,
+ );
+}
+#[cfg(target_pointer_width = "64")]
+extern "system" {
+ pub fn RtlAddFunctionTable(
+ FunctionTable: PRUNTIME_FUNCTION,
+ EntryCount: DWORD,
+ BaseAddress: DWORD64,
+ ) -> BOOLEAN;
+ pub fn RtlDeleteFunctionTable(
+ FunctionTable: PRUNTIME_FUNCTION,
+ ) -> BOOLEAN;
+ pub fn RtlInstallFunctionTableCallback(
+ TableIdentifier: DWORD64,
+ BaseAddress: DWORD64,
+ Length: DWORD,
+ Callback: PGET_RUNTIME_FUNCTION_CALLBACK,
+ Context: PVOID,
+ OutOfProcessCallbackDll: PCWSTR,
+ ) -> BOOLEAN;
+ pub fn RtlAddGrowableFunctionTable(
+ DynamicTable: *mut PVOID,
+ FunctionTable: PRUNTIME_FUNCTION,
+ EntryCount: DWORD,
+ MaximumEntryCount: DWORD,
+ RangeBase: ULONG_PTR,
+ RangeEnd: ULONG_PTR,
+ ) -> DWORD;
+ pub fn RtlGrowFunctionTable(
+ DynamicTable: PVOID,
+ NewEntryCount: DWORD,
+ );
+ pub fn RtlDeleteGrowableFunctionTable(
+ DynamicTable: PVOID,
+ );
+ pub fn RtlLookupFunctionEntry(
+ ControlPc: DWORD64,
+ ImageBase: PDWORD64,
+ HistoryTable: PUNWIND_HISTORY_TABLE,
+ ) -> PRUNTIME_FUNCTION;
+}
+#[cfg(target_arch = "x86_64")]
+IFDEF!{
+extern "C" {
+ pub fn RtlRestoreContext(
+ ContextRecord: PCONTEXT,
+ ExceptionRecord: *mut EXCEPTION_RECORD,
+ );
+}
+extern "system" {
+ pub fn RtlUnwindEx(
+ TargetFrame: PVOID,
+ TargetIp: PVOID,
+ ExceptionRecord: PEXCEPTION_RECORD,
+ ReturnValue: PVOID,
+ ContextRecord: PCONTEXT,
+ HistoryTable: PUNWIND_HISTORY_TABLE,
+ );
+ pub fn RtlVirtualUnwind(
+ HandlerType: DWORD,
+ ImageBase: DWORD64,
+ ControlPc: DWORD64,
+ FunctionEntry: PRUNTIME_FUNCTION,
+ ContextRecord: PCONTEXT,
+ HandlerData: *mut PVOID,
+ EstablisherFrame: PDWORD64,
+ ContextPointers: PKNONVOLATILE_CONTEXT_POINTERS,
+ ) -> PEXCEPTION_ROUTINE;
+}
+}
+extern "system" {
+ pub fn RtlPcToFileHeader(
+ PcValue: PVOID,
+ BaseOfImage: *mut PVOID,
+ ) -> PVOID;
+ pub fn RtlCompareMemory(
+ Source1: *const VOID,
+ Source2: *const VOID,
+ Length: SIZE_T,
+ ) -> SIZE_T;
+}
+STRUCT!{struct SLIST_ENTRY {
+ Next: *mut SLIST_ENTRY,
+}}
+pub type PSLIST_ENTRY = *mut SLIST_ENTRY;
+#[cfg(target_pointer_width = "64")]
+IFDEF!{
+STRUCT!{struct SLIST_HEADER_s {
+ Alignment: ULONGLONG,
+ Region: ULONGLONG,
+}}
+STRUCT!{struct SLIST_HEADER_HeaderX64 {
+ BitFields1: ULONGLONG,
+ BitFields2: ULONGLONG,
+}}
+BITFIELD!{SLIST_HEADER_HeaderX64 BitFields1: ULONGLONG [
+ Depth set_Depth[0..16],
+ Sequence set_Sequence[16..64],
+]}
+BITFIELD!{SLIST_HEADER_HeaderX64 BitFields2: ULONGLONG [
+ Reserved set_Reserved[0..4],
+ NextEntry set_NextEntry[4..64],
+]}
+UNION!{union SLIST_HEADER {
+ [u64; 2],
+ s s_mut: SLIST_HEADER_s,
+ HeaderX64 HeaderX64_mut: SLIST_HEADER_HeaderX64,
+}}
+pub type PSLIST_HEADER = *mut SLIST_HEADER;
+}
+#[cfg(target_pointer_width = "32")]
+IFDEF!{
+STRUCT!{struct SLIST_HEADER_s {
+ Next: SLIST_ENTRY,
+ Depth: WORD,
+ Reserved: WORD,
+}}
+UNION!{union SLIST_HEADER {
+ [u64; 1],
+ Alignment Alignment_mut: ULONGLONG,
+ s s_mut: SLIST_HEADER_s,
+}}
+pub type PSLIST_HEADER = *mut SLIST_HEADER;
+}
+extern "system" {
+ pub fn RtlInitializeSListHead(
+ ListHead: PSLIST_HEADER,
+ );
+ pub fn RtlFirstEntrySList(
+ ListHead: *const SLIST_HEADER,
+ ) -> PSLIST_ENTRY;
+ pub fn RtlInterlockedPopEntrySList(
+ ListHead: PSLIST_HEADER,
+ ) -> PSLIST_ENTRY;
+ pub fn RtlInterlockedPushEntrySList(
+ ListHead: PSLIST_HEADER,
+ ListEntry: PSLIST_ENTRY,
+ ) -> PSLIST_ENTRY;
+ pub fn RtlInterlockedPushListSListEx(
+ ListHead: PSLIST_HEADER,
+ ListEntry: PSLIST_ENTRY,
+ ListEnd: PSLIST_ENTRY,
+ Count: DWORD,
+ ) -> PSLIST_ENTRY;
+ pub fn RtlInterlockedFlushSList(
+ ListHead: PSLIST_HEADER,
+ ) -> PSLIST_ENTRY;
+ pub fn RtlQueryDepthSList(
+ ListHead: PSLIST_HEADER,
+ ) -> WORD;
+}
+pub const RTL_RUN_ONCE_INIT: RTL_RUN_ONCE = RTL_RUN_ONCE { Ptr: 0 as PVOID };
+pub const RTL_RUN_ONCE_CHECK_ONLY: ULONG = 0x00000001;
+pub const RTL_RUN_ONCE_ASYNC: ULONG = 0x00000002;
+pub const RTL_RUN_ONCE_INIT_FAILED: ULONG = 0x00000004;
+STRUCT!{struct RTL_RUN_ONCE {
+ Ptr: PVOID,
+}}
+pub type PRTL_RUN_ONCE = *mut RTL_RUN_ONCE;
+STRUCT!{struct RTL_BARRIER {
+ Reserved1: DWORD,
+ Reserved2: DWORD,
+ Reserved3: [ULONG_PTR; 2],
+ Reserved4: DWORD,
+ Reserved5: DWORD,
+}}
+pub type PRTL_BARRIER = *mut RTL_BARRIER;
+pub const FAST_FAIL_LEGACY_GS_VIOLATION: c_uint = 0;
+pub const FAST_FAIL_VTGUARD_CHECK_FAILURE: c_uint = 1;
+pub const FAST_FAIL_STACK_COOKIE_CHECK_FAILURE: c_uint = 2;
+pub const FAST_FAIL_CORRUPT_LIST_ENTRY: c_uint = 3;
+pub const FAST_FAIL_INCORRECT_STACK: c_uint = 4;
+pub const FAST_FAIL_INVALID_ARG: c_uint = 5;
+pub const FAST_FAIL_GS_COOKIE_INIT: c_uint = 6;
+pub const FAST_FAIL_FATAL_APP_EXIT: c_uint = 7;
+pub const FAST_FAIL_RANGE_CHECK_FAILURE: c_uint = 8;
+pub const FAST_FAIL_UNSAFE_REGISTRY_ACCESS: c_uint = 9;
+pub const FAST_FAIL_GUARD_ICALL_CHECK_FAILURE: c_uint = 10;
+pub const FAST_FAIL_GUARD_WRITE_CHECK_FAILURE: c_uint = 11;
+pub const FAST_FAIL_INVALID_FIBER_SWITCH: c_uint = 12;
+pub const FAST_FAIL_INVALID_SET_OF_CONTEXT: c_uint = 13;
+pub const FAST_FAIL_INVALID_REFERENCE_COUNT: c_uint = 14;
+pub const FAST_FAIL_INVALID_JUMP_BUFFER: c_uint = 18;
+pub const FAST_FAIL_MRDATA_MODIFIED: c_uint = 19;
+pub const FAST_FAIL_CERTIFICATION_FAILURE: c_uint = 20;
+pub const FAST_FAIL_INVALID_EXCEPTION_CHAIN: c_uint = 21;
+pub const FAST_FAIL_CRYPTO_LIBRARY: c_uint = 22;
+pub const FAST_FAIL_INVALID_CALL_IN_DLL_CALLOUT: c_uint = 23;
+pub const FAST_FAIL_INVALID_IMAGE_BASE: c_uint = 24;
+pub const FAST_FAIL_DLOAD_PROTECTION_FAILURE: c_uint = 25;
+pub const FAST_FAIL_UNSAFE_EXTENSION_CALL: c_uint = 26;
+pub const FAST_FAIL_DEPRECATED_SERVICE_INVOKED: c_uint = 27;
+pub const FAST_FAIL_INVALID_BUFFER_ACCESS: c_uint = 28;
+pub const FAST_FAIL_INVALID_BALANCED_TREE: c_uint = 29;
+pub const FAST_FAIL_INVALID_NEXT_THREAD: c_uint = 30;
+pub const FAST_FAIL_GUARD_ICALL_CHECK_SUPPRESSED: c_uint = 31;
+pub const FAST_FAIL_APCS_DISABLED: c_uint = 32;
+pub const FAST_FAIL_INVALID_IDLE_STATE: c_uint = 33;
+pub const FAST_FAIL_MRDATA_PROTECTION_FAILURE: c_uint = 34;
+pub const FAST_FAIL_UNEXPECTED_HEAP_EXCEPTION: c_uint = 35;
+pub const FAST_FAIL_INVALID_LOCK_STATE: c_uint = 36;
+pub const FAST_FAIL_GUARD_JUMPTABLE: c_uint = 37;
+pub const FAST_FAIL_INVALID_LONGJUMP_TARGET: c_uint = 38;
+pub const FAST_FAIL_INVALID_DISPATCH_CONTEXT: c_uint = 39;
+pub const FAST_FAIL_INVALID_THREAD: c_uint = 40;
+pub const FAST_FAIL_INVALID_SYSCALL_NUMBER: c_uint = 41;
+pub const FAST_FAIL_INVALID_FILE_OPERATION: c_uint = 42;
+pub const FAST_FAIL_LPAC_ACCESS_DENIED: c_uint = 43;
+pub const FAST_FAIL_GUARD_SS_FAILURE: c_uint = 44;
+pub const FAST_FAIL_LOADER_CONTINUITY_FAILURE: c_uint = 45;
+pub const FAST_FAIL_GUARD_EXPORT_SUPPRESSION_FAILURE: c_uint = 46;
+pub const FAST_FAIL_INVALID_CONTROL_STACK: c_uint = 47;
+pub const FAST_FAIL_SET_CONTEXT_DENIED: c_uint = 48;
+pub const FAST_FAIL_INVALID_FAST_FAIL_CODE: c_uint = 0xFFFFFFFF;
+pub const HEAP_NO_SERIALIZE: DWORD = 0x00000001;
+pub const HEAP_GROWABLE: DWORD = 0x00000002;
+pub const HEAP_GENERATE_EXCEPTIONS: DWORD = 0x00000004;
+pub const HEAP_ZERO_MEMORY: DWORD = 0x00000008;
+pub const HEAP_REALLOC_IN_PLACE_ONLY: DWORD = 0x00000010;
+pub const HEAP_TAIL_CHECKING_ENABLED: DWORD = 0x00000020;
+pub const HEAP_FREE_CHECKING_ENABLED: DWORD = 0x00000040;
+pub const HEAP_DISABLE_COALESCE_ON_FREE: DWORD = 0x00000080;
+pub const HEAP_CREATE_ALIGN_16: DWORD = 0x00010000;
+pub const HEAP_CREATE_ENABLE_TRACING: DWORD = 0x00020000;
+pub const HEAP_CREATE_ENABLE_EXECUTE: DWORD = 0x00040000;
+pub const HEAP_MAXIMUM_TAG: DWORD = 0x0FFF;
+pub const HEAP_PSEUDO_TAG_FLAG: DWORD = 0x8000;
+pub const HEAP_TAG_SHIFT: usize = 18;
+pub const HEAP_CREATE_SEGMENT_HEAP: DWORD = 0x00000100;
+pub const HEAP_CREATE_HARDENED: DWORD = 0x00000200;
+#[inline]
+pub fn HEAP_MAKE_TAG_FLAGS(TagBase: DWORD, Tag: DWORD) -> DWORD {
+ TagBase + (Tag << HEAP_TAG_SHIFT)
+}
+pub const IS_TEXT_UNICODE_ASCII16: INT = 0x0001;
+pub const IS_TEXT_UNICODE_REVERSE_ASCII16: INT = 0x0010;
+pub const IS_TEXT_UNICODE_STATISTICS: INT = 0x0002;
+pub const IS_TEXT_UNICODE_REVERSE_STATISTICS: INT = 0x0020;
+pub const IS_TEXT_UNICODE_CONTROLS: INT = 0x0004;
+pub const IS_TEXT_UNICODE_REVERSE_CONTROLS: INT = 0x0040;
+pub const IS_TEXT_UNICODE_SIGNATURE: INT = 0x0008;
+pub const IS_TEXT_UNICODE_REVERSE_SIGNATURE: INT = 0x0080;
+pub const IS_TEXT_UNICODE_ILLEGAL_CHARS: INT = 0x0100;
+pub const IS_TEXT_UNICODE_ODD_LENGTH: INT = 0x0200;
+pub const IS_TEXT_UNICODE_DBCS_LEADBYTE: INT = 0x0400;
+pub const IS_TEXT_UNICODE_NULL_BYTES: INT = 0x1000;
+pub const IS_TEXT_UNICODE_UNICODE_MASK: INT = 0x000F;
+pub const IS_TEXT_UNICODE_REVERSE_MASK: INT = 0x00F0;
+pub const IS_TEXT_UNICODE_NOT_UNICODE_MASK: INT = 0x0F00;
+pub const IS_TEXT_UNICODE_NOT_ASCII_MASK: INT = 0xF000;
+pub const COMPRESSION_FORMAT_NONE: USHORT = 0x0000;
+pub const COMPRESSION_FORMAT_DEFAULT: USHORT = 0x0001;
+pub const COMPRESSION_FORMAT_LZNT1: USHORT = 0x0002;
+pub const COMPRESSION_FORMAT_XPRESS: USHORT = 0x0003;
+pub const COMPRESSION_FORMAT_XPRESS_HUFF: USHORT = 0x0004;
+pub const COMPRESSION_ENGINE_STANDARD: USHORT = 0x0000;
+pub const COMPRESSION_ENGINE_MAXIMUM: USHORT = 0x0100;
+pub const COMPRESSION_ENGINE_HIBER: USHORT = 0x0200;
+// RtlEqualMemory
+#[inline]
+pub unsafe fn RtlMoveMemory(Destination: *mut c_void, Source: *const c_void, Length: usize) {
+ use core::ptr::copy;
+ copy(Source as *const u8, Destination as *mut u8, Length);
+}
+#[inline]
+pub unsafe fn RtlCopyMemory(Destination: *mut c_void, Source: *const c_void, Length: usize) {
+ use core::ptr::copy_nonoverlapping;
+ copy_nonoverlapping(Source as *const u8, Destination as *mut u8, Length);
+}
+#[inline]
+pub unsafe fn RtlFillMemory(Destination: *mut c_void, Length: usize, Fill: u8) {
+ use core::ptr::write_bytes;
+ write_bytes(Destination as *mut u8, Fill, Length);
+}
+#[inline]
+pub unsafe fn RtlZeroMemory(Destination: *mut c_void, Length: usize) {
+ use core::ptr::write_bytes;
+ write_bytes(Destination as *mut u8, 0, Length);
+}
+pub const SEF_DACL_AUTO_INHERIT: ULONG = 0x01;
+pub const SEF_SACL_AUTO_INHERIT: ULONG = 0x02;
+pub const SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT: ULONG = 0x04;
+pub const SEF_AVOID_PRIVILEGE_CHECK: ULONG = 0x08;
+pub const SEF_AVOID_OWNER_CHECK: ULONG = 0x10;
+pub const SEF_DEFAULT_OWNER_FROM_PARENT: ULONG = 0x20;
+pub const SEF_DEFAULT_GROUP_FROM_PARENT: ULONG = 0x40;
+pub const SEF_MACL_NO_WRITE_UP: ULONG = 0x100;
+pub const SEF_MACL_NO_READ_UP: ULONG = 0x200;
+pub const SEF_MACL_NO_EXECUTE_UP: ULONG = 0x400;
+pub const SEF_AI_USE_EXTRA_PARAMS: ULONG = 0x800;
+pub const SEF_AVOID_OWNER_RESTRICTION: ULONG = 0x1000;
+pub const SEF_MACL_VALID_FLAGS: ULONG = SEF_MACL_NO_WRITE_UP | SEF_MACL_NO_READ_UP
+ | SEF_MACL_NO_EXECUTE_UP;
+STRUCT!{struct MESSAGE_RESOURCE_ENTRY {
+ Length: WORD,
+ Flags: WORD,
+ Text: [BYTE; 1],
+}}
+pub type PMESSAGE_RESOURCE_ENTRY = *mut MESSAGE_RESOURCE_ENTRY;
+pub const MESSAGE_RESOURCE_UNICODE: WORD = 0x0001;
+STRUCT!{struct MESSAGE_RESOURCE_BLOCK {
+ LowId: DWORD,
+ HighId: DWORD,
+ OffsetToEntries: DWORD,
+}}
+pub type PMESSAGE_RESOURCE_BLOCK = *mut MESSAGE_RESOURCE_BLOCK;
+STRUCT!{struct MESSAGE_RESOURCE_DATA {
+ NumberOfBlocks: DWORD,
+ Blocks: [MESSAGE_RESOURCE_BLOCK; 1],
+}}
+pub type PMESSAGE_RESOURCE_DATA = *mut MESSAGE_RESOURCE_DATA;
+STRUCT!{struct OSVERSIONINFOA {
+ dwOSVersionInfoSize: DWORD,
+ dwMajorVersion: DWORD,
+ dwMinorVersion: DWORD,
+ dwBuildNumber: DWORD,
+ dwPlatformId: DWORD,
+ szCSDVersion: [CHAR; 128],
+}}
+pub type POSVERSIONINFOA = *mut OSVERSIONINFOA;
+pub type LPOSVERSIONINFOA = *mut OSVERSIONINFOA;
+STRUCT!{struct OSVERSIONINFOW {
+ dwOSVersionInfoSize: DWORD,
+ dwMajorVersion: DWORD,
+ dwMinorVersion: DWORD,
+ dwBuildNumber: DWORD,
+ dwPlatformId: DWORD,
+ szCSDVersion: [WCHAR; 128],
+}}
+pub type POSVERSIONINFOW = *mut OSVERSIONINFOW;
+pub type LPOSVERSIONINFOW = *mut OSVERSIONINFOW;
+pub type RTL_OSVERSIONINFOW = OSVERSIONINFOW;
+pub type PRTL_OSVERSIONINFOW = *mut OSVERSIONINFOW;
+STRUCT!{struct OSVERSIONINFOEXA {
+ dwOSVersionInfoSize: DWORD,
+ dwMajorVersion: DWORD,
+ dwMinorVersion: DWORD,
+ dwBuildNumber: DWORD,
+ dwPlatformId: DWORD,
+ szCSDVersion: [CHAR; 128],
+ wServicePackMajor: WORD,
+ wServicePackMinor: WORD,
+ wSuiteMask: WORD,
+ wProductType: BYTE,
+ wReserved: BYTE,
+}}
+pub type POSVERSIONINFOEXA = *mut OSVERSIONINFOEXA;
+pub type LPOSVERSIONINFOEXA = *mut OSVERSIONINFOEXA;
+STRUCT!{struct OSVERSIONINFOEXW {
+ dwOSVersionInfoSize: DWORD,
+ dwMajorVersion: DWORD,
+ dwMinorVersion: DWORD,
+ dwBuildNumber: DWORD,
+ dwPlatformId: DWORD,
+ szCSDVersion: [WCHAR; 128],
+ wServicePackMajor: WORD,
+ wServicePackMinor: WORD,
+ wSuiteMask: WORD,
+ wProductType: BYTE,
+ wReserved: BYTE,
+}}
+pub type POSVERSIONINFOEXW = *mut OSVERSIONINFOEXW;
+pub type LPOSVERSIONINFOEXW = *mut OSVERSIONINFOEXW;
+pub type RTL_OSVERSIONINFOEXW = OSVERSIONINFOEXW;
+pub type PRTL_OSVERSIONINFOEXW = *mut OSVERSIONINFOEXW;
+pub const VER_EQUAL: BYTE = 1;
+pub const VER_GREATER: BYTE = 2;
+pub const VER_GREATER_EQUAL: BYTE = 3;
+pub const VER_LESS: BYTE = 4;
+pub const VER_LESS_EQUAL: BYTE = 5;
+pub const VER_AND: BYTE = 6;
+pub const VER_OR: BYTE = 7;
+pub const VER_CONDITION_MASK: BYTE = 7;
+pub const VER_NUM_BITS_PER_CONDITION_MASK: BYTE = 3;
+pub const VER_MINORVERSION: DWORD = 0x0000001;
+pub const VER_MAJORVERSION: DWORD = 0x0000002;
+pub const VER_BUILDNUMBER: DWORD = 0x0000004;
+pub const VER_PLATFORMID: DWORD = 0x0000008;
+pub const VER_SERVICEPACKMINOR: DWORD = 0x0000010;
+pub const VER_SERVICEPACKMAJOR: DWORD = 0x0000020;
+pub const VER_SUITENAME: DWORD = 0x0000040;
+pub const VER_PRODUCT_TYPE: DWORD = 0x0000080;
+pub const VER_NT_WORKSTATION: BYTE = 0x0000001;
+pub const VER_NT_DOMAIN_CONTROLLER: BYTE = 0x0000002;
+pub const VER_NT_SERVER: BYTE = 0x0000003;
+pub const VER_PLATFORM_WIN32s: DWORD = 0;
+pub const VER_PLATFORM_WIN32_WINDOWS: DWORD = 1;
+pub const VER_PLATFORM_WIN32_NT: DWORD = 2;
+extern "system" {
+ pub fn VerSetConditionMask(
+ ConditionMask: ULONGLONG,
+ TypeMask: DWORD,
+ Condition: BYTE,
+ ) -> ULONGLONG;
+ pub fn RtlGetProductInfo(
+ OSMajorVersion: DWORD,
+ OSMinorVersion: DWORD,
+ SpMajorVersion: DWORD,
+ SpMinorVersion: DWORD,
+ ReturnedProductType: PDWORD,
+ ) -> BOOLEAN;
+}
+pub const RTL_UMS_VERSION: DWORD = 0x100;
+ENUM!{enum RTL_UMS_THREAD_INFO_CLASS {
+ UmsThreadInvalidInfoClass = 0,
+ UmsThreadUserContext,
+ UmsThreadPriority,
+ UmsThreadAffinity,
+ UmsThreadTeb,
+ UmsThreadIsSuspended,
+ UmsThreadIsTerminated,
+ UmsThreadMaxInfoClass,
+}}
+ENUM!{enum RTL_UMS_SCHEDULER_REASON {
+ UmsSchedulerStartup = 0,
+ UmsSchedulerThreadBlocked,
+ UmsSchedulerThreadYield,
+}}
+FN!{stdcall PRTL_UMS_SCHEDULER_ENTRY_POINT(
+ Reason: RTL_UMS_SCHEDULER_REASON,
+ ActivationPayload: ULONG_PTR,
+ SchedulerParam: PVOID,
+) -> ()}
+#[inline]
+pub fn IS_VALIDATION_ENABLED(C: DWORD, L: DWORD) -> bool {
+ (L & C) != 0
+}
+pub const VRL_PREDEFINED_CLASS_BEGIN: DWORD = 1 << 0;
+pub const VRL_CUSTOM_CLASS_BEGIN: DWORD = 1 << 8;
+pub const VRL_CLASS_CONSISTENCY: DWORD = VRL_CUSTOM_CLASS_BEGIN << 8;
+pub const VRL_ENABLE_KERNEL_BREAKS: DWORD = 1 << 31;
+pub const CTMF_INCLUDE_APPCONTAINER: ULONG = 0x00000001;
+pub const CTMF_INCLUDE_LPAC: ULONG = 0x00000002;
+pub const CTMF_VALID_FLAGS: ULONG = CTMF_INCLUDE_APPCONTAINER | CTMF_INCLUDE_LPAC;
+extern "system" {
+ pub fn RtlCrc32(
+ Buffer: *const c_void,
+ Size: size_t,
+ InitialCrc: DWORD,
+ ) -> DWORD;
+ pub fn RtlCrc64(
+ Buffer: *const c_void,
+ Size: size_t,
+ InitialCrc: ULONGLONG,
+ ) -> ULONGLONG;
+}
+ENUM!{enum OS_DEPLOYEMENT_STATE_VALUES {
+ OS_DEPLOYMENT_STANDARD = 1,
+ OS_DEPLOYMENT_COMPACT,
+}}
+extern "system" {
+ pub fn RtlOsDeploymentState(
+ Flags: DWORD,
+ ) -> OS_DEPLOYEMENT_STATE_VALUES;
+}
+#[cfg(target_arch = "x86_64")]
+IFDEF!{
+STRUCT!{struct NV_MEMORY_RANGE {
+ BaseAddress: *mut VOID,
+ Length: SIZE_T,
+}}
+pub type PNV_MEMORY_RANGE = *mut NV_MEMORY_RANGE;
+pub const FLUSH_NV_MEMORY_IN_FLAG_NO_DRAIN: ULONG = 0x00000001;
+pub const FLUSH_NV_MEMORY_DEFAULT_TOKEN: ULONG_PTR = -1isize as usize;
+}
+STRUCT!{struct RTL_CRITICAL_SECTION_DEBUG {
+ Type: WORD,
+ CreatorBackTraceIndex: WORD,
+ CriticalSection: *mut RTL_CRITICAL_SECTION,
+ ProcessLocksList: LIST_ENTRY,
+ EntryCount: DWORD,
+ ContentionCount: DWORD,
+ Flags: DWORD,
+ CreatorBackTraceIndexHigh: WORD,
+ SpareWORD: WORD,
+}}
+pub type PRTL_CRITICAL_SECTION_DEBUG = *mut RTL_CRITICAL_SECTION_DEBUG;
+pub type RTL_RESOURCE_DEBUG = RTL_CRITICAL_SECTION_DEBUG;
+pub type PRTL_RESOURCE_DEBUG = *mut RTL_CRITICAL_SECTION_DEBUG;
+pub const RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO: ULONG_PTR = 0x01000000;
+pub const RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN: ULONG_PTR = 0x02000000;
+pub const RTL_CRITICAL_SECTION_FLAG_STATIC_INIT: ULONG_PTR = 0x04000000;
+pub const RTL_CRITICAL_SECTION_FLAG_RESOURCE_TYPE: ULONG_PTR = 0x08000000;
+pub const RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO: ULONG_PTR = 0x10000000;
+pub const RTL_CRITICAL_SECTION_ALL_FLAG_BITS: ULONG_PTR = 0xFF000000;
+pub const RTL_CRITICAL_SECTION_FLAG_RESERVED: ULONG_PTR = RTL_CRITICAL_SECTION_ALL_FLAG_BITS
+ & !(RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO | RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN
+ | RTL_CRITICAL_SECTION_FLAG_STATIC_INIT | RTL_CRITICAL_SECTION_FLAG_RESOURCE_TYPE
+ | RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO);
+pub const RTL_CRITICAL_SECTION_DEBUG_FLAG_STATIC_INIT: DWORD = 0x00000001;
+STRUCT!{struct RTL_CRITICAL_SECTION {
+ DebugInfo: PRTL_CRITICAL_SECTION_DEBUG,
+ LockCount: LONG,
+ RecursionCount: LONG,
+ OwningThread: HANDLE,
+ LockSemaphore: HANDLE,
+ SpinCount: ULONG_PTR,
+}}
+pub type PRTL_CRITICAL_SECTION = *mut RTL_CRITICAL_SECTION;
+STRUCT!{struct RTL_SRWLOCK {
+ Ptr: PVOID,
+}}
+pub type PRTL_SRWLOCK = *mut RTL_SRWLOCK;
+pub const RTL_SRWLOCK_INIT: RTL_SRWLOCK = RTL_SRWLOCK { Ptr: 0 as PVOID };
+STRUCT!{struct RTL_CONDITION_VARIABLE {
+ Ptr: PVOID,
+}}
+pub type PRTL_CONDITION_VARIABLE = *mut RTL_CONDITION_VARIABLE;
+pub const RTL_CONDITION_VARIABLE_INIT: RTL_CONDITION_VARIABLE = RTL_CONDITION_VARIABLE {
+ Ptr: 0 as PVOID,
+};
+pub const RTL_CONDITION_VARIABLE_LOCKMODE_SHARED: DWORD = 0x1;
+FN!{stdcall PAPCFUNC(
+ Parameter: ULONG_PTR,
+) -> ()}
+FN!{stdcall PVECTORED_EXCEPTION_HANDLER(
+ ExceptionInfo: *mut EXCEPTION_POINTERS,
+) -> LONG}
+ENUM!{enum HEAP_INFORMATION_CLASS {
+ HeapCompatibilityInformation = 0,
+ HeapEnableTerminationOnCorruption = 1,
+ HeapOptimizeResources = 3,
+}}
+pub const HEAP_OPTIMIZE_RESOURCES_CURRENT_VERSION: DWORD = 1;
+STRUCT!{struct HEAP_OPTIMIZE_RESOURCES_INFORMATION {
+ Version: DWORD,
+ Flags: DWORD,
+}}
+pub type PHEAP_OPTIMIZE_RESOURCES_INFORMATION = *mut HEAP_OPTIMIZE_RESOURCES_INFORMATION;
+pub const WT_EXECUTEDEFAULT: ULONG = 0x00000000;
+pub const WT_EXECUTEINIOTHREAD: ULONG = 0x00000001;
+pub const WT_EXECUTEINUITHREAD: ULONG = 0x00000002;
+pub const WT_EXECUTEINWAITTHREAD: ULONG = 0x00000004;
+pub const WT_EXECUTEONLYONCE: ULONG = 0x00000008;
+pub const WT_EXECUTEINTIMERTHREAD: ULONG = 0x00000020;
+pub const WT_EXECUTELONGFUNCTION: ULONG = 0x00000010;
+pub const WT_EXECUTEINPERSISTENTIOTHREAD: ULONG = 0x00000040;
+pub const WT_EXECUTEINPERSISTENTTHREAD: ULONG = 0x00000080;
+pub const WT_TRANSFER_IMPERSONATION: ULONG = 0x00000100;
+#[inline]
+pub fn WT_SET_MAX_THREADPOOL_THREADS(Flags: ULONG, Limit: ULONG) -> ULONG {
+ Flags | (Limit << 16)
+}
+FN!{stdcall WAITORTIMERCALLBACKFUNC(
+ PVOID,
+ BOOLEAN,
+) -> ()}
+FN!{stdcall WORKERCALLBACKFUNC(
+ PVOID,
+) -> ()}
+FN!{stdcall APC_CALLBACK_FUNCTION(
+ DWORD,
+ PVOID,
+ PVOID,
+) -> ()}
+pub type WAITORTIMERCALLBACK = WAITORTIMERCALLBACKFUNC;
+FN!{stdcall PFLS_CALLBACK_FUNCTION(
+ lpFlsData: PVOID,
+) -> ()}
+FN!{stdcall PSECURE_MEMORY_CACHE_CALLBACK(
+ Addr: PVOID,
+ Range: SIZE_T,
+) -> BOOLEAN}
+pub const WT_EXECUTEINLONGTHREAD: ULONG = 0x00000010;
+pub const WT_EXECUTEDELETEWAIT: ULONG = 0x00000008;
+ENUM!{enum ACTIVATION_CONTEXT_INFO_CLASS {
+ ActivationContextBasicInformation = 1,
+ ActivationContextDetailedInformation = 2,
+ AssemblyDetailedInformationInActivationContext = 3,
+ FileInformationInAssemblyOfAssemblyInActivationContext = 4,
+ RunlevelInformationInActivationContext = 5,
+ CompatibilityInformationInActivationContext = 6,
+ ActivationContextManifestResourceName = 7,
+ MaxActivationContextInfoClass,
+ AssemblyDetailedInformationInActivationContxt = 3,
+ FileInformationInAssemblyOfAssemblyInActivationContxt = 4,
+}}
+pub type ACTIVATIONCONTEXTINFOCLASS = ACTIVATION_CONTEXT_INFO_CLASS;
+STRUCT!{struct ACTIVATION_CONTEXT_QUERY_INDEX {
+ ulAssemblyIndex: DWORD,
+ ulFileIndexInAssembly: DWORD,
+}}
+pub type PACTIVATION_CONTEXT_QUERY_INDEX = *mut ACTIVATION_CONTEXT_QUERY_INDEX;
+pub type PCACTIVATION_CONTEXT_QUERY_INDEX = *const ACTIVATION_CONTEXT_QUERY_INDEX;
+pub const ACTIVATION_CONTEXT_PATH_TYPE_NONE: DWORD = 1;
+pub const ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE: DWORD = 2;
+pub const ACTIVATION_CONTEXT_PATH_TYPE_URL: DWORD = 3;
+pub const ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF: DWORD = 4;
+STRUCT!{struct ASSEMBLY_FILE_DETAILED_INFORMATION {
+ ulFlags: DWORD,
+ ulFilenameLength: DWORD,
+ ulPathLength: DWORD,
+ lpFileName: PCWSTR,
+ lpFilePath: PCWSTR,
+}}
+pub type PASSEMBLY_FILE_DETAILED_INFORMATION = *mut ASSEMBLY_FILE_DETAILED_INFORMATION;
+pub type PCASSEMBLY_FILE_DETAILED_INFORMATION = *const ASSEMBLY_FILE_DETAILED_INFORMATION;
+pub type ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION = ASSEMBLY_FILE_DETAILED_INFORMATION;
+pub type PASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION = PASSEMBLY_FILE_DETAILED_INFORMATION;
+pub type PCASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION = PCASSEMBLY_FILE_DETAILED_INFORMATION;
+STRUCT!{struct ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION {
+ ulFlags: DWORD,
+ ulEncodedAssemblyIdentityLength: DWORD,
+ ulManifestPathType: DWORD,
+ ulManifestPathLength: DWORD,
+ liManifestLastWriteTime: LARGE_INTEGER,
+ ulPolicyPathType: DWORD,
+ ulPolicyPathLength: DWORD,
+ liPolicyLastWriteTime: LARGE_INTEGER,
+ ulMetadataSatelliteRosterIndex: DWORD,
+ ulManifestVersionMajor: DWORD,
+ ulManifestVersionMinor: DWORD,
+ ulPolicyVersionMajor: DWORD,
+ ulPolicyVersionMinor: DWORD,
+ ulAssemblyDirectoryNameLength: DWORD,
+ lpAssemblyEncodedAssemblyIdentity: PCWSTR,
+ lpAssemblyManifestPath: PCWSTR,
+ lpAssemblyPolicyPath: PCWSTR,
+ lpAssemblyDirectoryName: PCWSTR,
+ ulFileCount: DWORD,
+}}
+pub type PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
+ = *mut ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
+pub type PCACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
+ = *const ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
+ENUM!{enum ACTCTX_REQUESTED_RUN_LEVEL {
+ ACTCTX_RUN_LEVEL_UNSPECIFIED = 0,
+ ACTCTX_RUN_LEVEL_AS_INVOKER,
+ ACTCTX_RUN_LEVEL_HIGHEST_AVAILABLE,
+ ACTCTX_RUN_LEVEL_REQUIRE_ADMIN,
+ ACTCTX_RUN_LEVEL_NUMBERS,
+}}
+STRUCT!{struct ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION {
+ ulFlags: DWORD,
+ RunLevel: ACTCTX_REQUESTED_RUN_LEVEL,
+ UiAccess: DWORD,
+}}
+pub type PACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION = *mut ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION;
+pub type PCACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
+ = *const ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION;
+ENUM!{enum ACTCTX_COMPATIBILITY_ELEMENT_TYPE {
+ ACTCTX_COMPATIBILITY_ELEMENT_TYPE_UNKNOWN = 0,
+ ACTCTX_COMPATIBILITY_ELEMENT_TYPE_OS,
+ ACTCTX_COMPATIBILITY_ELEMENT_TYPE_MITIGATION,
+}}
+STRUCT!{struct COMPATIBILITY_CONTEXT_ELEMENT {
+ Id: GUID,
+ Type: ACTCTX_COMPATIBILITY_ELEMENT_TYPE,
+}}
+pub type PCOMPATIBILITY_CONTEXT_ELEMENT = *mut COMPATIBILITY_CONTEXT_ELEMENT;
+pub type PCCOMPATIBILITY_CONTEXT_ELEMENT = *const COMPATIBILITY_CONTEXT_ELEMENT;
+STRUCT!{struct ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION {
+ ElementCount: DWORD,
+ Elements: [COMPATIBILITY_CONTEXT_ELEMENT; 0],
+}}
+pub type PACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
+ = *mut ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION;
+pub type PCACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
+ = *const ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION;
+STRUCT!{struct SUPPORTED_OS_INFO {
+ MajorVersion: WORD,
+ MinorVersion: WORD,
+}}
+pub type PSUPPORTED_OS_INFO = *mut SUPPORTED_OS_INFO;
+STRUCT!{struct ACTIVATION_CONTEXT_DETAILED_INFORMATION {
+ dwFlags: DWORD,
+ ulFormatVersion: DWORD,
+ ulAssemblyCount: DWORD,
+ ulRootManifestPathType: DWORD,
+ ulRootManifestPathChars: DWORD,
+ ulRootConfigurationPathType: DWORD,
+ ulRootConfigurationPathChars: DWORD,
+ ulAppDirPathType: DWORD,
+ ulAppDirPathChars: DWORD,
+ lpRootManifestPath: PCWSTR,
+ lpRootConfigurationPath: PCWSTR,
+ lpAppDirPath: PCWSTR,
+}}
+pub type PACTIVATION_CONTEXT_DETAILED_INFORMATION = *mut ACTIVATION_CONTEXT_DETAILED_INFORMATION;
+pub type PCACTIVATION_CONTEXT_DETAILED_INFORMATION
+ = *const ACTIVATION_CONTEXT_DETAILED_INFORMATION;
+pub const CREATE_BOUNDARY_DESCRIPTOR_ADD_APPCONTAINER_SID: DWORD = 0x1;
+STRUCT!{struct HARDWARE_COUNTER_DATA {
+ Type: HARDWARE_COUNTER_TYPE,
+ Reserved: DWORD,
+ Value: DWORD64,
+}}
+pub type PHARDWARE_COUNTER_DATA = *mut HARDWARE_COUNTER_DATA;
+pub const PERFORMANCE_DATA_VERSION: BYTE = 1;
+STRUCT!{struct PERFORMANCE_DATA {
+ Size: WORD,
+ Version: BYTE,
+ HwCountersCount: BYTE,
+ ContextSwitchCount: DWORD,
+ WaitReasonBitMap: DWORD64,
+ CycleTime: DWORD64,
+ RetryCount: DWORD,
+ Reserved: DWORD,
+ HwCounters: [HARDWARE_COUNTER_DATA; MAX_HW_COUNTERS],
+}}
+pub type PPERFORMANCE_DATA = *mut PERFORMANCE_DATA;
+pub const READ_THREAD_PROFILING_FLAG_DISPATCHING: DWORD = 0x00000001;
+pub const READ_THREAD_PROFILING_FLAG_HARDWARE_COUNTERS: DWORD = 0x00000002;
+pub const UNIFIEDBUILDREVISION_KEY: &'static str
+ = "\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion";
+pub const UNIFIEDBUILDREVISION_VALUE: &'static str = "UBR";
+pub const UNIFIEDBUILDREVISION_MIN: DWORD = 0x00000000;
+pub const DEVICEFAMILYDEVICEFORM_KEY: &'static str
+ = "\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\OEM";
+pub const DEVICEFAMILYDEVICEFORM_VALUE: &'static str = "DeviceForm";
+pub const DEVICEFAMILYINFOENUM_UAP: DWORD = 0x00000000;
+pub const DEVICEFAMILYINFOENUM_WINDOWS_8X: DWORD = 0x00000001;
+pub const DEVICEFAMILYINFOENUM_WINDOWS_PHONE_8X: DWORD = 0x00000002;
+pub const DEVICEFAMILYINFOENUM_DESKTOP: DWORD = 0x00000003;
+pub const DEVICEFAMILYINFOENUM_MOBILE: DWORD = 0x00000004;
+pub const DEVICEFAMILYINFOENUM_XBOX: DWORD = 0x00000005;
+pub const DEVICEFAMILYINFOENUM_TEAM: DWORD = 0x00000006;
+pub const DEVICEFAMILYINFOENUM_IOT: DWORD = 0x00000007;
+pub const DEVICEFAMILYINFOENUM_IOT_HEADLESS: DWORD = 0x00000008;
+pub const DEVICEFAMILYINFOENUM_SERVER: DWORD = 0x00000009;
+pub const DEVICEFAMILYINFOENUM_HOLOGRAPHIC: DWORD = 0x0000000A;
+pub const DEVICEFAMILYINFOENUM_XBOXSRA: DWORD = 0x0000000B;
+pub const DEVICEFAMILYINFOENUM_XBOXERA: DWORD = 0x0000000C;
+pub const DEVICEFAMILYINFOENUM_SERVER_NANO: DWORD = 0x0000000D;
+pub const DEVICEFAMILYINFOENUM_MAX: DWORD = 0x0000000D;
+pub const DEVICEFAMILYDEVICEFORM_UNKNOWN: DWORD = 0x00000000;
+pub const DEVICEFAMILYDEVICEFORM_PHONE: DWORD = 0x00000001;
+pub const DEVICEFAMILYDEVICEFORM_TABLET: DWORD = 0x00000002;
+pub const DEVICEFAMILYDEVICEFORM_DESKTOP: DWORD = 0x00000003;
+pub const DEVICEFAMILYDEVICEFORM_NOTEBOOK: DWORD = 0x00000004;
+pub const DEVICEFAMILYDEVICEFORM_CONVERTIBLE: DWORD = 0x00000005;
+pub const DEVICEFAMILYDEVICEFORM_DETACHABLE: DWORD = 0x00000006;
+pub const DEVICEFAMILYDEVICEFORM_ALLINONE: DWORD = 0x00000007;
+pub const DEVICEFAMILYDEVICEFORM_STICKPC: DWORD = 0x00000008;
+pub const DEVICEFAMILYDEVICEFORM_PUCK: DWORD = 0x00000009;
+pub const DEVICEFAMILYDEVICEFORM_LARGESCREEN: DWORD = 0x0000000A;
+pub const DEVICEFAMILYDEVICEFORM_HMD: DWORD = 0x0000000B;
+pub const DEVICEFAMILYDEVICEFORM_INDUSTRY_HANDHELD: DWORD = 0x0000000C;
+pub const DEVICEFAMILYDEVICEFORM_INDUSTRY_TABLET: DWORD = 0x0000000D;
+pub const DEVICEFAMILYDEVICEFORM_BANKING: DWORD = 0x0000000E;
+pub const DEVICEFAMILYDEVICEFORM_BUILDING_AUTOMATION: DWORD = 0x0000000F;
+pub const DEVICEFAMILYDEVICEFORM_DIGITAL_SIGNAGE: DWORD = 0x00000010;
+pub const DEVICEFAMILYDEVICEFORM_GAMING: DWORD = 0x00000011;
+pub const DEVICEFAMILYDEVICEFORM_HOME_AUTOMATION: DWORD = 0x00000012;
+pub const DEVICEFAMILYDEVICEFORM_INDUSTRIAL_AUTOMATION: DWORD = 0x00000013;
+pub const DEVICEFAMILYDEVICEFORM_KIOSK: DWORD = 0x00000014;
+pub const DEVICEFAMILYDEVICEFORM_MAKER_BOARD: DWORD = 0x00000015;
+pub const DEVICEFAMILYDEVICEFORM_MEDICAL: DWORD = 0x00000016;
+pub const DEVICEFAMILYDEVICEFORM_NETWORKING: DWORD = 0x00000017;
+pub const DEVICEFAMILYDEVICEFORM_POINT_OF_SERVICE: DWORD = 0x00000018;
+pub const DEVICEFAMILYDEVICEFORM_PRINTING: DWORD = 0x00000019;
+pub const DEVICEFAMILYDEVICEFORM_THIN_CLIENT: DWORD = 0x0000001A;
+pub const DEVICEFAMILYDEVICEFORM_TOY: DWORD = 0x0000001B;
+pub const DEVICEFAMILYDEVICEFORM_VENDING: DWORD = 0x0000001C;
+pub const DEVICEFAMILYDEVICEFORM_INDUSTRY_OTHER: DWORD = 0x0000001D;
+pub const DEVICEFAMILYDEVICEFORM_MAX: DWORD = 0x0000001D;
+extern "system" {
+ pub fn RtlGetDeviceFamilyInfoEnum(
+ pullUAPInfo: *mut ULONGLONG,
+ pulDeviceFamily: *mut DWORD,
+ pulDeviceForm: *mut DWORD,
+ );
+ pub fn RtlConvertDeviceFamilyInfoToString(
+ pulDeviceFamilyBufferSize: PDWORD,
+ pulDeviceFormBufferSize: PDWORD,
+ DeviceFamily: PWSTR,
+ DeviceForm: PWSTR,
+ ) -> DWORD;
+ pub fn RtlSwitchedVVI(
+ VersionInfo: PRTL_OSVERSIONINFOEXW,
+ TypeMask: DWORD,
+ ConditionMask: ULONGLONG,
+ ) -> DWORD;
+}
+pub const DLL_PROCESS_ATTACH: DWORD = 1;
+pub const DLL_THREAD_ATTACH: DWORD = 2;
+pub const DLL_THREAD_DETACH: DWORD = 3;
+pub const DLL_PROCESS_DETACH: DWORD = 0;
+pub const EVENTLOG_SEQUENTIAL_READ: DWORD = 0x0001;
+pub const EVENTLOG_SEEK_READ: DWORD = 0x0002;
+pub const EVENTLOG_FORWARDS_READ: DWORD = 0x0004;
+pub const EVENTLOG_BACKWARDS_READ: DWORD = 0x0008;
+pub const EVENTLOG_SUCCESS: WORD = 0x0000;
+pub const EVENTLOG_ERROR_TYPE: WORD = 0x0001;
+pub const EVENTLOG_WARNING_TYPE: WORD = 0x0002;
+pub const EVENTLOG_INFORMATION_TYPE: WORD = 0x0004;
+pub const EVENTLOG_AUDIT_SUCCESS: WORD = 0x0008;
+pub const EVENTLOG_AUDIT_FAILURE: WORD = 0x0010;
+pub const EVENTLOG_START_PAIRED_EVENT: WORD = 0x0001;
+pub const EVENTLOG_END_PAIRED_EVENT: WORD = 0x0002;
+pub const EVENTLOG_END_ALL_PAIRED_EVENTS: WORD = 0x0004;
+pub const EVENTLOG_PAIRED_EVENT_ACTIVE: WORD = 0x0008;
+pub const EVENTLOG_PAIRED_EVENT_INACTIVE: WORD = 0x0010;
+STRUCT!{struct EVENTLOGRECORD {
+ Length: DWORD,
+ Reserved: DWORD,
+ RecordNumber: DWORD,
+ TimeGenerated: DWORD,
+ TimeWritten: DWORD,
+ EventID: DWORD,
+ EventType: WORD,
+ NumStrings: WORD,
+ EventCategory: WORD,
+ ReservedFlags: WORD,
+ ClosingRecordNumber: DWORD,
+ StringOffset: DWORD,
+ UserSidLength: DWORD,
+ UserSidOffset: DWORD,
+ DataLength: DWORD,
+ DataOffset: DWORD,
+}}
+pub type PEVENTLOGRECORD = *mut EVENTLOGRECORD;
+pub const MAXLOGICALLOGNAMESIZE: usize = 256;
+pub type PEVENTSFORLOGFILE = *mut EVENTSFORLOGFILE;
+pub type PPACKEDEVENTINFO = *mut PACKEDEVENTINFO;
+STRUCT!{struct EVENTSFORLOGFILE {
+ ulSize: DWORD,
+ szLogicalLogFile: [WCHAR; MAXLOGICALLOGNAMESIZE],
+ ulNumRecords: DWORD,
+ pEventLogRecords: [EVENTLOGRECORD; 0],
+}}
+STRUCT!{struct PACKEDEVENTINFO {
+ ulSize: DWORD,
+ ulNumEventsForLogFile: DWORD,
+ ulOffsets: [DWORD; 0],
+}}
+pub const KEY_QUERY_VALUE: u32 = 0x0001;
+pub const KEY_SET_VALUE: u32 = 0x0002;
+pub const KEY_CREATE_SUB_KEY: u32 = 0x0004;
+pub const KEY_ENUMERATE_SUB_KEYS: u32 = 0x0008;
+pub const KEY_NOTIFY: u32 = 0x0010;
+pub const KEY_CREATE_LINK: u32 = 0x0020;
+pub const KEY_WOW64_32KEY: u32 = 0x0200;
+pub const KEY_WOW64_64KEY: u32 = 0x0100;
+pub const KEY_WOW64_RES: u32 = 0x0300;
+pub const KEY_READ: u32 = (STANDARD_RIGHTS_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS
+ | KEY_NOTIFY) & !SYNCHRONIZE;
+pub const KEY_WRITE: u32 = (STANDARD_RIGHTS_WRITE | KEY_SET_VALUE | KEY_CREATE_SUB_KEY)
+ & !SYNCHRONIZE;
+pub const KEY_EXECUTE: u32 = KEY_READ & !SYNCHRONIZE;
+pub const KEY_ALL_ACCESS: u32 = (STANDARD_RIGHTS_ALL | KEY_QUERY_VALUE | KEY_SET_VALUE
+ | KEY_CREATE_SUB_KEY | KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY | KEY_CREATE_LINK) & !SYNCHRONIZE;
+pub const REG_OPTION_RESERVED: DWORD = 0x00000000;
+pub const REG_OPTION_NON_VOLATILE: DWORD = 0x00000000;
+pub const REG_OPTION_VOLATILE: DWORD = 0x00000001;
+pub const REG_OPTION_CREATE_LINK: DWORD = 0x00000002;
+pub const REG_OPTION_BACKUP_RESTORE: DWORD = 0x00000004;
+pub const REG_OPTION_OPEN_LINK: DWORD = 0x00000008;
+pub const REG_OPTION_DONT_VIRTUALIZE: DWORD = 0x00000010;
+pub const REG_LEGAL_OPTION: DWORD = REG_OPTION_RESERVED | REG_OPTION_NON_VOLATILE
+ | REG_OPTION_VOLATILE | REG_OPTION_CREATE_LINK | REG_OPTION_BACKUP_RESTORE
+ | REG_OPTION_OPEN_LINK | REG_OPTION_DONT_VIRTUALIZE;
+pub const REG_OPEN_LEGAL_OPTION: DWORD = REG_OPTION_RESERVED | REG_OPTION_BACKUP_RESTORE
+ | REG_OPTION_OPEN_LINK | REG_OPTION_DONT_VIRTUALIZE;
+pub const REG_CREATED_NEW_KEY: DWORD = 0x00000001;
+pub const REG_OPENED_EXISTING_KEY: DWORD = 0x00000002;
+pub const REG_STANDARD_FORMAT: DWORD = 1;
+pub const REG_LATEST_FORMAT: DWORD = 2;
+pub const REG_NO_COMPRESSION: DWORD = 4;
+pub const REG_WHOLE_HIVE_VOLATILE: DWORD = 0x00000001;
+pub const REG_REFRESH_HIVE: DWORD = 0x00000002;
+pub const REG_NO_LAZY_FLUSH: DWORD = 0x00000004;
+pub const REG_FORCE_RESTORE: DWORD = 0x00000008;
+pub const REG_APP_HIVE: DWORD = 0x00000010;
+pub const REG_PROCESS_PRIVATE: DWORD = 0x00000020;
+pub const REG_START_JOURNAL: DWORD = 0x00000040;
+pub const REG_HIVE_EXACT_FILE_GROWTH: DWORD = 0x00000080;
+pub const REG_HIVE_NO_RM: DWORD = 0x00000100;
+pub const REG_HIVE_SINGLE_LOG: DWORD = 0x00000200;
+pub const REG_BOOT_HIVE: DWORD = 0x00000400;
+pub const REG_LOAD_HIVE_OPEN_HANDLE: DWORD = 0x00000800;
+pub const REG_FLUSH_HIVE_FILE_GROWTH: DWORD = 0x00001000;
+pub const REG_OPEN_READ_ONLY: DWORD = 0x00002000;
+pub const REG_IMMUTABLE: DWORD = 0x00004000;
+pub const REG_APP_HIVE_OPEN_READ_ONLY: DWORD = REG_OPEN_READ_ONLY;
+pub const REG_FORCE_UNLOAD: DWORD = 1;
+pub const REG_UNLOAD_LEGAL_FLAGS: DWORD = REG_FORCE_UNLOAD;
+pub const REG_NOTIFY_CHANGE_NAME: DWORD = 0x00000001;
+pub const REG_NOTIFY_CHANGE_ATTRIBUTES: DWORD = 0x00000002;
+pub const REG_NOTIFY_CHANGE_LAST_SET: DWORD = 0x00000004;
+pub const REG_NOTIFY_CHANGE_SECURITY: DWORD = 0x00000008;
+pub const REG_NOTIFY_THREAD_AGNOSTIC: DWORD = 0x10000000;
+pub const REG_LEGAL_CHANGE_FILTER: DWORD = REG_NOTIFY_CHANGE_NAME | REG_NOTIFY_CHANGE_ATTRIBUTES
+ | REG_NOTIFY_CHANGE_LAST_SET | REG_NOTIFY_CHANGE_SECURITY | REG_NOTIFY_THREAD_AGNOSTIC;
+pub const REG_NONE: DWORD = 0;
+pub const REG_SZ: DWORD = 1;
+pub const REG_EXPAND_SZ: DWORD = 2;
+pub const REG_BINARY: DWORD = 3;
+pub const REG_DWORD: DWORD = 4;
+pub const REG_DWORD_LITTLE_ENDIAN: DWORD = 4;
+pub const REG_DWORD_BIG_ENDIAN: DWORD = 5;
+pub const REG_LINK: DWORD = 6;
+pub const REG_MULTI_SZ: DWORD = 7;
+pub const REG_RESOURCE_LIST: DWORD = 8;
+pub const REG_FULL_RESOURCE_DESCRIPTOR: DWORD = 9;
+pub const REG_RESOURCE_REQUIREMENTS_LIST: DWORD = 10;
+pub const REG_QWORD: DWORD = 11;
+pub const REG_QWORD_LITTLE_ENDIAN: DWORD = 11;
+pub const SERVICE_KERNEL_DRIVER: DWORD = 0x00000001;
+pub const SERVICE_FILE_SYSTEM_DRIVER: DWORD = 0x00000002;
+pub const SERVICE_ADAPTER: DWORD = 0x00000004;
+pub const SERVICE_RECOGNIZER_DRIVER: DWORD = 0x00000008;
+pub const SERVICE_DRIVER: DWORD = SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER
+ | SERVICE_RECOGNIZER_DRIVER;
+pub const SERVICE_WIN32_OWN_PROCESS: DWORD = 0x00000010;
+pub const SERVICE_WIN32_SHARE_PROCESS: DWORD = 0x00000020;
+pub const SERVICE_WIN32: DWORD = SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS;
+pub const SERVICE_USER_SERVICE: DWORD = 0x00000040;
+pub const SERVICE_USERSERVICE_INSTANCE: DWORD = 0x00000080;
+pub const SERVICE_USER_SHARE_PROCESS: DWORD = SERVICE_USER_SERVICE | SERVICE_WIN32_SHARE_PROCESS;
+pub const SERVICE_USER_OWN_PROCESS: DWORD = SERVICE_USER_SERVICE | SERVICE_WIN32_OWN_PROCESS;
+pub const SERVICE_INTERACTIVE_PROCESS: DWORD = 0x00000100;
+pub const SERVICE_PKG_SERVICE: DWORD = 0x00000200;
+pub const SERVICE_TYPE_ALL: DWORD = SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER
+ | SERVICE_INTERACTIVE_PROCESS | SERVICE_USER_SERVICE | SERVICE_USERSERVICE_INSTANCE
+ | SERVICE_PKG_SERVICE;
+pub const SERVICE_BOOT_START: DWORD = 0x00000000;
+pub const SERVICE_SYSTEM_START: DWORD = 0x00000001;
+pub const SERVICE_AUTO_START: DWORD = 0x00000002;
+pub const SERVICE_DEMAND_START: DWORD = 0x00000003;
+pub const SERVICE_DISABLED: DWORD = 0x00000004;
+pub const SERVICE_ERROR_IGNORE: DWORD = 0x00000000;
+pub const SERVICE_ERROR_NORMAL: DWORD = 0x00000001;
+pub const SERVICE_ERROR_SEVERE: DWORD = 0x00000002;
+pub const SERVICE_ERROR_CRITICAL: DWORD = 0x00000003;
+ENUM!{enum SERVICE_NODE_TYPE {
+ DriverType = SERVICE_KERNEL_DRIVER,
+ FileSystemType = SERVICE_FILE_SYSTEM_DRIVER,
+ Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS,
+ Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,
+ AdapterType = SERVICE_ADAPTER,
+ RecognizerType = SERVICE_RECOGNIZER_DRIVER,
+}}
+ENUM!{enum SERVICE_LOAD_TYPE {
+ BootLoad = SERVICE_BOOT_START,
+ SystemLoad = SERVICE_SYSTEM_START,
+ AutoLoad = SERVICE_AUTO_START,
+ DemandLoad = SERVICE_DEMAND_START,
+ DisableLoad = SERVICE_DISABLED,
+}}
+ENUM!{enum SERVICE_ERROR_TYPE {
+ IgnoreError = SERVICE_ERROR_IGNORE,
+ NormalError = SERVICE_ERROR_NORMAL,
+ SevereError = SERVICE_ERROR_SEVERE,
+ CriticalError = SERVICE_ERROR_CRITICAL,
+}}
+pub const CM_SERVICE_NETWORK_BOOT_LOAD: DWORD = 0x00000001;
+pub const CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD: DWORD = 0x00000002;
+pub const CM_SERVICE_USB_DISK_BOOT_LOAD: DWORD = 0x00000004;
+pub const CM_SERVICE_SD_DISK_BOOT_LOAD: DWORD = 0x00000008;
+pub const CM_SERVICE_USB3_DISK_BOOT_LOAD: DWORD = 0x00000010;
+pub const CM_SERVICE_MEASURED_BOOT_LOAD: DWORD = 0x00000020;
+pub const CM_SERVICE_VERIFIER_BOOT_LOAD: DWORD = 0x00000040;
+pub const CM_SERVICE_WINPE_BOOT_LOAD: DWORD = 0x00000080;
+pub const CM_SERVICE_VALID_PROMOTION_MASK: DWORD = CM_SERVICE_NETWORK_BOOT_LOAD
+ | CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | CM_SERVICE_USB_DISK_BOOT_LOAD
+ | CM_SERVICE_SD_DISK_BOOT_LOAD | CM_SERVICE_USB3_DISK_BOOT_LOAD
+ | CM_SERVICE_MEASURED_BOOT_LOAD | CM_SERVICE_VERIFIER_BOOT_LOAD | CM_SERVICE_WINPE_BOOT_LOAD;
+pub const TAPE_ERASE_SHORT: DWORD = 0;
+pub const TAPE_ERASE_LONG: DWORD = 1;
+STRUCT!{struct TAPE_ERASE {
+ Type: DWORD,
+ Immediate: BOOLEAN,
+}}
+pub type PTAPE_ERASE = *mut TAPE_ERASE;
+pub const TAPE_LOAD: DWORD = 0;
+pub const TAPE_UNLOAD: DWORD = 1;
+pub const TAPE_TENSION: DWORD = 2;
+pub const TAPE_LOCK: DWORD = 3;
+pub const TAPE_UNLOCK: DWORD = 4;
+pub const TAPE_FORMAT: DWORD = 5;
+STRUCT!{struct TAPE_PREPARE {
+ Operation: DWORD,
+ Immediate: BOOLEAN,
+}}
+pub type PTAPE_PREPARE = *mut TAPE_PREPARE;
+pub const TAPE_SETMARKS: DWORD = 0;
+pub const TAPE_FILEMARKS: DWORD = 1;
+pub const TAPE_SHORT_FILEMARKS: DWORD = 2;
+pub const TAPE_LONG_FILEMARKS: DWORD = 3;
+STRUCT!{struct TAPE_WRITE_MARKS {
+ Type: DWORD,
+ Count: DWORD,
+ Immediate: BOOLEAN,
+}}
+pub type PTAPE_WRITE_MARKS = *mut TAPE_WRITE_MARKS;
+pub const TAPE_ABSOLUTE_POSITION: DWORD = 0;
+pub const TAPE_LOGICAL_POSITION: DWORD = 1;
+pub const TAPE_PSEUDO_LOGICAL_POSITION: DWORD = 2;
+STRUCT!{struct TAPE_GET_POSITION {
+ Type: DWORD,
+ Partition: DWORD,
+ Offset: LARGE_INTEGER,
+}}
+pub type PTAPE_GET_POSITION = *mut TAPE_GET_POSITION;
+pub const TAPE_REWIND: DWORD = 0;
+pub const TAPE_ABSOLUTE_BLOCK: DWORD = 1;
+pub const TAPE_LOGICAL_BLOCK: DWORD = 2;
+pub const TAPE_PSEUDO_LOGICAL_BLOCK: DWORD = 3;
+pub const TAPE_SPACE_END_OF_DATA: DWORD = 4;
+pub const TAPE_SPACE_RELATIVE_BLOCKS: DWORD = 5;
+pub const TAPE_SPACE_FILEMARKS: DWORD = 6;
+pub const TAPE_SPACE_SEQUENTIAL_FMKS: DWORD = 7;
+pub const TAPE_SPACE_SETMARKS: DWORD = 8;
+pub const TAPE_SPACE_SEQUENTIAL_SMKS: DWORD = 9;
+STRUCT!{struct TAPE_SET_POSITION {
+ Method: DWORD,
+ Partition: DWORD,
+ Offset: LARGE_INTEGER,
+ Immediate: BOOLEAN,
+}}
+pub type PTAPE_SET_POSITION = *mut TAPE_SET_POSITION;
+pub const TAPE_DRIVE_FIXED: DWORD = 0x00000001;
+pub const TAPE_DRIVE_SELECT: DWORD = 0x00000002;
+pub const TAPE_DRIVE_INITIATOR: DWORD = 0x00000004;
+pub const TAPE_DRIVE_ERASE_SHORT: DWORD = 0x00000010;
+pub const TAPE_DRIVE_ERASE_LONG: DWORD = 0x00000020;
+pub const TAPE_DRIVE_ERASE_BOP_ONLY: DWORD = 0x00000040;
+pub const TAPE_DRIVE_ERASE_IMMEDIATE: DWORD = 0x00000080;
+pub const TAPE_DRIVE_TAPE_CAPACITY: DWORD = 0x00000100;
+pub const TAPE_DRIVE_TAPE_REMAINING: DWORD = 0x00000200;
+pub const TAPE_DRIVE_FIXED_BLOCK: DWORD = 0x00000400;
+pub const TAPE_DRIVE_VARIABLE_BLOCK: DWORD = 0x00000800;
+pub const TAPE_DRIVE_WRITE_PROTECT: DWORD = 0x00001000;
+pub const TAPE_DRIVE_EOT_WZ_SIZE: DWORD = 0x00002000;
+pub const TAPE_DRIVE_ECC: DWORD = 0x00010000;
+pub const TAPE_DRIVE_COMPRESSION: DWORD = 0x00020000;
+pub const TAPE_DRIVE_PADDING: DWORD = 0x00040000;
+pub const TAPE_DRIVE_REPORT_SMKS: DWORD = 0x00080000;
+pub const TAPE_DRIVE_GET_ABSOLUTE_BLK: DWORD = 0x00100000;
+pub const TAPE_DRIVE_GET_LOGICAL_BLK: DWORD = 0x00200000;
+pub const TAPE_DRIVE_SET_EOT_WZ_SIZE: DWORD = 0x00400000;
+pub const TAPE_DRIVE_EJECT_MEDIA: DWORD = 0x01000000;
+pub const TAPE_DRIVE_CLEAN_REQUESTS: DWORD = 0x02000000;
+pub const TAPE_DRIVE_SET_CMP_BOP_ONLY: DWORD = 0x04000000;
+pub const TAPE_DRIVE_RESERVED_BIT: DWORD = 0x80000000;
+pub const TAPE_DRIVE_LOAD_UNLOAD: DWORD = 0x80000001;
+pub const TAPE_DRIVE_TENSION: DWORD = 0x80000002;
+pub const TAPE_DRIVE_LOCK_UNLOCK: DWORD = 0x80000004;
+pub const TAPE_DRIVE_REWIND_IMMEDIATE: DWORD = 0x80000008;
+pub const TAPE_DRIVE_SET_BLOCK_SIZE: DWORD = 0x80000010;
+pub const TAPE_DRIVE_LOAD_UNLD_IMMED: DWORD = 0x80000020;
+pub const TAPE_DRIVE_TENSION_IMMED: DWORD = 0x80000040;
+pub const TAPE_DRIVE_LOCK_UNLK_IMMED: DWORD = 0x80000080;
+pub const TAPE_DRIVE_SET_ECC: DWORD = 0x80000100;
+pub const TAPE_DRIVE_SET_COMPRESSION: DWORD = 0x80000200;
+pub const TAPE_DRIVE_SET_PADDING: DWORD = 0x80000400;
+pub const TAPE_DRIVE_SET_REPORT_SMKS: DWORD = 0x80000800;
+pub const TAPE_DRIVE_ABSOLUTE_BLK: DWORD = 0x80001000;
+pub const TAPE_DRIVE_ABS_BLK_IMMED: DWORD = 0x80002000;
+pub const TAPE_DRIVE_LOGICAL_BLK: DWORD = 0x80004000;
+pub const TAPE_DRIVE_LOG_BLK_IMMED: DWORD = 0x80008000;
+pub const TAPE_DRIVE_END_OF_DATA: DWORD = 0x80010000;
+pub const TAPE_DRIVE_RELATIVE_BLKS: DWORD = 0x80020000;
+pub const TAPE_DRIVE_FILEMARKS: DWORD = 0x80040000;
+pub const TAPE_DRIVE_SEQUENTIAL_FMKS: DWORD = 0x80080000;
+pub const TAPE_DRIVE_SETMARKS: DWORD = 0x80100000;
+pub const TAPE_DRIVE_SEQUENTIAL_SMKS: DWORD = 0x80200000;
+pub const TAPE_DRIVE_REVERSE_POSITION: DWORD = 0x80400000;
+pub const TAPE_DRIVE_SPACE_IMMEDIATE: DWORD = 0x80800000;
+pub const TAPE_DRIVE_WRITE_SETMARKS: DWORD = 0x81000000;
+pub const TAPE_DRIVE_WRITE_FILEMARKS: DWORD = 0x82000000;
+pub const TAPE_DRIVE_WRITE_SHORT_FMKS: DWORD = 0x84000000;
+pub const TAPE_DRIVE_WRITE_LONG_FMKS: DWORD = 0x88000000;
+pub const TAPE_DRIVE_WRITE_MARK_IMMED: DWORD = 0x90000000;
+pub const TAPE_DRIVE_FORMAT: DWORD = 0xA0000000;
+pub const TAPE_DRIVE_FORMAT_IMMEDIATE: DWORD = 0xC0000000;
+pub const TAPE_DRIVE_HIGH_FEATURES: DWORD = 0x80000000;
+STRUCT!{struct TAPE_GET_DRIVE_PARAMETERS {
+ ECC: BOOLEAN,
+ Compression: BOOLEAN,
+ DataPadding: BOOLEAN,
+ ReportSetmarks: BOOLEAN,
+ DefaultBlockSize: DWORD,
+ MaximumBlockSize: DWORD,
+ MinimumBlockSize: DWORD,
+ MaximumPartitionCount: DWORD,
+ FeaturesLow: DWORD,
+ FeaturesHigh: DWORD,
+ EOTWarningZoneSize: DWORD,
+}}
+pub type PTAPE_GET_DRIVE_PARAMETERS = *mut TAPE_GET_DRIVE_PARAMETERS;
+STRUCT!{struct TAPE_SET_DRIVE_PARAMETERS {
+ ECC: BOOLEAN,
+ Compression: BOOLEAN,
+ DataPadding: BOOLEAN,
+ ReportSetmarks: BOOLEAN,
+ EOTWarningZoneSize: DWORD,
+}}
+pub type PTAPE_SET_DRIVE_PARAMETERS = *mut TAPE_SET_DRIVE_PARAMETERS;
+STRUCT!{struct TAPE_GET_MEDIA_PARAMETERS {
+ Capacity: LARGE_INTEGER,
+ Remaining: LARGE_INTEGER,
+ BlockSize: DWORD,
+ PartitionCount: DWORD,
+ WriteProtected: BOOLEAN,
+}}
+pub type PTAPE_GET_MEDIA_PARAMETERS = *mut TAPE_GET_MEDIA_PARAMETERS;
+STRUCT!{struct TAPE_SET_MEDIA_PARAMETERS {
+ BlockSize: DWORD,
+}}
+pub type PTAPE_SET_MEDIA_PARAMETERS = *mut TAPE_SET_MEDIA_PARAMETERS;
+pub const TAPE_FIXED_PARTITIONS: DWORD = 0;
+pub const TAPE_SELECT_PARTITIONS: DWORD = 1;
+pub const TAPE_INITIATOR_PARTITIONS: DWORD = 2;
+STRUCT!{struct TAPE_CREATE_PARTITION {
+ Method: DWORD,
+ Count: DWORD,
+ Size: DWORD,
+}}
+pub type PTAPE_CREATE_PARTITION = *mut TAPE_CREATE_PARTITION;
+pub const TAPE_QUERY_DRIVE_PARAMETERS: DWORD = 0;
+pub const TAPE_QUERY_MEDIA_CAPACITY: DWORD = 1;
+pub const TAPE_CHECK_FOR_DRIVE_PROBLEM: DWORD = 2;
+pub const TAPE_QUERY_IO_ERROR_DATA: DWORD = 3;
+pub const TAPE_QUERY_DEVICE_ERROR_DATA: DWORD = 4;
+STRUCT!{struct TAPE_WMI_OPERATIONS {
+ Method: DWORD,
+ DataBufferSize: DWORD,
+ DataBuffer: PVOID,
+}}
+pub type PTAPE_WMI_OPERATIONS = *mut TAPE_WMI_OPERATIONS;
+ENUM!{enum TAPE_DRIVE_PROBLEM_TYPE {
+ TapeDriveProblemNone,
+ TapeDriveReadWriteWarning,
+ TapeDriveReadWriteError,
+ TapeDriveReadWarning,
+ TapeDriveWriteWarning,
+ TapeDriveReadError,
+ TapeDriveWriteError,
+ TapeDriveHardwareError,
+ TapeDriveUnsupportedMedia,
+ TapeDriveScsiConnectionError,
+ TapeDriveTimetoClean,
+ TapeDriveCleanDriveNow,
+ TapeDriveMediaLifeExpired,
+ TapeDriveSnappedTape,
+}}
+pub const TRANSACTIONMANAGER_QUERY_INFORMATION: DWORD = 0x0001;
+pub const TRANSACTIONMANAGER_SET_INFORMATION: DWORD = 0x0002;
+pub const TRANSACTIONMANAGER_RECOVER: DWORD = 0x0004;
+pub const TRANSACTIONMANAGER_RENAME: DWORD = 0x0008;
+pub const TRANSACTIONMANAGER_CREATE_RM: DWORD = 0x0010;
+pub const TRANSACTIONMANAGER_BIND_TRANSACTION: DWORD = 0x0020;
+pub const TRANSACTIONMANAGER_GENERIC_READ: DWORD = STANDARD_RIGHTS_READ
+ | TRANSACTIONMANAGER_QUERY_INFORMATION;
+pub const TRANSACTIONMANAGER_GENERIC_WRITE: DWORD = STANDARD_RIGHTS_WRITE
+ | TRANSACTIONMANAGER_SET_INFORMATION | TRANSACTIONMANAGER_RECOVER | TRANSACTIONMANAGER_RENAME
+ | TRANSACTIONMANAGER_CREATE_RM;
+pub const TRANSACTIONMANAGER_GENERIC_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE;
+pub const TRANSACTIONMANAGER_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED
+ | TRANSACTIONMANAGER_GENERIC_READ | TRANSACTIONMANAGER_GENERIC_WRITE
+ | TRANSACTIONMANAGER_GENERIC_EXECUTE | TRANSACTIONMANAGER_BIND_TRANSACTION;
+pub const TRANSACTION_QUERY_INFORMATION: DWORD = 0x0001;
+pub const TRANSACTION_SET_INFORMATION: DWORD = 0x0002;
+pub const TRANSACTION_ENLIST: DWORD = 0x0004;
+pub const TRANSACTION_COMMIT: DWORD = 0x0008;
+pub const TRANSACTION_ROLLBACK: DWORD = 0x0010;
+pub const TRANSACTION_PROPAGATE: DWORD = 0x0020;
+pub const TRANSACTION_RIGHT_RESERVED1: DWORD = 0x0040;
+pub const TRANSACTION_GENERIC_READ: DWORD = STANDARD_RIGHTS_READ | TRANSACTION_QUERY_INFORMATION
+ | SYNCHRONIZE;
+pub const TRANSACTION_GENERIC_WRITE: DWORD = STANDARD_RIGHTS_WRITE | TRANSACTION_SET_INFORMATION
+ | TRANSACTION_COMMIT | TRANSACTION_ENLIST | TRANSACTION_ROLLBACK | TRANSACTION_PROPAGATE
+ | SYNCHRONIZE;
+pub const TRANSACTION_GENERIC_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE | TRANSACTION_COMMIT
+ | TRANSACTION_ROLLBACK | SYNCHRONIZE;
+pub const TRANSACTION_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | TRANSACTION_GENERIC_READ
+ | TRANSACTION_GENERIC_WRITE | TRANSACTION_GENERIC_EXECUTE;
+pub const TRANSACTION_RESOURCE_MANAGER_RIGHTS: DWORD = TRANSACTION_GENERIC_READ
+ | STANDARD_RIGHTS_WRITE | TRANSACTION_SET_INFORMATION | TRANSACTION_ENLIST
+ | TRANSACTION_ROLLBACK | TRANSACTION_PROPAGATE | SYNCHRONIZE;
+pub const RESOURCEMANAGER_QUERY_INFORMATION: DWORD = 0x0001;
+pub const RESOURCEMANAGER_SET_INFORMATION: DWORD = 0x0002;
+pub const RESOURCEMANAGER_RECOVER: DWORD = 0x0004;
+pub const RESOURCEMANAGER_ENLIST: DWORD = 0x0008;
+pub const RESOURCEMANAGER_GET_NOTIFICATION: DWORD = 0x0010;
+pub const RESOURCEMANAGER_REGISTER_PROTOCOL: DWORD = 0x0020;
+pub const RESOURCEMANAGER_COMPLETE_PROPAGATION: DWORD = 0x0040;
+pub const RESOURCEMANAGER_GENERIC_READ: DWORD = STANDARD_RIGHTS_READ
+ | RESOURCEMANAGER_QUERY_INFORMATION | SYNCHRONIZE;
+pub const RESOURCEMANAGER_GENERIC_WRITE: DWORD = STANDARD_RIGHTS_WRITE
+ | RESOURCEMANAGER_SET_INFORMATION | RESOURCEMANAGER_RECOVER | RESOURCEMANAGER_ENLIST
+ | RESOURCEMANAGER_GET_NOTIFICATION | RESOURCEMANAGER_REGISTER_PROTOCOL
+ | RESOURCEMANAGER_COMPLETE_PROPAGATION | SYNCHRONIZE;
+pub const RESOURCEMANAGER_GENERIC_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE
+ | RESOURCEMANAGER_RECOVER | RESOURCEMANAGER_ENLIST | RESOURCEMANAGER_GET_NOTIFICATION
+ | RESOURCEMANAGER_COMPLETE_PROPAGATION | SYNCHRONIZE;
+pub const RESOURCEMANAGER_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED
+ | RESOURCEMANAGER_GENERIC_READ | RESOURCEMANAGER_GENERIC_WRITE
+ | RESOURCEMANAGER_GENERIC_EXECUTE;
+pub const ENLISTMENT_QUERY_INFORMATION: DWORD = 0x0001;
+pub const ENLISTMENT_SET_INFORMATION: DWORD = 0x0002;
+pub const ENLISTMENT_RECOVER: DWORD = 0x0004;
+pub const ENLISTMENT_SUBORDINATE_RIGHTS: DWORD = 0x0008;
+pub const ENLISTMENT_SUPERIOR_RIGHTS: DWORD = 0x0010;
+pub const ENLISTMENT_GENERIC_READ: DWORD = STANDARD_RIGHTS_READ | ENLISTMENT_QUERY_INFORMATION;
+pub const ENLISTMENT_GENERIC_WRITE: DWORD = STANDARD_RIGHTS_WRITE | ENLISTMENT_SET_INFORMATION
+ | ENLISTMENT_RECOVER | ENLISTMENT_SUBORDINATE_RIGHTS | ENLISTMENT_SUPERIOR_RIGHTS;
+pub const ENLISTMENT_GENERIC_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE | ENLISTMENT_RECOVER
+ | ENLISTMENT_SUBORDINATE_RIGHTS | ENLISTMENT_SUPERIOR_RIGHTS;
+pub const ENLISTMENT_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | ENLISTMENT_GENERIC_READ
+ | ENLISTMENT_GENERIC_WRITE | ENLISTMENT_GENERIC_EXECUTE;
+ENUM!{enum TRANSACTION_OUTCOME {
+ TransactionOutcomeUndetermined = 1,
+ TransactionOutcomeCommitted,
+ TransactionOutcomeAborted,
+}}
+ENUM!{enum TRANSACTION_STATE {
+ TransactionStateNormal = 1,
+ TransactionStateIndoubt,
+ TransactionStateCommittedNotify,
+}}
+STRUCT!{struct TRANSACTION_BASIC_INFORMATION {
+ TransactionId: GUID,
+ State: DWORD,
+ Outcome: DWORD,
+}}
+pub type PTRANSACTION_BASIC_INFORMATION = *mut TRANSACTION_BASIC_INFORMATION;
+STRUCT!{struct TRANSACTIONMANAGER_BASIC_INFORMATION {
+ TmIdentity: GUID,
+ VirtualClock: LARGE_INTEGER,
+}}
+pub type PTRANSACTIONMANAGER_BASIC_INFORMATION = *mut TRANSACTIONMANAGER_BASIC_INFORMATION;
+STRUCT!{struct TRANSACTIONMANAGER_LOG_INFORMATION {
+ LogIdentity: GUID,
+}}
+pub type PTRANSACTIONMANAGER_LOG_INFORMATION = *mut TRANSACTIONMANAGER_LOG_INFORMATION;
+STRUCT!{struct TRANSACTIONMANAGER_LOGPATH_INFORMATION {
+ LogPathLength: DWORD,
+ LogPath: [WCHAR; 1],
+}}
+pub type PTRANSACTIONMANAGER_LOGPATH_INFORMATION = *mut TRANSACTIONMANAGER_LOGPATH_INFORMATION;
+STRUCT!{struct TRANSACTIONMANAGER_RECOVERY_INFORMATION {
+ LastRecoveredLsn: ULONGLONG,
+}}
+pub type PTRANSACTIONMANAGER_RECOVERY_INFORMATION = *mut TRANSACTIONMANAGER_RECOVERY_INFORMATION;
+STRUCT!{struct TRANSACTIONMANAGER_OLDEST_INFORMATION {
+ OldestTransactionGuid: GUID,
+}}
+pub type PTRANSACTIONMANAGER_OLDEST_INFORMATION = *mut TRANSACTIONMANAGER_OLDEST_INFORMATION;
+STRUCT!{struct TRANSACTION_PROPERTIES_INFORMATION {
+ IsolationLevel: DWORD,
+ IsolationFlags: DWORD,
+ Timeout: LARGE_INTEGER,
+ Outcome: DWORD,
+ DescriptionLength: DWORD,
+ Description: [WCHAR; 1],
+}}
+pub type PTRANSACTION_PROPERTIES_INFORMATION = *mut TRANSACTION_PROPERTIES_INFORMATION;
+STRUCT!{struct TRANSACTION_BIND_INFORMATION {
+ TmHandle: HANDLE,
+}}
+pub type PTRANSACTION_BIND_INFORMATION = *mut TRANSACTION_BIND_INFORMATION;
+STRUCT!{struct TRANSACTION_ENLISTMENT_PAIR {
+ EnlistmentId: GUID,
+ ResourceManagerId: GUID,
+}}
+pub type PTRANSACTION_ENLISTMENT_PAIR = *mut TRANSACTION_ENLISTMENT_PAIR;
+STRUCT!{struct TRANSACTION_ENLISTMENTS_INFORMATION {
+ NumberOfEnlistments: DWORD,
+ EnlistmentPair: [TRANSACTION_ENLISTMENT_PAIR; 1],
+}}
+pub type PTRANSACTION_ENLISTMENTS_INFORMATION = *mut TRANSACTION_ENLISTMENTS_INFORMATION;
+STRUCT!{struct TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION {
+ SuperiorEnlistmentPair: TRANSACTION_ENLISTMENT_PAIR,
+}}
+pub type PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION
+ = *mut TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION;
+STRUCT!{struct RESOURCEMANAGER_BASIC_INFORMATION {
+ ResourceManagerId: GUID,
+ DescriptionLength: DWORD,
+ Description: [WCHAR; 1],
+}}
+pub type PRESOURCEMANAGER_BASIC_INFORMATION = *mut RESOURCEMANAGER_BASIC_INFORMATION;
+STRUCT!{struct RESOURCEMANAGER_COMPLETION_INFORMATION {
+ IoCompletionPortHandle: HANDLE,
+ CompletionKey: ULONG_PTR,
+}}
+pub type PRESOURCEMANAGER_COMPLETION_INFORMATION = *mut RESOURCEMANAGER_COMPLETION_INFORMATION;
+ENUM!{enum TRANSACTION_INFORMATION_CLASS {
+ TransactionBasicInformation,
+ TransactionPropertiesInformation,
+ TransactionEnlistmentInformation,
+ TransactionSuperiorEnlistmentInformation,
+ TransactionBindInformation,
+ TransactionDTCPrivateInformation,
+}}
+ENUM!{enum TRANSACTIONMANAGER_INFORMATION_CLASS {
+ TransactionManagerBasicInformation,
+ TransactionManagerLogInformation,
+ TransactionManagerLogPathInformation,
+ TransactionManagerRecoveryInformation = 4,
+ TransactionManagerOnlineProbeInformation = 3,
+ TransactionManagerOldestTransactionInformation = 5,
+}}
+ENUM!{enum RESOURCEMANAGER_INFORMATION_CLASS {
+ ResourceManagerBasicInformation,
+ ResourceManagerCompletionInformation,
+}}
+STRUCT!{struct ENLISTMENT_BASIC_INFORMATION {
+ EnlistmentId: GUID,
+ TransactionId: GUID,
+ ResourceManagerId: GUID,
+}}
+pub type PENLISTMENT_BASIC_INFORMATION = *mut ENLISTMENT_BASIC_INFORMATION;
+STRUCT!{struct ENLISTMENT_CRM_INFORMATION {
+ CrmTransactionManagerId: GUID,
+ CrmResourceManagerId: GUID,
+ CrmEnlistmentId: GUID,
+}}
+pub type PENLISTMENT_CRM_INFORMATION = *mut ENLISTMENT_CRM_INFORMATION;
+ENUM!{enum ENLISTMENT_INFORMATION_CLASS {
+ EnlistmentBasicInformation,
+ EnlistmentRecoveryInformation,
+ EnlistmentCrmInformation,
+}}
+STRUCT!{struct TRANSACTION_LIST_ENTRY {
+ UOW: UOW,
+}}
+pub type PTRANSACTION_LIST_ENTRY = *mut TRANSACTION_LIST_ENTRY;
+STRUCT!{struct TRANSACTION_LIST_INFORMATION {
+ NumberOfTransactions: DWORD,
+ TransactionInformation: [TRANSACTION_LIST_ENTRY; 1],
+}}
+pub type PTRANSACTION_LIST_INFORMATION = *mut TRANSACTION_LIST_INFORMATION;
+ENUM!{enum KTMOBJECT_TYPE {
+ KTMOBJECT_TRANSACTION,
+ KTMOBJECT_TRANSACTION_MANAGER,
+ KTMOBJECT_RESOURCE_MANAGER,
+ KTMOBJECT_ENLISTMENT,
+ KTMOBJECT_INVALID,
+}}
+pub type PKTMOBJECT_TYPE = *mut KTMOBJECT_TYPE;
+STRUCT!{struct KTMOBJECT_CURSOR {
+ LastQuery: GUID,
+ ObjectIdCount: DWORD,
+ ObjectIds: [GUID; 1],
+}}
+pub type PKTMOBJECT_CURSOR = *mut KTMOBJECT_CURSOR;
+pub type TP_VERSION = DWORD;
+pub type PTP_VERSION = *mut DWORD;
+STRUCT!{struct TP_CALLBACK_INSTANCE {
+ dummy: *mut c_void,
+}}
+pub type PTP_CALLBACK_INSTANCE = *mut TP_CALLBACK_INSTANCE;
+FN!{stdcall PTP_SIMPLE_CALLBACK(
+ Instance: PTP_CALLBACK_INSTANCE,
+ Context: PVOID,
+) -> ()}
+STRUCT!{struct TP_POOL {
+ dummy: *mut c_void,
+}}
+pub type PTP_POOL = *mut TP_POOL;
+ENUM!{enum TP_CALLBACK_PRIORITY {
+ TP_CALLBACK_PRIORITY_HIGH,
+ TP_CALLBACK_PRIORITY_NORMAL,
+ TP_CALLBACK_PRIORITY_LOW,
+ TP_CALLBACK_PRIORITY_INVALID,
+ TP_CALLBACK_PRIORITY_COUNT = TP_CALLBACK_PRIORITY_INVALID,
+}}
+STRUCT!{struct TP_POOL_STACK_INFORMATION {
+ StackReserve: SIZE_T,
+ StackCommit: SIZE_T,
+}}
+pub type PTP_POOL_STACK_INFORMATION = *mut TP_POOL_STACK_INFORMATION;
+STRUCT!{struct TP_CLEANUP_GROUP {
+ dummy: *mut c_void,
+}}
+pub type PTP_CLEANUP_GROUP = *mut TP_CLEANUP_GROUP;
+FN!{stdcall PTP_CLEANUP_GROUP_CANCEL_CALLBACK(
+ ObjectContext: PVOID,
+ CleanupContext: PVOID,
+) -> ()}
+STRUCT!{struct TP_CALLBACK_ENVIRON_V3_u_s {
+ BitFields: DWORD,
+}}
+BITFIELD!{TP_CALLBACK_ENVIRON_V3_u_s BitFields: DWORD [
+ LongFunction set_LongFunction[0..1],
+ Persistent set_Persistent[1..2],
+ Private set_Private[2..32],
+]}
+UNION!{union TP_CALLBACK_ENVIRON_V3_u {
+ [u32; 1],
+ Flags Flags_mut: DWORD,
+ s s_mut: TP_CALLBACK_ENVIRON_V3_u_s,
+}}
+STRUCT!{struct TP_CALLBACK_ENVIRON_V3 {
+ Version: TP_VERSION,
+ Pool: PTP_POOL,
+ CleanupGroup: PTP_CLEANUP_GROUP,
+ CleanupGroupCancelCallback: PTP_CLEANUP_GROUP_CANCEL_CALLBACK,
+ RaceDll: PVOID,
+ ActivationContext: *mut ACTIVATION_CONTEXT,
+ FinalizationCallback: PTP_SIMPLE_CALLBACK,
+ u: TP_CALLBACK_ENVIRON_V3_u,
+ CallbackPriority: TP_CALLBACK_PRIORITY,
+ Size: DWORD,
+}}
+pub type TP_CALLBACK_ENVIRON = TP_CALLBACK_ENVIRON_V3;
+pub type PTP_CALLBACK_ENVIRON = *mut TP_CALLBACK_ENVIRON_V3;
+STRUCT!{struct TP_WORK {
+ dummy: *mut c_void,
+}}
+pub type PTP_WORK = *mut TP_WORK;
+FN!{stdcall PTP_WORK_CALLBACK(
+ Instance: PTP_CALLBACK_INSTANCE,
+ Context: PVOID,
+ Work: PTP_WORK,
+) -> ()}
+STRUCT!{struct TP_TIMER {
+ dummy: *mut c_void,
+}}
+pub type PTP_TIMER = *mut TP_TIMER;
+FN!{stdcall PTP_TIMER_CALLBACK(
+ Instance: PTP_CALLBACK_INSTANCE,
+ Context: PVOID,
+ Timer: PTP_TIMER,
+) -> ()}
+pub type TP_WAIT_RESULT = DWORD;
+STRUCT!{struct TP_WAIT {
+ dummy: *mut c_void,
+}}
+pub type PTP_WAIT = *mut TP_WAIT;
+FN!{stdcall PTP_WAIT_CALLBACK(
+ Instance: PTP_CALLBACK_INSTANCE,
+ Context: PVOID,
+ Wait: PTP_WAIT,
+ WaitResult: TP_WAIT_RESULT,
+) -> ()}
+STRUCT!{struct TP_IO {
+ dummy: *mut c_void,
+}}
+pub type PTP_IO = *mut TP_IO;
+pub const ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION: ULONG = 1;
+pub const ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION: ULONG = 2;
+pub const ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION: ULONG = 3;
+pub const ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION: ULONG = 4;
+pub const ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION: ULONG = 5;
+pub const ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION: ULONG = 6;
+pub const ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION: ULONG = 7;
+pub const ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE: ULONG = 8;
+pub const ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES: ULONG = 9;
+pub const ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS: ULONG = 10;
+pub const ACTIVATION_CONTEXT_SECTION_COMPATIBILITY_INFO: ULONG = 11;
+STRUCT!{struct ACTIVATION_CONTEXT {
+ dummy: *mut c_void,
+}}
diff --git a/vendor/winapi/src/um/winreg.rs b/vendor/winapi/src/um/winreg.rs
new file mode 100644
index 000000000..68c2ae2f7
--- /dev/null
+++ b/vendor/winapi/src/um/winreg.rs
@@ -0,0 +1,684 @@
+// 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::DWORD_PTR;
+use shared::minwindef::{
+ BOOL, BYTE, DWORD, HKEY, LPBYTE, LPCVOID, LPDWORD, PFILETIME, PHKEY, ULONG
+};
+use um::minwinbase::LPSECURITY_ATTRIBUTES;
+use um::reason::{
+ SHTDN_REASON_FLAG_PLANNED, SHTDN_REASON_LEGACY_API, SHTDN_REASON_MAJOR_HARDWARE,
+ SHTDN_REASON_MAJOR_OTHER, SHTDN_REASON_MAJOR_SOFTWARE, SHTDN_REASON_MAJOR_SYSTEM,
+ SHTDN_REASON_MINOR_HUNG, SHTDN_REASON_MINOR_INSTALLATION, SHTDN_REASON_MINOR_OTHER,
+ SHTDN_REASON_MINOR_RECONFIG, SHTDN_REASON_MINOR_UNSTABLE, SHTDN_REASON_UNKNOWN,
+};
+use um::winnt::{
+ ACCESS_MASK, BOOLEAN, HANDLE, LONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PBOOLEAN, PLONG,
+ PSECURITY_DESCRIPTOR, PVOID, SECURITY_INFORMATION,
+};
+pub type LSTATUS = LONG;
+pub const RRF_RT_REG_NONE: DWORD = 0x00000001;
+pub const RRF_RT_REG_SZ: DWORD = 0x00000002;
+pub const RRF_RT_REG_EXPAND_SZ: DWORD = 0x00000004;
+pub const RRF_RT_REG_BINARY: DWORD = 0x00000008;
+pub const RRF_RT_REG_DWORD: DWORD = 0x00000010;
+pub const RRF_RT_REG_MULTI_SZ: DWORD = 0x00000020;
+pub const RRF_RT_REG_QWORD: DWORD = 0x00000040;
+pub const RRF_RT_DWORD: DWORD = RRF_RT_REG_BINARY | RRF_RT_REG_DWORD;
+pub const RRF_RT_QWORD: DWORD = RRF_RT_REG_BINARY | RRF_RT_REG_QWORD;
+pub const RRF_RT_ANY: DWORD = 0x0000ffff;
+pub const RRF_SUBKEY_WOW6464KEY: DWORD = 0x00010000;
+pub const RRF_SUBKEY_WOW6432KEY: DWORD = 0x00020000;
+pub const RRF_WOW64_MASK: DWORD = 0x00030000;
+pub const RRF_NOEXPAND: DWORD = 0x10000000;
+pub const RRF_ZEROONFAILURE: DWORD = 0x20000000;
+pub const REG_PROCESS_APPKEY: DWORD = 0x00000001;
+pub type REGSAM = ACCESS_MASK;
+pub const HKEY_CLASSES_ROOT: HKEY = 0x80000000i32 as usize as HKEY;
+pub const HKEY_CURRENT_USER: HKEY = 0x80000001i32 as usize as HKEY;
+pub const HKEY_LOCAL_MACHINE: HKEY = 0x80000002i32 as usize as HKEY;
+pub const HKEY_USERS: HKEY = 0x80000003i32 as usize as HKEY;
+pub const HKEY_PERFORMANCE_DATA: HKEY = 0x80000004i32 as usize as HKEY;
+pub const HKEY_PERFORMANCE_TEXT: HKEY = 0x80000050i32 as usize as HKEY;
+pub const HKEY_PERFORMANCE_NLSTEXT: HKEY = 0x80000060i32 as usize as HKEY;
+pub const HKEY_CURRENT_CONFIG: HKEY = 0x80000005i32 as usize as HKEY;
+pub const HKEY_DYN_DATA: HKEY = 0x80000006i32 as usize as HKEY;
+pub const HKEY_CURRENT_USER_LOCAL_SETTINGS: HKEY = 0x80000007i32 as usize as HKEY;
+// PROVIDER_KEEPS_VALUE_LENGTH
+// val_context
+// PVALUEA
+// PVALUEW
+// QUERYHANDLER
+// REG_PROVIDER
+STRUCT!{struct VALENTA {
+ ve_valuename: LPSTR,
+ ve_valuelen: DWORD,
+ ve_valueptr: DWORD_PTR,
+ ve_type: DWORD,
+}}
+pub type PVALENTA = *mut VALENTA;
+STRUCT!{struct VALENTW {
+ ve_valuename: LPWSTR,
+ ve_valuelen: DWORD,
+ ve_valueptr: DWORD_PTR,
+ ve_type: DWORD,
+}}
+pub type PVALENTW = *mut VALENTW;
+// WIN31_CLASS
+pub const REG_MUI_STRING_TRUNCATE: DWORD = 0x00000001;
+pub const REG_SECURE_CONNECTION: DWORD = 1;
+extern "system" {
+ pub fn RegCloseKey(
+ hKey: HKEY,
+ ) -> LSTATUS;
+ pub fn RegOverridePredefKey(
+ hKey: HKEY,
+ hNewHKey: HKEY,
+ ) -> LSTATUS;
+ pub fn RegOpenUserClassesRoot(
+ hToken: HANDLE,
+ dwOptions: DWORD,
+ samDesired: REGSAM,
+ phkResult: PHKEY,
+ ) -> LSTATUS;
+ pub fn RegOpenCurrentUser(
+ samDesired: REGSAM,
+ phkResult: PHKEY,
+ ) -> LSTATUS;
+ pub fn RegDisablePredefinedCache() -> LSTATUS;
+ pub fn RegDisablePredefinedCacheEx() -> LSTATUS;
+ pub fn RegConnectRegistryA(
+ lpMachineName: LPCSTR,
+ hKey: HKEY,
+ phkResult: PHKEY,
+ ) -> LSTATUS;
+ pub fn RegConnectRegistryW(
+ lpMachineName: LPCWSTR,
+ hKey: HKEY,
+ phkResult: PHKEY,
+ ) -> LSTATUS;
+ pub fn RegConnectRegistryExA(
+ lpMachineName: LPCSTR,
+ hKey: HKEY,
+ flags: ULONG,
+ phkResult: PHKEY,
+ ) -> LSTATUS;
+ pub fn RegConnectRegistryExW(
+ lpMachineName: LPCWSTR,
+ hKey: HKEY,
+ flags: ULONG,
+ phkResult: PHKEY,
+ ) -> LSTATUS;
+ pub fn RegCreateKeyA(
+ hKey: HKEY,
+ lpSubKey: LPCSTR,
+ phkResult: PHKEY,
+ ) -> LSTATUS;
+ pub fn RegCreateKeyW(
+ hKey: HKEY,
+ lpSubKey: LPCWSTR,
+ phkResult: PHKEY,
+ ) -> LSTATUS;
+ pub fn RegCreateKeyExA(
+ hKey: HKEY,
+ lpSubKey: LPCSTR,
+ Reserved: DWORD,
+ lpClass: LPSTR,
+ dwOptions: DWORD,
+ samDesired: REGSAM,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ phkResult: PHKEY,
+ lpdwDisposition: LPDWORD,
+ ) -> LSTATUS;
+ pub fn RegCreateKeyExW(
+ hKey: HKEY,
+ lpSubKey: LPCWSTR,
+ Reserved: DWORD,
+ lpClass: LPWSTR,
+ dwOptions: DWORD,
+ samDesired: REGSAM,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ phkResult: PHKEY,
+ lpdwDisposition: LPDWORD,
+ ) -> LSTATUS;
+ pub fn RegCreateKeyTransactedA(
+ hKey: HKEY,
+ lpSubKey: LPCSTR,
+ Reserved: DWORD,
+ lpClass: LPSTR,
+ dwOptions: DWORD,
+ samDesired: REGSAM,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ phkResult: PHKEY,
+ lpdwDisposition: LPDWORD,
+ hTransaction: HANDLE,
+ pExtendedParemeter: PVOID,
+ ) -> LSTATUS;
+ pub fn RegCreateKeyTransactedW(
+ hKey: HKEY,
+ lpSubKey: LPCWSTR,
+ Reserved: DWORD,
+ lpClass: LPWSTR,
+ dwOptions: DWORD,
+ samDesired: REGSAM,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ phkResult: PHKEY,
+ lpdwDisposition: LPDWORD,
+ hTransaction: HANDLE,
+ pExtendedParemeter: PVOID,
+ ) -> LSTATUS;
+ pub fn RegDeleteKeyA(
+ hKey: HKEY,
+ lpSubKey: LPCSTR,
+ ) -> LSTATUS;
+ pub fn RegDeleteKeyW(
+ hKey: HKEY,
+ lpSubKey: LPCWSTR,
+ ) -> LSTATUS;
+ pub fn RegDeleteKeyExA(
+ hKey: HKEY,
+ lpSubKey: LPCSTR,
+ samDesired: REGSAM,
+ Reserved: DWORD,
+ ) -> LSTATUS;
+ pub fn RegDeleteKeyExW(
+ hKey: HKEY,
+ lpSubKey: LPCWSTR,
+ samDesired: REGSAM,
+ Reserved: DWORD,
+ ) -> LSTATUS;
+ pub fn RegDeleteKeyTransactedA(
+ hKey: HKEY,
+ lpSubKey: LPCSTR,
+ samDesired: REGSAM,
+ Reserved: DWORD,
+ hTransaction: HANDLE,
+ pExtendedParemeter: PVOID,
+ ) -> LSTATUS;
+ pub fn RegDeleteKeyTransactedW(
+ hKey: HKEY,
+ lpSubKey: LPCWSTR,
+ samDesired: REGSAM,
+ Reserved: DWORD,
+ hTransaction: HANDLE,
+ pExtendedParemeter: PVOID,
+ ) -> LSTATUS;
+ pub fn RegDisableReflectionKey(
+ hBase: HKEY,
+ ) -> LONG;
+ pub fn RegEnableReflectionKey(
+ hBase: HKEY,
+ ) -> LONG;
+ pub fn RegQueryReflectionKey(
+ hBase: HKEY,
+ bIsReflectionDisabled: *mut BOOL,
+ ) -> LONG;
+ pub fn RegDeleteValueA(
+ hKey: HKEY,
+ lpValueName: LPCSTR,
+ ) -> LSTATUS;
+ pub fn RegDeleteValueW(
+ hKey: HKEY,
+ lpValueName: LPCWSTR,
+ ) -> LSTATUS;
+ pub fn RegEnumKeyA(
+ hKey: HKEY,
+ dwIndex: DWORD,
+ lpName: LPSTR,
+ cchName: DWORD,
+ ) -> LSTATUS;
+ pub fn RegEnumKeyW(
+ hKey: HKEY,
+ dwIndex: DWORD,
+ lpName: LPWSTR,
+ cchName: DWORD,
+ ) -> LSTATUS;
+ pub fn RegEnumKeyExA(
+ hKey: HKEY,
+ dwIndex: DWORD,
+ lpName: LPSTR,
+ lpcName: LPDWORD,
+ lpReserved: LPDWORD,
+ lpClass: LPSTR,
+ lpcClass: LPDWORD,
+ lpftLastWriteTime: PFILETIME,
+ ) -> LSTATUS;
+ pub fn RegEnumKeyExW(
+ hKey: HKEY,
+ dwIndex: DWORD,
+ lpName: LPWSTR,
+ lpcName: LPDWORD,
+ lpReserved: LPDWORD,
+ lpClass: LPWSTR,
+ lpcClass: LPDWORD,
+ lpftLastWriteTime: PFILETIME,
+ ) -> LSTATUS;
+ pub fn RegEnumValueA(
+ hKey: HKEY,
+ dwIndex: DWORD,
+ lpValueName: LPSTR,
+ lpcchValueName: LPDWORD,
+ lpReserved: LPDWORD,
+ lpType: LPDWORD,
+ lpData: LPBYTE,
+ lpcbData: LPDWORD,
+ ) -> LSTATUS;
+ pub fn RegEnumValueW(
+ hKey: HKEY,
+ dwIndex: DWORD,
+ lpValueName: LPWSTR,
+ lpcchValueName: LPDWORD,
+ lpReserved: LPDWORD,
+ lpType: LPDWORD,
+ lpData: LPBYTE,
+ lpcbData: LPDWORD,
+ ) -> LSTATUS;
+ pub fn RegFlushKey(
+ hKey: HKEY,
+ ) -> LSTATUS;
+ pub fn RegGetKeySecurity(
+ hKey: HKEY,
+ SecurityInformation: SECURITY_INFORMATION,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ lpcbSecurityDescriptor: LPDWORD,
+ ) -> LSTATUS;
+ pub fn RegLoadKeyA(
+ hKey: HKEY,
+ lpSubKey: LPCSTR,
+ lpFile: LPCSTR,
+ ) -> LSTATUS;
+ pub fn RegLoadKeyW(
+ hKey: HKEY,
+ lpSubKey: LPCWSTR,
+ lpFile: LPCWSTR,
+ ) -> LSTATUS;
+ pub fn RegNotifyChangeKeyValue(
+ hKey: HKEY,
+ bWatchSubtree: BOOL,
+ dwNotifyFilter: DWORD,
+ hEvent: HANDLE,
+ fAsynchronous: BOOL,
+ ) -> LSTATUS;
+ pub fn RegOpenKeyA(
+ hKey: HKEY,
+ lpSubKey: LPCSTR,
+ phkResult: PHKEY,
+ ) -> LSTATUS;
+ pub fn RegOpenKeyW(
+ hKey: HKEY,
+ lpSubKey: LPCWSTR,
+ phkResult: PHKEY,
+ ) -> LSTATUS;
+ pub fn RegOpenKeyExA(
+ hKey: HKEY,
+ lpSubKey: LPCSTR,
+ ulOptions: DWORD,
+ samDesired: REGSAM,
+ phkResult: PHKEY,
+ ) -> LSTATUS;
+ pub fn RegOpenKeyExW(
+ hKey: HKEY,
+ lpSubKey: LPCWSTR,
+ ulOptions: DWORD,
+ samDesired: REGSAM,
+ phkResult: PHKEY,
+ ) -> LSTATUS;
+ pub fn RegOpenKeyTransactedA(
+ hKey: HKEY,
+ lpSubKey: LPCSTR,
+ ulOptions: DWORD,
+ samDesired: REGSAM,
+ phkResult: PHKEY,
+ hTransaction: HANDLE,
+ pExtendedParemeter: PVOID,
+ ) -> LSTATUS;
+ pub fn RegOpenKeyTransactedW(
+ hKey: HKEY,
+ lpSubKey: LPCWSTR,
+ ulOptions: DWORD,
+ samDesired: REGSAM,
+ phkResult: PHKEY,
+ hTransaction: HANDLE,
+ pExtendedParemeter: PVOID,
+ ) -> LSTATUS;
+ pub fn RegQueryInfoKeyA(
+ hKey: HKEY,
+ lpClass: LPSTR,
+ lpcClass: LPDWORD,
+ lpReserved: LPDWORD,
+ lpcSubKeys: LPDWORD,
+ lpcMaxSubKeyLen: LPDWORD,
+ lpcMaxClassLen: LPDWORD,
+ lpcValues: LPDWORD,
+ lpcMaxValueNameLen: LPDWORD,
+ lpcMaxValueLen: LPDWORD,
+ lpcbSecurityDescriptor: LPDWORD,
+ lpftLastWriteTime: PFILETIME,
+ ) -> LSTATUS;
+ pub fn RegQueryInfoKeyW(
+ hKey: HKEY,
+ lpClass: LPWSTR,
+ lpcClass: LPDWORD,
+ lpReserved: LPDWORD,
+ lpcSubKeys: LPDWORD,
+ lpcMaxSubKeyLen: LPDWORD,
+ lpcMaxClassLen: LPDWORD,
+ lpcValues: LPDWORD,
+ lpcMaxValueNameLen: LPDWORD,
+ lpcMaxValueLen: LPDWORD,
+ lpcbSecurityDescriptor: LPDWORD,
+ lpftLastWriteTime: PFILETIME,
+ ) -> LSTATUS;
+ pub fn RegQueryValueA(
+ hKey: HKEY,
+ lpSubKey: LPCSTR,
+ lpData: LPSTR,
+ lpcbData: PLONG,
+ ) -> LSTATUS;
+ pub fn RegQueryValueW(
+ hKey: HKEY,
+ lpSubKey: LPCWSTR,
+ lpData: LPWSTR,
+ lpcbData: PLONG,
+ ) -> LSTATUS;
+ pub fn RegQueryMultipleValuesA(
+ hKey: HKEY,
+ val_list: PVALENTA,
+ num_vals: DWORD,
+ lpValueBuf: LPSTR,
+ ldwTotsize: LPDWORD,
+ ) -> LSTATUS;
+ pub fn RegQueryMultipleValuesW(
+ hKey: HKEY,
+ val_list: PVALENTW,
+ num_vals: DWORD,
+ lpValueBuf: LPWSTR,
+ ldwTotsize: LPDWORD,
+ ) -> LSTATUS;
+ pub fn RegQueryValueExA(
+ hKey: HKEY,
+ lpValueName: LPCSTR,
+ lpReserved: LPDWORD,
+ lpType: LPDWORD,
+ lpData: LPBYTE,
+ lpcbData: LPDWORD,
+ ) -> LSTATUS;
+ pub fn RegQueryValueExW(
+ hKey: HKEY,
+ lpValueName: LPCWSTR,
+ lpReserved: LPDWORD,
+ lpType: LPDWORD,
+ lpData: LPBYTE,
+ lpcbData: LPDWORD,
+ ) -> LSTATUS;
+ pub fn RegReplaceKeyA(
+ hKey: HKEY,
+ lpSubKey: LPCSTR,
+ lpNewFile: LPCSTR,
+ lpOldFile: LPCSTR,
+ ) -> LSTATUS;
+ pub fn RegReplaceKeyW(
+ hKey: HKEY,
+ lpSubKey: LPCWSTR,
+ lpNewFile: LPCWSTR,
+ lpOldFile: LPCWSTR,
+ ) -> LSTATUS;
+ pub fn RegRestoreKeyA(
+ hKey: HKEY,
+ lpFile: LPCSTR,
+ dwFlags: DWORD,
+ ) -> LSTATUS;
+ pub fn RegRestoreKeyW(
+ hKey: HKEY,
+ lpFile: LPCWSTR,
+ dwFlags: DWORD,
+ ) -> LSTATUS;
+ pub fn RegRenameKey(
+ hKey: HKEY,
+ lpSubKeyName: LPCWSTR,
+ lpNewKeyName: LPCWSTR,
+ ) -> LSTATUS;
+ pub fn RegSaveKeyA(
+ hKey: HKEY,
+ lpFile: LPCSTR,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ ) -> LSTATUS;
+ pub fn RegSaveKeyW(
+ hKey: HKEY,
+ lpFile: LPCWSTR,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ ) -> LSTATUS;
+ pub fn RegSetKeySecurity(
+ hKey: HKEY,
+ SecurityInformation: SECURITY_INFORMATION,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ ) -> LSTATUS;
+ pub fn RegSetValueA(
+ hKey: HKEY,
+ lpSubKey: LPCSTR,
+ dwType: DWORD,
+ lpData: LPCSTR,
+ cbData: DWORD,
+ ) -> LSTATUS;
+ pub fn RegSetValueW(
+ hKey: HKEY,
+ lpSubKey: LPCWSTR,
+ dwType: DWORD,
+ lpData: LPCWSTR,
+ cbData: DWORD,
+ ) -> LSTATUS;
+ pub fn RegSetValueExA(
+ hKey: HKEY,
+ lpValueName: LPCSTR,
+ Reserved: DWORD,
+ dwType: DWORD,
+ lpData: *const BYTE,
+ cbData: DWORD,
+ ) -> LSTATUS;
+ pub fn RegSetValueExW(
+ hKey: HKEY,
+ lpValueName: LPCWSTR,
+ Reserved: DWORD,
+ dwType: DWORD,
+ lpData: *const BYTE,
+ cbData: DWORD,
+ ) -> LSTATUS;
+ pub fn RegUnLoadKeyA(
+ hKey: HKEY,
+ lpSubKey: LPCSTR,
+ ) -> LSTATUS;
+ pub fn RegUnLoadKeyW(
+ hKey: HKEY,
+ lpSubKey: LPCWSTR,
+ ) -> LSTATUS;
+ pub fn RegDeleteKeyValueA(
+ hKey: HKEY,
+ lpSubKey: LPCSTR,
+ lpValueName: LPCSTR,
+ ) -> LSTATUS;
+ pub fn RegDeleteKeyValueW(
+ hKey: HKEY,
+ lpSubKey: LPCWSTR,
+ lpValueName: LPCWSTR,
+ ) -> LSTATUS;
+ pub fn RegSetKeyValueA(
+ hKey: HKEY,
+ lpSubKey: LPCSTR,
+ lpValueName: LPCSTR,
+ dwType: DWORD,
+ lpData: LPCVOID,
+ cbData: DWORD,
+ ) -> LSTATUS;
+ pub fn RegSetKeyValueW(
+ hKey: HKEY,
+ lpSubKey: LPCWSTR,
+ lpValueName: LPCWSTR,
+ dwType: DWORD,
+ lpData: LPCVOID,
+ cbData: DWORD,
+ ) -> LSTATUS;
+ pub fn RegDeleteTreeA(
+ hKey: HKEY,
+ lpSubKey: LPCSTR,
+ ) -> LSTATUS;
+ pub fn RegDeleteTreeW(
+ hKey: HKEY,
+ lpSubKey: LPCWSTR,
+ ) -> LSTATUS;
+ pub fn RegCopyTreeA(
+ hKeySrc: HKEY,
+ lpSubKey: LPCSTR,
+ hKeyDest: HKEY,
+ ) -> LSTATUS;
+ pub fn RegGetValueA(
+ hkey: HKEY,
+ lpSubKey: LPCSTR,
+ lpValue: LPCSTR,
+ dwFlags: DWORD,
+ pdwType: LPDWORD,
+ pvData: PVOID,
+ pcbData: LPDWORD,
+ ) -> LSTATUS;
+ pub fn RegGetValueW(
+ hkey: HKEY,
+ lpSubKey: LPCWSTR,
+ lpValue: LPCWSTR,
+ dwFlags: DWORD,
+ pdwType: LPDWORD,
+ pvData: PVOID,
+ pcbData: LPDWORD,
+ ) -> LSTATUS;
+ pub fn RegCopyTreeW(
+ hKeySrc: HKEY,
+ lpSubKey: LPCWSTR,
+ hKeyDest: HKEY,
+ ) -> LSTATUS;
+ pub fn RegLoadMUIStringA(
+ hKey: HKEY,
+ pszValue: LPCSTR,
+ pszOutBuf: LPSTR,
+ cbOutBuf: DWORD,
+ pcbData: LPDWORD,
+ Flags: DWORD,
+ pszDirectory: LPCSTR,
+ ) -> LSTATUS;
+ pub fn RegLoadMUIStringW(
+ hKey: HKEY,
+ pszValue: LPCWSTR,
+ pszOutBuf: LPWSTR,
+ cbOutBuf: DWORD,
+ pcbData: LPDWORD,
+ Flags: DWORD,
+ pszDirectory: LPCWSTR,
+ ) -> LSTATUS;
+ pub fn RegLoadAppKeyA(
+ lpFile: LPCSTR,
+ phkResult: PHKEY,
+ samDesired: REGSAM,
+ dwOptions: DWORD,
+ Reserved: DWORD,
+ ) -> LSTATUS;
+ pub fn RegLoadAppKeyW(
+ lpFile: LPCWSTR,
+ phkResult: PHKEY,
+ samDesired: REGSAM,
+ dwOptions: DWORD,
+ Reserved: DWORD,
+ ) -> LSTATUS;
+ pub fn InitiateSystemShutdownA(
+ lpMachineName: LPSTR,
+ lpMessage: LPSTR,
+ dwTimeout: DWORD,
+ bForceAppsClosed: BOOL,
+ bRebootAfterShutdown: BOOL,
+ ) -> BOOL;
+ pub fn InitiateSystemShutdownW(
+ lpMachineName: LPWSTR,
+ lpMessage: LPWSTR,
+ dwTimeout: DWORD,
+ bForceAppsClosed: BOOL,
+ bRebootAfterShutdown: BOOL,
+ ) -> BOOL;
+ pub fn AbortSystemShutdownA(
+ lpMachineName: LPSTR,
+ ) -> BOOL;
+ pub fn AbortSystemShutdownW(
+ lpMachineName: LPWSTR,
+ ) -> BOOL;
+}
+pub const REASON_SWINSTALL: DWORD = SHTDN_REASON_MAJOR_SOFTWARE | SHTDN_REASON_MINOR_INSTALLATION;
+pub const REASON_HWINSTALL: DWORD = SHTDN_REASON_MAJOR_HARDWARE | SHTDN_REASON_MINOR_INSTALLATION;
+pub const REASON_SERVICEHANG: DWORD = SHTDN_REASON_MAJOR_SOFTWARE | SHTDN_REASON_MINOR_HUNG;
+pub const REASON_UNSTABLE: DWORD = SHTDN_REASON_MAJOR_SYSTEM | SHTDN_REASON_MINOR_UNSTABLE;
+pub const REASON_SWHWRECONF: DWORD = SHTDN_REASON_MAJOR_SOFTWARE | SHTDN_REASON_MINOR_RECONFIG;
+pub const REASON_OTHER: DWORD = SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER;
+pub const REASON_UNKNOWN: DWORD = SHTDN_REASON_UNKNOWN;
+pub const REASON_LEGACY_API: DWORD = SHTDN_REASON_LEGACY_API;
+pub const REASON_PLANNED_FLAG: DWORD = SHTDN_REASON_FLAG_PLANNED;
+pub const MAX_SHUTDOWN_TIMEOUT: DWORD = 10 * 365 * 24 * 60 * 60;
+extern "system" {
+ pub fn InitiateSystemShutdownExA(
+ lpMachineName: LPSTR,
+ lpMessage: LPSTR,
+ dwTimeout: DWORD,
+ bForceAppsClosed: BOOL,
+ bRebootAfterShutdown: BOOL,
+ dwReason: DWORD,
+ ) -> BOOL;
+ pub fn InitiateSystemShutdownExW(
+ lpMachineName: LPWSTR,
+ lpMessage: LPWSTR,
+ dwTimeout: DWORD,
+ bForceAppsClosed: BOOL,
+ bRebootAfterShutdown: BOOL,
+ dwReason: DWORD,
+ ) -> BOOL;
+}
+pub const SHUTDOWN_FORCE_OTHERS: DWORD = 0x00000001;
+pub const SHUTDOWN_FORCE_SELF: DWORD = 0x00000002;
+pub const SHUTDOWN_RESTART: DWORD = 0x00000004;
+pub const SHUTDOWN_POWEROFF: DWORD = 0x00000008;
+pub const SHUTDOWN_NOREBOOT: DWORD = 0x00000010;
+pub const SHUTDOWN_GRACE_OVERRIDE: DWORD = 0x00000020;
+pub const SHUTDOWN_INSTALL_UPDATES: DWORD = 0x00000040;
+pub const SHUTDOWN_RESTARTAPPS: DWORD = 0x00000080;
+pub const SHUTDOWN_SKIP_SVC_PRESHUTDOWN: DWORD = 0x00000100;
+pub const SHUTDOWN_HYBRID: DWORD = 0x00000200;
+pub const SHUTDOWN_RESTART_BOOTOPTIONS: DWORD = 0x00000400;
+pub const SHUTDOWN_SOFT_REBOOT: DWORD = 0x00000800;
+pub const SHUTDOWN_MOBILE_UI: DWORD = 0x00001000;
+pub const SHUTDOWN_ARSO: DWORD = 0x00002000;
+extern "system" {
+ pub fn InitiateShutdownA(
+ lpMachineName: LPSTR,
+ lpMessage: LPSTR,
+ dwGracePeriod: DWORD,
+ dwShutdownFlags: DWORD,
+ dwReason: DWORD,
+ ) -> DWORD;
+ pub fn InitiateShutdownW(
+ lpMachineName: LPWSTR,
+ lpMessage: LPWSTR,
+ dwGracePeriod: DWORD,
+ dwShutdownFlags: DWORD,
+ dwReason: DWORD,
+ ) -> DWORD;
+ pub fn CheckForHiberboot(
+ pHiberboot: PBOOLEAN,
+ bClearFlag: BOOLEAN,
+ ) -> DWORD;
+ pub fn RegSaveKeyExA(
+ hKey: HKEY,
+ lpFile: LPCSTR,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ Flags: DWORD,
+ ) -> LSTATUS;
+ pub fn RegSaveKeyExW(
+ hKey: HKEY,
+ lpFile: LPCWSTR,
+ lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
+ Flags: DWORD,
+ ) -> LSTATUS;
+}
diff --git a/vendor/winapi/src/um/winsafer.rs b/vendor/winapi/src/um/winsafer.rs
new file mode 100644
index 000000000..9607b6772
--- /dev/null
+++ b/vendor/winapi/src/um/winsafer.rs
@@ -0,0 +1,228 @@
+// 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::GUID;
+use shared::minwindef::{BOOL, BYTE, DWORD, FILETIME, LPBYTE, LPDWORD, LPVOID, PDWORD};
+use shared::windef::HWND;
+use um::wincrypt::ALG_ID;
+use um::winnt::{BOOLEAN, HANDLE, LARGE_INTEGER, LPCWSTR, PHANDLE, PVOID, PWCHAR, WCHAR};
+DECLARE_HANDLE!{SAFER_LEVEL_HANDLE, __SAFER_LEVEL_HANDLE}
+pub const SAFER_SCOPEID_MACHINE: DWORD = 1;
+pub const SAFER_SCOPEID_USER: DWORD = 2;
+pub const SAFER_LEVELID_DISALLOWED: DWORD = 0x00000;
+pub const SAFER_LEVELID_UNTRUSTED: DWORD = 0x01000;
+pub const SAFER_LEVELID_CONSTRAINED: DWORD = 0x10000;
+pub const SAFER_LEVELID_NORMALUSER: DWORD = 0x20000;
+pub const SAFER_LEVELID_FULLYTRUSTED: DWORD = 0x40000;
+pub const SAFER_LEVEL_OPEN: DWORD = 1;
+pub const SAFER_MAX_FRIENDLYNAME_SIZE: SIZE_T = 256;
+pub const SAFER_MAX_DESCRIPTION_SIZE: SIZE_T = 256;
+pub const SAFER_MAX_HASH_SIZE: SIZE_T = 64;
+pub const SAFER_TOKEN_NULL_IF_EQUAL: DWORD = 0x00000001;
+pub const SAFER_TOKEN_COMPARE_ONLY: DWORD = 0x00000002;
+pub const SAFER_TOKEN_MAKE_INERT: DWORD = 0x00000004;
+pub const SAFER_TOKEN_WANT_FLAGS: DWORD = 0x00000008;
+pub const SAFER_CRITERIA_IMAGEPATH: DWORD = 0x00001;
+pub const SAFER_CRITERIA_NOSIGNEDHASH: DWORD = 0x00002;
+pub const SAFER_CRITERIA_IMAGEHASH: DWORD = 0x00004;
+pub const SAFER_CRITERIA_AUTHENTICODE: DWORD = 0x00008;
+pub const SAFER_CRITERIA_URLZONE: DWORD = 0x00010;
+pub const SAFER_CRITERIA_APPX_PACKAGE: DWORD = 0x00020;
+pub const SAFER_CRITERIA_IMAGEPATH_NT: DWORD = 0x01000;
+STRUCT!{struct SAFER_CODE_PROPERTIES_V1 {
+ cbSize: DWORD,
+ dwCheckFlags: DWORD,
+ ImagePath: LPCWSTR,
+ hImageFileHandle: HANDLE,
+ UrlZoneId: DWORD,
+ ImageHash: [BYTE; SAFER_MAX_HASH_SIZE],
+ dwImageHashSize: DWORD,
+ ImageSize: LARGE_INTEGER,
+ HashAlgorithm: ALG_ID,
+ pByteBlock: LPBYTE,
+ hWndParent: HWND,
+ dwWVTUIChoice: DWORD,
+}}
+pub type PSAFER_CODE_PROPERTIES_V1 = *mut SAFER_CODE_PROPERTIES_V1;
+STRUCT!{struct SAFER_CODE_PROPERTIES_V2 {
+ cbSize: DWORD,
+ dwCheckFlags: DWORD,
+ ImagePath: LPCWSTR,
+ hImageFileHandle: HANDLE,
+ UrlZoneId: DWORD,
+ ImageHash: [BYTE; SAFER_MAX_HASH_SIZE],
+ dwImageHashSize: DWORD,
+ ImageSize: LARGE_INTEGER,
+ HashAlgorithm: ALG_ID,
+ pByteBlock: LPBYTE,
+ hWndParent: HWND,
+ dwWVTUIChoice: DWORD,
+ PackageMoniker: LPCWSTR,
+ PackagePublisher: LPCWSTR,
+ PackageName: LPCWSTR,
+ PackageVersion: ULONG64,
+ PackageIsFramework: BOOL,
+}}
+pub type PSAFER_CODE_PROPERTIES_V2 = *mut SAFER_CODE_PROPERTIES_V2;
+pub type SAFER_CODE_PROPERTIES = SAFER_CODE_PROPERTIES_V2;
+pub type PSAFER_CODE_PROPERTIES = *mut SAFER_CODE_PROPERTIES;
+pub const SAFER_POLICY_JOBID_MASK: DWORD = 0xFF000000;
+pub const SAFER_POLICY_JOBID_CONSTRAINED: DWORD = 0x04000000;
+pub const SAFER_POLICY_JOBID_UNTRUSTED: DWORD = 0x03000000;
+pub const SAFER_POLICY_ONLY_EXES: DWORD = 0x00010000;
+pub const SAFER_POLICY_SANDBOX_INERT: DWORD = 0x00020000;
+pub const SAFER_POLICY_HASH_DUPLICATE: DWORD = 0x00040000;
+pub const SAFER_POLICY_ONLY_AUDIT: DWORD = 0x00001000;
+pub const SAFER_POLICY_BLOCK_CLIENT_UI: DWORD = 0x00002000;
+pub const SAFER_POLICY_UIFLAGS_MASK: DWORD = 0x000000FF;
+pub const SAFER_POLICY_UIFLAGS_INFORMATION_PROMPT: DWORD = 0x00000001;
+pub const SAFER_POLICY_UIFLAGS_OPTION_PROMPT: DWORD = 0x00000002;
+pub const SAFER_POLICY_UIFLAGS_HIDDEN: DWORD = 0x00000004;
+ENUM!{enum SAFER_POLICY_INFO_CLASS {
+ SaferPolicyLevelList = 1,
+ SaferPolicyEnableTransparentEnforcement,
+ SaferPolicyDefaultLevel,
+ SaferPolicyEvaluateUserScope,
+ SaferPolicyScopeFlags,
+ SaferPolicyDefaultLevelFlags,
+ SaferPolicyAuthenticodeEnabled,
+}}
+ENUM!{enum SAFER_OBJECT_INFO_CLASS {
+ SaferObjectLevelId = 1,
+ SaferObjectScopeId,
+ SaferObjectFriendlyName,
+ SaferObjectDescription,
+ SaferObjectBuiltin,
+ SaferObjectDisallowed,
+ SaferObjectDisableMaxPrivilege,
+ SaferObjectInvertDeletedPrivileges,
+ SaferObjectDeletedPrivileges,
+ SaferObjectDefaultOwner,
+ SaferObjectSidsToDisable,
+ SaferObjectRestrictedSidsInverted,
+ SaferObjectRestrictedSidsAdded,
+ SaferObjectAllIdentificationGuids,
+ SaferObjectSingleIdentification,
+ SaferObjectExtendedError,
+}}
+ENUM!{enum SAFER_IDENTIFICATION_TYPES {
+ SaferIdentityDefault,
+ SaferIdentityTypeImageName = 1,
+ SaferIdentityTypeImageHash,
+ SaferIdentityTypeUrlZone,
+ SaferIdentityTypeCertificate,
+}}
+STRUCT!{struct SAFER_IDENTIFICATION_HEADER {
+ dwIdentificationType: SAFER_IDENTIFICATION_TYPES,
+ cbStructSize: DWORD,
+ IdentificationGuid: GUID,
+ lastModified: FILETIME,
+}}
+pub type PSAFER_IDENTIFICATION_HEADER = *mut SAFER_IDENTIFICATION_HEADER;
+STRUCT!{struct SAFER_PATHNAME_IDENTIFICATION {
+ header: SAFER_IDENTIFICATION_HEADER,
+ Description: [WCHAR; SAFER_MAX_DESCRIPTION_SIZE],
+ ImageName: PWCHAR,
+ dwSaferFlags: DWORD,
+}}
+pub type PSAFER_PATHNAME_IDENTIFICATION = *mut SAFER_PATHNAME_IDENTIFICATION;
+STRUCT!{struct SAFER_HASH_IDENTIFICATION {
+ header: SAFER_IDENTIFICATION_HEADER,
+ Description: [WCHAR; SAFER_MAX_DESCRIPTION_SIZE],
+ FriendlyName: [WCHAR; SAFER_MAX_DESCRIPTION_SIZE],
+ HashSize: DWORD,
+ ImageHash: [BYTE; SAFER_MAX_HASH_SIZE],
+ HashAlgorithm: ALG_ID,
+ ImageSize: LARGE_INTEGER,
+ dwSaferFlags: DWORD,
+}}
+pub type PSAFER_HASH_IDENTIFICATION = *mut SAFER_HASH_IDENTIFICATION;
+STRUCT!{struct SAFER_HASH_IDENTIFICATION2 {
+ hashIdentification: SAFER_HASH_IDENTIFICATION,
+ HashSize: DWORD,
+ ImageHash: [BYTE; SAFER_MAX_HASH_SIZE],
+ HashAlgorithm: ALG_ID,
+}}
+pub type PSAFER_HASH_IDENTIFICATION2 = *mut SAFER_HASH_IDENTIFICATION2;
+STRUCT!{struct SAFER_URLZONE_IDENTIFICATION {
+ header: SAFER_IDENTIFICATION_HEADER,
+ UrlZoneId: DWORD,
+ dwSaferFlags: DWORD,
+}}
+pub type PSAFER_URLZONE_IDENTIFICATION = *mut SAFER_URLZONE_IDENTIFICATION;
+extern "system" {
+ pub fn SaferGetPolicyInformation(
+ dwScopeId: DWORD,
+ SaferPolicyInfoClass: SAFER_POLICY_INFO_CLASS,
+ InfoBufferSize: DWORD,
+ InfoBuffer: PVOID,
+ InfoBufferRetSize: PDWORD,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn SaferSetPolicyInformation(
+ dwScopeId: DWORD,
+ SaferPolicyInfoClass: SAFER_POLICY_INFO_CLASS,
+ InfoBufferSize: DWORD,
+ InfoBuffer: PVOID,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn SaferCreateLevel(
+ dwScopeId: DWORD,
+ dwLevelId: DWORD,
+ OpenFlags: DWORD,
+ pLevelHandle: *mut SAFER_LEVEL_HANDLE,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn SaferCloseLevel(
+ hLevelHandle: SAFER_LEVEL_HANDLE,
+ ) -> BOOL;
+ pub fn SaferIdentifyLevel(
+ dwNumProperties: DWORD,
+ pCodeProperties: PSAFER_CODE_PROPERTIES,
+ pLevelHandle: *mut SAFER_LEVEL_HANDLE,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn SaferComputeTokenFromLevel(
+ LevelHandle: SAFER_LEVEL_HANDLE,
+ InAccessToken: HANDLE,
+ OutAccessToken: PHANDLE,
+ dwFlags: DWORD,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn SaferGetLevelInformation(
+ LevelHandle: SAFER_LEVEL_HANDLE,
+ dwInfoType: SAFER_OBJECT_INFO_CLASS,
+ lpQueryBuffer: LPVOID,
+ dwInBufferSize: DWORD,
+ lpdwOutBufferSize: LPDWORD,
+ ) -> BOOL;
+ pub fn SaferSetLevelInformation(
+ LevelHandle: SAFER_LEVEL_HANDLE,
+ dwInfoType: SAFER_OBJECT_INFO_CLASS,
+ lpQueryBuffer: LPVOID,
+ dwInBufferSize: DWORD,
+ ) -> BOOL;
+ pub fn SaferRecordEventLogEntry(
+ hLevel: SAFER_LEVEL_HANDLE,
+ szTargetPath: LPCWSTR,
+ lpReserved: LPVOID,
+ ) -> BOOL;
+ pub fn SaferiIsExecutableFileType(
+ szFullPath: LPCWSTR,
+ bFromShellExecute: BOOLEAN,
+ ) -> BOOL;
+}
+pub const SRP_POLICY_EXE: &'static str = "EXE";
+pub const SRP_POLICY_DLL: &'static str = "DLL";
+pub const SRP_POLICY_MSI: &'static str = "MSI";
+pub const SRP_POLICY_SCRIPT: &'static str = "SCRIPT";
+pub const SRP_POLICY_SHELL: &'static str = "SHELL";
+pub const SRP_POLICY_NOV2: &'static str = "IGNORESRPV2";
+pub const SRP_POLICY_APPX: &'static str = "APPX";
+pub const SRP_POLICY_WLDPMSI: &'static str = "WLDPMSI";
+pub const SRP_POLICY_WLDPSCRIPT: &'static str = "WLDPSCRIPT";
+pub const SRP_POLICY_WLDPCONFIGCI: &'static str = "WLDPCONFIGCI";
+pub const SRP_POLICY_MANAGEDINSTALLER: &'static str = "MANAGEDINSTALLER";
diff --git a/vendor/winapi/src/um/winscard.rs b/vendor/winapi/src/um/winscard.rs
new file mode 100644
index 000000000..5adaec774
--- /dev/null
+++ b/vendor/winapi/src/um/winscard.rs
@@ -0,0 +1,709 @@
+// 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.
+//! Data Protection API Prototypes and Definitions
+// This header file provides the definitions and symbols necessary for an
+// Application or Smart Card Service Provider to access the Smartcard Subsystem.
+use shared::basetsd::ULONG_PTR;
+use shared::guiddef::{LPCGUID, LPGUID};
+use shared::minwindef::{BOOL, BYTE, DWORD, LPBYTE, LPCVOID, LPDWORD, LPVOID, PBYTE};
+use shared::rpcdce::UUID;
+use shared::windef::{HICON, HWND};
+use um::winnt::{CHAR, HANDLE, LONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PVOID, WCHAR};
+use um::winsmcrd::{LPCSCARD_IO_REQUEST, LPSCARD_IO_REQUEST};
+pub type LPCBYTE = *const BYTE;
+pub type SCARDCONTEXT = ULONG_PTR;
+pub type PSCARDCONTEXT = *mut SCARDCONTEXT;
+pub type LPSCARDCONTEXT = *mut SCARDCONTEXT;
+pub type SCARDHANDLE = ULONG_PTR;
+pub type PSCARDHANDLE = *mut SCARDHANDLE;
+pub type LPSCARDHANDLE = *mut SCARDHANDLE;
+pub const SCARD_AUTOALLOCATE: DWORD = -1i32 as u32;
+pub const SCARD_SCOPE_USER: DWORD = 0;
+pub const SCARD_SCOPE_TERMINAL: DWORD = 1;
+pub const SCARD_SCOPE_SYSTEM: DWORD = 2;
+extern "system" {
+ pub fn SCardEstablishContext(
+ dwScope: DWORD,
+ pvReserved1: LPCVOID,
+ pvReserved2: LPCVOID,
+ phContext: LPSCARDCONTEXT,
+ ) -> LONG;
+ pub fn SCardReleaseContext(
+ hContext: SCARDCONTEXT,
+ ) -> LONG;
+ pub fn SCardIsValidContext(
+ hContext: SCARDCONTEXT,
+ ) -> LONG;
+}
+pub const SCARD_PROVIDER_PRIMARY: DWORD = 1;
+pub const SCARD_PROVIDER_CSP: DWORD = 2;
+pub const SCARD_PROVIDER_KSP: DWORD = 3;
+extern "system" {
+ pub fn SCardListReaderGroupsA(
+ hContext: SCARDCONTEXT,
+ mszGroups: LPSTR,
+ pcchGroups: LPDWORD,
+ ) -> LONG;
+ pub fn SCardListReaderGroupsW(
+ hContext: SCARDCONTEXT,
+ mszGroups: LPWSTR,
+ pcchGroups: LPDWORD,
+ ) -> LONG;
+ pub fn SCardListReadersA(
+ hContext: SCARDCONTEXT,
+ mszGroups: LPCSTR,
+ mszReaders: LPSTR,
+ pcchReaders: LPDWORD,
+ ) -> LONG;
+ pub fn SCardListReadersW(
+ hContext: SCARDCONTEXT,
+ mszGroups: LPCWSTR,
+ mszReaders: LPWSTR,
+ pcchReaders: LPDWORD,
+ ) -> LONG;
+ pub fn SCardListCardsA(
+ hContext: SCARDCONTEXT,
+ pbAtr: LPCBYTE,
+ rgquidInterfaces: LPCGUID,
+ cguidInterfaceCount: DWORD,
+ mszCards: *mut CHAR,
+ pcchCards: LPDWORD,
+ ) -> LONG;
+ pub fn SCardListCardsW(
+ hContext: SCARDCONTEXT,
+ pbAtr: LPCBYTE,
+ rgquidInterfaces: LPCGUID,
+ cguidInterfaceCount: DWORD,
+ mszCards: *mut WCHAR,
+ pcchCards: LPDWORD,
+ ) -> LONG;
+ pub fn SCardListInterfacesA(
+ hContext: SCARDCONTEXT,
+ szCard: LPCSTR,
+ pguidInterfaces: LPGUID,
+ pcguidInterfaces: LPDWORD,
+ ) -> LONG;
+ pub fn SCardListInterfacesW(
+ hContext: SCARDCONTEXT,
+ szCard: LPCWSTR,
+ pguidInterfaces: LPGUID,
+ pcguidInterfaces: LPDWORD,
+ ) -> LONG;
+ pub fn SCardGetProviderIdA(
+ hContext: SCARDCONTEXT,
+ szCard: LPCSTR,
+ pguidProviderId: LPGUID,
+ ) -> LONG;
+ pub fn SCardGetProviderIdW(
+ hContext: SCARDCONTEXT,
+ szCard: LPCWSTR,
+ pguidProviderId: LPGUID,
+ ) -> LONG;
+ pub fn SCardGetCardTypeProviderNameA(
+ hContext: SCARDCONTEXT,
+ szCardName: LPCSTR,
+ dwProviderId: DWORD,
+ szProvider: *mut CHAR,
+ pcchProvider: LPDWORD,
+ ) -> LONG;
+ pub fn SCardGetCardTypeProviderNameW(
+ hContext: SCARDCONTEXT,
+ szCardName: LPCWSTR,
+ dwProviderId: DWORD,
+ szProvider: *mut WCHAR,
+ pcchProvider: LPDWORD,
+ ) -> LONG;
+ pub fn SCardIntroduceReaderGroupA(
+ hContext: SCARDCONTEXT,
+ szGroupName: LPCSTR,
+ ) -> LONG;
+ pub fn SCardIntroduceReaderGroupW(
+ hContext: SCARDCONTEXT,
+ szGroupName: LPCWSTR,
+ ) -> LONG;
+ pub fn SCardForgetReaderGroupA(
+ hContext: SCARDCONTEXT,
+ szGroupName: LPCSTR,
+ ) -> LONG;
+ pub fn SCardForgetReaderGroupW(
+ hContext: SCARDCONTEXT,
+ szGroupName: LPCWSTR,
+ ) -> LONG;
+ pub fn SCardIntroduceReaderA(
+ hContext: SCARDCONTEXT,
+ szReaderName: LPCSTR,
+ szDeviceName: LPCSTR,
+ ) -> LONG;
+ pub fn SCardIntroduceReaderW(
+ hContext: SCARDCONTEXT,
+ szReaderName: LPCWSTR,
+ szDeviceName: LPCWSTR,
+ ) -> LONG;
+ pub fn SCardForgetReaderA(
+ hContext: SCARDCONTEXT,
+ szReaderName: LPCSTR,
+ ) -> LONG;
+ pub fn SCardForgetReaderW(
+ hContext: SCARDCONTEXT,
+ szReaderName: LPCWSTR,
+ ) -> LONG;
+ pub fn SCardAddReaderToGroupA(
+ hContext: SCARDCONTEXT,
+ szReaderName: LPCSTR,
+ szGroupName: LPCSTR,
+ ) -> LONG;
+ pub fn SCardAddReaderToGroupW(
+ hContext: SCARDCONTEXT,
+ szReaderName: LPCWSTR,
+ szGroupName: LPCWSTR,
+ ) -> LONG;
+ pub fn SCardRemoveReaderFromGroupA(
+ hContext: SCARDCONTEXT,
+ szReaderName: LPCSTR,
+ szGroupName: LPCSTR,
+ ) -> LONG;
+ pub fn SCardRemoveReaderFromGroupW(
+ hContext: SCARDCONTEXT,
+ szReaderName: LPCWSTR,
+ szGroupName: LPCWSTR,
+ ) -> LONG;
+ pub fn SCardIntroduceCardTypeA(
+ hContext: SCARDCONTEXT,
+ szCardName: LPCSTR,
+ pguidPrimaryProvider: LPCGUID,
+ rgguidInterfaces: LPCGUID,
+ dwInterfaceCount: DWORD,
+ pbAtr: LPCBYTE,
+ pbAtrMask: LPCBYTE,
+ cbAtrLen: DWORD,
+ ) -> LONG;
+ pub fn SCardIntroduceCardTypeW(
+ hContext: SCARDCONTEXT,
+ szCardName: LPCWSTR,
+ pguidPrimaryProvider: LPCGUID,
+ rgguidInterfaces: LPCGUID,
+ dwInterfaceCount: DWORD,
+ pbAtr: LPCBYTE,
+ pbAtrMask: LPCBYTE,
+ cbAtrLen: DWORD,
+ ) -> LONG;
+ pub fn SCardSetCardTypeProviderNameA(
+ hContext: SCARDCONTEXT,
+ szCardName: LPCSTR,
+ dwProviderId: DWORD,
+ szProvider: LPCSTR,
+ ) -> LONG;
+ pub fn SCardSetCardTypeProviderNameW(
+ hContext: SCARDCONTEXT,
+ szCardName: LPCWSTR,
+ dwProviderId: DWORD,
+ szProvider: LPCWSTR,
+ ) -> LONG;
+ pub fn SCardForgetCardTypeA(
+ hContext: SCARDCONTEXT,
+ szCardName: LPCSTR,
+ ) -> LONG;
+ pub fn SCardForgetCardTypeW(
+ hContext: SCARDCONTEXT,
+ szCardName: LPCWSTR,
+ ) -> LONG;
+ pub fn SCardFreeMemory(
+ hContext: SCARDCONTEXT,
+ pvMem: LPCVOID,
+ ) -> LONG;
+ pub fn SCardAccessStartedEvent() -> HANDLE;
+ pub fn SCardReleaseStartedEvent();
+}
+STRUCT!{struct SCARD_READERSTATEA {
+ szReader: LPCSTR,
+ pvUserData: LPVOID,
+ dwCurrentState: DWORD,
+ dwEventState: DWORD,
+ cbAtr: DWORD,
+ rgbAtr: [BYTE; 36],
+}}
+pub type PSCARD_READERSTATEA = *mut SCARD_READERSTATEA;
+pub type LPSCARD_READERSTATEA = *mut SCARD_READERSTATEA;
+STRUCT!{struct SCARD_READERSTATEW {
+ szReader: LPCWSTR,
+ pvUserData: LPVOID,
+ dwCurrentState: DWORD,
+ dwEventState: DWORD,
+ cbAtr: DWORD,
+ rgbAtr: [BYTE; 36],
+}}
+pub type PSCARD_READERSTATEW = *mut SCARD_READERSTATEW;
+pub type LPSCARD_READERSTATEW = *mut SCARD_READERSTATEW;
+pub type SCARD_READERSTATE_A = SCARD_READERSTATEA;
+pub type SCARD_READERSTATE_W = SCARD_READERSTATEW;
+pub type PSCARD_READERSTATE_A = PSCARD_READERSTATEA;
+pub type PSCARD_READERSTATE_W = PSCARD_READERSTATEW;
+pub type LPSCARD_READERSTATE_A = LPSCARD_READERSTATEA;
+pub type LPSCARD_READERSTATE_W = LPSCARD_READERSTATEW;
+pub const SCARD_STATE_UNAWARE: DWORD = 0x00000000;
+pub const SCARD_STATE_IGNORE: DWORD = 0x00000001;
+pub const SCARD_STATE_CHANGED: DWORD = 0x00000002;
+pub const SCARD_STATE_UNKNOWN: DWORD = 0x00000004;
+pub const SCARD_STATE_UNAVAILABLE: DWORD = 0x00000008;
+pub const SCARD_STATE_EMPTY: DWORD = 0x00000010;
+pub const SCARD_STATE_PRESENT: DWORD = 0x00000020;
+pub const SCARD_STATE_ATRMATCH: DWORD = 0x00000040;
+pub const SCARD_STATE_EXCLUSIVE: DWORD = 0x00000080;
+pub const SCARD_STATE_INUSE: DWORD = 0x00000100;
+pub const SCARD_STATE_MUTE: DWORD = 0x00000200;
+pub const SCARD_STATE_UNPOWERED: DWORD = 0x00000400;
+extern "system" {
+ pub fn SCardLocateCardsA(
+ hContext: SCARDCONTEXT,
+ mszCards: LPCSTR,
+ rgReaderStates: LPSCARD_READERSTATEA,
+ cReaders: DWORD,
+ ) -> LONG;
+ pub fn SCardLocateCardsW(
+ hContext: SCARDCONTEXT,
+ mszCards: LPCWSTR,
+ rgReaderStates: LPSCARD_READERSTATEW,
+ cReaders: DWORD,
+ ) -> LONG;
+}
+STRUCT!{struct SCARD_ATRMASK {
+ cbAtr: DWORD,
+ rgbAtr: [BYTE; 36],
+ rgbMask: [BYTE; 36],
+}}
+pub type PSCARD_ATRMASK = *mut SCARD_ATRMASK;
+pub type LPSCARD_ATRMASK = *mut SCARD_ATRMASK;
+extern "system" {
+ pub fn SCardLocateCardsByATRA(
+ hContext: SCARDCONTEXT,
+ rgAtrMasks: LPSCARD_ATRMASK,
+ cAtrs: DWORD,
+ rgReaderStates: LPSCARD_READERSTATEA,
+ cReaders: DWORD,
+ ) -> LONG;
+ pub fn SCardLocateCardsByATRW(
+ hContext: SCARDCONTEXT,
+ rgAtrMasks: LPSCARD_ATRMASK,
+ cAtrs: DWORD,
+ rgReaderStates: LPSCARD_READERSTATEW,
+ cReaders: DWORD,
+ ) -> LONG;
+ pub fn SCardGetStatusChangeA(
+ hContext: SCARDCONTEXT,
+ dwTimeout: DWORD,
+ rgReaderStates: LPSCARD_READERSTATEA,
+ cReaders: DWORD,
+ ) -> LONG;
+ pub fn SCardGetStatusChangeW(
+ hContext: SCARDCONTEXT,
+ dwTimeout: DWORD,
+ rgReaderStates: LPSCARD_READERSTATEW,
+ cReaders: DWORD,
+ ) -> LONG;
+ pub fn SCardCancel(
+ hContext: SCARDCONTEXT,
+ ) -> LONG;
+}
+pub const SCARD_SHARE_EXCLUSIVE: DWORD = 1;
+pub const SCARD_SHARE_SHARED: DWORD = 2;
+pub const SCARD_SHARE_DIRECT: DWORD = 3;
+pub const SCARD_LEAVE_CARD: DWORD = 0;
+pub const SCARD_RESET_CARD: DWORD = 1;
+pub const SCARD_UNPOWER_CARD: DWORD = 2;
+pub const SCARD_EJECT_CARD: DWORD = 3;
+extern "system" {
+ pub fn SCardConnectA(
+ hContext: SCARDCONTEXT,
+ szReader: LPCSTR,
+ dwShareMode: DWORD,
+ dwPreferredProtocols: DWORD,
+ phCard: LPSCARDHANDLE,
+ pdwActiveProtocol: LPDWORD,
+ ) -> LONG;
+ pub fn SCardConnectW(
+ hContext: SCARDCONTEXT,
+ szReader: LPCWSTR,
+ dwShareMode: DWORD,
+ dwPreferredProtocols: DWORD,
+ phCard: LPSCARDHANDLE,
+ pdwActiveProtocol: LPDWORD,
+ ) -> LONG;
+ pub fn SCardReconnect(
+ hCard: SCARDHANDLE,
+ dwShareMode: DWORD,
+ dwPreferredProtocols: DWORD,
+ dwInitialization: DWORD,
+ pdwActiveProtocol: LPDWORD,
+ ) -> LONG;
+ pub fn SCardDisconnect(
+ hCard: SCARDHANDLE,
+ dwDisposition: DWORD,
+ ) -> LONG;
+ pub fn SCardBeginTransaction(
+ hCard: SCARDHANDLE,
+ ) -> LONG;
+ pub fn SCardEndTransaction(
+ hCard: SCARDHANDLE,
+ dwDisposition: DWORD,
+ ) -> LONG;
+ pub fn SCardState(
+ hCard: SCARDHANDLE,
+ pdwState: LPDWORD,
+ pdwProtocol: LPDWORD,
+ pbAtr: LPBYTE,
+ pcbAtrLen: LPDWORD,
+ ) -> LONG;
+ pub fn SCardStatusA(
+ hCard: SCARDHANDLE,
+ mszReaderNames: LPSTR,
+ pcchReaderLen: LPDWORD,
+ pdwState: LPDWORD,
+ pdwProtocol: LPDWORD,
+ pbAtr: LPBYTE,
+ pcbAtrLen: LPDWORD,
+ ) -> LONG;
+ pub fn SCardStatusW(
+ hCard: SCARDHANDLE,
+ mszReaderNames: LPWSTR,
+ pcchReaderLen: LPDWORD,
+ pdwState: LPDWORD,
+ pdwProtocol: LPDWORD,
+ pbAtr: LPBYTE,
+ pcbAtrLen: LPDWORD,
+ ) -> LONG;
+ pub fn SCardTransmit(
+ hCard: SCARDHANDLE,
+ pioSendPci: LPCSCARD_IO_REQUEST,
+ pbSendBuffer: LPCBYTE,
+ cbSendLength: DWORD,
+ pioRecvPci: LPSCARD_IO_REQUEST,
+ pbRecvBuffer: LPBYTE,
+ pcbRecvLength: LPDWORD,
+ ) -> LONG;
+ pub fn SCardGetTransmitCount(
+ hCard: SCARDHANDLE,
+ pcTransmitCount: LPDWORD,
+ ) -> LONG;
+ pub fn SCardControl(
+ hCard: SCARDHANDLE,
+ dwControlCode: DWORD,
+ lpInBuffer: LPCVOID,
+ cbInBufferSize: DWORD,
+ lpOutBuffer: LPVOID,
+ cbOutBufferSize: DWORD,
+ lpBytesReturned: LPDWORD,
+ ) -> LONG;
+ pub fn SCardGetAttrib(
+ hCard: SCARDHANDLE,
+ dwAttrId: DWORD,
+ pbAttr: LPBYTE,
+ pcbAttrLen: LPDWORD,
+ ) -> LONG;
+ pub fn SCardSetAttrib(
+ hCard: SCARDHANDLE,
+ dwAttrId: DWORD,
+ pbAttr: LPCBYTE,
+ cbAttrLen: DWORD,
+ ) -> LONG;
+}
+pub const SC_DLG_MINIMAL_UI: DWORD = 0x01;
+pub const SC_DLG_NO_UI: DWORD = 0x02;
+pub const SC_DLG_FORCE_UI: DWORD = 0x04;
+pub const SCERR_NOCARDNAME: DWORD = 0x4000;
+pub const SCERR_NOGUIDS: DWORD = 0x8000;
+FN!{stdcall LPOCNCONNPROCA(
+ SCARDCONTEXT,
+ LPSTR,
+ LPSTR,
+ PVOID,
+) -> SCARDHANDLE}
+FN!{stdcall LPOCNCONNPROCW(
+ SCARDCONTEXT,
+ LPWSTR,
+ LPWSTR,
+ PVOID,
+) -> SCARDHANDLE}
+FN!{stdcall LPOCNCHKPROC(
+ SCARDCONTEXT,
+ SCARDHANDLE,
+ PVOID,
+) -> BOOL}
+FN!{stdcall LPOCNDSCPROC(
+ SCARDCONTEXT,
+ SCARDHANDLE,
+ PVOID,
+) -> ()}
+STRUCT!{struct OPENCARD_SEARCH_CRITERIAA {
+ dwStructSize: DWORD,
+ lpstrGroupNames: LPSTR,
+ nMaxGroupNames: DWORD,
+ rgguidInterfaces: LPCGUID,
+ cguidInterfaces: DWORD,
+ lpstrCardNames: LPSTR,
+ nMaxCardNames: DWORD,
+ lpfnCheck: LPOCNCHKPROC,
+ lpfnConnect: LPOCNCONNPROCA,
+ lpfnDisconnect: LPOCNDSCPROC,
+ pvUserData: LPVOID,
+ dwShareMode: DWORD,
+ dwPreferredProtocols: DWORD,
+}}
+pub type POPENCARD_SEARCH_CRITERIAA = *mut OPENCARD_SEARCH_CRITERIAA;
+pub type LPOPENCARD_SEARCH_CRITERIAA = *mut OPENCARD_SEARCH_CRITERIAA;
+STRUCT!{struct OPENCARD_SEARCH_CRITERIAW {
+ dwStructSize: DWORD,
+ lpstrGroupNames: LPWSTR,
+ nMaxGroupNames: DWORD,
+ rgguidInterfaces: LPCGUID,
+ cguidInterfaces: DWORD,
+ lpstrCardNames: LPWSTR,
+ nMaxCardNames: DWORD,
+ lpfnCheck: LPOCNCHKPROC,
+ lpfnConnect: LPOCNCONNPROCW,
+ lpfnDisconnect: LPOCNDSCPROC,
+ pvUserData: LPVOID,
+ dwShareMode: DWORD,
+ dwPreferredProtocols: DWORD,
+}}
+pub type POPENCARD_SEARCH_CRITERIAW = *mut OPENCARD_SEARCH_CRITERIAW;
+pub type LPOPENCARD_SEARCH_CRITERIAW = *mut OPENCARD_SEARCH_CRITERIAW;
+STRUCT!{struct OPENCARDNAME_EXA {
+ dwStructSize: DWORD,
+ hSCardContext: SCARDCONTEXT,
+ hwndOwner: HWND,
+ dwFlags: DWORD,
+ lpstrTitle: LPCSTR,
+ lpstrSearchDesc: LPCSTR,
+ hIcon: HICON,
+ pOpenCardSearchCriteria: POPENCARD_SEARCH_CRITERIAA,
+ lpfnConnect: LPOCNCONNPROCA,
+ pvUserData: LPVOID,
+ dwShareMode: DWORD,
+ dwPreferredProtocols: DWORD,
+ lpstrRdr: LPSTR,
+ nMaxRdr: DWORD,
+ lpstrCard: LPSTR,
+ nMaxCard: DWORD,
+ dwActiveProtocol: DWORD,
+ hCardHandle: SCARDHANDLE,
+}}
+pub type POPENCARDNAME_EXA = *mut OPENCARDNAME_EXA;
+pub type LPOPENCARDNAME_EXA = *mut OPENCARDNAME_EXA;
+STRUCT!{struct OPENCARDNAME_EXW {
+ dwStructSize: DWORD,
+ hSCardContext: SCARDCONTEXT,
+ hwndOwner: HWND,
+ dwFlags: DWORD,
+ lpstrTitle: LPCWSTR,
+ lpstrSearchDesc: LPCWSTR,
+ hIcon: HICON,
+ pOpenCardSearchCriteria: POPENCARD_SEARCH_CRITERIAW,
+ lpfnConnect: LPOCNCONNPROCW,
+ pvUserData: LPVOID,
+ dwShareMode: DWORD,
+ dwPreferredProtocols: DWORD,
+ lpstrRdr: LPWSTR,
+ nMaxRdr: DWORD,
+ lpstrCard: LPWSTR,
+ nMaxCard: DWORD,
+ dwActiveProtocol: DWORD,
+ hCardHandle: SCARDHANDLE,
+}}
+pub type POPENCARDNAME_EXW = *mut OPENCARDNAME_EXW;
+pub type LPOPENCARDNAME_EXW = *mut OPENCARDNAME_EXW;
+pub type OPENCARDNAMEA_EX = OPENCARDNAME_EXA;
+pub type OPENCARDNAMEW_EX = OPENCARDNAME_EXW;
+pub type POPENCARDNAMEA_EX = POPENCARDNAME_EXA;
+pub type POPENCARDNAMEW_EX = POPENCARDNAME_EXW;
+pub type LPOPENCARDNAMEA_EX = LPOPENCARDNAME_EXA;
+pub type LPOPENCARDNAMEW_EX = LPOPENCARDNAME_EXW;
+pub const SCARD_READER_SEL_AUTH_PACKAGE: DWORD = -629i32 as u32;
+ENUM!{enum READER_SEL_REQUEST_MATCH_TYPE {
+ RSR_MATCH_TYPE_READER_AND_CONTAINER = 1,
+ RSR_MATCH_TYPE_SERIAL_NUMBER,
+ RSR_MATCH_TYPE_ALL_CARDS,
+}}
+STRUCT!{struct READER_SEL_REQUEST_ReaderAndContainerParameter {
+ cbReaderNameOffset: DWORD,
+ cchReaderNameLength: DWORD,
+ cbContainerNameOffset: DWORD,
+ cchContainerNameLength: DWORD,
+ dwDesiredCardModuleVersion: DWORD,
+ dwCspFlags: DWORD,
+}}
+STRUCT!{struct READER_SEL_REQUEST_SerialNumberParameter {
+ cbSerialNumberOffset: DWORD,
+ cbSerialNumberLength: DWORD,
+ dwDesiredCardModuleVersion: DWORD,
+}}
+UNION!{union READER_SEL_REQUEST_u {
+ [u32; 6],
+ ReaderAndContainerParameter ReaderAndContainerParameter_mut:
+ READER_SEL_REQUEST_ReaderAndContainerParameter,
+ SerialNumberParameter SerialNumberParameter_mut: READER_SEL_REQUEST_SerialNumberParameter,
+}}
+STRUCT!{struct READER_SEL_REQUEST {
+ dwShareMode: DWORD,
+ dwPreferredProtocols: DWORD,
+ MatchType: READER_SEL_REQUEST_MATCH_TYPE,
+ u: READER_SEL_REQUEST_u,
+}}
+pub type PREADER_SEL_REQUEST = *mut READER_SEL_REQUEST;
+STRUCT!{struct READER_SEL_RESPONSE {
+ cbReaderNameOffset: DWORD,
+ cchReaderNameLength: DWORD,
+ cbCardNameOffset: DWORD,
+ cchCardNameLength: DWORD,
+}}
+pub type PREADER_SEL_RESPONSE = *mut READER_SEL_RESPONSE;
+STRUCT!{struct OPENCARDNAMEA {
+ dwStructSize: DWORD,
+ hwndOwner: HWND,
+ hSCardContext: SCARDCONTEXT,
+ lpstrGroupNames: LPSTR,
+ nMaxGroupNames: DWORD,
+ lpstrCardNames: LPSTR,
+ nMaxCardNames: DWORD,
+ rgguidInterfaces: LPCGUID,
+ cguidInterfaces: DWORD,
+ lpstrRdr: LPSTR,
+ nMaxRdr: DWORD,
+ lpstrCard: LPSTR,
+ nMaxCard: DWORD,
+ lpstrTitle: LPCSTR,
+ dwFlags: DWORD,
+ pvUserData: LPVOID,
+ dwShareMode: DWORD,
+ dwPreferredProtocols: DWORD,
+ dwActiveProtocol: DWORD,
+ lpfnConnect: LPOCNCONNPROCA,
+ lpfnCheck: LPOCNCHKPROC,
+ lpfnDisconnect: LPOCNDSCPROC,
+ hCardHandle: SCARDHANDLE,
+}}
+pub type POPENCARDNAMEA = *mut OPENCARDNAMEA;
+pub type LPOPENCARDNAMEA = *mut OPENCARDNAMEA;
+STRUCT!{struct OPENCARDNAMEW {
+ dwStructSize: DWORD,
+ hwndOwner: HWND,
+ hSCardContext: SCARDCONTEXT,
+ lpstrGroupNames: LPWSTR,
+ nMaxGroupNames: DWORD,
+ lpstrCardNames: LPWSTR,
+ nMaxCardNames: DWORD,
+ rgguidInterfaces: LPCGUID,
+ cguidInterfaces: DWORD,
+ lpstrRdr: LPWSTR,
+ nMaxRdr: DWORD,
+ lpstrCard: LPWSTR,
+ nMaxCard: DWORD,
+ lpstrTitle: LPCWSTR,
+ dwFlags: DWORD,
+ pvUserData: LPVOID,
+ dwShareMode: DWORD,
+ dwPreferredProtocols: DWORD,
+ dwActiveProtocol: DWORD,
+ lpfnConnect: LPOCNCONNPROCW,
+ lpfnCheck: LPOCNCHKPROC,
+ lpfnDisconnect: LPOCNDSCPROC,
+ hCardHandle: SCARDHANDLE,
+}}
+pub type POPENCARDNAMEW = *mut OPENCARDNAMEW;
+pub type LPOPENCARDNAMEW = *mut OPENCARDNAMEW;
+pub type OPENCARDNAME_A = OPENCARDNAMEA;
+pub type OPENCARDNAME_W = OPENCARDNAMEW;
+pub type POPENCARDNAME_A = POPENCARDNAMEA;
+pub type POPENCARDNAME_W = POPENCARDNAMEW;
+pub type LPOPENCARDNAME_A = LPOPENCARDNAMEA;
+pub type LPOPENCARDNAME_W = LPOPENCARDNAMEW;
+extern "system" {
+ pub fn SCardReadCacheA(
+ hContext: SCARDCONTEXT,
+ CardIdentifier: *mut UUID,
+ FreshnessCounter: DWORD,
+ LookupName: LPSTR,
+ Data: PBYTE,
+ DataLen: *mut DWORD,
+ ) -> LONG;
+ pub fn SCardReadCacheW(
+ hContext: SCARDCONTEXT,
+ CardIdentifier: *mut UUID,
+ FreshnessCounter: DWORD,
+ LookupName: LPWSTR,
+ Data: PBYTE,
+ DataLen: *mut DWORD,
+ ) -> LONG;
+ pub fn SCardWriteCacheA(
+ hContext: SCARDCONTEXT,
+ CardIdentifier: *mut UUID,
+ FreshnessCounter: DWORD,
+ LookupName: LPSTR,
+ Data: PBYTE,
+ DataLen: DWORD,
+ ) -> LONG;
+ pub fn SCardWriteCacheW(
+ hContext: SCARDCONTEXT,
+ CardIdentifier: *mut UUID,
+ FreshnessCounter: DWORD,
+ LookupName: LPWSTR,
+ Data: PBYTE,
+ DataLen: DWORD,
+ ) -> LONG;
+ pub fn SCardGetReaderIconA(
+ hContext: SCARDCONTEXT,
+ szReaderName: LPCSTR,
+ pbIcon: LPBYTE,
+ pcbIcon: LPDWORD,
+ ) -> LONG;
+ pub fn SCardGetReaderIconW(
+ hContext: SCARDCONTEXT,
+ szReaderName: LPCWSTR,
+ pbIcon: LPBYTE,
+ pcbIcon: LPDWORD,
+ ) -> LONG;
+ pub fn SCardGetDeviceTypeIdA(
+ hContext: SCARDCONTEXT,
+ szReaderName: LPCSTR,
+ pdwDeviceTypeId: LPDWORD,
+ ) -> LONG;
+ pub fn SCardGetDeviceTypeIdW(
+ hContext: SCARDCONTEXT,
+ szReaderName: LPCWSTR,
+ pdwDeviceTypeId: LPDWORD,
+ ) -> LONG;
+ pub fn SCardGetReaderDeviceInstanceIdA(
+ hContext: SCARDCONTEXT,
+ szReaderName: LPCSTR,
+ szDeviceInstanceId: LPSTR,
+ pcchDeviceInstanceId: LPDWORD,
+ ) -> LONG;
+ pub fn SCardGetReaderDeviceInstanceIdW(
+ hContext: SCARDCONTEXT,
+ szReaderName: LPCWSTR,
+ szDeviceInstanceId: LPWSTR,
+ pcchDeviceInstanceId: LPDWORD,
+ ) -> LONG;
+ pub fn SCardListReadersWithDeviceInstanceIdA(
+ hContext: SCARDCONTEXT,
+ szDeviceInstanceId: LPCSTR,
+ mszReaders: LPSTR,
+ pcchReaders: LPDWORD,
+ ) -> LONG;
+ pub fn SCardListReadersWithDeviceInstanceIdW(
+ hContext: SCARDCONTEXT,
+ szDeviceInstanceId: LPCWSTR,
+ mszReaders: LPWSTR,
+ pcchReaders: LPDWORD,
+ ) -> LONG;
+}
+pub const SCARD_AUDIT_CHV_FAILURE: DWORD = 0x0;
+pub const SCARD_AUDIT_CHV_SUCCESS: DWORD = 0x1;
+extern "system" {
+ pub fn SCardAudit(
+ hContext: SCARDCONTEXT,
+ dwEvent: DWORD,
+ ) -> LONG;
+}
diff --git a/vendor/winapi/src/um/winsmcrd.rs b/vendor/winapi/src/um/winsmcrd.rs
new file mode 100644
index 000000000..227bf7b40
--- /dev/null
+++ b/vendor/winapi/src/um/winsmcrd.rs
@@ -0,0 +1,166 @@
+// 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.
+//! Smart Card class/port IOCTL codes.
+use shared::minwindef::{BYTE, DWORD, ULONG, WORD};
+use um::winioctl::{FILE_ANY_ACCESS, FILE_DEVICE_SMARTCARD, METHOD_BUFFERED};
+pub type UWORD = WORD;
+DEFINE_GUID!{GUID_DEVINTERFACE_SMARTCARD_READER,
+ 0x50DD5230, 0xBA8A, 0x11D1, 0xBF, 0x5D, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30}
+pub const SCARD_ATR_LENGTHL: DWORD = 33;
+pub const SCARD_PROTOCOL_UNDEFINED: DWORD = 0x00000000;
+pub const SCARD_PROTOCOL_T0: DWORD = 0x00000001;
+pub const SCARD_PROTOCOL_T1: DWORD = 0x00000002;
+pub const SCARD_PROTOCOL_RAW: DWORD = 0x00010000;
+pub const SCARD_PROTOCOL_Tx: DWORD = SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1;
+pub const SCARD_PROTOCOL_DEFAULT: DWORD = 0x80000000;
+pub const SCARD_PROTOCOL_OPTIMAL: DWORD = 0x00000000;
+pub const SCARD_POWER_DOWN: DWORD = 0;
+pub const SCARD_COLD_RESET: DWORD = 1;
+pub const SCARD_WARM_RESET: DWORD = 2;
+pub const IOCTL_SMARTCARD_POWER: DWORD = CTL_CODE!(FILE_DEVICE_SMARTCARD, 1, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const IOCTL_SMARTCARD_GET_ATTRIBUTE: DWORD = CTL_CODE!(FILE_DEVICE_SMARTCARD, 2,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_SMARTCARD_SET_ATTRIBUTE: DWORD = CTL_CODE!(FILE_DEVICE_SMARTCARD, 3,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_SMARTCARD_CONFISCATE: DWORD = CTL_CODE!(FILE_DEVICE_SMARTCARD, 4,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_SMARTCARD_TRANSMIT: DWORD = CTL_CODE!(FILE_DEVICE_SMARTCARD, 5,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_SMARTCARD_EJECT: DWORD = CTL_CODE!(FILE_DEVICE_SMARTCARD, 6, METHOD_BUFFERED,
+ FILE_ANY_ACCESS);
+pub const IOCTL_SMARTCARD_SWALLOW: DWORD = CTL_CODE!(FILE_DEVICE_SMARTCARD, 7,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_SMARTCARD_IS_PRESENT: DWORD = CTL_CODE!(FILE_DEVICE_SMARTCARD, 10,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_SMARTCARD_IS_ABSENT: DWORD = CTL_CODE!(FILE_DEVICE_SMARTCARD, 11,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_SMARTCARD_SET_PROTOCOL: DWORD = CTL_CODE!(FILE_DEVICE_SMARTCARD, 12,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_SMARTCARD_GET_STATE: DWORD = CTL_CODE!(FILE_DEVICE_SMARTCARD, 14,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_SMARTCARD_GET_LAST_ERROR: DWORD = CTL_CODE!(FILE_DEVICE_SMARTCARD, 15,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const IOCTL_SMARTCARD_GET_PERF_CNTR: DWORD = CTL_CODE!(FILE_DEVICE_SMARTCARD, 16,
+ METHOD_BUFFERED, FILE_ANY_ACCESS);
+pub const MAXIMUM_ATTR_STRING_LENGTH: DWORD = 32;
+pub const MAXIMUM_SMARTCARD_READERS: DWORD = 10;
+pub const SCARD_CLASS_VENDOR_INFO: ULONG = 1;
+pub const SCARD_CLASS_COMMUNICATIONS: ULONG = 2;
+pub const SCARD_CLASS_PROTOCOL: ULONG = 3;
+pub const SCARD_CLASS_POWER_MGMT: ULONG = 4;
+pub const SCARD_CLASS_SECURITY: ULONG = 5;
+pub const SCARD_CLASS_MECHANICAL: ULONG = 6;
+pub const SCARD_CLASS_VENDOR_DEFINED: ULONG = 7;
+pub const SCARD_CLASS_IFD_PROTOCOL: ULONG = 8;
+pub const SCARD_CLASS_ICC_STATE: ULONG = 9;
+pub const SCARD_CLASS_PERF: ULONG = 0x7ffe;
+pub const SCARD_CLASS_SYSTEM: ULONG = 0x7fff;
+pub const SCARD_ATTR_VENDOR_NAME: ULONG = SCARD_CLASS_VENDOR_INFO << 16 | 0x0100;
+pub const SCARD_ATTR_VENDOR_IFD_TYPE: ULONG = SCARD_CLASS_VENDOR_INFO << 16 | 0x0101;
+pub const SCARD_ATTR_VENDOR_IFD_VERSION: ULONG = SCARD_CLASS_VENDOR_INFO << 16 | 0x0102;
+pub const SCARD_ATTR_VENDOR_IFD_SERIAL_NO: ULONG = SCARD_CLASS_VENDOR_INFO << 16 | 0x0103;
+pub const SCARD_ATTR_CHANNEL_ID: ULONG = SCARD_CLASS_COMMUNICATIONS << 16 | 0x0110;
+pub const SCARD_ATTR_PROTOCOL_TYPES: ULONG = SCARD_CLASS_PROTOCOL << 16 | 0x0120;
+pub const SCARD_ATTR_DEFAULT_CLK: ULONG = SCARD_CLASS_PROTOCOL << 16 | 0x0121;
+pub const SCARD_ATTR_MAX_CLK: ULONG = SCARD_CLASS_PROTOCOL << 16 | 0x0122;
+pub const SCARD_ATTR_DEFAULT_DATA_RATE: ULONG = SCARD_CLASS_PROTOCOL << 16 | 0x0123;
+pub const SCARD_ATTR_MAX_DATA_RATE: ULONG = SCARD_CLASS_PROTOCOL << 16 | 0x0124;
+pub const SCARD_ATTR_MAX_IFSD: ULONG = SCARD_CLASS_PROTOCOL << 16 | 0x0125;
+pub const SCARD_ATTR_POWER_MGMT_SUPPORT: ULONG = SCARD_CLASS_POWER_MGMT << 16 | 0x0131;
+pub const SCARD_ATTR_USER_TO_CARD_AUTH_DEVICE: ULONG = SCARD_CLASS_SECURITY << 16 | 0x0140;
+pub const SCARD_ATTR_USER_AUTH_INPUT_DEVICE: ULONG = SCARD_CLASS_SECURITY << 16 | 0x0142;
+pub const SCARD_ATTR_CHARACTERISTICS: ULONG = SCARD_CLASS_MECHANICAL << 16 | 0x0150;
+pub const SCARD_ATTR_CURRENT_PROTOCOL_TYPE: ULONG = SCARD_CLASS_IFD_PROTOCOL << 16 | 0x0201;
+pub const SCARD_ATTR_CURRENT_CLK: ULONG = SCARD_CLASS_IFD_PROTOCOL << 16 | 0x0202;
+pub const SCARD_ATTR_CURRENT_F: ULONG = SCARD_CLASS_IFD_PROTOCOL << 16 | 0x0203;
+pub const SCARD_ATTR_CURRENT_D: ULONG = SCARD_CLASS_IFD_PROTOCOL << 16 | 0x0204;
+pub const SCARD_ATTR_CURRENT_N: ULONG = SCARD_CLASS_IFD_PROTOCOL << 16 | 0x0205;
+pub const SCARD_ATTR_CURRENT_W: ULONG = SCARD_CLASS_IFD_PROTOCOL << 16 | 0x0206;
+pub const SCARD_ATTR_CURRENT_IFSC: ULONG = SCARD_CLASS_IFD_PROTOCOL << 16 | 0x0207;
+pub const SCARD_ATTR_CURRENT_IFSD: ULONG = SCARD_CLASS_IFD_PROTOCOL << 16 | 0x0208;
+pub const SCARD_ATTR_CURRENT_BWT: ULONG = SCARD_CLASS_IFD_PROTOCOL << 16 | 0x0209;
+pub const SCARD_ATTR_CURRENT_CWT: ULONG = SCARD_CLASS_IFD_PROTOCOL << 16 | 0x020a;
+pub const SCARD_ATTR_CURRENT_EBC_ENCODING: ULONG = SCARD_CLASS_IFD_PROTOCOL << 16 | 0x020b;
+pub const SCARD_ATTR_EXTENDED_BWT: ULONG = SCARD_CLASS_IFD_PROTOCOL << 16 | 0x020c;
+pub const SCARD_ATTR_ICC_PRESENCE: ULONG = SCARD_CLASS_ICC_STATE << 16 | 0x0300;
+pub const SCARD_ATTR_ICC_INTERFACE_STATUS: ULONG = SCARD_CLASS_ICC_STATE << 16 | 0x0301;
+pub const SCARD_ATTR_CURRENT_IO_STATE: ULONG = SCARD_CLASS_ICC_STATE << 16 | 0x0302;
+pub const SCARD_ATTR_ATR_STRING: ULONG = SCARD_CLASS_ICC_STATE << 16 | 0x0303;
+pub const SCARD_ATTR_ICC_TYPE_PER_ATR: ULONG = SCARD_CLASS_ICC_STATE << 16 | 0x0304;
+pub const SCARD_ATTR_ESC_RESET: ULONG = SCARD_CLASS_VENDOR_DEFINED << 16 | 0xA000;
+pub const SCARD_ATTR_ESC_CANCEL: ULONG = SCARD_CLASS_VENDOR_DEFINED << 16 | 0xA003;
+pub const SCARD_ATTR_ESC_AUTHREQUEST: ULONG = SCARD_CLASS_VENDOR_DEFINED << 16 | 0xA005;
+pub const SCARD_ATTR_MAXINPUT: ULONG = SCARD_CLASS_VENDOR_DEFINED << 16 | 0xA007;
+pub const SCARD_ATTR_DEVICE_UNIT: ULONG = SCARD_CLASS_SYSTEM << 16 | 0x0001;
+pub const SCARD_ATTR_DEVICE_IN_USE: ULONG = SCARD_CLASS_SYSTEM << 16 | 0x0002;
+pub const SCARD_ATTR_DEVICE_FRIENDLY_NAME_A: ULONG = SCARD_CLASS_SYSTEM << 16 | 0x0003;
+pub const SCARD_ATTR_DEVICE_SYSTEM_NAME_A: ULONG = SCARD_CLASS_SYSTEM << 16 | 0x0004;
+pub const SCARD_ATTR_DEVICE_FRIENDLY_NAME_W: ULONG = SCARD_CLASS_SYSTEM << 16 | 0x0005;
+pub const SCARD_ATTR_DEVICE_SYSTEM_NAME_W: ULONG = SCARD_CLASS_SYSTEM << 16 | 0x0006;
+pub const SCARD_ATTR_SUPRESS_T1_IFS_REQUEST: ULONG = SCARD_CLASS_SYSTEM << 16 | 0x0007;
+pub const SCARD_PERF_NUM_TRANSMISSIONS: ULONG = SCARD_CLASS_PERF << 16 | 0x0001;
+pub const SCARD_PERF_BYTES_TRANSMITTED: ULONG = SCARD_CLASS_PERF << 16 | 0x0002;
+pub const SCARD_PERF_TRANSMISSION_TIME: ULONG = SCARD_CLASS_PERF << 16 | 0x0003;
+pub const SCARD_T0_HEADER_LENGTH: DWORD = 7;
+pub const SCARD_T0_CMD_LENGTH: DWORD = 5;
+pub const SCARD_T1_PROLOGUE_LENGTH: DWORD = 3;
+pub const SCARD_T1_EPILOGUE_LENGTH: DWORD = 2;
+pub const SCARD_T1_MAX_IFS: DWORD = 254;
+pub const SCARD_UNKNOWN: ULONG = 0;
+pub const SCARD_ABSENT: ULONG = 1;
+pub const SCARD_PRESENT: ULONG = 2;
+pub const SCARD_SWALLOWED: ULONG = 3;
+pub const SCARD_POWERED: ULONG = 4;
+pub const SCARD_NEGOTIABLE: ULONG = 5;
+pub const SCARD_SPECIFIC: ULONG = 6;
+STRUCT!{struct SCARD_IO_REQUEST {
+ dwProtocol: DWORD,
+ cbPciLength: DWORD,
+}}
+pub type PSCARD_IO_REQUEST = *mut SCARD_IO_REQUEST;
+pub type LPSCARD_IO_REQUEST = *mut SCARD_IO_REQUEST;
+pub type LPCSCARD_IO_REQUEST = *const SCARD_IO_REQUEST;
+STRUCT!{struct SCARD_T0_COMMAND {
+ bCla: BYTE,
+ bIns: BYTE,
+ bP1: BYTE,
+ bP2: BYTE,
+ bP3: BYTE,
+}}
+pub type LPSCARD_T0_COMMAND = *mut SCARD_T0_COMMAND;
+UNION!{union SCARD_T0_REQUEST_u {
+ [u8; 5],
+ CmdBytes CmdBytes_mut: SCARD_T0_COMMAND,
+ rgbHeader rgbHeader_mut: [BYTE; 5],
+}}
+STRUCT!{struct SCARD_T0_REQUEST {
+ ioRequest: SCARD_IO_REQUEST,
+ bSw1: BYTE,
+ bSw2: BYTE,
+ u: SCARD_T0_REQUEST_u,
+}}
+pub type PSCARD_T0_REQUEST = *mut SCARD_T0_REQUEST;
+pub type LPSCARD_T0_REQUEST = *mut SCARD_T0_REQUEST;
+STRUCT!{struct SCARD_T1_REQUEST {
+ ioRequest: SCARD_IO_REQUEST,
+}}
+pub type PSCARD_T1_REQUEST = *mut SCARD_T1_REQUEST;
+pub type LPSCARD_T1_REQUEST = *mut SCARD_T1_REQUEST;
+pub const SCARD_READER_SWALLOWS: ULONG = 0x00000001;
+pub const SCARD_READER_EJECTS: ULONG = 0x00000002;
+pub const SCARD_READER_CONFISCATES: ULONG = 0x00000004;
+pub const SCARD_READER_TYPE_SERIAL: ULONG = 0x01;
+pub const SCARD_READER_TYPE_PARALELL: ULONG = 0x02;
+pub const SCARD_READER_TYPE_KEYBOARD: ULONG = 0x04;
+pub const SCARD_READER_TYPE_SCSI: ULONG = 0x08;
+pub const SCARD_READER_TYPE_IDE: ULONG = 0x10;
+pub const SCARD_READER_TYPE_USB: ULONG = 0x20;
+pub const SCARD_READER_TYPE_PCMCIA: ULONG = 0x40;
+pub const SCARD_READER_TYPE_TPM: ULONG = 0x80;
+pub const SCARD_READER_TYPE_NFC: ULONG = 0x100;
+pub const SCARD_READER_TYPE_UICC: ULONG = 0x200;
+pub const SCARD_READER_TYPE_VENDOR: ULONG = 0xF0;
diff --git a/vendor/winapi/src/um/winsock2.rs b/vendor/winapi/src/um/winsock2.rs
new file mode 100644
index 000000000..36793fb48
--- /dev/null
+++ b/vendor/winapi/src/um/winsock2.rs
@@ -0,0 +1,1450 @@
+// 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.
+//! Definitions to be used with the WinSock 2 DLL and WinSock 2 applications.
+use ctypes::{
+ __uint32, __uint64, c_char, c_double, c_float, c_int, c_long, c_short, c_uchar, c_uint,
+ c_ulong, c_ushort,
+};
+use shared::basetsd::{DWORD_PTR, UINT_PTR, ULONG_PTR};
+use shared::guiddef::{GUID, LPGUID};
+use shared::inaddr::in_addr;
+use shared::minwindef::{
+ BOOL, DWORD, FARPROC, HIWORD, INT, LOWORD, LPDWORD, LPHANDLE, LPINT, LPVOID, MAKELONG, UINT,
+ ULONG, WORD, WPARAM,
+};
+use shared::qos::FLOWSPEC;
+use shared::windef::HWND;
+use shared::winerror::{
+ ERROR_INVALID_HANDLE, ERROR_INVALID_PARAMETER, ERROR_IO_INCOMPLETE, ERROR_IO_PENDING,
+ ERROR_NOT_ENOUGH_MEMORY, ERROR_OPERATION_ABORTED, WAIT_TIMEOUT,
+};
+use shared::ws2def::{
+ AF_APPLETALK, AF_ATM, AF_BAN, AF_BTH, AF_CCITT, AF_CHAOS, AF_DATAKIT, AF_DECnet, AF_DLI,
+ AF_ECMA, AF_FIREFOX, AF_HYLINK, AF_IMPLINK, AF_INET, AF_INET6, AF_IPX, AF_ISO, AF_LAT,
+ AF_MAX, AF_NS, AF_OSI, AF_PUP, AF_SNA, AF_UNIX, AF_UNKNOWN1, AF_UNSPEC, AF_VOICEVIEW,
+ INADDR_ANY, LPCSADDR_INFO, LPSOCKADDR, LPWSABUF, LPWSAMSG, PSOCKET_ADDRESS_LIST, SOCKADDR,
+ SOCKADDR_IN, WSABUF,
+};
+use shared::wtypesbase::{BLOB, LPBLOB};
+use um::minwinbase::OVERLAPPED;
+use um::winbase::{INFINITE, WAIT_FAILED, WAIT_IO_COMPLETION, WAIT_OBJECT_0};
+use um::winnt::{
+ CHAR, HANDLE, LONG, LPCSTR, LPSTR, LPWSTR, MAXIMUM_WAIT_OBJECTS, PWSTR, SHORT, WCHAR,
+};
+pub const WINSOCK_VERSION: WORD = 2 | (2 << 8);
+pub type u_char = c_uchar;
+pub type u_short = c_ushort;
+pub type u_int = c_uint;
+pub type u_long = c_ulong;
+pub type u_int64 = __uint64;
+pub type SOCKET = UINT_PTR;
+pub const FD_SETSIZE: usize = 64;
+STRUCT!{struct fd_set {
+ fd_count: u_int,
+ fd_array: [SOCKET; FD_SETSIZE],
+}}
+extern "system" {
+ pub fn __WSAFDIsSet(
+ fd: SOCKET,
+ _: *mut fd_set,
+ ) -> c_int;
+}
+STRUCT!{struct timeval {
+ tv_sec: c_long,
+ tv_usec: c_long,
+}}
+pub const IOCPARM_MASK: c_long = 0x7f;
+pub const IOC_VOID: c_long = 0x20000000;
+pub const IOC_OUT: c_long = 0x40000000;
+pub const IOC_IN: c_long = 0x80000000;
+pub const IOC_INOUT: c_long = IOC_IN | IOC_OUT;
+pub const FIONREAD: c_long = IOC_OUT | ((4 & IOCPARM_MASK) << 16) | (0x66 << 8) | 127;
+pub const FIONBIO: c_long = IOC_IN | ((4 & IOCPARM_MASK) << 16) | (0x66 << 8) | 126;
+pub const FIOASYNC: c_long = IOC_IN | ((4 & IOCPARM_MASK) << 16) | (0x66 << 8) | 125;
+pub const SIOCSHIWAT: c_long = IOC_IN | ((4 & IOCPARM_MASK) << 16) | (0x73 << 8) | 0;
+pub const SIOCGHIWAT: c_long = IOC_OUT | ((4 & IOCPARM_MASK) << 16) | (0x73 << 8) | 1;
+pub const SIOCSLOWAT: c_long = IOC_IN | ((4 & IOCPARM_MASK) << 16) | (0x73 << 8) | 2;
+pub const SIOCGLOWAT: c_long = IOC_OUT | ((4 & IOCPARM_MASK) << 16) | (0x73 << 8) | 3;
+pub const SIOCATMARK: c_long = IOC_OUT | ((4 & IOCPARM_MASK) << 16) | (0x73 << 8) | 7;
+STRUCT!{struct hostent {
+ h_name: *mut c_char,
+ h_aliases: *mut *mut c_char,
+ h_addrtype: c_short,
+ h_length: c_short,
+ h_addr_list: *mut *mut c_char,
+}}
+STRUCT!{struct netent {
+ n_name: *mut c_char,
+ n_aliases: *mut *mut c_char,
+ n_addrtype: c_short,
+ n_net: u_long,
+}}
+#[cfg(target_pointer_width = "32")]
+STRUCT!{struct servent {
+ s_name: *mut c_char,
+ s_aliases: *mut *mut c_char,
+ s_port: c_short,
+ s_proto: *mut c_char,
+}}
+#[cfg(target_pointer_width = "64")]
+STRUCT!{struct servent {
+ s_name: *mut c_char,
+ s_aliases: *mut *mut c_char,
+ s_proto: *mut c_char,
+ s_port: c_short,
+}}
+STRUCT!{struct protoent {
+ p_name: *mut c_char,
+ p_aliases: *mut *mut c_char,
+ p_proto: c_short,
+}}
+pub const IPPORT_ECHO: c_short = 7;
+pub const IPPORT_DISCARD: c_short = 9;
+pub const IPPORT_SYSTAT: c_short = 11;
+pub const IPPORT_DAYTIME: c_short = 13;
+pub const IPPORT_NETSTAT: c_short = 15;
+pub const IPPORT_FTP: c_short = 21;
+pub const IPPORT_TELNET: c_short = 23;
+pub const IPPORT_SMTP: c_short = 25;
+pub const IPPORT_TIMESERVER: c_short = 37;
+pub const IPPORT_NAMESERVER: c_short = 42;
+pub const IPPORT_WHOIS: c_short = 43;
+pub const IPPORT_MTP: c_short = 57;
+pub const IPPORT_TFTP: c_short = 69;
+pub const IPPORT_RJE: c_short = 77;
+pub const IPPORT_FINGER: c_short = 79;
+pub const IPPORT_TTYLINK: c_short = 87;
+pub const IPPORT_SUPDUP: c_short = 95;
+pub const IPPORT_EXECSERVER: c_short = 512;
+pub const IPPORT_LOGINSERVER: c_short = 513;
+pub const IPPORT_CMDSERVER: c_short = 514;
+pub const IPPORT_EFSSERVER: c_short = 520;
+pub const IPPORT_BIFFUDP: c_short = 512;
+pub const IPPORT_WHOSERVER: c_short = 513;
+pub const IPPORT_ROUTESERVER: c_short = 520;
+pub const IPPORT_RESERVED: c_short = 1024;
+pub const IMPLINK_IP: c_short = 155;
+pub const IMPLINK_LOWEXPER: c_short = 156;
+pub const IMPLINK_HIGHEXPER: c_short = 158;
+pub const ADDR_ANY: ULONG = INADDR_ANY;
+pub const WSADESCRIPTION_LEN: usize = 256;
+pub const WSASYS_STATUS_LEN: usize = 128;
+#[cfg(target_pointer_width = "32")]
+STRUCT!{struct WSADATA {
+ wVersion: WORD,
+ wHighVersion: WORD,
+ szDescription: [c_char; WSADESCRIPTION_LEN + 1],
+ szSystemStatus: [c_char; WSASYS_STATUS_LEN + 1],
+ iMaxSockets: c_ushort,
+ iMaxUdpDg: c_ushort,
+ lpVendorInfo: *mut c_char,
+}}
+#[cfg(target_pointer_width = "64")]
+STRUCT!{struct WSADATA {
+ wVersion: WORD,
+ wHighVersion: WORD,
+ iMaxSockets: c_ushort,
+ iMaxUdpDg: c_ushort,
+ lpVendorInfo: *mut c_char,
+ szDescription: [c_char; WSADESCRIPTION_LEN + 1],
+ szSystemStatus: [c_char; WSASYS_STATUS_LEN + 1],
+}}
+pub type LPWSADATA = *mut WSADATA;
+pub const INVALID_SOCKET: SOCKET = !0;
+pub const SOCKET_ERROR: c_int = -1;
+pub const FROM_PROTOCOL_INFO: c_int = -1;
+pub const SOCK_STREAM: c_int = 1;
+pub const SOCK_DGRAM: c_int = 2;
+pub const SOCK_RAW: c_int = 3;
+pub const SOCK_RDM: c_int = 4;
+pub const SOCK_SEQPACKET: c_int = 5;
+pub const SO_DEBUG: c_int = 0x0001;
+pub const SO_ACCEPTCONN: c_int = 0x0002;
+pub const SO_REUSEADDR: c_int = 0x0004;
+pub const SO_KEEPALIVE: c_int = 0x0008;
+pub const SO_DONTROUTE: c_int = 0x0010;
+pub const SO_BROADCAST: c_int = 0x0020;
+pub const SO_USELOOPBACK: c_int = 0x0040;
+pub const SO_LINGER: c_int = 0x0080;
+pub const SO_OOBINLINE: c_int = 0x0100;
+pub const SO_DONTLINGER: c_int = !SO_LINGER;
+pub const SO_EXCLUSIVEADDRUSE: c_int = !SO_REUSEADDR;
+pub const SO_SNDBUF: c_int = 0x1001;
+pub const SO_RCVBUF: c_int = 0x1002;
+pub const SO_SNDLOWAT: c_int = 0x1003;
+pub const SO_RCVLOWAT: c_int = 0x1004;
+pub const SO_SNDTIMEO: c_int = 0x1005;
+pub const SO_RCVTIMEO: c_int = 0x1006;
+pub const SO_ERROR: c_int = 0x1007;
+pub const SO_TYPE: c_int = 0x1008;
+pub const SO_GROUP_ID: c_int = 0x2001;
+pub const SO_GROUP_PRIORITY: c_int = 0x2002;
+pub const SO_MAX_MSG_SIZE: c_int = 0x2003;
+pub const SO_PROTOCOL_INFOA: c_int = 0x2004;
+pub const SO_PROTOCOL_INFOW: c_int = 0x2005;
+pub const PVD_CONFIG: c_int = 0x3001;
+pub const SO_CONDITIONAL_ACCEPT: c_int = 0x3002;
+STRUCT!{struct sockproto {
+ sp_family: u_short,
+ sp_protocol: u_short,
+}}
+pub const PF_UNSPEC: c_int = AF_UNSPEC;
+pub const PF_UNIX: c_int = AF_UNIX;
+pub const PF_INET: c_int = AF_INET;
+pub const PF_IMPLINK: c_int = AF_IMPLINK;
+pub const PF_PUP: c_int = AF_PUP;
+pub const PF_CHAOS: c_int = AF_CHAOS;
+pub const PF_NS: c_int = AF_NS;
+pub const PF_IPX: c_int = AF_IPX;
+pub const PF_ISO: c_int = AF_ISO;
+pub const PF_OSI: c_int = AF_OSI;
+pub const PF_ECMA: c_int = AF_ECMA;
+pub const PF_DATAKIT: c_int = AF_DATAKIT;
+pub const PF_CCITT: c_int = AF_CCITT;
+pub const PF_SNA: c_int = AF_SNA;
+pub const PF_DECnet: c_int = AF_DECnet;
+pub const PF_DLI: c_int = AF_DLI;
+pub const PF_LAT: c_int = AF_LAT;
+pub const PF_HYLINK: c_int = AF_HYLINK;
+pub const PF_APPLETALK: c_int = AF_APPLETALK;
+pub const PF_VOICEVIEW: c_int = AF_VOICEVIEW;
+pub const PF_FIREFOX: c_int = AF_FIREFOX;
+pub const PF_UNKNOWN1: c_int = AF_UNKNOWN1;
+pub const PF_BAN: c_int = AF_BAN;
+pub const PF_ATM: c_int = AF_ATM;
+pub const PF_INET6: c_int = AF_INET6;
+pub const PF_BTH: c_int = AF_BTH;
+pub const PF_MAX: c_int = AF_MAX;
+STRUCT!{struct linger {
+ l_onoff: u_short,
+ l_linger: u_short,
+}}
+pub const SOL_SOCKET: c_int = 0xffff;
+pub const SOMAXCONN: c_int = 0x7fffffff;
+#[inline]
+pub fn SOMAXCONN_HINT(b: c_int) -> c_int {
+ -b
+}
+pub const MSG_OOB: c_int = 0x1;
+pub const MSG_PEEK: c_int = 0x2;
+pub const MSG_DONTROUTE: c_int = 0x4;
+pub const MSG_WAITALL: c_int = 0x8;
+pub const MSG_PUSH_IMMEDIATE: c_int = 0x20;
+pub const MSG_PARTIAL: c_int = 0x8000;
+pub const MSG_INTERRUPT: c_int = 0x10;
+pub const MSG_MAXIOVLEN: c_int = 16;
+pub const MAXGETHOSTSTRUCT: usize = 1024;
+pub const FD_READ_BIT: c_long = 0;
+pub const FD_READ: c_long = 1 << FD_READ_BIT;
+pub const FD_WRITE_BIT: c_long = 1;
+pub const FD_WRITE: c_long = 1 << FD_WRITE_BIT;
+pub const FD_OOB_BIT: c_long = 2;
+pub const FD_OOB: c_long = 1 << FD_OOB_BIT;
+pub const FD_ACCEPT_BIT: c_long = 3;
+pub const FD_ACCEPT: c_long = 1 << FD_ACCEPT_BIT;
+pub const FD_CONNECT_BIT: c_long = 4;
+pub const FD_CONNECT: c_long = 1 << FD_CONNECT_BIT;
+pub const FD_CLOSE_BIT: c_long = 5;
+pub const FD_CLOSE: c_long = 1 << FD_CLOSE_BIT;
+pub const FD_QOS_BIT: c_long = 6;
+pub const FD_QOS: c_long = 1 << FD_QOS_BIT;
+pub const FD_GROUP_QOS_BIT: c_long = 7;
+pub const FD_GROUP_QOS: c_long = 1 << FD_GROUP_QOS_BIT;
+pub const FD_ROUTING_INTERFACE_CHANGE_BIT: c_long = 8;
+pub const FD_ROUTING_INTERFACE_CHANGE: c_long = 1 << FD_ROUTING_INTERFACE_CHANGE_BIT;
+pub const FD_ADDRESS_LIST_CHANGE_BIT: c_long = 9;
+pub const FD_ADDRESS_LIST_CHANGE: c_long = 1 << FD_ADDRESS_LIST_CHANGE_BIT;
+pub const FD_MAX_EVENTS: usize = 10;
+pub const FD_ALL_EVENTS: c_long = (1 << FD_MAX_EVENTS) - 1;
+pub const WSABASEERR: c_int = 10000;
+pub const WSAEINTR: c_int = WSABASEERR+4;
+pub const WSAEBADF: c_int = WSABASEERR+9;
+pub const WSAEACCES: c_int = WSABASEERR+13;
+pub const WSAEFAULT: c_int = WSABASEERR+14;
+pub const WSAEINVAL: c_int = WSABASEERR+22;
+pub const WSAEMFILE: c_int = WSABASEERR+24;
+pub const WSAEWOULDBLOCK: c_int = WSABASEERR+35;
+pub const WSAEINPROGRESS: c_int = WSABASEERR+36;
+pub const WSAEALREADY: c_int = WSABASEERR+37;
+pub const WSAENOTSOCK: c_int = WSABASEERR+38;
+pub const WSAEDESTADDRREQ: c_int = WSABASEERR+39;
+pub const WSAEMSGSIZE: c_int = WSABASEERR+40;
+pub const WSAEPROTOTYPE: c_int = WSABASEERR+41;
+pub const WSAENOPROTOOPT: c_int = WSABASEERR+42;
+pub const WSAEPROTONOSUPPORT: c_int = WSABASEERR+43;
+pub const WSAESOCKTNOSUPPORT: c_int = WSABASEERR+44;
+pub const WSAEOPNOTSUPP: c_int = WSABASEERR+45;
+pub const WSAEPFNOSUPPORT: c_int = WSABASEERR+46;
+pub const WSAEAFNOSUPPORT: c_int = WSABASEERR+47;
+pub const WSAEADDRINUSE: c_int = WSABASEERR+48;
+pub const WSAEADDRNOTAVAIL: c_int = WSABASEERR+49;
+pub const WSAENETDOWN: c_int = WSABASEERR+50;
+pub const WSAENETUNREACH: c_int = WSABASEERR+51;
+pub const WSAENETRESET: c_int = WSABASEERR+52;
+pub const WSAECONNABORTED: c_int = WSABASEERR+53;
+pub const WSAECONNRESET: c_int = WSABASEERR+54;
+pub const WSAENOBUFS: c_int = WSABASEERR+55;
+pub const WSAEISCONN: c_int = WSABASEERR+56;
+pub const WSAENOTCONN: c_int = WSABASEERR+57;
+pub const WSAESHUTDOWN: c_int = WSABASEERR+58;
+pub const WSAETOOMANYREFS: c_int = WSABASEERR+59;
+pub const WSAETIMEDOUT: c_int = WSABASEERR+60;
+pub const WSAECONNREFUSED: c_int = WSABASEERR+61;
+pub const WSAELOOP: c_int = WSABASEERR+62;
+pub const WSAENAMETOOLONG: c_int = WSABASEERR+63;
+pub const WSAEHOSTDOWN: c_int = WSABASEERR+64;
+pub const WSAEHOSTUNREACH: c_int = WSABASEERR+65;
+pub const WSAENOTEMPTY: c_int = WSABASEERR+66;
+pub const WSAEPROCLIM: c_int = WSABASEERR+67;
+pub const WSAEUSERS: c_int = WSABASEERR+68;
+pub const WSAEDQUOT: c_int = WSABASEERR+69;
+pub const WSAESTALE: c_int = WSABASEERR+70;
+pub const WSAEREMOTE: c_int = WSABASEERR+71;
+pub const WSASYSNOTREADY: c_int = WSABASEERR+91;
+pub const WSAVERNOTSUPPORTED: c_int = WSABASEERR+92;
+pub const WSANOTINITIALISED: c_int = WSABASEERR+93;
+pub const WSAEDISCON: c_int = WSABASEERR+101;
+pub const WSAENOMORE: c_int = WSABASEERR+102;
+pub const WSAECANCELLED: c_int = WSABASEERR+103;
+pub const WSAEINVALIDPROCTABLE: c_int = WSABASEERR+104;
+pub const WSAEINVALIDPROVIDER: c_int = WSABASEERR+105;
+pub const WSAEPROVIDERFAILEDINIT: c_int = WSABASEERR+106;
+pub const WSASYSCALLFAILURE: c_int = WSABASEERR+107;
+pub const WSASERVICE_NOT_FOUND: c_int = WSABASEERR+108;
+pub const WSATYPE_NOT_FOUND: c_int = WSABASEERR+109;
+pub const WSA_E_NO_MORE: c_int = WSABASEERR+110;
+pub const WSA_E_CANCELLED: c_int = WSABASEERR+111;
+pub const WSAEREFUSED: c_int = WSABASEERR+112;
+pub const WSAHOST_NOT_FOUND: c_int = WSABASEERR+1001;
+pub const WSATRY_AGAIN: c_int = WSABASEERR+1002;
+pub const WSANO_RECOVERY: c_int = WSABASEERR+1003;
+pub const WSANO_DATA: c_int = WSABASEERR+1004;
+pub const WSA_QOS_RECEIVERS: c_int = WSABASEERR + 1005;
+pub const WSA_QOS_SENDERS: c_int = WSABASEERR + 1006;
+pub const WSA_QOS_NO_SENDERS: c_int = WSABASEERR + 1007;
+pub const WSA_QOS_NO_RECEIVERS: c_int = WSABASEERR + 1008;
+pub const WSA_QOS_REQUEST_CONFIRMED: c_int = WSABASEERR + 1009;
+pub const WSA_QOS_ADMISSION_FAILURE: c_int = WSABASEERR + 1010;
+pub const WSA_QOS_POLICY_FAILURE: c_int = WSABASEERR + 1011;
+pub const WSA_QOS_BAD_STYLE: c_int = WSABASEERR + 1012;
+pub const WSA_QOS_BAD_OBJECT: c_int = WSABASEERR + 1013;
+pub const WSA_QOS_TRAFFIC_CTRL_ERROR: c_int = WSABASEERR + 1014;
+pub const WSA_QOS_GENERIC_ERROR: c_int = WSABASEERR + 1015;
+pub const WSA_QOS_ESERVICETYPE: c_int = WSABASEERR + 1016;
+pub const WSA_QOS_EFLOWSPEC: c_int = WSABASEERR + 1017;
+pub const WSA_QOS_EPROVSPECBUF: c_int = WSABASEERR + 1018;
+pub const WSA_QOS_EFILTERSTYLE: c_int = WSABASEERR + 1019;
+pub const WSA_QOS_EFILTERTYPE: c_int = WSABASEERR + 1020;
+pub const WSA_QOS_EFILTERCOUNT: c_int = WSABASEERR + 1021;
+pub const WSA_QOS_EOBJLENGTH: c_int = WSABASEERR + 1022;
+pub const WSA_QOS_EFLOWCOUNT: c_int = WSABASEERR + 1023;
+pub const WSA_QOS_EUNKOWNPSOBJ: c_int = WSABASEERR + 1024;
+pub const WSA_QOS_EPOLICYOBJ: c_int = WSABASEERR + 1025;
+pub const WSA_QOS_EFLOWDESC: c_int = WSABASEERR + 1026;
+pub const WSA_QOS_EPSFLOWSPEC: c_int = WSABASEERR + 1027;
+pub const WSA_QOS_EPSFILTERSPEC: c_int = WSABASEERR + 1028;
+pub const WSA_QOS_ESDMODEOBJ: c_int = WSABASEERR + 1029;
+pub const WSA_QOS_ESHAPERATEOBJ: c_int = WSABASEERR + 1030;
+pub const WSA_QOS_RESERVED_PETYPE: c_int = WSABASEERR + 1031;
+#[inline]
+pub unsafe fn h_errno() -> c_int {
+ WSAGetLastError()
+}
+pub const HOST_NOT_FOUND: c_int = WSAHOST_NOT_FOUND;
+pub const TRY_AGAIN: c_int = WSATRY_AGAIN;
+pub const NO_RECOVERY: c_int = WSANO_RECOVERY;
+pub const NO_DATA: c_int = WSANO_DATA;
+pub const WSANO_ADDRESS: c_int = WSANO_DATA;
+pub const NO_ADDRESS: c_int = WSANO_ADDRESS;
+pub type WSAEVENT = HANDLE;
+pub type LPWSAEVENT = LPHANDLE;
+pub type WSAOVERLAPPED = OVERLAPPED;
+pub type LPWSAOVERLAPPED = *mut OVERLAPPED;
+pub const WSA_IO_PENDING: c_int = ERROR_IO_PENDING as i32;
+pub const WSA_IO_INCOMPLETE: c_int = ERROR_IO_INCOMPLETE as i32;
+pub const WSA_INVALID_HANDLE: c_int = ERROR_INVALID_HANDLE as i32;
+pub const WSA_INVALID_PARAMETER: c_int = ERROR_INVALID_PARAMETER as i32;
+pub const WSA_NOT_ENOUGH_MEMORY: c_int = ERROR_NOT_ENOUGH_MEMORY as i32;
+pub const WSA_OPERATION_ABORTED: c_int = ERROR_OPERATION_ABORTED as i32;
+pub const WSA_INVALID_EVENT: WSAEVENT = 0 as WSAEVENT;
+pub const WSA_MAXIMUM_WAIT_EVENTS: DWORD = MAXIMUM_WAIT_OBJECTS;
+pub const WSA_WAIT_FAILED: DWORD = WAIT_FAILED;
+pub const WSA_WAIT_EVENT_0: DWORD = WAIT_OBJECT_0;
+pub const WSA_WAIT_IO_COMPLETION: DWORD = WAIT_IO_COMPLETION;
+pub const WSA_WAIT_TIMEOUT: DWORD = WAIT_TIMEOUT;
+pub const WSA_INFINITE: DWORD = INFINITE;
+STRUCT!{struct QOS {
+ SendingFlowspec: FLOWSPEC,
+ FLOWSPEC: FLOWSPEC,
+ ProviderSpecific: WSABUF,
+}}
+pub type LPQOS = *mut QOS;
+pub const CF_ACCEPT: c_int = 0x0000;
+pub const CF_REJECT: c_int = 0x0001;
+pub const CF_DEFER: c_int = 0x0002;
+pub const SD_RECEIVE: c_int = 0x00;
+pub const SD_SEND: c_int = 0x01;
+pub const SD_BOTH: c_int = 0x02;
+pub type GROUP = c_uint;
+pub const SG_UNCONSTRAINED_GROUP: GROUP = 0x01;
+pub const SG_CONSTRAINED_GROUP: GROUP = 0x02;
+STRUCT!{struct WSANETWORKEVENTS {
+ lNetworkEvents: c_long,
+ iErrorCode: [c_int; FD_MAX_EVENTS],
+}}
+pub type LPWSANETWORKEVENTS = *mut WSANETWORKEVENTS;
+pub const MAX_PROTOCOL_CHAIN: usize = 7;
+pub const BASE_PROTOCOL: c_int = 1;
+pub const LAYERED_PROTOCOL: c_int = 0;
+STRUCT!{struct WSAPROTOCOLCHAIN {
+ ChainLen: c_int,
+ ChainEntries: [DWORD; MAX_PROTOCOL_CHAIN],
+}}
+pub type LPWSAPROTOCOLCHAIN = *mut WSAPROTOCOLCHAIN;
+pub const WSAPROTOCOL_LEN: usize = 255;
+STRUCT!{struct WSAPROTOCOL_INFOA {
+ dwServiceFlags1: DWORD,
+ dwServiceFlags2: DWORD,
+ dwServiceFlags3: DWORD,
+ dwServiceFlags4: DWORD,
+ dwServiceFlags5: DWORD,
+ ProviderId: GUID,
+ dwCatalogEntryId: DWORD,
+ ProtocolChain: WSAPROTOCOLCHAIN,
+ iVersion: c_int,
+ iAddressFamily: c_int,
+ iMaxSockAddr: c_int,
+ iMinSockAddr: c_int,
+ iSocketType: c_int,
+ iProtocol: c_int,
+ iProtocolMaxOffset: c_int,
+ iNetworkByteOrder: c_int,
+ iSecurityScheme: c_int,
+ dwMessageSize: DWORD,
+ dwProviderReserved: DWORD,
+ szProtocol: [CHAR; WSAPROTOCOL_LEN + 1],
+}}
+pub type LPWSAPROTOCOL_INFOA = *mut WSAPROTOCOL_INFOA;
+STRUCT!{struct WSAPROTOCOL_INFOW {
+ dwServiceFlags1: DWORD,
+ dwServiceFlags2: DWORD,
+ dwServiceFlags3: DWORD,
+ dwServiceFlags4: DWORD,
+ dwServiceFlags5: DWORD,
+ ProviderId: GUID,
+ dwCatalogEntryId: DWORD,
+ ProtocolChain: WSAPROTOCOLCHAIN,
+ iVersion: c_int,
+ iAddressFamily: c_int,
+ iMaxSockAddr: c_int,
+ iMinSockAddr: c_int,
+ iSocketType: c_int,
+ iProtocol: c_int,
+ iProtocolMaxOffset: c_int,
+ iNetworkByteOrder: c_int,
+ iSecurityScheme: c_int,
+ dwMessageSize: DWORD,
+ dwProviderReserved: DWORD,
+ szProtocol: [WCHAR; WSAPROTOCOL_LEN + 1],
+}}
+pub type LPWSAPROTOCOL_INFOW = *mut WSAPROTOCOL_INFOW;
+pub const PFL_MULTIPLE_PROTO_ENTRIES: DWORD = 0x00000001;
+pub const PFL_RECOMMENDED_PROTO_ENTRY: DWORD = 0x00000002;
+pub const PFL_HIDDEN: DWORD = 0x00000004;
+pub const PFL_MATCHES_PROTOCOL_ZERO: DWORD = 0x00000008;
+pub const PFL_NETWORKDIRECT_PROVIDER: DWORD = 0x00000010;
+pub const XP1_CONNECTIONLESS: DWORD = 0x00000001;
+pub const XP1_GUARANTEED_DELIVERY: DWORD = 0x00000002;
+pub const XP1_GUARANTEED_ORDER: DWORD = 0x00000004;
+pub const XP1_MESSAGE_ORIENTED: DWORD = 0x00000008;
+pub const XP1_PSEUDO_STREAM: DWORD = 0x00000010;
+pub const XP1_GRACEFUL_CLOSE: DWORD = 0x00000020;
+pub const XP1_EXPEDITED_DATA: DWORD = 0x00000040;
+pub const XP1_CONNECT_DATA: DWORD = 0x00000080;
+pub const XP1_DISCONNECT_DATA: DWORD = 0x00000100;
+pub const XP1_SUPPORT_BROADCAST: DWORD = 0x00000200;
+pub const XP1_SUPPORT_MULTIPOINT: DWORD = 0x00000400;
+pub const XP1_MULTIPOINT_CONTROL_PLANE: DWORD = 0x00000800;
+pub const XP1_MULTIPOINT_DATA_PLANE: DWORD = 0x00001000;
+pub const XP1_QOS_SUPPORTED: DWORD = 0x00002000;
+pub const XP1_INTERRUPT: DWORD = 0x00004000;
+pub const XP1_UNI_SEND: DWORD = 0x00008000;
+pub const XP1_UNI_RECV: DWORD = 0x00010000;
+pub const XP1_IFS_HANDLES: DWORD = 0x00020000;
+pub const XP1_PARTIAL_MESSAGE: DWORD = 0x00040000;
+pub const XP1_SAN_SUPPORT_SDP: DWORD = 0x00080000;
+pub const BIGENDIAN: DWORD = 0x0000;
+pub const LITTLEENDIAN: DWORD = 0x0001;
+pub const SECURITY_PROTOCOL_NONE: DWORD = 0x0000;
+pub const JL_SENDER_ONLY: DWORD = 0x01;
+pub const JL_RECEIVER_ONLY: DWORD = 0x02;
+pub const JL_BOTH: DWORD = 0x04;
+pub const WSA_FLAG_OVERLAPPED: DWORD = 0x01;
+pub const WSA_FLAG_MULTIPOINT_C_ROOT: DWORD = 0x02;
+pub const WSA_FLAG_MULTIPOINT_C_LEAF: DWORD = 0x04;
+pub const WSA_FLAG_MULTIPOINT_D_ROOT: DWORD = 0x08;
+pub const WSA_FLAG_MULTIPOINT_D_LEAF: DWORD = 0x10;
+pub const WSA_FLAG_ACCESS_SYSTEM_SECURITY: DWORD = 0x40;
+pub const WSA_FLAG_NO_HANDLE_INHERIT: DWORD = 0x80;
+pub const WSA_FLAG_REGISTERED_IO: DWORD = 0x100;
+FN!{stdcall LPCONDITIONPROC(
+ lpCallerId: LPWSABUF,
+ lpCallerData: LPWSABUF,
+ lpSQOS: LPQOS,
+ lpGQOS: LPQOS,
+ lpCalleeId: LPWSABUF,
+ lpCalleeData: LPWSABUF,
+ g: *mut GROUP,
+ dwCallbackData: DWORD,
+) -> c_int}
+FN!{stdcall LPWSAOVERLAPPED_COMPLETION_ROUTINE(
+ dwError: DWORD,
+ cbTransferred: DWORD,
+ lpOverlapped: LPWSAOVERLAPPED,
+ dwFlags: DWORD,
+) -> ()}
+ENUM!{enum WSACOMPLETIONTYPE {
+ NSP_NOTIFY_IMMEDIATELY = 0,
+ NSP_NOTIFY_HWND,
+ NSP_NOTIFY_EVENT,
+ NSP_NOTIFY_PORT,
+ NSP_NOTIFY_APC,
+}}
+pub type PWSACOMPLETIONTYPE = *mut WSACOMPLETIONTYPE;
+pub type LPWSACOMPLETIONTYPE = *mut WSACOMPLETIONTYPE;
+STRUCT!{struct WSACOMPLETION_WindowMessage {
+ hWnd: HWND,
+ uMsg: UINT,
+ context: WPARAM,
+}}
+STRUCT!{struct WSACOMPLETION_Event {
+ lpOverlapped: LPWSAOVERLAPPED,
+}}
+STRUCT!{struct WSACOMPLETION_Apc {
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpfnCompletionProc: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+}}
+STRUCT!{struct WSACOMPLETION_Port {
+ lpOverlapped: LPWSAOVERLAPPED,
+ hPort: HANDLE,
+ Key: ULONG_PTR,
+}}
+UNION!{union WSACOMPLETION_Parameter {
+ [usize; 3],
+ WindowMessage WindowMessage_mut: WSACOMPLETION_WindowMessage,
+ Event Event_mut: WSACOMPLETION_Event,
+ Apc Apc_mut: WSACOMPLETION_Apc,
+ Port Port_mut: WSACOMPLETION_Port,
+}}
+STRUCT!{struct WSACOMPLETION {
+ Type: WSACOMPLETIONTYPE,
+ Parameters: WSACOMPLETION_Parameter,
+}}
+pub type PWSACOMPLETION = *mut WSACOMPLETION;
+pub type LPWSACOMPLETION = *mut WSACOMPLETION;
+pub const TH_NETDEV: DWORD = 0x00000001;
+pub const TH_TAPI: DWORD = 0x00000002;
+pub const SERVICE_MULTIPLE: DWORD = 0x00000001;
+pub const NS_ALL: DWORD = 0;
+pub const NS_SAP: DWORD = 1;
+pub const NS_NDS: DWORD = 2;
+pub const NS_PEER_BROWSE: DWORD = 3;
+pub const NS_SLP: DWORD = 5;
+pub const NS_DHCP: DWORD = 6;
+pub const NS_TCPIP_LOCAL: DWORD = 10;
+pub const NS_TCPIP_HOSTS: DWORD = 11;
+pub const NS_DNS: DWORD = 12;
+pub const NS_NETBT: DWORD = 13;
+pub const NS_WINS: DWORD = 14;
+pub const NS_NLA: DWORD = 15;
+pub const NS_BTH: DWORD = 16;
+pub const NS_LOCALNAME: DWORD = 19;
+pub const NS_NBP: DWORD = 20;
+pub const NS_MS: DWORD = 30;
+pub const NS_STDA: DWORD = 31;
+pub const NS_NTDS: DWORD = 32;
+pub const NS_EMAIL: DWORD = 37;
+pub const NS_PNRPNAME: DWORD = 38;
+pub const NS_PNRPCLOUD: DWORD = 39;
+pub const NS_X500: DWORD = 40;
+pub const NS_NIS: DWORD = 41;
+pub const NS_NISPLUS: DWORD = 42;
+pub const NS_WRQ: DWORD = 50;
+pub const NS_NETDES: DWORD = 60;
+pub const RES_UNUSED_1: DWORD = 0x00000001;
+pub const RES_FLUSH_CACHE: DWORD = 0x00000002;
+pub const RES_SERVICE: DWORD = 0x00000004;
+pub const SERVICE_TYPE_VALUE_IPXPORT: &'static str = "IpxSocket";
+pub const SERVICE_TYPE_VALUE_SAPID: &'static str = "SapId";
+pub const SERVICE_TYPE_VALUE_TCPPORT: &'static str = "TcpPort";
+pub const SERVICE_TYPE_VALUE_UDPPORT: &'static str = "UdpPort";
+pub const SERVICE_TYPE_VALUE_OBJECTID: &'static str = "ObjectId";
+STRUCT!{struct AFPROTOCOLS {
+ iAddressFamily: INT,
+ iProtocol: INT,
+}}
+pub type PAFPROTOCOLS = *mut AFPROTOCOLS;
+pub type LPAFPROTOCOLS = *mut AFPROTOCOLS;
+ENUM!{enum WSAECOMPARATOR {
+ COMP_EQUAL = 0,
+ COMP_NOTLESS,
+}}
+pub type PWSAECOMPARATOR = *mut WSAECOMPARATOR;
+pub type LPWSAECOMPARATOR = *mut WSAECOMPARATOR;
+STRUCT!{struct WSAVERSION {
+ dwVersion: DWORD,
+ ecHow: WSAECOMPARATOR,
+}}
+pub type PWSAVERSION = *mut WSAVERSION;
+pub type LPWSAVERSION = *mut WSAVERSION;
+STRUCT!{struct WSAQUERYSETA {
+ dwSize: DWORD,
+ lpszServiceInstanceName: LPSTR,
+ lpServiceClassId: LPGUID,
+ lpVersion: LPWSAVERSION,
+ lpszComment: LPSTR,
+ dwNameSpace: DWORD,
+ lpNSProviderId: LPGUID,
+ lpszContext: LPSTR,
+ dwNumberOfProtocols: DWORD,
+ lpafpProtocols: LPAFPROTOCOLS,
+ lpszQueryString: LPSTR,
+ dwNumberOfCsAddrs: DWORD,
+ lpcsaBuffer: LPCSADDR_INFO,
+ dwOutputFlags: DWORD,
+ lpBlob: LPBLOB,
+}}
+pub type PWSAQUERYSETA = *mut WSAQUERYSETA;
+pub type LPWSAQUERYSETA = *mut WSAQUERYSETA;
+STRUCT!{struct WSAQUERYSETW {
+ dwSize: DWORD,
+ lpszServiceInstanceName: LPWSTR,
+ lpServiceClassId: LPGUID,
+ lpVersion: LPWSAVERSION,
+ lpszComment: LPWSTR,
+ dwNameSpace: DWORD,
+ lpNSProviderId: LPGUID,
+ lpszContext: LPWSTR,
+ dwNumberOfProtocols: DWORD,
+ lpafpProtocols: LPAFPROTOCOLS,
+ lpszQueryString: LPWSTR,
+ dwNumberOfCsAddrs: DWORD,
+ lpcsaBuffer: LPCSADDR_INFO,
+ dwOutputFlags: DWORD,
+ lpBlob: LPBLOB,
+}}
+pub type PWSAQUERYSETW = *mut WSAQUERYSETW;
+pub type LPWSAQUERYSETW = *mut WSAQUERYSETW;
+STRUCT!{struct WSAQUERYSET2A {
+ dwSize: DWORD,
+ lpszServiceInstanceName: LPSTR,
+ lpVersion: LPWSAVERSION,
+ lpszComment: LPSTR,
+ dwNameSpace: DWORD,
+ lpNSProviderId: LPGUID,
+ lpszContext: LPSTR,
+ dwNumberOfProtocols: DWORD,
+ lpafpProtocols: LPAFPROTOCOLS,
+ lpszQueryString: LPSTR,
+ dwNumberOfCsAddrs: DWORD,
+ lpcsaBuffer: LPCSADDR_INFO,
+ dwOutputFlags: DWORD,
+ lpBlob: LPBLOB,
+}}
+pub type PWSAQUERYSET2A = *mut WSAQUERYSET2A;
+pub type LPWSAQUERYSET2A = *mut WSAQUERYSET2A;
+STRUCT!{struct WSAQUERYSET2W {
+ dwSize: DWORD,
+ lpszServiceInstanceName: LPWSTR,
+ lpVersion: LPWSAVERSION,
+ lpszComment: LPWSTR,
+ dwNameSpace: DWORD,
+ lpNSProviderId: LPGUID,
+ lpszContext: LPWSTR,
+ dwNumberOfProtocols: DWORD,
+ lpafpProtocols: LPAFPROTOCOLS,
+ lpszQueryString: LPWSTR,
+ dwNumberOfCsAddrs: DWORD,
+ lpcsaBuffer: LPCSADDR_INFO,
+ dwOutputFlags: DWORD,
+ lpBlob: LPBLOB,
+}}
+pub type PWSAQUERYSET2W = *mut WSAQUERYSET2W;
+pub type LPWSAQUERYSET2W = *mut WSAQUERYSET2W;
+pub const LUP_DEEP: DWORD = 0x0001;
+pub const LUP_CONTAINERS: DWORD = 0x0002;
+pub const LUP_NOCONTAINERS: DWORD = 0x0004;
+pub const LUP_NEAREST: DWORD = 0x0008;
+pub const LUP_RETURN_NAME: DWORD = 0x0010;
+pub const LUP_RETURN_TYPE: DWORD = 0x0020;
+pub const LUP_RETURN_VERSION: DWORD = 0x0040;
+pub const LUP_RETURN_COMMENT: DWORD = 0x0080;
+pub const LUP_RETURN_ADDR: DWORD = 0x0100;
+pub const LUP_RETURN_BLOB: DWORD = 0x0200;
+pub const LUP_RETURN_ALIASES: DWORD = 0x0400;
+pub const LUP_RETURN_QUERY_STRING: DWORD = 0x0800;
+pub const LUP_RETURN_ALL: DWORD = 0x0FF0;
+pub const LUP_RES_SERVICE: DWORD = 0x8000;
+pub const LUP_FLUSHCACHE: DWORD = 0x1000;
+pub const LUP_FLUSHPREVIOUS: DWORD = 0x2000;
+pub const LUP_NON_AUTHORITATIVE: DWORD = 0x4000;
+pub const LUP_SECURE: DWORD = 0x8000;
+pub const LUP_RETURN_PREFERRED_NAMES: DWORD = 0x10000;
+pub const LUP_DNS_ONLY: DWORD = 0x20000;
+pub const LUP_ADDRCONFIG: DWORD = 0x00100000;
+pub const LUP_DUAL_ADDR: DWORD = 0x00200000;
+pub const LUP_FILESERVER: DWORD = 0x00400000;
+pub const LUP_DISABLE_IDN_ENCODING: DWORD = 0x00800000;
+pub const LUP_API_ANSI: DWORD = 0x01000000;
+pub const LUP_RESOLUTION_HANDLE: DWORD = 0x80000000;
+pub const RESULT_IS_ALIAS: DWORD = 0x0001;
+pub const RESULT_IS_ADDED: DWORD = 0x0010;
+pub const RESULT_IS_CHANGED: DWORD = 0x0020;
+pub const RESULT_IS_DELETED: DWORD = 0x0040;
+ENUM!{enum WSAESETSERVICEOP {
+ RNRSERVICE_REGISTER = 0,
+ RNRSERVICE_DEREGISTER,
+ RNRSERVICE_DELETE,
+}}
+pub type PWSAESETSERVICEOP = *mut WSAESETSERVICEOP;
+pub type LPWSAESETSERVICEOP = *mut WSAESETSERVICEOP;
+STRUCT!{struct WSANSCLASSINFOA {
+ lpszName: LPSTR,
+ dwNameSpace: DWORD,
+ dwValueType: DWORD,
+ dwValueSize: DWORD,
+ lpValue: LPVOID,
+}}
+pub type PWSANSCLASSINFOA = *mut WSANSCLASSINFOA;
+pub type LPWSANSCLASSINFOA = *mut WSANSCLASSINFOA;
+STRUCT!{struct WSANSCLASSINFOW {
+ lpszName: LPWSTR,
+ dwNameSpace: DWORD,
+ dwValueType: DWORD,
+ dwValueSize: DWORD,
+ lpValue: LPVOID,
+}}
+pub type PWSANSCLASSINFOW = *mut WSANSCLASSINFOW;
+pub type LPWSANSCLASSINFOW = *mut WSANSCLASSINFOW;
+STRUCT!{struct WSASERVICECLASSINFOA {
+ lpServiceClassId: LPGUID,
+ lpszServiceClassName: LPSTR,
+ dwCount: DWORD,
+ lpClassInfos: LPWSANSCLASSINFOA,
+}}
+pub type PWSASERVICECLASSINFOA = *mut WSASERVICECLASSINFOA;
+pub type LPWSASERVICECLASSINFOA = *mut WSASERVICECLASSINFOA;
+STRUCT!{struct WSASERVICECLASSINFOW {
+ lpServiceClassId: LPGUID,
+ lpszServiceClassName: LPWSTR,
+ dwCount: DWORD,
+ lpClassInfos: LPWSANSCLASSINFOW,
+}}
+pub type PWSASERVICECLASSINFOW = *mut WSASERVICECLASSINFOW;
+pub type LPWSASERVICECLASSINFOW = *mut WSASERVICECLASSINFOW;
+STRUCT!{struct WSANAMESPACE_INFOA {
+ NSProviderId: GUID,
+ dwNameSpace: DWORD,
+ fActive: BOOL,
+ dwVersion: DWORD,
+ lpszIdentifier: LPSTR,
+}}
+pub type PWSANAMESPACE_INFOA = *mut WSANAMESPACE_INFOA;
+pub type LPWSANAMESPACE_INFOA = *mut WSANAMESPACE_INFOA;
+STRUCT!{struct WSANAMESPACE_INFOW {
+ NSProviderId: GUID,
+ dwNameSpace: DWORD,
+ fActive: BOOL,
+ dwVersion: DWORD,
+ lpszIdentifier: LPWSTR,
+}}
+pub type PWSANAMESPACE_INFOW = *mut WSANAMESPACE_INFOW;
+pub type LPWSANAMESPACE_INFOW = *mut WSANAMESPACE_INFOW;
+STRUCT!{struct WSANAMESPACE_INFOEXA {
+ NSProviderId: GUID,
+ dwNameSpace: DWORD,
+ fActive: BOOL,
+ dwVersion: DWORD,
+ lpszIdentifier: LPSTR,
+ ProviderSpecific: BLOB,
+}}
+pub type PWSANAMESPACE_INFOEXA = *mut WSANAMESPACE_INFOEXA;
+pub type LPWSANAMESPACE_INFOEXA = *mut WSANAMESPACE_INFOEXA;
+STRUCT!{struct WSANAMESPACE_INFOEXW {
+ NSProviderId: GUID,
+ dwNameSpace: DWORD,
+ fActive: BOOL,
+ dwVersion: DWORD,
+ lpszIdentifier: LPWSTR,
+ ProviderSpecific: BLOB,
+}}
+pub type PWSANAMESPACE_INFOEXW = *mut WSANAMESPACE_INFOEXW;
+pub type LPWSANAMESPACE_INFOEXW = *mut WSANAMESPACE_INFOEXW;
+pub const POLLRDNORM: SHORT = 0x0100;
+pub const POLLRDBAND: SHORT = 0x0200;
+pub const POLLIN: SHORT = POLLRDNORM | POLLRDBAND;
+pub const POLLPRI: SHORT = 0x0400;
+pub const POLLWRNORM: SHORT = 0x0010;
+pub const POLLOUT: SHORT = POLLWRNORM;
+pub const POLLWRBAND: SHORT = 0x0020;
+pub const POLLERR: SHORT = 0x0001;
+pub const POLLHUP: SHORT = 0x0002;
+pub const POLLNVAL: SHORT = 0x0004;
+STRUCT!{struct WSAPOLLFD {
+ fd: SOCKET,
+ events: SHORT,
+ revents: SHORT,
+}}
+pub type PWSAPOLLFD = *mut WSAPOLLFD;
+pub type LPWSAPOLLFD = *mut WSAPOLLFD;
+extern "system" {
+ pub fn accept(
+ s: SOCKET,
+ addr: *mut SOCKADDR,
+ addrlen: *mut c_int,
+ ) -> SOCKET;
+ pub fn bind(s: SOCKET,
+ name: *const SOCKADDR,
+ namelen: c_int,
+ ) -> c_int;
+ pub fn closesocket(
+ s: SOCKET,
+ ) -> c_int;
+ pub fn connect(
+ s: SOCKET,
+ name: *const SOCKADDR,
+ namelen: c_int,
+ ) -> c_int;
+ pub fn ioctlsocket(
+ s: SOCKET,
+ cmd: c_long,
+ argp: *mut u_long,
+ ) -> c_int;
+ pub fn getpeername(
+ s: SOCKET,
+ name: *mut SOCKADDR,
+ namelen: *mut c_int,
+ ) -> c_int;
+ pub fn getsockname(
+ s: SOCKET,
+ name: *mut SOCKADDR,
+ namelen: *mut c_int,
+ ) -> c_int;
+ pub fn getsockopt(
+ s: SOCKET,
+ level: c_int,
+ optname: c_int,
+ optval: *mut c_char,
+ optlen: *mut c_int,
+ ) -> c_int;
+ pub fn htonl(
+ hostlong: u_long,
+ ) -> u_long;
+ pub fn htons(
+ hostshort: u_short,
+ ) -> u_short;
+ pub fn inet_addr(
+ cp: *const c_char,
+ ) -> c_ulong;
+ pub fn inet_ntoa(
+ _in: in_addr,
+ ) -> *mut c_char;
+}
+#[inline]
+pub fn _WS2_32_WINSOCK_SWAP_LONG(l: __uint32) -> __uint32 {
+ ((l >> 24) & 0x000000FF) | ((l >> 8) & 0x0000FF00) | ((l << 8) & 0x00FF0000)
+ | ((l << 24) & 0xFF000000)
+}
+#[inline]
+pub fn _WS2_32_WINSOCK_SWAP_LONGLONG(l: __uint64) -> __uint64 {
+ ((l >> 56) & 0x00000000000000FF) | ((l >> 40) & 0x000000000000FF00)
+ | ((l >> 24) & 0x0000000000FF0000) | ((l >> 8) & 0x00000000FF000000)
+ | ((l << 8) & 0x000000FF00000000) | ((l << 24) & 0x0000FF0000000000)
+ | ((l << 40) & 0x00FF000000000000) | ((l << 56) & 0xFF00000000000000)
+}
+#[inline]
+pub fn htonll(Value: __uint64) -> __uint64 {
+ _WS2_32_WINSOCK_SWAP_LONGLONG(Value)
+}
+#[inline]
+pub fn ntohll(Value: __uint64) -> __uint64 {
+ _WS2_32_WINSOCK_SWAP_LONGLONG(Value)
+}
+#[inline]
+pub fn htonf(Value: c_float) -> __uint32 {
+ let Tempval: __uint32 = unsafe { ::core::mem::transmute(Value) };
+ _WS2_32_WINSOCK_SWAP_LONG(Tempval)
+}
+#[inline]
+pub fn ntohf(Value: __uint32) -> c_float {
+ let Tempval = _WS2_32_WINSOCK_SWAP_LONG(Value);
+ unsafe { ::core::mem::transmute(Tempval) }
+}
+#[inline]
+pub fn htond(Value: c_double) -> __uint64 {
+ let Tempval: __uint64 = unsafe { ::core::mem::transmute(Value) };
+ _WS2_32_WINSOCK_SWAP_LONGLONG(Tempval)
+}
+#[inline]
+pub fn ntohd(Value: __uint64) -> c_double {
+ let Tempval = _WS2_32_WINSOCK_SWAP_LONGLONG(Value);
+ unsafe { ::core::mem::transmute(Tempval) }
+}
+extern "system" {
+ pub fn listen(
+ s: SOCKET,
+ backlog: c_int,
+ ) -> c_int;
+ pub fn ntohl(
+ netlong: u_long,
+ ) -> u_long;
+ pub fn ntohs(
+ netshort: u_short,
+ ) -> u_short;
+ pub fn recv(
+ s: SOCKET,
+ buf: *mut c_char,
+ len: c_int,
+ flags: c_int,
+ ) -> c_int;
+ pub fn recvfrom(
+ s: SOCKET,
+ buf: *mut c_char,
+ len: c_int,
+ flags: c_int,
+ from: *mut SOCKADDR,
+ fromlen: *mut c_int,
+ ) -> c_int;
+ pub fn select(
+ nfds: c_int,
+ readfds: *mut fd_set,
+ writefds: *mut fd_set,
+ exceptfds: *mut fd_set,
+ timeout: *const timeval,
+ ) -> c_int;
+ pub fn send(
+ s: SOCKET,
+ buf: *const c_char,
+ len: c_int,
+ flags: c_int,
+ ) -> c_int;
+ pub fn sendto(
+ s: SOCKET,
+ buf: *const c_char,
+ len: c_int,
+ flags: c_int,
+ to: *const SOCKADDR,
+ tolen: c_int,
+ ) -> c_int;
+ pub fn setsockopt(
+ s: SOCKET,
+ level: c_int,
+ optname: c_int,
+ optval: *const c_char,
+ optlen: c_int,
+ ) -> c_int;
+ pub fn shutdown(
+ s: SOCKET,
+ how: c_int,
+ ) -> c_int;
+ pub fn socket(
+ af: c_int,
+ _type: c_int,
+ protocol: c_int,
+ ) -> SOCKET;
+ pub fn gethostbyaddr(
+ addr: *const c_char,
+ len: c_int,
+ _type: c_int,
+ ) -> *mut hostent;
+ pub fn gethostbyname(
+ name: *const c_char,
+ ) -> *mut hostent;
+ pub fn gethostname(
+ name: *mut c_char,
+ namelen: c_int,
+ ) -> c_int;
+ pub fn GetHostNameW(
+ name: PWSTR,
+ namelen: c_int,
+ ) -> c_int;
+ pub fn getservbyport(
+ port: c_int,
+ proto: *const c_char,
+ ) -> *mut servent;
+ pub fn getservbyname(
+ name: *const c_char,
+ proto: *const c_char,
+ ) -> *mut servent;
+ pub fn getprotobynumber(
+ number: c_int,
+ ) -> *mut protoent;
+ pub fn getprotobyname(
+ name: *const c_char,
+ ) -> *mut protoent;
+ pub fn WSAStartup(
+ wVersionRequested: WORD,
+ lpWSAData: LPWSADATA,
+ ) -> c_int;
+ pub fn WSACleanup() -> c_int;
+ pub fn WSASetLastError(
+ iError: c_int,
+ );
+ pub fn WSAGetLastError() -> c_int;
+ pub fn WSAIsBlocking() -> BOOL;
+ pub fn WSAUnhookBlockingHook() -> c_int;
+ pub fn WSASetBlockingHook(
+ lpBlockFunc: FARPROC,
+ ) -> FARPROC;
+ pub fn WSACancelBlockingCall() -> c_int;
+ pub fn WSAAsyncGetServByName(
+ hWnd: HWND,
+ wMsg: u_int,
+ name: *const c_char,
+ proto: *const c_char,
+ buf: *mut c_char,
+ buflen: c_int,
+ ) -> HANDLE;
+ pub fn WSAAsyncGetServByPort(
+ hWnd: HWND,
+ wMsg: u_int,
+ port: c_int,
+ proto: *const c_char,
+ buf: *mut c_char,
+ buflen: c_int,
+ ) -> HANDLE;
+ pub fn WSAAsyncGetProtoByName(
+ hWnd: HWND,
+ wMsg: u_int,
+ name: *const c_char,
+ buf: *mut c_char,
+ buflen: c_int,
+ ) -> HANDLE;
+ pub fn WSAAsyncGetProtoByNumber(
+ hWnd: HWND,
+ wMsg: u_int,
+ number: c_int,
+ buf: *mut c_char,
+ buflen: c_int,
+ ) -> HANDLE;
+ pub fn WSAAsyncGetHostByName(
+ hWnd: HWND,
+ wMsg: u_int,
+ name: *const c_char,
+ buf: *mut c_char,
+ buflen: c_int,
+ ) -> HANDLE;
+ pub fn WSAAsyncGetHostByAddr(
+ hWnd: HWND,
+ wMsg: u_int,
+ addr: *const c_char,
+ len: c_int,
+ _type: c_int,
+ buf: *mut c_char,
+ buflen: c_int,
+ ) -> HANDLE;
+ pub fn WSACancelAsyncRequest(
+ hAsyncTaskHandle: HANDLE,
+ ) -> c_int;
+ pub fn WSAAsyncSelect(
+ s: SOCKET,
+ hWnd: HWND,
+ wMsg: u_int,
+ lEvent: c_long,
+ ) -> c_int;
+ pub fn WSAAccept(
+ s: SOCKET,
+ addr: *mut SOCKADDR,
+ addrlen: LPINT,
+ lpfnCondition: LPCONDITIONPROC,
+ dwCallbackData: DWORD_PTR,
+ ) -> SOCKET;
+ pub fn WSACloseEvent(
+ hEvent: WSAEVENT,
+ ) -> BOOL;
+ pub fn WSAConnect(
+ s: SOCKET,
+ name: *const SOCKADDR,
+ namelen: c_int,
+ lpCallerData: LPWSABUF,
+ lpCalleeData: LPWSABUF,
+ lpSQOS: LPQOS,
+ lpGQOS: LPQOS,
+ ) -> c_int;
+ pub fn WSAConnectByNameW(
+ s: SOCKET,
+ nodename: LPWSTR,
+ servicename: LPWSTR,
+ LocalAddressLength: LPDWORD,
+ LocalAddress: LPSOCKADDR,
+ RemoteAddressLength: LPDWORD,
+ RemoteAddress: LPSOCKADDR,
+ timeout: *const timeval,
+ Reserved: LPWSAOVERLAPPED,
+ ) -> BOOL;
+ pub fn WSAConnectByNameA(
+ s: SOCKET,
+ nodename: LPCSTR,
+ servicename: LPCSTR,
+ LocalAddressLength: LPDWORD,
+ LocalAddress: LPSOCKADDR,
+ RemoteAddressLength: LPDWORD,
+ RemoteAddress: LPSOCKADDR,
+ timeout: *const timeval,
+ Reserved: LPWSAOVERLAPPED,
+ ) -> BOOL;
+ pub fn WSAConnectByList(
+ s: SOCKET,
+ SocketAddress: PSOCKET_ADDRESS_LIST,
+ LocalAddressLength: LPDWORD,
+ LocalAddress: LPSOCKADDR,
+ RemoteAddressLength: LPDWORD,
+ RemoteAddress: LPSOCKADDR,
+ timeout: *const timeval,
+ Reserved: LPWSAOVERLAPPED,
+ ) -> BOOL;
+ pub fn WSACreateEvent() -> WSAEVENT;
+ pub fn WSADuplicateSocketA(
+ s: SOCKET,
+ dwProcessId: DWORD,
+ lpProtocolInfo: LPWSAPROTOCOL_INFOA,
+ ) -> c_int;
+ pub fn WSADuplicateSocketW(
+ s: SOCKET,
+ dwProcessId: DWORD,
+ lpProtocolInfo: LPWSAPROTOCOL_INFOW,
+ ) -> c_int;
+ pub fn WSAEnumNetworkEvents(
+ s: SOCKET,
+ hEventObject: WSAEVENT,
+ lpNetworkEvents: LPWSANETWORKEVENTS,
+ ) -> c_int;
+ pub fn WSAEnumProtocolsA(
+ lpiProtocols: LPINT,
+ lpProtocolBuffer: LPWSAPROTOCOL_INFOA,
+ lpdwBufferLength: LPDWORD,
+ ) -> c_int;
+ pub fn WSAEnumProtocolsW(
+ lpiProtocols: LPINT,
+ lpProtocolBuffer: LPWSAPROTOCOL_INFOW,
+ lpdwBufferLength: LPDWORD,
+ ) -> c_int;
+ pub fn WSAEventSelect(
+ s: SOCKET,
+ hEventObject: WSAEVENT,
+ lNetworkEvents: c_long,
+ ) -> c_int;
+ pub fn WSAGetOverlappedResult(
+ s: SOCKET,
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpcbTransfer: LPDWORD,
+ fWait: BOOL,
+ lpdwFlags: LPDWORD,
+ ) -> BOOL;
+ pub fn WSAGetQOSByName(
+ s: SOCKET,
+ lpQOSName: LPWSABUF,
+ lpQOS: LPQOS,
+ ) -> BOOL;
+ pub fn WSAHtonl(
+ s: SOCKET,
+ hostlong: u_long,
+ lpnetlong: *mut u_long,
+ ) -> c_int;
+ pub fn WSAHtons(s: SOCKET,
+ hostshort: u_short,
+ lpnetshort: *mut u_short,
+ ) -> c_int;
+ pub fn WSAIoctl(
+ s: SOCKET,
+ dwIoControlCode: DWORD,
+ lpvInBuffer: LPVOID,
+ cbInBuffer: DWORD,
+ lpvOutBuffer: LPVOID,
+ cbOutBuffer: DWORD,
+ lpcbBytesReturned: LPDWORD,
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+ ) -> c_int;
+ pub fn WSAJoinLeaf(
+ s: SOCKET,
+ name: *const SOCKADDR,
+ namelen: c_int,
+ lpCallerData: LPWSABUF,
+ lpCalleeData: LPWSABUF,
+ lpSQOS: LPQOS,
+ lpGQOS: LPQOS,
+ dwFlags: DWORD,
+ ) -> SOCKET;
+ pub fn WSANtohl(
+ s: SOCKET,
+ netlong: u_long,
+ lphostlong: *mut c_long,
+ ) -> c_int;
+ pub fn WSANtohs(
+ s: SOCKET,
+ netshort: u_short,
+ lphostshort: *mut c_short,
+ ) -> c_int;
+ pub fn WSARecv(
+ s: SOCKET,
+ lpBuffers: LPWSABUF,
+ dwBufferCount: DWORD,
+ lpNumberOfBytesRecvd: LPDWORD,
+ lpFlags: LPDWORD,
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+ ) -> c_int;
+ pub fn WSARecvDisconnect(
+ s: SOCKET,
+ lpInboundDisconnectData: LPWSABUF,
+ ) -> c_int;
+ pub fn WSARecvFrom(
+ s: SOCKET,
+ lpBuffers: LPWSABUF,
+ dwBufferCount: DWORD,
+ lpNumberOfBytesRecvd: LPDWORD,
+ lpFlags: LPDWORD,
+ lpFrom: *mut SOCKADDR,
+ lpFromlen: LPINT,
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+ ) -> c_int;
+ pub fn WSAResetEvent(
+ hEvent: WSAEVENT,
+ ) -> BOOL;
+ pub fn WSASend(
+ s: SOCKET,
+ lpBuffers: LPWSABUF,
+ dwBufferCount: DWORD,
+ lpNumberOfBytesSent: LPDWORD,
+ dwFlags: DWORD,
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+ ) -> c_int;
+ pub fn WSASendMsg(
+ Handle: SOCKET,
+ lpMsg: LPWSAMSG,
+ dwFlags: DWORD,
+ lpNumberOfBytesSent: LPDWORD,
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+ ) -> c_int;
+ pub fn WSASendDisconnect(
+ s: SOCKET,
+ lpOutboundDisconnectData: LPWSABUF,
+ ) -> c_int;
+ pub fn WSASendTo(
+ s: SOCKET,
+ lpBuffers: LPWSABUF,
+ dwBufferCount: DWORD,
+ lpNumberOfBytesSent: LPDWORD,
+ dwFlags: DWORD,
+ lpTo: *const SOCKADDR,
+ iToLen: c_int,
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+ ) -> c_int;
+ pub fn WSASetEvent(
+ hEvent: WSAEVENT,
+ ) -> BOOL;
+ pub fn WSASocketA(
+ af: c_int,
+ _type: c_int,
+ protocol: c_int,
+ lpProtocolInfo: LPWSAPROTOCOL_INFOA,
+ g: GROUP,
+ dwFlags: DWORD,
+ ) -> SOCKET;
+ pub fn WSASocketW(
+ af: c_int,
+ _type: c_int,
+ protocol: c_int,
+ lpProtocolInfo: LPWSAPROTOCOL_INFOW,
+ g: GROUP,
+ dwFlags: DWORD,
+ ) -> SOCKET;
+ pub fn WSAWaitForMultipleEvents(
+ cEvents: DWORD,
+ lphEvents: *const WSAEVENT,
+ fWaitAll: BOOL,
+ dwTimeout: DWORD,
+ fAlertable: BOOL,
+ ) -> DWORD;
+ pub fn WSAAddressToStringA(
+ lpsaAddress: LPSOCKADDR,
+ dwAddressLength: DWORD,
+ lpProtocolInfo: LPWSAPROTOCOL_INFOA,
+ lpszAddressString: LPSTR,
+ lpdwAddressStringLength: LPDWORD,
+ ) -> INT;
+ pub fn WSAAddressToStringW(
+ lpsaAddress: LPSOCKADDR,
+ dwAddressLength: DWORD,
+ lpProtocolInfo: LPWSAPROTOCOL_INFOW,
+ lpszAddressString: LPWSTR,
+ lpdwAddressStringLength: LPDWORD,
+ ) -> INT;
+ pub fn WSAStringToAddressA(
+ AddressString: LPSTR,
+ AddressFamily: INT,
+ lpProtocolInfo: LPWSAPROTOCOL_INFOA,
+ lpAddress: LPSOCKADDR,
+ lpAddressLength: LPINT,
+ ) -> INT;
+ pub fn WSAStringToAddressW(
+ AddressString: LPWSTR,
+ AddressFamily: INT,
+ lpProtocolInfo: LPWSAPROTOCOL_INFOW,
+ lpAddress: LPSOCKADDR,
+ lpAddressLength: LPINT,
+ ) -> INT;
+ pub fn WSALookupServiceBeginA(
+ lpqsRestrictions: LPWSAQUERYSETA,
+ dwControlFlags: DWORD,
+ lphLookup: LPHANDLE,
+ ) -> INT;
+ pub fn WSALookupServiceBeginW(
+ lpqsRestrictions: LPWSAQUERYSETW,
+ dwControlFlags: DWORD,
+ lphLookup: LPHANDLE,
+ ) -> INT;
+ pub fn WSALookupServiceNextA(
+ hLookup: HANDLE,
+ dwControlFlags: DWORD,
+ lpdwBufferLength: LPDWORD,
+ lpqsResults: LPWSAQUERYSETA,
+ ) -> INT;
+ pub fn WSALookupServiceNextW(
+ hLookup: HANDLE,
+ dwControlFlags: DWORD,
+ lpdwBufferLength: LPDWORD,
+ lpqsResults: LPWSAQUERYSETW,
+ ) -> INT;
+ pub fn WSANSPIoctl(
+ hLookup: HANDLE,
+ dwControlFlags: DWORD,
+ lpvInBuffer: LPVOID,
+ cbInBuffer: DWORD,
+ lpvOutBuffer: LPVOID,
+ cbOutBuffer: DWORD,
+ lpcbBytesReturned: LPDWORD,
+ lpCompletion: LPWSACOMPLETION,
+ ) -> INT;
+ pub fn WSALookupServiceEnd(
+ hLookup: HANDLE,
+ ) -> INT;
+ pub fn WSAInstallServiceClassA(
+ lpServiceClassInfo: LPWSASERVICECLASSINFOA,
+ ) -> INT;
+ pub fn WSAInstallServiceClassW(
+ lpServiceClassInfo: LPWSASERVICECLASSINFOW,
+ ) -> INT;
+ pub fn WSARemoveServiceClass(
+ lpServiceClassId: LPGUID,
+ ) -> INT;
+ pub fn WSAGetServiceClassInfoA(
+ lpProviderId: LPGUID,
+ lpServiceClassId: LPGUID,
+ lpdwBufSize: LPDWORD,
+ lpServiceClassInfo: LPWSASERVICECLASSINFOA,
+ ) -> INT;
+ pub fn WSAGetServiceClassInfoW(
+ lpProviderId: LPGUID,
+ lpServiceClassId: LPGUID,
+ lpdwBufSize: LPDWORD,
+ lpServiceClassInfo: LPWSASERVICECLASSINFOW,
+ ) -> INT;
+ pub fn WSAEnumNameSpaceProvidersA(
+ lpdwBufferLength: LPDWORD,
+ lpnspBuffer: LPWSANAMESPACE_INFOA,
+ ) -> INT;
+ pub fn WSAEnumNameSpaceProvidersW(
+ lpdwBufferLength: LPDWORD,
+ lpnspBuffer: LPWSANAMESPACE_INFOW,
+ ) -> INT;
+ pub fn WSAEnumNameSpaceProvidersExA(
+ lpdwBufferLength: LPDWORD,
+ lpnspBuffer: LPWSANAMESPACE_INFOEXA,
+ ) -> INT;
+ pub fn WSAEnumNameSpaceProvidersExW(
+ lpdwBufferLength: LPDWORD,
+ lpnspBuffer: LPWSANAMESPACE_INFOEXW,
+ ) -> INT;
+ pub fn WSAGetServiceClassNameByClassIdA(
+ lpServiceClassId: LPGUID,
+ lpszServiceClassName: LPSTR,
+ lpdwBufferLength: LPDWORD,
+ ) -> INT;
+ pub fn WSAGetServiceClassNameByClassIdW(
+ lpServiceClassId: LPGUID,
+ lpszServiceClassName: LPWSTR,
+ lpdwBufferLength: LPDWORD,
+ ) -> INT;
+ pub fn WSASetServiceA(
+ lpqsRegInfo: LPWSAQUERYSETA,
+ essoperation: WSAESETSERVICEOP,
+ dwControlFlags: DWORD,
+ ) -> INT;
+ pub fn WSASetServiceW(
+ lpqsRegInfo: LPWSAQUERYSETW,
+ essoperation: WSAESETSERVICEOP,
+ dwControlFlags: DWORD,
+ ) -> INT;
+ pub fn WSAProviderConfigChange(
+ lpNotificationHandle: LPHANDLE,
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+ ) -> INT;
+ pub fn WSAPoll(
+ fdArray: LPWSAPOLLFD,
+ fds: ULONG,
+ timeout: INT,
+ ) -> c_int;
+}
+pub type LPSOCKADDR_IN = *mut SOCKADDR_IN;
+pub type LINGER = linger;
+pub type PLINGER = *mut linger;
+pub type LPLINGER = *mut linger;
+pub type FD_SET = fd_set;
+pub type PFD_SET = *mut fd_set;
+pub type LPFD_SET = *mut fd_set;
+pub type HOSTENT = hostent;
+pub type PHOSTENT = *mut hostent;
+pub type LPHOSTENT = *mut hostent;
+pub type SERVENT = servent;
+pub type PSERVENT = *mut servent;
+pub type LPSERVENT = *mut servent;
+pub type PROTOENT = protoent;
+pub type PPROTOENT = *mut protoent;
+pub type LPPROTOENT = *mut protoent;
+pub type TIMEVAL = timeval;
+pub type PTIMEVAL = *mut timeval;
+pub type LPTIMEVAL = *mut timeval;
+#[inline]
+pub fn WSAMAKEASYNCREPLY(buflen: WORD, error: WORD) -> LONG {
+ MAKELONG(buflen, error)
+}
+#[inline]
+pub fn WSAMAKESELECTREPLY(event: WORD, error: WORD) -> LONG {
+ MAKELONG(event, error)
+}
+#[inline]
+pub fn WSAGETASYNCBUFLEN(lParam: DWORD) -> WORD {
+ LOWORD(lParam)
+}
+#[inline]
+pub fn WSAGETASYNCERROR(lParam: DWORD) -> WORD {
+ HIWORD(lParam)
+}
+#[inline]
+pub fn WSAGETSELECTEVENT(lParam: DWORD) -> WORD {
+ LOWORD(lParam)
+}
+#[inline]
+pub fn WSAGETSELECTERROR(lParam: DWORD) -> WORD {
+ HIWORD(lParam)
+}
diff --git a/vendor/winapi/src/um/winspool.rs b/vendor/winapi/src/um/winspool.rs
new file mode 100644
index 000000000..c6796caf3
--- /dev/null
+++ b/vendor/winapi/src/um/winspool.rs
@@ -0,0 +1,2433 @@
+// 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.
+//! Winspool header file
+use shared::guiddef::GUID;
+use shared::minwindef::{
+ BOOL, BYTE, DWORD, FILETIME, FLOAT, LPBYTE, LPDWORD, LPHANDLE, LPVOID, MAX_PATH, PBYTE, PDWORD,
+ PULONG, PWORD, UINT, ULONG, WORD,
+};
+use shared::windef::{HWND, RECTL, SIZEL};
+use shared::winerror::ERROR_NOT_SUPPORTED;
+use um::minwinbase::SYSTEMTIME;
+use um::wingdi::{LPDEVMODEA, LPDEVMODEW, PDEVMODEA, PDEVMODEW};
+use um::winnt::{
+ ACCESS_MASK, CHAR, DWORDLONG, HANDLE, HRESULT, LANGID, LONG, LONGLONG, LPCSTR, LPCWSTR, LPSTR,
+ LPWSTR, PCWSTR, PSECURITY_DESCRIPTOR, PVOID, PWSTR, STANDARD_RIGHTS_EXECUTE,
+ STANDARD_RIGHTS_READ, STANDARD_RIGHTS_REQUIRED, STANDARD_RIGHTS_WRITE, WCHAR,
+};
+use vc::vcruntime::size_t;
+STRUCT!{struct PRINTER_INFO_1A {
+ Flags: DWORD,
+ pDescription: LPSTR,
+ pName: LPSTR,
+ pComment: LPSTR,
+}}
+pub type PPRINTER_INFO_1A = *mut PRINTER_INFO_1A;
+pub type LPPRINTER_INFO_1A = *mut PRINTER_INFO_1A;
+STRUCT!{struct PRINTER_INFO_1W {
+ Flags: DWORD,
+ pDescription: LPWSTR,
+ pName: LPWSTR,
+ pComment: LPWSTR,
+}}
+pub type PPRINTER_INFO_1W = *mut PRINTER_INFO_1W;
+pub type LPPRINTER_INFO_1W = *mut PRINTER_INFO_1W;
+STRUCT!{struct PRINTER_INFO_2A {
+ pServerName: LPSTR,
+ pPrinterName: LPSTR,
+ pShareName: LPSTR,
+ pPortName: LPSTR,
+ pDriverName: LPSTR,
+ pComment: LPSTR,
+ pLocation: LPSTR,
+ pDevMode: LPDEVMODEA,
+ pSepFile: LPSTR,
+ pPrintProcessor: LPSTR,
+ pDatatype: LPSTR,
+ pParameters: LPSTR,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ Attributes: DWORD,
+ Priority: DWORD,
+ DefaultPriority: DWORD,
+ StartTime: DWORD,
+ UntilTime: DWORD,
+ Status: DWORD,
+ cJobs: DWORD,
+ AveragePPM: DWORD,
+}}
+pub type PPRINTER_INFO_2A = *mut PRINTER_INFO_2A;
+pub type LPPRINTER_INFO_2A = *mut PRINTER_INFO_2A;
+STRUCT!{struct PRINTER_INFO_2W {
+ pServerName: LPWSTR,
+ pPrinterName: LPWSTR,
+ pShareName: LPWSTR,
+ pPortName: LPWSTR,
+ pDriverName: LPWSTR,
+ pComment: LPWSTR,
+ pLocation: LPWSTR,
+ pDevMode: LPDEVMODEW,
+ pSepFile: LPWSTR,
+ pPrintProcessor: LPWSTR,
+ pDatatype: LPWSTR,
+ pParameters: LPWSTR,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ Attributes: DWORD,
+ Priority: DWORD,
+ DefaultPriority: DWORD,
+ StartTime: DWORD,
+ UntilTime: DWORD,
+ Status: DWORD,
+ cJobs: DWORD,
+ AveragePPM: DWORD,
+}}
+pub type PPRINTER_INFO_2W = *mut PRINTER_INFO_2W;
+pub type LPPRINTER_INFO_2W = *mut PRINTER_INFO_2W;
+STRUCT!{struct PRINTER_INFO_3 {
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+}}
+pub type PPRINTER_INFO_3 = *mut PRINTER_INFO_3;
+pub type LPPRINTER_INFO_3 = *mut PRINTER_INFO_3;
+STRUCT!{struct PRINTER_INFO_4A {
+ pPrinterName: LPSTR,
+ pServerName: LPSTR,
+ Attributes: DWORD,
+}}
+pub type PPRINTER_INFO_4A = *mut PRINTER_INFO_4A;
+pub type LPPRINTER_INFO_4A = *mut PRINTER_INFO_4A;
+STRUCT!{struct PRINTER_INFO_4W {
+ pPrinterName: LPWSTR,
+ pServerName: LPWSTR,
+ Attributes: DWORD,
+}}
+pub type PPRINTER_INFO_4W = *mut PRINTER_INFO_4W;
+pub type LPPRINTER_INFO_4W = *mut PRINTER_INFO_4W;
+STRUCT!{struct PRINTER_INFO_5A {
+ pPrinterName: LPSTR,
+ pPortName: LPSTR,
+ Attributes: DWORD,
+ DeviceNotSelectedTimeout: DWORD,
+ TransmissionRetryTimeout: DWORD,
+}}
+pub type PPRINTER_INFO_5A = *mut PRINTER_INFO_5A;
+pub type LPPRINTER_INFO_5A = *mut PRINTER_INFO_5A;
+STRUCT!{struct PRINTER_INFO_5W {
+ pPrinterName: LPWSTR,
+ pPortName: LPWSTR,
+ Attributes: DWORD,
+ DeviceNotSelectedTimeout: DWORD,
+ TransmissionRetryTimeout: DWORD,
+}}
+pub type PPRINTER_INFO_5W = *mut PRINTER_INFO_5W;
+pub type LPPRINTER_INFO_5W = *mut PRINTER_INFO_5W;
+STRUCT!{struct PRINTER_INFO_6 {
+ dwStatus: DWORD,
+}}
+pub type PPRINTER_INFO_6 = *mut PRINTER_INFO_6;
+pub type LPPRINTER_INFO_6 = *mut PRINTER_INFO_6;
+STRUCT!{struct PRINTER_INFO_7A {
+ pszObjectGUID: LPSTR,
+ dwAction: DWORD,
+}}
+pub type PPRINTER_INFO_7A = *mut PRINTER_INFO_7A;
+pub type LPPRINTER_INFO_7A = *mut PRINTER_INFO_7A;
+STRUCT!{struct PRINTER_INFO_7W {
+ pszObjectGUID: LPWSTR,
+ dwAction: DWORD,
+}}
+pub type PPRINTER_INFO_7W = *mut PRINTER_INFO_7W;
+pub type LPPRINTER_INFO_7W = *mut PRINTER_INFO_7W;
+pub const DSPRINT_PUBLISH: DWORD = 0x00000001;
+pub const DSPRINT_UPDATE: DWORD = 0x00000002;
+pub const DSPRINT_UNPUBLISH: DWORD = 0x00000004;
+pub const DSPRINT_REPUBLISH: DWORD = 0x00000008;
+pub const DSPRINT_PENDING: DWORD = 0x80000000;
+STRUCT!{struct PRINTER_INFO_8A {
+ pDevMode: LPDEVMODEA,
+}}
+pub type PPRINTER_INFO_8A = *mut PRINTER_INFO_8A;
+pub type LPPRINTER_INFO_8A = *mut PRINTER_INFO_8A;
+STRUCT!{struct PRINTER_INFO_8W {
+ pDevMode: LPDEVMODEW,
+}}
+pub type PPRINTER_INFO_8W = *mut PRINTER_INFO_8W;
+pub type LPPRINTER_INFO_8W = *mut PRINTER_INFO_8W;
+STRUCT!{struct PRINTER_INFO_9A {
+ pDevMode: LPDEVMODEA,
+}}
+pub type PPRINTER_INFO_9A = *mut PRINTER_INFO_9A;
+pub type LPPRINTER_INFO_9A = *mut PRINTER_INFO_9A;
+STRUCT!{struct PRINTER_INFO_9W {
+ pDevMode: LPDEVMODEW,
+}}
+pub type PPRINTER_INFO_9W = *mut PRINTER_INFO_9W;
+pub type LPPRINTER_INFO_9W = *mut PRINTER_INFO_9W;
+pub const PRINTER_CONTROL_PAUSE: DWORD = 1;
+pub const PRINTER_CONTROL_RESUME: DWORD = 2;
+pub const PRINTER_CONTROL_PURGE: DWORD = 3;
+pub const PRINTER_CONTROL_SET_STATUS: DWORD = 4;
+pub const PRINTER_STATUS_PAUSED: DWORD = 0x00000001;
+pub const PRINTER_STATUS_ERROR: DWORD = 0x00000002;
+pub const PRINTER_STATUS_PENDING_DELETION: DWORD = 0x00000004;
+pub const PRINTER_STATUS_PAPER_JAM: DWORD = 0x00000008;
+pub const PRINTER_STATUS_PAPER_OUT: DWORD = 0x00000010;
+pub const PRINTER_STATUS_MANUAL_FEED: DWORD = 0x00000020;
+pub const PRINTER_STATUS_PAPER_PROBLEM: DWORD = 0x00000040;
+pub const PRINTER_STATUS_OFFLINE: DWORD = 0x00000080;
+pub const PRINTER_STATUS_IO_ACTIVE: DWORD = 0x00000100;
+pub const PRINTER_STATUS_BUSY: DWORD = 0x00000200;
+pub const PRINTER_STATUS_PRINTING: DWORD = 0x00000400;
+pub const PRINTER_STATUS_OUTPUT_BIN_FULL: DWORD = 0x00000800;
+pub const PRINTER_STATUS_NOT_AVAILABLE: DWORD = 0x00001000;
+pub const PRINTER_STATUS_WAITING: DWORD = 0x00002000;
+pub const PRINTER_STATUS_PROCESSING: DWORD = 0x00004000;
+pub const PRINTER_STATUS_INITIALIZING: DWORD = 0x00008000;
+pub const PRINTER_STATUS_WARMING_UP: DWORD = 0x00010000;
+pub const PRINTER_STATUS_TONER_LOW: DWORD = 0x00020000;
+pub const PRINTER_STATUS_NO_TONER: DWORD = 0x00040000;
+pub const PRINTER_STATUS_PAGE_PUNT: DWORD = 0x00080000;
+pub const PRINTER_STATUS_USER_INTERVENTION: DWORD = 0x00100000;
+pub const PRINTER_STATUS_OUT_OF_MEMORY: DWORD = 0x00200000;
+pub const PRINTER_STATUS_DOOR_OPEN: DWORD = 0x00400000;
+pub const PRINTER_STATUS_SERVER_UNKNOWN: DWORD = 0x00800000;
+pub const PRINTER_STATUS_POWER_SAVE: DWORD = 0x01000000;
+pub const PRINTER_STATUS_SERVER_OFFLINE: DWORD = 0x02000000;
+pub const PRINTER_STATUS_DRIVER_UPDATE_NEEDED: DWORD = 0x04000000;
+pub const PRINTER_ATTRIBUTE_QUEUED: DWORD = 0x00000001;
+pub const PRINTER_ATTRIBUTE_DIRECT: DWORD = 0x00000002;
+pub const PRINTER_ATTRIBUTE_DEFAULT: DWORD = 0x00000004;
+pub const PRINTER_ATTRIBUTE_SHARED: DWORD = 0x00000008;
+pub const PRINTER_ATTRIBUTE_NETWORK: DWORD = 0x00000010;
+pub const PRINTER_ATTRIBUTE_HIDDEN: DWORD = 0x00000020;
+pub const PRINTER_ATTRIBUTE_LOCAL: DWORD = 0x00000040;
+pub const PRINTER_ATTRIBUTE_ENABLE_DEVQ: DWORD = 0x00000080;
+pub const PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS: DWORD = 0x00000100;
+pub const PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST: DWORD = 0x00000200;
+pub const PRINTER_ATTRIBUTE_WORK_OFFLINE: DWORD = 0x00000400;
+pub const PRINTER_ATTRIBUTE_ENABLE_BIDI: DWORD = 0x00000800;
+pub const PRINTER_ATTRIBUTE_RAW_ONLY: DWORD = 0x00001000;
+pub const PRINTER_ATTRIBUTE_PUBLISHED: DWORD = 0x00002000;
+pub const PRINTER_ATTRIBUTE_FAX: DWORD = 0x00004000;
+pub const PRINTER_ATTRIBUTE_TS: DWORD = 0x00008000;
+pub const PRINTER_ATTRIBUTE_PUSHED_USER: DWORD = 0x00020000;
+pub const PRINTER_ATTRIBUTE_PUSHED_MACHINE: DWORD = 0x00040000;
+pub const PRINTER_ATTRIBUTE_MACHINE: DWORD = 0x00080000;
+pub const PRINTER_ATTRIBUTE_FRIENDLY_NAME: DWORD = 0x00100000;
+pub const PRINTER_ATTRIBUTE_TS_GENERIC_DRIVER: DWORD = 0x00200000;
+pub const PRINTER_ATTRIBUTE_PER_USER: DWORD = 0x00400000;
+pub const PRINTER_ATTRIBUTE_ENTERPRISE_CLOUD: DWORD = 0x00800000;
+pub const NO_PRIORITY: DWORD = 0;
+pub const MAX_PRIORITY: DWORD = 99;
+pub const MIN_PRIORITY: DWORD = 1;
+pub const DEF_PRIORITY: DWORD = 1;
+STRUCT!{struct JOB_INFO_1A {
+ JobId: DWORD,
+ pPrinterName: LPSTR,
+ pMachineName: LPSTR,
+ pUserName: LPSTR,
+ pDocument: LPSTR,
+ pDatatype: LPSTR,
+ pStatus: LPSTR,
+ Status: DWORD,
+ Priority: DWORD,
+ Position: DWORD,
+ TotalPages: DWORD,
+ PagesPrinted: DWORD,
+ Submitted: SYSTEMTIME,
+}}
+pub type PJOB_INFO_1A = *mut JOB_INFO_1A;
+pub type LPJOB_INFO_1A = *mut JOB_INFO_1A;
+STRUCT!{struct JOB_INFO_1W {
+ JobId: DWORD,
+ pPrinterName: LPWSTR,
+ pMachineName: LPWSTR,
+ pUserName: LPWSTR,
+ pDocument: LPWSTR,
+ pDatatype: LPWSTR,
+ pStatus: LPWSTR,
+ Status: DWORD,
+ Priority: DWORD,
+ Position: DWORD,
+ TotalPages: DWORD,
+ PagesPrinted: DWORD,
+ Submitted: SYSTEMTIME,
+}}
+pub type PJOB_INFO_1W = *mut JOB_INFO_1W;
+pub type LPJOB_INFO_1W = *mut JOB_INFO_1W;
+STRUCT!{struct JOB_INFO_2A {
+ JobId: DWORD,
+ pPrinterName: LPSTR,
+ pMachineName: LPSTR,
+ pUserName: LPSTR,
+ pDocument: LPSTR,
+ pNotifyName: LPSTR,
+ pDatatype: LPSTR,
+ pPrintProcessor: LPSTR,
+ pParameters: LPSTR,
+ pDriverName: LPSTR,
+ pDevMode: LPDEVMODEA,
+ pStatus: LPSTR,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ Status: DWORD,
+ Priority: DWORD,
+ Position: DWORD,
+ StartTime: DWORD,
+ UntilTime: DWORD,
+ TotalPages: DWORD,
+ Size: DWORD,
+ Submitted: SYSTEMTIME,
+ Time: DWORD,
+ PagesPrinted: DWORD,
+}}
+pub type PJOB_INFO_2A = *mut JOB_INFO_2A;
+pub type LPJOB_INFO_2A = *mut JOB_INFO_2A;
+STRUCT!{struct JOB_INFO_2W {
+ JobId: DWORD,
+ pPrinterName: LPWSTR,
+ pMachineName: LPWSTR,
+ pUserName: LPWSTR,
+ pDocument: LPWSTR,
+ pNotifyName: LPWSTR,
+ pDatatype: LPWSTR,
+ pPrintProcessor: LPWSTR,
+ pParameters: LPWSTR,
+ pDriverName: LPWSTR,
+ pDevMode: LPDEVMODEW,
+ pStatus: LPWSTR,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ Status: DWORD,
+ Priority: DWORD,
+ Position: DWORD,
+ StartTime: DWORD,
+ UntilTime: DWORD,
+ TotalPages: DWORD,
+ Size: DWORD,
+ Submitted: SYSTEMTIME,
+ Time: DWORD,
+ PagesPrinted: DWORD,
+}}
+pub type PJOB_INFO_2W = *mut JOB_INFO_2W;
+pub type LPJOB_INFO_2W = *mut JOB_INFO_2W;
+STRUCT!{struct JOB_INFO_3 {
+ JobId: DWORD,
+ NextJobId: DWORD,
+ Reserved: DWORD,
+}}
+pub type PJOB_INFO_3 = *mut JOB_INFO_3;
+pub type LPJOB_INFO_3 = *mut JOB_INFO_3;
+STRUCT!{struct JOB_INFO_4A {
+ JobId: DWORD,
+ pPrinterName: LPSTR,
+ pMachineName: LPSTR,
+ pUserName: LPSTR,
+ pDocument: LPSTR,
+ pNotifyName: LPSTR,
+ pDatatype: LPSTR,
+ pPrintProcessor: LPSTR,
+ pParameters: LPSTR,
+ pDriverName: LPSTR,
+ pDevMode: LPDEVMODEA,
+ pStatus: LPSTR,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ Status: DWORD,
+ Priority: DWORD,
+ Position: DWORD,
+ StartTime: DWORD,
+ UntilTime: DWORD,
+ TotalPages: DWORD,
+ Size: DWORD,
+ Submitted: SYSTEMTIME,
+ Time: DWORD,
+ PagesPrinted: DWORD,
+ SizeHigh: LONG,
+}}
+pub type PJOB_INFO_4A = *mut JOB_INFO_4A;
+pub type LPJOB_INFO_4A = *mut JOB_INFO_4A;
+STRUCT!{struct JOB_INFO_4W {
+ JobId: DWORD,
+ pPrinterName: LPWSTR,
+ pMachineName: LPWSTR,
+ pUserName: LPWSTR,
+ pDocument: LPWSTR,
+ pNotifyName: LPWSTR,
+ pDatatype: LPWSTR,
+ pPrintProcessor: LPWSTR,
+ pParameters: LPWSTR,
+ pDriverName: LPWSTR,
+ pDevMode: LPDEVMODEW,
+ pStatus: LPWSTR,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ Status: DWORD,
+ Priority: DWORD,
+ Position: DWORD,
+ StartTime: DWORD,
+ UntilTime: DWORD,
+ TotalPages: DWORD,
+ Size: DWORD,
+ Submitted: SYSTEMTIME,
+ Time: DWORD,
+ PagesPrinted: DWORD,
+ SizeHigh: LONG,
+}}
+pub type PJOB_INFO_4W = *mut JOB_INFO_4W;
+pub type LPJOB_INFO_4W = *mut JOB_INFO_4W;
+pub const JOB_CONTROL_PAUSE: DWORD = 1;
+pub const JOB_CONTROL_RESUME: DWORD = 2;
+pub const JOB_CONTROL_CANCEL: DWORD = 3;
+pub const JOB_CONTROL_RESTART: DWORD = 4;
+pub const JOB_CONTROL_DELETE: DWORD = 5;
+pub const JOB_CONTROL_SENT_TO_PRINTER: DWORD = 6;
+pub const JOB_CONTROL_LAST_PAGE_EJECTED: DWORD = 7;
+pub const JOB_STATUS_PAUSED: DWORD = 0x00000001;
+pub const JOB_STATUS_ERROR: DWORD = 0x00000002;
+pub const JOB_STATUS_DELETING: DWORD = 0x00000004;
+pub const JOB_STATUS_SPOOLING: DWORD = 0x00000008;
+pub const JOB_STATUS_PRINTING: DWORD = 0x00000010;
+pub const JOB_STATUS_OFFLINE: DWORD = 0x00000020;
+pub const JOB_STATUS_PAPEROUT: DWORD = 0x00000040;
+pub const JOB_STATUS_PRINTED: DWORD = 0x00000080;
+pub const JOB_STATUS_DELETED: DWORD = 0x00000100;
+pub const JOB_STATUS_BLOCKED_DEVQ: DWORD = 0x00000200;
+pub const JOB_STATUS_USER_INTERVENTION: DWORD = 0x00000400;
+pub const JOB_STATUS_RESTART: DWORD = 0x00000800;
+pub const JOB_POSITION_UNSPECIFIED: DWORD = 0;
+STRUCT!{struct ADDJOB_INFO_1A {
+ Path: LPSTR,
+ JobId: DWORD,
+}}
+pub type PADDJOB_INFO_1A = *mut ADDJOB_INFO_1A;
+pub type LPADDJOB_INFO_1A = *mut ADDJOB_INFO_1A;
+STRUCT!{struct ADDJOB_INFO_1W {
+ Path: LPWSTR,
+ JobId: DWORD,
+}}
+pub type PADDJOB_INFO_1W = *mut ADDJOB_INFO_1W;
+pub type LPADDJOB_INFO_1W = *mut ADDJOB_INFO_1W;
+STRUCT!{struct DRIVER_INFO_1A {
+ pName: LPSTR,
+}}
+pub type PDRIVER_INFO_1A = *mut DRIVER_INFO_1A;
+pub type LPDRIVER_INFO_1A = *mut DRIVER_INFO_1A;
+STRUCT!{struct DRIVER_INFO_1W {
+ pName: LPWSTR,
+}}
+pub type PDRIVER_INFO_1W = *mut DRIVER_INFO_1W;
+pub type LPDRIVER_INFO_1W = *mut DRIVER_INFO_1W;
+STRUCT!{struct DRIVER_INFO_2A {
+ cVersion: DWORD,
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ pDriverPath: LPSTR,
+ pDataFile: LPSTR,
+ pConfigFile: LPSTR,
+}}
+pub type PDRIVER_INFO_2A = *mut DRIVER_INFO_2A;
+pub type LPDRIVER_INFO_2A = *mut DRIVER_INFO_2A;
+STRUCT!{struct DRIVER_INFO_2W {
+ cVersion: DWORD,
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ pDriverPath: LPWSTR,
+ pDataFile: LPWSTR,
+ pConfigFile: LPWSTR,
+}}
+pub type PDRIVER_INFO_2W = *mut DRIVER_INFO_2W;
+pub type LPDRIVER_INFO_2W = *mut DRIVER_INFO_2W;
+STRUCT!{struct DRIVER_INFO_3A {
+ cVersion: DWORD,
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ pDriverPath: LPSTR,
+ pDataFile: LPSTR,
+ pConfigFile: LPSTR,
+ pHelpFile: LPSTR,
+ pDependentFiles: LPSTR,
+ pMonitorName: LPSTR,
+ pDefaultDataType: LPSTR,
+}}
+pub type PDRIVER_INFO_3A = *mut DRIVER_INFO_3A;
+pub type LPDRIVER_INFO_3A = *mut DRIVER_INFO_3A;
+STRUCT!{struct DRIVER_INFO_3W {
+ cVersion: DWORD,
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ pDriverPath: LPWSTR,
+ pDataFile: LPWSTR,
+ pConfigFile: LPWSTR,
+ pHelpFile: LPWSTR,
+ pDependentFiles: LPWSTR,
+ pMonitorName: LPWSTR,
+ pDefaultDataType: LPWSTR,
+}}
+pub type PDRIVER_INFO_3W = *mut DRIVER_INFO_3W;
+pub type LPDRIVER_INFO_3W = *mut DRIVER_INFO_3W;
+STRUCT!{struct DRIVER_INFO_4A {
+ cVersion: DWORD,
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ pDriverPath: LPSTR,
+ pDataFile: LPSTR,
+ pConfigFile: LPSTR,
+ pHelpFile: LPSTR,
+ pDependentFiles: LPSTR,
+ pMonitorName: LPSTR,
+ pDefaultDataType: LPSTR,
+ pszzPreviousNames: LPSTR,
+}}
+pub type PDRIVER_INFO_4A = *mut DRIVER_INFO_4A;
+pub type LPDRIVER_INFO_4A = *mut DRIVER_INFO_4A;
+STRUCT!{struct DRIVER_INFO_4W {
+ cVersion: DWORD,
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ pDriverPath: LPWSTR,
+ pDataFile: LPWSTR,
+ pConfigFile: LPWSTR,
+ pHelpFile: LPWSTR,
+ pDependentFiles: LPWSTR,
+ pMonitorName: LPWSTR,
+ pDefaultDataType: LPWSTR,
+ pszzPreviousNames: LPWSTR,
+}}
+pub type PDRIVER_INFO_4W = *mut DRIVER_INFO_4W;
+pub type LPDRIVER_INFO_4W = *mut DRIVER_INFO_4W;
+STRUCT!{struct DRIVER_INFO_5A {
+ cVersion: DWORD,
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ pDriverPath: LPSTR,
+ pDataFile: LPSTR,
+ pConfigFile: LPSTR,
+ dwDriverAttributes: DWORD,
+ dwConfigVersion: DWORD,
+ dwDriverVersion: DWORD,
+}}
+pub type PDRIVER_INFO_5A = *mut DRIVER_INFO_5A;
+pub type LPDRIVER_INFO_5A = *mut DRIVER_INFO_5A;
+STRUCT!{struct DRIVER_INFO_5W {
+ cVersion: DWORD,
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ pDriverPath: LPWSTR,
+ pDataFile: LPWSTR,
+ pConfigFile: LPWSTR,
+ dwDriverAttributes: DWORD,
+ dwConfigVersion: DWORD,
+ dwDriverVersion: DWORD,
+}}
+pub type PDRIVER_INFO_5W = *mut DRIVER_INFO_5W;
+pub type LPDRIVER_INFO_5W = *mut DRIVER_INFO_5W;
+STRUCT!{struct DRIVER_INFO_6A {
+ cVersion: DWORD,
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ pDriverPath: LPSTR,
+ pDataFile: LPSTR,
+ pConfigFile: LPSTR,
+ pHelpFile: LPSTR,
+ pDependentFiles: LPSTR,
+ pMonitorName: LPSTR,
+ pDefaultDataType: LPSTR,
+ pszzPreviousNames: LPSTR,
+ ftDriverDate: FILETIME,
+ dwlDriverVersion: DWORDLONG,
+ pszMfgName: LPSTR,
+ pszOEMUrl: LPSTR,
+ pszHardwareID: LPSTR,
+ pszProvider: LPSTR,
+}}
+pub type PDRIVER_INFO_6A = *mut DRIVER_INFO_6A;
+pub type LPDRIVER_INFO_6A = *mut DRIVER_INFO_6A;
+STRUCT!{struct DRIVER_INFO_6W {
+ cVersion: DWORD,
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ pDriverPath: LPWSTR,
+ pDataFile: LPWSTR,
+ pConfigFile: LPWSTR,
+ pHelpFile: LPWSTR,
+ pDependentFiles: LPWSTR,
+ pMonitorName: LPWSTR,
+ pDefaultDataType: LPWSTR,
+ pszzPreviousNames: LPWSTR,
+ ftDriverDate: FILETIME,
+ dwlDriverVersion: DWORDLONG,
+ pszMfgName: LPWSTR,
+ pszOEMUrl: LPWSTR,
+ pszHardwareID: LPWSTR,
+ pszProvider: LPWSTR,
+}}
+pub type PDRIVER_INFO_6W = *mut DRIVER_INFO_6W;
+pub type LPDRIVER_INFO_6W = *mut DRIVER_INFO_6W;
+pub const PRINTER_DRIVER_PACKAGE_AWARE: DWORD = 0x00000001;
+pub const PRINTER_DRIVER_XPS: DWORD = 0x00000002;
+pub const PRINTER_DRIVER_SANDBOX_ENABLED: DWORD = 0x00000004;
+pub const PRINTER_DRIVER_CLASS: DWORD = 0x00000008;
+pub const PRINTER_DRIVER_DERIVED: DWORD = 0x00000010;
+pub const PRINTER_DRIVER_NOT_SHAREABLE: DWORD = 0x00000020;
+pub const PRINTER_DRIVER_CATEGORY_FAX: DWORD = 0x00000040;
+pub const PRINTER_DRIVER_CATEGORY_FILE: DWORD = 0x00000080;
+pub const PRINTER_DRIVER_CATEGORY_VIRTUAL: DWORD = 0x00000100;
+pub const PRINTER_DRIVER_CATEGORY_SERVICE: DWORD = 0x00000200;
+pub const PRINTER_DRIVER_SOFT_RESET_REQUIRED: DWORD = 0x00000400;
+pub const PRINTER_DRIVER_SANDBOX_DISABLED: DWORD = 0x00000800;
+pub const PRINTER_DRIVER_CATEGORY_3D: DWORD = 0x00001000;
+pub const PRINTER_DRIVER_CATEGORY_CLOUD: DWORD = 0x00002000;
+STRUCT!{struct DRIVER_INFO_8A {
+ cVersion: DWORD,
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ pDriverPath: LPSTR,
+ pDataFile: LPSTR,
+ pConfigFile: LPSTR,
+ pHelpFile: LPSTR,
+ pDependentFiles: LPSTR,
+ pMonitorName: LPSTR,
+ pDefaultDataType: LPSTR,
+ pszzPreviousNames: LPSTR,
+ ftDriverDate: FILETIME,
+ dwlDriverVersion: DWORDLONG,
+ pszMfgName: LPSTR,
+ pszOEMUrl: LPSTR,
+ pszHardwareID: LPSTR,
+ pszProvider: LPSTR,
+ pszPrintProcessor: LPSTR,
+ pszVendorSetup: LPSTR,
+ pszzColorProfiles: LPSTR,
+ pszInfPath: LPSTR,
+ dwPrinterDriverAttributes: DWORD,
+ pszzCoreDriverDependencies: LPSTR,
+ ftMinInboxDriverVerDate: FILETIME,
+ dwlMinInboxDriverVerVersion: DWORDLONG,
+}}
+pub type PDRIVER_INFO_8A = *mut DRIVER_INFO_8A;
+pub type LPDRIVER_INFO_8A = *mut DRIVER_INFO_8A;
+STRUCT!{struct DRIVER_INFO_8W {
+ cVersion: DWORD,
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ pDriverPath: LPWSTR,
+ pDataFile: LPWSTR,
+ pConfigFile: LPWSTR,
+ pHelpFile: LPWSTR,
+ pDependentFiles: LPWSTR,
+ pMonitorName: LPWSTR,
+ pDefaultDataType: LPWSTR,
+ pszzPreviousNames: LPWSTR,
+ ftDriverDate: FILETIME,
+ dwlDriverVersion: DWORDLONG,
+ pszMfgName: LPWSTR,
+ pszOEMUrl: LPWSTR,
+ pszHardwareID: LPWSTR,
+ pszProvider: LPWSTR,
+ pszPrintProcessor: LPWSTR,
+ pszVendorSetup: LPWSTR,
+ pszzColorProfiles: LPWSTR,
+ pszInfPath: LPWSTR,
+ dwPrinterDriverAttributes: DWORD,
+ pszzCoreDriverDependencies: LPWSTR,
+ ftMinInboxDriverVerDate: FILETIME,
+ dwlMinInboxDriverVerVersion: DWORDLONG,
+}}
+pub type PDRIVER_INFO_8W = *mut DRIVER_INFO_8W;
+pub type LPDRIVER_INFO_8W = *mut DRIVER_INFO_8W;
+pub const DRIVER_KERNELMODE: DWORD = 0x00000001;
+pub const DRIVER_USERMODE: DWORD = 0x00000002;
+pub const DPD_DELETE_UNUSED_FILES: DWORD = 0x00000001;
+pub const DPD_DELETE_SPECIFIC_VERSION: DWORD = 0x00000002;
+pub const DPD_DELETE_ALL_FILES: DWORD = 0x00000004;
+pub const APD_STRICT_UPGRADE: DWORD = 0x00000001;
+pub const APD_STRICT_DOWNGRADE: DWORD = 0x00000002;
+pub const APD_COPY_ALL_FILES: DWORD = 0x00000004;
+pub const APD_COPY_NEW_FILES: DWORD = 0x00000008;
+pub const APD_COPY_FROM_DIRECTORY: DWORD = 0x00000010;
+STRUCT!{struct DOC_INFO_1A {
+ pDocName: LPSTR,
+ pOutputFile: LPSTR,
+ pDatatype: LPSTR,
+}}
+pub type PDOC_INFO_1A = *mut DOC_INFO_1A;
+pub type LPDOC_INFO_1A = *mut DOC_INFO_1A;
+STRUCT!{struct DOC_INFO_1W {
+ pDocName: LPWSTR,
+ pOutputFile: LPWSTR,
+ pDatatype: LPWSTR,
+}}
+pub type PDOC_INFO_1W = *mut DOC_INFO_1W;
+pub type LPDOC_INFO_1W = *mut DOC_INFO_1W;
+STRUCT!{struct FORM_INFO_1A {
+ Flags: DWORD,
+ pName: LPSTR,
+ Size: SIZEL,
+ ImageableArea: RECTL,
+}}
+pub type PFORM_INFO_1A = *mut FORM_INFO_1A;
+pub type LPFORM_INFO_1A = *mut FORM_INFO_1A;
+STRUCT!{struct FORM_INFO_1W {
+ Flags: DWORD,
+ pName: LPWSTR,
+ Size: SIZEL,
+ ImageableArea: RECTL,
+}}
+pub type PFORM_INFO_1W = *mut FORM_INFO_1W;
+pub type LPFORM_INFO_1W = *mut FORM_INFO_1W;
+pub const STRING_NONE: DWORD = 0x00000001;
+pub const STRING_MUIDLL: DWORD = 0x00000002;
+pub const STRING_LANGPAIR: DWORD = 0x00000004;
+pub const MAX_FORM_KEYWORD_LENGTH: usize = 63 + 1;
+STRUCT!{struct FORM_INFO_2A {
+ Flags: DWORD,
+ pName: LPCSTR,
+ Size: SIZEL,
+ ImageableArea: RECTL,
+ pKeyword: LPCSTR,
+ StringType: DWORD,
+ pMuiDll: LPCSTR,
+ dwResourceId: DWORD,
+ pDisplayName: LPCSTR,
+ wLangId: LANGID,
+}}
+pub type PFORM_INFO_2A = *mut FORM_INFO_2A;
+pub type LPFORM_INFO_2A = *mut FORM_INFO_2A;
+STRUCT!{struct FORM_INFO_2W {
+ Flags: DWORD,
+ pName: LPCWSTR,
+ Size: SIZEL,
+ ImageableArea: RECTL,
+ pKeyword: LPCSTR,
+ StringType: DWORD,
+ pMuiDll: LPCWSTR,
+ dwResourceId: DWORD,
+ pDisplayName: LPCWSTR,
+ wLangId: LANGID,
+}}
+pub type PFORM_INFO_2W = *mut FORM_INFO_2W;
+pub type LPFORM_INFO_2W = *mut FORM_INFO_2W;
+STRUCT!{struct DOC_INFO_2A {
+ pDocName: LPSTR,
+ pOutputFile: LPSTR,
+ pDatatype: LPSTR,
+ dwMode: DWORD,
+ JobId: DWORD,
+}}
+pub type PDOC_INFO_2A = *mut DOC_INFO_2A;
+pub type LPDOC_INFO_2A = *mut DOC_INFO_2A;
+STRUCT!{struct DOC_INFO_2W {
+ pDocName: LPWSTR,
+ pOutputFile: LPWSTR,
+ pDatatype: LPWSTR,
+ dwMode: DWORD,
+ JobId: DWORD,
+}}
+pub type PDOC_INFO_2W = *mut DOC_INFO_2W;
+pub type LPDOC_INFO_2W = *mut DOC_INFO_2W;
+pub const DI_CHANNEL: DWORD = 1;
+pub const DI_READ_SPOOL_JOB: DWORD = 3;
+STRUCT!{struct DOC_INFO_3A {
+ pDocName: LPSTR,
+ pOutputFile: LPSTR,
+ pDatatype: LPSTR,
+ dwFlags: DWORD,
+}}
+pub type PDOC_INFO_3A = *mut DOC_INFO_3A;
+pub type LPDOC_INFO_3A = *mut DOC_INFO_3A;
+STRUCT!{struct DOC_INFO_3W {
+ pDocName: LPWSTR,
+ pOutputFile: LPWSTR,
+ pDatatype: LPWSTR,
+ dwFlags: DWORD,
+}}
+pub type PDOC_INFO_3W = *mut DOC_INFO_3W;
+pub type LPDOC_INFO_3W = *mut DOC_INFO_3W;
+pub const DI_MEMORYMAP_WRITE: DWORD = 0x00000001;
+pub const FORM_USER: DWORD = 0x00000000;
+pub const FORM_BUILTIN: DWORD = 0x00000001;
+pub const FORM_PRINTER: DWORD = 0x00000002;
+STRUCT!{struct PRINTPROCESSOR_INFO_1A {
+ pName: LPSTR,
+}}
+pub type PPRINTPROCESSOR_INFO_1A = *mut PRINTPROCESSOR_INFO_1A;
+pub type LPPRINTPROCESSOR_INFO_1A = *mut PRINTPROCESSOR_INFO_1A;
+STRUCT!{struct PRINTPROCESSOR_INFO_1W {
+ pName: LPWSTR,
+}}
+pub type PPRINTPROCESSOR_INFO_1W = *mut PRINTPROCESSOR_INFO_1W;
+pub type LPPRINTPROCESSOR_INFO_1W = *mut PRINTPROCESSOR_INFO_1W;
+STRUCT!{struct PRINTPROCESSOR_CAPS_1 {
+ dwLevel: DWORD,
+ dwNupOptions: DWORD,
+ dwPageOrderFlags: DWORD,
+ dwNumberOfCopies: DWORD,
+}}
+pub type PPRINTPROCESSOR_CAPS_1 = *mut PRINTPROCESSOR_CAPS_1;
+STRUCT!{struct PRINTPROCESSOR_CAPS_2 {
+ dwLevel: DWORD,
+ dwNupOptions: DWORD,
+ dwPageOrderFlags: DWORD,
+ dwNumberOfCopies: DWORD,
+ dwDuplexHandlingCaps: DWORD,
+ dwNupDirectionCaps: DWORD,
+ dwNupBorderCaps: DWORD,
+ dwBookletHandlingCaps: DWORD,
+ dwScalingCaps: DWORD,
+}}
+pub type PPRINTPROCESSOR_CAPS_2 = *mut PRINTPROCESSOR_CAPS_2;
+pub const PPCAPS_RIGHT_THEN_DOWN: DWORD = 0x00000001;
+pub const PPCAPS_DOWN_THEN_RIGHT: DWORD = 0x00000001 << 1;
+pub const PPCAPS_LEFT_THEN_DOWN: DWORD = 0x00000001 << 2;
+pub const PPCAPS_DOWN_THEN_LEFT: DWORD = 0x00000001 << 3;
+pub const PPCAPS_BORDER_PRINT: DWORD = 0x00000001;
+pub const PPCAPS_BOOKLET_EDGE: DWORD = 0x00000001;
+pub const PPCAPS_REVERSE_PAGES_FOR_REVERSE_DUPLEX: DWORD = 0x00000001;
+pub const PPCAPS_DONT_SEND_EXTRA_PAGES_FOR_DUPLEX: DWORD = 0x00000001 << 1;
+pub const PPCAPS_SQUARE_SCALING: DWORD = 0x00000001;
+STRUCT!{struct PORT_INFO_1A {
+ pName: LPSTR,
+}}
+pub type PPORT_INFO_1A = *mut PORT_INFO_1A;
+pub type LPPORT_INFO_1A = *mut PORT_INFO_1A;
+STRUCT!{struct PORT_INFO_1W {
+ pName: LPWSTR,
+}}
+pub type PPORT_INFO_1W = *mut PORT_INFO_1W;
+pub type LPPORT_INFO_1W = *mut PORT_INFO_1W;
+STRUCT!{struct PORT_INFO_2A {
+ pPortName: LPSTR,
+ pMonitorName: LPSTR,
+ pDescription: LPSTR,
+ fPortType: DWORD,
+ Reserved: DWORD,
+}}
+pub type PPORT_INFO_2A = *mut PORT_INFO_2A;
+pub type LPPORT_INFO_2A = *mut PORT_INFO_2A;
+STRUCT!{struct PORT_INFO_2W {
+ pPortName: LPWSTR,
+ pMonitorName: LPWSTR,
+ pDescription: LPWSTR,
+ fPortType: DWORD,
+ Reserved: DWORD,
+}}
+pub type PPORT_INFO_2W = *mut PORT_INFO_2W;
+pub type LPPORT_INFO_2W = *mut PORT_INFO_2W;
+pub const PORT_TYPE_WRITE: DWORD = 0x0001;
+pub const PORT_TYPE_READ: DWORD = 0x0002;
+pub const PORT_TYPE_REDIRECTED: DWORD = 0x0004;
+pub const PORT_TYPE_NET_ATTACHED: DWORD = 0x0008;
+STRUCT!{struct PORT_INFO_3A {
+ dwStatus: DWORD,
+ pszStatus: LPSTR,
+ dwSeverity: DWORD,
+}}
+pub type PPORT_INFO_3A = *mut PORT_INFO_3A;
+pub type LPPORT_INFO_3A = *mut PORT_INFO_3A;
+STRUCT!{struct PORT_INFO_3W {
+ dwStatus: DWORD,
+ pszStatus: LPWSTR,
+ dwSeverity: DWORD,
+}}
+pub type PPORT_INFO_3W = *mut PORT_INFO_3W;
+pub type LPPORT_INFO_3W = *mut PORT_INFO_3W;
+pub const PORT_STATUS_TYPE_ERROR: DWORD = 1;
+pub const PORT_STATUS_TYPE_WARNING: DWORD = 2;
+pub const PORT_STATUS_TYPE_INFO: DWORD = 3;
+pub const PORT_STATUS_OFFLINE: DWORD = 1;
+pub const PORT_STATUS_PAPER_JAM: DWORD = 2;
+pub const PORT_STATUS_PAPER_OUT: DWORD = 3;
+pub const PORT_STATUS_OUTPUT_BIN_FULL: DWORD = 4;
+pub const PORT_STATUS_PAPER_PROBLEM: DWORD = 5;
+pub const PORT_STATUS_NO_TONER: DWORD = 6;
+pub const PORT_STATUS_DOOR_OPEN: DWORD = 7;
+pub const PORT_STATUS_USER_INTERVENTION: DWORD = 8;
+pub const PORT_STATUS_OUT_OF_MEMORY: DWORD = 9;
+pub const PORT_STATUS_TONER_LOW: DWORD = 10;
+pub const PORT_STATUS_WARMING_UP: DWORD = 11;
+pub const PORT_STATUS_POWER_SAVE: DWORD = 12;
+STRUCT!{struct MONITOR_INFO_1A {
+ pName: LPSTR,
+}}
+pub type PMONITOR_INFO_1A = *mut MONITOR_INFO_1A;
+pub type LPMONITOR_INFO_1A = *mut MONITOR_INFO_1A;
+STRUCT!{struct MONITOR_INFO_1W {
+ pName: LPWSTR,
+}}
+pub type PMONITOR_INFO_1W = *mut MONITOR_INFO_1W;
+pub type LPMONITOR_INFO_1W = *mut MONITOR_INFO_1W;
+STRUCT!{struct MONITOR_INFO_2A {
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ pDLLName: LPSTR,
+}}
+pub type PMONITOR_INFO_2A = *mut MONITOR_INFO_2A;
+pub type LPMONITOR_INFO_2A = *mut MONITOR_INFO_2A;
+STRUCT!{struct MONITOR_INFO_2W {
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ pDLLName: LPWSTR,
+}}
+pub type PMONITOR_INFO_2W = *mut MONITOR_INFO_2W;
+pub type LPMONITOR_INFO_2W = *mut MONITOR_INFO_2W;
+STRUCT!{struct DATATYPES_INFO_1A {
+ pName: LPSTR,
+}}
+pub type PDATATYPES_INFO_1A = *mut DATATYPES_INFO_1A;
+pub type LPDATATYPES_INFO_1A = *mut DATATYPES_INFO_1A;
+STRUCT!{struct DATATYPES_INFO_1W {
+ pName: LPWSTR,
+}}
+pub type PDATATYPES_INFO_1W = *mut DATATYPES_INFO_1W;
+pub type LPDATATYPES_INFO_1W = *mut DATATYPES_INFO_1W;
+STRUCT!{struct PRINTER_DEFAULTSA {
+ pDataType: LPSTR,
+ pDevMode: LPDEVMODEA,
+ DesiredAccess: ACCESS_MASK,
+}}
+pub type PPRINTER_DEFAULTSA = *mut PRINTER_DEFAULTSA;
+pub type LPPRINTER_DEFAULTSA = *mut PRINTER_DEFAULTSA;
+STRUCT!{struct PRINTER_DEFAULTSW {
+ pDataType: LPWSTR,
+ pDevMode: LPDEVMODEW,
+ DesiredAccess: ACCESS_MASK,
+}}
+pub type PPRINTER_DEFAULTSW = *mut PRINTER_DEFAULTSW;
+pub type LPPRINTER_DEFAULTSW = *mut PRINTER_DEFAULTSW;
+STRUCT!{struct PRINTER_ENUM_VALUESA {
+ pValueName: LPSTR,
+ cbValueName: DWORD,
+ dwType: DWORD,
+ pData: LPBYTE,
+ cbData: DWORD,
+}}
+pub type PPRINTER_ENUM_VALUESA = *mut PRINTER_ENUM_VALUESA;
+pub type LPPRINTER_ENUM_VALUESA = *mut PRINTER_ENUM_VALUESA;
+STRUCT!{struct PRINTER_ENUM_VALUESW {
+ pValueName: LPWSTR,
+ cbValueName: DWORD,
+ dwType: DWORD,
+ pData: LPBYTE,
+ cbData: DWORD,
+}}
+pub type PPRINTER_ENUM_VALUESW = *mut PRINTER_ENUM_VALUESW;
+pub type LPPRINTER_ENUM_VALUESW = *mut PRINTER_ENUM_VALUESW;
+extern "system" {
+ pub fn EnumPrintersA(
+ Flags: DWORD,
+ Name: LPSTR,
+ Level: DWORD,
+ pPrinterEnum: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ pcReturned: LPDWORD,
+ ) -> BOOL;
+ pub fn EnumPrintersW(
+ Flags: DWORD,
+ Name: LPWSTR,
+ Level: DWORD,
+ pPrinterEnum: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ pcReturned: LPDWORD,
+ ) -> BOOL;
+}
+pub const PRINTER_ENUM_DEFAULT: DWORD = 0x00000001;
+pub const PRINTER_ENUM_LOCAL: DWORD = 0x00000002;
+pub const PRINTER_ENUM_CONNECTIONS: DWORD = 0x00000004;
+pub const PRINTER_ENUM_FAVORITE: DWORD = 0x00000004;
+pub const PRINTER_ENUM_NAME: DWORD = 0x00000008;
+pub const PRINTER_ENUM_REMOTE: DWORD = 0x00000010;
+pub const PRINTER_ENUM_SHARED: DWORD = 0x00000020;
+pub const PRINTER_ENUM_NETWORK: DWORD = 0x00000040;
+pub const PRINTER_ENUM_EXPAND: DWORD = 0x00004000;
+pub const PRINTER_ENUM_CONTAINER: DWORD = 0x00008000;
+pub const PRINTER_ENUM_ICONMASK: DWORD = 0x00ff0000;
+pub const PRINTER_ENUM_ICON1: DWORD = 0x00010000;
+pub const PRINTER_ENUM_ICON2: DWORD = 0x00020000;
+pub const PRINTER_ENUM_ICON3: DWORD = 0x00040000;
+pub const PRINTER_ENUM_ICON4: DWORD = 0x00080000;
+pub const PRINTER_ENUM_ICON5: DWORD = 0x00100000;
+pub const PRINTER_ENUM_ICON6: DWORD = 0x00200000;
+pub const PRINTER_ENUM_ICON7: DWORD = 0x00400000;
+pub const PRINTER_ENUM_ICON8: DWORD = 0x00800000;
+pub const PRINTER_ENUM_HIDE: DWORD = 0x01000000;
+pub const PRINTER_ENUM_CATEGORY_ALL: DWORD = 0x02000000;
+pub const PRINTER_ENUM_CATEGORY_3D: DWORD = 0x04000000;
+pub const SPOOL_FILE_PERSISTENT: DWORD = 0x00000001;
+pub const SPOOL_FILE_TEMPORARY: DWORD = 0x00000002;
+extern "system" {
+ pub fn GetSpoolFileHandle(
+ hPrinter: HANDLE,
+ ) -> HANDLE;
+ pub fn CommitSpoolData(
+ hPrinter: HANDLE,
+ hSpoolFile: HANDLE,
+ cbCommit: DWORD,
+ ) -> HANDLE;
+ pub fn CloseSpoolFileHandle(
+ hPrinter: HANDLE,
+ hSpoolFile: HANDLE,
+ ) -> BOOL;
+ pub fn OpenPrinterA(
+ pPrinterName: LPSTR,
+ phPrinter: LPHANDLE,
+ pDefault: LPPRINTER_DEFAULTSA,
+ ) -> BOOL;
+ pub fn OpenPrinterW(
+ pPrinterName: LPWSTR,
+ phPrinter: LPHANDLE,
+ pDefault: LPPRINTER_DEFAULTSW,
+ ) -> BOOL;
+ pub fn ResetPrinterA(
+ hPrinter: HANDLE,
+ pDefault: LPPRINTER_DEFAULTSA,
+ ) -> BOOL;
+ pub fn ResetPrinterW(
+ hPrinter: HANDLE,
+ pDefault: LPPRINTER_DEFAULTSW,
+ ) -> BOOL;
+ pub fn SetJobA(
+ hPrinter: HANDLE,
+ JobId: DWORD,
+ Level: DWORD,
+ pJob: LPBYTE,
+ Command: DWORD,
+ ) -> BOOL;
+ pub fn SetJobW(
+ hPrinter: HANDLE,
+ JobId: DWORD,
+ Level: DWORD,
+ pJob: LPBYTE,
+ Command: DWORD,
+ ) -> BOOL;
+ pub fn GetJobA(
+ hPrinter: HANDLE,
+ JobId: DWORD,
+ Level: DWORD,
+ pJob: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn GetJobW(
+ hPrinter: HANDLE,
+ JobId: DWORD,
+ Level: DWORD,
+ pJob: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn EnumJobsA(
+ hPrinter: HANDLE,
+ FirstJob: DWORD,
+ NoJobs: DWORD,
+ Level: DWORD,
+ pJob: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ pcReturned: LPDWORD,
+ ) -> BOOL;
+ pub fn EnumJobsW(
+ hPrinter: HANDLE,
+ FirstJob: DWORD,
+ NoJobs: DWORD,
+ Level: DWORD,
+ pJob: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ pcReturned: LPDWORD,
+ ) -> BOOL;
+ pub fn AddPrinterA(
+ pName: LPSTR,
+ Level: DWORD,
+ pPrinter: LPBYTE,
+ ) -> HANDLE;
+ pub fn AddPrinterW(
+ pName: LPWSTR,
+ Level: DWORD,
+ pPrinter: LPBYTE,
+ ) -> HANDLE;
+ pub fn DeletePrinter(
+ hPrinter: HANDLE,
+ ) -> BOOL;
+ pub fn SetPrinterA(
+ hPrinter: HANDLE,
+ Level: DWORD,
+ pPrinter: LPBYTE,
+ Command: DWORD,
+ ) -> BOOL;
+ pub fn SetPrinterW(
+ hPrinter: HANDLE,
+ Level: DWORD,
+ pPrinter: LPBYTE,
+ Command: DWORD,
+ ) -> BOOL;
+ pub fn GetPrinterA(
+ hPrinter: HANDLE,
+ Level: DWORD,
+ pPrinter: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn GetPrinterW(
+ hPrinter: HANDLE,
+ Level: DWORD,
+ pPrinter: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn AddPrinterDriverA(
+ pName: LPSTR,
+ Level: DWORD,
+ pDriverInfo: LPBYTE,
+ ) -> BOOL;
+ pub fn AddPrinterDriverW(
+ pName: LPWSTR,
+ Level: DWORD,
+ pDriverInfo: LPBYTE,
+ ) -> BOOL;
+ pub fn AddPrinterDriverExA(
+ pName: LPSTR,
+ Level: DWORD,
+ pDriverInfo: PBYTE,
+ dwFileCopyFlags: DWORD,
+ ) -> BOOL;
+ pub fn AddPrinterDriverExW(
+ pName: LPWSTR,
+ Level: DWORD,
+ pDriverInfo: PBYTE,
+ dwFileCopyFlags: DWORD,
+ ) -> BOOL;
+ pub fn EnumPrinterDriversA(
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ Level: DWORD,
+ pDriverInfo: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ pcReturned: LPDWORD,
+ ) -> BOOL;
+ pub fn EnumPrinterDriversW(
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ Level: DWORD,
+ pDriverInfo: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ pcReturned: LPDWORD,
+ ) -> BOOL;
+ pub fn GetPrinterDriverA(
+ hPrinter: HANDLE,
+ pEnvironment: LPSTR,
+ Level: DWORD,
+ pDriverInfo: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn GetPrinterDriverW(
+ hPrinter: HANDLE,
+ pEnvironment: LPWSTR,
+ Level: DWORD,
+ pDriverInfo: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn GetPrinterDriverDirectoryA(
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ Level: DWORD,
+ pDriverDirectory: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn GetPrinterDriverDirectoryW(
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ Level: DWORD,
+ pDriverDirectory: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn DeletePrinterDriverA(
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ pDriverName: LPSTR,
+ ) -> BOOL;
+ pub fn DeletePrinterDriverW(
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ pDriverName: LPWSTR,
+ ) -> BOOL;
+ pub fn DeletePrinterDriverExA(
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ pDriverName: LPSTR,
+ dwDeleteFlag: DWORD,
+ dwVersionFlag: DWORD,
+ ) -> BOOL;
+ pub fn DeletePrinterDriverExW(
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ pDriverName: LPWSTR,
+ dwDeleteFlag: DWORD,
+ dwVersionFlag: DWORD,
+ ) -> BOOL;
+ pub fn AddPrintProcessorA(
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ pPathName: LPSTR,
+ pPrintProcessorName: LPSTR,
+ ) -> BOOL;
+ pub fn AddPrintProcessorW(
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ pPathName: LPWSTR,
+ pPrintProcessorName: LPWSTR,
+ ) -> BOOL;
+ pub fn EnumPrintProcessorsA(
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ Level: DWORD,
+ pPrintProcessorInfo: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ pcReturned: LPDWORD,
+ ) -> BOOL;
+ pub fn EnumPrintProcessorsW(
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ Level: DWORD,
+ pPrintProcessorInfo: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ pcReturned: LPDWORD,
+ ) -> BOOL;
+ pub fn GetPrintProcessorDirectoryA(
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ Level: DWORD,
+ pPrintProcessorInfo: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn GetPrintProcessorDirectoryW(
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ Level: DWORD,
+ pPrintProcessorInfo: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn EnumPrintProcessorDatatypesA(
+ pName: LPSTR,
+ pPrintProcessorName: LPSTR,
+ Level: DWORD,
+ pDatatypes: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ pcReturned: LPDWORD,
+ ) -> BOOL;
+ pub fn EnumPrintProcessorDatatypesW(
+ pName: LPWSTR,
+ pPrintProcessorName: LPWSTR,
+ Level: DWORD,
+ pDatatypes: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ pcReturned: LPDWORD,
+ ) -> BOOL;
+ pub fn DeletePrintProcessorA(
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ pPrintProcessorName: LPSTR,
+ ) -> BOOL;
+ pub fn DeletePrintProcessorW(
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ pPrintProcessorName: LPWSTR,
+ ) -> BOOL;
+ pub fn StartDocPrinterA(
+ hPrinter: HANDLE,
+ Level: DWORD,
+ pDocInfo: LPBYTE,
+ ) -> DWORD;
+ pub fn StartDocPrinterW(
+ hPrinter: HANDLE,
+ Level: DWORD,
+ pDocInfo: LPBYTE,
+ ) -> DWORD;
+ pub fn StartPagePrinter(
+ hPrinter: HANDLE,
+ ) -> BOOL;
+ pub fn WritePrinter(
+ hPrinter: HANDLE,
+ pBuf: LPVOID,
+ cbBuf: DWORD,
+ pcWritten: LPDWORD,
+ ) -> BOOL;
+ pub fn FlushPrinter(
+ hPrinter: HANDLE,
+ pBuf: LPVOID,
+ cbBuf: DWORD,
+ pcWritten: LPDWORD,
+ cSleep: DWORD,
+ ) -> BOOL;
+ pub fn EndPagePrinter(
+ hPrinter: HANDLE,
+ ) -> BOOL;
+ pub fn AbortPrinter(
+ hPrinter: HANDLE,
+ ) -> BOOL;
+ pub fn ReadPrinter(
+ hPrinter: HANDLE,
+ pBuf: LPVOID,
+ cbBuf: DWORD,
+ pNoBytesRead: LPDWORD,
+ ) -> BOOL;
+ pub fn EndDocPrinter(
+ hPrinter: HANDLE,
+ ) -> BOOL;
+ pub fn AddJobA(
+ hPrinter: HANDLE,
+ Level: DWORD,
+ pData: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn AddJobW(
+ hPrinter: HANDLE,
+ Level: DWORD,
+ pData: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn ScheduleJob(
+ hPrinter: HANDLE,
+ JobId: DWORD,
+ ) -> BOOL;
+ pub fn PrinterProperties(
+ hWnd: HWND,
+ hPrinter: HANDLE,
+ ) -> BOOL;
+ pub fn DocumentPropertiesA(
+ hWnd: HWND,
+ hPrinter: HANDLE,
+ pDeviceName: LPSTR,
+ pDevModeOutput: PDEVMODEA,
+ pDevModeInput: PDEVMODEA,
+ fMode: DWORD,
+ ) -> LONG;
+ pub fn DocumentPropertiesW(
+ hWnd: HWND,
+ hPrinter: HANDLE,
+ pDeviceName: LPWSTR,
+ pDevModeOutput: PDEVMODEW,
+ pDevModeInput: PDEVMODEW,
+ fMode: DWORD,
+ ) -> LONG;
+ pub fn AdvancedDocumentPropertiesA(
+ hWnd: HWND,
+ hPrinter: HANDLE,
+ pDeviceName: LPSTR,
+ pDevModeOutput: PDEVMODEA,
+ pDevModeInput: PDEVMODEA,
+ ) -> LONG;
+ pub fn AdvancedDocumentPropertiesW(
+ hWnd: HWND,
+ hPrinter: HANDLE,
+ pDeviceName: LPWSTR,
+ pDevModeOutput: PDEVMODEW,
+ pDevModeInput: PDEVMODEW,
+ ) -> LONG;
+ pub fn ExtDeviceMode(
+ hWnd: HWND,
+ hInst: HANDLE,
+ pDevModeOutput: LPDEVMODEA,
+ pDeviceName: LPSTR,
+ pPort: LPSTR,
+ pDevModeInput: LPDEVMODEA,
+ pProfile: LPSTR,
+ fMode: DWORD,
+ ) -> LONG;
+ pub fn GetPrinterDataA(
+ hPrinter: HANDLE,
+ pValueName: LPSTR,
+ pType: LPDWORD,
+ pData: LPBYTE,
+ nSize: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> DWORD;
+ pub fn GetPrinterDataW(
+ hPrinter: HANDLE,
+ pValueName: LPWSTR,
+ pType: LPDWORD,
+ pData: LPBYTE,
+ nSize: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> DWORD;
+ pub fn GetPrinterDataExA(
+ hPrinter: HANDLE,
+ pKeyName: LPCSTR,
+ pValueName: LPCSTR,
+ pType: LPDWORD,
+ pData: LPBYTE,
+ nSize: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> DWORD;
+ pub fn GetPrinterDataExW(
+ hPrinter: HANDLE,
+ pKeyName: LPCWSTR,
+ pValueName: LPCWSTR,
+ pType: LPDWORD,
+ pData: LPBYTE,
+ nSize: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> DWORD;
+ pub fn EnumPrinterDataA(
+ hPrinter: HANDLE,
+ dwIndex: DWORD,
+ pValueName: LPSTR,
+ cbValueName: DWORD,
+ pcbValueName: LPDWORD,
+ pType: LPDWORD,
+ pData: LPBYTE,
+ cbData: DWORD,
+ pcbData: LPDWORD,
+ ) -> DWORD;
+ pub fn EnumPrinterDataW(
+ hPrinter: HANDLE,
+ dwIndex: DWORD,
+ pValueName: LPWSTR,
+ cbValueName: DWORD,
+ pcbValueName: LPDWORD,
+ pType: LPDWORD,
+ pData: LPBYTE,
+ cbData: DWORD,
+ pcbData: LPDWORD,
+ ) -> DWORD;
+ pub fn EnumPrinterDataExA(
+ hPrinter: HANDLE,
+ pKeyName: LPCSTR,
+ pEnumValues: LPBYTE,
+ cbEnumValues: DWORD,
+ pcbEnumValues: LPDWORD,
+ pnEnumValues: LPDWORD,
+ ) -> DWORD;
+ pub fn EnumPrinterDataExW(
+ hPrinter: HANDLE,
+ pKeyName: LPCWSTR,
+ pEnumValues: LPBYTE,
+ cbEnumValues: DWORD,
+ pcbEnumValues: LPDWORD,
+ pnEnumValues: LPDWORD,
+ ) -> DWORD;
+ pub fn EnumPrinterKeyA(
+ hPrinter: HANDLE,
+ pKeyName: LPCSTR,
+ pSubKey: LPSTR,
+ cbSubkey: DWORD,
+ pcbSubkey: LPDWORD,
+ ) -> DWORD;
+ pub fn EnumPrinterKeyW(
+ hPrinter: HANDLE,
+ pKeyName: LPCWSTR,
+ pSubKey: LPWSTR,
+ cbSubkey: DWORD,
+ pcbSubkey: LPDWORD,
+ ) -> DWORD;
+ pub fn SetPrinterDataA(
+ hPrinter: HANDLE,
+ pValueName: LPSTR,
+ Type: DWORD,
+ pData: LPBYTE,
+ cbData: DWORD,
+ ) -> DWORD;
+ pub fn SetPrinterDataW(
+ hPrinter: HANDLE,
+ pValueName: LPWSTR,
+ Type: DWORD,
+ pData: LPBYTE,
+ cbData: DWORD,
+ ) -> DWORD;
+ pub fn SetPrinterDataExA(
+ hPrinter: HANDLE,
+ pKeyName: LPCSTR,
+ pValueName: LPCSTR,
+ Type: DWORD,
+ pData: LPBYTE,
+ cbData: DWORD,
+ ) -> DWORD;
+ pub fn SetPrinterDataExW(
+ hPrinter: HANDLE,
+ pKeyName: LPCWSTR,
+ pValueName: LPCWSTR,
+ Type: DWORD,
+ pData: LPBYTE,
+ cbData: DWORD,
+ ) -> DWORD;
+ pub fn DeletePrinterDataA(
+ hPrinter: HANDLE,
+ pValueName: LPSTR,
+ ) -> DWORD;
+ pub fn DeletePrinterDataW(
+ hPrinter: HANDLE,
+ pValueName: LPWSTR,
+ ) -> DWORD;
+ pub fn DeletePrinterDataExA(
+ hPrinter: HANDLE,
+ pKeyName: LPCSTR,
+ pValueName: LPCSTR,
+ ) -> DWORD;
+ pub fn DeletePrinterDataExW(
+ hPrinter: HANDLE,
+ pKeyName: LPCWSTR,
+ pValueName: LPCWSTR,
+ ) -> DWORD;
+ pub fn DeletePrinterKeyA(
+ hPrinter: HANDLE,
+ pKeyName: LPCSTR,
+ ) -> DWORD;
+ pub fn DeletePrinterKeyW(
+ hPrinter: HANDLE,
+ pKeyName: LPCWSTR,
+ ) -> DWORD;
+}
+pub const PRINTER_NOTIFY_TYPE: DWORD = 0x00;
+pub const JOB_NOTIFY_TYPE: DWORD = 0x01;
+pub const SERVER_NOTIFY_TYPE: DWORD = 0x02;
+pub const PRINTER_NOTIFY_FIELD_SERVER_NAME: DWORD = 0x00;
+pub const PRINTER_NOTIFY_FIELD_PRINTER_NAME: DWORD = 0x01;
+pub const PRINTER_NOTIFY_FIELD_SHARE_NAME: DWORD = 0x02;
+pub const PRINTER_NOTIFY_FIELD_PORT_NAME: DWORD = 0x03;
+pub const PRINTER_NOTIFY_FIELD_DRIVER_NAME: DWORD = 0x04;
+pub const PRINTER_NOTIFY_FIELD_COMMENT: DWORD = 0x05;
+pub const PRINTER_NOTIFY_FIELD_LOCATION: DWORD = 0x06;
+pub const PRINTER_NOTIFY_FIELD_DEVMODE: DWORD = 0x07;
+pub const PRINTER_NOTIFY_FIELD_SEPFILE: DWORD = 0x08;
+pub const PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR: DWORD = 0x09;
+pub const PRINTER_NOTIFY_FIELD_PARAMETERS: DWORD = 0x0A;
+pub const PRINTER_NOTIFY_FIELD_DATATYPE: DWORD = 0x0B;
+pub const PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR: DWORD = 0x0C;
+pub const PRINTER_NOTIFY_FIELD_ATTRIBUTES: DWORD = 0x0D;
+pub const PRINTER_NOTIFY_FIELD_PRIORITY: DWORD = 0x0E;
+pub const PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY: DWORD = 0x0F;
+pub const PRINTER_NOTIFY_FIELD_START_TIME: DWORD = 0x10;
+pub const PRINTER_NOTIFY_FIELD_UNTIL_TIME: DWORD = 0x11;
+pub const PRINTER_NOTIFY_FIELD_STATUS: DWORD = 0x12;
+pub const PRINTER_NOTIFY_FIELD_STATUS_STRING: DWORD = 0x13;
+pub const PRINTER_NOTIFY_FIELD_CJOBS: DWORD = 0x14;
+pub const PRINTER_NOTIFY_FIELD_AVERAGE_PPM: DWORD = 0x15;
+pub const PRINTER_NOTIFY_FIELD_TOTAL_PAGES: DWORD = 0x16;
+pub const PRINTER_NOTIFY_FIELD_PAGES_PRINTED: DWORD = 0x17;
+pub const PRINTER_NOTIFY_FIELD_TOTAL_BYTES: DWORD = 0x18;
+pub const PRINTER_NOTIFY_FIELD_BYTES_PRINTED: DWORD = 0x19;
+pub const PRINTER_NOTIFY_FIELD_OBJECT_GUID: DWORD = 0x1A;
+pub const PRINTER_NOTIFY_FIELD_FRIENDLY_NAME: DWORD = 0x1B;
+pub const PRINTER_NOTIFY_FIELD_BRANCH_OFFICE_PRINTING: DWORD = 0x1C;
+pub const JOB_NOTIFY_FIELD_PRINTER_NAME: DWORD = 0x00;
+pub const JOB_NOTIFY_FIELD_MACHINE_NAME: DWORD = 0x01;
+pub const JOB_NOTIFY_FIELD_PORT_NAME: DWORD = 0x02;
+pub const JOB_NOTIFY_FIELD_USER_NAME: DWORD = 0x03;
+pub const JOB_NOTIFY_FIELD_NOTIFY_NAME: DWORD = 0x04;
+pub const JOB_NOTIFY_FIELD_DATATYPE: DWORD = 0x05;
+pub const JOB_NOTIFY_FIELD_PRINT_PROCESSOR: DWORD = 0x06;
+pub const JOB_NOTIFY_FIELD_PARAMETERS: DWORD = 0x07;
+pub const JOB_NOTIFY_FIELD_DRIVER_NAME: DWORD = 0x08;
+pub const JOB_NOTIFY_FIELD_DEVMODE: DWORD = 0x09;
+pub const JOB_NOTIFY_FIELD_STATUS: DWORD = 0x0A;
+pub const JOB_NOTIFY_FIELD_STATUS_STRING: DWORD = 0x0B;
+pub const JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR: DWORD = 0x0C;
+pub const JOB_NOTIFY_FIELD_DOCUMENT: DWORD = 0x0D;
+pub const JOB_NOTIFY_FIELD_PRIORITY: DWORD = 0x0E;
+pub const JOB_NOTIFY_FIELD_POSITION: DWORD = 0x0F;
+pub const JOB_NOTIFY_FIELD_SUBMITTED: DWORD = 0x10;
+pub const JOB_NOTIFY_FIELD_START_TIME: DWORD = 0x11;
+pub const JOB_NOTIFY_FIELD_UNTIL_TIME: DWORD = 0x12;
+pub const JOB_NOTIFY_FIELD_TIME: DWORD = 0x13;
+pub const JOB_NOTIFY_FIELD_TOTAL_PAGES: DWORD = 0x14;
+pub const JOB_NOTIFY_FIELD_PAGES_PRINTED: DWORD = 0x15;
+pub const JOB_NOTIFY_FIELD_TOTAL_BYTES: DWORD = 0x16;
+pub const JOB_NOTIFY_FIELD_BYTES_PRINTED: DWORD = 0x17;
+pub const JOB_NOTIFY_FIELD_REMOTE_JOB_ID: DWORD = 0x18;
+pub const SERVER_NOTIFY_FIELD_PRINT_DRIVER_ISOLATION_GROUP: DWORD = 0x00;
+pub const PRINTER_NOTIFY_CATEGORY_ALL: DWORD = 0x001000;
+pub const PRINTER_NOTIFY_CATEGORY_3D: DWORD = 0x002000;
+STRUCT!{struct PRINTER_NOTIFY_OPTIONS_TYPE {
+ Type: WORD,
+ Reserved0: WORD,
+ Reserved1: DWORD,
+ Reserved2: DWORD,
+ Count: DWORD,
+ pFields: PWORD,
+}}
+pub type PPRINTER_NOTIFY_OPTIONS_TYPE = *mut PRINTER_NOTIFY_OPTIONS_TYPE;
+pub type LPPRINTER_NOTIFY_OPTIONS_TYPE = *mut PRINTER_NOTIFY_OPTIONS_TYPE;
+pub const PRINTER_NOTIFY_OPTIONS_REFRESH: DWORD = 0x01;
+STRUCT!{struct PRINTER_NOTIFY_OPTIONS {
+ Version: DWORD,
+ Flags: DWORD,
+ Count: DWORD,
+ pTypes: PPRINTER_NOTIFY_OPTIONS_TYPE,
+}}
+pub type PPRINTER_NOTIFY_OPTIONS = *mut PRINTER_NOTIFY_OPTIONS;
+pub type LPPRINTER_NOTIFY_OPTIONS = *mut PRINTER_NOTIFY_OPTIONS;
+pub const PRINTER_NOTIFY_INFO_DISCARDED: DWORD = 0x01;
+STRUCT!{struct PRINTER_NOTIFY_INFO_DATA_NotifyData_Data {
+ cbBuf: DWORD,
+ pBuf: LPVOID,
+}}
+UNION!{union PRINTER_NOTIFY_INFO_DATA_NotifyData {
+ [usize; 2],
+ adwData adwData_mut: [DWORD; 2],
+ Data Data_mut: PRINTER_NOTIFY_INFO_DATA_NotifyData_Data,
+}}
+STRUCT!{struct PRINTER_NOTIFY_INFO_DATA {
+ Type: WORD,
+ Field: WORD,
+ Reserved: DWORD,
+ Id: DWORD,
+ NotifyData: PRINTER_NOTIFY_INFO_DATA_NotifyData,
+}}
+pub type PPRINTER_NOTIFY_INFO_DATA = *mut PRINTER_NOTIFY_INFO_DATA;
+pub type LPPRINTER_NOTIFY_INFO_DATA = *mut PRINTER_NOTIFY_INFO_DATA;
+STRUCT!{struct PRINTER_NOTIFY_INFO {
+ Version: DWORD,
+ Flags: DWORD,
+ Count: DWORD,
+ aData: [PRINTER_NOTIFY_INFO_DATA; 1],
+}}
+pub type PPRINTER_NOTIFY_INFO = *mut PRINTER_NOTIFY_INFO;
+pub type LPPRINTER_NOTIFY_INFO = *mut PRINTER_NOTIFY_INFO;
+STRUCT!{struct BINARY_CONTAINER {
+ cbBuf: DWORD,
+ pData: LPBYTE,
+}}
+pub type PBINARY_CONTAINER = *mut BINARY_CONTAINER;
+UNION!{union BIDI_DATA_u {
+ [usize; 2],
+ bData bData_mut: BOOL,
+ iData iData_mut: LONG,
+ sData sData_mut: LPWSTR,
+ fData fData_mut: FLOAT,
+ biData biData_mut: BINARY_CONTAINER,
+}}
+STRUCT!{struct BIDI_DATA {
+ dwBidiType: DWORD,
+ u: BIDI_DATA_u,
+}}
+pub type PBIDI_DATA = *mut BIDI_DATA;
+pub type LPBIDI_DATA = *mut BIDI_DATA;
+STRUCT!{struct BIDI_REQUEST_DATA {
+ dwReqNumber: DWORD,
+ pSchema: LPWSTR,
+ data: BIDI_DATA,
+}}
+pub type PBIDI_REQUEST_DATA = *mut BIDI_REQUEST_DATA;
+pub type LPBIDI_REQUEST_DATA = *mut BIDI_REQUEST_DATA;
+STRUCT!{struct BIDI_REQUEST_CONTAINER {
+ Version: DWORD,
+ Flags: DWORD,
+ Count: DWORD,
+ aData: [BIDI_REQUEST_DATA; 1],
+}}
+pub type PBIDI_REQUEST_CONTAINER = *mut BIDI_REQUEST_CONTAINER;
+pub type LPBIDI_REQUEST_CONTAINER = *mut BIDI_REQUEST_CONTAINER;
+STRUCT!{struct BIDI_RESPONSE_DATA {
+ dwResult: DWORD,
+ dwReqNumber: DWORD,
+ pSchema: LPWSTR,
+ data: BIDI_DATA,
+}}
+pub type PBIDI_RESPONSE_DATA = *mut BIDI_RESPONSE_DATA;
+pub type LPBIDI_RESPONSE_DATA = *mut BIDI_RESPONSE_DATA;
+STRUCT!{struct BIDI_RESPONSE_CONTAINER {
+ Version: DWORD,
+ Flags: DWORD,
+ Count: DWORD,
+ aData: [BIDI_RESPONSE_DATA; 1],
+}}
+pub type PBIDI_RESPONSE_CONTAINER = *mut BIDI_RESPONSE_CONTAINER;
+pub type LPBIDI_RESPONSE_CONTAINER = *mut BIDI_RESPONSE_CONTAINER;
+pub const BIDI_ACTION_ENUM_SCHEMA: &'static str = "EnumSchema";
+pub const BIDI_ACTION_GET: &'static str = "Get";
+pub const BIDI_ACTION_SET: &'static str = "Set";
+pub const BIDI_ACTION_GET_ALL: &'static str = "GetAll";
+pub const BIDI_ACTION_GET_WITH_ARGUMENT: &'static str = "GetWithArgument";
+ENUM!{enum BIDI_TYPE {
+ BIDI_NULL = 0,
+ BIDI_INT = 1,
+ BIDI_FLOAT = 2,
+ BIDI_BOOL = 3,
+ BIDI_STRING = 4,
+ BIDI_TEXT = 5,
+ BIDI_ENUM = 6,
+ BIDI_BLOB = 7,
+}}
+pub const BIDI_ACCESS_ADMINISTRATOR: DWORD = 0x1;
+pub const BIDI_ACCESS_USER: DWORD = 0x2;
+pub const ERROR_BIDI_STATUS_OK: DWORD = 0;
+pub const ERROR_BIDI_NOT_SUPPORTED: DWORD = ERROR_NOT_SUPPORTED;
+pub const ERROR_BIDI_ERROR_BASE: DWORD = 13000;
+pub const ERROR_BIDI_STATUS_WARNING: DWORD = ERROR_BIDI_ERROR_BASE + 1;
+pub const ERROR_BIDI_SCHEMA_READ_ONLY: DWORD = ERROR_BIDI_ERROR_BASE + 2;
+pub const ERROR_BIDI_SERVER_OFFLINE: DWORD = ERROR_BIDI_ERROR_BASE + 3;
+pub const ERROR_BIDI_DEVICE_OFFLINE: DWORD = ERROR_BIDI_ERROR_BASE + 4;
+pub const ERROR_BIDI_SCHEMA_NOT_SUPPORTED: DWORD = ERROR_BIDI_ERROR_BASE + 5;
+pub const ERROR_BIDI_SET_DIFFERENT_TYPE: DWORD = ERROR_BIDI_ERROR_BASE + 6;
+pub const ERROR_BIDI_SET_MULTIPLE_SCHEMAPATH: DWORD = ERROR_BIDI_ERROR_BASE + 7;
+pub const ERROR_BIDI_SET_INVALID_SCHEMAPATH: DWORD = ERROR_BIDI_ERROR_BASE + 8;
+pub const ERROR_BIDI_SET_UNKNOWN_FAILURE: DWORD = ERROR_BIDI_ERROR_BASE + 9;
+pub const ERROR_BIDI_SCHEMA_WRITE_ONLY: DWORD = ERROR_BIDI_ERROR_BASE + 10;
+pub const ERROR_BIDI_GET_REQUIRES_ARGUMENT: DWORD = ERROR_BIDI_ERROR_BASE + 11;
+pub const ERROR_BIDI_GET_ARGUMENT_NOT_SUPPORTED: DWORD = ERROR_BIDI_ERROR_BASE + 12;
+pub const ERROR_BIDI_GET_MISSING_ARGUMENT: DWORD = ERROR_BIDI_ERROR_BASE + 13;
+pub const ERROR_BIDI_DEVICE_CONFIG_UNCHANGED: DWORD = ERROR_BIDI_ERROR_BASE + 14;
+pub const ERROR_BIDI_NO_LOCALIZED_RESOURCES: DWORD = ERROR_BIDI_ERROR_BASE + 15;
+pub const ERROR_BIDI_NO_BIDI_SCHEMA_EXTENSIONS: DWORD = ERROR_BIDI_ERROR_BASE + 16;
+pub const ERROR_BIDI_UNSUPPORTED_CLIENT_LANGUAGE: DWORD = ERROR_BIDI_ERROR_BASE + 17;
+pub const ERROR_BIDI_UNSUPPORTED_RESOURCE_FORMAT: DWORD = ERROR_BIDI_ERROR_BASE + 18;
+extern "system" {
+ pub fn WaitForPrinterChange(
+ hPrinter: HANDLE,
+ Flags: DWORD,
+ ) -> DWORD;
+ pub fn FindFirstPrinterChangeNotification(
+ hPrinter: HANDLE,
+ fdwFilter: DWORD,
+ fdwOptions: DWORD,
+ pPrinterNotifyOptions: LPVOID,
+ ) -> HANDLE;
+ pub fn FindNextPrinterChangeNotification(
+ hChange: HANDLE,
+ pdwChange: PDWORD,
+ pPrinterNotifyOptions: LPVOID,
+ ppPrinterNotifyInfo: *mut LPVOID,
+ ) -> BOOL;
+ pub fn FreePrinterNotifyInfo(
+ pPrinterNotifyInfo: PPRINTER_NOTIFY_INFO,
+ ) -> BOOL;
+ pub fn FindClosePrinterChangeNotification(
+ hChange: HANDLE,
+ ) -> BOOL;
+}
+pub const PRINTER_CHANGE_ADD_PRINTER: DWORD = 0x00000001;
+pub const PRINTER_CHANGE_SET_PRINTER: DWORD = 0x00000002;
+pub const PRINTER_CHANGE_DELETE_PRINTER: DWORD = 0x00000004;
+pub const PRINTER_CHANGE_FAILED_CONNECTION_PRINTER: DWORD = 0x00000008;
+pub const PRINTER_CHANGE_PRINTER: DWORD = 0x000000FF;
+pub const PRINTER_CHANGE_ADD_JOB: DWORD = 0x00000100;
+pub const PRINTER_CHANGE_SET_JOB: DWORD = 0x00000200;
+pub const PRINTER_CHANGE_DELETE_JOB: DWORD = 0x00000400;
+pub const PRINTER_CHANGE_WRITE_JOB: DWORD = 0x00000800;
+pub const PRINTER_CHANGE_JOB: DWORD = 0x0000FF00;
+pub const PRINTER_CHANGE_ADD_FORM: DWORD = 0x00010000;
+pub const PRINTER_CHANGE_SET_FORM: DWORD = 0x00020000;
+pub const PRINTER_CHANGE_DELETE_FORM: DWORD = 0x00040000;
+pub const PRINTER_CHANGE_FORM: DWORD = 0x00070000;
+pub const PRINTER_CHANGE_ADD_PORT: DWORD = 0x00100000;
+pub const PRINTER_CHANGE_CONFIGURE_PORT: DWORD = 0x00200000;
+pub const PRINTER_CHANGE_DELETE_PORT: DWORD = 0x00400000;
+pub const PRINTER_CHANGE_PORT: DWORD = 0x00700000;
+pub const PRINTER_CHANGE_ADD_PRINT_PROCESSOR: DWORD = 0x01000000;
+pub const PRINTER_CHANGE_DELETE_PRINT_PROCESSOR: DWORD = 0x04000000;
+pub const PRINTER_CHANGE_PRINT_PROCESSOR: DWORD = 0x07000000;
+pub const PRINTER_CHANGE_SERVER: DWORD = 0x08000000;
+pub const PRINTER_CHANGE_ADD_PRINTER_DRIVER: DWORD = 0x10000000;
+pub const PRINTER_CHANGE_SET_PRINTER_DRIVER: DWORD = 0x20000000;
+pub const PRINTER_CHANGE_DELETE_PRINTER_DRIVER: DWORD = 0x40000000;
+pub const PRINTER_CHANGE_PRINTER_DRIVER: DWORD = 0x70000000;
+pub const PRINTER_CHANGE_TIMEOUT: DWORD = 0x80000000;
+pub const PRINTER_CHANGE_ALL: DWORD = 0x7F77FFFF;
+extern "system" {
+ pub fn PrinterMessageBoxA(
+ hPrinter: HANDLE,
+ Error: DWORD,
+ hWnd: HWND,
+ pText: LPSTR,
+ pCaption: LPSTR,
+ dwType: DWORD,
+ ) -> DWORD;
+ pub fn PrinterMessageBoxW(
+ hPrinter: HANDLE,
+ Error: DWORD,
+ hWnd: HWND,
+ pText: LPWSTR,
+ pCaption: LPWSTR,
+ dwType: DWORD,
+ ) -> DWORD;
+}
+pub const PRINTER_ERROR_INFORMATION: DWORD = 0x80000000;
+pub const PRINTER_ERROR_WARNING: DWORD = 0x40000000;
+pub const PRINTER_ERROR_SEVERE: DWORD = 0x20000000;
+pub const PRINTER_ERROR_OUTOFPAPER: DWORD = 0x00000001;
+pub const PRINTER_ERROR_JAM: DWORD = 0x00000002;
+pub const PRINTER_ERROR_OUTOFTONER: DWORD = 0x00000004;
+extern "system" {
+ pub fn ClosePrinter(
+ hPrinter: HANDLE,
+ ) -> BOOL;
+ pub fn AddFormA(
+ hPrinter: HANDLE,
+ Level: DWORD,
+ pForm: LPBYTE,
+ ) -> BOOL;
+ pub fn AddFormW(
+ hPrinter: HANDLE,
+ Level: DWORD,
+ pForm: LPBYTE,
+ ) -> BOOL;
+ pub fn DeleteFormA(
+ hPrinter: HANDLE,
+ pFormName: LPSTR,
+ ) -> BOOL;
+ pub fn DeleteFormW(
+ hPrinter: HANDLE,
+ pFormName: LPWSTR,
+ ) -> BOOL;
+ pub fn GetFormA(
+ hPrinter: HANDLE,
+ pFormName: LPSTR,
+ Level: DWORD,
+ pForm: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn GetFormW(
+ hPrinter: HANDLE,
+ pFormName: LPWSTR,
+ Level: DWORD,
+ pForm: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn SetFormA(
+ hPrinter: HANDLE,
+ pFormName: LPSTR,
+ Level: DWORD,
+ pForm: LPBYTE,
+ ) -> BOOL;
+ pub fn SetFormW(
+ hPrinter: HANDLE,
+ pFormName: LPWSTR,
+ Level: DWORD,
+ pForm: LPBYTE,
+ ) -> BOOL;
+ pub fn EnumFormsA(
+ hPrinter: HANDLE,
+ Level: DWORD,
+ pForm: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ pcReturned: LPDWORD,
+ ) -> BOOL;
+ pub fn EnumFormsW(
+ hPrinter: HANDLE,
+ Level: DWORD,
+ pForm: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ pcReturned: LPDWORD,
+ ) -> BOOL;
+ pub fn EnumMonitorsA(
+ pName: LPSTR,
+ Level: DWORD,
+ pMonitor: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ pcReturned: LPDWORD,
+ ) -> BOOL;
+ pub fn EnumMonitorsW(
+ pName: LPWSTR,
+ Level: DWORD,
+ pMonitor: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ pcReturned: LPDWORD,
+ ) -> BOOL;
+ pub fn AddMonitorA(
+ pName: LPSTR,
+ Level: DWORD,
+ pMonitors: LPBYTE,
+ ) -> BOOL;
+ pub fn AddMonitorW(
+ pName: LPWSTR,
+ Level: DWORD,
+ pMonitors: LPBYTE,
+ ) -> BOOL;
+ pub fn DeleteMonitorA(
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ pMonitorName: LPSTR,
+ ) -> BOOL;
+ pub fn DeleteMonitorW(
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ pMonitorName: LPWSTR,
+ ) -> BOOL;
+ pub fn EnumPortsA(
+ pName: LPSTR,
+ Level: DWORD,
+ pPort: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ pcReturned: LPDWORD,
+ ) -> BOOL;
+ pub fn EnumPortsW(
+ pName: LPWSTR,
+ Level: DWORD,
+ pPort: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ pcReturned: LPDWORD,
+ ) -> BOOL;
+ pub fn AddPortA(
+ pName: LPSTR,
+ hWnd: HWND,
+ pMonitorName: LPSTR,
+ ) -> BOOL;
+ pub fn AddPortW(
+ pName: LPWSTR,
+ hWnd: HWND,
+ pMonitorName: LPWSTR,
+ ) -> BOOL;
+ pub fn ConfigurePortA(
+ pName: LPSTR,
+ hWnd: HWND,
+ pPortName: LPSTR,
+ ) -> BOOL;
+ pub fn ConfigurePortW(
+ pName: LPWSTR,
+ hWnd: HWND,
+ pPortName: LPWSTR,
+ ) -> BOOL;
+ pub fn DeletePortA(
+ pName: LPSTR,
+ hWnd: HWND,
+ pPortName: LPSTR,
+ ) -> BOOL;
+ pub fn DeletePortW(
+ pName: LPWSTR,
+ hWnd: HWND,
+ pPortName: LPWSTR,
+ ) -> BOOL;
+ pub fn XcvDataW(
+ hXcv: HANDLE,
+ pszDataName: PCWSTR,
+ pInputData: PBYTE,
+ cbInputData: DWORD,
+ pOutputData: PBYTE,
+ cbOutputData: DWORD,
+ pcbOutputNeeded: PDWORD,
+ pdwStatus: PDWORD,
+ ) -> BOOL;
+ pub fn GetDefaultPrinterA(
+ pszBuffer: LPSTR,
+ pcchBuffer: LPDWORD,
+ ) -> BOOL;
+ pub fn GetDefaultPrinterW(
+ pszBuffer: LPWSTR,
+ pcchBuffer: LPDWORD,
+ ) -> BOOL;
+ pub fn SetDefaultPrinterA(
+ pszPrinter: LPCSTR,
+ ) -> BOOL;
+ pub fn SetDefaultPrinterW(
+ pszPrinter: LPCWSTR,
+ ) -> BOOL;
+ pub fn SetPortA(
+ pName: LPSTR,
+ pPortName: LPSTR,
+ dwLevel: DWORD,
+ pPortInfo: LPBYTE,
+ ) -> BOOL;
+ pub fn SetPortW(pName: LPWSTR,
+ pPortName: LPWSTR,
+ dwLevel: DWORD,
+ pPortInfo: LPBYTE,
+ ) -> BOOL;
+ pub fn AddPrinterConnectionA(
+ pName: LPSTR,
+ ) -> BOOL;
+ pub fn AddPrinterConnectionW(
+ pName: LPWSTR,
+ ) -> BOOL;
+ pub fn DeletePrinterConnectionA(
+ pName: LPSTR,
+ ) -> BOOL;
+ pub fn DeletePrinterConnectionW(
+ pName: LPWSTR,
+ ) -> BOOL;
+ pub fn ConnectToPrinterDlg(
+ hwnd: HWND,
+ Flags: DWORD,
+ ) -> HANDLE;
+}
+STRUCT!{struct PROVIDOR_INFO_1A {
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ pDLLName: LPSTR,
+}}
+pub type PPROVIDOR_INFO_1A = *mut PROVIDOR_INFO_1A;
+pub type LPPROVIDOR_INFO_1A = *mut PROVIDOR_INFO_1A;
+STRUCT!{struct PROVIDOR_INFO_1W {
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ pDLLName: LPWSTR,
+}}
+pub type PPROVIDOR_INFO_1W = *mut PROVIDOR_INFO_1W;
+pub type LPPROVIDOR_INFO_1W = *mut PROVIDOR_INFO_1W;
+STRUCT!{struct PROVIDOR_INFO_2A {
+ pOrder: LPSTR,
+}}
+pub type PPROVIDOR_INFO_2A = *mut PROVIDOR_INFO_2A;
+pub type LPPROVIDOR_INFO_2A = *mut PROVIDOR_INFO_2A;
+STRUCT!{struct PROVIDOR_INFO_2W {
+ pOrder: LPWSTR,
+}}
+pub type PPROVIDOR_INFO_2W = *mut PROVIDOR_INFO_2W;
+pub type LPPROVIDOR_INFO_2W = *mut PROVIDOR_INFO_2W;
+extern "system" {
+ pub fn AddPrintProvidorA(
+ pName: LPSTR,
+ Level: DWORD,
+ pProvidorInfo: LPBYTE,
+ ) -> BOOL;
+ pub fn AddPrintProvidorW(
+ pName: LPWSTR,
+ Level: DWORD,
+ pProvidorInfo: LPBYTE,
+ ) -> BOOL;
+ pub fn DeletePrintProvidorA(
+ pName: LPSTR,
+ pEnvironment: LPSTR,
+ pPrintProvidorName: LPSTR,
+ ) -> BOOL;
+ pub fn DeletePrintProvidorW(
+ pName: LPWSTR,
+ pEnvironment: LPWSTR,
+ pPrintProvidorName: LPWSTR,
+ ) -> BOOL;
+ pub fn IsValidDevmodeA(
+ pDevmode: PDEVMODEA,
+ DevmodeSize: size_t,
+ ) -> BOOL;
+ pub fn IsValidDevmodeW(
+ pDevmode: PDEVMODEW,
+ DevmodeSize: size_t,
+ ) -> BOOL;
+}
+pub const SPLREG_DEFAULT_SPOOL_DIRECTORY: &'static str = "DefaultSpoolDirectory";
+pub const SPLREG_PORT_THREAD_PRIORITY_DEFAULT: &'static str = "PortThreadPriorityDefault";
+pub const SPLREG_PORT_THREAD_PRIORITY: &'static str = "PortThreadPriority";
+pub const SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT: &'static str
+ = "SchedulerThreadPriorityDefault";
+pub const SPLREG_SCHEDULER_THREAD_PRIORITY: &'static str = "SchedulerThreadPriority";
+pub const SPLREG_BEEP_ENABLED: &'static str = "BeepEnabled";
+pub const SPLREG_NET_POPUP: &'static str = "NetPopup";
+pub const SPLREG_RETRY_POPUP: &'static str = "RetryPopup";
+pub const SPLREG_NET_POPUP_TO_COMPUTER: &'static str = "NetPopupToComputer";
+pub const SPLREG_EVENT_LOG: &'static str = "EventLog";
+pub const SPLREG_MAJOR_VERSION: &'static str = "MajorVersion";
+pub const SPLREG_MINOR_VERSION: &'static str = "MinorVersion";
+pub const SPLREG_ARCHITECTURE: &'static str = "Architecture";
+pub const SPLREG_OS_VERSION: &'static str = "OSVersion";
+pub const SPLREG_OS_VERSIONEX: &'static str = "OSVersionEx";
+pub const SPLREG_DS_PRESENT: &'static str = "DsPresent";
+pub const SPLREG_DS_PRESENT_FOR_USER: &'static str = "DsPresentForUser";
+pub const SPLREG_REMOTE_FAX: &'static str = "RemoteFax";
+pub const SPLREG_RESTART_JOB_ON_POOL_ERROR: &'static str = "RestartJobOnPoolError";
+pub const SPLREG_RESTART_JOB_ON_POOL_ENABLED: &'static str = "RestartJobOnPoolEnabled";
+pub const SPLREG_DNS_MACHINE_NAME: &'static str = "DNSMachineName";
+pub const SPLREG_ALLOW_USER_MANAGEFORMS: &'static str = "AllowUserManageForms";
+pub const SPLREG_WEBSHAREMGMT: &'static str = "WebShareMgmt";
+pub const SPLREG_PRINT_DRIVER_ISOLATION_GROUPS_SEPARATOR: &'static str = "\\";
+pub const SPLREG_PRINT_DRIVER_ISOLATION_GROUPS: &'static str = "PrintDriverIsolationGroups";
+pub const SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLE: &'static str
+ = "PrintDriverIsolationTimeBeforeRecycle";
+pub const SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLE: &'static str
+ = "PrintDriverIsolationMaxobjsBeforeRecycle";
+pub const SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUT: &'static str
+ = "PrintDriverIsolationIdleTimeout";
+pub const SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICY: &'static str
+ = "PrintDriverIsolationExecutionPolicy";
+pub const SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICY: &'static str
+ = "PrintDriverIsolationOverrideCompat";
+pub const SPLREG_PRINT_QUEUE_V4_DRIVER_DIRECTORY: &'static str = "PrintQueueV4DriverDirectory";
+pub const SERVER_ACCESS_ADMINISTER: DWORD = 0x00000001;
+pub const SERVER_ACCESS_ENUMERATE: DWORD = 0x00000002;
+pub const PRINTER_ACCESS_ADMINISTER: DWORD = 0x00000004;
+pub const PRINTER_ACCESS_USE: DWORD = 0x00000008;
+pub const JOB_ACCESS_ADMINISTER: DWORD = 0x00000010;
+pub const JOB_ACCESS_READ: DWORD = 0x00000020;
+pub const PRINTER_ACCESS_MANAGE_LIMITED: DWORD = 0x00000040;
+pub const SERVER_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SERVER_ACCESS_ADMINISTER
+ | SERVER_ACCESS_ENUMERATE;
+pub const SERVER_READ: DWORD = STANDARD_RIGHTS_READ | SERVER_ACCESS_ENUMERATE;
+pub const SERVER_WRITE: DWORD = STANDARD_RIGHTS_WRITE | SERVER_ACCESS_ADMINISTER
+ | SERVER_ACCESS_ENUMERATE;
+pub const SERVER_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE | SERVER_ACCESS_ENUMERATE;
+pub const PRINTER_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | PRINTER_ACCESS_ADMINISTER
+ | PRINTER_ACCESS_USE;
+pub const PRINTER_READ: DWORD = STANDARD_RIGHTS_READ | PRINTER_ACCESS_USE;
+pub const PRINTER_WRITE: DWORD = STANDARD_RIGHTS_WRITE | PRINTER_ACCESS_USE;
+pub const PRINTER_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE | PRINTER_ACCESS_USE;
+pub const JOB_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | JOB_ACCESS_ADMINISTER
+ | JOB_ACCESS_READ;
+pub const JOB_READ: DWORD = STANDARD_RIGHTS_READ | JOB_ACCESS_READ;
+pub const JOB_WRITE: DWORD = STANDARD_RIGHTS_WRITE | JOB_ACCESS_ADMINISTER;
+pub const JOB_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE | JOB_ACCESS_ADMINISTER;
+pub const SPLDS_SPOOLER_KEY: &'static str = "DsSpooler";
+pub const SPLDS_DRIVER_KEY: &'static str = "DsDriver";
+pub const SPLDS_USER_KEY: &'static str = "DsUser";
+pub const SPLDS_ASSET_NUMBER: &'static str = "assetNumber";
+pub const SPLDS_BYTES_PER_MINUTE: &'static str = "bytesPerMinute";
+pub const SPLDS_DESCRIPTION: &'static str = "description";
+pub const SPLDS_DRIVER_NAME: &'static str = "driverName";
+pub const SPLDS_DRIVER_VERSION: &'static str = "driverVersion";
+pub const SPLDS_LOCATION: &'static str = "location";
+pub const SPLDS_PORT_NAME: &'static str = "portName";
+pub const SPLDS_PRINT_ATTRIBUTES: &'static str = "printAttributes";
+pub const SPLDS_PRINT_BIN_NAMES: &'static str = "printBinNames";
+pub const SPLDS_PRINT_COLLATE: &'static str = "printCollate";
+pub const SPLDS_PRINT_COLOR: &'static str = "printColor";
+pub const SPLDS_PRINT_DUPLEX_SUPPORTED: &'static str = "printDuplexSupported";
+pub const SPLDS_PRINT_END_TIME: &'static str = "printEndTime";
+pub const SPLDS_PRINTER_CLASS: &'static str = "printQueue";
+pub const SPLDS_PRINTER_NAME: &'static str = "printerName";
+pub const SPLDS_PRINT_KEEP_PRINTED_JOBS: &'static str = "printKeepPrintedJobs";
+pub const SPLDS_PRINT_LANGUAGE: &'static str = "printLanguage";
+pub const SPLDS_PRINT_MAC_ADDRESS: &'static str = "printMACAddress";
+pub const SPLDS_PRINT_MAX_X_EXTENT: &'static str = "printMaxXExtent";
+pub const SPLDS_PRINT_MAX_Y_EXTENT: &'static str = "printMaxYExtent";
+pub const SPLDS_PRINT_MAX_RESOLUTION_SUPPORTED: &'static str = "printMaxResolutionSupported";
+pub const SPLDS_PRINT_MEDIA_READY: &'static str = "printMediaReady";
+pub const SPLDS_PRINT_MEDIA_SUPPORTED: &'static str = "printMediaSupported";
+pub const SPLDS_PRINT_MEMORY: &'static str = "printMemory";
+pub const SPLDS_PRINT_MIN_X_EXTENT: &'static str = "printMinXExtent";
+pub const SPLDS_PRINT_MIN_Y_EXTENT: &'static str = "printMinYExtent";
+pub const SPLDS_PRINT_NETWORK_ADDRESS: &'static str = "printNetworkAddress";
+pub const SPLDS_PRINT_NOTIFY: &'static str = "printNotify";
+pub const SPLDS_PRINT_NUMBER_UP: &'static str = "printNumberUp";
+pub const SPLDS_PRINT_ORIENTATIONS_SUPPORTED: &'static str = "printOrientationsSupported";
+pub const SPLDS_PRINT_OWNER: &'static str = "printOwner";
+pub const SPLDS_PRINT_PAGES_PER_MINUTE: &'static str = "printPagesPerMinute";
+pub const SPLDS_PRINT_RATE: &'static str = "printRate";
+pub const SPLDS_PRINT_RATE_UNIT: &'static str = "printRateUnit";
+pub const SPLDS_PRINT_SEPARATOR_FILE: &'static str = "printSeparatorFile";
+pub const SPLDS_PRINT_SHARE_NAME: &'static str = "printShareName";
+pub const SPLDS_PRINT_SPOOLING: &'static str = "printSpooling";
+pub const SPLDS_PRINT_STAPLING_SUPPORTED: &'static str = "printStaplingSupported";
+pub const SPLDS_PRINT_START_TIME: &'static str = "printStartTime";
+pub const SPLDS_PRINT_STATUS: &'static str = "printStatus";
+pub const SPLDS_PRIORITY: &'static str = "priority";
+pub const SPLDS_SERVER_NAME: &'static str = "serverName";
+pub const SPLDS_SHORT_SERVER_NAME: &'static str = "shortServerName";
+pub const SPLDS_UNC_NAME: &'static str = "uNCName";
+pub const SPLDS_URL: &'static str = "url";
+pub const SPLDS_FLAGS: &'static str = "flags";
+pub const SPLDS_VERSION_NUMBER: &'static str = "versionNumber";
+pub const SPLDS_PRINTER_NAME_ALIASES: &'static str = "printerNameAliases";
+pub const SPLDS_PRINTER_LOCATIONS: &'static str = "printerLocations";
+pub const SPLDS_PRINTER_MODEL: &'static str = "printerModel";
+ENUM!{enum PRINTER_OPTION_FLAGS {
+ PRINTER_OPTION_NO_CACHE = 1 << 0,
+ PRINTER_OPTION_CACHE = 1 << 1,
+ PRINTER_OPTION_CLIENT_CHANGE = 1 << 2,
+ PRINTER_OPTION_NO_CLIENT_DATA = 1 << 3,
+}}
+STRUCT!{struct PRINTER_OPTIONSA {
+ cbSize: UINT,
+ dwFlags: DWORD,
+}}
+pub type PPRINTER_OPTIONSA = *mut PRINTER_OPTIONSA;
+pub type LPPRINTER_OPTIONSA = *mut PRINTER_OPTIONSA;
+STRUCT!{struct PRINTER_OPTIONSW {
+ cbSize: UINT,
+ dwFlags: DWORD,
+}}
+pub type PPRINTER_OPTIONSW = *mut PRINTER_OPTIONSW;
+pub type LPPRINTER_OPTIONSW = *mut PRINTER_OPTIONSW;
+extern "system" {
+ pub fn OpenPrinter2A(
+ pPrinterName: LPCSTR,
+ phPrinter: LPHANDLE,
+ pDefault: PPRINTER_DEFAULTSA,
+ pOptions: PPRINTER_OPTIONSA,
+ ) -> BOOL;
+ pub fn OpenPrinter2W(
+ pPrinterName: LPCWSTR,
+ phPrinter: LPHANDLE,
+ pDefault: PPRINTER_DEFAULTSW,
+ pOptions: PPRINTER_OPTIONSW,
+ ) -> BOOL;
+}
+pub const PRINTER_CONNECTION_MISMATCH: DWORD = 0x00000020;
+pub const PRINTER_CONNECTION_NO_UI: DWORD = 0x00000040;
+STRUCT!{struct PRINTER_CONNECTION_INFO_1A {
+ dwFlags: DWORD,
+ pszDriverName: LPSTR,
+}}
+pub type PPRINTER_CONNECTION_INFO_1A = *mut PRINTER_CONNECTION_INFO_1A;
+pub type LPPRINTER_CONNECTION_INFO_1A = *mut PRINTER_CONNECTION_INFO_1A;
+STRUCT!{struct PRINTER_CONNECTION_INFO_1W {
+ dwFlags: DWORD,
+ pszDriverName: LPWSTR,
+}}
+pub type PPRINTER_CONNECTION_INFO_1W = *mut PRINTER_CONNECTION_INFO_1W;
+pub type LPPRINTER_CONNECTION_INFO_1W = *mut PRINTER_CONNECTION_INFO_1W;
+extern "system" {
+ pub fn AddPrinterConnection2A(
+ hWnd: HWND,
+ pszName: LPCSTR,
+ dwLevel: DWORD,
+ pConnectionInfo: PVOID,
+ ) -> BOOL;
+ pub fn AddPrinterConnection2W(
+ hWnd: HWND,
+ pszName: LPCWSTR,
+ dwLevel: DWORD,
+ pConnectionInfo: PVOID,
+ ) -> BOOL;
+}
+pub const IPDFP_COPY_ALL_FILES: DWORD = 0x00000001;
+extern "system" {
+ pub fn InstallPrinterDriverFromPackageA(
+ pszServer: LPCSTR,
+ pszInfPath: LPCSTR,
+ pszDriverName: LPCSTR,
+ pszEnvironment: LPCSTR,
+ dwFlags: DWORD,
+ ) -> HRESULT;
+ pub fn InstallPrinterDriverFromPackageW(
+ pszServer: LPCWSTR,
+ pszInfPath: LPCWSTR,
+ pszDriverName: LPCWSTR,
+ pszEnvironment: LPCWSTR,
+ dwFlags: DWORD,
+ ) -> HRESULT;
+}
+pub const UPDP_SILENT_UPLOAD: DWORD = 0x00000001;
+pub const UPDP_UPLOAD_ALWAYS: DWORD = 0x00000002;
+pub const UPDP_CHECK_DRIVERSTORE: DWORD = 0x00000004;
+extern "system" {
+ pub fn UploadPrinterDriverPackageA(
+ pszServer: LPCSTR,
+ pszInfPath: LPCSTR,
+ pszEnvironment: LPCSTR,
+ dwFlags: DWORD,
+ hwnd: HWND,
+ pszDestInfPath: LPSTR,
+ pcchDestInfPath: PULONG,
+ ) -> HRESULT;
+ pub fn UploadPrinterDriverPackageW(
+ pszServer: LPCWSTR,
+ pszInfPath: LPCWSTR,
+ pszEnvironment: LPCWSTR,
+ dwFlags: DWORD,
+ hwnd: HWND,
+ pszDestInfPath: LPWSTR,
+ pcchDestInfPath: PULONG,
+ ) -> HRESULT;
+}
+STRUCT!{struct CORE_PRINTER_DRIVERA {
+ CoreDriverGUID: GUID,
+ ftDriverDate: FILETIME,
+ dwlDriverVersion: DWORDLONG,
+ szPackageID: [CHAR; MAX_PATH],
+}}
+pub type PCORE_PRINTER_DRIVERA = *mut CORE_PRINTER_DRIVERA;
+STRUCT!{struct CORE_PRINTER_DRIVERW {
+ CoreDriverGUID: GUID,
+ ftDriverDate: FILETIME,
+ dwlDriverVersion: DWORDLONG,
+ szPackageID: [WCHAR; MAX_PATH],
+}}
+pub type PCORE_PRINTER_DRIVERW = *mut CORE_PRINTER_DRIVERW;
+extern "system" {
+ pub fn GetCorePrinterDriversA(
+ pszServer: LPCSTR,
+ pszEnvironment: LPCSTR,
+ pszzCoreDriverDependencies: LPCSTR,
+ cCorePrinterDrivers: DWORD,
+ pCorePrinterDrivers: PCORE_PRINTER_DRIVERA,
+ ) -> HRESULT;
+ pub fn GetCorePrinterDriversW(
+ pszServer: LPCWSTR,
+ pszEnvironment: LPCWSTR,
+ pszzCoreDriverDependencies: LPCWSTR,
+ cCorePrinterDrivers: DWORD,
+ pCorePrinterDrivers: PCORE_PRINTER_DRIVERW,
+ ) -> HRESULT;
+ pub fn CorePrinterDriverInstalledA(
+ pszServer: LPCSTR,
+ pszEnvironment: LPCSTR,
+ CoreDriverGUID: GUID,
+ ftDriverDate: FILETIME,
+ dwlDriverVersion: DWORDLONG,
+ pbDriverInstalled: *mut BOOL,
+ ) -> HRESULT;
+ pub fn CorePrinterDriverInstalledW(
+ pszServer: LPCWSTR,
+ pszEnvironment: LPCWSTR,
+ CoreDriverGUID: GUID,
+ ftDriverDate: FILETIME,
+ dwlDriverVersion: DWORDLONG,
+ pbDriverInstalled: *mut BOOL,
+ ) -> HRESULT;
+ pub fn GetPrinterDriverPackagePathA(
+ pszServer: LPCSTR,
+ pszEnvironment: LPCSTR,
+ pszLanguage: LPCSTR,
+ pszPackageID: LPCSTR,
+ pszDriverPackageCab: LPSTR,
+ cchDriverPackageCab: DWORD,
+ pcchRequiredSize: LPDWORD,
+ ) -> HRESULT;
+ pub fn GetPrinterDriverPackagePathW(
+ pszServer: LPCWSTR,
+ pszEnvironment: LPCWSTR,
+ pszLanguage: LPCWSTR,
+ pszPackageID: LPCWSTR,
+ pszDriverPackageCab: LPWSTR,
+ cchDriverPackageCab: DWORD,
+ pcchRequiredSize: LPDWORD,
+ ) -> HRESULT;
+ pub fn DeletePrinterDriverPackageA(
+ pszServer: LPCSTR,
+ pszInfPath: LPCSTR,
+ pszEnvironment: LPCSTR,
+ ) -> HRESULT;
+ pub fn DeletePrinterDriverPackageW(
+ pszServer: LPCWSTR,
+ pszInfPath: LPCWSTR,
+ pszEnvironment: LPCWSTR,
+ ) -> HRESULT;
+}
+ENUM!{enum EPrintPropertyType {
+ kPropertyTypeString = 1,
+ kPropertyTypeInt32,
+ kPropertyTypeInt64,
+ kPropertyTypeByte,
+ kPropertyTypeTime,
+ kPropertyTypeDevMode,
+ kPropertyTypeSD,
+ kPropertyTypeNotificationReply,
+ kPropertyTypeNotificationOptions,
+ kPropertyTypeBuffer,
+}}
+ENUM!{enum EPrintXPSJobProgress {
+ kAddingDocumentSequence = 0,
+ kDocumentSequenceAdded = 1,
+ kAddingFixedDocument = 2,
+ kFixedDocumentAdded = 3,
+ kAddingFixedPage = 4,
+ kFixedPageAdded = 5,
+ kResourceAdded = 6,
+ kFontAdded = 7,
+ kImageAdded = 8,
+ kXpsDocumentCommitted = 9,
+}}
+ENUM!{enum EPrintXPSJobOperation {
+ kJobProduction = 1,
+ kJobConsumption,
+}}
+STRUCT!{struct PrintPropertyValue_value_propertyBlob {
+ cbBuf: DWORD,
+ pBuf: LPVOID,
+}}
+UNION!{union PrintPropertyValue_value {
+ [u64; 1] [u64; 2],
+ propertyByte propertyByte_mut: BYTE,
+ propertyString propertyString_mut: PWSTR,
+ propertyInt32 propertyInt32_mut: LONG,
+ propertyInt64 propertyInt64_mut: LONGLONG,
+ propertyBlob propertyBlob_mut: PrintPropertyValue_value_propertyBlob,
+}}
+STRUCT!{struct PrintPropertyValue {
+ ePropertyType: EPrintPropertyType,
+ value: PrintPropertyValue_value,
+}}
+STRUCT!{struct PrintNamedProperty {
+ propertyName: *mut WCHAR,
+ propertyValue: PrintPropertyValue,
+}}
+STRUCT!{struct PrintPropertiesCollection {
+ numberOfProperties: ULONG,
+ propertiesCollection: *mut PrintNamedProperty,
+}}
+extern "system" {
+ pub fn ReportJobProcessingProgress(
+ printerHandle: HANDLE,
+ jobId: ULONG,
+ jobOperation: EPrintXPSJobOperation,
+ jobProgress: EPrintXPSJobProgress,
+ ) -> HRESULT;
+ pub fn GetPrinterDriver2A(
+ hWnd: HWND,
+ hPrinter: HANDLE,
+ pEnvironment: LPSTR,
+ Level: DWORD,
+ pDriverInfo: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn GetPrinterDriver2W(
+ hWnd: HWND,
+ hPrinter: HANDLE,
+ pEnvironment: LPWSTR,
+ Level: DWORD,
+ pDriverInfo: LPBYTE,
+ cbBuf: DWORD,
+ pcbNeeded: LPDWORD,
+ ) -> BOOL;
+}
+ENUM!{enum PRINT_EXECUTION_CONTEXT {
+ PRINT_EXECUTION_CONTEXT_APPLICATION = 0,
+ PRINT_EXECUTION_CONTEXT_SPOOLER_SERVICE = 1,
+ PRINT_EXECUTION_CONTEXT_SPOOLER_ISOLATION_HOST = 2,
+ PRINT_EXECUTION_CONTEXT_FILTER_PIPELINE = 3,
+ PRINT_EXECUTION_CONTEXT_WOW64 = 4,
+}}
+STRUCT!{struct PRINT_EXECUTION_DATA {
+ context: PRINT_EXECUTION_CONTEXT,
+ clientAppPID: DWORD,
+}}
+extern "system" {
+ pub fn GetPrintExecutionData(
+ pData: *mut PRINT_EXECUTION_DATA,
+ ) -> BOOL;
+ pub fn GetJobNamedPropertyValue(
+ hPrinter: HANDLE,
+ JobId: DWORD,
+ pszName: PCWSTR,
+ pValue: *mut PrintPropertyValue,
+ ) -> DWORD;
+ pub fn FreePrintPropertyValue(
+ pValue: *mut PrintPropertyValue,
+ );
+ pub fn FreePrintNamedPropertyArray(
+ cProperties: DWORD,
+ ppProperties: *mut *mut PrintNamedProperty,
+ );
+ pub fn SetJobNamedProperty(
+ hPrinter: HANDLE,
+ JobId: DWORD,
+ pProperty: *const PrintNamedProperty,
+ ) -> DWORD;
+ pub fn DeleteJobNamedProperty(
+ hPrinter: HANDLE,
+ JobId: DWORD,
+ pszName: PCWSTR,
+ ) -> DWORD;
+ pub fn EnumJobNamedProperties(
+ hPrinter: HANDLE,
+ JobId: DWORD,
+ pcProperties: *mut DWORD,
+ ppProperties: *mut *mut PrintNamedProperty,
+ ) -> DWORD;
+ pub fn GetPrintOutputInfo(
+ hWnd: HWND,
+ pszPrinter: PCWSTR,
+ phFile: *mut HANDLE,
+ ppszOutputFile: *mut PWSTR,
+ ) -> HRESULT;
+}
+pub const MS_PRINT_JOB_OUTPUT_FILE: &'static str = "MsPrintJobOutputFile";
diff --git a/vendor/winapi/src/um/winsvc.rs b/vendor/winapi/src/um/winsvc.rs
new file mode 100644
index 000000000..baa2a8b84
--- /dev/null
+++ b/vendor/winapi/src/um/winsvc.rs
@@ -0,0 +1,695 @@
+// 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.
+//! Header file for the Service Control Manager
+use shared::minwindef::{BOOL, DWORD, LPBYTE, LPDWORD, LPVOID};
+use um::winnt::{
+ HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PSECURITY_DESCRIPTOR, PVOID,
+ SECURITY_INFORMATION, STANDARD_RIGHTS_REQUIRED
+};
+pub const SERVICE_NO_CHANGE: DWORD = 0xffffffff;
+pub const SERVICE_ACTIVE: DWORD = 0x00000001;
+pub const SERVICE_INACTIVE: DWORD = 0x00000002;
+pub const SERVICE_STATE_ALL: DWORD = SERVICE_ACTIVE | SERVICE_INACTIVE;
+pub const SERVICE_CONTROL_STOP: DWORD = 0x00000001;
+pub const SERVICE_CONTROL_PAUSE: DWORD = 0x00000002;
+pub const SERVICE_CONTROL_CONTINUE: DWORD = 0x00000003;
+pub const SERVICE_CONTROL_INTERROGATE: DWORD = 0x00000004;
+pub const SERVICE_CONTROL_SHUTDOWN: DWORD = 0x00000005;
+pub const SERVICE_CONTROL_PARAMCHANGE: DWORD = 0x00000006;
+pub const SERVICE_CONTROL_NETBINDADD: DWORD = 0x00000007;
+pub const SERVICE_CONTROL_NETBINDREMOVE: DWORD = 0x00000008;
+pub const SERVICE_CONTROL_NETBINDENABLE: DWORD = 0x00000009;
+pub const SERVICE_CONTROL_NETBINDDISABLE: DWORD = 0x0000000A;
+pub const SERVICE_CONTROL_DEVICEEVENT: DWORD = 0x0000000B;
+pub const SERVICE_CONTROL_HARDWAREPROFILECHANGE: DWORD = 0x0000000C;
+pub const SERVICE_CONTROL_POWEREVENT: DWORD = 0x0000000D;
+pub const SERVICE_CONTROL_SESSIONCHANGE: DWORD = 0x0000000E;
+pub const SERVICE_CONTROL_PRESHUTDOWN: DWORD = 0x0000000F;
+pub const SERVICE_CONTROL_TIMECHANGE: DWORD = 0x00000010;
+pub const SERVICE_CONTROL_TRIGGEREVENT: DWORD = 0x00000020;
+pub const SERVICE_STOPPED: DWORD = 0x00000001;
+pub const SERVICE_START_PENDING: DWORD = 0x00000002;
+pub const SERVICE_STOP_PENDING: DWORD = 0x00000003;
+pub const SERVICE_RUNNING: DWORD = 0x00000004;
+pub const SERVICE_CONTINUE_PENDING: DWORD = 0x00000005;
+pub const SERVICE_PAUSE_PENDING: DWORD = 0x00000006;
+pub const SERVICE_PAUSED: DWORD = 0x00000007;
+pub const SERVICE_ACCEPT_STOP: DWORD = 0x00000001;
+pub const SERVICE_ACCEPT_PAUSE_CONTINUE: DWORD = 0x00000002;
+pub const SERVICE_ACCEPT_SHUTDOWN: DWORD = 0x00000004;
+pub const SERVICE_ACCEPT_PARAMCHANGE: DWORD = 0x00000008;
+pub const SERVICE_ACCEPT_NETBINDCHANGE: DWORD = 0x00000010;
+pub const SERVICE_ACCEPT_HARDWAREPROFILECHANGE: DWORD = 0x00000020;
+pub const SERVICE_ACCEPT_POWEREVENT: DWORD = 0x00000040;
+pub const SERVICE_ACCEPT_SESSIONCHANGE: DWORD = 0x00000080;
+pub const SERVICE_ACCEPT_PRESHUTDOWN: DWORD = 0x00000100;
+pub const SERVICE_ACCEPT_TIMECHANGE: DWORD = 0x00000200;
+pub const SERVICE_ACCEPT_TRIGGEREVENT: DWORD = 0x00000400;
+// SERVICE_ACCEPT_USER_LOGOFF
+pub const SC_MANAGER_CONNECT: DWORD = 0x0001;
+pub const SC_MANAGER_CREATE_SERVICE: DWORD = 0x0002;
+pub const SC_MANAGER_ENUMERATE_SERVICE: DWORD = 0x0004;
+pub const SC_MANAGER_LOCK: DWORD = 0x0008;
+pub const SC_MANAGER_QUERY_LOCK_STATUS: DWORD = 0x0010;
+pub const SC_MANAGER_MODIFY_BOOT_CONFIG: DWORD = 0x0020;
+pub const SC_MANAGER_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SC_MANAGER_CONNECT
+ | SC_MANAGER_CREATE_SERVICE | SC_MANAGER_ENUMERATE_SERVICE | SC_MANAGER_LOCK
+ | SC_MANAGER_QUERY_LOCK_STATUS | SC_MANAGER_MODIFY_BOOT_CONFIG;
+pub const SERVICE_QUERY_CONFIG: DWORD = 0x0001;
+pub const SERVICE_CHANGE_CONFIG: DWORD = 0x0002;
+pub const SERVICE_QUERY_STATUS: DWORD = 0x0004;
+pub const SERVICE_ENUMERATE_DEPENDENTS: DWORD = 0x0008;
+pub const SERVICE_START: DWORD = 0x0010;
+pub const SERVICE_STOP: DWORD = 0x0020;
+pub const SERVICE_PAUSE_CONTINUE: DWORD = 0x0040;
+pub const SERVICE_INTERROGATE: DWORD = 0x0080;
+pub const SERVICE_USER_DEFINED_CONTROL: DWORD = 0x0100;
+pub const SERVICE_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SERVICE_QUERY_CONFIG
+ | SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS | SERVICE_START
+ | SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_INTERROGATE | SERVICE_USER_DEFINED_CONTROL;
+pub const SERVICE_RUNS_IN_SYSTEM_PROCESS: DWORD = 0x00000001;
+pub const SERVICE_CONFIG_DESCRIPTION: DWORD = 1;
+pub const SERVICE_CONFIG_FAILURE_ACTIONS: DWORD = 2;
+pub const SERVICE_CONFIG_DELAYED_AUTO_START_INFO: DWORD = 3;
+pub const SERVICE_CONFIG_FAILURE_ACTIONS_FLAG: DWORD = 4;
+pub const SERVICE_CONFIG_SERVICE_SID_INFO: DWORD = 5;
+pub const SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO: DWORD = 6;
+pub const SERVICE_CONFIG_PRESHUTDOWN_INFO: DWORD = 7;
+pub const SERVICE_CONFIG_TRIGGER_INFO: DWORD = 8;
+pub const SERVICE_CONFIG_PREFERRED_NODE: DWORD = 9;
+pub const SERVICE_CONFIG_LAUNCH_PROTECTED: DWORD = 12;
+pub const SERVICE_NOTIFY_STATUS_CHANGE_1: DWORD = 1;
+pub const SERVICE_NOTIFY_STATUS_CHANGE_2: DWORD = 2;
+pub const SERVICE_NOTIFY_STATUS_CHANGE: DWORD = SERVICE_NOTIFY_STATUS_CHANGE_2;
+pub const SERVICE_NOTIFY_STOPPED: DWORD = 0x00000001;
+pub const SERVICE_NOTIFY_START_PENDING: DWORD = 0x00000002;
+pub const SERVICE_NOTIFY_STOP_PENDING: DWORD = 0x00000004;
+pub const SERVICE_NOTIFY_RUNNING: DWORD = 0x00000008;
+pub const SERVICE_NOTIFY_CONTINUE_PENDING: DWORD = 0x00000010;
+pub const SERVICE_NOTIFY_PAUSE_PENDING: DWORD = 0x00000020;
+pub const SERVICE_NOTIFY_PAUSED: DWORD = 0x00000040;
+pub const SERVICE_NOTIFY_CREATED: DWORD = 0x00000080;
+pub const SERVICE_NOTIFY_DELETED: DWORD = 0x00000100;
+pub const SERVICE_NOTIFY_DELETE_PENDING: DWORD = 0x00000200;
+pub const SERVICE_STOP_REASON_FLAG_MIN: DWORD = 0x00000000;
+pub const SERVICE_STOP_REASON_FLAG_UNPLANNED: DWORD = 0x10000000;
+pub const SERVICE_STOP_REASON_FLAG_CUSTOM: DWORD = 0x20000000;
+pub const SERVICE_STOP_REASON_FLAG_PLANNED: DWORD = 0x40000000;
+pub const SERVICE_STOP_REASON_FLAG_MAX: DWORD = 0x80000000;
+pub const SERVICE_STOP_REASON_MAJOR_MIN: DWORD = 0x00000000;
+pub const SERVICE_STOP_REASON_MAJOR_OTHER: DWORD = 0x00010000;
+pub const SERVICE_STOP_REASON_MAJOR_HARDWARE: DWORD = 0x00020000;
+pub const SERVICE_STOP_REASON_MAJOR_OPERATINGSYSTEM: DWORD = 0x00030000;
+pub const SERVICE_STOP_REASON_MAJOR_SOFTWARE: DWORD = 0x00040000;
+pub const SERVICE_STOP_REASON_MAJOR_APPLICATION: DWORD = 0x00050000;
+pub const SERVICE_STOP_REASON_MAJOR_NONE: DWORD = 0x00060000;
+pub const SERVICE_STOP_REASON_MAJOR_MAX: DWORD = 0x00070000;
+pub const SERVICE_STOP_REASON_MAJOR_MIN_CUSTOM: DWORD = 0x00400000;
+pub const SERVICE_STOP_REASON_MAJOR_MAX_CUSTOM: DWORD = 0x00ff0000;
+pub const SERVICE_STOP_REASON_MINOR_MIN: DWORD = 0x00000000;
+pub const SERVICE_STOP_REASON_MINOR_OTHER: DWORD = 0x00000001;
+pub const SERVICE_STOP_REASON_MINOR_MAINTENANCE: DWORD = 0x00000002;
+pub const SERVICE_STOP_REASON_MINOR_INSTALLATION: DWORD = 0x00000003;
+pub const SERVICE_STOP_REASON_MINOR_UPGRADE: DWORD = 0x00000004;
+pub const SERVICE_STOP_REASON_MINOR_RECONFIG: DWORD = 0x00000005;
+pub const SERVICE_STOP_REASON_MINOR_HUNG: DWORD = 0x00000006;
+pub const SERVICE_STOP_REASON_MINOR_UNSTABLE: DWORD = 0x00000007;
+pub const SERVICE_STOP_REASON_MINOR_DISK: DWORD = 0x00000008;
+pub const SERVICE_STOP_REASON_MINOR_NETWORKCARD: DWORD = 0x00000009;
+pub const SERVICE_STOP_REASON_MINOR_ENVIRONMENT: DWORD = 0x0000000a;
+pub const SERVICE_STOP_REASON_MINOR_HARDWARE_DRIVER: DWORD = 0x0000000b;
+pub const SERVICE_STOP_REASON_MINOR_OTHERDRIVER: DWORD = 0x0000000c;
+pub const SERVICE_STOP_REASON_MINOR_SERVICEPACK: DWORD = 0x0000000d;
+pub const SERVICE_STOP_REASON_MINOR_SOFTWARE_UPDATE: DWORD = 0x0000000e;
+pub const SERVICE_STOP_REASON_MINOR_SECURITYFIX: DWORD = 0x0000000f;
+pub const SERVICE_STOP_REASON_MINOR_SECURITY: DWORD = 0x00000010;
+pub const SERVICE_STOP_REASON_MINOR_NETWORK_CONNECTIVITY: DWORD = 0x00000011;
+pub const SERVICE_STOP_REASON_MINOR_WMI: DWORD = 0x00000012;
+pub const SERVICE_STOP_REASON_MINOR_SERVICEPACK_UNINSTALL: DWORD = 0x00000013;
+pub const SERVICE_STOP_REASON_MINOR_SOFTWARE_UPDATE_UNINSTALL: DWORD = 0x00000014;
+pub const SERVICE_STOP_REASON_MINOR_SECURITYFIX_UNINSTALL: DWORD = 0x00000015;
+pub const SERVICE_STOP_REASON_MINOR_MMC: DWORD = 0x00000016;
+pub const SERVICE_STOP_REASON_MINOR_NONE: DWORD = 0x00000017;
+pub const SERVICE_STOP_REASON_MINOR_MAX: DWORD = 0x00000018;
+pub const SERVICE_STOP_REASON_MINOR_MIN_CUSTOM: DWORD = 0x00000100;
+pub const SERVICE_STOP_REASON_MINOR_MAX_CUSTOM: DWORD = 0x0000FFFF;
+pub const SERVICE_CONTROL_STATUS_REASON_INFO: DWORD = 1;
+pub const SERVICE_SID_TYPE_NONE: DWORD = 0x00000000;
+pub const SERVICE_SID_TYPE_UNRESTRICTED: DWORD = 0x00000001;
+pub const SERVICE_SID_TYPE_RESTRICTED: DWORD = 0x00000002 | SERVICE_SID_TYPE_UNRESTRICTED;
+pub const SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL: DWORD = 1;
+pub const SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY: DWORD = 2;
+pub const SERVICE_TRIGGER_TYPE_DOMAIN_JOIN: DWORD = 3;
+pub const SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT: DWORD = 4;
+pub const SERVICE_TRIGGER_TYPE_GROUP_POLICY: DWORD = 5;
+pub const SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT: DWORD = 6;
+pub const SERVICE_TRIGGER_TYPE_CUSTOM_SYSTEM_STATE_CHANGE: DWORD = 7;
+pub const SERVICE_TRIGGER_TYPE_CUSTOM: DWORD = 20;
+pub const SERVICE_TRIGGER_DATA_TYPE_BINARY: DWORD = 1;
+pub const SERVICE_TRIGGER_DATA_TYPE_STRING: DWORD = 2;
+pub const SERVICE_TRIGGER_DATA_TYPE_LEVEL: DWORD = 3;
+pub const SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ANY: DWORD = 4;
+pub const SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ALL: DWORD = 5;
+pub const SERVICE_START_REASON_DEMAND: DWORD = 0x00000001;
+pub const SERVICE_START_REASON_AUTO: DWORD = 0x00000002;
+pub const SERVICE_START_REASON_TRIGGER: DWORD = 0x00000004;
+pub const SERVICE_START_REASON_RESTART_ON_FAILURE: DWORD = 0x00000008;
+pub const SERVICE_START_REASON_DELAYEDAUTO: DWORD = 0x00000010;
+pub const SERVICE_DYNAMIC_INFORMATION_LEVEL_START_REASON: DWORD = 1;
+pub const SERVICE_LAUNCH_PROTECTED_NONE: DWORD = 0;
+pub const SERVICE_LAUNCH_PROTECTED_WINDOWS: DWORD = 1;
+pub const SERVICE_LAUNCH_PROTECTED_WINDOWS_LIGHT: DWORD = 2;
+pub const SERVICE_LAUNCH_PROTECTED_ANTIMALWARE_LIGHT: DWORD = 3;
+DEFINE_GUID!{NETWORK_MANAGER_FIRST_IP_ADDRESS_ARRIVAL_GUID,
+ 0x4f27f2de, 0x14e2, 0x430b, 0xa5, 0x49, 0x7c, 0xd4, 0x8c, 0xbc, 0x82, 0x45}
+DEFINE_GUID!{NETWORK_MANAGER_LAST_IP_ADDRESS_REMOVAL_GUID,
+ 0xcc4ba62a, 0x162e, 0x4648, 0x84, 0x7a, 0xb6, 0xbd, 0xf9, 0x93, 0xe3, 0x35}
+DEFINE_GUID!{DOMAIN_JOIN_GUID,
+ 0x1ce20aba, 0x9851, 0x4421, 0x94, 0x30, 0x1d, 0xde, 0xb7, 0x66, 0xe8, 0x09}
+DEFINE_GUID!{DOMAIN_LEAVE_GUID,
+ 0xddaf516e, 0x58c2, 0x4866, 0x95, 0x74, 0xc3, 0xb6, 0x15, 0xd4, 0x2e, 0xa1}
+DEFINE_GUID!{FIREWALL_PORT_OPEN_GUID,
+ 0xb7569e07, 0x8421, 0x4ee0, 0xad, 0x10, 0x86, 0x91, 0x5a, 0xfd, 0xad, 0x09}
+DEFINE_GUID!{FIREWALL_PORT_CLOSE_GUID,
+ 0xa144ed38, 0x8e12, 0x4de4, 0x9d, 0x96, 0xe6, 0x47, 0x40, 0xb1, 0xa5, 0x24}
+DEFINE_GUID!{MACHINE_POLICY_PRESENT_GUID,
+ 0x659fcae6, 0x5bdb, 0x4da9, 0xb1, 0xff, 0xca, 0x2a, 0x17, 0x8d, 0x46, 0xe0}
+DEFINE_GUID!{USER_POLICY_PRESENT_GUID,
+ 0x54fb46c8, 0xf089, 0x464c, 0xb1, 0xfd, 0x59, 0xd1, 0xb6, 0x2c, 0x3b, 0x50}
+DEFINE_GUID!{RPC_INTERFACE_EVENT_GUID,
+ 0xbc90d167, 0x9470, 0x4139, 0xa9, 0xba, 0xbe, 0x0b, 0xbb, 0xf5, 0xb7, 0x4d}
+DEFINE_GUID!{NAMED_PIPE_EVENT_GUID,
+ 0x1f81d131, 0x3fac, 0x4537, 0x9e, 0x0c, 0x7e, 0x7b, 0x0c, 0x2f, 0x4b, 0x55}
+DEFINE_GUID!{CUSTOM_SYSTEM_STATE_CHANGE_EVENT_GUID,
+ 0x2d7a2816, 0x0c5e, 0x45fc, 0x9c, 0xe7, 0x57, 0x0e, 0x5e, 0xcd, 0xe9, 0xc9}
+ENUM!{enum SC_ACTION_TYPE {
+ SC_ACTION_NONE = 0,
+ SC_ACTION_RESTART = 1,
+ SC_ACTION_REBOOT = 2,
+ SC_ACTION_RUN_COMMAND = 3,
+}}
+STRUCT!{struct SC_ACTION {
+ Type: SC_ACTION_TYPE,
+ Delay: DWORD,
+}}
+pub type LPSC_ACTION = *mut SC_ACTION;
+STRUCT!{struct SERVICE_FAILURE_ACTIONSW {
+ dwResetPeriod: DWORD,
+ lpRebootMsg: LPWSTR,
+ lpCommand: LPWSTR,
+ cActions: DWORD,
+ lpsaActions: LPSC_ACTION,
+}}
+pub type LPSERVICE_FAILURE_ACTIONSW = *mut SERVICE_FAILURE_ACTIONSW;
+STRUCT!{struct SERVICE_FAILURE_ACTIONS_FLAG {
+ fFailureActionsOnNonCrashFailures: BOOL,
+}}
+DECLARE_HANDLE!{SC_HANDLE, SC_HANDLE__}
+pub type LPSC_HANDLE = *mut SC_HANDLE;
+DECLARE_HANDLE!{SERVICE_STATUS_HANDLE, SERVICE_STATUS_HANDLE__}
+ENUM!{enum SC_STATUS_TYPE {
+ SC_STATUS_PROCESS_INFO = 0,
+}}
+ENUM!{enum SC_ENUM_TYPE {
+ SC_ENUM_PROCESS_INFO = 0,
+}}
+STRUCT!{struct SERVICE_STATUS {
+ dwServiceType: DWORD,
+ dwCurrentState: DWORD,
+ dwControlsAccepted: DWORD,
+ dwWin32ExitCode: DWORD,
+ dwServiceSpecificExitCode: DWORD,
+ dwCheckPoint: DWORD,
+ dwWaitHint: DWORD,
+}}
+pub type LPSERVICE_STATUS = *mut SERVICE_STATUS;
+STRUCT!{struct SERVICE_STATUS_PROCESS {
+ dwServiceType: DWORD,
+ dwCurrentState: DWORD,
+ dwControlsAccepted: DWORD,
+ dwWin32ExitCode: DWORD,
+ dwServiceSpecificExitCode: DWORD,
+ dwCheckPoint: DWORD,
+ dwWaitHint: DWORD,
+ dwProcessId: DWORD,
+ dwServiceFlags: DWORD,
+}}
+pub type LPSERVICE_STATUS_PROCESS = *mut SERVICE_STATUS_PROCESS;
+STRUCT!{struct ENUM_SERVICE_STATUSA {
+ lpServiceName: LPSTR,
+ lpDisplayName: LPSTR,
+ ServiceStatus: SERVICE_STATUS,
+}}
+pub type LPENUM_SERVICE_STATUSA = *mut ENUM_SERVICE_STATUSA;
+STRUCT!{struct ENUM_SERVICE_STATUSW {
+ lpServiceName: LPWSTR,
+ lpDisplayName: LPWSTR,
+ ServiceStatus: SERVICE_STATUS,
+}}
+pub type LPENUM_SERVICE_STATUSW = *mut ENUM_SERVICE_STATUSW;
+STRUCT!{struct ENUM_SERVICE_STATUS_PROCESSA {
+ lpServiceName: LPSTR,
+ lpDisplayName: LPSTR,
+ ServiceStatusProcess: SERVICE_STATUS_PROCESS,
+}}
+pub type LPENUM_SERVICE_STATUS_PROCESSA = *mut ENUM_SERVICE_STATUS_PROCESSA;
+STRUCT!{struct ENUM_SERVICE_STATUS_PROCESSW {
+ lpServiceName: LPWSTR,
+ lpDisplayName: LPWSTR,
+ ServiceStatusProcess: SERVICE_STATUS_PROCESS,
+}}
+pub type LPENUM_SERVICE_STATUS_PROCESSW = *mut ENUM_SERVICE_STATUS_PROCESSW;
+pub type SC_LOCK = LPVOID;
+STRUCT!{struct QUERY_SERVICE_LOCK_STATUSA {
+ fIsLocked: DWORD,
+ lpLockOwner: LPSTR,
+ dwLockDuration: DWORD,
+}}
+pub type LPQUERY_SERVICE_LOCK_STATUSA = *mut QUERY_SERVICE_LOCK_STATUSA;
+STRUCT!{struct QUERY_SERVICE_LOCK_STATUSW {
+ fIsLocked: DWORD,
+ lpLockOwner: LPWSTR,
+ dwLockDuration: DWORD,
+}}
+pub type LPQUERY_SERVICE_LOCK_STATUSW = *mut QUERY_SERVICE_LOCK_STATUSW;
+STRUCT!{struct QUERY_SERVICE_CONFIGA {
+ dwServiceType: DWORD,
+ dwStartType: DWORD,
+ dwErrorControl: DWORD,
+ lpBinaryPathName: LPSTR,
+ lpLoadOrderGroup: LPSTR,
+ dwTagId: DWORD,
+ lpDependencies: LPSTR,
+ lpServiceStartName: LPSTR,
+ lpDisplayName: LPSTR,
+}}
+pub type LPQUERY_SERVICE_CONFIGA = *mut QUERY_SERVICE_CONFIGA;
+STRUCT!{struct QUERY_SERVICE_CONFIGW {
+ dwServiceType: DWORD,
+ dwStartType: DWORD,
+ dwErrorControl: DWORD,
+ lpBinaryPathName: LPWSTR,
+ lpLoadOrderGroup: LPWSTR,
+ dwTagId: DWORD,
+ lpDependencies: LPWSTR,
+ lpServiceStartName: LPWSTR,
+ lpDisplayName: LPWSTR,
+}}
+pub type LPQUERY_SERVICE_CONFIGW = *mut QUERY_SERVICE_CONFIGW;
+STRUCT!{struct SERVICE_DESCRIPTIONA {
+ lpDescription: LPSTR,
+}}
+pub type LPSERVICE_DESCRIPTIONA = *mut SERVICE_DESCRIPTIONA;
+STRUCT!{struct SERVICE_DESCRIPTIONW {
+ lpDescription: LPWSTR,
+}}
+pub type LPSERVICE_DESCRIPTIONW = *mut SERVICE_DESCRIPTIONW;
+FN!{stdcall LPSERVICE_MAIN_FUNCTIONW(
+ dwNumServicesArgs: DWORD,
+ lpServiceArgVectors: *mut LPWSTR,
+) -> ()}
+FN!{stdcall LPSERVICE_MAIN_FUNCTIONA(
+ dwNumServicesArgs: DWORD,
+ lpServiceArgVectors: *mut LPSTR,
+) -> ()}
+STRUCT!{struct SERVICE_TABLE_ENTRYA {
+ lpServiceName: LPCSTR,
+ lpServiceProc: LPSERVICE_MAIN_FUNCTIONA,
+}}
+pub type LPSERVICE_TABLE_ENTRYA = *mut SERVICE_TABLE_ENTRYA;
+STRUCT!{struct SERVICE_TABLE_ENTRYW {
+ lpServiceName: LPCWSTR,
+ lpServiceProc: LPSERVICE_MAIN_FUNCTIONW,
+}}
+pub type LPSERVICE_TABLE_ENTRYW = *mut SERVICE_TABLE_ENTRYW;
+FN!{stdcall LPHANDLER_FUNCTION(
+ dwControl: DWORD,
+) -> ()}
+FN!{stdcall LPHANDLER_FUNCTION_EX(
+ dwControl: DWORD,
+ dwEventType: DWORD,
+ lpEventData: LPVOID,
+ lpContext: LPVOID,
+) -> DWORD}
+FN!{stdcall PFN_SC_NOTIFY_CALLBACK(
+ pParameter: PVOID,
+) -> ()}
+STRUCT!{struct SERVICE_NOTIFY_1 {
+ dwVersion: DWORD,
+ pfnNotifyCallback: PFN_SC_NOTIFY_CALLBACK,
+ pContext: PVOID,
+ dwNotificationStatus: DWORD,
+ ServiceStatus: SERVICE_STATUS_PROCESS,
+}}
+pub type PSERVICE_NOTIFY_1 = *mut SERVICE_NOTIFY_1;
+STRUCT!{struct SERVICE_NOTIFY_2A {
+ dwVersion: DWORD,
+ pfnNotifyCallback: PFN_SC_NOTIFY_CALLBACK,
+ pContext: PVOID,
+ dwNotificationStatus: DWORD,
+ ServiceStatus: SERVICE_STATUS_PROCESS,
+ dwNotificationTriggered: DWORD,
+ pszServiceNames: LPSTR,
+}}
+pub type PSERVICE_NOTIFY_2A = *mut SERVICE_NOTIFY_2A;
+STRUCT!{struct SERVICE_NOTIFY_2W {
+ dwVersion: DWORD,
+ pfnNotifyCallback: PFN_SC_NOTIFY_CALLBACK,
+ pContext: PVOID,
+ dwNotificationStatus: DWORD,
+ ServiceStatus: SERVICE_STATUS_PROCESS,
+ dwNotificationTriggered: DWORD,
+ pszServiceNames: LPWSTR,
+}}
+pub type PSERVICE_NOTIFY_2W = *mut SERVICE_NOTIFY_2W;
+pub type SERVICE_NOTIFYA = SERVICE_NOTIFY_2A;
+pub type PSERVICE_NOTIFYA = PSERVICE_NOTIFY_2A;
+pub type SERVICE_NOTIFYW = SERVICE_NOTIFY_2W;
+pub type PSERVICE_NOTIFYW = PSERVICE_NOTIFY_2W;
+extern "system" {
+ pub fn ChangeServiceConfigA(
+ hService: SC_HANDLE,
+ dwServiceType: DWORD,
+ dsStartType: DWORD,
+ dwErrorControl: DWORD,
+ lpBinaryPathName: LPCSTR,
+ lpLoadOrderGroup: LPCSTR,
+ lpdwTagId: LPDWORD,
+ lpDependencies: LPCSTR,
+ lpServiceStartName: LPCSTR,
+ lpPassword: LPCSTR,
+ lpDisplayName: LPCSTR,
+ ) -> BOOL;
+ pub fn ChangeServiceConfigW(
+ hService: SC_HANDLE,
+ dwServiceType: DWORD,
+ dsStartType: DWORD,
+ dwErrorControl: DWORD,
+ lpBinaryPathName: LPCWSTR,
+ lpLoadOrderGroup: LPCWSTR,
+ lpdwTagId: LPDWORD,
+ lpDependencies: LPCWSTR,
+ lpServiceStartName: LPCWSTR,
+ lpPassword: LPCWSTR,
+ lpDisplayName: LPCWSTR,
+ ) -> BOOL;
+ pub fn ChangeServiceConfig2A(
+ hService: SC_HANDLE,
+ dwInfoLevel: DWORD,
+ lpInfo: LPVOID,
+ ) -> BOOL;
+ pub fn ChangeServiceConfig2W(
+ hService: SC_HANDLE,
+ dwInfoLevel: DWORD,
+ lpInfo: LPVOID,
+ ) -> BOOL;
+ pub fn CloseServiceHandle(
+ hSCObject: SC_HANDLE,
+ ) -> BOOL;
+ pub fn ControlService(
+ hService: SC_HANDLE,
+ dwControl: DWORD,
+ lpServiceStatus: LPSERVICE_STATUS,
+ ) -> BOOL;
+ pub fn CreateServiceA(
+ hSCManager: SC_HANDLE,
+ lpServiceName: LPCSTR,
+ lpDisplayName: LPCSTR,
+ dwDesiredAccess: DWORD,
+ dwServiceType: DWORD,
+ dwStartType: DWORD,
+ dwErrorControl: DWORD,
+ lpBinaryPathName: LPCSTR,
+ lpLoadOrderGroup: LPCSTR,
+ lpdwTagId: LPDWORD,
+ lpDependencies: LPCSTR,
+ lpServiceStartName: LPCSTR,
+ lpPassword: LPCSTR,
+ ) -> SC_HANDLE;
+ pub fn CreateServiceW(
+ hSCManager: SC_HANDLE,
+ lpServiceName: LPCWSTR,
+ lpDisplayName: LPCWSTR,
+ dwDesiredAccess: DWORD,
+ dwServiceType: DWORD,
+ dwStartType: DWORD,
+ dwErrorControl: DWORD,
+ lpBinaryPathName: LPCWSTR,
+ lpLoadOrderGroup: LPCWSTR,
+ lpdwTagId: LPDWORD,
+ lpDependencies: LPCWSTR,
+ lpServiceStartName: LPCWSTR,
+ lpPassword: LPCWSTR,
+ ) -> SC_HANDLE;
+ pub fn DeleteService(
+ hService: SC_HANDLE,
+ ) -> BOOL;
+ pub fn EnumDependentServicesA(
+ hService: SC_HANDLE,
+ dwServiceState: DWORD,
+ lpServices: LPENUM_SERVICE_STATUSA,
+ cbBufSize: DWORD,
+ pcbBytesNeeded: LPDWORD,
+ lpServicesReturned: LPDWORD,
+ ) -> BOOL;
+ pub fn EnumDependentServicesW(
+ hService: SC_HANDLE,
+ dwServiceState: DWORD,
+ lpServices: LPENUM_SERVICE_STATUSW,
+ cbBufSize: DWORD,
+ pcbBytesNeeded: LPDWORD,
+ lpServicesReturned: LPDWORD,
+ ) -> BOOL;
+ pub fn EnumServicesStatusA(
+ hSCManager: SC_HANDLE,
+ dwServiceType: DWORD,
+ dwServiceState: DWORD,
+ lpServices: LPENUM_SERVICE_STATUSA,
+ cbBufSize: DWORD,
+ pcbBytesNeeded: LPDWORD,
+ lpServicesReturned: LPDWORD,
+ lpResumeHandle: LPDWORD,
+ ) -> BOOL;
+ pub fn EnumServicesStatusW(
+ hSCManager: SC_HANDLE,
+ dwServiceType: DWORD,
+ dwServiceState: DWORD,
+ lpServices: LPENUM_SERVICE_STATUSW,
+ cbBufSize: DWORD,
+ pcbBytesNeeded: LPDWORD,
+ lpServicesReturned: LPDWORD,
+ lpResumeHandle: LPDWORD,
+ ) -> BOOL;
+ pub fn EnumServicesStatusExA(
+ hSCManager: SC_HANDLE,
+ InfoLevel: SC_ENUM_TYPE,
+ dwServiceType: DWORD,
+ dwServiceState: DWORD,
+ lpServices: LPBYTE,
+ cbBufSize: DWORD,
+ pcbBytesNeeded: LPDWORD,
+ lpServicesReturned: LPDWORD,
+ lpResumeHandle: LPDWORD,
+ pszGroupName: LPCSTR,
+ ) -> BOOL;
+ pub fn EnumServicesStatusExW(
+ hSCManager: SC_HANDLE,
+ InfoLevel: SC_ENUM_TYPE,
+ dwServiceType: DWORD,
+ dwServiceState: DWORD,
+ lpServices: LPBYTE,
+ cbBufSize: DWORD,
+ pcbBytesNeeded: LPDWORD,
+ lpServicesReturned: LPDWORD,
+ lpResumeHandle: LPDWORD,
+ pszGroupName: LPCWSTR,
+ ) -> BOOL;
+ pub fn GetServiceKeyNameA(
+ hSCManager: SC_HANDLE,
+ lpDisplayName: LPCSTR,
+ lpServiceName: LPSTR,
+ lpcchBuffer: LPDWORD,
+ ) -> BOOL;
+ pub fn GetServiceKeyNameW(
+ hSCManager: SC_HANDLE,
+ lpDisplayName: LPCWSTR,
+ lpServiceName: LPWSTR,
+ lpcchBuffer: LPDWORD,
+ ) -> BOOL;
+ pub fn GetServiceDisplayNameA(
+ hSCManager: SC_HANDLE,
+ lpServiceName: LPCSTR,
+ lpDisplayName: LPSTR,
+ lpcchBuffer: LPDWORD,
+ ) -> BOOL;
+ pub fn GetServiceDisplayNameW(
+ hSCManager: SC_HANDLE,
+ lpServiceName: LPCWSTR,
+ lpDisplayName: LPWSTR,
+ lpcchBuffer: LPDWORD,
+ ) -> BOOL;
+ pub fn LockServiceDatabase(
+ hSCManager: SC_HANDLE,
+ ) -> SC_LOCK;
+ pub fn NotifyBootConfigStatus(
+ BootAcceptable: BOOL,
+ ) -> BOOL;
+ pub fn OpenSCManagerA(
+ lpMachineName: LPCSTR,
+ lpDatabaseName: LPCSTR,
+ dwDesiredAccess: DWORD,
+ ) -> SC_HANDLE;
+ pub fn OpenSCManagerW(
+ lpMachineName: LPCWSTR,
+ lpDatabaseName: LPCWSTR,
+ dwDesiredAccess: DWORD,
+ ) -> SC_HANDLE;
+ pub fn OpenServiceA(
+ hSCManager: SC_HANDLE,
+ lpServiceName: LPCSTR,
+ dwDesiredAccess: DWORD,
+ ) -> SC_HANDLE;
+ pub fn OpenServiceW(
+ hSCManager: SC_HANDLE,
+ lpServiceName: LPCWSTR,
+ dwDesiredAccess: DWORD,
+ ) -> SC_HANDLE;
+ pub fn QueryServiceConfigA(
+ hService: SC_HANDLE,
+ lpServiceConfig: LPQUERY_SERVICE_CONFIGA,
+ cbBufSize: DWORD,
+ pcbBytesNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn QueryServiceConfigW(
+ hService: SC_HANDLE,
+ lpServiceConfig: LPQUERY_SERVICE_CONFIGW,
+ cbBufSize: DWORD,
+ pcbBytesNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn QueryServiceConfig2A(
+ hService: SC_HANDLE,
+ dwInfoLevel: DWORD,
+ lpBuffer: LPBYTE,
+ cbBufSize: DWORD,
+ pcbBytesNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn QueryServiceConfig2W(
+ hService: SC_HANDLE,
+ dwInfoLevel: DWORD,
+ lpBuffer: LPBYTE,
+ cbBufSize: DWORD,
+ pcbBytesNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn QueryServiceLockStatusA(
+ hSCManager: SC_HANDLE,
+ lpLockStatus: LPQUERY_SERVICE_LOCK_STATUSA,
+ cbBufSize: DWORD,
+ pcbBytesNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn QueryServiceLockStatusW(
+ hSCManager: SC_HANDLE,
+ lpLockStatus: LPQUERY_SERVICE_LOCK_STATUSW,
+ cbBufSize: DWORD,
+ pcbBytesNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn QueryServiceObjectSecurity(
+ hService: SC_HANDLE,
+ dwSecurityInformation: SECURITY_INFORMATION,
+ lpSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ cbBufSize: DWORD,
+ pcbBytesNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn QueryServiceStatus(
+ hService: SC_HANDLE,
+ lpServiceStatus: LPSERVICE_STATUS,
+ ) -> BOOL;
+ pub fn QueryServiceStatusEx(
+ hService: SC_HANDLE,
+ InfoLevel: SC_STATUS_TYPE,
+ lpBuffer: LPBYTE,
+ cbBufSize: DWORD,
+ pcbBytesNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn RegisterServiceCtrlHandlerA(
+ lpServiceName: LPCSTR,
+ lpHandlerProc: LPHANDLER_FUNCTION,
+ ) -> SERVICE_STATUS_HANDLE;
+ pub fn RegisterServiceCtrlHandlerW(
+ lpServiceName: LPCWSTR,
+ lpHandlerProc: LPHANDLER_FUNCTION,
+ ) -> SERVICE_STATUS_HANDLE;
+ pub fn RegisterServiceCtrlHandlerExA(
+ lpServiceName: LPCSTR,
+ lpHandlerProc: LPHANDLER_FUNCTION_EX,
+ lpContext: LPVOID,
+ ) -> SERVICE_STATUS_HANDLE;
+ pub fn RegisterServiceCtrlHandlerExW(
+ lpServiceName: LPCWSTR,
+ lpHandlerProc: LPHANDLER_FUNCTION_EX,
+ lpContext: LPVOID,
+ ) -> SERVICE_STATUS_HANDLE;
+ pub fn SetServiceObjectSecurity(
+ hService: SC_HANDLE,
+ dwSecurityInformation: SECURITY_INFORMATION,
+ lpSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ ) -> BOOL;
+ pub fn SetServiceStatus(
+ hServiceStatus: SERVICE_STATUS_HANDLE,
+ lpServiceStatus: LPSERVICE_STATUS,
+ ) -> BOOL;
+ pub fn StartServiceCtrlDispatcherA(
+ lpServiceStartTable: *const SERVICE_TABLE_ENTRYA,
+ ) -> BOOL;
+ pub fn StartServiceCtrlDispatcherW(
+ lpServiceStartTable: *const SERVICE_TABLE_ENTRYW,
+ ) -> BOOL;
+ pub fn StartServiceA(
+ hService: SC_HANDLE,
+ dwNumServiceArgs: DWORD,
+ lpServiceArgVectors: *mut LPCSTR,
+ ) -> BOOL;
+ pub fn StartServiceW(
+ hService: SC_HANDLE,
+ dwNumServiceArgs: DWORD,
+ lpServiceArgVectors: *mut LPCWSTR,
+ ) -> BOOL;
+ pub fn UnlockServiceDatabase(
+ ScLock: SC_LOCK,
+ ) -> BOOL;
+ pub fn NotifyServiceStatusChangeA(
+ hService: SC_HANDLE,
+ dwNotifyMask: DWORD,
+ pNotifyBuffer: PSERVICE_NOTIFYA,
+ ) -> DWORD;
+ pub fn NotifyServiceStatusChangeW(
+ hService: SC_HANDLE,
+ dwNotifyMask: DWORD,
+ pNotifyBuffer: PSERVICE_NOTIFYW,
+ ) -> DWORD;
+ pub fn ControlServiceExA(
+ hService: SC_HANDLE,
+ dwControl: DWORD,
+ dwInfoLevel: DWORD,
+ pControlParams: PVOID,
+ ) -> BOOL;
+ pub fn ControlServiceExW(
+ hService: SC_HANDLE,
+ dwControl: DWORD,
+ dwInfoLevel: DWORD,
+ pControlParams: PVOID,
+ ) -> BOOL;
+ pub fn QueryServiceDynamicInformation(
+ hServiceStatus: SERVICE_STATUS_HANDLE,
+ dwInfoLevel: DWORD,
+ ppDynamicInfo: *mut PVOID,
+ ) -> BOOL;
+ pub fn WaitServiceState (
+ hService: SC_HANDLE,
+ dwNotify: DWORD,
+ dwTimeout: DWORD,
+ hCancelEvent: HANDLE,
+ ) -> DWORD;
+}
diff --git a/vendor/winapi/src/um/wintrust.rs b/vendor/winapi/src/um/wintrust.rs
new file mode 100644
index 000000000..867e12e46
--- /dev/null
+++ b/vendor/winapi/src/um/wintrust.rs
@@ -0,0 +1,123 @@
+use shared::guiddef::GUID;
+use shared::minwindef::{BYTE, DWORD, LPVOID};
+use shared::ntdef::{HANDLE, LONG, LPCWSTR, LPWSTR, WCHAR};
+use shared::windef::HWND;
+use um::wincrypt::{CRYPT_DATA_BLOB, PCERT_STRONG_SIGN_PARA};
+//90
+pub const WTD_UI_ALL: DWORD = 1;
+pub const WTD_UI_NONE: DWORD = 2;
+pub const WTD_UI_NOBAD: DWORD = 3;
+pub const WTD_UI_NOGOOD: DWORD = 4;
+pub const WTD_REVOKE_NONE: DWORD = 0x00000000;
+pub const WTD_REVOKE_WHOLECHAIN: DWORD = 0x00000001;
+pub const WTD_CHOICE_FILE: DWORD = 1;
+pub const WTD_CHOICE_CATALOG: DWORD = 2;
+pub const WTD_CHOICE_BLOB: DWORD = 3;
+pub const WTD_CHOICE_SIGNER: DWORD = 4;
+pub const WTD_CHOICE_CERT: DWORD = 5;
+pub const WTD_STATEACTION_IGNORE: DWORD = 0x00000000;
+pub const WTD_STATEACTION_VERIFY: DWORD = 0x00000001;
+pub const WTD_STATEACTION_CLOSE: DWORD = 0x00000002;
+pub const WTD_STATEACTION_AUTO_CACHE: DWORD = 0x00000003;
+pub const WTD_STATEACTION_AUTO_CACHE_FLUSH: DWORD = 0x00000004;
+pub const WTD_PROV_FLAGS_MASK: DWORD = 0x0000FFFF;
+pub const WTD_USE_IE4_TRUST_FLAG: DWORD = 0x00000001;
+pub const WTD_NO_IE4_CHAIN_FLAG: DWORD = 0x00000002;
+pub const WTD_NO_POLICY_USAGE_FLAG: DWORD = 0x00000004;
+pub const WTD_REVOCATION_CHECK_NONE: DWORD = 0x00000010;
+pub const WTD_REVOCATION_CHECK_END_CERT: DWORD = 0x00000020;
+pub const WTD_REVOCATION_CHECK_CHAIN: DWORD = 0x00000040;
+pub const WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT: DWORD = 0x00000080;
+pub const WTD_SAFER_FLAG: DWORD = 0x00000100;
+pub const WTD_HASH_ONLY_FLAG: DWORD = 0x00000200;
+pub const WTD_USE_DEFAULT_OSVER_CHECK: DWORD = 0x00000400;
+pub const WTD_LIFETIME_SIGNING_FLAG: DWORD = 0x00000800;
+pub const WTD_CACHE_ONLY_URL_RETRIEVAL: DWORD = 0x00001000;
+pub const WTD_DISABLE_MD2_MD4: DWORD = 0x00002000;
+pub const WTD_MOTW: DWORD = 0x00004000;
+pub const WTD_CODE_INTEGRITY_DRIVER_MODE: DWORD = 0x00008000;
+pub const WTD_UICONTEXT_EXECUTE: DWORD = 0;
+pub const WTD_UICONTEXT_INSTALL: DWORD = 1;
+STRUCT!{struct WINTRUST_DATA {
+ cbStruct: DWORD,
+ pPolicyCallbackData: LPVOID,
+ pSIPClientData: LPVOID,
+ dwUIChoice: DWORD,
+ fdwRevocationChecks: DWORD,
+ dwUnionChoice: DWORD,
+ u: WINTRUST_DATA_u,
+ dwStateAction: DWORD,
+ hWVTStateData: HANDLE,
+ pwszURLReference: *mut WCHAR,
+ dwProvFlags: DWORD,
+ dwUIContext: DWORD,
+ pSignatureSettings: *mut WINTRUST_SIGNATURE_SETTINGS,
+}}
+UNION!{union WINTRUST_DATA_u {
+ [usize; 1],
+ pFile pFile_mut: *mut WINTRUST_FILE_INFO,
+ // pCatalog pCatalog_mut: *mut WINTRUST_CATALOG_INFO,
+ // pBlob pBlob_mut: *mut WINTRUST_BLOB_INFO,
+ // pSgnr pSgnr_mut: *mut WINTRUST_SGNR_INFO,
+ // pCert pCert_mut: *mut WINTRUST_CERT_INFO,
+}}
+pub type PWINTRUST_DATA = *mut WINTRUST_DATA;
+STRUCT!{struct WINTRUST_SIGNATURE_SETTINGS {
+ cbStruct: DWORD,
+ dwIndex: DWORD,
+ dwFlags: DWORD,
+ cSecondarySigs: DWORD,
+ dwVerifiedSigIndex: DWORD,
+ pCryptoPolicy: PCERT_STRONG_SIGN_PARA,
+}}
+pub type PWINTRUST_SIGNATURE_SETTINGS = *mut WINTRUST_SIGNATURE_SETTINGS;
+//217
+STRUCT! {struct WINTRUST_FILE_INFO {
+ cbStruct: DWORD,
+ pcwszFilePath: LPCWSTR,
+ hFile: HANDLE,
+ pgKnownSubject: *const GUID,
+}}
+//414
+extern "system" {
+ pub fn WinVerifyTrust(hwnd: HWND, pgActionID: *mut GUID, pWVTData: LPVOID) -> LONG;
+}
+//1246
+pub const SPC_UUID_LENGTH: usize = 16;
+pub type SPC_UUID = [BYTE; SPC_UUID_LENGTH];
+//SpcSerializedObjectAttributesClassId
+STRUCT!{struct SPC_SERIALIZED_OBJECT {
+ ClassId: SPC_UUID,
+ SerializedData: CRYPT_DATA_BLOB,
+}}
+pub type PSPC_SERIALIZED_OBJECT = *mut SPC_SERIALIZED_OBJECT;
+STRUCT!{struct SPC_SIGINFO {
+ dwSipVersion: DWORD,
+ gSIPGuid: GUID,
+ dwReserved1: DWORD,
+ dwReserved2: DWORD,
+ dwReserved3: DWORD,
+ dwReserved4: DWORD,
+ dwReserved5: DWORD,
+}}
+pub type PSPC_SIGINFO = *mut SPC_SIGINFO;
+pub const SPC_URL_LINK_CHOICE: DWORD = 1;
+pub const SPC_MONIKER_LINK_CHOICE: DWORD = 2;
+pub const SPC_FILE_LINK_CHOICE: DWORD = 3;
+STRUCT!{struct SPC_LINK {
+ dwLinkChoice: DWORD,
+ u: SPC_LINK_u,
+}}
+UNION!{union SPC_LINK_u {
+ [u32; 6] [u64; 4],
+ pwszUrl pwszUrl_mut: LPWSTR,
+ Moniker Moniker_mut: SPC_SERIALIZED_OBJECT,
+ pwszFile pwszFile_mut: LPWSTR,
+}}
+pub type PSPC_LINK = *mut SPC_LINK;
+//1337
+STRUCT!{struct SPC_SP_OPUS_INFO {
+ pwszProgramName: LPCWSTR,
+ pMoreInfo: *mut SPC_LINK,
+ pPublisherInfo: *mut SPC_LINK,
+}}
diff --git a/vendor/winapi/src/um/winusb.rs b/vendor/winapi/src/um/winusb.rs
new file mode 100644
index 000000000..c72e36833
--- /dev/null
+++ b/vendor/winapi/src/um/winusb.rs
@@ -0,0 +1,224 @@
+// 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.
+//! FFI bindings to winusb.
+use shared::minwindef::{BOOL, LPDWORD, PUCHAR, PULONG, UCHAR, ULONG, USHORT};
+use shared::usb::PUSBD_ISO_PACKET_DESCRIPTOR;
+use shared::usbspec::PUSB_CONFIGURATION_DESCRIPTOR;
+use shared::winusbio::{PWINUSB_PIPE_INFORMATION, PWINUSB_PIPE_INFORMATION_EX};
+use um::minwinbase::LPOVERLAPPED;
+use um::winnt::{HANDLE, LARGE_INTEGER, LONG, PVOID};
+pub type WINUSB_INTERFACE_HANDLE = PVOID;
+pub type PWINUSB_INTERFACE_HANDLE = *mut PVOID;
+pub type WINUSB_ISOCH_BUFFER_HANDLE = PVOID;
+pub type PWINUSB_ISOCH_BUFFER_HANDLE = *mut PVOID;
+STRUCT!{#[repr(packed)] struct WINUSB_SETUP_PACKET {
+ RequestType: UCHAR,
+ Request: UCHAR,
+ Value: USHORT,
+ Index: USHORT,
+ Length: USHORT,
+}}
+pub type PWINUSB_SETUP_PACKET = *mut WINUSB_SETUP_PACKET;
+extern "system" {
+ pub fn WinUsb_Initialize(
+ DeviceHandle: HANDLE,
+ InterfaceHandle: PWINUSB_INTERFACE_HANDLE,
+ ) -> BOOL;
+ pub fn WinUsb_Free(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ ) -> BOOL;
+ pub fn WinUsb_GetAssociatedInterface(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ AssociatedInterfaceIndex: UCHAR,
+ AssociatedInterfaceHandle: PWINUSB_INTERFACE_HANDLE,
+ ) -> BOOL;
+ pub fn WinUsb_GetDescriptor(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ DescriptorType: UCHAR,
+ Index: UCHAR,
+ LanguageID: USHORT,
+ Buffer: PUCHAR,
+ BufferLength: ULONG,
+ LengthTransferred: PULONG,
+ ) -> BOOL;
+ pub fn WinUsb_QueryInterfaceSettings(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ AlternateInterfaceNumber: UCHAR,
+ UsbAltInterfaceDescriptor: PUSB_INTERFACE_DESCRIPTOR,
+ ) -> BOOL;
+ pub fn WinUsb_QueryDeviceInformation(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ InformationType: ULONG,
+ BufferLength: PULONG,
+ Buffer: PVOID,
+ ) -> BOOL;
+ pub fn WinUsb_SetCurrentAlternateSetting(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ SettingNumber: UCHAR,
+ ) -> BOOL;
+ pub fn WinUsb_GetCurrentAlternateSetting(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ SettingNumber: PUCHAR,
+ ) -> BOOL;
+ pub fn WinUsb_QueryPipe(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ AlternateInterfaceNumber: UCHAR,
+ PipeIndex: UCHAR,
+ PipeInformationEx: PWINUSB_PIPE_INFORMATION,
+ ) -> BOOL;
+ pub fn WinUsb_QueryPipeEx(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ AlternateInterfaceNumber: UCHAR,
+ PipeIndex: UCHAR,
+ PipeInformationEx: PWINUSB_PIPE_INFORMATION_EX,
+ ) -> BOOL;
+ pub fn WinUsb_SetPipePolicy(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ PipeID: UCHAR,
+ PolicyType: ULONG,
+ ValueLength: ULONG,
+ Value: PVOID,
+ ) -> BOOL;
+ pub fn WinUsb_GetPipePolicy(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ PipeID: UCHAR,
+ PolicyType: ULONG,
+ ValueLength: PULONG,
+ Value: PVOID,
+ ) -> BOOL;
+ pub fn WinUsb_ReadPipe(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ PipeID: UCHAR,
+ Buffer: PUCHAR,
+ BufferLength: ULONG,
+ LengthTransferred: PULONG,
+ Overlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn WinUsb_WritePipe(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ PipeID: UCHAR,
+ Buffer: PUCHAR,
+ BufferLength: ULONG,
+ LengthTransferred: PULONG,
+ Overlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn WinUsb_ControlTransfer(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ SetupPacket: WINUSB_SETUP_PACKET,
+ Buffer: PUCHAR,
+ BufferLength: ULONG,
+ LengthTransferred: PULONG,
+ Overlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn WinUsb_ResetPipe(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ PipeID: UCHAR,
+ ) -> BOOL;
+ pub fn WinUsb_AbortPipe(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ PipeID: UCHAR,
+ ) -> BOOL;
+ pub fn WinUsb_FlushPipe(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ PipeID: UCHAR,
+ ) -> BOOL;
+ pub fn WinUsb_SetPowerPolicy(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ PolicyType: ULONG,
+ ValueLength: ULONG,
+ Value: PVOID,
+ ) -> BOOL;
+ pub fn WinUsb_GetPowerPolicy(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ PolicyType: ULONG,
+ ValueLength: PULONG,
+ Value: PVOID,
+ ) -> BOOL;
+ pub fn WinUsb_GetOverlappedResult(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ lpOverlapped: LPOVERLAPPED,
+ lpNumberOfBytesTransferred: LPDWORD,
+ bWait: BOOL,
+ ) -> BOOL;
+ pub fn WinUsb_ParseConfigurationDescriptor(
+ ConfigurationDescriptor: PUSB_CONFIGURATION_DESCRIPTOR,
+ StartPosition: PVOID,
+ InterfaceNumber: LONG,
+ AlternateSetting: LONG,
+ InterfaceClass: LONG,
+ InterfaceSubClass: LONG,
+ InterfaceProtocol: LONG,
+ ) -> BOOL;
+ pub fn WinUsb_ParseDescriptors(
+ DescriptorBuffer: PVOID,
+ TotalLength: ULONG,
+ StartPosition: PVOID,
+ DescriptorType: LONG,
+ ) -> BOOL;
+ pub fn WinUsb_GetCurrentFrameNumber(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ CurrentFrameNumber: PULONG,
+ TimeStamp: *mut LARGE_INTEGER,
+ ) -> BOOL;
+ pub fn WinUsb_GetAdjustedFrameNumber(
+ CurrentFrameNumber: PULONG,
+ TimeStamp: LARGE_INTEGER,
+ ) -> BOOL;
+ pub fn WinUsb_RegisterIsochBuffer(
+ InterfaceHandle: WINUSB_INTERFACE_HANDLE,
+ PipeID: UCHAR,
+ Buffer: PUCHAR,
+ BufferLength: ULONG,
+ IsochBufferHandle: PWINUSB_ISOCH_BUFFER_HANDLE,
+ ) -> BOOL;
+ pub fn WinUsb_UnregisterIsochBuffer(
+ IsochBufferHandle: WINUSB_ISOCH_BUFFER_HANDLE,
+ ) -> BOOL;
+ pub fn WinUsb_WriteIsochPipe(
+ BufferHandle: WINUSB_ISOCH_BUFFER_HANDLE,
+ Offset: ULONG,
+ Length: ULONG,
+ FrameNumber: PULONG,
+ Overlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn WinUsb_ReadIsochPipe(
+ BufferHandle: WINUSB_ISOCH_BUFFER_HANDLE,
+ Offset: ULONG,
+ Length: ULONG,
+ FrameNumber: PULONG,
+ NumberOfPackets: ULONG,
+ IsoPacketDescriptors: PUSBD_ISO_PACKET_DESCRIPTOR,
+ Overlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn WinUsb_WriteIsochPipeAsap(
+ BufferHandle: WINUSB_ISOCH_BUFFER_HANDLE,
+ Offset: ULONG,
+ Length: ULONG,
+ ContinueStream: BOOL,
+ Overlapped: LPOVERLAPPED,
+ ) -> BOOL;
+ pub fn WinUsb_ReadIsochPipeAsap(
+ BufferHandle: WINUSB_ISOCH_BUFFER_HANDLE,
+ Offset: ULONG,
+ Length: ULONG,
+ ContinueStream: BOOL,
+ NumberOfPackets: ULONG,
+ IsoPacketDescriptors: PUSBD_ISO_PACKET_DESCRIPTOR,
+ Overlapped: LPOVERLAPPED,
+ ) -> BOOL;
+}
+STRUCT!{struct USB_INTERFACE_DESCRIPTOR {
+ bLength: UCHAR,
+ bDescriptorType: UCHAR,
+ bInterfaceNumber: UCHAR,
+ bAlternateSetting: UCHAR,
+ bNumEndpoints: UCHAR,
+ bInterfaceClass: UCHAR,
+ bInterfaceSubClass: UCHAR,
+ bInterfaceProtocol: UCHAR,
+ iInterface: UCHAR,
+}}
+pub type PUSB_INTERFACE_DESCRIPTOR = *mut USB_INTERFACE_DESCRIPTOR;
diff --git a/vendor/winapi/src/um/winuser.rs b/vendor/winapi/src/um/winuser.rs
new file mode 100644
index 000000000..caeb5d95f
--- /dev/null
+++ b/vendor/winapi/src/um/winuser.rs
@@ -0,0 +1,7251 @@
+// 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.
+//! USER procedure declarations, constant definitions and macros
+use ctypes::{c_int, c_long, c_short, c_uint};
+use shared::basetsd::{
+ DWORD_PTR, INT32, INT_PTR, PDWORD_PTR, UINT16, UINT32, UINT64, UINT_PTR, ULONG_PTR,
+};
+#[cfg(target_pointer_width = "64")]
+use shared::basetsd::LONG_PTR;
+use shared::guiddef::{GUID, LPCGUID};
+use shared::minwindef::{
+ ATOM, BOOL, BYTE, DWORD, HINSTANCE, HIWORD, HKL, HMODULE, HRGN, HWINSTA, INT, LOWORD, LPARAM,
+ LPBYTE, LPDWORD, LPINT, LPVOID, LPWORD, LRESULT, PBYTE, PUINT, PULONG, TRUE, UCHAR, UINT,
+ ULONG, USHORT, WORD, WPARAM,
+};
+use shared::windef::{
+ COLORREF, DPI_AWARENESS, DPI_AWARENESS_CONTEXT, DPI_HOSTING_BEHAVIOR, HACCEL, HBITMAP, HBRUSH,
+ HCURSOR, HDC, HDESK, HHOOK, HICON, HMENU, HMONITOR, HWINEVENTHOOK, HWND, LPCRECT, LPPOINT,
+ LPRECT, POINT, RECT, SIZE,
+};
+use um::minwinbase::LPSECURITY_ATTRIBUTES;
+use um::wingdi::{
+ BLENDFUNCTION, DEVMODEA, DEVMODEW, LOGFONTA, LOGFONTW, PDISPLAY_DEVICEA, PDISPLAY_DEVICEW
+};
+use um::winnt::{
+ ACCESS_MASK, BOOLEAN, CHAR, HANDLE, LONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR, LUID,
+ PSECURITY_DESCRIPTOR, PSECURITY_INFORMATION, PVOID, SHORT, VOID, WCHAR,
+};
+use vc::limits::UINT_MAX;
+use vc::vadefs::va_list;
+pub type HDWP = HANDLE;
+pub type MENUTEMPLATEA = VOID;
+pub type MENUTEMPLATEW = VOID;
+pub type LPMENUTEMPLATEA = PVOID;
+pub type LPMENUTEMPLATEW = PVOID;
+FN!{stdcall WNDPROC(
+ HWND,
+ UINT,
+ WPARAM,
+ LPARAM,
+) -> LRESULT}
+FN!{stdcall DLGPROC(
+ HWND,
+ UINT,
+ WPARAM,
+ LPARAM,
+) -> INT_PTR}
+FN!{stdcall TIMERPROC(
+ HWND,
+ UINT,
+ UINT_PTR,
+ DWORD,
+) -> ()}
+FN!{stdcall GRAYSTRINGPROC(
+ HDC,
+ LPARAM,
+ c_int,
+) -> BOOL}
+FN!{stdcall WNDENUMPROC(
+ HWND,
+ LPARAM,
+) -> BOOL}
+FN!{stdcall HOOKPROC(
+ code: c_int,
+ wParam: WPARAM,
+ lParam: LPARAM,
+) -> LRESULT}
+FN!{stdcall SENDASYNCPROC(
+ HWND,
+ UINT,
+ ULONG_PTR,
+ LRESULT,
+) -> ()}
+FN!{stdcall PROPENUMPROCA(
+ HWND,
+ LPCSTR,
+ HANDLE,
+) -> BOOL}
+FN!{stdcall PROPENUMPROCW(
+ HWND,
+ LPCWSTR,
+ HANDLE,
+) -> BOOL}
+FN!{stdcall PROPENUMPROCEXA(
+ HWND,
+ LPSTR,
+ HANDLE,
+ ULONG_PTR,
+) -> BOOL}
+FN!{stdcall PROPENUMPROCEXW(
+ HWND,
+ LPWSTR,
+ HANDLE,
+ ULONG_PTR,
+) -> BOOL}
+FN!{stdcall EDITWORDBREAKPROCA(
+ lpch: LPSTR,
+ ichCurrent: c_int,
+ cch: c_int,
+ code: c_int,
+) -> c_int}
+FN!{stdcall EDITWORDBREAKPROCW(
+ lpch: LPWSTR,
+ ichCurrent: c_int,
+ cch: c_int,
+ code: c_int,
+) -> c_int}
+FN!{stdcall DRAWSTATEPROC(
+ hdc: HDC,
+ lData: LPARAM,
+ wData: WPARAM,
+ cx: c_int,
+ cy: c_int,
+) -> BOOL}
+FN!{stdcall NAMEENUMPROCA(
+ LPSTR,
+ LPARAM,
+) -> BOOL}
+FN!{stdcall NAMEENUMPROCW(
+ LPWSTR,
+ LPARAM,
+) -> BOOL}
+pub type WINSTAENUMPROCA = NAMEENUMPROCA;
+pub type DESKTOPENUMPROCA = NAMEENUMPROCA;
+pub type WINSTAENUMPROCW = NAMEENUMPROCW;
+pub type DESKTOPENUMPROCW = NAMEENUMPROCW;
+#[inline]
+pub fn IS_INTRESOURCE(r: ULONG_PTR) -> bool {
+ (r >> 16) == 0
+}
+#[inline]
+pub fn MAKEINTRESOURCEA(i: WORD) -> LPSTR {
+ i as ULONG_PTR as LPSTR
+}
+#[inline]
+pub fn MAKEINTRESOURCEW(i: WORD) -> LPWSTR {
+ i as ULONG_PTR as LPWSTR
+}
+pub const RT_CURSOR: LPWSTR = MAKEINTRESOURCE!(1);
+pub const RT_BITMAP: LPWSTR = MAKEINTRESOURCE!(2);
+pub const RT_ICON: LPWSTR = MAKEINTRESOURCE!(3);
+pub const RT_MENU: LPWSTR = MAKEINTRESOURCE!(4);
+pub const RT_DIALOG: LPWSTR = MAKEINTRESOURCE!(5);
+pub const RT_STRING: LPWSTR = MAKEINTRESOURCE!(6);
+pub const RT_FONTDIR: LPWSTR = MAKEINTRESOURCE!(7);
+pub const RT_FONT: LPWSTR = MAKEINTRESOURCE!(8);
+pub const RT_ACCELERATOR: LPWSTR = MAKEINTRESOURCE!(9);
+pub const RT_RCDATA: LPWSTR = MAKEINTRESOURCE!(10);
+pub const RT_MESSAGETABLE: LPWSTR = MAKEINTRESOURCE!(11);
+pub const DIFFERENCE: WORD = 11;
+pub const RT_GROUP_CURSOR: LPWSTR = MAKEINTRESOURCE!(1 + DIFFERENCE);
+pub const RT_GROUP_ICON: LPWSTR = MAKEINTRESOURCE!(3 + DIFFERENCE);
+pub const RT_VERSION: LPWSTR = MAKEINTRESOURCE!(16);
+pub const RT_DLGINCLUDE: LPWSTR = MAKEINTRESOURCE!(17);
+pub const RT_PLUGPLAY: LPWSTR = MAKEINTRESOURCE!(19);
+pub const RT_VXD: LPWSTR = MAKEINTRESOURCE!(20);
+pub const RT_ANICURSOR: LPWSTR = MAKEINTRESOURCE!(21);
+pub const RT_ANIICON: LPWSTR = MAKEINTRESOURCE!(22);
+pub const RT_HTML: LPWSTR = MAKEINTRESOURCE!(23);
+pub const RT_MANIFEST: LPWSTR = MAKEINTRESOURCE!(24);
+pub const CREATEPROCESS_MANIFEST_RESOURCE_ID: LPWSTR = MAKEINTRESOURCE!(1);
+pub const ISOLATIONAWARE_MANIFEST_RESOURCE_ID: LPWSTR = MAKEINTRESOURCE!(2);
+pub const ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID: LPWSTR
+ = MAKEINTRESOURCE!(3);
+pub const MINIMUM_RESERVED_MANIFEST_RESOURCE_ID: LPWSTR = MAKEINTRESOURCE!(1);
+pub const MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID: LPWSTR = MAKEINTRESOURCE!(16);
+extern "system" {
+ pub fn wvsprintfA(
+ _: LPSTR,
+ _: LPCSTR,
+ arglist: va_list,
+ ) -> c_int;
+ pub fn wvsprintfW(
+ _: LPWSTR,
+ _: LPCWSTR,
+ arglist: va_list,
+ ) -> c_int;
+}
+extern "C" {
+ pub fn wsprintfA(
+ _: LPSTR,
+ _: LPCSTR,
+ ...
+ ) -> c_int;
+ pub fn wsprintfW(
+ _: LPWSTR,
+ _: LPCWSTR,
+ ...
+ ) -> c_int;
+}
+pub const SETWALLPAPER_DEFAULT: LPWSTR = -1isize as LPWSTR;
+pub const SB_HORZ: UINT = 0;
+pub const SB_VERT: UINT = 1;
+pub const SB_CTL: UINT = 2;
+pub const SB_BOTH: UINT = 3;
+pub const SB_LINEUP: LPARAM = 0;
+pub const SB_LINELEFT: LPARAM = 0;
+pub const SB_LINEDOWN: LPARAM = 1;
+pub const SB_LINERIGHT: LPARAM = 1;
+pub const SB_PAGEUP: LPARAM = 2;
+pub const SB_PAGELEFT: LPARAM = 2;
+pub const SB_PAGEDOWN: LPARAM = 3;
+pub const SB_PAGERIGHT: LPARAM = 3;
+pub const SB_THUMBPOSITION: LPARAM = 4;
+pub const SB_THUMBTRACK: LPARAM = 5;
+pub const SB_TOP: LPARAM = 6;
+pub const SB_LEFT: LPARAM = 6;
+pub const SB_BOTTOM: LPARAM = 7;
+pub const SB_RIGHT: LPARAM = 7;
+pub const SB_ENDSCROLL: LPARAM = 8;
+pub const SW_HIDE: c_int = 0;
+pub const SW_SHOWNORMAL: c_int = 1;
+pub const SW_NORMAL: c_int = 1;
+pub const SW_SHOWMINIMIZED: c_int = 2;
+pub const SW_SHOWMAXIMIZED: c_int = 3;
+pub const SW_MAXIMIZE: c_int = 3;
+pub const SW_SHOWNOACTIVATE: c_int = 4;
+pub const SW_SHOW: c_int = 5;
+pub const SW_MINIMIZE: c_int = 6;
+pub const SW_SHOWMINNOACTIVE: c_int = 7;
+pub const SW_SHOWNA: c_int = 8;
+pub const SW_RESTORE: c_int = 9;
+pub const SW_SHOWDEFAULT: c_int = 10;
+pub const SW_FORCEMINIMIZE: c_int = 11;
+pub const SW_MAX: c_int = 11;
+pub const HIDE_WINDOW: c_int = 0;
+pub const SHOW_OPENWINDOW: c_int = 1;
+pub const SHOW_ICONWINDOW: c_int = 2;
+pub const SHOW_FULLSCREEN: c_int = 3;
+pub const SHOW_OPENNOACTIVATE: c_int = 4;
+pub const SW_PARENTCLOSING: LPARAM = 1;
+pub const SW_OTHERZOOM: LPARAM = 2;
+pub const SW_PARENTOPENING: LPARAM = 3;
+pub const SW_OTHERUNZOOM: LPARAM = 4;
+pub const AW_HOR_POSITIVE: DWORD = 0x00000001;
+pub const AW_HOR_NEGATIVE: DWORD = 0x00000002;
+pub const AW_VER_POSITIVE: DWORD = 0x00000004;
+pub const AW_VER_NEGATIVE: DWORD = 0x00000008;
+pub const AW_CENTER: DWORD = 0x00000010;
+pub const AW_HIDE: DWORD = 0x00010000;
+pub const AW_ACTIVATE: DWORD = 0x00020000;
+pub const AW_SLIDE: DWORD = 0x00040000;
+pub const AW_BLEND: DWORD = 0x00080000;
+pub const KF_EXTENDED: WORD = 0x0100;
+pub const KF_DLGMODE: WORD = 0x0800;
+pub const KF_MENUMODE: WORD = 0x1000;
+pub const KF_ALTDOWN: WORD = 0x2000;
+pub const KF_REPEAT: WORD = 0x4000;
+pub const KF_UP: WORD = 0x8000;
+pub const VK_LBUTTON: c_int = 0x01;
+pub const VK_RBUTTON: c_int = 0x02;
+pub const VK_CANCEL: c_int = 0x03;
+pub const VK_MBUTTON: c_int = 0x04;
+pub const VK_XBUTTON1: c_int = 0x05;
+pub const VK_XBUTTON2: c_int = 0x06;
+pub const VK_BACK: c_int = 0x08;
+pub const VK_TAB: c_int = 0x09;
+pub const VK_CLEAR: c_int = 0x0C;
+pub const VK_RETURN: c_int = 0x0D;
+pub const VK_SHIFT: c_int = 0x10;
+pub const VK_CONTROL: c_int = 0x11;
+pub const VK_MENU: c_int = 0x12;
+pub const VK_PAUSE: c_int = 0x13;
+pub const VK_CAPITAL: c_int = 0x14;
+pub const VK_KANA: c_int = 0x15;
+pub const VK_HANGEUL: c_int = 0x15;
+pub const VK_HANGUL: c_int = 0x15;
+pub const VK_JUNJA: c_int = 0x17;
+pub const VK_FINAL: c_int = 0x18;
+pub const VK_HANJA: c_int = 0x19;
+pub const VK_KANJI: c_int = 0x19;
+pub const VK_ESCAPE: c_int = 0x1B;
+pub const VK_CONVERT: c_int = 0x1C;
+pub const VK_NONCONVERT: c_int = 0x1D;
+pub const VK_ACCEPT: c_int = 0x1E;
+pub const VK_MODECHANGE: c_int = 0x1F;
+pub const VK_SPACE: c_int = 0x20;
+pub const VK_PRIOR: c_int = 0x21;
+pub const VK_NEXT: c_int = 0x22;
+pub const VK_END: c_int = 0x23;
+pub const VK_HOME: c_int = 0x24;
+pub const VK_LEFT: c_int = 0x25;
+pub const VK_UP: c_int = 0x26;
+pub const VK_RIGHT: c_int = 0x27;
+pub const VK_DOWN: c_int = 0x28;
+pub const VK_SELECT: c_int = 0x29;
+pub const VK_PRINT: c_int = 0x2A;
+pub const VK_EXECUTE: c_int = 0x2B;
+pub const VK_SNAPSHOT: c_int = 0x2C;
+pub const VK_INSERT: c_int = 0x2D;
+pub const VK_DELETE: c_int = 0x2E;
+pub const VK_HELP: c_int = 0x2F;
+pub const VK_LWIN: c_int = 0x5B;
+pub const VK_RWIN: c_int = 0x5C;
+pub const VK_APPS: c_int = 0x5D;
+pub const VK_SLEEP: c_int = 0x5F;
+pub const VK_NUMPAD0: c_int = 0x60;
+pub const VK_NUMPAD1: c_int = 0x61;
+pub const VK_NUMPAD2: c_int = 0x62;
+pub const VK_NUMPAD3: c_int = 0x63;
+pub const VK_NUMPAD4: c_int = 0x64;
+pub const VK_NUMPAD5: c_int = 0x65;
+pub const VK_NUMPAD6: c_int = 0x66;
+pub const VK_NUMPAD7: c_int = 0x67;
+pub const VK_NUMPAD8: c_int = 0x68;
+pub const VK_NUMPAD9: c_int = 0x69;
+pub const VK_MULTIPLY: c_int = 0x6A;
+pub const VK_ADD: c_int = 0x6B;
+pub const VK_SEPARATOR: c_int = 0x6C;
+pub const VK_SUBTRACT: c_int = 0x6D;
+pub const VK_DECIMAL: c_int = 0x6E;
+pub const VK_DIVIDE: c_int = 0x6F;
+pub const VK_F1: c_int = 0x70;
+pub const VK_F2: c_int = 0x71;
+pub const VK_F3: c_int = 0x72;
+pub const VK_F4: c_int = 0x73;
+pub const VK_F5: c_int = 0x74;
+pub const VK_F6: c_int = 0x75;
+pub const VK_F7: c_int = 0x76;
+pub const VK_F8: c_int = 0x77;
+pub const VK_F9: c_int = 0x78;
+pub const VK_F10: c_int = 0x79;
+pub const VK_F11: c_int = 0x7A;
+pub const VK_F12: c_int = 0x7B;
+pub const VK_F13: c_int = 0x7C;
+pub const VK_F14: c_int = 0x7D;
+pub const VK_F15: c_int = 0x7E;
+pub const VK_F16: c_int = 0x7F;
+pub const VK_F17: c_int = 0x80;
+pub const VK_F18: c_int = 0x81;
+pub const VK_F19: c_int = 0x82;
+pub const VK_F20: c_int = 0x83;
+pub const VK_F21: c_int = 0x84;
+pub const VK_F22: c_int = 0x85;
+pub const VK_F23: c_int = 0x86;
+pub const VK_F24: c_int = 0x87;
+pub const VK_NAVIGATION_VIEW: c_int = 0x88;
+pub const VK_NAVIGATION_MENU: c_int = 0x89;
+pub const VK_NAVIGATION_UP: c_int = 0x8A;
+pub const VK_NAVIGATION_DOWN: c_int = 0x8B;
+pub const VK_NAVIGATION_LEFT: c_int = 0x8C;
+pub const VK_NAVIGATION_RIGHT: c_int = 0x8D;
+pub const VK_NAVIGATION_ACCEPT: c_int = 0x8E;
+pub const VK_NAVIGATION_CANCEL: c_int = 0x8F;
+pub const VK_NUMLOCK: c_int = 0x90;
+pub const VK_SCROLL: c_int = 0x91;
+pub const VK_OEM_NEC_EQUAL: c_int = 0x92;
+pub const VK_OEM_FJ_JISHO: c_int = 0x92;
+pub const VK_OEM_FJ_MASSHOU: c_int = 0x93;
+pub const VK_OEM_FJ_TOUROKU: c_int = 0x94;
+pub const VK_OEM_FJ_LOYA: c_int = 0x95;
+pub const VK_OEM_FJ_ROYA: c_int = 0x96;
+pub const VK_LSHIFT: c_int = 0xA0;
+pub const VK_RSHIFT: c_int = 0xA1;
+pub const VK_LCONTROL: c_int = 0xA2;
+pub const VK_RCONTROL: c_int = 0xA3;
+pub const VK_LMENU: c_int = 0xA4;
+pub const VK_RMENU: c_int = 0xA5;
+pub const VK_BROWSER_BACK: c_int = 0xA6;
+pub const VK_BROWSER_FORWARD: c_int = 0xA7;
+pub const VK_BROWSER_REFRESH: c_int = 0xA8;
+pub const VK_BROWSER_STOP: c_int = 0xA9;
+pub const VK_BROWSER_SEARCH: c_int = 0xAA;
+pub const VK_BROWSER_FAVORITES: c_int = 0xAB;
+pub const VK_BROWSER_HOME: c_int = 0xAC;
+pub const VK_VOLUME_MUTE: c_int = 0xAD;
+pub const VK_VOLUME_DOWN: c_int = 0xAE;
+pub const VK_VOLUME_UP: c_int = 0xAF;
+pub const VK_MEDIA_NEXT_TRACK: c_int = 0xB0;
+pub const VK_MEDIA_PREV_TRACK: c_int = 0xB1;
+pub const VK_MEDIA_STOP: c_int = 0xB2;
+pub const VK_MEDIA_PLAY_PAUSE: c_int = 0xB3;
+pub const VK_LAUNCH_MAIL: c_int = 0xB4;
+pub const VK_LAUNCH_MEDIA_SELECT: c_int = 0xB5;
+pub const VK_LAUNCH_APP1: c_int = 0xB6;
+pub const VK_LAUNCH_APP2: c_int = 0xB7;
+pub const VK_OEM_1: c_int = 0xBA;
+pub const VK_OEM_PLUS: c_int = 0xBB;
+pub const VK_OEM_COMMA: c_int = 0xBC;
+pub const VK_OEM_MINUS: c_int = 0xBD;
+pub const VK_OEM_PERIOD: c_int = 0xBE;
+pub const VK_OEM_2: c_int = 0xBF;
+pub const VK_OEM_3: c_int = 0xC0;
+pub const VK_GAMEPAD_A: c_int = 0xC3;
+pub const VK_GAMEPAD_B: c_int = 0xC4;
+pub const VK_GAMEPAD_X: c_int = 0xC5;
+pub const VK_GAMEPAD_Y: c_int = 0xC6;
+pub const VK_GAMEPAD_RIGHT_SHOULDER: c_int = 0xC7;
+pub const VK_GAMEPAD_LEFT_SHOULDER: c_int = 0xC8;
+pub const VK_GAMEPAD_LEFT_TRIGGER: c_int = 0xC9;
+pub const VK_GAMEPAD_RIGHT_TRIGGER: c_int = 0xCA;
+pub const VK_GAMEPAD_DPAD_UP: c_int = 0xCB;
+pub const VK_GAMEPAD_DPAD_DOWN: c_int = 0xCC;
+pub const VK_GAMEPAD_DPAD_LEFT: c_int = 0xCD;
+pub const VK_GAMEPAD_DPAD_RIGHT: c_int = 0xCE;
+pub const VK_GAMEPAD_MENU: c_int = 0xCF;
+pub const VK_GAMEPAD_VIEW: c_int = 0xD0;
+pub const VK_GAMEPAD_LEFT_THUMBSTICK_BUTTON: c_int = 0xD1;
+pub const VK_GAMEPAD_RIGHT_THUMBSTICK_BUTTON: c_int = 0xD2;
+pub const VK_GAMEPAD_LEFT_THUMBSTICK_UP: c_int = 0xD3;
+pub const VK_GAMEPAD_LEFT_THUMBSTICK_DOWN: c_int = 0xD4;
+pub const VK_GAMEPAD_LEFT_THUMBSTICK_RIGHT: c_int = 0xD5;
+pub const VK_GAMEPAD_LEFT_THUMBSTICK_LEFT: c_int = 0xD6;
+pub const VK_GAMEPAD_RIGHT_THUMBSTICK_UP: c_int = 0xD7;
+pub const VK_GAMEPAD_RIGHT_THUMBSTICK_DOWN: c_int = 0xD8;
+pub const VK_GAMEPAD_RIGHT_THUMBSTICK_RIGHT: c_int = 0xD9;
+pub const VK_GAMEPAD_RIGHT_THUMBSTICK_LEFT: c_int = 0xDA;
+pub const VK_OEM_4: c_int = 0xDB;
+pub const VK_OEM_5: c_int = 0xDC;
+pub const VK_OEM_6: c_int = 0xDD;
+pub const VK_OEM_7: c_int = 0xDE;
+pub const VK_OEM_8: c_int = 0xDF;
+pub const VK_OEM_AX: c_int = 0xE1;
+pub const VK_OEM_102: c_int = 0xE2;
+pub const VK_ICO_HELP: c_int = 0xE3;
+pub const VK_ICO_00: c_int = 0xE4;
+pub const VK_PROCESSKEY: c_int = 0xE5;
+pub const VK_ICO_CLEAR: c_int = 0xE6;
+pub const VK_PACKET: c_int = 0xE7;
+pub const VK_OEM_RESET: c_int = 0xE9;
+pub const VK_OEM_JUMP: c_int = 0xEA;
+pub const VK_OEM_PA1: c_int = 0xEB;
+pub const VK_OEM_PA2: c_int = 0xEC;
+pub const VK_OEM_PA3: c_int = 0xED;
+pub const VK_OEM_WSCTRL: c_int = 0xEE;
+pub const VK_OEM_CUSEL: c_int = 0xEF;
+pub const VK_OEM_ATTN: c_int = 0xF0;
+pub const VK_OEM_FINISH: c_int = 0xF1;
+pub const VK_OEM_COPY: c_int = 0xF2;
+pub const VK_OEM_AUTO: c_int = 0xF3;
+pub const VK_OEM_ENLW: c_int = 0xF4;
+pub const VK_OEM_BACKTAB: c_int = 0xF5;
+pub const VK_ATTN: c_int = 0xF6;
+pub const VK_CRSEL: c_int = 0xF7;
+pub const VK_EXSEL: c_int = 0xF8;
+pub const VK_EREOF: c_int = 0xF9;
+pub const VK_PLAY: c_int = 0xFA;
+pub const VK_ZOOM: c_int = 0xFB;
+pub const VK_NONAME: c_int = 0xFC;
+pub const VK_PA1: c_int = 0xFD;
+pub const VK_OEM_CLEAR: c_int = 0xFE;
+pub const WH_MIN: c_int = -1;
+pub const WH_MSGFILTER: c_int = -1;
+pub const WH_JOURNALRECORD: c_int = 0;
+pub const WH_JOURNALPLAYBACK: c_int = 1;
+pub const WH_KEYBOARD: c_int = 2;
+pub const WH_GETMESSAGE: c_int = 3;
+pub const WH_CALLWNDPROC: c_int = 4;
+pub const WH_CBT: c_int = 5;
+pub const WH_SYSMSGFILTER: c_int = 6;
+pub const WH_MOUSE: c_int = 7;
+pub const WH_HARDWARE: c_int = 8;
+pub const WH_DEBUG: c_int = 9;
+pub const WH_SHELL: c_int = 10;
+pub const WH_FOREGROUNDIDLE: c_int = 11;
+pub const WH_CALLWNDPROCRET: c_int = 12;
+pub const WH_KEYBOARD_LL: c_int = 13;
+pub const WH_MOUSE_LL: c_int = 14;
+pub const WH_MAX: c_int = 14;
+pub const WH_MINHOOK: c_int = WH_MIN;
+pub const WH_MAXHOOK: c_int = WH_MAX;
+pub const HC_ACTION: c_int = 0;
+pub const HC_GETNEXT: c_int = 1;
+pub const HC_SKIP: c_int = 2;
+pub const HC_NOREMOVE: c_int = 3;
+pub const HC_NOREM: c_int = HC_NOREMOVE;
+pub const HC_SYSMODALON: c_int = 4;
+pub const HC_SYSMODALOFF: c_int = 5;
+pub const HCBT_MOVESIZE: c_int = 0;
+pub const HCBT_MINMAX: c_int = 1;
+pub const HCBT_QS: c_int = 2;
+pub const HCBT_CREATEWND: c_int = 3;
+pub const HCBT_DESTROYWND: c_int = 4;
+pub const HCBT_ACTIVATE: c_int = 5;
+pub const HCBT_CLICKSKIPPED: c_int = 6;
+pub const HCBT_KEYSKIPPED: c_int = 7;
+pub const HCBT_SYSCOMMAND: c_int = 8;
+pub const HCBT_SETFOCUS: c_int = 9;
+STRUCT!{struct CBT_CREATEWNDA {
+ lpcs: *mut CREATESTRUCTA,
+ hwndInsertAfter: HWND,
+}}
+pub type LPCBT_CREATEWNDA = *mut CBT_CREATEWNDA;
+STRUCT!{struct CBT_CREATEWNDW {
+ lpcs: *mut CREATESTRUCTW,
+ hwndInsertAfter: HWND,
+}}
+pub type LPCBT_CREATEWNDW = *mut CBT_CREATEWNDW;
+STRUCT!{struct CBTACTIVATESTRUCT {
+ fMouse: BOOL,
+ hWndActive: HWND,
+}}
+pub type LPCBTACTIVATESTRUCT = *mut CBTACTIVATESTRUCT;
+STRUCT!{struct WTSSESSION_NOTIFICATION {
+ cbSize: DWORD,
+ dwSessionId: DWORD,
+}}
+pub type PWTSSESSION_NOTIFICATION = *mut WTSSESSION_NOTIFICATION;
+pub const WTS_CONSOLE_CONNECT: WPARAM = 0x1;
+pub const WTS_CONSOLE_DISCONNECT: WPARAM = 0x2;
+pub const WTS_REMOTE_CONNECT: WPARAM = 0x3;
+pub const WTS_REMOTE_DISCONNECT: WPARAM = 0x4;
+pub const WTS_SESSION_LOGON: WPARAM = 0x5;
+pub const WTS_SESSION_LOGOFF: WPARAM = 0x6;
+pub const WTS_SESSION_LOCK: WPARAM = 0x7;
+pub const WTS_SESSION_UNLOCK: WPARAM = 0x8;
+pub const WTS_SESSION_REMOTE_CONTROL: WPARAM = 0x9;
+pub const WTS_SESSION_CREATE: WPARAM = 0xa;
+pub const WTS_SESSION_TERMINATE: WPARAM = 0xb;
+pub const MSGF_DIALOGBOX: c_int = 0;
+pub const MSGF_MESSAGEBOX: c_int = 1;
+pub const MSGF_MENU: c_int = 2;
+pub const MSGF_SCROLLBAR: c_int = 5;
+pub const MSGF_NEXTWINDOW: c_int = 6;
+pub const MSGF_MAX: c_int = 8;
+pub const MSGF_USER: c_int = 4096;
+pub const HSHELL_WINDOWCREATED: c_int = 1;
+pub const HSHELL_WINDOWDESTROYED: c_int = 2;
+pub const HSHELL_ACTIVATESHELLWINDOW: c_int = 3;
+pub const HSHELL_WINDOWACTIVATED: c_int = 4;
+pub const HSHELL_GETMINRECT: c_int = 5;
+pub const HSHELL_REDRAW: c_int = 6;
+pub const HSHELL_TASKMAN: c_int = 7;
+pub const HSHELL_LANGUAGE: c_int = 8;
+pub const HSHELL_SYSMENU: c_int = 9;
+pub const HSHELL_ENDTASK: c_int = 10;
+pub const HSHELL_ACCESSIBILITYSTATE: c_int = 11;
+pub const HSHELL_APPCOMMAND: c_int = 12;
+pub const HSHELL_WINDOWREPLACED: c_int = 13;
+pub const HSHELL_WINDOWREPLACING: c_int = 14;
+pub const HSHELL_MONITORCHANGED: c_int = 16;
+pub const HSHELL_HIGHBIT: c_int = 0x8000;
+pub const HSHELL_FLASH: c_int = HSHELL_REDRAW | HSHELL_HIGHBIT;
+pub const HSHELL_RUDEAPPACTIVATED: c_int = HSHELL_WINDOWACTIVATED | HSHELL_HIGHBIT;
+pub const APPCOMMAND_BROWSER_BACKWARD: c_short = 1;
+pub const APPCOMMAND_BROWSER_FORWARD: c_short = 2;
+pub const APPCOMMAND_BROWSER_REFRESH: c_short = 3;
+pub const APPCOMMAND_BROWSER_STOP: c_short = 4;
+pub const APPCOMMAND_BROWSER_SEARCH: c_short = 5;
+pub const APPCOMMAND_BROWSER_FAVORITES: c_short = 6;
+pub const APPCOMMAND_BROWSER_HOME: c_short = 7;
+pub const APPCOMMAND_VOLUME_MUTE: c_short = 8;
+pub const APPCOMMAND_VOLUME_DOWN: c_short = 9;
+pub const APPCOMMAND_VOLUME_UP: c_short = 10;
+pub const APPCOMMAND_MEDIA_NEXTTRACK: c_short = 11;
+pub const APPCOMMAND_MEDIA_PREVIOUSTRACK: c_short = 12;
+pub const APPCOMMAND_MEDIA_STOP: c_short = 13;
+pub const APPCOMMAND_MEDIA_PLAY_PAUSE: c_short = 14;
+pub const APPCOMMAND_LAUNCH_MAIL: c_short = 15;
+pub const APPCOMMAND_LAUNCH_MEDIA_SELECT: c_short = 16;
+pub const APPCOMMAND_LAUNCH_APP1: c_short = 17;
+pub const APPCOMMAND_LAUNCH_APP2: c_short = 18;
+pub const APPCOMMAND_BASS_DOWN: c_short = 19;
+pub const APPCOMMAND_BASS_BOOST: c_short = 20;
+pub const APPCOMMAND_BASS_UP: c_short = 21;
+pub const APPCOMMAND_TREBLE_DOWN: c_short = 22;
+pub const APPCOMMAND_TREBLE_UP: c_short = 23;
+pub const APPCOMMAND_MICROPHONE_VOLUME_MUTE: c_short = 24;
+pub const APPCOMMAND_MICROPHONE_VOLUME_DOWN: c_short = 25;
+pub const APPCOMMAND_MICROPHONE_VOLUME_UP: c_short = 26;
+pub const APPCOMMAND_HELP: c_short = 27;
+pub const APPCOMMAND_FIND: c_short = 28;
+pub const APPCOMMAND_NEW: c_short = 29;
+pub const APPCOMMAND_OPEN: c_short = 30;
+pub const APPCOMMAND_CLOSE: c_short = 31;
+pub const APPCOMMAND_SAVE: c_short = 32;
+pub const APPCOMMAND_PRINT: c_short = 33;
+pub const APPCOMMAND_UNDO: c_short = 34;
+pub const APPCOMMAND_REDO: c_short = 35;
+pub const APPCOMMAND_COPY: c_short = 36;
+pub const APPCOMMAND_CUT: c_short = 37;
+pub const APPCOMMAND_PASTE: c_short = 38;
+pub const APPCOMMAND_REPLY_TO_MAIL: c_short = 39;
+pub const APPCOMMAND_FORWARD_MAIL: c_short = 40;
+pub const APPCOMMAND_SEND_MAIL: c_short = 41;
+pub const APPCOMMAND_SPELL_CHECK: c_short = 42;
+pub const APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE: c_short = 43;
+pub const APPCOMMAND_MIC_ON_OFF_TOGGLE: c_short = 44;
+pub const APPCOMMAND_CORRECTION_LIST: c_short = 45;
+pub const APPCOMMAND_MEDIA_PLAY: c_short = 46;
+pub const APPCOMMAND_MEDIA_PAUSE: c_short = 47;
+pub const APPCOMMAND_MEDIA_RECORD: c_short = 48;
+pub const APPCOMMAND_MEDIA_FAST_FORWARD: c_short = 49;
+pub const APPCOMMAND_MEDIA_REWIND: c_short = 50;
+pub const APPCOMMAND_MEDIA_CHANNEL_UP: c_short = 51;
+pub const APPCOMMAND_MEDIA_CHANNEL_DOWN: c_short = 52;
+pub const APPCOMMAND_DELETE: c_short = 53;
+pub const APPCOMMAND_DWM_FLIP3D: c_short = 54;
+pub const FAPPCOMMAND_MOUSE: WORD = 0x8000;
+pub const FAPPCOMMAND_KEY: WORD = 0;
+pub const FAPPCOMMAND_OEM: WORD = 0x1000;
+pub const FAPPCOMMAND_MASK: WORD = 0xF000;
+#[inline]
+pub fn GET_APPCOMMAND_LPARAM(lParam: LPARAM) -> c_short {
+ (HIWORD(lParam as DWORD) & !FAPPCOMMAND_MASK) as c_short
+}
+#[inline]
+pub fn GET_DEVICE_LPARAM(lParam: LPARAM) -> WORD {
+ HIWORD(lParam as DWORD) & FAPPCOMMAND_MASK
+}
+pub use self::GET_DEVICE_LPARAM as GET_MOUSEORKEY_LPARAM;
+pub use shared::minwindef::LOWORD as GET_FLAGS_LPARAM;
+pub use self::GET_FLAGS_LPARAM as GET_KEYSTATE_LPARAM;
+STRUCT!{struct SHELLHOOKINFO {
+ hwnd: HWND,
+ rc: RECT,
+}}
+pub type LPSHELLHOOKINFO = *mut SHELLHOOKINFO;
+STRUCT!{struct EVENTMSG {
+ message: UINT,
+ paramL: UINT,
+ paramH: UINT,
+ time: DWORD,
+ hwnd: HWND,
+}}
+pub type PEVENTMSGMSG = *mut EVENTMSG;
+pub type NPEVENTMSGMSG = *mut EVENTMSG;
+pub type LPEVENTMSGMSG = *mut EVENTMSG;
+pub type PEVENTMSG = *mut EVENTMSG;
+pub type NPEVENTMSG = *mut EVENTMSG;
+pub type LPEVENTMSG = *mut EVENTMSG;
+STRUCT!{struct CWPSTRUCT {
+ lParam: LPARAM,
+ wParam: WPARAM,
+ message: UINT,
+ hwnd: HWND,
+}}
+pub type PCWPSTRUCT = *mut CWPSTRUCT;
+pub type NPCWPSTRUCT = *mut CWPSTRUCT;
+pub type LPCWPSTRUCT = *mut CWPSTRUCT;
+STRUCT!{struct CWPRETSTRUCT {
+ lResult: LRESULT,
+ lParam: LPARAM,
+ wParam: WPARAM,
+ message: UINT,
+ hwnd: HWND,
+}}
+pub type PCWPRETSTRUCT = *mut CWPRETSTRUCT;
+pub type NPCWPRETSTRUCT = *mut CWPRETSTRUCT;
+pub type LPCWPRETSTRUCT = *mut CWPRETSTRUCT;
+pub const LLKHF_EXTENDED: DWORD = (KF_EXTENDED >> 8) as u32;
+pub const LLKHF_INJECTED: DWORD = 0x00000010;
+pub const LLKHF_ALTDOWN: DWORD = (KF_ALTDOWN >> 8) as u32;
+pub const LLKHF_UP: DWORD = (KF_UP >> 8) as u32;
+pub const LLKHF_LOWER_IL_INJECTED: DWORD = 0x00000002;
+pub const LLMHF_INJECTED: DWORD = 0x00000001;
+pub const LLMHF_LOWER_IL_INJECTED: DWORD = 0x00000002;
+STRUCT!{struct KBDLLHOOKSTRUCT {
+ vkCode: DWORD,
+ scanCode: DWORD,
+ flags: DWORD,
+ time: DWORD,
+ dwExtraInfo: ULONG_PTR,
+}}
+pub type LPKBDLLHOOKSTRUCT = *mut KBDLLHOOKSTRUCT;
+pub type PKBDLLHOOKSTRUCT = *mut KBDLLHOOKSTRUCT;
+STRUCT!{struct MSLLHOOKSTRUCT {
+ pt: POINT,
+ mouseData: DWORD,
+ flags: DWORD,
+ time: DWORD,
+ dwExtraInfo: ULONG_PTR,
+}}
+pub type LPMSLLHOOKSTRUCT = *mut MSLLHOOKSTRUCT;
+pub type PMSLLHOOKSTRUCT = *mut MSLLHOOKSTRUCT;
+STRUCT!{struct DEBUGHOOKINFO {
+ idThread: DWORD,
+ idThreadInstaller: DWORD,
+ lParam: LPARAM,
+ wParam: WPARAM,
+ code: c_int,
+}}
+pub type PDEBUGHOOKINFO = *mut DEBUGHOOKINFO;
+pub type NPDEBUGHOOKINFO = *mut DEBUGHOOKINFO;
+pub type LPDEBUGHOOKINFO = *mut DEBUGHOOKINFO;
+STRUCT!{struct MOUSEHOOKSTRUCT {
+ pt: POINT,
+ hwnd: HWND,
+ wHitTestCode: UINT,
+ dwExtraInfo: ULONG_PTR,
+}}
+pub type LPMOUSEHOOKSTRUCT = *mut MOUSEHOOKSTRUCT;
+pub type PMOUSEHOOKSTRUCT = *mut MOUSEHOOKSTRUCT;
+STRUCT!{struct MOUSEHOOKSTRUCTEX {
+ parent: MOUSEHOOKSTRUCT,
+ mouseData: DWORD,
+}}
+pub type LPMOUSEHOOKSTRUCTEX = *mut MOUSEHOOKSTRUCTEX;
+pub type PMOUSEHOOKSTRUCTEX = *mut MOUSEHOOKSTRUCTEX;
+STRUCT!{struct HARDWAREHOOKSTRUCT {
+ hwnd: HWND,
+ message: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+}}
+pub type LPHARDWAREHOOKSTRUCT = *mut HARDWAREHOOKSTRUCT;
+pub type PHARDWAREHOOKSTRUCT = *mut HARDWAREHOOKSTRUCT;
+pub const HKL_PREV: HKL = 0 as HKL;
+pub const HKL_NEXT: HKL = 1 as HKL;
+pub const KLF_ACTIVATE: UINT = 0x00000001;
+pub const KLF_SUBSTITUTE_OK: UINT = 0x00000002;
+pub const KLF_REORDER: UINT = 0x00000008;
+pub const KLF_REPLACELANG: UINT = 0x00000010;
+pub const KLF_NOTELLSHELL: UINT = 0x00000080;
+pub const KLF_SETFORPROCESS: UINT = 0x00000100;
+pub const KLF_SHIFTLOCK: UINT = 0x00010000;
+pub const KLF_RESET: UINT = 0x40000000;
+pub const INPUTLANGCHANGE_SYSCHARSET: WPARAM = 0x0001;
+pub const INPUTLANGCHANGE_FORWARD: WPARAM = 0x0002;
+pub const INPUTLANGCHANGE_BACKWARD: WPARAM = 0x0004;
+pub const KL_NAMELENGTH: usize = 9;
+extern "system" {
+ pub fn LoadKeyboardLayoutA(
+ pwszKLID: LPCSTR,
+ Flags: DWORD,
+ ) -> HKL;
+ pub fn LoadKeyboardLayoutW(
+ pwszKLID: LPCWSTR,
+ Flags: DWORD,
+ ) -> HKL;
+ pub fn ActivateKeyboardLayout(
+ hkl: HKL,
+ Flags: UINT,
+ ) -> HKL;
+ pub fn ToUnicodeEx(
+ wVirtKey: UINT,
+ wScanCode: UINT,
+ lpKeyState: *const BYTE,
+ pwszBuff: LPWSTR,
+ cchBuff: c_int,
+ wFlags: UINT,
+ dwhkl: HKL,
+ ) -> c_int;
+ pub fn UnloadKeyboardLayout(
+ hkl: HKL,
+ ) -> BOOL;
+ pub fn GetKeyboardLayoutNameA(
+ pwszKLID: LPSTR,
+ ) -> BOOL;
+ pub fn GetKeyboardLayoutNameW(
+ pwszKLID: LPWSTR,
+ ) -> BOOL;
+ pub fn GetKeyboardLayoutList(
+ nBuff: c_int,
+ lpList: *mut HKL,
+ ) -> c_int;
+ pub fn GetKeyboardLayout(
+ idThread: DWORD,
+ ) -> HKL;
+}
+STRUCT!{struct MOUSEMOVEPOINT {
+ x: c_int,
+ y: c_int,
+ time: DWORD,
+ dwExtraInfo: ULONG_PTR,
+}}
+pub type PMOUSEMOVEPOINT = *mut MOUSEMOVEPOINT;
+pub type LPMOUSEMOVEPOINT = *mut MOUSEMOVEPOINT;
+pub const GMMP_USE_DISPLAY_POINTS: DWORD = 1;
+pub const GMMP_USE_HIGH_RESOLUTION_POINTS: DWORD = 2;
+extern "system" {
+ pub fn GetMouseMovePointsEx(
+ cbSize: UINT,
+ lppt: LPMOUSEMOVEPOINT,
+ lpptBuf: LPMOUSEMOVEPOINT,
+ nBufPoints: c_int,
+ resolution: DWORD,
+ ) -> c_int;
+}
+pub const DESKTOP_READOBJECTS: DWORD = 0x0001;
+pub const DESKTOP_CREATEWINDOW: DWORD = 0x0002;
+pub const DESKTOP_CREATEMENU: DWORD = 0x0004;
+pub const DESKTOP_HOOKCONTROL: DWORD = 0x0008;
+pub const DESKTOP_JOURNALRECORD: DWORD = 0x0010;
+pub const DESKTOP_JOURNALPLAYBACK: DWORD = 0x0020;
+pub const DESKTOP_ENUMERATE: DWORD = 0x0040;
+pub const DESKTOP_WRITEOBJECTS: DWORD = 0x0080;
+pub const DESKTOP_SWITCHDESKTOP: DWORD = 0x0100;
+pub const DF_ALLOWOTHERACCOUNTHOOK: DWORD = 0x0001;
+extern "system" {
+ pub fn CreateDesktopA(
+ lpszDesktop: LPCSTR,
+ lpszDevice: LPCSTR,
+ pDevmode: *mut DEVMODEA,
+ dwFlags: DWORD,
+ dwDesiredAccess: ACCESS_MASK,
+ lpsa: LPSECURITY_ATTRIBUTES,
+ ) -> HDESK;
+ pub fn CreateDesktopW(
+ lpszDesktop: LPCWSTR,
+ lpszDevice: LPCWSTR,
+ pDevmode: *mut DEVMODEW,
+ dwFlags: DWORD,
+ dwDesiredAccess: ACCESS_MASK,
+ lpsa: LPSECURITY_ATTRIBUTES,
+ ) -> HDESK;
+ pub fn CreateDesktopExA(
+ lpszDesktop: LPCSTR,
+ lpszDevice: LPCSTR,
+ pDevmode: *mut DEVMODEA,
+ dwFlags: DWORD,
+ dwDesiredAccess: ACCESS_MASK,
+ lpsa: LPSECURITY_ATTRIBUTES,
+ ulHeapSize: ULONG,
+ pvoid: PVOID,
+ ) -> HDESK;
+ pub fn CreateDesktopExW(
+ lpszDesktop: LPCWSTR,
+ lpszDevice: LPCWSTR,
+ pDevmode: *mut DEVMODEW,
+ dwFlags: DWORD,
+ dwDesiredAccess: ACCESS_MASK,
+ lpsa: LPSECURITY_ATTRIBUTES,
+ ulHeapSize: ULONG,
+ pvoid: PVOID,
+ ) -> HDESK;
+ pub fn OpenDesktopA(
+ lpszDesktop: LPCSTR,
+ dwFlags: DWORD,
+ fInherit: BOOL,
+ dwDesiredAccess: ACCESS_MASK,
+ ) -> HDESK;
+ pub fn OpenDesktopW(
+ lpszDesktop: LPCWSTR,
+ dwFlags: DWORD,
+ fInherit: BOOL,
+ dwDesiredAccess: ACCESS_MASK,
+ ) -> HDESK;
+ pub fn OpenInputDesktop(
+ dwFlags: DWORD,
+ fInherit: BOOL,
+ dwDesiredAccess: ACCESS_MASK,
+ ) -> HDESK;
+ pub fn EnumDesktopsA(
+ hwinsta: HWINSTA,
+ lpEnumFunc: DESKTOPENUMPROCA,
+ lParam: LPARAM,
+ ) -> BOOL;
+ pub fn EnumDesktopsW(
+ hwinsta: HWINSTA,
+ lpEnumFunc: DESKTOPENUMPROCW,
+ lParam: LPARAM,
+ ) -> BOOL;
+ pub fn EnumDesktopWindows(
+ hDesktop: HDESK,
+ lpfn: WNDENUMPROC,
+ lParam: LPARAM,
+ ) -> BOOL;
+ pub fn SwitchDesktop(
+ hDesktop: HDESK,
+ ) -> BOOL;
+ pub fn SetThreadDesktop(
+ hDesktop: HDESK,
+ ) -> BOOL;
+ pub fn CloseDesktop(
+ hDesktop: HDESK,
+ ) -> BOOL;
+ pub fn GetThreadDesktop(
+ dwThreadId: DWORD,
+ ) -> HDESK;
+}
+pub const WINSTA_ENUMDESKTOPS: DWORD = 0x0001;
+pub const WINSTA_READATTRIBUTES: DWORD = 0x0002;
+pub const WINSTA_ACCESSCLIPBOARD: DWORD = 0x0004;
+pub const WINSTA_CREATEDESKTOP: DWORD = 0x0008;
+pub const WINSTA_WRITEATTRIBUTES: DWORD = 0x0010;
+pub const WINSTA_ACCESSGLOBALATOMS: DWORD = 0x0020;
+pub const WINSTA_EXITWINDOWS: DWORD = 0x0040;
+pub const WINSTA_ENUMERATE: DWORD = 0x0100;
+pub const WINSTA_READSCREEN: DWORD = 0x0200;
+pub const WINSTA_ALL_ACCESS: DWORD = WINSTA_ENUMDESKTOPS | WINSTA_READATTRIBUTES
+ | WINSTA_ACCESSCLIPBOARD | WINSTA_CREATEDESKTOP | WINSTA_WRITEATTRIBUTES
+ | WINSTA_ACCESSGLOBALATOMS | WINSTA_EXITWINDOWS | WINSTA_ENUMERATE | WINSTA_READSCREEN;
+pub const CWF_CREATE_ONLY: DWORD = 0x00000001;
+pub const WSF_VISIBLE: DWORD = 0x0001;
+extern "system" {
+ pub fn CreateWindowStationA(
+ lpwinsta: LPCSTR,
+ dwFlags: DWORD,
+ dwDesiredAccess: ACCESS_MASK,
+ lpsa: LPSECURITY_ATTRIBUTES,
+ ) -> HWINSTA;
+ pub fn CreateWindowStationW(
+ lpwinsta: LPCWSTR,
+ dwFlags: DWORD,
+ dwDesiredAccess: ACCESS_MASK,
+ lpsa: LPSECURITY_ATTRIBUTES,
+ ) -> HWINSTA;
+ pub fn OpenWindowStationA(
+ lpszWinSta: LPCSTR,
+ fInherit: BOOL,
+ dwDesiredAccess: ACCESS_MASK,
+ ) -> HWINSTA;
+ pub fn OpenWindowStationW(
+ lpszWinSta: LPCWSTR,
+ fInherit: BOOL,
+ dwDesiredAccess: ACCESS_MASK,
+ ) -> HWINSTA;
+ pub fn EnumWindowStationsA(
+ lpEnumFunc: WINSTAENUMPROCA,
+ lParam: LPARAM,
+ ) -> BOOL;
+ pub fn EnumWindowStationsW(
+ lpEnumFunc: WINSTAENUMPROCW,
+ lParam: LPARAM,
+ ) -> BOOL;
+ pub fn CloseWindowStation(
+ hWinSta: HWINSTA,
+ ) -> BOOL;
+ pub fn SetProcessWindowStation(
+ hWinSta: HWINSTA,
+ ) -> BOOL;
+ pub fn GetProcessWindowStation() -> HWINSTA;
+ pub fn SetUserObjectSecurity(
+ hObj: HANDLE,
+ pSIRequested: PSECURITY_INFORMATION,
+ pSID: PSECURITY_DESCRIPTOR,
+ ) -> BOOL;
+ pub fn GetUserObjectSecurity(
+ hObj: HANDLE,
+ pSIRequested: PSECURITY_INFORMATION,
+ pSID: PSECURITY_DESCRIPTOR,
+ nLength: DWORD,
+ lpnLengthNeeded: LPDWORD,
+ ) -> BOOL;
+}
+pub const UOI_FLAGS: DWORD = 1;
+pub const UOI_NAME: DWORD = 2;
+pub const UOI_TYPE: DWORD = 3;
+pub const UOI_USER_SID: DWORD = 4;
+pub const UOI_HEAPSIZE: DWORD = 5;
+pub const UOI_IO: DWORD = 6;
+pub const UOI_TIMERPROC_EXCEPTION_SUPPRESSION: DWORD = 7;
+STRUCT!{struct USEROBJECTFLAGS {
+ fInherit: BOOL,
+ fReserved: BOOL,
+ dwFlags: DWORD,
+}}
+pub type PUSEROBJECTFLAGS = *mut USEROBJECTFLAGS;
+extern "system" {
+ pub fn GetUserObjectInformationA(
+ hObj: HANDLE,
+ nIndex: c_int,
+ pvInfo: PVOID,
+ nLength: DWORD,
+ lpnLengthNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn GetUserObjectInformationW(
+ hObj: HANDLE,
+ nIndex: c_int,
+ pvInfo: PVOID,
+ nLength: DWORD,
+ lpnLengthNeeded: LPDWORD,
+ ) -> BOOL;
+ pub fn SetUserObjectInformationA(
+ hObj: HANDLE,
+ nIndex: c_int,
+ pvInfo: PVOID,
+ nLength: DWORD,
+ ) -> BOOL;
+ pub fn SetUserObjectInformationW(
+ hObj: HANDLE,
+ nIndex: c_int,
+ pvInfo: PVOID,
+ nLength: DWORD,
+ ) -> BOOL;
+}
+STRUCT!{struct WNDCLASSEXA {
+ cbSize: UINT,
+ style: UINT,
+ lpfnWndProc: WNDPROC,
+ cbClsExtra: c_int,
+ cbWndExtra: c_int,
+ hInstance: HINSTANCE,
+ hIcon: HICON,
+ hCursor: HCURSOR,
+ hbrBackground: HBRUSH,
+ lpszMenuName: LPCSTR,
+ lpszClassName: LPCSTR,
+ hIconSm: HICON,
+}}
+pub type PWNDCLASSEXA = *mut WNDCLASSEXA;
+pub type NPWNDCLASSEXA = *mut WNDCLASSEXA;
+pub type LPWNDCLASSEXA = *mut WNDCLASSEXA;
+STRUCT!{struct WNDCLASSEXW {
+ cbSize: UINT,
+ style: UINT,
+ lpfnWndProc: WNDPROC,
+ cbClsExtra: c_int,
+ cbWndExtra: c_int,
+ hInstance: HINSTANCE,
+ hIcon: HICON,
+ hCursor: HCURSOR,
+ hbrBackground: HBRUSH,
+ lpszMenuName: LPCWSTR,
+ lpszClassName: LPCWSTR,
+ hIconSm: HICON,
+}}
+pub type PWNDCLASSEXW = *mut WNDCLASSEXW;
+pub type NPWNDCLASSEXW = *mut WNDCLASSEXW;
+pub type LPWNDCLASSEXW = *mut WNDCLASSEXW;
+STRUCT!{struct WNDCLASSA {
+ style: UINT,
+ lpfnWndProc: WNDPROC,
+ cbClsExtra: c_int,
+ cbWndExtra: c_int,
+ hInstance: HINSTANCE,
+ hIcon: HICON,
+ hCursor: HCURSOR,
+ hbrBackground: HBRUSH,
+ lpszMenuName: LPCSTR,
+ lpszClassName: LPCSTR,
+}}
+pub type PWNDCLASSA = *mut WNDCLASSA;
+pub type NPWNDCLASSA = *mut WNDCLASSA;
+pub type LPWNDCLASSA = *mut WNDCLASSA;
+STRUCT!{struct WNDCLASSW {
+ style: UINT,
+ lpfnWndProc: WNDPROC,
+ cbClsExtra: c_int,
+ cbWndExtra: c_int,
+ hInstance: HINSTANCE,
+ hIcon: HICON,
+ hCursor: HCURSOR,
+ hbrBackground: HBRUSH,
+ lpszMenuName: LPCWSTR,
+ lpszClassName: LPCWSTR,
+}}
+pub type PWNDCLASSW = *mut WNDCLASSW;
+pub type NPWNDCLASSW = *mut WNDCLASSW;
+pub type LPWNDCLASSW = *mut WNDCLASSW;
+extern "system" {
+ pub fn IsHungAppWindow(
+ hwnd: HWND,
+ ) -> BOOL;
+ pub fn DisableProcessWindowsGhosting();
+}
+STRUCT!{struct MSG {
+ hwnd: HWND,
+ message: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ time: DWORD,
+ pt: POINT,
+}}
+pub type PMSG = *mut MSG;
+pub type NPMSG = *mut MSG;
+pub type LPMSG = *mut MSG;
+//POINTSTOPOINT
+//POINTTOPOINTS
+//MAKEWPARAM
+//MAKELPARAM
+//MAKELRESULT
+pub const GWL_WNDPROC: c_int = -4;
+pub const GWL_HINSTANCE: c_int = -6;
+pub const GWL_HWNDPARENT: c_int = -8;
+pub const GWL_STYLE: c_int = -16;
+pub const GWL_EXSTYLE: c_int = -20;
+pub const GWL_USERDATA: c_int = -21;
+pub const GWL_ID: c_int = -12;
+pub const GWLP_WNDPROC: c_int = -4;
+pub const GWLP_HINSTANCE: c_int = -6;
+pub const GWLP_HWNDPARENT: c_int = -8;
+pub const GWLP_USERDATA: c_int = -21;
+pub const GWLP_ID: c_int = -12;
+pub const GCL_MENUNAME: c_int = -8;
+pub const GCL_HBRBACKGROUND: c_int = -10;
+pub const GCL_HCURSOR: c_int = -12;
+pub const GCL_HICON: c_int = -14;
+pub const GCL_HMODULE: c_int = -16;
+pub const GCL_CBWNDEXTRA: c_int = -18;
+pub const GCL_CBCLSEXTRA: c_int = -20;
+pub const GCL_WNDPROC: c_int = -24;
+pub const GCL_STYLE: c_int = -26;
+pub const GCW_ATOM: c_int = -32;
+pub const GCL_HICONSM: c_int = -34;
+pub const GCLP_MENUNAME: c_int = -8;
+pub const GCLP_HBRBACKGROUND: c_int = -10;
+pub const GCLP_HCURSOR: c_int = -12;
+pub const GCLP_HICON: c_int = -14;
+pub const GCLP_HMODULE: c_int = -16;
+pub const GCLP_WNDPROC: c_int = -24;
+pub const GCLP_HICONSM: c_int = -34;
+pub const WM_NULL: UINT = 0x0000;
+pub const WM_CREATE: UINT = 0x0001;
+pub const WM_DESTROY: UINT = 0x0002;
+pub const WM_MOVE: UINT = 0x0003;
+pub const WM_SIZE: UINT = 0x0005;
+pub const WM_ACTIVATE: UINT = 0x0006;
+pub const WA_INACTIVE: WORD = 0;
+pub const WA_ACTIVE: WORD = 1;
+pub const WA_CLICKACTIVE: WORD = 2;
+pub const WM_SETFOCUS: UINT = 0x0007;
+pub const WM_KILLFOCUS: UINT = 0x0008;
+pub const WM_ENABLE: UINT = 0x000A;
+pub const WM_SETREDRAW: UINT = 0x000B;
+pub const WM_SETTEXT: UINT = 0x000C;
+pub const WM_GETTEXT: UINT = 0x000D;
+pub const WM_GETTEXTLENGTH: UINT = 0x000E;
+pub const WM_PAINT: UINT = 0x000F;
+pub const WM_CLOSE: UINT = 0x0010;
+pub const WM_QUERYENDSESSION: UINT = 0x0011;
+pub const WM_QUERYOPEN: UINT = 0x0013;
+pub const WM_ENDSESSION: UINT = 0x0016;
+pub const WM_QUIT: UINT = 0x0012;
+pub const WM_ERASEBKGND: UINT = 0x0014;
+pub const WM_SYSCOLORCHANGE: UINT = 0x0015;
+pub const WM_SHOWWINDOW: UINT = 0x0018;
+pub const WM_WININICHANGE: UINT = 0x001A;
+pub const WM_SETTINGCHANGE: UINT = WM_WININICHANGE;
+pub const WM_DEVMODECHANGE: UINT = 0x001B;
+pub const WM_ACTIVATEAPP: UINT = 0x001C;
+pub const WM_FONTCHANGE: UINT = 0x001D;
+pub const WM_TIMECHANGE: UINT = 0x001E;
+pub const WM_CANCELMODE: UINT = 0x001F;
+pub const WM_SETCURSOR: UINT = 0x0020;
+pub const WM_MOUSEACTIVATE: UINT = 0x0021;
+pub const WM_CHILDACTIVATE: UINT = 0x0022;
+pub const WM_QUEUESYNC: UINT = 0x0023;
+pub const WM_GETMINMAXINFO: UINT = 0x0024;
+STRUCT!{struct MINMAXINFO {
+ ptReserved: POINT,
+ ptMaxSize: POINT,
+ ptMaxPosition: POINT,
+ ptMinTrackSize: POINT,
+ ptMaxTrackSize: POINT,
+}}
+pub type PMINMAXINFO = *mut MINMAXINFO;
+pub type LPMINMAXINFO = *mut MINMAXINFO;
+pub const WM_PAINTICON: UINT = 0x0026;
+pub const WM_ICONERASEBKGND: UINT = 0x0027;
+pub const WM_NEXTDLGCTL: UINT = 0x0028;
+pub const WM_SPOOLERSTATUS: UINT = 0x002A;
+pub const WM_DRAWITEM: UINT = 0x002B;
+pub const WM_MEASUREITEM: UINT = 0x002C;
+pub const WM_DELETEITEM: UINT = 0x002D;
+pub const WM_VKEYTOITEM: UINT = 0x002E;
+pub const WM_CHARTOITEM: UINT = 0x002F;
+pub const WM_SETFONT: UINT = 0x0030;
+pub const WM_GETFONT: UINT = 0x0031;
+pub const WM_SETHOTKEY: UINT = 0x0032;
+pub const WM_GETHOTKEY: UINT = 0x0033;
+pub const WM_QUERYDRAGICON: UINT = 0x0037;
+pub const WM_COMPAREITEM: UINT = 0x0039;
+pub const WM_GETOBJECT: UINT = 0x003D;
+pub const WM_COMPACTING: UINT = 0x0041;
+pub const WM_COMMNOTIFY: UINT = 0x0044;
+pub const WM_WINDOWPOSCHANGING: UINT = 0x0046;
+pub const WM_WINDOWPOSCHANGED: UINT = 0x0047;
+pub const WM_POWER: UINT = 0x0048;
+pub const PWR_OK: WPARAM = 1;
+pub const PWR_FAIL: WPARAM = -1isize as usize;
+pub const PWR_SUSPENDREQUEST: WPARAM = 1;
+pub const PWR_SUSPENDRESUME: WPARAM = 2;
+pub const PWR_CRITICALRESUME: WPARAM = 3;
+pub const WM_COPYDATA: UINT = 0x004A;
+pub const WM_CANCELJOURNAL: UINT = 0x004B;
+STRUCT!{struct COPYDATASTRUCT {
+ dwData: ULONG_PTR,
+ cbData: DWORD,
+ lpData: PVOID,
+}}
+pub type PCOPYDATASTRUCT = *mut COPYDATASTRUCT;
+STRUCT!{struct MDINEXTMENU {
+ hmenuIn: HMENU,
+ hmenuNext: HMENU,
+ hwndNext: HWND,
+}}
+pub type PMDINEXTMENU = *mut MDINEXTMENU;
+pub type LPMDINEXTMENU = *mut MDINEXTMENU;
+pub const WM_NOTIFY: UINT = 0x004E;
+pub const WM_INPUTLANGCHANGEREQUEST: UINT = 0x0050;
+pub const WM_INPUTLANGCHANGE: UINT = 0x0051;
+pub const WM_TCARD: UINT = 0x0052;
+pub const WM_HELP: UINT = 0x0053;
+pub const WM_USERCHANGED: UINT = 0x0054;
+pub const WM_NOTIFYFORMAT: UINT = 0x0055;
+pub const NFR_ANSI: LRESULT = 1;
+pub const NFR_UNICODE: LRESULT = 2;
+pub const NF_QUERY: LPARAM = 3;
+pub const NF_REQUERY: LPARAM = 4;
+pub const WM_CONTEXTMENU: UINT = 0x007B;
+pub const WM_STYLECHANGING: UINT = 0x007C;
+pub const WM_STYLECHANGED: UINT = 0x007D;
+pub const WM_DISPLAYCHANGE: UINT = 0x007E;
+pub const WM_GETICON: UINT = 0x007F;
+pub const WM_SETICON: UINT = 0x0080;
+pub const WM_NCCREATE: UINT = 0x0081;
+pub const WM_NCDESTROY: UINT = 0x0082;
+pub const WM_NCCALCSIZE: UINT = 0x0083;
+pub const WM_NCHITTEST: UINT = 0x0084;
+pub const WM_NCPAINT: UINT = 0x0085;
+pub const WM_NCACTIVATE: UINT = 0x0086;
+pub const WM_GETDLGCODE: UINT = 0x0087;
+pub const WM_SYNCPAINT: UINT = 0x0088;
+pub const WM_NCMOUSEMOVE: UINT = 0x00A0;
+pub const WM_NCLBUTTONDOWN: UINT = 0x00A1;
+pub const WM_NCLBUTTONUP: UINT = 0x00A2;
+pub const WM_NCLBUTTONDBLCLK: UINT = 0x00A3;
+pub const WM_NCRBUTTONDOWN: UINT = 0x00A4;
+pub const WM_NCRBUTTONUP: UINT = 0x00A5;
+pub const WM_NCRBUTTONDBLCLK: UINT = 0x00A6;
+pub const WM_NCMBUTTONDOWN: UINT = 0x00A7;
+pub const WM_NCMBUTTONUP: UINT = 0x00A8;
+pub const WM_NCMBUTTONDBLCLK: UINT = 0x00A9;
+pub const WM_NCXBUTTONDOWN: UINT = 0x00AB;
+pub const WM_NCXBUTTONUP: UINT = 0x00AC;
+pub const WM_NCXBUTTONDBLCLK: UINT = 0x00AD;
+pub const WM_INPUT_DEVICE_CHANGE: UINT = 0x00FE;
+pub const WM_INPUT: UINT = 0x00FF;
+pub const WM_KEYFIRST: UINT = 0x0100;
+pub const WM_KEYDOWN: UINT = 0x0100;
+pub const WM_KEYUP: UINT = 0x0101;
+pub const WM_CHAR: UINT = 0x0102;
+pub const WM_DEADCHAR: UINT = 0x0103;
+pub const WM_SYSKEYDOWN: UINT = 0x0104;
+pub const WM_SYSKEYUP: UINT = 0x0105;
+pub const WM_SYSCHAR: UINT = 0x0106;
+pub const WM_SYSDEADCHAR: UINT = 0x0107;
+pub const WM_UNICHAR: UINT = 0x0109;
+pub const WM_KEYLAST: UINT = 0x0109;
+pub const UNICODE_NOCHAR: WPARAM = 0xFFFF;
+pub const WM_IME_STARTCOMPOSITION: UINT = 0x010D;
+pub const WM_IME_ENDCOMPOSITION: UINT = 0x010E;
+pub const WM_IME_COMPOSITION: UINT = 0x010F;
+pub const WM_IME_KEYLAST: UINT = 0x010F;
+pub const WM_INITDIALOG: UINT = 0x0110;
+pub const WM_COMMAND: UINT = 0x0111;
+pub const WM_SYSCOMMAND: UINT = 0x0112;
+pub const WM_TIMER: UINT = 0x0113;
+pub const WM_HSCROLL: UINT = 0x0114;
+pub const WM_VSCROLL: UINT = 0x0115;
+pub const WM_INITMENU: UINT = 0x0116;
+pub const WM_INITMENUPOPUP: UINT = 0x0117;
+pub const WM_GESTURE: UINT = 0x0119;
+pub const WM_GESTURENOTIFY: UINT = 0x011A;
+pub const WM_MENUSELECT: UINT = 0x011F;
+pub const WM_MENUCHAR: UINT = 0x0120;
+pub const WM_ENTERIDLE: UINT = 0x0121;
+pub const WM_MENURBUTTONUP: UINT = 0x0122;
+pub const WM_MENUDRAG: UINT = 0x0123;
+pub const WM_MENUGETOBJECT: UINT = 0x0124;
+pub const WM_UNINITMENUPOPUP: UINT = 0x0125;
+pub const WM_MENUCOMMAND: UINT = 0x0126;
+pub const WM_CHANGEUISTATE: UINT = 0x0127;
+pub const WM_UPDATEUISTATE: UINT = 0x0128;
+pub const WM_QUERYUISTATE: UINT = 0x0129;
+pub const UIS_SET: WORD = 1;
+pub const UIS_CLEAR: WORD = 2;
+pub const UIS_INITIALIZE: WORD = 3;
+pub const UISF_HIDEFOCUS: WORD = 0x1;
+pub const UISF_HIDEACCEL: WORD = 0x2;
+pub const UISF_ACTIVE: WORD = 0x4;
+pub const WM_CTLCOLORMSGBOX: UINT = 0x0132;
+pub const WM_CTLCOLOREDIT: UINT = 0x0133;
+pub const WM_CTLCOLORLISTBOX: UINT = 0x0134;
+pub const WM_CTLCOLORBTN: UINT = 0x0135;
+pub const WM_CTLCOLORDLG: UINT = 0x0136;
+pub const WM_CTLCOLORSCROLLBAR: UINT = 0x0137;
+pub const WM_CTLCOLORSTATIC: UINT = 0x0138;
+pub const MN_GETHMENU: UINT = 0x01E1;
+pub const WM_MOUSEFIRST: UINT = 0x0200;
+pub const WM_MOUSEMOVE: UINT = 0x0200;
+pub const WM_LBUTTONDOWN: UINT = 0x0201;
+pub const WM_LBUTTONUP: UINT = 0x0202;
+pub const WM_LBUTTONDBLCLK: UINT = 0x0203;
+pub const WM_RBUTTONDOWN: UINT = 0x0204;
+pub const WM_RBUTTONUP: UINT = 0x0205;
+pub const WM_RBUTTONDBLCLK: UINT = 0x0206;
+pub const WM_MBUTTONDOWN: UINT = 0x0207;
+pub const WM_MBUTTONUP: UINT = 0x0208;
+pub const WM_MBUTTONDBLCLK: UINT = 0x0209;
+pub const WM_MOUSEWHEEL: UINT = 0x020A;
+pub const WM_XBUTTONDOWN: UINT = 0x020B;
+pub const WM_XBUTTONUP: UINT = 0x020C;
+pub const WM_XBUTTONDBLCLK: UINT = 0x020D;
+pub const WM_MOUSEHWHEEL: UINT = 0x020E;
+pub const WM_MOUSELAST: UINT = 0x020E;
+pub const WHEEL_DELTA: c_short = 120;
+#[inline]
+pub fn GET_WHEEL_DELTA_WPARAM(wParam: WPARAM) -> c_short {
+ HIWORD(wParam as DWORD) as c_short
+}
+pub const WHEEL_PAGESCROLL: UINT = UINT_MAX;
+#[inline]
+pub fn GET_KEYSTATE_WPARAM(wParam: WPARAM) -> WORD {
+ LOWORD(wParam as DWORD)
+}
+#[inline]
+pub fn GET_NCHITTEST_WPARAM(wParam: WPARAM) -> c_short {
+ LOWORD(wParam as DWORD) as c_short
+}
+#[inline]
+pub fn GET_XBUTTON_WPARAM(wParam: WPARAM) -> WORD {
+ HIWORD(wParam as DWORD)
+}
+pub const XBUTTON1: WORD = 0x0001;
+pub const XBUTTON2: WORD = 0x0002;
+pub const WM_PARENTNOTIFY: UINT = 0x0210;
+pub const WM_ENTERMENULOOP: UINT = 0x0211;
+pub const WM_EXITMENULOOP: UINT = 0x0212;
+pub const WM_NEXTMENU: UINT = 0x0213;
+pub const WM_SIZING: UINT = 0x0214;
+pub const WM_CAPTURECHANGED: UINT = 0x0215;
+pub const WM_MOVING: UINT = 0x0216;
+pub const WM_POWERBROADCAST: UINT = 0x0218;
+pub const PBT_APMQUERYSUSPEND: WPARAM = 0x0000;
+pub const PBT_APMQUERYSTANDBY: WPARAM = 0x0001;
+pub const PBT_APMQUERYSUSPENDFAILED: WPARAM = 0x0002;
+pub const PBT_APMQUERYSTANDBYFAILED: WPARAM = 0x0003;
+pub const PBT_APMSUSPEND: WPARAM = 0x0004;
+pub const PBT_APMSTANDBY: WPARAM = 0x0005;
+pub const PBT_APMRESUMECRITICAL: WPARAM = 0x0006;
+pub const PBT_APMRESUMESUSPEND: WPARAM = 0x0007;
+pub const PBT_APMRESUMESTANDBY: WPARAM = 0x0008;
+pub const PBTF_APMRESUMEFROMFAILURE: LPARAM = 0x00000001;
+pub const PBT_APMBATTERYLOW: WPARAM = 0x0009;
+pub const PBT_APMPOWERSTATUSCHANGE: WPARAM = 0x000A;
+pub const PBT_APMOEMEVENT: WPARAM = 0x000B;
+pub const PBT_APMRESUMEAUTOMATIC: WPARAM = 0x0012;
+pub const PBT_POWERSETTINGCHANGE: WPARAM = 0x8013;
+STRUCT!{struct POWERBROADCAST_SETTING {
+ PowerSetting: GUID,
+ DataLength: DWORD,
+ Data: [UCHAR; 1],
+}}
+pub type PPOWERBROADCAST_SETTING = *mut POWERBROADCAST_SETTING;
+pub const WM_DEVICECHANGE: UINT = 0x0219;
+pub const WM_MDICREATE: UINT = 0x0220;
+pub const WM_MDIDESTROY: UINT = 0x0221;
+pub const WM_MDIACTIVATE: UINT = 0x0222;
+pub const WM_MDIRESTORE: UINT = 0x0223;
+pub const WM_MDINEXT: UINT = 0x0224;
+pub const WM_MDIMAXIMIZE: UINT = 0x0225;
+pub const WM_MDITILE: UINT = 0x0226;
+pub const WM_MDICASCADE: UINT = 0x0227;
+pub const WM_MDIICONARRANGE: UINT = 0x0228;
+pub const WM_MDIGETACTIVE: UINT = 0x0229;
+pub const WM_MDISETMENU: UINT = 0x0230;
+pub const WM_ENTERSIZEMOVE: UINT = 0x0231;
+pub const WM_EXITSIZEMOVE: UINT = 0x0232;
+pub const WM_DROPFILES: UINT = 0x0233;
+pub const WM_MDIREFRESHMENU: UINT = 0x0234;
+pub const WM_POINTERDEVICECHANGE: UINT = 0x238;
+pub const WM_POINTERDEVICEINRANGE: UINT = 0x239;
+pub const WM_POINTERDEVICEOUTOFRANGE: UINT = 0x23A;
+pub const WM_TOUCH: UINT = 0x0240;
+pub const WM_NCPOINTERUPDATE: UINT = 0x0241;
+pub const WM_NCPOINTERDOWN: UINT = 0x0242;
+pub const WM_NCPOINTERUP: UINT = 0x0243;
+pub const WM_POINTERUPDATE: UINT = 0x0245;
+pub const WM_POINTERDOWN: UINT = 0x0246;
+pub const WM_POINTERUP: UINT = 0x0247;
+pub const WM_POINTERENTER: UINT = 0x0249;
+pub const WM_POINTERLEAVE: UINT = 0x024A;
+pub const WM_POINTERACTIVATE: UINT = 0x024B;
+pub const WM_POINTERCAPTURECHANGED: UINT = 0x024C;
+pub const WM_TOUCHHITTESTING: UINT = 0x024D;
+pub const WM_POINTERWHEEL: UINT = 0x024E;
+pub const WM_POINTERHWHEEL: UINT = 0x024F;
+pub const DM_POINTERHITTEST: UINT = 0x0250;
+pub const WM_POINTERROUTEDTO: UINT = 0x0251;
+pub const WM_POINTERROUTEDAWAY: UINT = 0x0252;
+pub const WM_POINTERROUTEDRELEASED: UINT = 0x0253;
+pub const WM_IME_SETCONTEXT: UINT = 0x0281;
+pub const WM_IME_NOTIFY: UINT = 0x0282;
+pub const WM_IME_CONTROL: UINT = 0x0283;
+pub const WM_IME_COMPOSITIONFULL: UINT = 0x0284;
+pub const WM_IME_SELECT: UINT = 0x0285;
+pub const WM_IME_CHAR: UINT = 0x0286;
+pub const WM_IME_REQUEST: UINT = 0x0288;
+pub const WM_IME_KEYDOWN: UINT = 0x0290;
+pub const WM_IME_KEYUP: UINT = 0x0291;
+pub const WM_MOUSEHOVER: UINT = 0x02A1;
+pub const WM_MOUSELEAVE: UINT = 0x02A3;
+pub const WM_NCMOUSEHOVER: UINT = 0x02A0;
+pub const WM_NCMOUSELEAVE: UINT = 0x02A2;
+pub const WM_WTSSESSION_CHANGE: UINT = 0x02B1;
+pub const WM_TABLET_FIRST: UINT = 0x02c0;
+pub const WM_TABLET_LAST: UINT = 0x02df;
+pub const WM_DPICHANGED: UINT = 0x02E0;
+pub const WM_DPICHANGED_BEFOREPARENT: UINT = 0x02E2;
+pub const WM_DPICHANGED_AFTERPARENT: UINT = 0x02E3;
+pub const WM_GETDPISCALEDSIZE: UINT = 0x02E4;
+pub const WM_CUT: UINT = 0x0300;
+pub const WM_COPY: UINT = 0x0301;
+pub const WM_PASTE: UINT = 0x0302;
+pub const WM_CLEAR: UINT = 0x0303;
+pub const WM_UNDO: UINT = 0x0304;
+pub const WM_RENDERFORMAT: UINT = 0x0305;
+pub const WM_RENDERALLFORMATS: UINT = 0x0306;
+pub const WM_DESTROYCLIPBOARD: UINT = 0x0307;
+pub const WM_DRAWCLIPBOARD: UINT = 0x0308;
+pub const WM_PAINTCLIPBOARD: UINT = 0x0309;
+pub const WM_VSCROLLCLIPBOARD: UINT = 0x030A;
+pub const WM_SIZECLIPBOARD: UINT = 0x030B;
+pub const WM_ASKCBFORMATNAME: UINT = 0x030C;
+pub const WM_CHANGECBCHAIN: UINT = 0x030D;
+pub const WM_HSCROLLCLIPBOARD: UINT = 0x030E;
+pub const WM_QUERYNEWPALETTE: UINT = 0x030F;
+pub const WM_PALETTEISCHANGING: UINT = 0x0310;
+pub const WM_PALETTECHANGED: UINT = 0x0311;
+pub const WM_HOTKEY: UINT = 0x0312;
+pub const WM_PRINT: UINT = 0x0317;
+pub const WM_PRINTCLIENT: UINT = 0x0318;
+pub const WM_APPCOMMAND: UINT = 0x0319;
+pub const WM_THEMECHANGED: UINT = 0x031A;
+pub const WM_CLIPBOARDUPDATE: UINT = 0x031D;
+pub const WM_DWMCOMPOSITIONCHANGED: UINT = 0x031E;
+pub const WM_DWMNCRENDERINGCHANGED: UINT = 0x031F;
+pub const WM_DWMCOLORIZATIONCOLORCHANGED: UINT = 0x0320;
+pub const WM_DWMWINDOWMAXIMIZEDCHANGE: UINT = 0x0321;
+pub const WM_DWMSENDICONICTHUMBNAIL: UINT = 0x0323;
+pub const WM_DWMSENDICONICLIVEPREVIEWBITMAP: UINT = 0x0326;
+pub const WM_GETTITLEBARINFOEX: UINT = 0x033F;
+pub const WM_HANDHELDFIRST: UINT = 0x0358;
+pub const WM_HANDHELDLAST: UINT = 0x035F;
+pub const WM_AFXFIRST: UINT = 0x0360;
+pub const WM_AFXLAST: UINT = 0x037F;
+pub const WM_PENWINFIRST: UINT = 0x0380;
+pub const WM_PENWINLAST: UINT = 0x038F;
+pub const WM_APP: UINT = 0x8000;
+pub const WM_USER: UINT = 0x0400;
+pub const WMSZ_LEFT: UINT = 1;
+pub const WMSZ_RIGHT: UINT = 2;
+pub const WMSZ_TOP: UINT = 3;
+pub const WMSZ_TOPLEFT: UINT = 4;
+pub const WMSZ_TOPRIGHT: UINT = 5;
+pub const WMSZ_BOTTOM: UINT = 6;
+pub const WMSZ_BOTTOMLEFT: UINT = 7;
+pub const WMSZ_BOTTOMRIGHT: UINT = 8;
+pub const HTERROR: LRESULT = -2;
+pub const HTTRANSPARENT: LRESULT = -1;
+pub const HTNOWHERE: LRESULT = 0;
+pub const HTCLIENT: LRESULT = 1;
+pub const HTCAPTION: LRESULT = 2;
+pub const HTSYSMENU: LRESULT = 3;
+pub const HTGROWBOX: LRESULT = 4;
+pub const HTSIZE: LRESULT = HTGROWBOX;
+pub const HTMENU: LRESULT = 5;
+pub const HTHSCROLL: LRESULT = 6;
+pub const HTVSCROLL: LRESULT = 7;
+pub const HTMINBUTTON: LRESULT = 8;
+pub const HTMAXBUTTON: LRESULT = 9;
+pub const HTLEFT: LRESULT = 10;
+pub const HTRIGHT: LRESULT = 11;
+pub const HTTOP: LRESULT = 12;
+pub const HTTOPLEFT: LRESULT = 13;
+pub const HTTOPRIGHT: LRESULT = 14;
+pub const HTBOTTOM: LRESULT = 15;
+pub const HTBOTTOMLEFT: LRESULT = 16;
+pub const HTBOTTOMRIGHT: LRESULT = 17;
+pub const HTBORDER: LRESULT = 18;
+pub const HTREDUCE: LRESULT = HTMINBUTTON;
+pub const HTZOOM: LRESULT = HTMAXBUTTON;
+pub const HTSIZEFIRST: LRESULT = HTLEFT;
+pub const HTSIZELAST: LRESULT = HTBOTTOMRIGHT;
+pub const HTOBJECT: LRESULT = 19;
+pub const HTCLOSE: LRESULT = 20;
+pub const HTHELP: LRESULT = 21;
+pub const SMTO_NORMAL: UINT = 0x0000;
+pub const SMTO_BLOCK: UINT = 0x0001;
+pub const SMTO_ABORTIFHUNG: UINT = 0x0002;
+pub const SMTO_NOTIMEOUTIFNOTHUNG: UINT = 0x0008;
+pub const SMTO_ERRORONEXIT: UINT = 0x0020;
+pub const MA_ACTIVATE: UINT = 1;
+pub const MA_ACTIVATEANDEAT: UINT = 2;
+pub const MA_NOACTIVATE: UINT = 3;
+pub const MA_NOACTIVATEANDEAT: UINT = 4;
+pub const ICON_SMALL: UINT = 0;
+pub const ICON_BIG: UINT = 1;
+pub const ICON_SMALL2: UINT = 2;
+extern "system" {
+ pub fn RegisterWindowMessageA(
+ lpString: LPCSTR,
+ ) -> UINT;
+ pub fn RegisterWindowMessageW(
+ lpString: LPCWSTR,
+ ) -> UINT;
+}
+pub const SIZE_RESTORED: WPARAM = 0;
+pub const SIZE_MINIMIZED: WPARAM = 1;
+pub const SIZE_MAXIMIZED: WPARAM = 2;
+pub const SIZE_MAXSHOW: WPARAM = 3;
+pub const SIZE_MAXHIDE: WPARAM = 4;
+pub const SIZENORMAL: WPARAM = SIZE_RESTORED;
+pub const SIZEICONIC: WPARAM = SIZE_MINIMIZED;
+pub const SIZEFULLSCREEN: WPARAM = SIZE_MAXIMIZED;
+pub const SIZEZOOMSHOW: WPARAM = SIZE_MAXSHOW;
+pub const SIZEZOOMHIDE: WPARAM = SIZE_MAXHIDE;
+STRUCT!{struct WINDOWPOS {
+ hwnd: HWND,
+ hwndInsertAfter: HWND,
+ x: c_int,
+ y: c_int,
+ cx: c_int,
+ cy: c_int,
+ flags: UINT,
+}}
+pub type LPWINDOWPOS = *mut WINDOWPOS;
+pub type PWINDOWPOS = *mut WINDOWPOS;
+STRUCT!{struct NCCALCSIZE_PARAMS {
+ rgrc: [RECT; 3],
+ lppos: PWINDOWPOS,
+}}
+pub type LPNCCALCSIZE_PARAMS = *mut NCCALCSIZE_PARAMS;
+pub const WVR_ALIGNTOP: LRESULT = 0x0010;
+pub const WVR_ALIGNLEFT: LRESULT = 0x0020;
+pub const WVR_ALIGNBOTTOM: LRESULT = 0x0040;
+pub const WVR_ALIGNRIGHT: LRESULT = 0x0080;
+pub const WVR_HREDRAW: LRESULT = 0x0100;
+pub const WVR_VREDRAW: LRESULT = 0x0200;
+pub const WVR_REDRAW: LRESULT = WVR_HREDRAW | WVR_VREDRAW;
+pub const WVR_VALIDRECTS: LRESULT = 0x0400;
+pub const MK_LBUTTON: WPARAM = 0x0001;
+pub const MK_RBUTTON: WPARAM = 0x0002;
+pub const MK_SHIFT: WPARAM = 0x0004;
+pub const MK_CONTROL: WPARAM = 0x0008;
+pub const MK_MBUTTON: WPARAM = 0x0010;
+pub const MK_XBUTTON1: WPARAM = 0x0020;
+pub const MK_XBUTTON2: WPARAM = 0x0040;
+pub const TME_HOVER: DWORD = 0x00000001;
+pub const TME_LEAVE: DWORD = 0x00000002;
+pub const TME_NONCLIENT: DWORD = 0x00000010;
+pub const TME_QUERY: DWORD = 0x40000000;
+pub const TME_CANCEL: DWORD = 0x80000000;
+pub const HOVER_DEFAULT: DWORD = 0xFFFFFFFF;
+STRUCT!{struct TRACKMOUSEEVENT {
+ cbSize: DWORD,
+ dwFlags: DWORD,
+ hwndTrack: HWND,
+ dwHoverTime: DWORD,
+}}
+pub type LPTRACKMOUSEEVENT = *mut TRACKMOUSEEVENT;
+extern "system" {
+ pub fn TrackMouseEvent(
+ lpEventTrack: LPTRACKMOUSEEVENT,
+ ) -> BOOL;
+}
+pub const WS_OVERLAPPED: DWORD = 0x00000000;
+pub const WS_POPUP: DWORD = 0x80000000;
+pub const WS_CHILD: DWORD = 0x40000000;
+pub const WS_MINIMIZE: DWORD = 0x20000000;
+pub const WS_VISIBLE: DWORD = 0x10000000;
+pub const WS_DISABLED: DWORD = 0x08000000;
+pub const WS_CLIPSIBLINGS: DWORD = 0x04000000;
+pub const WS_CLIPCHILDREN: DWORD = 0x02000000;
+pub const WS_MAXIMIZE: DWORD = 0x01000000;
+pub const WS_CAPTION: DWORD = 0x00C00000;
+pub const WS_BORDER: DWORD = 0x00800000;
+pub const WS_DLGFRAME: DWORD = 0x00400000;
+pub const WS_VSCROLL: DWORD = 0x00200000;
+pub const WS_HSCROLL: DWORD = 0x00100000;
+pub const WS_SYSMENU: DWORD = 0x00080000;
+pub const WS_THICKFRAME: DWORD = 0x00040000;
+pub const WS_GROUP: DWORD = 0x00020000;
+pub const WS_TABSTOP: DWORD = 0x00010000;
+pub const WS_MINIMIZEBOX: DWORD = 0x00020000;
+pub const WS_MAXIMIZEBOX: DWORD = 0x00010000;
+pub const WS_TILED: DWORD = WS_OVERLAPPED;
+pub const WS_ICONIC: DWORD = WS_MINIMIZE;
+pub const WS_SIZEBOX: DWORD = WS_THICKFRAME;
+pub const WS_TILEDWINDOW: DWORD = WS_OVERLAPPEDWINDOW;
+pub const WS_OVERLAPPEDWINDOW: DWORD = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
+ | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
+pub const WS_POPUPWINDOW: DWORD = WS_POPUP | WS_BORDER | WS_SYSMENU;
+pub const WS_CHILDWINDOW: DWORD = WS_CHILD;
+pub const WS_EX_DLGMODALFRAME: DWORD = 0x00000001;
+pub const WS_EX_NOPARENTNOTIFY: DWORD = 0x00000004;
+pub const WS_EX_TOPMOST: DWORD = 0x00000008;
+pub const WS_EX_ACCEPTFILES: DWORD = 0x00000010;
+pub const WS_EX_TRANSPARENT: DWORD = 0x00000020;
+pub const WS_EX_MDICHILD: DWORD = 0x00000040;
+pub const WS_EX_TOOLWINDOW: DWORD = 0x00000080;
+pub const WS_EX_WINDOWEDGE: DWORD = 0x00000100;
+pub const WS_EX_CLIENTEDGE: DWORD = 0x00000200;
+pub const WS_EX_CONTEXTHELP: DWORD = 0x00000400;
+pub const WS_EX_RIGHT: DWORD = 0x00001000;
+pub const WS_EX_LEFT: DWORD = 0x00000000;
+pub const WS_EX_RTLREADING: DWORD = 0x00002000;
+pub const WS_EX_LTRREADING: DWORD = 0x00000000;
+pub const WS_EX_LEFTSCROLLBAR: DWORD = 0x00004000;
+pub const WS_EX_RIGHTSCROLLBAR: DWORD = 0x00000000;
+pub const WS_EX_CONTROLPARENT: DWORD = 0x00010000;
+pub const WS_EX_STATICEDGE: DWORD = 0x00020000;
+pub const WS_EX_APPWINDOW: DWORD = 0x00040000;
+pub const WS_EX_OVERLAPPEDWINDOW: DWORD = WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE;
+pub const WS_EX_PALETTEWINDOW: DWORD = WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST;
+pub const WS_EX_LAYERED: DWORD = 0x00080000;
+pub const WS_EX_NOINHERITLAYOUT: DWORD = 0x00100000;
+pub const WS_EX_NOREDIRECTIONBITMAP: DWORD = 0x00200000;
+pub const WS_EX_LAYOUTRTL: DWORD = 0x00400000;
+pub const WS_EX_COMPOSITED: DWORD = 0x02000000;
+pub const WS_EX_NOACTIVATE: DWORD = 0x08000000;
+pub const CS_VREDRAW: UINT = 0x0001;
+pub const CS_HREDRAW: UINT = 0x0002;
+pub const CS_DBLCLKS: UINT = 0x0008;
+pub const CS_OWNDC: UINT = 0x0020;
+pub const CS_CLASSDC: UINT = 0x0040;
+pub const CS_PARENTDC: UINT = 0x0080;
+pub const CS_NOCLOSE: UINT = 0x0200;
+pub const CS_SAVEBITS: UINT = 0x0800;
+pub const CS_BYTEALIGNCLIENT: UINT = 0x1000;
+pub const CS_BYTEALIGNWINDOW: UINT = 0x2000;
+pub const CS_GLOBALCLASS: UINT = 0x4000;
+pub const CS_IME: UINT = 0x00010000;
+pub const CS_DROPSHADOW: UINT = 0x00020000;
+pub const PRF_CHECKVISIBLE: UINT = 0x00000001;
+pub const PRF_NONCLIENT: UINT = 0x00000002;
+pub const PRF_CLIENT: UINT = 0x00000004;
+pub const PRF_ERASEBKGND: UINT = 0x00000008;
+pub const PRF_CHILDREN: UINT = 0x00000010;
+pub const PRF_OWNED: UINT = 0x00000020;
+pub const BDR_RAISEDOUTER: UINT = 0x0001;
+pub const BDR_SUNKENOUTER: UINT = 0x0002;
+pub const BDR_RAISEDINNER: UINT = 0x0004;
+pub const BDR_SUNKENINNER: UINT = 0x0008;
+pub const BDR_OUTER: UINT = BDR_RAISEDOUTER | BDR_SUNKENOUTER;
+pub const BDR_INNER: UINT = BDR_RAISEDINNER | BDR_SUNKENINNER;
+pub const BDR_RAISED: UINT = BDR_RAISEDOUTER | BDR_RAISEDINNER;
+pub const BDR_SUNKEN: UINT = BDR_SUNKENOUTER | BDR_SUNKENINNER;
+pub const EDGE_RAISED: UINT = BDR_RAISEDOUTER | BDR_RAISEDINNER;
+pub const EDGE_SUNKEN: UINT = BDR_SUNKENOUTER | BDR_SUNKENINNER;
+pub const EDGE_ETCHED: UINT = BDR_SUNKENOUTER | BDR_RAISEDINNER;
+pub const EDGE_BUMP: UINT = BDR_RAISEDOUTER | BDR_SUNKENINNER;
+pub const BF_LEFT: UINT = 0x0001;
+pub const BF_TOP: UINT = 0x0002;
+pub const BF_RIGHT: UINT = 0x0004;
+pub const BF_BOTTOM: UINT = 0x0008;
+pub const BF_TOPLEFT: UINT = BF_TOP | BF_LEFT;
+pub const BF_TOPRIGHT: UINT = BF_TOP | BF_RIGHT;
+pub const BF_BOTTOMLEFT: UINT = BF_BOTTOM | BF_LEFT;
+pub const BF_BOTTOMRIGHT: UINT = BF_BOTTOM | BF_RIGHT;
+pub const BF_RECT: UINT = BF_LEFT | BF_TOP | BF_RIGHT | BF_BOTTOM;
+pub const BF_DIAGONAL: UINT = 0x0010;
+pub const BF_DIAGONAL_ENDTOPRIGHT: UINT = BF_DIAGONAL | BF_TOP | BF_RIGHT;
+pub const BF_DIAGONAL_ENDTOPLEFT: UINT = BF_DIAGONAL | BF_TOP | BF_LEFT;
+pub const BF_DIAGONAL_ENDBOTTOMLEFT: UINT = BF_DIAGONAL | BF_BOTTOM | BF_LEFT;
+pub const BF_DIAGONAL_ENDBOTTOMRIGHT: UINT = BF_DIAGONAL | BF_BOTTOM | BF_RIGHT;
+pub const BF_MIDDLE: UINT = 0x0800;
+pub const BF_SOFT: UINT = 0x1000;
+pub const BF_ADJUST: UINT = 0x2000;
+pub const BF_FLAT: UINT = 0x4000;
+pub const BF_MONO: UINT = 0x8000;
+extern "system" {
+ pub fn DrawEdge(
+ hdc: HDC,
+ qrc: LPRECT,
+ edge: UINT,
+ grfFlags: UINT,
+ ) -> BOOL;
+}
+pub const DFC_CAPTION: UINT = 1;
+pub const DFC_MENU: UINT = 2;
+pub const DFC_SCROLL: UINT = 3;
+pub const DFC_BUTTON: UINT = 4;
+pub const DFC_POPUPMENU: UINT = 5;
+pub const DFCS_CAPTIONCLOSE: UINT = 0x0000;
+pub const DFCS_CAPTIONMIN: UINT = 0x0001;
+pub const DFCS_CAPTIONMAX: UINT = 0x0002;
+pub const DFCS_CAPTIONRESTORE: UINT = 0x0003;
+pub const DFCS_CAPTIONHELP: UINT = 0x0004;
+pub const DFCS_MENUARROW: UINT = 0x0000;
+pub const DFCS_MENUCHECK: UINT = 0x0001;
+pub const DFCS_MENUBULLET: UINT = 0x0002;
+pub const DFCS_MENUARROWRIGHT: UINT = 0x0004;
+pub const DFCS_SCROLLUP: UINT = 0x0000;
+pub const DFCS_SCROLLDOWN: UINT = 0x0001;
+pub const DFCS_SCROLLLEFT: UINT = 0x0002;
+pub const DFCS_SCROLLRIGHT: UINT = 0x0003;
+pub const DFCS_SCROLLCOMBOBOX: UINT = 0x0005;
+pub const DFCS_SCROLLSIZEGRIP: UINT = 0x0008;
+pub const DFCS_SCROLLSIZEGRIPRIGHT: UINT = 0x0010;
+pub const DFCS_BUTTONCHECK: UINT = 0x0000;
+pub const DFCS_BUTTONRADIOIMAGE: UINT = 0x0001;
+pub const DFCS_BUTTONRADIOMASK: UINT = 0x0002;
+pub const DFCS_BUTTONRADIO: UINT = 0x0004;
+pub const DFCS_BUTTON3STATE: UINT = 0x0008;
+pub const DFCS_BUTTONPUSH: UINT = 0x0010;
+pub const DFCS_INACTIVE: UINT = 0x0100;
+pub const DFCS_PUSHED: UINT = 0x0200;
+pub const DFCS_CHECKED: UINT = 0x0400;
+pub const DFCS_TRANSPARENT: UINT = 0x0800;
+pub const DFCS_HOT: UINT = 0x1000;
+pub const DFCS_ADJUSTRECT: UINT = 0x2000;
+pub const DFCS_FLAT: UINT = 0x4000;
+pub const DFCS_MONO: UINT = 0x8000;
+extern "system" {
+ pub fn DrawFrameControl(
+ hdc: HDC,
+ lprc: LPRECT,
+ uType: UINT,
+ uState: UINT,
+ ) -> BOOL;
+}
+pub const DC_ACTIVE: UINT = 0x0001;
+pub const DC_SMALLCAP: UINT = 0x0002;
+pub const DC_ICON: UINT = 0x0004;
+pub const DC_TEXT: UINT = 0x0008;
+pub const DC_INBUTTON: UINT = 0x0010;
+pub const DC_GRADIENT: UINT = 0x0020;
+pub const DC_BUTTONS: UINT = 0x1000;
+extern "system" {
+ pub fn DrawCaption(
+ hwnd: HWND,
+ hdc: HDC,
+ lprect: *const RECT,
+ flags: UINT,
+ ) -> BOOL;
+}
+pub const IDANI_OPEN: c_int = 1;
+pub const IDANI_CAPTION: c_int = 3;
+extern "system" {
+ pub fn DrawAnimatedRects(
+ hwnd: HWND,
+ idAni: c_int,
+ lprcFrom: *const RECT,
+ lprcTo: *const RECT,
+ ) -> BOOL;
+}
+pub const CF_TEXT: UINT = 1;
+pub const CF_BITMAP: UINT = 2;
+pub const CF_METAFILEPICT: UINT = 3;
+pub const CF_SYLK: UINT = 4;
+pub const CF_DIF: UINT = 5;
+pub const CF_TIFF: UINT = 6;
+pub const CF_OEMTEXT: UINT = 7;
+pub const CF_DIB: UINT = 8;
+pub const CF_PALETTE: UINT = 9;
+pub const CF_PENDATA: UINT = 10;
+pub const CF_RIFF: UINT = 11;
+pub const CF_WAVE: UINT = 12;
+pub const CF_UNICODETEXT: UINT = 13;
+pub const CF_ENHMETAFILE: UINT = 14;
+pub const CF_HDROP: UINT = 15;
+pub const CF_LOCALE: UINT = 16;
+pub const CF_DIBV5: UINT = 17;
+pub const CF_MAX: UINT = 18;
+pub const CF_OWNERDISPLAY: UINT = 0x0080;
+pub const CF_DSPTEXT: UINT = 0x0081;
+pub const CF_DSPBITMAP: UINT = 0x0082;
+pub const CF_DSPMETAFILEPICT: UINT = 0x0083;
+pub const CF_DSPENHMETAFILE: UINT = 0x008E;
+pub const CF_PRIVATEFIRST: UINT = 0x0200;
+pub const CF_PRIVATELAST: UINT = 0x02FF;
+pub const CF_GDIOBJFIRST: UINT = 0x0300;
+pub const CF_GDIOBJLAST: UINT = 0x03FF;
+pub const FVIRTKEY: BYTE = TRUE as u8;
+pub const FNOINVERT: BYTE = 0x02;
+pub const FSHIFT: BYTE = 0x04;
+pub const FCONTROL: BYTE = 0x08;
+pub const FALT: BYTE = 0x10;
+STRUCT!{struct ACCEL {
+ fVirt: BYTE,
+ key: WORD,
+ cmd: WORD,
+}}
+pub type LPACCEL = *mut ACCEL;
+STRUCT!{struct PAINTSTRUCT {
+ hdc: HDC,
+ fErase: BOOL,
+ rcPaint: RECT,
+ fRestore: BOOL,
+ fIncUpdate: BOOL,
+ rgbReserved: [BYTE; 32],
+}}
+pub type PPAINTSTRUCT = *mut PAINTSTRUCT;
+pub type NPPAINTSTRUCT = *mut PAINTSTRUCT;
+pub type LPPAINTSTRUCT = *mut PAINTSTRUCT;
+STRUCT!{struct CREATESTRUCTA {
+ lpCreateParams: LPVOID,
+ hInstance: HINSTANCE,
+ hMenu: HMENU,
+ hwndParent: HWND,
+ cy: c_int,
+ cx: c_int,
+ y: c_int,
+ x: c_int,
+ style: LONG,
+ lpszName: LPCSTR,
+ lpszClass: LPCSTR,
+ dwExStyle: DWORD,
+}}
+pub type LPCREATESTRUCTA = *mut CREATESTRUCTA;
+STRUCT!{struct CREATESTRUCTW {
+ lpCreateParams: LPVOID,
+ hInstance: HINSTANCE,
+ hMenu: HMENU,
+ hwndParent: HWND,
+ cy: c_int,
+ cx: c_int,
+ y: c_int,
+ x: c_int,
+ style: LONG,
+ lpszName: LPCWSTR,
+ lpszClass: LPCWSTR,
+ dwExStyle: DWORD,
+}}
+pub type LPCREATESTRUCTW = *mut CREATESTRUCTW;
+STRUCT!{struct WINDOWPLACEMENT {
+ length: UINT,
+ flags: UINT,
+ showCmd: UINT,
+ ptMinPosition: POINT,
+ ptMaxPosition: POINT,
+ rcNormalPosition: RECT,
+}}
+pub type PWINDOWPLACEMENT = *mut WINDOWPLACEMENT;
+pub type LPWINDOWPLACEMENT = *mut WINDOWPLACEMENT;
+pub const WPF_SETMINPOSITION: UINT = 0x0001;
+pub const WPF_RESTORETOMAXIMIZED: UINT = 0x0002;
+pub const WPF_ASYNCWINDOWPLACEMENT: UINT = 0x0004;
+STRUCT!{struct NMHDR {
+ hwndFrom: HWND,
+ idFrom: UINT_PTR,
+ code: UINT,
+}}
+pub type LPNMHDR = *mut NMHDR;
+STRUCT!{struct STYLESTRUCT {
+ styleOld: DWORD,
+ styleNew: DWORD,
+}}
+pub type LPSTYLESTRUCT = *mut STYLESTRUCT;
+pub const ODT_MENU: UINT = 1;
+pub const ODT_LISTBOX: UINT = 2;
+pub const ODT_COMBOBOX: UINT = 3;
+pub const ODT_BUTTON: UINT = 4;
+pub const ODT_STATIC: UINT = 5;
+pub const ODA_DRAWENTIRE: UINT = 0x0001;
+pub const ODA_SELECT: UINT = 0x0002;
+pub const ODA_FOCUS: UINT = 0x0004;
+pub const ODS_SELECTED: UINT = 0x0001;
+pub const ODS_GRAYED: UINT = 0x0002;
+pub const ODS_DISABLED: UINT = 0x0004;
+pub const ODS_CHECKED: UINT = 0x0008;
+pub const ODS_FOCUS: UINT = 0x0010;
+pub const ODS_DEFAULT: UINT = 0x0020;
+pub const ODS_COMBOBOXEDIT: UINT = 0x1000;
+pub const ODS_HOTLIGHT: UINT = 0x0040;
+pub const ODS_INACTIVE: UINT = 0x0080;
+pub const ODS_NOACCEL: UINT = 0x0100;
+pub const ODS_NOFOCUSRECT: UINT = 0x0200;
+STRUCT!{struct MEASUREITEMSTRUCT {
+ CtlType: UINT,
+ CtlID: UINT,
+ itemID: UINT,
+ itemWidth: UINT,
+ itemHeight: UINT,
+ itemData: ULONG_PTR,
+}}
+pub type PMEASUREITEMSTRUCT = *mut MEASUREITEMSTRUCT;
+pub type LPMEASUREITEMSTRUCT = *mut MEASUREITEMSTRUCT;
+STRUCT!{struct DRAWITEMSTRUCT {
+ CtlType: UINT,
+ CtlID: UINT,
+ itemID: UINT,
+ itemAction: UINT,
+ itemState: UINT,
+ hwndItem: HWND,
+ hDC: HDC,
+ rcItem: RECT,
+ itemData: ULONG_PTR,
+}}
+pub type PDRAWITEMSTRUCT = *mut DRAWITEMSTRUCT;
+pub type LPDRAWITEMSTRUCT = *mut DRAWITEMSTRUCT;
+STRUCT!{struct DELETEITEMSTRUCT {
+ CtlType: UINT,
+ CtlID: UINT,
+ itemID: UINT,
+ hwndItem: HWND,
+ itemData: ULONG_PTR,
+}}
+pub type PDELETEITEMSTRUCT = *mut DELETEITEMSTRUCT;
+pub type LPDELETEITEMSTRUCT = *mut DELETEITEMSTRUCT;
+STRUCT!{struct COMPAREITEMSTRUCT {
+ CtlType: UINT,
+ CtlID: UINT,
+ hwndItem: HWND,
+ itemID1: UINT,
+ itemData1: ULONG_PTR,
+ itemID2: UINT,
+ itemData2: ULONG_PTR,
+ dwLocaleId: DWORD,
+}}
+pub type PCOMPAREITEMSTRUCT = *mut COMPAREITEMSTRUCT;
+pub type LPCOMPAREITEMSTRUCT = *mut COMPAREITEMSTRUCT;
+extern "system" {
+ pub fn GetMessageA(
+ lpMsg: LPMSG,
+ hWnd: HWND,
+ wMsgFilterMin: UINT,
+ wMsgFilterMax: UINT,
+ ) -> BOOL;
+ pub fn GetMessageW(
+ lpMsg: LPMSG,
+ hWnd: HWND,
+ wMsgFilterMin: UINT,
+ wMsgFilterMax: UINT,
+ ) -> BOOL;
+ pub fn TranslateMessage(
+ lpmsg: *const MSG,
+ ) -> BOOL;
+ pub fn DispatchMessageA(
+ lpmsg: *const MSG,
+ ) -> LRESULT;
+ pub fn DispatchMessageW(
+ lpmsg: *const MSG,
+ ) -> LRESULT;
+ pub fn SetMessageQueue(
+ cMessagesMax: c_int,
+ ) -> BOOL;
+ pub fn PeekMessageA(
+ lpMsg: LPMSG,
+ hWnd: HWND,
+ wMsgFilterMin: UINT,
+ wMsgFilterMax: UINT,
+ wRemoveMsg: UINT,
+ ) -> BOOL;
+ pub fn PeekMessageW(
+ lpMsg: LPMSG,
+ hWnd: HWND,
+ wMsgFilterMin: UINT,
+ wMsgFilterMax: UINT,
+ wRemoveMsg: UINT,
+ ) -> BOOL;
+}
+pub const PM_NOREMOVE: UINT = 0x0000;
+pub const PM_REMOVE: UINT = 0x0001;
+pub const PM_NOYIELD: UINT = 0x0002;
+pub const PM_QS_INPUT: UINT = QS_INPUT << 16;
+pub const PM_QS_POSTMESSAGE: UINT = (QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16;
+pub const PM_QS_PAINT: UINT = QS_PAINT << 16;
+pub const PM_QS_SENDMESSAGE: UINT = QS_SENDMESSAGE << 16;
+extern "system" {
+ pub fn RegisterHotKey(
+ hwnd: HWND,
+ id: c_int,
+ fsModifiers: UINT,
+ vk: UINT,
+ ) -> BOOL;
+ pub fn UnregisterHotKey(
+ hWnd: HWND,
+ id: c_int,
+ ) -> BOOL;
+}
+pub const MOD_ALT: LPARAM = 0x0001;
+pub const MOD_CONTROL: LPARAM = 0x0002;
+pub const MOD_SHIFT: LPARAM = 0x0004;
+pub const MOD_WIN: LPARAM = 0x0008;
+pub const MOD_NOREPEAT: LPARAM = 0x4000;
+pub const IDHOT_SNAPWINDOW: WPARAM = -1isize as usize;
+pub const IDHOT_SNAPDESKTOP: WPARAM = -2isize as usize;
+pub const ENDSESSION_CLOSEAPP: UINT = 0x00000001;
+pub const ENDSESSION_CRITICAL: UINT = 0x40000000;
+pub const ENDSESSION_LOGOFF: UINT = 0x80000000;
+pub const EWX_LOGOFF: UINT = 0x00000000;
+pub const EWX_SHUTDOWN: UINT = 0x00000001;
+pub const EWX_REBOOT: UINT = 0x00000002;
+pub const EWX_FORCE: UINT = 0x00000004;
+pub const EWX_POWEROFF: UINT = 0x00000008;
+pub const EWX_FORCEIFHUNG: UINT = 0x00000010;
+pub const EWX_QUICKRESOLVE: UINT = 0x00000020;
+pub const EWX_RESTARTAPPS: UINT = 0x00000040;
+pub const EWX_HYBRID_SHUTDOWN: UINT = 0x00400000;
+pub const EWX_BOOTOPTIONS: UINT = 0x01000000;
+// ExitWindows
+extern "system" {
+ pub fn ExitWindowsEx(
+ uFlags: UINT,
+ dwReason: DWORD,
+ ) -> BOOL;
+ pub fn SwapMouseButton(
+ fSwap: BOOL,
+ ) -> BOOL;
+ pub fn GetMessagePos() -> DWORD;
+ pub fn GetMessageTime() -> LONG;
+ pub fn GetMessageExtraInfo() -> LPARAM;
+ pub fn GetUnpredictedMessagePos() -> DWORD;
+ pub fn IsWow64Message() -> BOOL;
+ pub fn SetMessageExtraInfo(
+ lParam: LPARAM,
+ ) -> LPARAM;
+ pub fn SendMessageA(
+ hWnd: HWND,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LRESULT;
+ pub fn SendMessageW(
+ hWnd: HWND,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LRESULT;
+ pub fn SendMessageTimeoutA(
+ hWnd: HWND,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ fuFlags: UINT,
+ uTimeout: UINT,
+ lpdwResult: PDWORD_PTR,
+ ) -> LRESULT;
+ pub fn SendMessageTimeoutW(
+ hWnd: HWND,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ fuFlags: UINT,
+ uTimeout: UINT,
+ lpdwResult: PDWORD_PTR,
+ ) -> LRESULT;
+ pub fn SendNotifyMessageA(
+ hWnd: HWND,
+ msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> BOOL;
+ pub fn SendNotifyMessageW(
+ hWnd: HWND,
+ msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> BOOL;
+ pub fn SendMessageCallbackA(
+ hWnd: HWND,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ lpResultCallBack: SENDASYNCPROC,
+ dwData: ULONG_PTR,
+ ) -> BOOL;
+ pub fn SendMessageCallbackW(
+ hWnd: HWND,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ lpResultCallBack: SENDASYNCPROC,
+ dwData: ULONG_PTR,
+ ) -> BOOL;
+}
+STRUCT!{struct BSMINFO {
+ cbSize: UINT,
+ hdesk: HDESK,
+ hwnd: HWND,
+ luid: LUID,
+}}
+pub type PBSMINFO = *mut BSMINFO;
+extern "system" {
+ pub fn BroadcastSystemMessageExA(
+ flags: DWORD,
+ lpInfo: LPDWORD,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ pbsmInfo: PBSMINFO,
+ ) -> c_long;
+ pub fn BroadcastSystemMessageExW(
+ flags: DWORD,
+ lpInfo: LPDWORD,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ pbsmInfo: PBSMINFO,
+ ) -> c_long;
+ pub fn BroadcastSystemMessageA(
+ flags: DWORD,
+ lpInfo: LPDWORD,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LONG;
+ pub fn BroadcastSystemMessageW(
+ flags: DWORD,
+ lpInfo: LPDWORD,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LONG;
+}
+pub const BSM_ALLCOMPONENTS: DWORD = 0x00000000;
+pub const BSM_VXDS: DWORD = 0x00000001;
+pub const BSM_NETDRIVER: DWORD = 0x00000002;
+pub const BSM_INSTALLABLEDRIVERS: DWORD = 0x00000004;
+pub const BSM_APPLICATIONS: DWORD = 0x00000008;
+pub const BSM_ALLDESKTOPS: DWORD = 0x00000010;
+pub const BSF_QUERY: DWORD = 0x00000001;
+pub const BSF_IGNORECURRENTTASK: DWORD = 0x00000002;
+pub const BSF_FLUSHDISK: DWORD = 0x00000004;
+pub const BSF_NOHANG: DWORD = 0x00000008;
+pub const BSF_POSTMESSAGE: DWORD = 0x00000010;
+pub const BSF_FORCEIFHUNG: DWORD = 0x00000020;
+pub const BSF_NOTIMEOUTIFNOTHUNG: DWORD = 0x00000040;
+pub const BSF_ALLOWSFW: DWORD = 0x00000080;
+pub const BSF_SENDNOTIFYMESSAGE: DWORD = 0x00000100;
+pub const BSF_RETURNHDESK: DWORD = 0x00000200;
+pub const BSF_LUID: DWORD = 0x00000400;
+pub const BROADCAST_QUERY_DENY: DWORD = 0x424D5144;
+pub type HDEVNOTIFY = PVOID;
+pub type PHDEVNOTIFY = *mut HDEVNOTIFY;
+pub const DEVICE_NOTIFY_WINDOW_HANDLE: DWORD = 0x00000000;
+pub const DEVICE_NOTIFY_SERVICE_HANDLE: DWORD = 0x00000001;
+pub const DEVICE_NOTIFY_ALL_INTERFACE_CLASSES: DWORD = 0x00000004;
+extern "system" {
+ pub fn RegisterDeviceNotificationA(
+ hRecipient: HANDLE,
+ notificationFilter: LPVOID,
+ flags: DWORD,
+ ) -> HDEVNOTIFY;
+ pub fn RegisterDeviceNotificationW(
+ hRecipient: HANDLE,
+ notificationFilter: LPVOID,
+ flags: DWORD,
+ ) -> HDEVNOTIFY;
+ pub fn UnregisterDeviceNotification(
+ Handle: HDEVNOTIFY,
+ ) -> BOOL;
+}
+pub type HPOWERNOTIFY = PVOID;
+pub type PHPOWERNOTIFY = *mut HPOWERNOTIFY;
+extern "system" {
+ pub fn RegisterPowerSettingNotification(
+ hRecipient: HANDLE,
+ PowerSettingGuid: LPCGUID,
+ Flags: DWORD,
+ ) -> HPOWERNOTIFY;
+ pub fn UnregisterPowerSettingNotification(
+ Handle: HPOWERNOTIFY,
+ ) -> BOOL;
+ pub fn RegisterSuspendResumeNotification(
+ hRecipient: HANDLE,
+ Flags: DWORD,
+ ) -> HPOWERNOTIFY;
+ pub fn UnregisterSuspendResumeNotification(
+ Handle: HPOWERNOTIFY,
+ ) -> BOOL;
+ pub fn PostMessageA(
+ hWnd: HWND,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> BOOL;
+ pub fn PostMessageW(
+ hWnd: HWND,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> BOOL;
+ pub fn PostThreadMessageA(
+ idThread: DWORD,
+ msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> BOOL;
+ pub fn PostThreadMessageW(
+ idThread: DWORD,
+ msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> BOOL;
+}
+// PostAppMessageA
+// PostAppMessageW
+pub const HWND_BROADCAST: HWND = 0xffff as HWND;
+pub const HWND_MESSAGE: HWND = -3isize as HWND;
+extern "system" {
+ pub fn AttachThreadInput(
+ idAttach: DWORD,
+ idAttachTo: DWORD,
+ fAttach: BOOL,
+ ) -> BOOL;
+ pub fn ReplyMessage(
+ lResult: LRESULT,
+ ) -> BOOL;
+ pub fn WaitMessage() -> BOOL;
+ pub fn WaitForInputIdle(
+ hProcess: HANDLE,
+ dwMilliseconds: DWORD,
+ ) -> DWORD;
+ pub fn DefWindowProcA(
+ hWnd: HWND,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LRESULT;
+ pub fn DefWindowProcW(
+ hWnd: HWND,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LRESULT;
+ pub fn PostQuitMessage(
+ nExitCode: c_int,
+ );
+ pub fn CallWindowProcA(
+ lpPrevWndFunc: WNDPROC,
+ hWnd: HWND,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LRESULT;
+ pub fn CallWindowProcW(
+ lpPrevWndFunc: WNDPROC,
+ hWnd: HWND,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LRESULT;
+ pub fn InSendMessage() -> BOOL;
+ pub fn InSendMessageEx(
+ lpReserved: LPVOID,
+ ) -> DWORD;
+}
+pub const ISMEX_NOSEND: DWORD = 0x00000000;
+pub const ISMEX_SEND: DWORD = 0x00000001;
+pub const ISMEX_NOTIFY: DWORD = 0x00000002;
+pub const ISMEX_CALLBACK: DWORD = 0x00000004;
+pub const ISMEX_REPLIED: DWORD = 0x00000008;
+extern "system" {
+ pub fn GetDoubleClickTime() -> UINT;
+ pub fn SetDoubleClickTime(
+ uInterval: UINT,
+ ) -> BOOL;
+ pub fn RegisterClassA(
+ lpWndClass: *const WNDCLASSA,
+ ) -> ATOM;
+ pub fn RegisterClassW(
+ lpWndClass: *const WNDCLASSW,
+ ) -> ATOM;
+ pub fn UnregisterClassA(
+ lpClassName: LPCSTR,
+ hInstance: HINSTANCE,
+ ) -> BOOL;
+ pub fn UnregisterClassW(
+ lpClassName: LPCWSTR,
+ hInstance: HINSTANCE,
+ ) -> BOOL;
+ pub fn GetClassInfoA(
+ hInstance: HINSTANCE,
+ lpClassName: LPCSTR,
+ lpWndClass: LPWNDCLASSA,
+ ) -> BOOL;
+ pub fn GetClassInfoW(
+ hInstance: HINSTANCE,
+ lpClassName: LPCWSTR,
+ lpWndClass: LPWNDCLASSW,
+ ) -> BOOL;
+ pub fn RegisterClassExA(
+ lpWndClass: *const WNDCLASSEXA,
+ ) -> ATOM;
+ pub fn RegisterClassExW(
+ lpWndClass: *const WNDCLASSEXW,
+ ) -> ATOM;
+ pub fn GetClassInfoExA(
+ hinst: HINSTANCE,
+ lpszClass: LPCSTR,
+ lpwcx: LPWNDCLASSEXA,
+ ) -> BOOL;
+ pub fn GetClassInfoExW(
+ hinst: HINSTANCE,
+ lpszClass: LPCWSTR,
+ lpwcx: LPWNDCLASSEXW,
+ ) -> BOOL;
+}
+pub const CW_USEDEFAULT: c_int = 0x80000000;
+pub const HWND_DESKTOP: HWND = 0 as HWND;
+FN!{stdcall PREGISTERCLASSNAMEW(
+ LPCWSTR,
+) -> BOOLEAN}
+extern "system" {
+ pub fn CreateWindowExA(
+ dwExStyle: DWORD,
+ lpClassName: LPCSTR,
+ lpWindowName: LPCSTR,
+ dwStyle: DWORD,
+ x: c_int,
+ y: c_int,
+ nWidth: c_int,
+ nHeight: c_int,
+ hWndParent: HWND,
+ hMenu: HMENU,
+ hInstance: HINSTANCE,
+ lpParam: LPVOID,
+ ) -> HWND;
+ pub fn CreateWindowExW(
+ dwExStyle: DWORD,
+ lpClassName: LPCWSTR,
+ lpWindowName: LPCWSTR,
+ dwStyle: DWORD,
+ x: c_int,
+ y: c_int,
+ nWidth: c_int,
+ nHeight: c_int,
+ hWndParent: HWND,
+ hMenu: HMENU,
+ hInstance: HINSTANCE,
+ lpParam: LPVOID,
+ ) -> HWND;
+}
+// CreateWindowA
+// CreateWindowW
+extern "system" {
+ pub fn IsWindow(
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn IsMenu(
+ hMenu: HMENU,
+ ) -> BOOL;
+ pub fn IsChild(
+ hWndParent: HWND,
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn DestroyWindow(
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn ShowWindow(
+ hWnd: HWND,
+ nCmdShow: c_int,
+ ) -> BOOL;
+ pub fn AnimateWindow(
+ hWnd: HWND,
+ dwTime: DWORD,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn UpdateLayeredWindow(
+ hWnd: HWND,
+ hdcDst: HDC,
+ pptDst: *mut POINT,
+ psize: *mut SIZE,
+ hdcSrc: HDC,
+ pptSrc: *mut POINT,
+ crKey: COLORREF,
+ pblend: *mut BLENDFUNCTION,
+ dwFlags: DWORD,
+ ) -> BOOL;
+}
+STRUCT!{struct UPDATELAYEREDWINDOWINFO {
+ cbSize: DWORD,
+ hdcDst: HDC,
+ pptDst: *const POINT,
+ psize: *const SIZE,
+ hdcSrc: HDC,
+ pptSrc: *const POINT,
+ crKey: COLORREF,
+ pblend: *const BLENDFUNCTION,
+ dwFlags: DWORD,
+ prcDirty: *const RECT,
+}}
+pub type PUPDATELAYEREDWINDOWINFO = *mut UPDATELAYEREDWINDOWINFO;
+extern "system" {
+ pub fn UpdateLayeredWindowIndirect(
+ hWnd: HWND,
+ pULWInfo: *mut UPDATELAYEREDWINDOWINFO,
+ ) -> BOOL;
+ pub fn GetLayeredWindowAttributes(
+ hwnd: HWND,
+ pcrKey: *mut COLORREF,
+ pbAlpha: *mut BYTE,
+ pdwFlags: *mut DWORD,
+ ) -> BOOL;
+}
+pub const PW_CLIENTONLY: DWORD = 0x00000001;
+pub const PW_RENDERFULLCONTENT: DWORD = 0x00000002;
+extern "system" {
+ pub fn PrintWindow(
+ hwnd: HWND,
+ hdcBlt: HDC,
+ nFlags: UINT,
+ ) -> BOOL;
+ pub fn SetLayeredWindowAttributes(
+ hwnd: HWND,
+ crKey: COLORREF,
+ bAlpha: BYTE,
+ dwFlags: DWORD,
+ ) -> BOOL;
+}
+pub const LWA_COLORKEY: DWORD = 0x00000001;
+pub const LWA_ALPHA: DWORD = 0x00000002;
+pub const ULW_COLORKEY: DWORD = 0x00000001;
+pub const ULW_ALPHA: DWORD = 0x00000002;
+pub const ULW_OPAQUE: DWORD = 0x00000004;
+pub const ULW_EX_NORESIZE: DWORD = 0x00000008;
+extern "system" {
+ pub fn ShowWindowAsync(
+ hWnd: HWND,
+ nCmdShow: c_int,
+ ) -> BOOL;
+ pub fn FlashWindow(
+ hwnd: HWND,
+ bInvert: BOOL,
+ ) -> BOOL;
+}
+STRUCT!{struct FLASHWINFO {
+ cbSize: UINT,
+ hwnd: HWND,
+ dwFlags: DWORD,
+ uCount: UINT,
+ dwTimeout: DWORD,
+}}
+pub type PFLASHWINFO = *mut FLASHWINFO;
+extern "system" {
+ pub fn FlashWindowEx(
+ pfwi: PFLASHWINFO,
+ ) -> BOOL;
+}
+pub const FLASHW_STOP: DWORD = 0;
+pub const FLASHW_CAPTION: DWORD = 0x00000001;
+pub const FLASHW_TRAY: DWORD = 0x00000002;
+pub const FLASHW_ALL: DWORD = FLASHW_CAPTION | FLASHW_TRAY;
+pub const FLASHW_TIMER: DWORD = 0x00000004;
+pub const FLASHW_TIMERNOFG: DWORD = 0x0000000C;
+extern "system" {
+ pub fn ShowOwnedPopups(
+ hWnd: HWND,
+ fShow: BOOL,
+ ) -> BOOL;
+ pub fn OpenIcon(
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn CloseWindow(
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn MoveWindow(
+ hWnd: HWND,
+ X: c_int,
+ Y: c_int,
+ nWidth: c_int,
+ nHeight: c_int,
+ bRepaint: BOOL,
+ ) -> BOOL;
+ pub fn SetWindowPos(
+ hWnd: HWND,
+ hWndInsertAfter: HWND,
+ X: c_int,
+ Y: c_int,
+ cx: c_int,
+ cy: c_int,
+ uFlags: UINT,
+ ) -> BOOL;
+ pub fn GetWindowPlacement(
+ hWnd: HWND,
+ lpwndpl: *mut WINDOWPLACEMENT,
+ ) -> BOOL;
+ pub fn SetWindowPlacement(
+ hWnd: HWND,
+ lpwndpl: *const WINDOWPLACEMENT,
+ ) -> BOOL;
+}
+pub const WDA_NONE: DWORD = 0x00000000;
+pub const WDA_MONITOR: DWORD = 0x00000001;
+extern "system" {
+ pub fn GetWindowDisplayAffinity(
+ hWnd: HWND,
+ pdwAffinity: *mut DWORD,
+ ) -> BOOL;
+ pub fn SetWindowDisplayAffinity(
+ hWnd: HWND,
+ dwAffinity: DWORD,
+ ) -> BOOL;
+ pub fn BeginDeferWindowPos(
+ nNumWindows: c_int,
+ ) -> HDWP;
+ pub fn DeferWindowPos(
+ hWinPosInfo: HDWP,
+ hWnd: HWND,
+ hWndInserAfter: HWND,
+ x: c_int,
+ y: c_int,
+ cx: c_int,
+ cy: c_int,
+ uFlags: UINT,
+ ) -> HDWP;
+ pub fn EndDeferWindowPos(
+ hWinPosInfo: HDWP,
+ ) -> BOOL;
+ pub fn IsWindowVisible(
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn IsIconic(
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn AnyPopup() -> BOOL;
+ pub fn BringWindowToTop(
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn IsZoomed(
+ hwnd: HWND,
+ ) -> BOOL;
+}
+pub const SWP_NOSIZE: UINT = 0x0001;
+pub const SWP_NOMOVE: UINT = 0x0002;
+pub const SWP_NOZORDER: UINT = 0x0004;
+pub const SWP_NOREDRAW: UINT = 0x0008;
+pub const SWP_NOACTIVATE: UINT = 0x0010;
+pub const SWP_FRAMECHANGED: UINT = 0x0020;
+pub const SWP_SHOWWINDOW: UINT = 0x0040;
+pub const SWP_HIDEWINDOW: UINT = 0x0080;
+pub const SWP_NOCOPYBITS: UINT = 0x0100;
+pub const SWP_NOOWNERZORDER: UINT = 0x0200;
+pub const SWP_NOSENDCHANGING: UINT = 0x0400;
+pub const SWP_DRAWFRAME: UINT = SWP_FRAMECHANGED;
+pub const SWP_NOREPOSITION: UINT = SWP_NOOWNERZORDER;
+pub const SWP_DEFERERASE: UINT = 0x2000;
+pub const SWP_ASYNCWINDOWPOS: UINT = 0x4000;
+pub const HWND_TOP: HWND = 0 as HWND;
+pub const HWND_BOTTOM: HWND = 1 as HWND;
+pub const HWND_TOPMOST: HWND = -1isize as HWND;
+pub const HWND_NOTOPMOST: HWND = -2isize as HWND;
+// FIXME packed(2)
+STRUCT!{#[repr(packed)] struct DLGTEMPLATE {
+ style: DWORD,
+ dwExtendedStyle: DWORD,
+ cdit: WORD,
+ x: c_short,
+ y: c_short,
+ cx: c_short,
+ cy: c_short,
+}}
+pub type LPDLGTEMPLATEA = *mut DLGTEMPLATE;
+pub type LPDLGTEMPLATEW = *mut DLGTEMPLATE;
+pub type LPCDLGTEMPLATEA = *const DLGTEMPLATE;
+pub type LPCDLGTEMPLATEW = *const DLGTEMPLATE;
+// FIXME packed(2)
+STRUCT!{#[repr(packed)] struct DLGITEMTEMPLATE {
+ style: DWORD,
+ dwExtendedStyle: DWORD,
+ x: c_short,
+ y: c_short,
+ cx: c_short,
+ cy: c_short,
+ id: WORD,
+}}
+pub type PDLGITEMTEMPLATEA = *mut DLGITEMTEMPLATE;
+pub type PDLGITEMTEMPLATEW = *mut DLGITEMTEMPLATE;
+pub type LPDLGITEMTEMPLATEA = *mut DLGITEMTEMPLATE;
+pub type LPDLGITEMTEMPLATEW = *mut DLGITEMTEMPLATE;
+extern "system" {
+ pub fn CreateDialogParamA(
+ hInstance: HINSTANCE,
+ lpTemplateName: LPCSTR,
+ hWndParent: HWND,
+ lpDialogFunc: DLGPROC,
+ dwInitParam: LPARAM,
+ ) -> HWND;
+ pub fn CreateDialogParamW(
+ hInstance: HINSTANCE,
+ lpTemplateName: LPCWSTR,
+ hWndParent: HWND,
+ lpDialogFunc: DLGPROC,
+ dwInitParam: LPARAM,
+ ) -> HWND;
+ pub fn CreateDialogIndirectParamA(
+ hInstance: HINSTANCE,
+ lpTemplate: LPCDLGTEMPLATEA,
+ hWndParent: HWND,
+ lpDialogFunc: DLGPROC,
+ dwInitParam: LPARAM,
+ ) -> HWND;
+ pub fn CreateDialogIndirectParamW(
+ hInstance: HINSTANCE,
+ lpTemplate: LPCDLGTEMPLATEW,
+ hWndParent: HWND,
+ lpDialogFunc: DLGPROC,
+ dwInitParam: LPARAM,
+ ) -> HWND;
+}
+// CreateDialogA
+// CreateDialogW
+// CreateDialogIndirectA
+// CreateDialogIndirectW
+extern "system" {
+ pub fn DialogBoxParamA(
+ hInstance: HINSTANCE,
+ lpTemplateName: LPCSTR,
+ hWndParent: HWND,
+ lpDialogFunc: DLGPROC,
+ dwInitParam: LPARAM,
+ ) -> INT_PTR;
+ pub fn DialogBoxParamW(
+ hInstance: HINSTANCE,
+ lpTemplateName: LPCWSTR,
+ hWndParent: HWND,
+ lpDialogFunc: DLGPROC,
+ dwInitParam: LPARAM,
+ ) -> INT_PTR;
+ pub fn DialogBoxIndirectParamA(
+ hInstance: HINSTANCE,
+ hDialogTemplate: LPCDLGTEMPLATEA,
+ hWndParent: HWND,
+ lpDialogFunc: DLGPROC,
+ dwInitParam: LPARAM,
+ ) -> INT_PTR;
+ pub fn DialogBoxIndirectParamW(
+ hInstance: HINSTANCE,
+ hDialogTemplate: LPCDLGTEMPLATEW,
+ hWndParent: HWND,
+ lpDialogFunc: DLGPROC,
+ dwInitParam: LPARAM,
+ ) -> INT_PTR;
+}
+// DialogBoxA
+// DialogBoxW
+// DialogBoxIndirectA
+// DialogBoxIndirectW
+extern "system" {
+ pub fn EndDialog(
+ hDlg: HWND,
+ nResult: INT_PTR,
+ ) -> BOOL;
+ pub fn GetDlgItem(
+ hDlg: HWND,
+ nIDDlgItem: c_int,
+ ) -> HWND;
+ pub fn SetDlgItemInt(
+ hDlg: HWND,
+ nIDDlgItem: c_int,
+ uValue: UINT,
+ bSigned: BOOL,
+ ) -> BOOL;
+ pub fn GetDlgItemInt(
+ hDlg: HWND,
+ nIDDlgItem: c_int,
+ lpTranslated: *mut BOOL,
+ bSigned: BOOL,
+ ) -> UINT;
+ pub fn SetDlgItemTextA(
+ hDlg: HWND,
+ nIDDlgItem: c_int,
+ lpString: LPCSTR,
+ ) -> BOOL;
+ pub fn SetDlgItemTextW(
+ hDlg: HWND,
+ nIDDlgItem: c_int,
+ lpString: LPCWSTR,
+ ) -> BOOL;
+ pub fn GetDlgItemTextA(
+ hDlg: HWND,
+ nIDDlgItem: c_int,
+ lpString: LPSTR,
+ nMaxCount: c_int,
+ ) -> UINT;
+ pub fn GetDlgItemTextW(
+ hDlg: HWND,
+ nIDDlgItem: c_int,
+ lpString: LPWSTR,
+ nMaxCount: c_int,
+ ) -> UINT;
+ pub fn CheckDlgButton(
+ hDlg: HWND,
+ nIDButton: c_int,
+ uCheck: UINT,
+ ) -> BOOL;
+ pub fn CheckRadioButton(
+ hDlg: HWND,
+ nIDFirstButton: c_int,
+ nIDLasatButton: c_int,
+ nIDCheckButton: c_int,
+ ) -> BOOL;
+ pub fn IsDlgButtonChecked(
+ hDlg: HWND,
+ nIDButton: c_int,
+ ) -> UINT;
+ pub fn SendDlgItemMessageA(
+ hDlg: HWND,
+ nIDDlgItem: c_int,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LRESULT;
+ pub fn SendDlgItemMessageW(
+ hDlg: HWND,
+ nIDDlgItem: c_int,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LRESULT;
+ pub fn GetNextDlgGroupItem(
+ hDlg: HWND,
+ hCtl: HWND,
+ bPrevious: BOOL,
+ ) -> HWND;
+ pub fn GetNextDlgTabItem(
+ hDlg: HWND,
+ hCtl: HWND,
+ bPrevious: BOOL,
+ ) -> HWND;
+ pub fn GetDlgCtrlID(
+ hwnd: HWND,
+ ) -> c_int;
+ pub fn GetDialogBaseUnits() -> LONG;
+ pub fn DefDlgProcA(
+ hDlg: HWND,
+ msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LRESULT;
+ pub fn DefDlgProcW(
+ hDlg: HWND,
+ msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LRESULT;
+}
+ENUM!{enum DIALOG_CONTROL_DPI_CHANGE_BEHAVIORS {
+ DCDC_DEFAULT = 0x0000,
+ DCDC_DISABLE_FONT_UPDATE = 0x0001,
+ DCDC_DISABLE_RELAYOUT = 0x0002,
+}}
+extern "system" {
+ pub fn SetDialogControlDpiChangeBehavior(
+ hwnd: HWND,
+ mask: DIALOG_CONTROL_DPI_CHANGE_BEHAVIORS,
+ values: DIALOG_CONTROL_DPI_CHANGE_BEHAVIORS,
+ ) -> BOOL;
+ pub fn GetDialogControlDpiChangeBehavior(
+ hwnd: HWND,
+ ) -> DIALOG_CONTROL_DPI_CHANGE_BEHAVIORS;
+}
+ENUM!{enum DIALOG_DPI_CHANGE_BEHAVIORS {
+ DDC_DEFAULT = 0x0000,
+ DDC_DISABLE_ALL = 0x0001,
+ DDC_DISABLE_RESIZE = 0x0002,
+ DDC_DISABLE_CONTROL_RELAYOUT = 0x0004,
+}}
+extern "system" {
+ pub fn SetDialogDpiChangeBehavior(
+ hDlg: HWND,
+ mask: DIALOG_DPI_CHANGE_BEHAVIORS,
+ values: DIALOG_DPI_CHANGE_BEHAVIORS,
+ ) -> BOOL;
+ pub fn GetDialogDpiChangeBehavior(
+ hDlg: HWND,
+ ) -> DIALOG_DPI_CHANGE_BEHAVIORS;
+ pub fn CallMsgFilterA(
+ lpMsg: LPMSG,
+ nCode: c_int,
+ ) -> BOOL;
+ pub fn CallMsgFilterW(
+ lpMsg: LPMSG,
+ nCode: c_int,
+ ) -> BOOL;
+ pub fn OpenClipboard(
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn CloseClipboard() -> BOOL;
+ pub fn GetClipboardSequenceNumber() -> DWORD;
+ pub fn GetClipboardOwner() -> HWND;
+ pub fn SetClipboardViewer(
+ hWndNewViewer: HWND,
+ ) -> HWND;
+ pub fn GetClipboardViewer() -> HWND;
+ pub fn ChangeClipboardChain(
+ hwndRemove: HWND,
+ hwndNewNext: HWND,
+ ) -> BOOL;
+ pub fn SetClipboardData(
+ uFormat: UINT,
+ hMem: HANDLE,
+ ) -> HANDLE;
+ pub fn GetClipboardData(
+ uFormat: UINT,
+ ) -> HANDLE;
+ pub fn RegisterClipboardFormatA(
+ lpszFormat: LPCSTR,
+ ) -> UINT;
+ pub fn RegisterClipboardFormatW(
+ lpszFormat: LPCWSTR,
+ ) -> UINT;
+ pub fn CountClipboardFormats() -> c_int;
+ pub fn EnumClipboardFormats(
+ format: UINT,
+ ) -> UINT;
+ pub fn GetClipboardFormatNameA(
+ format: UINT,
+ lpszFormatName: LPSTR,
+ cchMaxCount: c_int,
+ ) -> c_int;
+ pub fn GetClipboardFormatNameW(
+ format: UINT,
+ lpszFormatName: LPWSTR,
+ cchMaxCount: c_int,
+ ) -> c_int;
+ pub fn EmptyClipboard() -> BOOL;
+ pub fn IsClipboardFormatAvailable(
+ format: UINT,
+ ) -> BOOL;
+ pub fn GetPriorityClipboardFormat(
+ paFormatPriorityList: *mut UINT,
+ cFormats: c_int,
+ ) -> c_int;
+ pub fn GetOpenClipboardWindow() -> HWND;
+ pub fn AddClipboardFormatListener(
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn RemoveClipboardFormatListener(
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn GetUpdatedClipboardFormats(
+ lpuiFormats: PUINT,
+ cFormats: UINT,
+ pcFormatsOUT: PUINT,
+ ) -> BOOL;
+ pub fn CharToOemA(
+ pSrc: LPCSTR,
+ pDst: LPSTR,
+ ) -> BOOL;
+ pub fn CharToOemW(
+ pSrc: LPCWSTR,
+ pDst: LPSTR,
+ ) -> BOOL;
+ pub fn OemToCharA(
+ pSrc: LPCSTR,
+ pDst: LPSTR,
+ ) -> BOOL;
+ pub fn OemToCharW(
+ pSrc: LPCSTR,
+ pDst: LPWSTR,
+ ) -> BOOL;
+ pub fn CharToOemBuffA(
+ lpszSrc: LPCSTR,
+ lpszDst: LPSTR,
+ cchDstLength: DWORD,
+ ) -> BOOL;
+ pub fn CharToOemBuffW(
+ lpszSrc: LPCWSTR,
+ lpszDst: LPSTR,
+ cchDstLength: DWORD,
+ ) -> BOOL;
+ pub fn OemToCharBuffA(
+ lpszSrc: LPCSTR,
+ lpszDst: LPSTR,
+ cchDstLength: DWORD,
+ ) -> BOOL;
+ pub fn OemToCharBuffW(
+ lpszSrc: LPCSTR,
+ lpszDst: LPWSTR,
+ cchDstLength: DWORD,
+ ) -> BOOL;
+ pub fn CharUpperA(
+ lpsz: LPSTR,
+ ) -> LPSTR;
+ pub fn CharUpperW(
+ lpsz: LPWSTR,
+ ) -> LPWSTR;
+ pub fn CharUpperBuffA(
+ lpsz: LPSTR,
+ cchLength: DWORD,
+ ) -> DWORD;
+ pub fn CharUpperBuffW(
+ lpsz: LPWSTR,
+ cchLength: DWORD,
+ ) -> DWORD;
+ pub fn CharLowerA(
+ lpsz: LPSTR,
+ ) -> LPSTR;
+ pub fn CharLowerW(
+ lpsz: LPWSTR,
+ ) -> LPWSTR;
+ pub fn CharLowerBuffA(
+ lpsz: LPSTR,
+ cchLength: DWORD,
+ ) -> DWORD;
+ pub fn CharLowerBuffW(
+ lpsz: LPWSTR,
+ cchLength: DWORD,
+ ) -> DWORD;
+ pub fn CharNextA(
+ lpsz: LPCSTR,
+ ) -> LPSTR;
+ pub fn CharNextW(
+ lpsz: LPCWSTR,
+ ) -> LPWSTR;
+ pub fn CharPrevA(
+ lpszStart: LPCSTR,
+ lpszCurrent: LPCSTR,
+ ) -> LPSTR;
+ pub fn CharPrevW(
+ lpszStart: LPCWSTR,
+ lpszCurrent: LPCWSTR,
+ ) -> LPWSTR;
+ pub fn CharNextExA(
+ codePage: WORD,
+ lpCurrentChar: LPSTR,
+ dwFlags: DWORD,
+ ) -> LPSTR;
+ pub fn CharPrevExA(
+ codePage: WORD,
+ lpStart: LPCSTR,
+ lpCurrentChar: LPCSTR,
+ dwFlags: DWORD,
+ ) -> LPSTR;
+}
+// AnsiToOem
+// OemToAnsi
+// AnsiToOemBuff
+// OemToAnsiBuff
+// AnsiUpper
+// AnsiUpperBuff
+// AnsiLower
+// AnsiLowerBuff
+// AnsiNext
+// AnsiPrev
+extern "system" {
+ pub fn IsCharAlphaA(
+ ch: CHAR,
+ ) -> BOOL;
+ pub fn IsCharAlphaW(
+ ch: WCHAR,
+ ) -> BOOL;
+ pub fn IsCharAlphaNumericA(
+ ch: CHAR,
+ ) -> BOOL;
+ pub fn IsCharAlphaNumericW(
+ ch: WCHAR,
+ ) -> BOOL;
+ pub fn IsCharUpperA(
+ ch: CHAR,
+ ) -> BOOL;
+ pub fn IsCharUpperW(
+ ch: WCHAR,
+ ) -> BOOL;
+ pub fn IsCharLowerA(
+ ch: CHAR,
+ ) -> BOOL;
+ pub fn IsCharLowerW(
+ ch: WCHAR,
+ ) -> BOOL;
+ pub fn SetFocus(
+ hWnd: HWND,
+ ) -> HWND;
+ pub fn GetActiveWindow() -> HWND;
+ pub fn GetFocus() -> HWND;
+ pub fn GetKBCodePage() -> UINT;
+ pub fn GetKeyState(
+ nVirtKey: c_int,
+ ) -> SHORT;
+ pub fn GetAsyncKeyState(
+ vKey: c_int,
+ ) -> SHORT;
+ pub fn GetKeyboardState(
+ lpKeyState: PBYTE,
+ ) -> BOOL;
+ pub fn SetKeyboardState(
+ lpKeyState: LPBYTE,
+ ) -> BOOL;
+ pub fn GetKeyNameTextA(
+ lparam: LONG,
+ lpString: LPSTR,
+ cchSize: c_int,
+ ) -> c_int;
+ pub fn GetKeyNameTextW(
+ lParam: LONG,
+ lpString: LPWSTR,
+ cchSize: c_int,
+ ) -> c_int;
+ pub fn GetKeyboardType(
+ nTypeFlag: c_int,
+ ) -> c_int;
+ pub fn ToAscii(
+ uVirtKey: UINT,
+ uScanCode: UINT,
+ lpKeyState: *const BYTE,
+ lpChar: LPWORD,
+ uFlags: UINT,
+ ) -> c_int;
+ pub fn ToAsciiEx(
+ uVirtKey: UINT,
+ uScanCode: UINT,
+ lpKeyState: *const BYTE,
+ lpChar: LPWORD,
+ uFlags: UINT,
+ dwhkl: HKL,
+ ) -> c_int;
+ pub fn ToUnicode(
+ wVirtKey: UINT,
+ wScanCode: UINT,
+ lpKeyState: *const BYTE,
+ lwszBuff: LPWSTR,
+ cchBuff: c_int,
+ wFlags: UINT,
+ ) -> c_int;
+ pub fn OemKeyScan(
+ wOemChar: WORD,
+ ) -> DWORD;
+ pub fn VkKeyScanA(
+ ch: CHAR,
+ ) -> SHORT;
+ pub fn VkKeyScanW(
+ ch: WCHAR,
+ ) -> SHORT;
+ pub fn VkKeyScanExA(
+ ch: CHAR,
+ dwhkl: HKL,
+ ) -> SHORT;
+ pub fn VkKeyScanExW(
+ ch: WCHAR,
+ dwhkl: HKL,
+ ) -> SHORT;
+}
+pub const KEYEVENTF_EXTENDEDKEY: DWORD = 0x0001;
+pub const KEYEVENTF_KEYUP: DWORD = 0x0002;
+pub const KEYEVENTF_UNICODE: DWORD = 0x0004;
+pub const KEYEVENTF_SCANCODE: DWORD = 0x0008;
+extern "system" {
+ pub fn keybd_event(
+ bVk: BYTE,
+ bScan: BYTE,
+ dwFlags: DWORD,
+ dwExtraInfo: ULONG_PTR,
+ );
+}
+pub const MOUSEEVENTF_MOVE: DWORD = 0x0001;
+pub const MOUSEEVENTF_LEFTDOWN: DWORD = 0x0002;
+pub const MOUSEEVENTF_LEFTUP: DWORD = 0x0004;
+pub const MOUSEEVENTF_RIGHTDOWN: DWORD = 0x0008;
+pub const MOUSEEVENTF_RIGHTUP: DWORD = 0x0010;
+pub const MOUSEEVENTF_MIDDLEDOWN: DWORD = 0x0020;
+pub const MOUSEEVENTF_MIDDLEUP: DWORD = 0x0040;
+pub const MOUSEEVENTF_XDOWN: DWORD = 0x0080;
+pub const MOUSEEVENTF_XUP: DWORD = 0x0100;
+pub const MOUSEEVENTF_WHEEL: DWORD = 0x0800;
+pub const MOUSEEVENTF_HWHEEL: DWORD = 0x01000;
+pub const MOUSEEVENTF_MOVE_NOCOALESCE: DWORD = 0x2000;
+pub const MOUSEEVENTF_VIRTUALDESK: DWORD = 0x4000;
+pub const MOUSEEVENTF_ABSOLUTE: DWORD = 0x8000;
+extern "system" {
+ pub fn mouse_event(
+ dwFlags: DWORD,
+ dx: DWORD,
+ dy: DWORD,
+ dwData: DWORD,
+ dwExtraInfo: ULONG_PTR,
+ );
+}
+STRUCT!{struct MOUSEINPUT {
+ dx: LONG,
+ dy: LONG,
+ mouseData: DWORD,
+ dwFlags: DWORD,
+ time: DWORD,
+ dwExtraInfo: ULONG_PTR,
+}}
+pub type PMOUSEINPUT = *mut MOUSEINPUT;
+pub type LPMOUSEINPUT = *mut MOUSEINPUT;
+STRUCT!{struct KEYBDINPUT {
+ wVk: WORD,
+ wScan: WORD,
+ dwFlags: DWORD,
+ time: DWORD,
+ dwExtraInfo: ULONG_PTR,
+}}
+pub type PKEYBDINPUT = *mut KEYBDINPUT;
+pub type LPKEYBDINPUT = *mut KEYBDINPUT;
+STRUCT!{struct HARDWAREINPUT {
+ uMsg: DWORD,
+ wParamL: WORD,
+ wParamH: WORD,
+}}
+pub type PHARDWAREINPUT = *mut HARDWAREINPUT;
+pub type LPHARDWAREINPUT= *mut HARDWAREINPUT;
+pub const INPUT_MOUSE: DWORD = 0;
+pub const INPUT_KEYBOARD: DWORD = 1;
+pub const INPUT_HARDWARE: DWORD = 2;
+UNION!{union INPUT_u {
+ [u32; 6] [u64; 4],
+ mi mi_mut: MOUSEINPUT,
+ ki ki_mut: KEYBDINPUT,
+ hi hi_mut: HARDWAREINPUT,
+}}
+STRUCT!{struct INPUT {
+ type_: DWORD,
+ u: INPUT_u,
+}}
+pub type PINPUT = *mut INPUT;
+pub type LPINPUT = *mut INPUT;
+extern "system" {
+ pub fn SendInput(
+ cInputs: UINT,
+ pInputs: LPINPUT,
+ cbSize: c_int,
+ ) -> UINT;
+}
+DECLARE_HANDLE!{HTOUCHINPUT, HTOUCHINPUT__}
+STRUCT!{struct TOUCHINPUT {
+ x: LONG,
+ y: LONG,
+ hSource: HANDLE,
+ dwID: DWORD,
+ dwFlags: DWORD,
+ dwMask: DWORD,
+ dwTime: DWORD,
+ dwExtraInfo: ULONG_PTR,
+ cxContact: DWORD,
+ cyContact: DWORD,
+}}
+pub type PTOUCHINPUT = *mut TOUCHINPUT;
+pub type PCTOUCHINPUT = *const TOUCHINPUT;
+// TOUCH_COORD_TO_PIXEL
+pub const TOUCHEVENTF_MOVE: DWORD = 0x0001;
+pub const TOUCHEVENTF_DOWN: DWORD = 0x0002;
+pub const TOUCHEVENTF_UP: DWORD = 0x0004;
+pub const TOUCHEVENTF_INRANGE: DWORD = 0x0008;
+pub const TOUCHEVENTF_PRIMARY: DWORD = 0x0010;
+pub const TOUCHEVENTF_NOCOALESCE: DWORD = 0x0020;
+pub const TOUCHEVENTF_PEN: DWORD = 0x0040;
+pub const TOUCHEVENTF_PALM: DWORD = 0x0080;
+pub const TOUCHINPUTMASKF_TIMEFROMSYSTEM: DWORD = 0x0001;
+pub const TOUCHINPUTMASKF_EXTRAINFO: DWORD = 0x0002;
+pub const TOUCHINPUTMASKF_CONTACTAREA: DWORD = 0x0004;
+extern "system" {
+ pub fn GetTouchInputInfo(
+ hTouchInput: HTOUCHINPUT,
+ cInputs: c_uint,
+ pInputs: PTOUCHINPUT,
+ cbSize: c_int,
+ ) -> BOOL;
+ pub fn CloseTouchInputHandle(
+ hTouchInput: HTOUCHINPUT,
+ ) -> BOOL;
+}
+pub const TWF_FINETOUCH: DWORD = 0x00000001;
+pub const TWF_WANTPALM: DWORD = 0x00000002;
+extern "system" {
+ pub fn RegisterTouchWindow(
+ hWnd: HWND,
+ flags: ULONG,
+ ) -> BOOL;
+ pub fn UnregisterTouchWindow(
+ hwnd: HWND,
+ ) -> BOOL;
+ pub fn IsTouchWindow(
+ hwnd: HWND,
+ pulFlags: PULONG,
+ ) -> BOOL;
+}
+ENUM!{enum POINTER_INPUT_TYPE {
+ PT_POINTER = 0x00000001,
+ PT_TOUCH = 0x00000002,
+ PT_PEN = 0x00000003,
+ PT_MOUSE = 0x00000004,
+ PT_TOUCHPAD = 0x00000005,
+}}
+ENUM!{enum POINTER_FLAGS {
+ POINTER_FLAG_NONE = 0x00000000,
+ POINTER_FLAG_NEW = 0x00000001,
+ POINTER_FLAG_INRANGE = 0x00000002,
+ POINTER_FLAG_INCONTACT = 0x00000004,
+ POINTER_FLAG_FIRSTBUTTON = 0x00000010,
+ POINTER_FLAG_SECONDBUTTON = 0x00000020,
+ POINTER_FLAG_THIRDBUTTON = 0x00000040,
+ POINTER_FLAG_FOURTHBUTTON = 0x00000080,
+ POINTER_FLAG_FIFTHBUTTON = 0x00000100,
+ POINTER_FLAG_PRIMARY = 0x00002000,
+ POINTER_FLAG_CONFIDENCE = 0x00004000,
+ POINTER_FLAG_CANCELED = 0x00008000,
+ POINTER_FLAG_DOWN = 0x00010000,
+ POINTER_FLAG_UPDATE = 0x00020000,
+ POINTER_FLAG_UP = 0x00040000,
+ POINTER_FLAG_WHEEL = 0x00080000,
+ POINTER_FLAG_HWHEEL = 0x00100000,
+ POINTER_FLAG_CAPTURECHANGED = 0x00200000,
+ POINTER_FLAG_HASTRANSFORM = 0x00400000,
+}}
+pub const POINTER_MOD_SHIFT: DWORD = 0x0004;
+pub const POINTER_MOD_CTRL: DWORD = 0x0008;
+ENUM!{enum POINTER_BUTTON_CHANGE_TYPE {
+ POINTER_CHANGE_NONE,
+ POINTER_CHANGE_FIRSTBUTTON_DOWN,
+ POINTER_CHANGE_FIRSTBUTTON_UP,
+ POINTER_CHANGE_SECONDBUTTON_DOWN,
+ POINTER_CHANGE_SECONDBUTTON_UP,
+ POINTER_CHANGE_THIRDBUTTON_DOWN,
+ POINTER_CHANGE_THIRDBUTTON_UP,
+ POINTER_CHANGE_FOURTHBUTTON_DOWN,
+ POINTER_CHANGE_FOURTHBUTTON_UP,
+ POINTER_CHANGE_FIFTHBUTTON_DOWN,
+ POINTER_CHANGE_FIFTHBUTTON_UP,
+}}
+STRUCT!{struct POINTER_INFO {
+ pointerType: POINTER_INPUT_TYPE,
+ pointerId: UINT32,
+ frameId: UINT32,
+ pointerFlags: POINTER_FLAGS,
+ sourceDevice: HANDLE,
+ hwndTarget: HWND,
+ ptPixelLocation: POINT,
+ ptHimetricLocation: POINT,
+ ptPixelLocationRaw: POINT,
+ ptHimetricLocationRaw: POINT,
+ dwTime: DWORD,
+ historyCount: UINT32,
+ InputData: INT32,
+ dwKeyStates: DWORD,
+ PerformanceCount: UINT64,
+ ButtonChangeType: POINTER_BUTTON_CHANGE_TYPE,
+}}
+ENUM!{enum TOUCH_FLAGS {
+ TOUCH_FLAG_NONE = 0x00000000,
+}}
+ENUM!{enum TOUCH_MASK {
+ TOUCH_MASK_NONE = 0x00000000,
+ TOUCH_MASK_CONTACTAREA = 0x00000001,
+ TOUCH_MASK_ORIENTATION = 0x00000002,
+ TOUCH_MASK_PRESSURE = 0x00000004,
+}}
+STRUCT!{struct POINTER_TOUCH_INFO {
+ pointerInfo: POINTER_INFO,
+ touchFlags: TOUCH_FLAGS,
+ touchMask: TOUCH_MASK,
+ rcContact: RECT,
+ rcContactRaw: RECT,
+ orientation: UINT32,
+ pressure: UINT32,
+}}
+ENUM!{enum PEN_FLAGS {
+ PEN_FLAG_NONE = 0x00000000,
+ PEN_FLAG_BARREL = 0x00000001,
+ PEN_FLAG_INVERTED = 0x00000002,
+ PEN_FLAG_ERASER = 0x00000004,
+}}
+ENUM!{enum PEN_MASK {
+ PEN_MASK_NONE = 0x00000000,
+ PEN_MASK_PRESSURE = 0x00000001,
+ PEN_MASK_ROTATION = 0x00000002,
+ PEN_MASK_TILT_X = 0x00000004,
+ PEN_MASK_TILT_Y = 0x00000008,
+}}
+STRUCT!{struct POINTER_PEN_INFO {
+ pointerInfo: POINTER_INFO,
+ penFlags: PEN_FLAGS,
+ penMask: PEN_MASK,
+ pressure: UINT32,
+ rotation: UINT32,
+ tiltX: INT32,
+ tiltY: INT32,
+}}
+pub const POINTER_MESSAGE_FLAG_NEW: DWORD = 0x00000001;
+pub const POINTER_MESSAGE_FLAG_INRANGE: DWORD = 0x00000002;
+pub const POINTER_MESSAGE_FLAG_INCONTACT: DWORD = 0x00000004;
+pub const POINTER_MESSAGE_FLAG_FIRSTBUTTON: DWORD = 0x00000010;
+pub const POINTER_MESSAGE_FLAG_SECONDBUTTON: DWORD = 0x00000020;
+pub const POINTER_MESSAGE_FLAG_THIRDBUTTON: DWORD = 0x00000040;
+pub const POINTER_MESSAGE_FLAG_FOURTHBUTTON: DWORD = 0x00000080;
+pub const POINTER_MESSAGE_FLAG_FIFTHBUTTON: DWORD = 0x00000100;
+pub const POINTER_MESSAGE_FLAG_PRIMARY: DWORD = 0x00002000;
+pub const POINTER_MESSAGE_FLAG_CONFIDENCE: DWORD = 0x00004000;
+pub const POINTER_MESSAGE_FLAG_CANCELED: DWORD = 0x00008000;
+pub const PA_ACTIVATE: UINT = MA_ACTIVATE;
+pub const PA_NOACTIVATE: UINT = MA_NOACTIVATE;
+pub const MAX_TOUCH_COUNT: UINT32 = 256;
+pub const TOUCH_FEEDBACK_DEFAULT: DWORD = 0x1;
+pub const TOUCH_FEEDBACK_INDIRECT: DWORD = 0x2;
+pub const TOUCH_FEEDBACK_NONE: DWORD = 0x3;
+ENUM!{enum POINTER_FEEDBACK_MODE {
+ POINTER_FEEDBACK_DEFAULT = 1,
+ POINTER_FEEDBACK_INDIRECT = 2,
+ POINTER_FEEDBACK_NONE = 3,
+}}
+extern "system" {
+ pub fn InitializeTouchInjection(
+ maxCount: UINT32,
+ dwMode: DWORD,
+ ) -> BOOL;
+ pub fn InjectTouchInput(
+ count: UINT32,
+ contacts: *const POINTER_TOUCH_INFO,
+ ) -> BOOL;
+}
+STRUCT!{struct USAGE_PROPERTIES {
+ level: USHORT,
+ page: USHORT,
+ usage: USHORT,
+ logicalMinimum: INT32,
+ logicalMaximum: INT32,
+ unit: USHORT,
+ exponent: USHORT,
+ count: BYTE,
+ physicalMinimum: INT32,
+ physicalMaximum: INT32,
+}}
+pub type PUSAGE_PROPERTIES = *mut USAGE_PROPERTIES;
+UNION!{union POINTER_TYPE_INFO_u {
+ [u64; 17] [u64; 18],
+ touchInfo touchInfo_mut: POINTER_TOUCH_INFO,
+ penInfo penInfo_mut: POINTER_PEN_INFO,
+}}
+STRUCT!{struct POINTER_TYPE_INFO {
+ type_: POINTER_INPUT_TYPE,
+ u: POINTER_TYPE_INFO_u,
+}}
+pub type PPOINTER_TYPE_INFO = *mut POINTER_TYPE_INFO;
+STRUCT!{struct INPUT_INJECTION_VALUE {
+ page: USHORT,
+ usage: USHORT,
+ value: INT32,
+ index: USHORT,
+}}
+pub type PINPUT_INJECTION_VALUE = *mut INPUT_INJECTION_VALUE;
+extern "system" {
+ pub fn GetPointerType(
+ pointerId: UINT32,
+ pointerType: *mut POINTER_INPUT_TYPE,
+ ) -> BOOL;
+ pub fn GetPointerCursorId(
+ pointerId: UINT32,
+ cursorId: *mut UINT32,
+ ) -> BOOL;
+ pub fn GetPointerInfo(
+ pointerId: UINT32,
+ pointerInfo: *mut POINTER_INFO,
+ ) -> BOOL;
+ pub fn GetPointerInfoHistory(
+ pointerId: UINT32,
+ entriesCount: *mut UINT32,
+ pointerInfo: *mut POINTER_INFO,
+ ) -> BOOL;
+ pub fn GetPointerFrameInfo(
+ pointerId: UINT32,
+ pointerCount: *mut UINT32,
+ pointerInfo: *mut POINTER_INFO,
+ ) -> BOOL;
+ pub fn GetPointerFrameInfoHistory(
+ pointerId: UINT32,
+ entriesCount: *mut UINT32,
+ pointerCount: *mut UINT32,
+ pointerInfo: *mut POINTER_INFO,
+ ) -> BOOL;
+ pub fn GetPointerTouchInfo(
+ pointerId: UINT32,
+ touchInfo: *mut POINTER_TOUCH_INFO,
+ ) -> BOOL;
+ pub fn GetPointerTouchInfoHistory(
+ pointerId: UINT32,
+ entriesCount: *mut UINT32,
+ touchInfo: *mut POINTER_TOUCH_INFO,
+ ) -> BOOL;
+ pub fn GetPointerFrameTouchInfo(
+ pointerId: UINT32,
+ pointerCount: *mut UINT32,
+ touchInfo: *mut POINTER_TOUCH_INFO,
+ ) -> BOOL;
+ pub fn GetPointerFrameTouchInfoHistory(
+ pointerId: UINT32,
+ entriesCount: *mut UINT32,
+ pointerCount: *mut UINT32,
+ touchInfo: *mut POINTER_TOUCH_INFO,
+ ) -> BOOL;
+ pub fn GetPointerPenInfo(
+ pointerId: UINT32,
+ penInfo: *mut POINTER_PEN_INFO,
+ ) -> BOOL;
+ pub fn GetPointerPenInfoHistory(
+ pointerId: UINT32,
+ entriesCount: *mut UINT32,
+ penInfo: *mut POINTER_PEN_INFO,
+ ) -> BOOL;
+ pub fn GetPointerFramePenInfo(
+ pointerId: UINT32,
+ pointerCount: *mut UINT32,
+ penInfo: *mut POINTER_PEN_INFO,
+ ) -> BOOL;
+ pub fn GetPointerFramePenInfoHistory(
+ pointerId: UINT32,
+ entriesCount: *mut UINT32,
+ pointerCount: *mut UINT32,
+ penInfo: *mut POINTER_PEN_INFO,
+ ) -> BOOL;
+ pub fn SkipPointerFrameMessages(
+ pointerId: UINT32,
+ ) -> BOOL;
+ pub fn RegisterPointerInputTarget(
+ hwnd: HWND,
+ pointerType: POINTER_INPUT_TYPE,
+ ) -> BOOL;
+ pub fn UnregisterPointerInputTarget(
+ hwnd: HWND,
+ pointerType: POINTER_INPUT_TYPE,
+ ) -> BOOL;
+ pub fn RegisterPointerInputTargetEx(
+ hwnd: HWND,
+ pointerType: POINTER_INPUT_TYPE,
+ fObserve: BOOL,
+ ) -> BOOL;
+ pub fn UnregisterPointerInputTargetEx(
+ hwnd: HWND,
+ pointerType: POINTER_INPUT_TYPE,
+ ) -> BOOL;
+}
+DECLARE_HANDLE!{HSYNTHETICPOINTERDEVICE, HSYNTHETICPOINTERDEVICE__}
+extern "system" {
+ pub fn CreateSyntheticPointerDevice(
+ pointerType: POINTER_INPUT_TYPE,
+ maxCount: ULONG,
+ mode: POINTER_FEEDBACK_MODE,
+ ) -> HSYNTHETICPOINTERDEVICE;
+ pub fn InjectSyntheticPointerInput(
+ device: HSYNTHETICPOINTERDEVICE,
+ pointerInfo: *const POINTER_TYPE_INFO,
+ count: UINT32,
+ ) -> BOOL;
+ pub fn DestroySyntheticPointerDevice(
+ device: HSYNTHETICPOINTERDEVICE,
+ );
+}
+extern "system" {
+ pub fn EnableMouseInPointer(
+ fEnable: BOOL,
+ ) -> BOOL;
+ pub fn IsMouseInPointerEnabled() -> BOOL;
+}
+pub const TOUCH_HIT_TESTING_DEFAULT: ULONG = 0x0;
+pub const TOUCH_HIT_TESTING_CLIENT: ULONG = 0x1;
+pub const TOUCH_HIT_TESTING_NONE: ULONG = 0x2;
+extern "system" {
+ pub fn RegisterTouchHitTestingWindow(
+ hwnd: HWND,
+ value: ULONG,
+ ) -> BOOL;
+}
+STRUCT!{struct TOUCH_HIT_TESTING_PROXIMITY_EVALUATION {
+ score: UINT16,
+ adjustedPoint: POINT,
+}}
+pub type PTOUCH_HIT_TESTING_PROXIMITY_EVALUATION = *mut TOUCH_HIT_TESTING_PROXIMITY_EVALUATION;
+STRUCT!{struct TOUCH_HIT_TESTING_INPUT {
+ pointerId: UINT32,
+ point: POINT,
+ boundingBox: RECT,
+ nonOccludedBoundingBox: RECT,
+ orientation: UINT32,
+}}
+pub type PTOUCH_HIT_TESTING_INPUT = *mut TOUCH_HIT_TESTING_INPUT;
+pub const TOUCH_HIT_TESTING_PROXIMITY_CLOSEST: UINT16 = 0x0;
+pub const TOUCH_HIT_TESTING_PROXIMITY_FARTHEST: UINT16 = 0xFFF;
+extern "system" {
+ pub fn EvaluateProximityToRect(
+ controlBoundingBox: *const RECT,
+ pHitTestingInput: *const TOUCH_HIT_TESTING_INPUT,
+ pProximityEval: *mut TOUCH_HIT_TESTING_PROXIMITY_EVALUATION,
+ ) -> BOOL;
+ pub fn EvaluateProximityToPolygon(
+ numVertices: UINT32,
+ controlPolygon: *const POINT,
+ pHitTestingInput: *const TOUCH_HIT_TESTING_INPUT,
+ pProximityEval: *mut TOUCH_HIT_TESTING_PROXIMITY_EVALUATION,
+ ) -> BOOL;
+ pub fn PackTouchHitTestingProximityEvaluation(
+ pHitTestingInput: *const TOUCH_HIT_TESTING_INPUT,
+ pProximityEval: *const TOUCH_HIT_TESTING_PROXIMITY_EVALUATION,
+ ) -> LRESULT;
+}
+ENUM!{enum FEEDBACK_TYPE {
+ FEEDBACK_TOUCH_CONTACTVISUALIZATION = 1,
+ FEEDBACK_PEN_BARRELVISUALIZATION = 2,
+ FEEDBACK_PEN_TAP = 3,
+ FEEDBACK_PEN_DOUBLETAP = 4,
+ FEEDBACK_PEN_PRESSANDHOLD = 5,
+ FEEDBACK_PEN_RIGHTTAP = 6,
+ FEEDBACK_TOUCH_TAP = 7,
+ FEEDBACK_TOUCH_DOUBLETAP = 8,
+ FEEDBACK_TOUCH_PRESSANDHOLD = 9,
+ FEEDBACK_TOUCH_RIGHTTAP = 10,
+ FEEDBACK_GESTURE_PRESSANDTAP = 11,
+ FEEDBACK_MAX = 0xFFFFFFFF,
+}}
+pub const GWFS_INCLUDE_ANCESTORS: DWORD = 0x00000001;
+extern "system" {
+ pub fn GetWindowFeedbackSetting(
+ hwnd: HWND,
+ feedback: FEEDBACK_TYPE,
+ dwFlags: DWORD,
+ pSize: *mut UINT32,
+ config: *mut VOID,
+ ) -> BOOL;
+ pub fn SetWindowFeedbackSetting(
+ hwnd: HWND,
+ feedback: FEEDBACK_TYPE,
+ dwFlags: DWORD,
+ size: UINT32,
+ configuration: *const VOID,
+ ) -> BOOL;
+}
+STRUCT!{struct INPUT_TRANSFORM {
+ m: [[f32; 4]; 4],
+}}
+extern "system" {
+ pub fn GetPointerInputTransform(
+ pointerId: UINT32,
+ historyCount: UINT32,
+ inputTransform: *mut INPUT_TRANSFORM,
+ ) -> BOOL;
+}
+STRUCT!{struct LASTINPUTINFO {
+ cbSize: UINT,
+ dwTime: DWORD,
+}}
+pub type PLASTINPUTINFO = *mut LASTINPUTINFO;
+extern "system" {
+ pub fn GetLastInputInfo(
+ plii: PLASTINPUTINFO,
+ ) -> BOOL;
+ pub fn MapVirtualKeyA(
+ nCode: UINT,
+ uMapType: UINT,
+ ) -> UINT;
+ pub fn MapVirtualKeyW(
+ nCode: UINT,
+ uMapType: UINT,
+ ) -> UINT;
+ pub fn MapVirtualKeyExA(
+ nCode: UINT,
+ uMapType: UINT,
+ dwhkl: HKL,
+ ) -> UINT;
+ pub fn MapVirtualKeyExW(
+ nCode: UINT,
+ uMapType: UINT,
+ dwhkl: HKL,
+ ) -> UINT;
+}
+pub const MAPVK_VK_TO_VSC: UINT = 0;
+pub const MAPVK_VSC_TO_VK: UINT = 1;
+pub const MAPVK_VK_TO_CHAR: UINT = 2;
+pub const MAPVK_VSC_TO_VK_EX: UINT = 3;
+pub const MAPVK_VK_TO_VSC_EX: UINT = 4;
+extern "system" {
+ pub fn GetInputState() -> BOOL;
+ pub fn GetQueueStatus(
+ flags: UINT,
+ ) -> DWORD;
+ pub fn GetCapture() -> HWND;
+ pub fn SetCapture(
+ hWnd: HWND,
+ ) -> HWND;
+ pub fn ReleaseCapture() -> BOOL;
+ pub fn MsgWaitForMultipleObjects(
+ nCount: DWORD,
+ pHandles: *const HANDLE,
+ fWaitAll: BOOL,
+ dwMilliseconds: DWORD,
+ dwWakeMask: DWORD,
+ ) -> DWORD;
+ pub fn MsgWaitForMultipleObjectsEx(
+ nCount: DWORD,
+ pHandles: *const HANDLE,
+ dwMilliseconds: DWORD,
+ dwWakeMask: DWORD,
+ dwFlags: DWORD,
+ ) -> DWORD;
+}
+pub const MWMO_WAITALL: UINT = 0x0001;
+pub const MWMO_ALERTABLE: UINT = 0x0002;
+pub const MWMO_INPUTAVAILABLE: UINT = 0x0004;
+pub const QS_KEY: UINT = 0x0001;
+pub const QS_MOUSEMOVE: UINT = 0x0002;
+pub const QS_MOUSEBUTTON: UINT = 0x0004;
+pub const QS_POSTMESSAGE: UINT = 0x0008;
+pub const QS_TIMER: UINT = 0x0010;
+pub const QS_PAINT: UINT = 0x0020;
+pub const QS_SENDMESSAGE: UINT = 0x0040;
+pub const QS_HOTKEY: UINT = 0x0080;
+pub const QS_ALLPOSTMESSAGE: UINT = 0x0100;
+pub const QS_RAWINPUT: UINT = 0x0400;
+pub const QS_TOUCH: UINT = 0x0800;
+pub const QS_POINTER: UINT = 0x1000;
+pub const QS_MOUSE: UINT = QS_MOUSEMOVE | QS_MOUSEBUTTON;
+pub const QS_INPUT: UINT = QS_MOUSE | QS_KEY | QS_RAWINPUT | QS_TOUCH | QS_POINTER;
+pub const QS_ALLEVENTS: UINT = QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY;
+pub const QS_ALLINPUT: UINT = QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY
+ | QS_SENDMESSAGE;
+pub const USER_TIMER_MAXIMUM: UINT = 0x7FFFFFFF;
+pub const USER_TIMER_MINIMUM: UINT = 0x0000000A;
+extern "system" {
+ pub fn SetTimer(
+ hWnd: HWND,
+ nIDEvent: UINT_PTR,
+ uElapse: UINT,
+ lpTimerFunc: TIMERPROC,
+ ) -> UINT_PTR;
+}
+pub const TIMERV_DEFAULT_COALESCING: ULONG = 0;
+pub const TIMERV_NO_COALESCING: ULONG = 0xFFFFFFFF;
+pub const TIMERV_COALESCING_MIN: ULONG = 1;
+pub const TIMERV_COALESCING_MAX: ULONG = 0x7FFFFFF5;
+extern "system" {
+ pub fn SetCoalescableTimer(
+ hWnd: HWND,
+ nIDEvent: UINT_PTR,
+ uElapse: UINT,
+ lpTimerFunc: TIMERPROC,
+ uToleranceDelay: ULONG,
+ ) -> UINT_PTR;
+ pub fn KillTimer(
+ hWnd: HWND,
+ uIDEvent: UINT_PTR,
+ ) -> BOOL;
+ pub fn IsWindowUnicode(
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn EnableWindow(
+ hWnd: HWND,
+ bEnable: BOOL,
+ ) -> BOOL;
+ pub fn IsWindowEnabled(
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn LoadAcceleratorsA(
+ hInstance: HINSTANCE,
+ lpTableName: LPCSTR,
+ ) -> HACCEL;
+ pub fn LoadAcceleratorsW(
+ hInstance: HINSTANCE,
+ lpTableName: LPCWSTR,
+ ) -> HACCEL;
+ pub fn CreateAcceleratorTableA(
+ paccel: LPACCEL,
+ cAccel: c_int,
+ ) -> HACCEL;
+ pub fn CreateAcceleratorTableW(
+ paccel: LPACCEL,
+ cAccel: c_int,
+ ) -> HACCEL;
+ pub fn DestroyAcceleratorTable(
+ hAccel: HACCEL,
+ ) -> BOOL;
+ pub fn CopyAcceleratorTableA(
+ hAccelSrc: HACCEL,
+ lpAccelDst: LPACCEL,
+ cAccelEntries: c_int,
+ ) -> c_int;
+ pub fn CopyAcceleratorTableW(
+ hAccelSrc: HACCEL,
+ lpAccelDst: LPACCEL,
+ cAccelEntries: c_int,
+ ) -> c_int;
+ pub fn TranslateAcceleratorA(
+ hWnd: HWND,
+ hAccTable: HACCEL,
+ lpMsg: LPMSG,
+ ) -> c_int;
+ pub fn TranslateAcceleratorW(
+ hWnd: HWND,
+ hAccTable: HACCEL,
+ lpMsg: LPMSG,
+ ) -> c_int;
+}
+pub const SM_CXSCREEN: c_int = 0;
+pub const SM_CYSCREEN: c_int = 1;
+pub const SM_CXVSCROLL: c_int = 2;
+pub const SM_CYHSCROLL: c_int = 3;
+pub const SM_CYCAPTION: c_int = 4;
+pub const SM_CXBORDER: c_int = 5;
+pub const SM_CYBORDER: c_int = 6;
+pub const SM_CXDLGFRAME: c_int = 7;
+pub const SM_CYDLGFRAME: c_int = 8;
+pub const SM_CYVTHUMB: c_int = 9;
+pub const SM_CXHTHUMB: c_int = 10;
+pub const SM_CXICON: c_int = 11;
+pub const SM_CYICON: c_int = 12;
+pub const SM_CXCURSOR: c_int = 13;
+pub const SM_CYCURSOR: c_int = 14;
+pub const SM_CYMENU: c_int = 15;
+pub const SM_CXFULLSCREEN: c_int = 16;
+pub const SM_CYFULLSCREEN: c_int = 17;
+pub const SM_CYKANJIWINDOW: c_int = 18;
+pub const SM_MOUSEPRESENT: c_int = 19;
+pub const SM_CYVSCROLL: c_int = 20;
+pub const SM_CXHSCROLL: c_int = 21;
+pub const SM_DEBUG: c_int = 22;
+pub const SM_SWAPBUTTON: c_int = 23;
+pub const SM_RESERVED1: c_int = 24;
+pub const SM_RESERVED2: c_int = 25;
+pub const SM_RESERVED3: c_int = 26;
+pub const SM_RESERVED4: c_int = 27;
+pub const SM_CXMIN: c_int = 28;
+pub const SM_CYMIN: c_int = 29;
+pub const SM_CXSIZE: c_int = 30;
+pub const SM_CYSIZE: c_int = 31;
+pub const SM_CXFRAME: c_int = 32;
+pub const SM_CYFRAME: c_int = 33;
+pub const SM_CXMINTRACK: c_int = 34;
+pub const SM_CYMINTRACK: c_int = 35;
+pub const SM_CXDOUBLECLK: c_int = 36;
+pub const SM_CYDOUBLECLK: c_int = 37;
+pub const SM_CXICONSPACING: c_int = 38;
+pub const SM_CYICONSPACING: c_int = 39;
+pub const SM_MENUDROPALIGNMENT: c_int = 40;
+pub const SM_PENWINDOWS: c_int = 41;
+pub const SM_DBCSENABLED: c_int = 42;
+pub const SM_CMOUSEBUTTONS: c_int = 43;
+pub const SM_CXFIXEDFRAME: c_int = SM_CXDLGFRAME;
+pub const SM_CYFIXEDFRAME: c_int = SM_CYDLGFRAME;
+pub const SM_CXSIZEFRAME: c_int = SM_CXFRAME;
+pub const SM_CYSIZEFRAME: c_int = SM_CYFRAME;
+pub const SM_SECURE: c_int = 44;
+pub const SM_CXEDGE: c_int = 45;
+pub const SM_CYEDGE: c_int = 46;
+pub const SM_CXMINSPACING: c_int = 47;
+pub const SM_CYMINSPACING: c_int = 48;
+pub const SM_CXSMICON: c_int = 49;
+pub const SM_CYSMICON: c_int = 50;
+pub const SM_CYSMCAPTION: c_int = 51;
+pub const SM_CXSMSIZE: c_int = 52;
+pub const SM_CYSMSIZE: c_int = 53;
+pub const SM_CXMENUSIZE: c_int = 54;
+pub const SM_CYMENUSIZE: c_int = 55;
+pub const SM_ARRANGE: c_int = 56;
+pub const SM_CXMINIMIZED: c_int = 57;
+pub const SM_CYMINIMIZED: c_int = 58;
+pub const SM_CXMAXTRACK: c_int = 59;
+pub const SM_CYMAXTRACK: c_int = 60;
+pub const SM_CXMAXIMIZED: c_int = 61;
+pub const SM_CYMAXIMIZED: c_int = 62;
+pub const SM_NETWORK: c_int = 63;
+pub const SM_CLEANBOOT: c_int = 67;
+pub const SM_CXDRAG: c_int = 68;
+pub const SM_CYDRAG: c_int = 69;
+pub const SM_SHOWSOUNDS: c_int = 70;
+pub const SM_CXMENUCHECK: c_int = 71;
+pub const SM_CYMENUCHECK: c_int = 72;
+pub const SM_SLOWMACHINE: c_int = 73;
+pub const SM_MIDEASTENABLED: c_int = 74;
+pub const SM_MOUSEWHEELPRESENT: c_int = 75;
+pub const SM_XVIRTUALSCREEN: c_int = 76;
+pub const SM_YVIRTUALSCREEN: c_int = 77;
+pub const SM_CXVIRTUALSCREEN: c_int = 78;
+pub const SM_CYVIRTUALSCREEN: c_int = 79;
+pub const SM_CMONITORS: c_int = 80;
+pub const SM_SAMEDISPLAYFORMAT: c_int = 81;
+pub const SM_IMMENABLED: c_int = 82;
+pub const SM_CXFOCUSBORDER: c_int = 83;
+pub const SM_CYFOCUSBORDER: c_int = 84;
+pub const SM_TABLETPC: c_int = 86;
+pub const SM_MEDIACENTER: c_int = 87;
+pub const SM_STARTER: c_int = 88;
+pub const SM_SERVERR2: c_int = 89;
+pub const SM_MOUSEHORIZONTALWHEELPRESENT: c_int = 91;
+pub const SM_CXPADDEDBORDER: c_int = 92;
+pub const SM_DIGITIZER: c_int = 94;
+pub const SM_MAXIMUMTOUCHES: c_int = 95;
+pub const SM_CMETRICS: c_int = 97;
+pub const SM_REMOTESESSION: c_int = 0x1000;
+pub const SM_SHUTTINGDOWN: c_int = 0x2000;
+pub const SM_REMOTECONTROL: c_int = 0x2001;
+pub const SM_CARETBLINKINGENABLED: c_int = 0x2002;
+pub const SM_CONVERTIBLESLATEMODE: c_int = 0x2003;
+pub const SM_SYSTEMDOCKED: c_int = 0x2004;
+extern "system" {
+ pub fn GetSystemMetrics(
+ nIndex: c_int,
+ ) -> c_int;
+ pub fn GetSystemMetricsForDpi(
+ nIndex: c_int,
+ dpi: UINT,
+ ) -> c_int;
+ pub fn LoadMenuA(
+ hInstance: HINSTANCE,
+ lpMenuName: LPCSTR,
+ ) -> HMENU;
+ pub fn LoadMenuW(
+ hInstance: HINSTANCE,
+ lpMenuName: LPCWSTR,
+ ) -> HMENU;
+ pub fn LoadMenuIndirectA(
+ lpMenuTemplate: *const MENUTEMPLATEA,
+ ) -> HMENU;
+ pub fn LoadMenuIndirectW(
+ lpMenuTemplate: *const MENUTEMPLATEW,
+ ) -> HMENU;
+ pub fn GetMenu(
+ hWnd: HWND,
+ ) -> HMENU;
+ pub fn SetMenu(
+ hWnd: HWND,
+ hMenu: HMENU,
+ ) -> BOOL;
+ pub fn ChangeMenuA(
+ hMenu: HMENU,
+ cmd: UINT,
+ lpszNewItem: LPCSTR,
+ cmdInsert: UINT,
+ flags: UINT,
+ ) -> BOOL;
+ pub fn ChangeMenuW(
+ hMenu: HMENU,
+ cmd: UINT,
+ lpszNewItem: LPCWSTR,
+ cmdInsert: UINT,
+ flags: UINT,
+ ) -> BOOL;
+ pub fn HiliteMenuItem(
+ hWnd: HWND,
+ hMenu: HMENU,
+ uIDHiliteItem: UINT,
+ uHilite: UINT,
+ ) -> BOOL;
+ pub fn GetMenuStringA(
+ hMenu: HMENU,
+ uIDItem: UINT,
+ lpString: LPSTR,
+ cchMax: c_int,
+ flags: UINT,
+ ) -> c_int;
+ pub fn GetMenuStringW(
+ hMenu: HMENU,
+ uIDItem: UINT,
+ lpString: LPWSTR,
+ cchMax: c_int,
+ flags: UINT,
+ ) -> c_int;
+ pub fn GetMenuState(
+ hMenu: HMENU,
+ uId: UINT,
+ uFlags: UINT,
+ ) -> UINT;
+ pub fn DrawMenuBar(
+ hwnd: HWND,
+ ) -> BOOL;
+}
+pub const PMB_ACTIVE: DWORD = 0x00000001;
+extern "system" {
+ pub fn GetSystemMenu(
+ hWnd: HWND,
+ bRevert: BOOL,
+ ) -> HMENU;
+ pub fn CreateMenu() -> HMENU;
+ pub fn CreatePopupMenu() ->HMENU;
+ pub fn DestroyMenu(
+ hMenu: HMENU,
+ ) -> BOOL;
+ pub fn CheckMenuItem(
+ hMenu: HMENU,
+ uIDCheckItem: UINT,
+ uCheck: UINT,
+ ) -> DWORD;
+ pub fn EnableMenuItem(
+ hMenu: HMENU,
+ uIDEnableItem: UINT,
+ uEnable: UINT,
+ ) -> BOOL;
+ pub fn GetSubMenu(
+ hMenu: HMENU,
+ nPos: c_int,
+ ) -> HMENU;
+ pub fn GetMenuItemID(
+ hMenu: HMENU,
+ nPos: c_int,
+ ) -> UINT;
+ pub fn GetMenuItemCount(
+ hMenu: HMENU,
+ ) -> c_int;
+ pub fn InsertMenuA(
+ hMenu: HMENU,
+ uPosition: UINT,
+ uFlags: UINT,
+ uIDNewItem: UINT_PTR,
+ lpNewItem: LPCSTR,
+ ) -> BOOL;
+ pub fn InsertMenuW(
+ hMenu: HMENU,
+ uPosition: UINT,
+ uFlags: UINT,
+ uIDNewItem: UINT_PTR,
+ lpNewItem: LPCWSTR,
+ ) -> BOOL;
+ pub fn AppendMenuA(
+ hMenu: HMENU,
+ uFlags: UINT,
+ uIDNewItem: UINT_PTR,
+ lpNewItem: LPCSTR,
+ ) -> BOOL;
+ pub fn AppendMenuW(
+ hMenu: HMENU,
+ uFlags: UINT,
+ uIDNewItem: UINT_PTR,
+ lpNewItem: LPCWSTR,
+ ) -> BOOL;
+ pub fn ModifyMenuA(
+ hMnu: HMENU,
+ uPosition: UINT,
+ uFlags: UINT,
+ uIDNewItem: UINT_PTR,
+ lpNewItem: LPCSTR,
+ ) -> BOOL;
+ pub fn ModifyMenuW(
+ hMnu: HMENU,
+ uPosition: UINT,
+ uFlags: UINT,
+ uIDNewItem: UINT_PTR,
+ lpNewItem: LPCWSTR,
+ ) -> BOOL;
+ pub fn RemoveMenu(
+ hMenu: HMENU,
+ uPosition: UINT,
+ uFlags: UINT,
+ ) -> BOOL;
+ pub fn DeleteMenu(
+ hMenu: HMENU,
+ uPosition: UINT,
+ uFlags: UINT,
+ ) -> BOOL;
+ pub fn SetMenuItemBitmaps(
+ hMenu: HMENU,
+ uPosition: UINT,
+ uFlags: UINT,
+ hBitmapUnchecked: HBITMAP,
+ hBitmapChecked: HBITMAP,
+ ) -> BOOL;
+ pub fn GetMenuCheckMarkDimensions() -> LONG;
+ pub fn TrackPopupMenu(
+ hMenu: HMENU,
+ uFlags: UINT,
+ x: c_int,
+ y: c_int,
+ nReserved: c_int,
+ hWnd: HWND,
+ prcRect: *const RECT,
+ ) -> BOOL;
+}
+pub const MNC_IGNORE: DWORD = 0;
+pub const MNC_CLOSE: DWORD = 1;
+pub const MNC_EXECUTE: DWORD = 2;
+pub const MNC_SELECT: DWORD = 3;
+STRUCT!{struct TPMPARAMS {
+ cbSize: UINT,
+ rcExclude: RECT,
+}}
+pub type LPTPMPARAMS = *mut TPMPARAMS;
+extern "system" {
+ pub fn TrackPopupMenuEx(
+ hMenu: HMENU,
+ uFlags: UINT,
+ x: INT,
+ y: INT,
+ hwnd: HWND,
+ lptpm: LPTPMPARAMS,
+ ) -> BOOL;
+ pub fn CalculatePopupWindowPosition(
+ anchorPoint: *const POINT,
+ windowSize: *const SIZE,
+ flags: UINT,
+ excludeRect: *mut RECT,
+ popupWindowPosition: *mut RECT,
+ ) -> BOOL;
+}
+pub const MNS_NOCHECK: DWORD = 0x80000000;
+pub const MNS_MODELESS: DWORD = 0x40000000;
+pub const MNS_DRAGDROP: DWORD = 0x20000000;
+pub const MNS_AUTODISMISS: DWORD = 0x10000000;
+pub const MNS_NOTIFYBYPOS: DWORD = 0x08000000;
+pub const MNS_CHECKORBMP: DWORD = 0x04000000;
+pub const MIM_MAXHEIGHT: DWORD = 0x00000001;
+pub const MIM_BACKGROUND: DWORD = 0x00000002;
+pub const MIM_HELPID: DWORD = 0x00000004;
+pub const MIM_MENUDATA: DWORD = 0x00000008;
+pub const MIM_STYLE: DWORD = 0x00000010;
+pub const MIM_APPLYTOSUBMENUS: DWORD = 0x80000000;
+STRUCT!{struct MENUINFO {
+ cbSize: DWORD,
+ fMask: DWORD,
+ dwStyle: DWORD,
+ cyMax: UINT,
+ hbrBack: HBRUSH,
+ dwContextHelpID: DWORD,
+ dwMenuData: ULONG_PTR,
+}}
+pub type LPMENUINFO = *mut MENUINFO;
+pub type LPCMENUINFO = *const MENUINFO;
+extern "system" {
+ pub fn GetMenuInfo(
+ hMenu: HMENU,
+ lpcmi: LPMENUINFO,
+ ) -> BOOL;
+ pub fn SetMenuInfo(
+ hMenu: HMENU,
+ lpcmi: LPCMENUINFO,
+ ) -> BOOL;
+ pub fn EndMenu(
+ hMenu: HMENU,
+ uFlags: UINT,
+ uIDNewItem: UINT_PTR,
+ lpNewItem: LPCSTR,
+ ) -> BOOL;
+}
+pub const MND_CONTINUE: DWORD = 0;
+pub const MND_ENDMENU: DWORD = 1;
+STRUCT!{struct MENUGETOBJECTINFO {
+ dwFlags: DWORD,
+ uPos: UINT,
+ hmenu: HMENU,
+ riid: PVOID,
+ pvObj: PVOID,
+}}
+pub type PMENUGETOBJECTINFO = *mut MENUGETOBJECTINFO;
+pub const MNGOF_TOPGAP: DWORD = 0x00000001;
+pub const MNGOF_BOTTOMGAP: DWORD = 0x00000002;
+pub const MNGO_NOINTERFACE: DWORD = 0x00000000;
+pub const MNGO_NOERROR: DWORD = 0x00000001;
+pub const MIIM_STATE: DWORD = 0x00000001;
+pub const MIIM_ID: DWORD = 0x00000002;
+pub const MIIM_SUBMENU: DWORD = 0x00000004;
+pub const MIIM_CHECKMARKS: DWORD = 0x00000008;
+pub const MIIM_TYPE: DWORD = 0x00000010;
+pub const MIIM_DATA: DWORD = 0x00000020;
+pub const MIIM_STRING: DWORD = 0x00000040;
+pub const MIIM_BITMAP: DWORD = 0x00000080;
+pub const MIIM_FTYPE: DWORD = 0x00000100;
+pub const HBMMENU_CALLBACK: HBITMAP = -1isize as HBITMAP;
+pub const HBMMENU_SYSTEM: HBITMAP = 1 as HBITMAP;
+pub const HBMMENU_MBAR_RESTORE: HBITMAP = 2 as HBITMAP;
+pub const HBMMENU_MBAR_MINIMIZE: HBITMAP = 3 as HBITMAP;
+pub const HBMMENU_MBAR_CLOSE: HBITMAP = 5 as HBITMAP;
+pub const HBMMENU_MBAR_CLOSE_D: HBITMAP = 6 as HBITMAP;
+pub const HBMMENU_MBAR_MINIMIZE_D: HBITMAP = 7 as HBITMAP;
+pub const HBMMENU_POPUP_CLOSE: HBITMAP = 8 as HBITMAP;
+pub const HBMMENU_POPUP_RESTORE: HBITMAP = 9 as HBITMAP;
+pub const HBMMENU_POPUP_MAXIMIZE: HBITMAP = 10 as HBITMAP;
+pub const HBMMENU_POPUP_MINIMIZE: HBITMAP = 11 as HBITMAP;
+STRUCT!{struct MENUITEMINFOA {
+ cbSize: UINT,
+ fMask: UINT,
+ fType: UINT,
+ fState: UINT,
+ wID: UINT,
+ hSubMenu: HMENU,
+ hbmpChecked: HBITMAP,
+ hbmpUnchecked: HBITMAP,
+ dwItemData: ULONG_PTR,
+ dwTypeData: LPSTR,
+ cch: UINT,
+ hbmpItem: HBITMAP,
+}}
+pub type LPMENUITEMINFOA = *mut MENUITEMINFOA;
+pub type LPCMENUITEMINFOA = *const MENUITEMINFOA;
+STRUCT!{struct MENUITEMINFOW {
+ cbSize: UINT,
+ fMask: UINT,
+ fType: UINT,
+ fState: UINT,
+ wID: UINT,
+ hSubMenu: HMENU,
+ hbmpChecked: HBITMAP,
+ hbmpUnchecked: HBITMAP,
+ dwItemData: ULONG_PTR,
+ dwTypeData: LPWSTR,
+ cch: UINT,
+ hbmpItem: HBITMAP,
+}}
+pub type LPMENUITEMINFOW = *mut MENUITEMINFOW;
+pub type LPCMENUITEMINFOW = *const MENUITEMINFOW;
+extern "system" {
+ pub fn InsertMenuItemA(
+ hmenu: HMENU,
+ item: UINT,
+ fByPosition: BOOL,
+ lpmi: LPCMENUITEMINFOA,
+ ) -> BOOL;
+ pub fn InsertMenuItemW(
+ hmenu: HMENU,
+ item: UINT,
+ fByPosition: BOOL,
+ lpmi: LPCMENUITEMINFOW,
+ ) -> BOOL;
+ pub fn GetMenuItemInfoA(
+ hMenu: HMENU,
+ uItem: UINT,
+ fByPosition: BOOL,
+ lpmii: LPMENUITEMINFOA,
+ ) -> BOOL;
+ pub fn GetMenuItemInfoW(
+ hMenu: HMENU,
+ uItem: UINT,
+ fByPosition: BOOL,
+ lpmii: LPMENUITEMINFOW,
+ ) -> BOOL;
+ pub fn SetMenuItemInfoA(
+ hmenu: HMENU,
+ item: UINT,
+ fByPositon: BOOL,
+ lpmii: LPCMENUITEMINFOA,
+ ) -> BOOL;
+ pub fn SetMenuItemInfoW(
+ hmenu: HMENU,
+ item: UINT,
+ fByPositon: BOOL,
+ lpmii: LPCMENUITEMINFOW,
+ ) -> BOOL;
+}
+pub const GMDI_USEDISABLED: DWORD = 0x0001;
+pub const GMDI_GOINTOPOPUPS: DWORD = 0x0002;
+extern "system" {
+ pub fn GetMenuDefaultItem(
+ hMenu: HMENU,
+ fByPos: UINT,
+ gmdiFlags: UINT,
+ ) -> UINT;
+ pub fn SetMenuDefaultItem(
+ hMenu: HMENU,
+ uItem: UINT,
+ fByPos: UINT,
+ ) -> BOOL;
+ pub fn GetMenuItemRect(
+ hWnd: HWND,
+ hMenu: HMENU,
+ uItem: UINT,
+ lprcItem: LPRECT,
+ ) -> BOOL;
+ pub fn MenuItemFromPoint(
+ hWnd: HWND,
+ hMenu: HMENU,
+ ptScreen: POINT,
+ ) -> c_int;
+}
+pub const TPM_LEFTBUTTON: UINT = 0x0000;
+pub const TPM_RIGHTBUTTON: UINT = 0x0002;
+pub const TPM_LEFTALIGN: UINT = 0x0000;
+pub const TPM_CENTERALIGN: UINT = 0x0004;
+pub const TPM_RIGHTALIGN: UINT = 0x0008;
+pub const TPM_TOPALIGN: UINT = 0x0000;
+pub const TPM_VCENTERALIGN: UINT = 0x0010;
+pub const TPM_BOTTOMALIGN: UINT = 0x0020;
+pub const TPM_HORIZONTAL: UINT = 0x0000;
+pub const TPM_VERTICAL: UINT = 0x0040;
+pub const TPM_NONOTIFY: UINT = 0x0080;
+pub const TPM_RETURNCMD: UINT = 0x0100;
+pub const TPM_RECURSE: UINT = 0x0001;
+pub const TPM_HORPOSANIMATION: UINT = 0x0400;
+pub const TPM_HORNEGANIMATION: UINT = 0x0800;
+pub const TPM_VERPOSANIMATION: UINT = 0x1000;
+pub const TPM_VERNEGANIMATION: UINT = 0x2000;
+pub const TPM_NOANIMATION: UINT = 0x4000;
+pub const TPM_LAYOUTRTL: UINT = 0x8000;
+pub const TPM_WORKAREA: UINT = 0x10000;
+STRUCT!{struct DROPSTRUCT {
+ hwndSource: HWND,
+ hwndSink: HWND,
+ wFmt: DWORD,
+ dwData: ULONG_PTR,
+ ptDrop: POINT,
+ dwControlData: DWORD,
+}}
+pub type PDROPSTRUCT = *mut DROPSTRUCT;
+pub type LPDROPSTRUCT = *mut DROPSTRUCT;
+pub const DOF_EXECUTABLE: DWORD = 0x8001;
+pub const DOF_DOCUMENT: DWORD = 0x8002;
+pub const DOF_DIRECTORY: DWORD = 0x8003;
+pub const DOF_MULTIPLE: DWORD = 0x8004;
+pub const DOF_PROGMAN: DWORD = 0x0001;
+pub const DOF_SHELLDATA: DWORD = 0x0002;
+pub const DO_DROPFILE: DWORD = 0x454C4946;
+pub const DO_PRINTFILE: DWORD = 0x544E5250;
+extern "system" {
+ pub fn DragObject(
+ hwndParent: HWND,
+ hwndFrom: HWND,
+ fmt: UINT,
+ data: ULONG_PTR,
+ hcur: HCURSOR,
+ ) -> DWORD;
+ pub fn DragDetect(
+ hwnd: HWND,
+ pt: POINT,
+ ) -> BOOL;
+ pub fn DrawIcon(
+ hDC: HDC,
+ x: c_int,
+ y: c_int,
+ hIcon: HICON,
+ ) -> BOOL;
+}
+pub const DT_TOP: UINT = 0x00000000;
+pub const DT_LEFT: UINT = 0x00000000;
+pub const DT_CENTER: UINT = 0x00000001;
+pub const DT_RIGHT: UINT = 0x00000002;
+pub const DT_VCENTER: UINT = 0x00000004;
+pub const DT_BOTTOM: UINT = 0x00000008;
+pub const DT_WORDBREAK: UINT = 0x00000010;
+pub const DT_SINGLELINE: UINT = 0x00000020;
+pub const DT_EXPANDTABS: UINT = 0x00000040;
+pub const DT_TABSTOP: UINT = 0x00000080;
+pub const DT_NOCLIP: UINT = 0x00000100;
+pub const DT_EXTERNALLEADING: UINT = 0x00000200;
+pub const DT_CALCRECT: UINT = 0x00000400;
+pub const DT_NOPREFIX: UINT = 0x00000800;
+pub const DT_INTERNAL: UINT = 0x00001000;
+pub const DT_EDITCONTROL: UINT = 0x00002000;
+pub const DT_PATH_ELLIPSIS: UINT = 0x00004000;
+pub const DT_END_ELLIPSIS: UINT = 0x00008000;
+pub const DT_MODIFYSTRING: UINT = 0x00010000;
+pub const DT_RTLREADING: UINT = 0x00020000;
+pub const DT_WORD_ELLIPSIS: UINT = 0x00040000;
+pub const DT_NOFULLWIDTHCHARBREAK: UINT = 0x00080000;
+pub const DT_HIDEPREFIX: UINT = 0x00100000;
+pub const DT_PREFIXONLY: UINT = 0x00200000;
+STRUCT!{struct DRAWTEXTPARAMS {
+ cbSize: UINT,
+ iTabLength: c_int,
+ iLeftMargin: c_int,
+ iRightMargin: c_int,
+ uiLengthDrawn: UINT,
+}}
+pub type LPDRAWTEXTPARAMS = *mut DRAWTEXTPARAMS;
+extern "system" {
+ pub fn DrawTextA(
+ hdc: HDC,
+ lpchText: LPCSTR,
+ cchText: c_int,
+ lprc: LPRECT,
+ format: UINT,
+ ) -> c_int;
+ pub fn DrawTextW(
+ hdc: HDC,
+ lpchText: LPCWSTR,
+ cchText: c_int,
+ lprc: LPRECT,
+ format: UINT,
+ ) -> c_int;
+ pub fn DrawTextExA(
+ hdc: HDC,
+ lpchText: LPCSTR,
+ cchText: c_int,
+ lprc: LPRECT,
+ format: UINT,
+ lpdtp: LPDRAWTEXTPARAMS,
+ ) -> c_int;
+ pub fn DrawTextExW(
+ hdc: HDC,
+ lpchText: LPCWSTR,
+ cchText: c_int,
+ lprc: LPRECT,
+ format: UINT,
+ lpdtp: LPDRAWTEXTPARAMS,
+ ) -> c_int;
+ pub fn GrayStringA(
+ hDC: HDC,
+ hBrush: HBRUSH,
+ lpOutputFunc: GRAYSTRINGPROC,
+ lpData: LPARAM,
+ nCount: c_int,
+ X: c_int,
+ Y: c_int,
+ nWidth: c_int,
+ nHeight: c_int,
+ ) -> BOOL;
+ pub fn GrayStringW(
+ hDC: HDC,
+ hBrush: HBRUSH,
+ lpOutputFunc: GRAYSTRINGPROC,
+ lpData: LPARAM,
+ nCount: c_int,
+ X: c_int,
+ Y: c_int,
+ nWidth: c_int,
+ nHeight: c_int,
+ ) -> BOOL;
+}
+pub const DST_COMPLEX: UINT = 0x0000;
+pub const DST_TEXT: UINT = 0x0001;
+pub const DST_PREFIXTEXT: UINT = 0x0002;
+pub const DST_ICON: UINT = 0x0003;
+pub const DST_BITMAP: UINT = 0x0004;
+pub const DSS_NORMAL: UINT = 0x0000;
+pub const DSS_UNION: UINT = 0x0010;
+pub const DSS_DISABLED: UINT = 0x0020;
+pub const DSS_MONO: UINT = 0x0080;
+pub const DSS_HIDEPREFIX: UINT = 0x0200;
+pub const DSS_PREFIXONLY: UINT = 0x0400;
+pub const DSS_RIGHT: UINT = 0x8000;
+extern "system" {
+ pub fn DrawStateA(
+ hdc: HDC,
+ hbrFore: HBRUSH,
+ qfnCallBack: DRAWSTATEPROC,
+ lData: LPARAM,
+ wData: WPARAM,
+ x: c_int,
+ y: c_int,
+ cx: c_int,
+ cy: c_int,
+ uFlags: UINT,
+ ) -> BOOL;
+ pub fn DrawStateW(
+ hdc: HDC,
+ hbrFore: HBRUSH,
+ qfnCallBack: DRAWSTATEPROC,
+ lData: LPARAM,
+ wData: WPARAM,
+ x: c_int,
+ y: c_int,
+ cx: c_int,
+ cy: c_int,
+ uFlags: UINT,
+ ) -> BOOL;
+ pub fn TabbedTextOutA(
+ hdc: HDC,
+ x: c_int,
+ y: c_int,
+ lpString: LPCSTR,
+ chCount: c_int,
+ nTabPositions: c_int,
+ lpnTabStopPositions: *const INT,
+ nTabOrigin: c_int,
+ ) -> LONG;
+ pub fn TabbedTextOutW(
+ hdc: HDC,
+ x: c_int,
+ y: c_int,
+ lpString: LPCWSTR,
+ chCount: c_int,
+ nTabPositions: c_int,
+ lpnTabStopPositions: *const INT,
+ nTabOrigin: c_int,
+ ) -> LONG;
+ pub fn GetTabbedTextExtentA(
+ hdc: HDC,
+ lpString: LPCSTR,
+ chCount: c_int,
+ nTabPositions: c_int,
+ lpnTabStopPositions: *const INT,
+ ) -> DWORD;
+ pub fn GetTabbedTextExtentW(
+ hdc: HDC,
+ lpString: LPCWSTR,
+ chCount: c_int,
+ nTabPositions: c_int,
+ lpnTabStopPositions: *const INT,
+ ) -> DWORD;
+ pub fn UpdateWindow(
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn SetActiveWindow(
+ hWnd: HWND,
+ ) -> HWND;
+ pub fn GetForegroundWindow() -> HWND;
+ pub fn PaintDesktop(
+ hdc: HDC,
+ ) -> BOOL;
+ pub fn SwitchToThisWindow(
+ hwnd: HWND,
+ fUnknown: BOOL,
+ );
+ pub fn SetForegroundWindow(
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn AllowSetForegroundWindow(
+ dwProcessId: DWORD,
+ ) -> BOOL;
+}
+pub const ASFW_ANY: DWORD = -1i32 as u32;
+extern "system" {
+ pub fn LockSetForegroundWindow(
+ uLockCode: UINT,
+ ) -> BOOL;
+}
+pub const LSFW_LOCK: UINT = 1;
+pub const LSFW_UNLOCK: UINT = 2;
+extern "system" {
+ pub fn WindowFromDC(
+ hDC: HDC,
+ ) -> HWND;
+ pub fn GetDC(
+ hWnd: HWND,
+ ) -> HDC;
+ pub fn GetDCEx(
+ hWnd: HWND,
+ hrgnClip: HRGN,
+ flags: DWORD,
+ ) -> HDC;
+}
+pub const DCX_WINDOW: DWORD = 0x00000001;
+pub const DCX_CACHE: DWORD = 0x00000002;
+pub const DCX_NORESETATTRS: DWORD = 0x00000004;
+pub const DCX_CLIPCHILDREN: DWORD = 0x00000008;
+pub const DCX_CLIPSIBLINGS: DWORD = 0x00000010;
+pub const DCX_PARENTCLIP: DWORD = 0x00000020;
+pub const DCX_EXCLUDERGN: DWORD = 0x00000040;
+pub const DCX_INTERSECTRGN: DWORD = 0x00000080;
+pub const DCX_EXCLUDEUPDATE: DWORD = 0x00000100;
+pub const DCX_INTERSECTUPDATE: DWORD = 0x00000200;
+pub const DCX_LOCKWINDOWUPDATE: DWORD = 0x00000400;
+pub const DCX_VALIDATE: DWORD = 0x00200000;
+extern "system" {
+ pub fn GetWindowDC(
+ hWnd: HWND,
+ ) -> HDC;
+ pub fn ReleaseDC(
+ hWnd: HWND,
+ hDC: HDC,
+ ) -> c_int;
+ pub fn BeginPaint(
+ hwnd: HWND,
+ lpPaint: LPPAINTSTRUCT,
+ ) -> HDC;
+ pub fn EndPaint(
+ hWnd: HWND,
+ lpPaint: *const PAINTSTRUCT,
+ ) -> BOOL;
+ pub fn GetUpdateRect(
+ hWnd: HWND,
+ lpRect: LPRECT,
+ bErase: BOOL,
+ ) -> BOOL;
+ pub fn GetUpdateRgn(
+ hWnd: HWND,
+ hRgn: HRGN,
+ bErase: BOOL,
+ ) -> c_int;
+ pub fn SetWindowRgn(
+ hWnd: HWND,
+ hRgn: HRGN,
+ bRedraw: BOOL,
+ ) -> c_int;
+ pub fn GetWindowRgn(
+ hWnd: HWND,
+ hRgn: HRGN,
+ ) -> c_int;
+ pub fn GetWindowRgnBox(
+ hWnd: HWND,
+ lprc: LPRECT,
+ ) -> c_int;
+ pub fn ExcludeUpdateRgn(
+ hDC: HDC,
+ hWnd: HWND,
+ ) -> c_int;
+ pub fn InvalidateRect(
+ hWnd: HWND,
+ lpRect: *const RECT,
+ bErase: BOOL,
+ ) -> BOOL;
+ pub fn ValidateRect(
+ hWnd: HWND,
+ lpRect: *const RECT,
+ ) -> BOOL;
+ pub fn InvalidateRgn(
+ hWnd: HWND,
+ hRgn: HRGN,
+ bErase: BOOL,
+ ) -> BOOL;
+ pub fn ValidateRgn(
+ hWnd: HWND,
+ hRgn: HRGN,
+ ) -> BOOL;
+ pub fn RedrawWindow(
+ hwnd: HWND,
+ lprcUpdate: *const RECT,
+ hrgnUpdate: HRGN,
+ flags: UINT,
+ ) -> BOOL;
+}
+pub const RDW_INVALIDATE: UINT = 0x0001;
+pub const RDW_INTERNALPAINT: UINT = 0x0002;
+pub const RDW_ERASE: UINT = 0x0004;
+pub const RDW_VALIDATE: UINT = 0x0008;
+pub const RDW_NOINTERNALPAINT: UINT = 0x0010;
+pub const RDW_NOERASE: UINT = 0x0020;
+pub const RDW_NOCHILDREN: UINT = 0x0040;
+pub const RDW_ALLCHILDREN: UINT = 0x0080;
+pub const RDW_UPDATENOW: UINT = 0x0100;
+pub const RDW_ERASENOW: UINT = 0x0200;
+pub const RDW_FRAME: UINT = 0x0400;
+pub const RDW_NOFRAME: UINT = 0x0800;
+extern "system" {
+ pub fn LockWindowUpdate(
+ hWndLock: HWND,
+ ) -> BOOL;
+ pub fn ScrollWindow(
+ hWnd: HWND,
+ xAmount: c_int,
+ yAmount: c_int,
+ lpRect: *const RECT,
+ lpClipRect: *const RECT,
+ ) -> BOOL;
+ pub fn ScrollDC(
+ hDC: HDC,
+ dx: c_int,
+ dy: c_int,
+ lprcScroll: *const RECT,
+ lprcClip: *const RECT,
+ hrgnUpdate: HRGN,
+ lprcUpdate: LPRECT,
+ ) -> BOOL;
+ pub fn ScrollWindowEx(
+ hWnd: HWND,
+ dx: c_int,
+ dy: c_int,
+ prcScroll: *const RECT,
+ prcClip: *const RECT,
+ hrgnUpdate: HRGN,
+ prcUpdate: LPRECT,
+ flags: UINT,
+ ) -> c_int;
+}
+pub const SW_SCROLLCHILDREN: UINT = 0x0001;
+pub const SW_INVALIDATE: UINT = 0x0002;
+pub const SW_ERASE: UINT = 0x0004;
+pub const SW_SMOOTHSCROLL: UINT = 0x0010;
+extern "system" {
+ pub fn SetScrollPos(
+ hWnd: HWND,
+ nBar: c_int,
+ nPos: c_int,
+ bRedraw: BOOL,
+ ) -> c_int;
+ pub fn GetScrollPos(
+ hWnd: HWND,
+ nBar: c_int,
+ ) -> c_int;
+ pub fn SetScrollRange(
+ hWnd: HWND,
+ nBar: c_int,
+ nMinPos: c_int,
+ nMaxPos: c_int,
+ bRedraw: BOOL,
+ ) -> BOOL;
+ pub fn GetScrollRange(
+ hWnd: HWND,
+ nBar: c_int,
+ lpMinPos: LPINT,
+ lpMaxPos: LPINT,
+ ) -> BOOL;
+ pub fn ShowScrollBar(
+ hWnd: HWND,
+ wBar: c_int,
+ bShow: BOOL,
+ ) -> BOOL;
+ pub fn EnableScrollBar(
+ hWnd: HWND,
+ wSBflags: UINT,
+ wArrows: UINT,
+ ) -> BOOL;
+}
+pub const ESB_ENABLE_BOTH: UINT = 0x0000;
+pub const ESB_DISABLE_BOTH: UINT = 0x0003;
+pub const ESB_DISABLE_LEFT: UINT = 0x0001;
+pub const ESB_DISABLE_RIGHT: UINT = 0x0002;
+pub const ESB_DISABLE_UP: UINT = 0x0001;
+pub const ESB_DISABLE_DOWN: UINT = 0x0002;
+pub const ESB_DISABLE_LTUP: UINT = ESB_DISABLE_LEFT;
+pub const ESB_DISABLE_RTDN: UINT = ESB_DISABLE_RIGHT;
+extern "system" {
+ pub fn SetPropA(
+ hWnd: HWND,
+ lpString: LPCSTR,
+ hData: HANDLE,
+ ) -> BOOL;
+ pub fn SetPropW(
+ hWnd: HWND,
+ lpString: LPCWSTR,
+ hData: HANDLE,
+ ) -> BOOL;
+ pub fn GetPropA(
+ hwnd: HWND,
+ lpString: LPCSTR,
+ ) -> HANDLE;
+ pub fn GetPropW(
+ hwnd: HWND,
+ lpString: LPCWSTR,
+ ) -> HANDLE;
+ pub fn RemovePropA(
+ hWnd: HWND,
+ lpStr: LPCSTR,
+ ) -> HANDLE;
+ pub fn RemovePropW(
+ hWnd: HWND,
+ lpStr: LPCWSTR,
+ ) -> HANDLE;
+ pub fn EnumPropsExA(
+ hWnd: HWND,
+ lpEnumFunc: PROPENUMPROCA,
+ lParam: LPARAM,
+ ) -> c_int;
+ pub fn EnumPropsExW(
+ hWnd: HWND,
+ lpEnumFunc: PROPENUMPROCW,
+ lParam: LPARAM,
+ ) -> c_int;
+ pub fn EnumPropsA(
+ hWnd: HWND,
+ lpEnumFunc: PROPENUMPROCA,
+ ) -> c_int;
+ pub fn EnumPropsW(
+ hWnd: HWND,
+ lpEnumFunc: PROPENUMPROCW,
+ ) -> c_int;
+ pub fn SetWindowTextA(
+ hWnd: HWND,
+ lpString: LPCSTR,
+ ) -> BOOL;
+ pub fn SetWindowTextW(
+ hWnd: HWND,
+ lpString: LPCWSTR,
+ ) -> BOOL;
+ pub fn GetWindowTextA(
+ hWnd: HWND,
+ lpString: LPSTR,
+ nMaxCount: c_int,
+ ) -> c_int;
+ pub fn GetWindowTextW(
+ hWnd: HWND,
+ lpString: LPWSTR,
+ nMaxCount: c_int,
+ ) -> c_int;
+ pub fn GetWindowTextLengthA(
+ hWnd: HWND,
+ ) -> c_int;
+ pub fn GetWindowTextLengthW(
+ hWnd: HWND,
+ ) -> c_int;
+ pub fn GetClientRect(
+ hWnd: HWND,
+ lpRect: LPRECT,
+ ) -> BOOL;
+ pub fn GetWindowRect(
+ hWnd: HWND,
+ lpRect: LPRECT,
+ ) -> BOOL;
+ pub fn AdjustWindowRect(
+ lpRect: LPRECT,
+ dwStyle: DWORD,
+ bMenu: BOOL,
+ ) -> BOOL;
+ pub fn AdjustWindowRectEx(
+ lpRect: LPRECT,
+ dwStyle: DWORD,
+ bMenu: BOOL,
+ dwExStyle: DWORD,
+ ) -> BOOL;
+ pub fn AdjustWindowRectExForDpi(
+ lpRect: LPRECT,
+ dwStyle: DWORD,
+ bMenu: BOOL,
+ dwExStyle: DWORD,
+ dpi: UINT,
+ ) -> BOOL;
+}
+pub const HELPINFO_WINDOW: UINT = 0x0001;
+pub const HELPINFO_MENUITEM: UINT = 0x0002;
+STRUCT!{struct HELPINFO {
+ cbSize: UINT,
+ iContextType: c_int,
+ iCtrlId: c_int,
+ hItemHandle: HANDLE,
+ dwContextId: DWORD,
+ MousePos: POINT,
+}}
+pub type LPHELPINFO = *mut HELPINFO;
+extern "system" {
+ pub fn SetWindowContextHelpId(
+ _: HWND,
+ _: DWORD,
+ ) -> BOOL;
+ pub fn GetWindowContextHelpId(
+ _: HWND,
+ ) -> DWORD;
+ pub fn SetMenuContextHelpId(
+ _: HMENU,
+ _: DWORD,
+ ) -> BOOL;
+ pub fn GetMenuContextHelpId(
+ _: HMENU,
+ ) -> DWORD;
+}
+pub const MB_OK: UINT = 0x00000000;
+pub const MB_OKCANCEL: UINT = 0x00000001;
+pub const MB_ABORTRETRYIGNORE: UINT = 0x00000002;
+pub const MB_YESNOCANCEL: UINT = 0x00000003;
+pub const MB_YESNO: UINT = 0x00000004;
+pub const MB_RETRYCANCEL: UINT = 0x00000005;
+pub const MB_CANCELTRYCONTINUE: UINT = 0x00000006;
+pub const MB_ICONHAND: UINT = 0x00000010;
+pub const MB_ICONQUESTION: UINT = 0x00000020;
+pub const MB_ICONEXCLAMATION: UINT = 0x00000030;
+pub const MB_ICONASTERISK: UINT = 0x00000040;
+pub const MB_USERICON: UINT = 0x00000080;
+pub const MB_ICONWARNING: UINT = MB_ICONEXCLAMATION;
+pub const MB_ICONERROR: UINT = MB_ICONHAND;
+pub const MB_ICONINFORMATION: UINT = MB_ICONASTERISK;
+pub const MB_ICONSTOP: UINT = MB_ICONHAND;
+pub const MB_DEFBUTTON1: UINT = 0x00000000;
+pub const MB_DEFBUTTON2: UINT = 0x00000100;
+pub const MB_DEFBUTTON3: UINT = 0x00000200;
+pub const MB_DEFBUTTON4: UINT = 0x00000300;
+pub const MB_APPLMODAL: UINT = 0x00000000;
+pub const MB_SYSTEMMODAL: UINT = 0x00001000;
+pub const MB_TASKMODAL: UINT = 0x00002000;
+pub const MB_HELP: UINT = 0x00004000;
+pub const MB_NOFOCUS: UINT = 0x00008000;
+pub const MB_SETFOREGROUND: UINT = 0x00010000;
+pub const MB_DEFAULT_DESKTOP_ONLY: UINT = 0x00020000;
+pub const MB_TOPMOST: UINT = 0x00040000;
+pub const MB_RIGHT: UINT = 0x00080000;
+pub const MB_RTLREADING: UINT = 0x00100000;
+pub const MB_SERVICE_NOTIFICATION: UINT = 0x00200000;
+pub const MB_SERVICE_NOTIFICATION_NT3X: UINT = 0x00040000;
+pub const MB_TYPEMASK: UINT = 0x0000000F;
+pub const MB_ICONMASK: UINT = 0x000000F0;
+pub const MB_DEFMASK: UINT = 0x00000F00;
+pub const MB_MODEMASK: UINT = 0x00003000;
+pub const MB_MISCMASK: UINT = 0x0000C000;
+extern "system" {
+ pub fn MessageBoxA(
+ hWnd: HWND,
+ lpText: LPCSTR,
+ lpCaption: LPCSTR,
+ uType: UINT,
+ ) -> c_int;
+ pub fn MessageBoxW(
+ hWnd: HWND,
+ lpText: LPCWSTR,
+ lpCaption: LPCWSTR,
+ uType: UINT,
+ ) -> c_int;
+ pub fn MessageBoxExA(
+ hWnd: HWND,
+ lpText: LPCSTR,
+ lpCaption: LPCSTR,
+ uType: UINT,
+ wLanguageId: WORD,
+ ) -> c_int;
+ pub fn MessageBoxExW(
+ hWnd: HWND,
+ lpText: LPCWSTR,
+ lpCaption: LPCWSTR,
+ uType: UINT,
+ wLanguageId: WORD,
+ ) -> c_int;
+}
+FN!{stdcall MSGBOXCALLBACK(
+ LPHELPINFO,
+) -> ()}
+STRUCT!{struct MSGBOXPARAMSA {
+ cbSize: UINT,
+ hwndOwner: HWND,
+ hInstance: HINSTANCE,
+ lpszText: LPCSTR,
+ lpszCaption: LPCSTR,
+ dwStyle: DWORD,
+ lpszIcon: LPCSTR,
+ dwContextHelpId: DWORD_PTR,
+ lpfnMsgBoxCallback: MSGBOXCALLBACK,
+ dwLanguageId: DWORD,
+}}
+pub type PMSGBOXPARAMSA = *mut MSGBOXPARAMSA;
+pub type LPMSGBOXPARAMSA = *mut MSGBOXPARAMSA;
+STRUCT!{struct MSGBOXPARAMSW {
+ cbSize: UINT,
+ hwndOwner: HWND,
+ hInstance: HINSTANCE,
+ lpszText: LPCWSTR,
+ lpszCaption: LPCWSTR,
+ dwStyle: DWORD,
+ lpszIcon: LPCWSTR,
+ dwContextHelpId: DWORD_PTR,
+ lpfnMsgBoxCallback: MSGBOXCALLBACK,
+ dwLanguageId: DWORD,
+}}
+pub type PMSGBOXPARAMSW = *mut MSGBOXPARAMSW;
+pub type LPMSGBOXPARAMSW = *mut MSGBOXPARAMSW;
+extern "system" {
+ pub fn MessageBoxIndirectA(
+ lpmbp: *const MSGBOXPARAMSA,
+ ) -> c_int;
+ pub fn MessageBoxIndirectW(
+ lpmbp: *const MSGBOXPARAMSW,
+ ) -> c_int;
+ pub fn MessageBeep(
+ uType: UINT,
+ ) -> BOOL;
+ pub fn ShowCursor(
+ bShow: BOOL,
+ ) -> c_int;
+ pub fn SetCursorPos(
+ X: c_int,
+ Y: c_int,
+ ) -> BOOL;
+ pub fn SetPhysicalCursorPos(
+ X: c_int,
+ Y: c_int,
+ ) -> BOOL;
+ pub fn SetCursor(
+ hCursor: HCURSOR,
+ ) -> HCURSOR;
+ pub fn GetCursorPos(
+ lpPoint: LPPOINT,
+ ) -> BOOL;
+ pub fn GetPhysicalCursorPos(
+ lpPoint: LPPOINT,
+ ) -> BOOL;
+ pub fn GetClipCursor(
+ lpRect: LPRECT,
+ ) -> BOOL;
+ pub fn GetCursor() -> HCURSOR;
+ pub fn CreateCaret(
+ hWnd: HWND,
+ hBitmap: HBITMAP,
+ nWidth: c_int,
+ nHeight: c_int,
+ ) -> BOOL;
+ pub fn GetCaretBlinkTime() -> UINT;
+ pub fn SetCaretBlinkTime(
+ uMSeconds: UINT,
+ ) -> BOOL;
+ pub fn DestroyCaret() -> BOOL;
+ pub fn HideCaret(
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn ShowCaret(
+ hWnd: HWND,
+ ) -> BOOL;
+ pub fn SetCaretPos(
+ X: c_int,
+ Y: c_int,
+ ) -> BOOL;
+ pub fn GetCaretPos(
+ lpPoint: LPPOINT,
+ ) -> BOOL;
+ pub fn ClientToScreen(
+ hWnd: HWND,
+ lpPoint: LPPOINT,
+ ) -> BOOL;
+ pub fn ScreenToClient(
+ hWnd: HWND,
+ lpPoint: LPPOINT,
+ ) -> BOOL;
+ pub fn LogicalToPhysicalPoint(
+ hWnd: HWND,
+ lpPoint: LPPOINT,
+ ) -> BOOL;
+ pub fn PhysicalToLogicalPoint(
+ hWnd: HWND,
+ lpPoint: LPPOINT,
+ ) -> BOOL;
+ pub fn LogicalToPhysicalPointForPerMonitorDPI(
+ hWnd: HWND,
+ lpPoint: LPPOINT,
+ ) -> BOOL;
+ pub fn PhysicalToLogicalPointForPerMonitorDPI(
+ hWnd: HWND,
+ lpPoint: LPPOINT,
+ ) -> BOOL;
+ pub fn MapWindowPoints(
+ hWndFrom: HWND,
+ hWndTo: HWND,
+ lpPoints: LPPOINT,
+ cPoints: UINT,
+ ) -> c_int;
+ pub fn WindowFromPoint(
+ Point: POINT,
+ ) -> HWND;
+ pub fn WindowFromPhysicalPoint(
+ Point: POINT,
+ ) -> HWND;
+ pub fn ChildWindowFromPoint(
+ hWndParent: HWND,
+ point: POINT,
+ ) -> HWND;
+ pub fn ClipCursor(
+ lpRect: *const RECT,
+ ) -> BOOL;
+}
+pub const CWP_ALL: UINT = 0x0000;
+pub const CWP_SKIPINVISIBLE: UINT = 0x0001;
+pub const CWP_SKIPDISABLED: UINT = 0x0002;
+pub const CWP_SKIPTRANSPARENT: UINT = 0x0004;
+extern "system" {
+ pub fn ChildWindowFromPointEx(
+ hwnd: HWND,
+ pt: POINT,
+ flags: UINT,
+ ) -> HWND;
+}
+pub const CTLCOLOR_MSGBOX: c_int = 0;
+pub const CTLCOLOR_EDIT: c_int = 1;
+pub const CTLCOLOR_LISTBOX: c_int = 2;
+pub const CTLCOLOR_BTN: c_int = 3;
+pub const CTLCOLOR_DLG: c_int = 4;
+pub const CTLCOLOR_SCROLLBAR: c_int = 5;
+pub const CTLCOLOR_STATIC: c_int = 6;
+pub const CTLCOLOR_MAX: c_int = 7;
+pub const COLOR_SCROLLBAR: c_int = 0;
+pub const COLOR_BACKGROUND: c_int = 1;
+pub const COLOR_ACTIVECAPTION: c_int = 2;
+pub const COLOR_INACTIVECAPTION: c_int = 3;
+pub const COLOR_MENU: c_int = 4;
+pub const COLOR_WINDOW: c_int = 5;
+pub const COLOR_WINDOWFRAME: c_int = 6;
+pub const COLOR_MENUTEXT: c_int = 7;
+pub const COLOR_WINDOWTEXT: c_int = 8;
+pub const COLOR_CAPTIONTEXT: c_int = 9;
+pub const COLOR_ACTIVEBORDER: c_int = 10;
+pub const COLOR_INACTIVEBORDER: c_int = 11;
+pub const COLOR_APPWORKSPACE: c_int = 12;
+pub const COLOR_HIGHLIGHT: c_int = 13;
+pub const COLOR_HIGHLIGHTTEXT: c_int = 14;
+pub const COLOR_BTNFACE: c_int = 15;
+pub const COLOR_BTNSHADOW: c_int = 16;
+pub const COLOR_GRAYTEXT: c_int = 17;
+pub const COLOR_BTNTEXT: c_int = 18;
+pub const COLOR_INACTIVECAPTIONTEXT: c_int = 19;
+pub const COLOR_BTNHIGHLIGHT: c_int = 20;
+pub const COLOR_3DDKSHADOW: c_int = 21;
+pub const COLOR_3DLIGHT: c_int = 22;
+pub const COLOR_INFOTEXT: c_int = 23;
+pub const COLOR_INFOBK: c_int = 24;
+pub const COLOR_HOTLIGHT: c_int = 26;
+pub const COLOR_GRADIENTACTIVECAPTION: c_int = 27;
+pub const COLOR_GRADIENTINACTIVECAPTION: c_int = 28;
+pub const COLOR_MENUHILIGHT: c_int = 29;
+pub const COLOR_MENUBAR: c_int = 30;
+pub const COLOR_DESKTOP: c_int = COLOR_BACKGROUND;
+pub const COLOR_3DFACE: c_int = COLOR_BTNFACE;
+pub const COLOR_3DSHADOW: c_int = COLOR_BTNSHADOW;
+pub const COLOR_3DHIGHLIGHT: c_int = COLOR_BTNHIGHLIGHT;
+pub const COLOR_3DHILIGHT: c_int = COLOR_BTNHIGHLIGHT;
+pub const COLOR_BTNHILIGHT: c_int = COLOR_BTNHIGHLIGHT;
+extern "system" {
+ pub fn GetSysColor(
+ nIndex: c_int,
+ ) -> DWORD;
+ pub fn GetSysColorBrush(
+ nIndex: c_int,
+ ) -> HBRUSH;
+ pub fn SetSysColors(
+ cElements: c_int,
+ lpaElements: *const INT,
+ lpaRgbValues: *const COLORREF,
+ ) -> BOOL;
+ pub fn DrawFocusRect(
+ hDC: HDC,
+ lprc: *const RECT,
+ ) -> BOOL;
+ pub fn FillRect(
+ hDC: HDC,
+ lprc: *const RECT,
+ hbr: HBRUSH,
+ ) -> c_int;
+ pub fn FrameRect(
+ hDC: HDC,
+ lprc: *const RECT,
+ hbr: HBRUSH,
+ ) -> c_int;
+ pub fn InvertRect(
+ hDC: HDC,
+ lprc: *const RECT,
+ ) -> BOOL;
+ pub fn SetRect(
+ lprc: LPRECT,
+ xLeft: c_int,
+ yTop: c_int,
+ xRight: c_int,
+ yBottom: c_int,
+ ) -> BOOL;
+ pub fn SetRectEmpty(
+ lprc: LPRECT,
+ ) -> BOOL;
+ pub fn CopyRect(
+ lprcDst: LPRECT,
+ lprcSrc: *const RECT,
+ ) -> BOOL;
+ pub fn InflateRect(
+ lprc: LPRECT,
+ dx: c_int,
+ dy: c_int,
+ ) -> BOOL;
+ pub fn IntersectRect(
+ lprcDst: LPRECT,
+ lprcSrc1: *const RECT,
+ lprcSrc2: *const RECT,
+ ) -> BOOL;
+ pub fn UnionRect(
+ lprcDst: LPRECT,
+ lprcSrc1: *const RECT,
+ lprcSrc2: *const RECT,
+ ) -> BOOL;
+ pub fn SubtractRect(
+ lprcDst: LPRECT,
+ lprcSrc1: *const RECT,
+ lprcSrc2: *const RECT,
+ ) -> BOOL;
+ pub fn OffsetRect(
+ lprc: LPRECT,
+ dx: c_int,
+ dy: c_int,
+ ) -> BOOL;
+ pub fn IsRectEmpty(
+ lprc: *const RECT,
+ ) -> BOOL;
+ pub fn EqualRect(
+ lprc1: *const RECT,
+ lprc2: *const RECT,
+ ) -> BOOL;
+ pub fn PtInRect(
+ lprc: *const RECT,
+ pt: POINT,
+ ) -> BOOL;
+ pub fn GetWindowWord(
+ hWnd: HWND,
+ nIndex: c_int,
+ ) -> WORD;
+ pub fn SetWindowWord(
+ hwnd: HWND,
+ nIndex: c_int,
+ wNewWord: WORD,
+ ) -> WORD;
+ pub fn GetWindowLongA(
+ hWnd: HWND,
+ nIndex: c_int,
+ ) -> LONG;
+ pub fn GetWindowLongW(
+ hWnd: HWND,
+ nIndex: c_int,
+ ) -> LONG;
+ pub fn SetWindowLongA(
+ hWnd: HWND,
+ nIndex: c_int,
+ dwNewLong: LONG,
+ ) -> LONG;
+ pub fn SetWindowLongW(
+ hWnd: HWND,
+ nIndex: c_int,
+ dwNewLong: LONG,
+ ) -> LONG;
+ #[cfg(target_pointer_width = "64")]
+ pub fn GetWindowLongPtrA(
+ hWnd: HWND,
+ nIndex: c_int,
+ ) -> LONG_PTR;
+ #[cfg(target_pointer_width = "64")]
+ pub fn GetWindowLongPtrW(
+ hWnd: HWND,
+ nIndex: c_int,
+ ) -> LONG_PTR;
+ #[cfg(target_pointer_width = "64")]
+ pub fn SetWindowLongPtrA(
+ hWnd: HWND,
+ nIndex: c_int,
+ dwNewLong: LONG_PTR,
+ ) -> LONG_PTR;
+ #[cfg(target_pointer_width = "64")]
+ pub fn SetWindowLongPtrW(
+ hWnd: HWND,
+ nIndex: c_int,
+ dwNewLong: LONG_PTR,
+ ) -> LONG_PTR;
+}
+#[cfg(target_pointer_width = "32")]
+pub use self::GetWindowLongA as GetWindowLongPtrA;
+#[cfg(target_pointer_width = "32")]
+pub use self::GetWindowLongW as GetWindowLongPtrW;
+#[cfg(target_pointer_width = "32")]
+pub use self::SetWindowLongA as SetWindowLongPtrA;
+#[cfg(target_pointer_width = "32")]
+pub use self::SetWindowLongW as SetWindowLongPtrW;
+extern "system" {
+ pub fn GetClassWord(
+ hWnd: HWND,
+ nIndex: c_int,
+ ) -> WORD;
+ pub fn SetClassWord(
+ hWnd: HWND,
+ nIndex: c_int,
+ wNewWord: WORD,
+ ) -> WORD;
+ pub fn GetClassLongA(
+ hWnd: HWND,
+ nIndex: c_int,
+ ) -> DWORD;
+ pub fn GetClassLongW(
+ hWnd: HWND,
+ nIndex: c_int,
+ ) -> DWORD;
+ pub fn SetClassLongA(
+ hWnd: HWND,
+ nIndex: c_int,
+ dwNewLong: LONG,
+ ) -> DWORD;
+ pub fn SetClassLongW(
+ hWnd: HWND,
+ nIndex: c_int,
+ dwNewLong: LONG,
+ ) -> DWORD;
+ #[cfg(target_pointer_width = "64")]
+ pub fn GetClassLongPtrA(
+ hWnd: HWND,
+ nIndex: c_int,
+ ) -> ULONG_PTR;
+ #[cfg(target_pointer_width = "64")]
+ pub fn GetClassLongPtrW(
+ hWnd: HWND,
+ nIndex: c_int,
+ ) -> ULONG_PTR;
+ #[cfg(target_pointer_width = "64")]
+ pub fn SetClassLongPtrA(
+ hWnd: HWND,
+ nIndex: c_int,
+ dwNewLong: LONG_PTR,
+ ) -> ULONG_PTR;
+ #[cfg(target_pointer_width = "64")]
+ pub fn SetClassLongPtrW(
+ hWnd: HWND,
+ nIndex: c_int,
+ dwNewLong: LONG_PTR,
+ ) -> ULONG_PTR;
+}
+#[cfg(target_pointer_width = "32")]
+pub use self::GetClassLongA as GetClassLongPtrA;
+#[cfg(target_pointer_width = "32")]
+pub use self::GetClassLongW as GetClassLongPtrW;
+#[cfg(target_pointer_width = "32")]
+pub use self::SetClassLongA as SetClassLongPtrA;
+#[cfg(target_pointer_width = "32")]
+pub use self::SetClassLongW as SetClassLongPtrW;
+extern "system" {
+ pub fn GetProcessDefaultLayout(
+ pdwDefaultLayout: *mut DWORD,
+ ) -> BOOL;
+ pub fn SetProcessDefaultLayout(
+ dwDefaultLayout: DWORD,
+ ) -> BOOL;
+ pub fn GetDesktopWindow() -> HWND;
+ pub fn GetParent(
+ hWnd: HWND,
+ ) -> HWND;
+ pub fn SetParent(
+ hWndChild: HWND,
+ hWndNewParent: HWND,
+ ) -> HWND;
+ pub fn EnumChildWindows(
+ hWndParent: HWND,
+ lpEnumFunc: WNDENUMPROC,
+ lParam: LPARAM,
+ ) -> BOOL;
+ pub fn FindWindowA(
+ lpClassName: LPCSTR,
+ lpWindowName: LPCSTR,
+ ) -> HWND;
+ pub fn FindWindowW(
+ lpClassName: LPCWSTR,
+ lpWindowName: LPCWSTR,
+ ) -> HWND;
+ pub fn FindWindowExA(
+ hWndParent: HWND,
+ hWndChildAfter: HWND,
+ lpszClass: LPCSTR,
+ lpszWindow: LPCSTR,
+ ) -> HWND;
+ pub fn FindWindowExW(
+ hWndParent: HWND,
+ hWndChildAfter: HWND,
+ lpszClass: LPCWSTR,
+ lpszWindow: LPCWSTR,
+ ) -> HWND;
+ pub fn GetShellWindow() -> HWND;
+ pub fn RegisterShellHookWindow(
+ hwnd: HWND,
+ ) -> BOOL;
+ pub fn DeregisterShellHookWindow(
+ hwnd: HWND,
+ ) -> BOOL;
+ pub fn EnumWindows(
+ lpEnumFunc: WNDENUMPROC,
+ lParam: LPARAM,
+ ) -> BOOL;
+ pub fn EnumThreadWindows(
+ dwThreadId: DWORD,
+ lpfn: WNDENUMPROC,
+ lParam: LPARAM,
+ ) -> BOOL;
+}
+// EnumTaskWindows
+extern "system" {
+ pub fn GetClassNameA(
+ hWnd: HWND,
+ lpClassName: LPCSTR,
+ nMaxCount: c_int,
+ ) -> c_int;
+ pub fn GetClassNameW(
+ hWnd: HWND,
+ lpClassName: LPCWSTR,
+ nMaxCount: c_int,
+ ) -> c_int;
+ pub fn GetTopWindow(
+ hWnd: HWND,
+ ) -> HWND;
+}
+// GetNextWindow
+// GetSysModalWindow
+// SetSysModalWindow
+extern "system" {
+ pub fn GetWindowThreadProcessId(
+ hWnd: HWND,
+ lpdwProcessId: LPDWORD,
+ ) -> DWORD;
+ pub fn IsGUIThread(
+ bConvert: BOOL,
+ ) -> BOOL;
+ pub fn GetLastActivePopup(
+ hWnd: HWND,
+ ) -> HWND;
+}
+pub const GW_HWNDFIRST: UINT = 0;
+pub const GW_HWNDLAST: UINT = 1;
+pub const GW_HWNDNEXT: UINT = 2;
+pub const GW_HWNDPREV: UINT = 3;
+pub const GW_OWNER: UINT = 4;
+pub const GW_CHILD: UINT = 5;
+pub const GW_ENABLEDPOPUP: UINT = 6;
+pub const GW_MAX: UINT = 6;
+extern "system" {
+ pub fn GetWindow(
+ hWnd: HWND,
+ uCmd: UINT,
+ ) -> HWND;
+ pub fn SetWindowsHookA(
+ nFilterType: c_int,
+ pfnFilterProc: HOOKPROC,
+ ) -> HHOOK;
+ pub fn SetWindowsHookW(
+ nFilterType: c_int,
+ pfnFilterProc: HOOKPROC,
+ ) -> HHOOK;
+ pub fn UnhookWindowsHook(
+ nFilterType: c_int,
+ pfnFilterProc: HOOKPROC,
+ ) -> BOOL;
+ pub fn SetWindowsHookExA(
+ idHook: c_int,
+ lpfn: HOOKPROC,
+ hmod: HINSTANCE,
+ dwThreadId: DWORD,
+ ) -> HHOOK;
+ pub fn SetWindowsHookExW(
+ idHook: c_int,
+ lpfn: HOOKPROC,
+ hmod: HINSTANCE,
+ dwThreadId: DWORD,
+ ) -> HHOOK;
+ pub fn UnhookWindowsHookEx(
+ hhk: HHOOK,
+ ) -> BOOL;
+ pub fn CallNextHookEx(
+ hhk: HHOOK,
+ nCode: c_int,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LRESULT;
+}
+// DefHookProc
+pub const MF_INSERT: UINT = 0x00000000;
+pub const MF_CHANGE: UINT = 0x00000080;
+pub const MF_APPEND: UINT = 0x00000100;
+pub const MF_DELETE: UINT = 0x00000200;
+pub const MF_REMOVE: UINT = 0x00001000;
+pub const MF_BYCOMMAND: UINT = 0x00000000;
+pub const MF_BYPOSITION: UINT = 0x00000400;
+pub const MF_SEPARATOR: UINT = 0x00000800;
+pub const MF_ENABLED: UINT = 0x00000000;
+pub const MF_GRAYED: UINT = 0x00000001;
+pub const MF_DISABLED: UINT = 0x00000002;
+pub const MF_UNCHECKED: UINT = 0x00000000;
+pub const MF_CHECKED: UINT = 0x00000008;
+pub const MF_USECHECKBITMAPS: UINT = 0x00000200;
+pub const MF_STRING: UINT = 0x00000000;
+pub const MF_BITMAP: UINT = 0x00000004;
+pub const MF_OWNERDRAW: UINT = 0x00000100;
+pub const MF_POPUP: UINT = 0x00000010;
+pub const MF_MENUBARBREAK: UINT = 0x00000020;
+pub const MF_MENUBREAK: UINT = 0x00000040;
+pub const MF_UNHILITE: UINT = 0x00000000;
+pub const MF_HILITE: UINT = 0x00000080;
+pub const MF_DEFAULT: UINT = 0x00001000;
+pub const MF_SYSMENU: UINT = 0x00002000;
+pub const MF_HELP: UINT = 0x00004000;
+pub const MF_RIGHTJUSTIFY: UINT = 0x00004000;
+pub const MF_MOUSESELECT: UINT = 0x00008000;
+pub const MF_END: UINT = 0x00000080;
+pub const MFT_STRING: UINT = MF_STRING;
+pub const MFT_BITMAP: UINT = MF_BITMAP;
+pub const MFT_MENUBARBREAK: UINT = MF_MENUBARBREAK;
+pub const MFT_MENUBREAK: UINT = MF_MENUBREAK;
+pub const MFT_OWNERDRAW: UINT = MF_OWNERDRAW;
+pub const MFT_RADIOCHECK: UINT = 0x00000200;
+pub const MFT_SEPARATOR: UINT = MF_SEPARATOR;
+pub const MFT_RIGHTORDER: UINT = 0x00002000;
+pub const MFT_RIGHTJUSTIFY: UINT = MF_RIGHTJUSTIFY;
+pub const MFS_GRAYED: UINT = 0x00000003;
+pub const MFS_DISABLED: UINT = MFS_GRAYED;
+pub const MFS_CHECKED: UINT = MF_CHECKED;
+pub const MFS_HILITE: UINT = MF_HILITE;
+pub const MFS_ENABLED: UINT = MF_ENABLED;
+pub const MFS_UNCHECKED: UINT = MF_UNCHECKED;
+pub const MFS_UNHILITE: UINT = MF_UNHILITE;
+pub const MFS_DEFAULT: UINT = MF_DEFAULT;
+extern "system" {
+ pub fn CheckMenuRadioItem(
+ hMenu: HMENU,
+ first: UINT,
+ last: UINT,
+ check: UINT,
+ flags: UINT,
+ ) -> BOOL;
+}
+//10225
+pub const SC_SIZE: WPARAM = 0xF000;
+pub const SC_MOVE: WPARAM = 0xF010;
+pub const SC_MINIMIZE: WPARAM = 0xF020;
+pub const SC_MAXIMIZE: WPARAM = 0xF030;
+pub const SC_NEXTWINDOW: WPARAM = 0xF040;
+pub const SC_PREVWINDOW: WPARAM = 0xF050;
+pub const SC_CLOSE: WPARAM = 0xF060;
+pub const SC_VSCROLL: WPARAM = 0xF070;
+pub const SC_HSCROLL: WPARAM = 0xF080;
+pub const SC_MOUSEMENU: WPARAM = 0xF090;
+pub const SC_KEYMENU: WPARAM = 0xF100;
+pub const SC_ARRANGE: WPARAM = 0xF110;
+pub const SC_RESTORE: WPARAM = 0xF120;
+pub const SC_TASKLIST: WPARAM = 0xF130;
+pub const SC_SCREENSAVE: WPARAM = 0xF140;
+pub const SC_HOTKEY: WPARAM = 0xF150;
+pub const SC_DEFAULT: WPARAM = 0xF160;
+pub const SC_MONITORPOWER: WPARAM = 0xF170;
+pub const SC_CONTEXTHELP: WPARAM = 0xF180;
+pub const SC_SEPARATOR: WPARAM = 0xF00F;
+//10269
+extern "system" {
+ pub fn LoadBitmapA(
+ hInstance: HINSTANCE,
+ lpBitmapName: LPCSTR,
+ ) -> HBITMAP;
+ pub fn LoadBitmapW(
+ hInstance: HINSTANCE,
+ lpBitmapName: LPCWSTR,
+ ) -> HBITMAP;
+ pub fn LoadCursorA(
+ hInstance: HINSTANCE,
+ lpCursorName: LPCSTR,
+ ) -> HCURSOR;
+ pub fn LoadCursorW(
+ hInstance: HINSTANCE,
+ lpCursorName: LPCWSTR,
+ ) -> HCURSOR;
+ pub fn LoadCursorFromFileA(
+ lpFileName: LPCSTR,
+ ) -> HCURSOR;
+ pub fn LoadCursorFromFileW(
+ lpFileName: LPCWSTR,
+ ) -> HCURSOR;
+ pub fn CreateCursor(
+ hInst: HINSTANCE,
+ xHotSpot: c_int,
+ yHotSpot: c_int,
+ nWidth: c_int,
+ nHeight: c_int,
+ pvAndPlane: *const VOID,
+ pvXORPlane: *const VOID,
+ ) -> HCURSOR;
+ pub fn DestroyCursor(
+ hCursor: HCURSOR,
+ ) -> BOOL;
+}
+//10355
+pub const IDC_ARROW: LPCWSTR = 32512 as LPCWSTR;
+pub const IDC_IBEAM: LPCWSTR = 32513 as LPCWSTR;
+pub const IDC_WAIT: LPCWSTR = 32514 as LPCWSTR;
+pub const IDC_CROSS: LPCWSTR = 32515 as LPCWSTR;
+pub const IDC_UPARROW: LPCWSTR = 32516 as LPCWSTR;
+pub const IDC_SIZE: LPCWSTR = 32640 as LPCWSTR;
+pub const IDC_ICON: LPCWSTR = 32641 as LPCWSTR;
+pub const IDC_SIZENWSE: LPCWSTR = 32642 as LPCWSTR;
+pub const IDC_SIZENESW: LPCWSTR = 32643 as LPCWSTR;
+pub const IDC_SIZEWE: LPCWSTR = 32644 as LPCWSTR;
+pub const IDC_SIZENS: LPCWSTR = 32645 as LPCWSTR;
+pub const IDC_SIZEALL: LPCWSTR = 32646 as LPCWSTR;
+pub const IDC_NO: LPCWSTR = 32648 as LPCWSTR;
+pub const IDC_HAND: LPCWSTR = 32649 as LPCWSTR;
+pub const IDC_APPSTARTING: LPCWSTR = 32650 as LPCWSTR;
+pub const IDC_HELP: LPCWSTR = 32651 as LPCWSTR;
+extern "system" {
+ pub fn SetSystemCursor(
+ hcur: HCURSOR,
+ id: DWORD,
+ ) -> BOOL;
+}
+STRUCT!{struct ICONINFO {
+ fIcon: BOOL,
+ xHotspot: DWORD,
+ yHotspot: DWORD,
+ hbmMask: HBITMAP,
+ hbmColor: HBITMAP,
+}}
+pub type PICONINFO = *mut ICONINFO;
+extern "system" {
+ pub fn LoadIconA(
+ hInstance: HINSTANCE,
+ lpIconName: LPCSTR,
+ ) -> HICON;
+ pub fn LoadIconW(
+ hInstance: HINSTANCE,
+ lpIconName: LPCWSTR,
+ ) -> HICON;
+}
+//10449
+extern "system" {
+ pub fn CreateIcon(
+ hInstance: HINSTANCE,
+ nWidth: c_int,
+ nHeight: c_int,
+ cPlanes: BYTE,
+ cBitsPixel: BYTE,
+ lpbANDbits: *const BYTE,
+ lpbXORbits: *const BYTE,
+ ) -> HICON;
+ pub fn DestroyIcon(
+ hIcon: HICON,
+ ) -> BOOL;
+ pub fn LookupIconIdFromDirectory(
+ presbits: PBYTE,
+ fIcon: BOOL,
+ ) -> c_int;
+ pub fn LookupIconIdFromDirectoryEx(
+ presbits: PBYTE,
+ fIcon: BOOL,
+ cxDesired: c_int,
+ cyDesired: c_int,
+ Flags: UINT,
+ ) -> c_int;
+ pub fn CreateIconFromResource(
+ presbits: PBYTE,
+ dwResSize: DWORD,
+ fIcon: BOOL,
+ dwVer: DWORD,
+ ) -> HICON;
+ pub fn CreateIconFromResourceEx(
+ presbits: PBYTE,
+ dwResSize: DWORD,
+ fIcon: BOOL,
+ dwVer: DWORD,
+ cxDesired: c_int,
+ cyDesired: c_int,
+ Flags: UINT,
+ ) -> HICON;
+}
+//10524
+pub const IMAGE_BITMAP: UINT = 0;
+pub const IMAGE_ICON: UINT = 1;
+pub const IMAGE_CURSOR: UINT = 2;
+pub const IMAGE_ENHMETAFILE: UINT = 3;
+pub const LR_DEFAULTCOLOR: UINT = 0x00000000;
+pub const LR_MONOCHROME: UINT = 0x00000001;
+pub const LR_COLOR: UINT = 0x00000002;
+pub const LR_COPYRETURNORG: UINT = 0x00000004;
+pub const LR_COPYDELETEORG: UINT = 0x00000008;
+pub const LR_LOADFROMFILE: UINT = 0x00000010;
+pub const LR_LOADTRANSPARENT: UINT = 0x00000020;
+pub const LR_DEFAULTSIZE: UINT = 0x00000040;
+pub const LR_VGACOLOR: UINT = 0x00000080;
+pub const LR_LOADMAP3DCOLORS: UINT = 0x00001000;
+pub const LR_CREATEDIBSECTION: UINT = 0x00002000;
+pub const LR_COPYFROMRESOURCE: UINT = 0x00004000;
+pub const LR_SHARED: UINT = 0x00008000;
+extern "system" {
+ pub fn LoadImageA(
+ hInst: HINSTANCE,
+ name: LPCSTR,
+ type_: UINT,
+ cx: c_int,
+ cy: c_int,
+ fuLoad: UINT,
+ ) -> HANDLE;
+ pub fn LoadImageW(
+ hInst: HINSTANCE,
+ name: LPCWSTR,
+ type_: UINT,
+ cx: c_int,
+ cy: c_int,
+ fuLoad: UINT,
+ ) -> HANDLE;
+ pub fn CopyImage(
+ h: HANDLE,
+ type_: UINT,
+ cx: c_int,
+ cy: c_int,
+ flags: UINT,
+ ) -> HANDLE;
+}
+//10592
+extern "system" {
+ pub fn DrawIconEx(
+ hdc: HDC,
+ xLeft: c_int,
+ yTop: c_int,
+ hIcon: HICON,
+ cxWidth: c_int,
+ cyWidth: c_int,
+ istepIfAniCur: UINT,
+ hbrFlickerFreeDraw: HBRUSH,
+ diFlags: UINT,
+ ) -> BOOL;
+ pub fn CreateIconIndirect(
+ piconinfo: PICONINFO,
+ ) -> HICON;
+ pub fn CopyIcon(
+ hIcon: HICON,
+ ) -> HICON;
+ pub fn GetIconInfo(
+ hIcon: HICON,
+ piconinfo: PICONINFO,
+ ) -> BOOL;
+}
+//10781
+pub const IDI_APPLICATION: LPCWSTR = 32512 as LPCWSTR;
+pub const IDI_HAND: LPCWSTR = 32513 as LPCWSTR;
+pub const IDI_QUESTION: LPCWSTR = 32514 as LPCWSTR;
+pub const IDI_EXCLAMATION: LPCWSTR = 32515 as LPCWSTR;
+pub const IDI_ASTERISK: LPCWSTR = 32516 as LPCWSTR;
+pub const IDI_WINLOGO: LPCWSTR = 32517 as LPCWSTR;
+pub const IDI_SHIELD: LPCWSTR = 32518 as LPCWSTR;
+pub const IDI_WARNING: LPCWSTR = IDI_EXCLAMATION;
+pub const IDI_ERROR: LPCWSTR = IDI_HAND;
+pub const IDI_INFORMATION: LPCWSTR = IDI_ASTERISK;
+//10853
+pub const IDOK: c_int = 1;
+pub const IDCANCEL: c_int = 2;
+pub const IDABORT: c_int = 3;
+pub const IDRETRY: c_int = 4;
+pub const IDIGNORE: c_int = 5;
+pub const IDYES: c_int = 6;
+pub const IDNO: c_int = 7;
+pub const IDCLOSE: c_int = 8;
+pub const IDHELP: c_int = 9;
+pub const IDTRYAGAIN: c_int = 10;
+pub const IDCONTINUE: c_int = 11;
+pub const IDTIMEOUT: c_int = 32000;
+pub const ES_LEFT: DWORD = 0x0000;
+pub const ES_CENTER: DWORD = 0x0001;
+pub const ES_RIGHT: DWORD = 0x0002;
+pub const ES_MULTILINE: DWORD = 0x0004;
+pub const ES_UPPERCASE: DWORD = 0x0008;
+pub const ES_LOWERCASE: DWORD = 0x0010;
+pub const ES_PASSWORD: DWORD = 0x0020;
+pub const ES_AUTOVSCROLL: DWORD = 0x0040;
+pub const ES_AUTOHSCROLL: DWORD = 0x0080;
+pub const ES_NOHIDESEL: DWORD = 0x0100;
+pub const ES_OEMCONVERT: DWORD = 0x0400;
+pub const ES_READONLY: DWORD = 0x0800;
+pub const ES_WANTRETURN: DWORD = 0x1000;
+pub const ES_NUMBER: DWORD = 0x2000;
+pub const EN_SETFOCUS: WORD = 0x0100;
+pub const EN_KILLFOCUS: WORD = 0x0200;
+pub const EN_CHANGE: WORD = 0x0300;
+pub const EN_UPDATE: WORD = 0x0400;
+pub const EN_ERRSPACE: WORD = 0x0500;
+pub const EN_MAXTEXT: WORD = 0x0501;
+pub const EN_HSCROLL: WORD = 0x0601;
+pub const EN_VSCROLL: WORD = 0x0602;
+pub const EN_ALIGN_LTR_EC: WORD = 0x0700;
+pub const EN_ALIGN_RTL_EC: WORD = 0x0701;
+pub const EC_LEFTMARGIN: WORD = 0x0001;
+pub const EC_RIGHTMARGIN: WORD = 0x0002;
+pub const EC_USEFONTINFO: WORD = 0xffff;
+pub const EMSIS_COMPOSITIONSTRING: WORD = 0x0001;
+pub const EIMES_GETCOMPSTRATONCE: WORD = 0x0001;
+pub const EIMES_CANCELCOMPSTRINFOCUS: WORD = 0x0002;
+pub const EIMES_COMPLETECOMPSTRKILLFOCUS: WORD = 0x0004;
+pub const EM_GETSEL: WORD = 0x00B0;
+pub const EM_SETSEL: WORD = 0x00B1;
+pub const EM_GETRECT: WORD = 0x00B2;
+pub const EM_SETRECT: WORD = 0x00B3;
+pub const EM_SETRECTNP: WORD = 0x00B4;
+pub const EM_SCROLL: WORD = 0x00B5;
+pub const EM_LINESCROLL: WORD = 0x00B6;
+pub const EM_SCROLLCARET: WORD = 0x00B7;
+pub const EM_GETMODIFY: WORD = 0x00B8;
+pub const EM_SETMODIFY: WORD = 0x00B9;
+pub const EM_GETLINECOUNT: WORD = 0x00BA;
+pub const EM_LINEINDEX: WORD = 0x00BB;
+pub const EM_SETHANDLE: WORD = 0x00BC;
+pub const EM_GETHANDLE: WORD = 0x00BD;
+pub const EM_GETTHUMB: WORD = 0x00BE;
+pub const EM_LINELENGTH: WORD = 0x00C1;
+pub const EM_REPLACESEL: WORD = 0x00C2;
+pub const EM_GETLINE: WORD = 0x00C4;
+pub const EM_LIMITTEXT: WORD = 0x00C5;
+pub const EM_CANUNDO: WORD = 0x00C6;
+pub const EM_UNDO: WORD = 0x00C7;
+pub const EM_FMTLINES: WORD = 0x00C8;
+pub const EM_LINEFROMCHAR: WORD = 0x00C9;
+pub const EM_SETTABSTOPS: WORD = 0x00CB;
+pub const EM_SETPASSWORDCHAR: WORD = 0x00CC;
+pub const EM_EMPTYUNDOBUFFER: WORD = 0x00CD;
+pub const EM_GETFIRSTVISIBLELINE: WORD = 0x00CE;
+pub const EM_SETREADONLY: WORD = 0x00CF;
+pub const EM_SETWORDBREAKPROC: WORD = 0x00D0;
+pub const EM_GETWORDBREAKPROC: WORD = 0x00D1;
+pub const EM_GETPASSWORDCHAR: WORD = 0x00D2;
+pub const EM_SETMARGINS: WORD = 0x00D3;
+pub const EM_GETMARGINS: WORD = 0x00D4;
+pub const EM_SETLIMITTEXT: WORD = EM_LIMITTEXT;
+pub const EM_GETLIMITTEXT: WORD = 0x00D5;
+pub const EM_POSFROMCHAR: WORD = 0x00D6;
+pub const EM_CHARFROMPOS: WORD = 0x00D7;
+pub const EM_SETIMESTATUS: WORD = 0x00D8;
+pub const EM_GETIMESTATUS: WORD = 0x00D9;
+pub const WB_LEFT: WORD = 0;
+pub const WB_RIGHT: WORD = 1;
+pub const WB_ISDELIMITER: WORD = 2;
+pub const BN_CLICKED: WORD = 0;
+pub const BN_PAINT: WORD = 1;
+pub const BN_HILITE: WORD = 2;
+pub const BN_UNHILITE: WORD = 3;
+pub const BN_DISABLE: WORD = 4;
+pub const BN_DOUBLECLICKED: WORD = 5;
+pub const BN_PUSHED: WORD = BN_HILITE;
+pub const BN_UNPUSHED: WORD = BN_UNHILITE;
+pub const BN_DBLCLK: WORD = BN_DOUBLECLICKED;
+pub const BN_SETFOCUS: WORD = 6;
+pub const BN_KILLFOCUS: WORD = 7;
+pub const BS_PUSHBUTTON: DWORD = 0x00000000;
+pub const BS_DEFPUSHBUTTON: DWORD = 0x00000001;
+pub const BS_CHECKBOX: DWORD = 0x00000002;
+pub const BS_AUTOCHECKBOX: DWORD = 0x00000003;
+pub const BS_RADIOBUTTON: DWORD = 0x00000004;
+pub const BS_3STATE: DWORD = 0x00000005;
+pub const BS_AUTO3STATE: DWORD = 0x00000006;
+pub const BS_GROUPBOX: DWORD = 0x00000007;
+pub const BS_USERBUTTON: DWORD = 0x00000008;
+pub const BS_AUTORADIOBUTTON: DWORD = 0x00000009;
+pub const BS_PUSHBOX: DWORD = 0x0000000A;
+pub const BS_OWNERDRAW: DWORD = 0x0000000B;
+pub const BS_TYPEMASK: DWORD = 0x0000000F;
+pub const BS_LEFTTEXT: DWORD = 0x00000020;
+pub const BS_TEXT: DWORD = 0x00000000;
+pub const BS_ICON: DWORD = 0x00000040;
+pub const BS_BITMAP: DWORD = 0x00000080;
+pub const BS_LEFT: DWORD = 0x00000100;
+pub const BS_RIGHT: DWORD = 0x00000200;
+pub const BS_CENTER: DWORD = 0x00000300;
+pub const BS_TOP: DWORD = 0x00000400;
+pub const BS_BOTTOM: DWORD = 0x00000800;
+pub const BS_VCENTER: DWORD = 0x00000C00;
+pub const BS_PUSHLIKE: DWORD = 0x00001000;
+pub const BS_MULTILINE: DWORD = 0x00002000;
+pub const BS_NOTIFY: DWORD = 0x00004000;
+pub const BS_FLAT: DWORD = 0x00008000;
+pub const BS_RIGHTBUTTON: DWORD = BS_LEFTTEXT;
+pub const BM_GETCHECK: UINT = 0x00F0;
+pub const BM_SETCHECK: UINT = 0x00F1;
+pub const BM_GETSTATE: UINT = 0x00F2;
+pub const BM_SETSTATE: UINT = 0x00F3;
+pub const BM_SETSTYLE: UINT = 0x00F4;
+pub const BM_CLICK: UINT = 0x00F5;
+pub const BM_GETIMAGE: UINT = 0x00F6;
+pub const BM_SETIMAGE: UINT = 0x00F7;
+pub const BM_SETDONTCLICK: UINT = 0x00F8;
+pub const BST_UNCHECKED: WPARAM = 0x0000;
+pub const BST_CHECKED: WPARAM = 0x0001;
+pub const BST_INDETERMINATE: WPARAM = 0x0002;
+pub const BST_PUSHED: LRESULT = 0x0004;
+pub const BST_FOCUS: LRESULT = 0x0008;
+pub const SS_LEFT: DWORD = 0x00000000;
+pub const SS_CENTER: DWORD = 0x00000001;
+pub const SS_RIGHT: DWORD = 0x00000002;
+pub const SS_ICON: DWORD = 0x00000003;
+pub const SS_BLACKRECT: DWORD = 0x00000004;
+pub const SS_GRAYRECT: DWORD = 0x00000005;
+pub const SS_WHITERECT: DWORD = 0x00000006;
+pub const SS_BLACKFRAME: DWORD = 0x00000007;
+pub const SS_GRAYFRAME: DWORD = 0x00000008;
+pub const SS_WHITEFRAME: DWORD = 0x00000009;
+pub const SS_USERITEM: DWORD = 0x0000000A;
+pub const SS_SIMPLE: DWORD = 0x0000000B;
+pub const SS_LEFTNOWORDWRAP: DWORD = 0x0000000C;
+pub const SS_OWNERDRAW: DWORD = 0x0000000D;
+pub const SS_BITMAP: DWORD = 0x0000000E;
+pub const SS_ENHMETAFILE: DWORD = 0x0000000F;
+pub const SS_ETCHEDHORZ: DWORD = 0x00000010;
+pub const SS_ETCHEDVERT: DWORD = 0x00000011;
+pub const SS_ETCHEDFRAME: DWORD = 0x00000012;
+pub const SS_TYPEMASK: DWORD = 0x0000001F;
+pub const SS_REALSIZECONTROL: DWORD = 0x00000040;
+pub const SS_NOPREFIX: DWORD = 0x00000080;
+pub const SS_NOTIFY: DWORD = 0x00000100;
+pub const SS_CENTERIMAGE: DWORD = 0x00000200;
+pub const SS_RIGHTJUST: DWORD = 0x00000400;
+pub const SS_REALSIZEIMAGE: DWORD = 0x00000800;
+pub const SS_SUNKEN: DWORD = 0x00001000;
+pub const SS_EDITCONTROL: DWORD = 0x00002000;
+pub const SS_ENDELLIPSIS: DWORD = 0x00004000;
+pub const SS_PATHELLIPSIS: DWORD = 0x00008000;
+pub const SS_WORDELLIPSIS: DWORD = 0x0000C000;
+pub const SS_ELLIPSISMASK: DWORD = 0x0000C000;
+pub const STM_SETICON: UINT = 0x0170;
+pub const STM_GETICON: UINT = 0x0171;
+pub const STM_SETIMAGE: UINT = 0x0172;
+pub const STM_GETIMAGE: UINT = 0x0173;
+pub const STN_CLICKED: WORD = 0;
+pub const STN_DBLCLK: WORD = 1;
+pub const STN_ENABLE: WORD = 2;
+pub const STN_DISABLE: WORD = 3;
+pub const STM_MSGMAX: WORD = 0x0174;
+//11194
+extern "system" {
+ pub fn IsDialogMessageA(
+ hDlg: HWND,
+ lpMsg: LPMSG,
+ ) -> BOOL;
+ pub fn IsDialogMessageW(
+ hDlg: HWND,
+ lpMsg: LPMSG,
+ ) -> BOOL;
+ pub fn MapDialogRect(
+ hDlg: HWND,
+ lpRect: LPRECT,
+ ) -> BOOL;
+ pub fn DlgDirListA(
+ hDlg: HWND,
+ lpPathSpec: LPSTR,
+ nIDListBox: c_int,
+ nIDStaticPath: c_int,
+ uFileType: UINT,
+ ) -> c_int;
+ pub fn DlgDirListW(
+ hDlg: HWND,
+ lpPathSpec: LPWSTR,
+ nIDListBox: c_int,
+ nIDStaticPath: c_int,
+ uFileType: UINT,
+ ) -> c_int;
+}
+//11265
+extern "system" {
+ pub fn DlgDirSelectExA(
+ hwndDlg: HWND,
+ lpString: LPSTR,
+ chCount: c_int,
+ idListBox: c_int,
+ ) -> BOOL;
+ pub fn DlgDirSelectExW(
+ hwndDlg: HWND,
+ lpString: LPWSTR,
+ chCount: c_int,
+ idListBox: c_int,
+ ) -> BOOL;
+ pub fn DlgDirListComboBoxA(
+ hDlg: HWND,
+ lpPathSpec: LPSTR,
+ nIDComboBox: c_int,
+ nIDStaticPath: c_int,
+ uFiletype: UINT,
+ ) -> c_int;
+ pub fn DlgDirListComboBoxW(
+ hDlg: HWND,
+ lpPathSpec: LPWSTR,
+ nIDComboBox: c_int,
+ nIDStaticPath: c_int,
+ uFiletype: UINT,
+ ) -> c_int;
+ pub fn DlgDirSelectComboBoxExA(
+ hwndDlg: HWND,
+ lpString: LPSTR,
+ cchOut: c_int,
+ idComboBox: c_int,
+ ) -> BOOL;
+ pub fn DlgDirSelectComboBoxExW(
+ hwndDlg: HWND,
+ lpString: LPWSTR,
+ cchOut: c_int,
+ idComboBox: c_int,
+ ) -> BOOL;
+}
+pub const DS_ABSALIGN: DWORD = 0x01;
+pub const DS_SYSMODAL: DWORD = 0x02;
+pub const DS_LOCALEDIT: DWORD = 0x20;
+pub const DS_SETFONT: DWORD = 0x40;
+pub const DS_MODALFRAME: DWORD = 0x80;
+pub const DS_NOIDLEMSG: DWORD = 0x100;
+pub const DS_SETFOREGROUND: DWORD = 0x200;
+pub const DS_3DLOOK: DWORD = 0x0004;
+pub const DS_FIXEDSYS: DWORD = 0x0008;
+pub const DS_NOFAILCREATE: DWORD = 0x0010;
+pub const DS_CONTROL: DWORD = 0x0400;
+pub const DS_CENTER: DWORD = 0x0800;
+pub const DS_CENTERMOUSE: DWORD = 0x1000;
+pub const DS_CONTEXTHELP: DWORD = 0x2000;
+pub const DS_SHELLFONT: DWORD = DS_SETFONT | DS_FIXEDSYS;
+pub const DS_USEPIXELS: DWORD = 0x8000;
+pub const DM_GETDEFID: UINT = WM_USER + 0;
+pub const DM_SETDEFID: UINT = WM_USER + 1;
+pub const DM_REPOSITION: UINT = WM_USER + 2;
+pub const DC_HASDEFID: WORD = 0x534B;
+pub const DLGC_WANTARROWS: LRESULT = 0x0001;
+pub const DLGC_WANTTAB: LRESULT = 0x0002;
+pub const DLGC_WANTALLKEYS: LRESULT = 0x0004;
+pub const DLGC_WANTMESSAGE: LRESULT = 0x0004;
+pub const DLGC_HASSETSEL: LRESULT = 0x0008;
+pub const DLGC_DEFPUSHBUTTON: LRESULT = 0x0010;
+pub const DLGC_UNDEFPUSHBUTTON: LRESULT = 0x0020;
+pub const DLGC_RADIOBUTTON: LRESULT = 0x0040;
+pub const DLGC_WANTCHARS: LRESULT = 0x0080;
+pub const DLGC_STATIC: LRESULT = 0x0100;
+pub const DLGC_BUTTON: LRESULT = 0x2000;
+pub const LB_OKAY: LRESULT = 0;
+pub const LB_ERR: LRESULT = -1;
+pub const LB_ERRSPACE: LRESULT = -2;
+pub const LBN_ERRSPACE: WORD = -2i16 as u16;
+pub const LBN_SELCHANGE: WORD = 1;
+pub const LBN_DBLCLK: WORD = 2;
+pub const LBN_SELCANCEL: WORD = 3;
+pub const LBN_SETFOCUS: WORD = 4;
+pub const LBN_KILLFOCUS: WORD = 5;
+pub const LB_ADDSTRING: UINT = 0x0180;
+pub const LB_INSERTSTRING: UINT = 0x0181;
+pub const LB_DELETESTRING: UINT = 0x0182;
+pub const LB_SELITEMRANGEEX: UINT = 0x0183;
+pub const LB_RESETCONTENT: UINT = 0x0184;
+pub const LB_SETSEL: UINT = 0x0185;
+pub const LB_SETCURSEL: UINT = 0x0186;
+pub const LB_GETSEL: UINT = 0x0187;
+pub const LB_GETCURSEL: UINT = 0x0188;
+pub const LB_GETTEXT: UINT = 0x0189;
+pub const LB_GETTEXTLEN: UINT = 0x018A;
+pub const LB_GETCOUNT: UINT = 0x018B;
+pub const LB_SELECTSTRING: UINT = 0x018C;
+pub const LB_DIR: UINT = 0x018D;
+pub const LB_GETTOPINDEX: UINT = 0x018E;
+pub const LB_FINDSTRING: UINT = 0x018F;
+pub const LB_GETSELCOUNT: UINT = 0x0190;
+pub const LB_GETSELITEMS: UINT = 0x0191;
+pub const LB_SETTABSTOPS: UINT = 0x0192;
+pub const LB_GETHORIZONTALEXTENT: UINT = 0x0193;
+pub const LB_SETHORIZONTALEXTENT: UINT = 0x0194;
+pub const LB_SETCOLUMNWIDTH: UINT = 0x0195;
+pub const LB_ADDFILE: UINT = 0x0196;
+pub const LB_SETTOPINDEX: UINT = 0x0197;
+pub const LB_GETITEMRECT: UINT = 0x0198;
+pub const LB_GETITEMDATA: UINT = 0x0199;
+pub const LB_SETITEMDATA: UINT = 0x019A;
+pub const LB_SELITEMRANGE: UINT = 0x019B;
+pub const LB_SETANCHORINDEX: UINT = 0x019C;
+pub const LB_GETANCHORINDEX: UINT = 0x019D;
+pub const LB_SETCARETINDEX: UINT = 0x019E;
+pub const LB_GETCARETINDEX: UINT = 0x019F;
+pub const LB_SETITEMHEIGHT: UINT = 0x01A0;
+pub const LB_GETITEMHEIGHT: UINT = 0x01A1;
+pub const LB_FINDSTRINGEXACT: UINT = 0x01A2;
+pub const LB_SETLOCALE: UINT = 0x01A5;
+pub const LB_GETLOCALE: UINT = 0x01A6;
+pub const LB_SETCOUNT: UINT = 0x01A7;
+pub const LB_INITSTORAGE: UINT = 0x01A8;
+pub const LB_ITEMFROMPOINT: UINT = 0x01A9;
+pub const LB_MULTIPLEADDSTRING: UINT = 0x01B1;
+pub const LB_GETLISTBOXINFO: UINT = 0x01B2;
+pub const LB_MSGMAX: UINT = 0x01B3;
+pub const LBS_NOTIFY: DWORD = 0x0001;
+pub const LBS_SORT: DWORD = 0x0002;
+pub const LBS_NOREDRAW: DWORD = 0x0004;
+pub const LBS_MULTIPLESEL: DWORD = 0x0008;
+pub const LBS_OWNERDRAWFIXED: DWORD = 0x0010;
+pub const LBS_OWNERDRAWVARIABLE: DWORD = 0x0020;
+pub const LBS_HASSTRINGS: DWORD = 0x0040;
+pub const LBS_USETABSTOPS: DWORD = 0x0080;
+pub const LBS_NOINTEGRALHEIGHT: DWORD = 0x0100;
+pub const LBS_MULTICOLUMN: DWORD = 0x0200;
+pub const LBS_WANTKEYBOARDINPUT: DWORD = 0x0400;
+pub const LBS_EXTENDEDSEL: DWORD = 0x0800;
+pub const LBS_DISABLENOSCROLL: DWORD = 0x1000;
+pub const LBS_NODATA: DWORD = 0x2000;
+pub const LBS_NOSEL: DWORD = 0x4000;
+pub const LBS_COMBOBOX: DWORD = 0x8000;
+pub const LBS_STANDARD: DWORD = LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER;
+pub const CB_OKAY: LRESULT = 0;
+pub const CB_ERR: LRESULT = -1;
+pub const CB_ERRSPACE: LRESULT = -2;
+pub const CBN_ERRSPACE: WORD = -1i16 as u16;
+pub const CBN_SELCHANGE: WORD = 1;
+pub const CBN_DBLCLK: WORD = 2;
+pub const CBN_SETFOCUS: WORD = 3;
+pub const CBN_KILLFOCUS: WORD = 4;
+pub const CBN_EDITCHANGE: WORD = 5;
+pub const CBN_EDITUPDATE: WORD = 6;
+pub const CBN_DROPDOWN: WORD = 7;
+pub const CBN_CLOSEUP: WORD = 8;
+pub const CBN_SELENDOK: WORD = 9;
+pub const CBN_SELENDCANCEL: WORD = 10;
+pub const CBS_SIMPLE: DWORD = 0x0001;
+pub const CBS_DROPDOWN: DWORD = 0x0002;
+pub const CBS_DROPDOWNLIST: DWORD = 0x0003;
+pub const CBS_OWNERDRAWFIXED: DWORD = 0x0010;
+pub const CBS_OWNERDRAWVARIABLE: DWORD = 0x0020;
+pub const CBS_AUTOHSCROLL: DWORD = 0x0040;
+pub const CBS_OEMCONVERT: DWORD = 0x0080;
+pub const CBS_SORT: DWORD = 0x0100;
+pub const CBS_HASSTRINGS: DWORD = 0x0200;
+pub const CBS_NOINTEGRALHEIGHT: DWORD = 0x0400;
+pub const CBS_DISABLENOSCROLL: DWORD = 0x0800;
+pub const CBS_UPPERCASE: DWORD = 0x2000;
+pub const CBS_LOWERCASE: DWORD = 0x4000;
+//11571
+pub const CB_GETEDITSEL: UINT = 0x0140;
+pub const CB_LIMITTEXT: UINT = 0x0141;
+pub const CB_SETEDITSEL: UINT = 0x0142;
+pub const CB_ADDSTRING: UINT = 0x0143;
+pub const CB_DELETESTRING: UINT = 0x0144;
+pub const CB_DIR: UINT = 0x0145;
+pub const CB_GETCOUNT: UINT = 0x0146;
+pub const CB_GETCURSEL: UINT = 0x0147;
+pub const CB_GETLBTEXT: UINT = 0x0148;
+pub const CB_GETLBTEXTLEN: UINT = 0x0149;
+pub const CB_INSERTSTRING: UINT = 0x014A;
+pub const CB_RESETCONTENT: UINT = 0x014B;
+pub const CB_FINDSTRING: UINT = 0x014C;
+pub const CB_SELECTSTRING: UINT = 0x014D;
+pub const CB_SETCURSEL: UINT = 0x014E;
+pub const CB_SHOWDROPDOWN: UINT = 0x014F;
+pub const CB_GETITEMDATA: UINT = 0x0150;
+pub const CB_SETITEMDATA: UINT = 0x0151;
+pub const CB_GETDROPPEDCONTROLRECT: UINT = 0x0152;
+pub const CB_SETITEMHEIGHT: UINT = 0x0153;
+pub const CB_GETITEMHEIGHT: UINT = 0x0154;
+pub const CB_SETEXTENDEDUI: UINT = 0x0155;
+pub const CB_GETEXTENDEDUI: UINT = 0x0156;
+pub const CB_GETDROPPEDSTATE: UINT = 0x0157;
+pub const CB_FINDSTRINGEXACT: UINT = 0x0158;
+pub const CB_SETLOCALE: UINT = 0x0159;
+pub const CB_GETLOCALE: UINT = 0x015A;
+pub const CB_GETTOPINDEX: UINT = 0x015b;
+pub const CB_SETTOPINDEX: UINT = 0x015c;
+pub const CB_GETHORIZONTALEXTENT: UINT = 0x015d;
+pub const CB_SETHORIZONTALEXTENT: UINT = 0x015e;
+pub const CB_GETDROPPEDWIDTH: UINT = 0x015f;
+pub const CB_SETDROPPEDWIDTH: UINT = 0x0160;
+pub const CB_INITSTORAGE: UINT = 0x0161;
+pub const CB_MULTIPLEADDSTRING: UINT = 0x0163;
+pub const CB_GETCOMBOBOXINFO: UINT = 0x0164;
+pub const CB_MSGMAX: UINT = 0x0165;
+pub const SBS_HORZ: DWORD = 0x0000;
+pub const SBS_VERT: DWORD = 0x0001;
+pub const SBS_TOPALIGN: DWORD = 0x0002;
+pub const SBS_LEFTALIGN: DWORD = 0x0002;
+pub const SBS_BOTTOMALIGN: DWORD = 0x0004;
+pub const SBS_RIGHTALIGN: DWORD = 0x0004;
+pub const SBS_SIZEBOXTOPLEFTALIGN: DWORD = 0x0002;
+pub const SBS_SIZEBOXBOTTOMRIGHTALIGN: DWORD = 0x0004;
+pub const SBS_SIZEBOX: DWORD = 0x0008;
+pub const SBS_SIZEGRIP: DWORD = 0x0010;
+pub const SBM_SETPOS: UINT = 0x00E0;
+pub const SBM_GETPOS: UINT = 0x00E1;
+pub const SBM_SETRANGE: UINT = 0x00E2;
+pub const SBM_SETRANGEREDRAW: UINT = 0x00E6;
+pub const SBM_GETRANGE: UINT = 0x00E3;
+pub const SBM_ENABLE_ARROWS: UINT = 0x00E4;
+pub const SBM_SETSCROLLINFO: UINT = 0x00E9;
+pub const SBM_GETSCROLLINFO: UINT = 0x00EA;
+pub const SBM_GETSCROLLBARINFO: UINT = 0x00EB;
+pub const SIF_RANGE: UINT = 0x0001;
+pub const SIF_PAGE: UINT = 0x0002;
+pub const SIF_POS: UINT = 0x0004;
+pub const SIF_DISABLENOSCROLL: UINT = 0x0008;
+pub const SIF_TRACKPOS: UINT = 0x0010;
+pub const SIF_ALL: UINT = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS;
+STRUCT!{struct SCROLLINFO {
+ cbSize: UINT,
+ fMask: UINT,
+ nMin: c_int,
+ nMax: c_int,
+ nPage: UINT,
+ nPos: c_int,
+ nTrackPos: c_int,
+}}
+pub type LPSCROLLINFO = *mut SCROLLINFO;
+pub type LPCSCROLLINFO = *const SCROLLINFO;
+extern "system" {
+ pub fn SetScrollInfo(
+ hwnd: HWND,
+ nBar: c_int,
+ lpsi: *const SCROLLINFO,
+ redraw: BOOL,
+ ) -> c_int;
+ pub fn GetScrollInfo(
+ hwnd: HWND,
+ nBar: c_int,
+ lpsi: *mut SCROLLINFO,
+ ) -> BOOL;
+}
+pub const MDITILE_VERTICAL: UINT = 0x0000;
+pub const MDITILE_HORIZONTAL: UINT = 0x0001;
+pub const MDITILE_SKIPDISABLED: UINT = 0x0002;
+pub const MDITILE_ZORDER: UINT = 0x0004;
+//11776
+extern "system" {
+ pub fn DefFrameProcA(
+ hwnd: HWND,
+ hwndMDIClient: HWND,
+ uMsg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LRESULT;
+ pub fn DefFrameProcW(
+ hwnd: HWND,
+ hwndMDIClient: HWND,
+ uMsg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LRESULT;
+ pub fn DefMDIChildProcA(
+ hwnd: HWND,
+ uMsg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LRESULT;
+ pub fn DefMDIChildProcW(
+ hwnd: HWND,
+ uMsg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> LRESULT;
+ pub fn ArrangeIconicWindows(
+ hWnd: HWND,
+ ) -> UINT;
+ pub fn CreateMDIWindowA(
+ lpClassName: LPCSTR,
+ lpWindowName: LPCSTR,
+ dwStyle: DWORD,
+ X: c_int,
+ Y: c_int,
+ nWidth: c_int,
+ nHeight: c_int,
+ hWndParent: HWND,
+ hInstance: HINSTANCE,
+ lParam: LPARAM,
+ ) -> HWND;
+ pub fn CreateMDIWindowW(
+ lpClassName: LPCWSTR,
+ lpWindowName: LPCWSTR,
+ dwStyle: DWORD,
+ X: c_int,
+ Y: c_int,
+ nWidth: c_int,
+ nHeight: c_int,
+ hWndParent: HWND,
+ hInstance: HINSTANCE,
+ lParam: LPARAM,
+ ) -> HWND;
+ pub fn CascadeWindows(
+ hwndParent: HWND,
+ wHow: UINT,
+ lpRect: *const RECT,
+ cKids: UINT,
+ lpKids: *const HWND,
+ ) -> WORD;
+}
+//12016
+extern "system" {
+ pub fn WinHelpA(
+ hWndMain: HWND,
+ lpszHelp: LPCSTR,
+ uCommand: UINT,
+ dwData: ULONG_PTR,
+ ) -> BOOL;
+ pub fn WinHelpW(
+ hWndMain: HWND,
+ lpszHelp: LPCWSTR,
+ uCommand: UINT,
+ dwData: ULONG_PTR,
+ ) -> BOOL;
+}
+//12083
+pub const SPI_GETBEEP: UINT = 0x0001;
+pub const SPI_SETBEEP: UINT = 0x0002;
+pub const SPI_GETMOUSE: UINT = 0x0003;
+pub const SPI_SETMOUSE: UINT = 0x0004;
+pub const SPI_GETBORDER: UINT = 0x0005;
+pub const SPI_SETBORDER: UINT = 0x0006;
+pub const SPI_GETKEYBOARDSPEED: UINT = 0x000A;
+pub const SPI_SETKEYBOARDSPEED: UINT = 0x000B;
+pub const SPI_LANGDRIVER: UINT = 0x000C;
+pub const SPI_ICONHORIZONTALSPACING: UINT = 0x000D;
+pub const SPI_GETSCREENSAVETIMEOUT: UINT = 0x000E;
+pub const SPI_SETSCREENSAVETIMEOUT: UINT = 0x000F;
+pub const SPI_GETSCREENSAVEACTIVE: UINT = 0x0010;
+pub const SPI_SETSCREENSAVEACTIVE: UINT = 0x0011;
+pub const SPI_GETGRIDGRANULARITY: UINT = 0x0012;
+pub const SPI_SETGRIDGRANULARITY: UINT = 0x0013;
+pub const SPI_SETDESKWALLPAPER: UINT = 0x0014;
+pub const SPI_SETDESKPATTERN: UINT = 0x0015;
+pub const SPI_GETKEYBOARDDELAY: UINT = 0x0016;
+pub const SPI_SETKEYBOARDDELAY: UINT = 0x0017;
+pub const SPI_ICONVERTICALSPACING: UINT = 0x0018;
+pub const SPI_GETICONTITLEWRAP: UINT = 0x0019;
+pub const SPI_SETICONTITLEWRAP: UINT = 0x001A;
+pub const SPI_GETMENUDROPALIGNMENT: UINT = 0x001B;
+pub const SPI_SETMENUDROPALIGNMENT: UINT = 0x001C;
+pub const SPI_SETDOUBLECLKWIDTH: UINT = 0x001D;
+pub const SPI_SETDOUBLECLKHEIGHT: UINT = 0x001E;
+pub const SPI_GETICONTITLELOGFONT: UINT = 0x001F;
+pub const SPI_SETDOUBLECLICKTIME: UINT = 0x0020;
+pub const SPI_SETMOUSEBUTTONSWAP: UINT = 0x0021;
+pub const SPI_SETICONTITLELOGFONT: UINT = 0x0022;
+pub const SPI_GETFASTTASKSWITCH: UINT = 0x0023;
+pub const SPI_SETFASTTASKSWITCH: UINT = 0x0024;
+pub const SPI_SETDRAGFULLWINDOWS: UINT = 0x0025;
+pub const SPI_GETDRAGFULLWINDOWS: UINT = 0x0026;
+pub const SPI_GETNONCLIENTMETRICS: UINT = 0x0029;
+pub const SPI_SETNONCLIENTMETRICS: UINT = 0x002A;
+pub const SPI_GETMINIMIZEDMETRICS: UINT = 0x002B;
+pub const SPI_SETMINIMIZEDMETRICS: UINT = 0x002C;
+pub const SPI_GETICONMETRICS: UINT = 0x002D;
+pub const SPI_SETICONMETRICS: UINT = 0x002E;
+pub const SPI_SETWORKAREA: UINT = 0x002F;
+pub const SPI_GETWORKAREA: UINT = 0x0030;
+pub const SPI_SETPENWINDOWS: UINT = 0x0031;
+pub const SPI_GETHIGHCONTRAST: UINT = 0x0042;
+pub const SPI_SETHIGHCONTRAST: UINT = 0x0043;
+pub const SPI_GETKEYBOARDPREF: UINT = 0x0044;
+pub const SPI_SETKEYBOARDPREF: UINT = 0x0045;
+pub const SPI_GETSCREENREADER: UINT = 0x0046;
+pub const SPI_SETSCREENREADER: UINT = 0x0047;
+pub const SPI_GETANIMATION: UINT = 0x0048;
+pub const SPI_SETANIMATION: UINT = 0x0049;
+pub const SPI_GETFONTSMOOTHING: UINT = 0x004A;
+pub const SPI_SETFONTSMOOTHING: UINT = 0x004B;
+pub const SPI_SETDRAGWIDTH: UINT = 0x004C;
+pub const SPI_SETDRAGHEIGHT: UINT = 0x004D;
+pub const SPI_SETHANDHELD: UINT = 0x004E;
+pub const SPI_GETLOWPOWERTIMEOUT: UINT = 0x004F;
+pub const SPI_GETPOWEROFFTIMEOUT: UINT = 0x0050;
+pub const SPI_SETLOWPOWERTIMEOUT: UINT = 0x0051;
+pub const SPI_SETPOWEROFFTIMEOUT: UINT = 0x0052;
+pub const SPI_GETLOWPOWERACTIVE: UINT = 0x0053;
+pub const SPI_GETPOWEROFFACTIVE: UINT = 0x0054;
+pub const SPI_SETLOWPOWERACTIVE: UINT = 0x0055;
+pub const SPI_SETPOWEROFFACTIVE: UINT = 0x0056;
+pub const SPI_SETCURSORS: UINT = 0x0057;
+pub const SPI_SETICONS: UINT = 0x0058;
+pub const SPI_GETDEFAULTINPUTLANG: UINT = 0x0059;
+pub const SPI_SETDEFAULTINPUTLANG: UINT = 0x005A;
+pub const SPI_SETLANGTOGGLE: UINT = 0x005B;
+pub const SPI_GETWINDOWSEXTENSION: UINT = 0x005C;
+pub const SPI_SETMOUSETRAILS: UINT = 0x005D;
+pub const SPI_GETMOUSETRAILS: UINT = 0x005E;
+pub const SPI_SETSCREENSAVERRUNNING: UINT = 0x0061;
+pub const SPI_SCREENSAVERRUNNING: UINT = SPI_SETSCREENSAVERRUNNING;
+pub const SPI_GETFILTERKEYS: UINT = 0x0032;
+pub const SPI_SETFILTERKEYS: UINT = 0x0033;
+pub const SPI_GETTOGGLEKEYS: UINT = 0x0034;
+pub const SPI_SETTOGGLEKEYS: UINT = 0x0035;
+pub const SPI_GETMOUSEKEYS: UINT = 0x0036;
+pub const SPI_SETMOUSEKEYS: UINT = 0x0037;
+pub const SPI_GETSHOWSOUNDS: UINT = 0x0038;
+pub const SPI_SETSHOWSOUNDS: UINT = 0x0039;
+pub const SPI_GETSTICKYKEYS: UINT = 0x003A;
+pub const SPI_SETSTICKYKEYS: UINT = 0x003B;
+pub const SPI_GETACCESSTIMEOUT: UINT = 0x003C;
+pub const SPI_SETACCESSTIMEOUT: UINT = 0x003D;
+pub const SPI_GETSERIALKEYS: UINT = 0x003E;
+pub const SPI_SETSERIALKEYS: UINT = 0x003F;
+pub const SPI_GETSOUNDSENTRY: UINT = 0x0040;
+pub const SPI_SETSOUNDSENTRY: UINT = 0x0041;
+pub const SPI_GETSNAPTODEFBUTTON: UINT = 0x005F;
+pub const SPI_SETSNAPTODEFBUTTON: UINT = 0x0060;
+pub const SPI_GETMOUSEHOVERWIDTH: UINT = 0x0062;
+pub const SPI_SETMOUSEHOVERWIDTH: UINT = 0x0063;
+pub const SPI_GETMOUSEHOVERHEIGHT: UINT = 0x0064;
+pub const SPI_SETMOUSEHOVERHEIGHT: UINT = 0x0065;
+pub const SPI_GETMOUSEHOVERTIME: UINT = 0x0066;
+pub const SPI_SETMOUSEHOVERTIME: UINT = 0x0067;
+pub const SPI_GETWHEELSCROLLLINES: UINT = 0x0068;
+pub const SPI_SETWHEELSCROLLLINES: UINT = 0x0069;
+pub const SPI_GETMENUSHOWDELAY: UINT = 0x006A;
+pub const SPI_SETMENUSHOWDELAY: UINT = 0x006B;
+pub const SPI_GETWHEELSCROLLCHARS: UINT = 0x006C;
+pub const SPI_SETWHEELSCROLLCHARS: UINT = 0x006D;
+pub const SPI_GETSHOWIMEUI: UINT = 0x006E;
+pub const SPI_SETSHOWIMEUI: UINT = 0x006F;
+pub const SPI_GETMOUSESPEED: UINT = 0x0070;
+pub const SPI_SETMOUSESPEED: UINT = 0x0071;
+pub const SPI_GETSCREENSAVERRUNNING: UINT = 0x0072;
+pub const SPI_GETDESKWALLPAPER: UINT = 0x0073;
+pub const SPI_GETAUDIODESCRIPTION: UINT = 0x0074;
+pub const SPI_SETAUDIODESCRIPTION: UINT = 0x0075;
+pub const SPI_GETSCREENSAVESECURE: UINT = 0x0076;
+pub const SPI_SETSCREENSAVESECURE: UINT = 0x0077;
+pub const SPI_GETHUNGAPPTIMEOUT: UINT = 0x0078;
+pub const SPI_SETHUNGAPPTIMEOUT: UINT = 0x0079;
+pub const SPI_GETWAITTOKILLTIMEOUT: UINT = 0x007A;
+pub const SPI_SETWAITTOKILLTIMEOUT: UINT = 0x007B;
+pub const SPI_GETWAITTOKILLSERVICETIMEOUT: UINT = 0x007C;
+pub const SPI_SETWAITTOKILLSERVICETIMEOUT: UINT = 0x007D;
+pub const SPI_GETMOUSEDOCKTHRESHOLD: UINT = 0x007E;
+pub const SPI_SETMOUSEDOCKTHRESHOLD: UINT = 0x007F;
+pub const SPI_GETPENDOCKTHRESHOLD: UINT = 0x0080;
+pub const SPI_SETPENDOCKTHRESHOLD: UINT = 0x0081;
+pub const SPI_GETWINARRANGING: UINT = 0x0082;
+pub const SPI_SETWINARRANGING: UINT = 0x0083;
+pub const SPI_GETMOUSEDRAGOUTTHRESHOLD: UINT = 0x0084;
+pub const SPI_SETMOUSEDRAGOUTTHRESHOLD: UINT = 0x0085;
+pub const SPI_GETPENDRAGOUTTHRESHOLD: UINT = 0x0086;
+pub const SPI_SETPENDRAGOUTTHRESHOLD: UINT = 0x0087;
+pub const SPI_GETMOUSESIDEMOVETHRESHOLD: UINT = 0x0088;
+pub const SPI_SETMOUSESIDEMOVETHRESHOLD: UINT = 0x0089;
+pub const SPI_GETPENSIDEMOVETHRESHOLD: UINT = 0x008A;
+pub const SPI_SETPENSIDEMOVETHRESHOLD: UINT = 0x008B;
+pub const SPI_GETDRAGFROMMAXIMIZE: UINT = 0x008C;
+pub const SPI_SETDRAGFROMMAXIMIZE: UINT = 0x008D;
+pub const SPI_GETSNAPSIZING: UINT = 0x008E;
+pub const SPI_SETSNAPSIZING: UINT = 0x008F;
+pub const SPI_GETDOCKMOVING: UINT = 0x0090;
+pub const SPI_SETDOCKMOVING: UINT = 0x0091;
+pub const SPI_GETACTIVEWINDOWTRACKING: UINT = 0x1000;
+pub const SPI_SETACTIVEWINDOWTRACKING: UINT = 0x1001;
+pub const SPI_GETMENUANIMATION: UINT = 0x1002;
+pub const SPI_SETMENUANIMATION: UINT = 0x1003;
+pub const SPI_GETCOMBOBOXANIMATION: UINT = 0x1004;
+pub const SPI_SETCOMBOBOXANIMATION: UINT = 0x1005;
+pub const SPI_GETLISTBOXSMOOTHSCROLLING: UINT = 0x1006;
+pub const SPI_SETLISTBOXSMOOTHSCROLLING: UINT = 0x1007;
+pub const SPI_GETGRADIENTCAPTIONS: UINT = 0x1008;
+pub const SPI_SETGRADIENTCAPTIONS: UINT = 0x1009;
+pub const SPI_GETKEYBOARDCUES: UINT = 0x100A;
+pub const SPI_SETKEYBOARDCUES: UINT = 0x100B;
+pub const SPI_GETMENUUNDERLINES: UINT = SPI_GETKEYBOARDCUES;
+pub const SPI_SETMENUUNDERLINES: UINT = SPI_SETKEYBOARDCUES;
+pub const SPI_GETACTIVEWNDTRKZORDER: UINT = 0x100C;
+pub const SPI_SETACTIVEWNDTRKZORDER: UINT = 0x100D;
+pub const SPI_GETHOTTRACKING: UINT = 0x100E;
+pub const SPI_SETHOTTRACKING: UINT = 0x100F;
+pub const SPI_GETMENUFADE: UINT = 0x1012;
+pub const SPI_SETMENUFADE: UINT = 0x1013;
+pub const SPI_GETSELECTIONFADE: UINT = 0x1014;
+pub const SPI_SETSELECTIONFADE: UINT = 0x1015;
+pub const SPI_GETTOOLTIPANIMATION: UINT = 0x1016;
+pub const SPI_SETTOOLTIPANIMATION: UINT = 0x1017;
+pub const SPI_GETTOOLTIPFADE: UINT = 0x1018;
+pub const SPI_SETTOOLTIPFADE: UINT = 0x1019;
+pub const SPI_GETCURSORSHADOW: UINT = 0x101A;
+pub const SPI_SETCURSORSHADOW: UINT = 0x101B;
+pub const SPI_GETMOUSESONAR: UINT = 0x101C;
+pub const SPI_SETMOUSESONAR: UINT = 0x101D;
+pub const SPI_GETMOUSECLICKLOCK: UINT = 0x101E;
+pub const SPI_SETMOUSECLICKLOCK: UINT = 0x101F;
+pub const SPI_GETMOUSEVANISH: UINT = 0x1020;
+pub const SPI_SETMOUSEVANISH: UINT = 0x1021;
+pub const SPI_GETFLATMENU: UINT = 0x1022;
+pub const SPI_SETFLATMENU: UINT = 0x1023;
+pub const SPI_GETDROPSHADOW: UINT = 0x1024;
+pub const SPI_SETDROPSHADOW: UINT = 0x1025;
+pub const SPI_GETBLOCKSENDINPUTRESETS: UINT = 0x1026;
+pub const SPI_SETBLOCKSENDINPUTRESETS: UINT = 0x1027;
+pub const SPI_GETUIEFFECTS: UINT = 0x103E;
+pub const SPI_SETUIEFFECTS: UINT = 0x103F;
+pub const SPI_GETDISABLEOVERLAPPEDCONTENT: UINT = 0x1040;
+pub const SPI_SETDISABLEOVERLAPPEDCONTENT: UINT = 0x1041;
+pub const SPI_GETCLIENTAREAANIMATION: UINT = 0x1042;
+pub const SPI_SETCLIENTAREAANIMATION: UINT = 0x1043;
+pub const SPI_GETCLEARTYPE: UINT = 0x1048;
+pub const SPI_SETCLEARTYPE: UINT = 0x1049;
+pub const SPI_GETSPEECHRECOGNITION: UINT = 0x104A;
+pub const SPI_SETSPEECHRECOGNITION: UINT = 0x104B;
+pub const SPI_GETFOREGROUNDLOCKTIMEOUT: UINT = 0x2000;
+pub const SPI_SETFOREGROUNDLOCKTIMEOUT: UINT = 0x2001;
+pub const SPI_GETACTIVEWNDTRKTIMEOUT: UINT = 0x2002;
+pub const SPI_SETACTIVEWNDTRKTIMEOUT: UINT = 0x2003;
+pub const SPI_GETFOREGROUNDFLASHCOUNT: UINT = 0x2004;
+pub const SPI_SETFOREGROUNDFLASHCOUNT: UINT = 0x2005;
+pub const SPI_GETCARETWIDTH: UINT = 0x2006;
+pub const SPI_SETCARETWIDTH: UINT = 0x2007;
+pub const SPI_GETMOUSECLICKLOCKTIME: UINT = 0x2008;
+pub const SPI_SETMOUSECLICKLOCKTIME: UINT = 0x2009;
+pub const SPI_GETFONTSMOOTHINGTYPE: UINT = 0x200A;
+pub const SPI_SETFONTSMOOTHINGTYPE: UINT = 0x200B;
+pub const FE_FONTSMOOTHINGSTANDARD: UINT = 0x0001;
+pub const FE_FONTSMOOTHINGCLEARTYPE: UINT = 0x0002;
+pub const SPI_GETFONTSMOOTHINGCONTRAST: UINT = 0x200C;
+pub const SPI_SETFONTSMOOTHINGCONTRAST: UINT = 0x200D;
+pub const SPI_GETFOCUSBORDERWIDTH: UINT = 0x200E;
+pub const SPI_SETFOCUSBORDERWIDTH: UINT = 0x200F;
+pub const SPI_GETFOCUSBORDERHEIGHT: UINT = 0x2010;
+pub const SPI_SETFOCUSBORDERHEIGHT: UINT = 0x2011;
+pub const SPI_GETFONTSMOOTHINGORIENTATION: UINT = 0x2012;
+pub const SPI_SETFONTSMOOTHINGORIENTATION: UINT = 0x2013;
+pub const FE_FONTSMOOTHINGORIENTATIONBGR: UINT = 0x0000;
+pub const FE_FONTSMOOTHINGORIENTATIONRGB: UINT = 0x0001;
+pub const SPI_GETMINIMUMHITRADIUS: UINT = 0x2014;
+pub const SPI_SETMINIMUMHITRADIUS: UINT = 0x2015;
+pub const SPI_GETMESSAGEDURATION: UINT = 0x2016;
+pub const SPI_SETMESSAGEDURATION: UINT = 0x2017;
+//12472
+pub const SPIF_UPDATEINIFILE: UINT = 0x0001;
+pub const SPIF_SENDWININICHANGE: UINT = 0x0002;
+pub const SPIF_SENDCHANGE: UINT = SPIF_SENDWININICHANGE;
+//12484
+STRUCT!{struct NONCLIENTMETRICSA {
+ cbSize: UINT,
+ iBorderWidth: c_int,
+ iScrollWidth: c_int,
+ iScrollHeight: c_int,
+ iCaptionWidth: c_int,
+ iCaptionHeight: c_int,
+ lfCaptionFont: LOGFONTA,
+ iSmCaptionWidth: c_int,
+ iSmCaptionHeight: c_int,
+ lfSmCaptionFont: LOGFONTA,
+ iMenuWidth: c_int,
+ iMenuHeight: c_int,
+ lfMenuFont: LOGFONTA,
+ lfStatusFont: LOGFONTA,
+ lfMessageFont: LOGFONTA,
+ iPaddedBorderWidth: c_int,
+}}
+pub type LPNONCLIENTMETRICSA = *mut NONCLIENTMETRICSA;
+STRUCT!{struct NONCLIENTMETRICSW {
+ cbSize: UINT,
+ iBorderWidth: c_int,
+ iScrollWidth: c_int,
+ iScrollHeight: c_int,
+ iCaptionWidth: c_int,
+ iCaptionHeight: c_int,
+ lfCaptionFont: LOGFONTW,
+ iSmCaptionWidth: c_int,
+ iSmCaptionHeight: c_int,
+ lfSmCaptionFont: LOGFONTW,
+ iMenuWidth: c_int,
+ iMenuHeight: c_int,
+ lfMenuFont: LOGFONTW,
+ lfStatusFont: LOGFONTW,
+ lfMessageFont: LOGFONTW,
+ iPaddedBorderWidth: c_int,
+}}
+pub type LPNONCLIENTMETRICSW = *mut NONCLIENTMETRICSW;
+//12598
+STRUCT!{struct ANIMATIONINFO {
+ cbSize: UINT,
+ iMinAnimate: c_int,
+}}
+pub type LPANIMATIONINFO = *mut ANIMATIONINFO;
+//12638
+STRUCT!{struct HIGHCONTRASTA {
+ cbSize: UINT,
+ dwFlags: DWORD,
+ lpszDefaultScheme: LPSTR,
+}}
+pub type LPHIGHCONTRASTA = *mut HIGHCONTRASTA;
+STRUCT!{struct HIGHCONTRASTW {
+ cbSize: UINT,
+ dwFlags: DWORD,
+ lpszDefaultScheme: LPWSTR,
+}}
+pub type LPHIGHCONTRASTW = *mut HIGHCONTRASTW;
+pub const HCF_HIGHCONTRASTON: DWORD = 0x00000001;
+pub const HCF_AVAILABLE: DWORD = 0x00000002;
+pub const HCF_HOTKEYACTIVE: DWORD = 0x00000004;
+pub const HCF_CONFIRMHOTKEY: DWORD = 0x00000008;
+pub const HCF_HOTKEYSOUND: DWORD = 0x00000010;
+pub const HCF_INDICATOR: DWORD = 0x00000020;
+pub const HCF_HOTKEYAVAILABLE: DWORD = 0x00000040;
+pub const HCF_LOGONDESKTOP: DWORD = 0x00000100;
+pub const HCF_DEFAULTDESKTOP: DWORD = 0x00000200;
+pub const CDS_UPDATEREGISTRY: DWORD = 0x00000001;
+pub const CDS_TEST: DWORD = 0x00000002;
+pub const CDS_FULLSCREEN: DWORD = 0x00000004;
+pub const CDS_GLOBAL: DWORD = 0x00000008;
+pub const CDS_SET_PRIMARY: DWORD = 0x00000010;
+pub const CDS_VIDEOPARAMETERS: DWORD = 0x00000020;
+pub const CDS_ENABLE_UNSAFE_MODES: DWORD = 0x00000100;
+pub const CDS_DISABLE_UNSAFE_MODES: DWORD = 0x00000200;
+pub const CDS_RESET: DWORD = 0x40000000;
+pub const CDS_RESET_EX: DWORD = 0x20000000;
+pub const CDS_NORESET: DWORD = 0x10000000;
+pub const DISP_CHANGE_SUCCESSFUL: LONG = 0;
+pub const DISP_CHANGE_RESTART: LONG = 1;
+pub const DISP_CHANGE_FAILED: LONG = -1;
+pub const DISP_CHANGE_BADMODE: LONG = -2;
+pub const DISP_CHANGE_NOTUPDATED: LONG = -3;
+pub const DISP_CHANGE_BADFLAGS: LONG = -4;
+pub const DISP_CHANGE_BADPARAM: LONG = -5;
+pub const DISP_CHANGE_BADDUALVIEW: LONG = -6;
+extern "system" {
+ pub fn ChangeDisplaySettingsA(
+ lpDevMode: *mut DEVMODEA,
+ dwFlags: DWORD,
+ ) -> LONG;
+ pub fn ChangeDisplaySettingsW(
+ lpDevMode: *mut DEVMODEW,
+ dwFlags: DWORD,
+ ) -> LONG;
+ pub fn ChangeDisplaySettingsExA(
+ lpszDeviceName: LPCSTR,
+ lpDevMode: *mut DEVMODEA,
+ hwnd: HWND,
+ dwFlags: DWORD,
+ lParam: LPVOID,
+ ) -> LONG;
+ pub fn ChangeDisplaySettingsExW(
+ lpszDeviceName: LPCWSTR,
+ lpDevMode: *mut DEVMODEW,
+ hwnd: HWND,
+ dwFlags: DWORD,
+ lParam: LPVOID,
+ ) -> LONG;
+}
+pub const ENUM_CURRENT_SETTINGS: DWORD = 0xFFFFFFFF;
+pub const ENUM_REGISTRY_SETTINGS: DWORD = 0xFFFFFFFE;
+extern "system" {
+ pub fn EnumDisplaySettingsA(
+ lpszDeviceName: LPCSTR,
+ iModeNum: DWORD,
+ lpDevMode: *mut DEVMODEA,
+ ) -> BOOL;
+ pub fn EnumDisplaySettingsW(
+ lpszDeviceName: LPCWSTR,
+ iModeNum: DWORD,
+ lpDevMode: *mut DEVMODEW,
+ ) -> BOOL;
+ pub fn EnumDisplaySettingsExA(
+ lpszDeviceName: LPCSTR,
+ iModeNum: DWORD,
+ lpDevMode: *mut DEVMODEA,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn EnumDisplaySettingsExW(
+ lpszDeviceName: LPCWSTR,
+ iModeNum: DWORD,
+ lpDevMode: *mut DEVMODEW,
+ dwFlags: DWORD,
+ ) -> BOOL;
+}
+pub const EDS_RAWMODE: DWORD = 0x00000002;
+pub const EDS_ROTATEDMODE: DWORD = 0x00000004;
+extern "system" {
+ pub fn EnumDisplayDevicesA(
+ lpDevice: LPCSTR,
+ iDevNum: DWORD,
+ lpDisplayDevice: PDISPLAY_DEVICEA,
+ dwFlags: DWORD,
+ ) -> BOOL;
+ pub fn EnumDisplayDevicesW(
+ lpDevice: LPCWSTR,
+ iDevNum: DWORD,
+ lpDisplayDevice: PDISPLAY_DEVICEW,
+ dwFlags: DWORD,
+ ) -> BOOL;
+}
+pub const EDD_GET_DEVICE_INTERFACE_NAME: DWORD = 0x00000001;
+extern "system" {
+ pub fn SystemParametersInfoA(
+ uiAction: UINT,
+ uiParam: UINT,
+ pvParam: PVOID,
+ fWinIni: UINT,
+ ) -> BOOL;
+ pub fn SystemParametersInfoW(
+ uiAction: UINT,
+ uiParam: UINT,
+ pvParam: PVOID,
+ fWinIni: UINT,
+ ) -> BOOL;
+ pub fn SystemParametersInfoForDpi(
+ uiAction: UINT,
+ uiParam: UINT,
+ pvParam: PVOID,
+ fWinIni: UINT,
+ dpi: UINT,
+ ) -> BOOL;
+}
+//13191
+extern "system" {
+ pub fn SetLastErrorEx(
+ dwErrCode: DWORD,
+ dwType: DWORD,
+ );
+ pub fn InternalGetWindowText(
+ hWnd: HWND,
+ pString: LPWSTR,
+ cchMaxCount: c_int,
+ ) -> c_int;
+ pub fn EndTask(
+ hWnd: HWND,
+ fShutDown: BOOL,
+ fForce: BOOL,
+ ) -> BOOL;
+ pub fn CancelShutdown() -> BOOL;
+}
+pub const MONITOR_DEFAULTTONULL: DWORD = 0x00000000;
+pub const MONITOR_DEFAULTTOPRIMARY: DWORD = 0x00000001;
+pub const MONITOR_DEFAULTTONEAREST: DWORD = 0x00000002;
+extern "system" {
+ pub fn MonitorFromPoint(
+ pt: POINT,
+ dwFlags: DWORD,
+ ) -> HMONITOR;
+ pub fn MonitorFromRect(
+ lprc: LPCRECT,
+ dwFlags: DWORD,
+ ) -> HMONITOR;
+ pub fn MonitorFromWindow(
+ hwnd: HWND,
+ dwFlags: DWORD,
+ ) -> HMONITOR;
+}
+pub const MONITORINFOF_PRIMARY: DWORD = 1;
+pub const CCHDEVICENAME: usize = 32;
+STRUCT!{struct MONITORINFO {
+ cbSize: DWORD,
+ rcMonitor: RECT,
+ rcWork: RECT,
+ dwFlags: DWORD,
+}}
+pub type LPMONITORINFO = *mut MONITORINFO;
+STRUCT!{struct MONITORINFOEXA {
+ cbSize: DWORD,
+ rcMonitor: RECT,
+ rcWork: RECT,
+ dwFlags: DWORD,
+ szDevice: [CHAR; CCHDEVICENAME],
+}}
+pub type LPMONITORINFOEXA = *mut MONITORINFOEXA;
+STRUCT!{struct MONITORINFOEXW {
+ cbSize: DWORD,
+ rcMonitor: RECT,
+ rcWork: RECT,
+ dwFlags: DWORD,
+ szDevice: [WCHAR; CCHDEVICENAME],
+}}
+pub type LPMONITORINFOEXW = *mut MONITORINFOEXW;
+extern "system" {
+ pub fn GetMonitorInfoA(
+ hMonitor: HMONITOR,
+ lpmi: LPMONITORINFO,
+ ) -> BOOL;
+ pub fn GetMonitorInfoW(
+ hMonitor: HMONITOR,
+ lpmi: LPMONITORINFO,
+ ) -> BOOL;
+}
+FN!{stdcall MONITORENUMPROC(
+ HMONITOR,
+ HDC,
+ LPRECT,
+ LPARAM,
+) -> BOOL}
+extern "system" {
+ pub fn EnumDisplayMonitors(
+ hdc: HDC,
+ lprcClip: LPCRECT,
+ lpfnEnum: MONITORENUMPROC,
+ dwData: LPARAM,
+ ) -> BOOL;
+ pub fn NotifyWinEvent(
+ event: DWORD,
+ hwnd: HWND,
+ idObject: LONG,
+ idChild: LONG,
+ );
+}
+FN!{stdcall WINEVENTPROC(
+ HWINEVENTHOOK,
+ DWORD,
+ HWND,
+ LONG,
+ LONG,
+ DWORD,
+ DWORD,
+) -> ()}
+extern "system" {
+ pub fn SetWinEventHook(
+ eventMin: DWORD,
+ eventMax: DWORD,
+ hmodWinEventProc: HMODULE,
+ pfnWinEventProc: WINEVENTPROC,
+ idProcess: DWORD,
+ idThread: DWORD,
+ dwFlags: DWORD,
+ ) -> HWINEVENTHOOK;
+ pub fn IsWinEventHookInstalled(
+ event: DWORD,
+ ) -> BOOL;
+}
+pub const WINEVENT_OUTOFCONTEXT: UINT = 0x0000;
+pub const WINEVENT_SKIPOWNTHREAD: UINT = 0x0001;
+pub const WINEVENT_SKIPOWNPROCESS: UINT = 0x0002;
+pub const WINEVENT_INCONTEXT: UINT = 0x0004;
+extern "system" {
+ pub fn UnhookWinEvent(
+ hWinEventHook: HWINEVENTHOOK,
+ ) -> BOOL;
+}
+pub const CHILDID_SELF: LONG = 0;
+pub const INDEXID_OBJECT: LONG = 0;
+pub const INDEXID_CONTAINER: LONG = 0;
+pub const OBJID_WINDOW: LONG = 0x0000;
+pub const OBJID_SYSMENU: LONG = 0xFFFFFFFF;
+pub const OBJID_TITLEBAR: LONG = 0xFFFFFFFE;
+pub const OBJID_MENU: LONG = 0xFFFFFFFD;
+pub const OBJID_CLIENT: LONG = 0xFFFFFFFC;
+pub const OBJID_VSCROLL: LONG = 0xFFFFFFFB;
+pub const OBJID_HSCROLL: LONG = 0xFFFFFFFA;
+pub const OBJID_SIZEGRIP: LONG = 0xFFFFFFF9;
+pub const OBJID_CARET: LONG = 0xFFFFFFF8;
+pub const OBJID_CURSOR: LONG = 0xFFFFFFF7;
+pub const OBJID_ALERT: LONG = 0xFFFFFFF6;
+pub const OBJID_SOUND: LONG = 0xFFFFFFF5;
+pub const OBJID_QUERYCLASSNAMEIDX: LONG = 0xFFFFFFF4;
+pub const OBJID_NATIVEOM: LONG = 0xFFFFFFF0;
+pub const EVENT_MIN: UINT = 0x0001;
+pub const EVENT_MAX: UINT = 0x7FFFFFFF;
+pub const EVENT_SYSTEM_SOUND: UINT = 0x0001;
+pub const EVENT_SYSTEM_ALERT: UINT = 0x0002;
+pub const EVENT_SYSTEM_FOREGROUND: UINT = 0x0003;
+pub const EVENT_SYSTEM_MENUSTART: UINT = 0x0004;
+pub const EVENT_SYSTEM_MENUEND: UINT = 0x0005;
+pub const EVENT_SYSTEM_MENUPOPUPSTART: UINT = 0x0006;
+pub const EVENT_SYSTEM_MENUPOPUPEND: UINT = 0x0007;
+pub const EVENT_SYSTEM_CAPTURESTART: UINT = 0x0008;
+pub const EVENT_SYSTEM_CAPTUREEND: UINT = 0x0009;
+pub const EVENT_SYSTEM_MOVESIZESTART: UINT = 0x000A;
+pub const EVENT_SYSTEM_MOVESIZEEND: UINT = 0x000B;
+pub const EVENT_SYSTEM_CONTEXTHELPSTART: UINT = 0x000C;
+pub const EVENT_SYSTEM_CONTEXTHELPEND: UINT = 0x000D;
+pub const EVENT_SYSTEM_DRAGDROPSTART: UINT = 0x000E;
+pub const EVENT_SYSTEM_DRAGDROPEND: UINT = 0x000F;
+pub const EVENT_SYSTEM_DIALOGSTART: UINT = 0x0010;
+pub const EVENT_SYSTEM_DIALOGEND: UINT = 0x0011;
+pub const EVENT_SYSTEM_SCROLLINGSTART: UINT = 0x0012;
+pub const EVENT_SYSTEM_SCROLLINGEND: UINT = 0x0013;
+pub const EVENT_SYSTEM_SWITCHSTART: UINT = 0x0014;
+pub const EVENT_SYSTEM_SWITCHEND: UINT = 0x0015;
+pub const EVENT_SYSTEM_MINIMIZESTART: UINT = 0x0016;
+pub const EVENT_SYSTEM_MINIMIZEEND: UINT = 0x0017;
+pub const EVENT_SYSTEM_DESKTOPSWITCH: UINT = 0x0020;
+pub const EVENT_SYSTEM_SWITCHER_APPGRABBED: UINT = 0x0024;
+pub const EVENT_SYSTEM_SWITCHER_APPOVERTARGET: UINT = 0x0025;
+pub const EVENT_SYSTEM_SWITCHER_APPDROPPED: UINT = 0x0026;
+pub const EVENT_SYSTEM_SWITCHER_CANCELLED: UINT = 0x0027;
+pub const EVENT_SYSTEM_IME_KEY_NOTIFICATION: UINT = 0x0029;
+pub const EVENT_SYSTEM_END: UINT = 0x00FF;
+pub const EVENT_OEM_DEFINED_START: UINT = 0x0101;
+pub const EVENT_OEM_DEFINED_END: UINT = 0x01FF;
+pub const EVENT_UIA_EVENTID_START: UINT = 0x4E00;
+pub const EVENT_UIA_EVENTID_END: UINT = 0x4EFF;
+pub const EVENT_UIA_PROPID_START: UINT = 0x7500;
+pub const EVENT_UIA_PROPID_END: UINT = 0x75FF;
+pub const EVENT_CONSOLE_CARET: UINT = 0x4001;
+pub const EVENT_CONSOLE_UPDATE_REGION: UINT = 0x4002;
+pub const EVENT_CONSOLE_UPDATE_SIMPLE: UINT = 0x4003;
+pub const EVENT_CONSOLE_UPDATE_SCROLL: UINT = 0x4004;
+pub const EVENT_CONSOLE_LAYOUT: UINT = 0x4005;
+pub const EVENT_CONSOLE_START_APPLICATION: UINT = 0x4006;
+pub const EVENT_CONSOLE_END_APPLICATION: UINT = 0x4007;
+#[cfg(target_pointer_width = "64")]
+pub const CONSOLE_APPLICATION_16BIT: LONG = 0x0000;
+#[cfg(target_pointer_width = "32")]
+pub const CONSOLE_APPLICATION_16BIT: LONG = 0x0001;
+pub const CONSOLE_CARET_SELECTION: LONG = 0x0001;
+pub const CONSOLE_CARET_VISIBLE: LONG = 0x0002;
+pub const EVENT_CONSOLE_END: UINT = 0x40FF;
+pub const EVENT_OBJECT_CREATE: UINT = 0x8000;
+pub const EVENT_OBJECT_DESTROY: UINT = 0x8001;
+pub const EVENT_OBJECT_SHOW: UINT = 0x8002;
+pub const EVENT_OBJECT_HIDE: UINT = 0x8003;
+pub const EVENT_OBJECT_REORDER: UINT = 0x8004;
+pub const EVENT_OBJECT_FOCUS: UINT = 0x8005;
+pub const EVENT_OBJECT_SELECTION: UINT = 0x8006;
+pub const EVENT_OBJECT_SELECTIONADD: UINT = 0x8007;
+pub const EVENT_OBJECT_SELECTIONREMOVE: UINT = 0x8008;
+pub const EVENT_OBJECT_SELECTIONWITHIN: UINT = 0x8009;
+pub const EVENT_OBJECT_STATECHANGE: UINT = 0x800A;
+pub const EVENT_OBJECT_LOCATIONCHANGE: UINT = 0x800B;
+pub const EVENT_OBJECT_NAMECHANGE: UINT = 0x800C;
+pub const EVENT_OBJECT_DESCRIPTIONCHANGE: UINT = 0x800D;
+pub const EVENT_OBJECT_VALUECHANGE: UINT = 0x800E;
+pub const EVENT_OBJECT_PARENTCHANGE: UINT = 0x800F;
+pub const EVENT_OBJECT_HELPCHANGE: UINT = 0x8010;
+pub const EVENT_OBJECT_DEFACTIONCHANGE: UINT = 0x8011;
+pub const EVENT_OBJECT_ACCELERATORCHANGE: UINT = 0x8012;
+pub const EVENT_OBJECT_INVOKED: UINT = 0x8013;
+pub const EVENT_OBJECT_TEXTSELECTIONCHANGED: UINT = 0x8014;
+pub const EVENT_OBJECT_CONTENTSCROLLED: UINT = 0x8015;
+pub const EVENT_SYSTEM_ARRANGMENTPREVIEW: UINT = 0x8016;
+pub const EVENT_OBJECT_CLOAKED: UINT = 0x8017;
+pub const EVENT_OBJECT_UNCLOAKED: UINT = 0x8018;
+pub const EVENT_OBJECT_LIVEREGIONCHANGED: UINT = 0x8019;
+pub const EVENT_OBJECT_HOSTEDOBJECTSINVALIDATED: UINT = 0x8020;
+pub const EVENT_OBJECT_DRAGSTART: UINT = 0x8021;
+pub const EVENT_OBJECT_DRAGCANCEL: UINT = 0x8022;
+pub const EVENT_OBJECT_DRAGCOMPLETE: UINT = 0x8023;
+pub const EVENT_OBJECT_DRAGENTER: UINT = 0x8024;
+pub const EVENT_OBJECT_DRAGLEAVE: UINT = 0x8025;
+pub const EVENT_OBJECT_DRAGDROPPED: UINT = 0x8026;
+pub const EVENT_OBJECT_IME_SHOW: UINT = 0x8027;
+pub const EVENT_OBJECT_IME_HIDE: UINT = 0x8028;
+pub const EVENT_OBJECT_IME_CHANGE: UINT = 0x8029;
+pub const EVENT_OBJECT_TEXTEDIT_CONVERSIONTARGETCHANGED: UINT = 0x8030;
+pub const EVENT_OBJECT_END: UINT = 0x80FF;
+pub const EVENT_AIA_START: UINT = 0xA000;
+pub const EVENT_AIA_END: UINT = 0xAFFF;
+pub const ALERT_SYSTEM_INFORMATIONAL: LONG = 1;
+pub const ALERT_SYSTEM_WARNING: LONG = 2;
+pub const ALERT_SYSTEM_ERROR: LONG = 3;
+pub const ALERT_SYSTEM_QUERY: LONG = 4;
+pub const ALERT_SYSTEM_CRITICAL: LONG = 5;
+pub const CALERT_SYSTEM: LONG = 6;
+STRUCT!{struct GUITHREADINFO {
+ cbSize: DWORD,
+ flags: DWORD,
+ hwndActive: HWND,
+ hwndFocus: HWND,
+ hwndCapture: HWND,
+ hwndMenuOwner: HWND,
+ hwndMoveSize: HWND,
+ hwndCaret: HWND,
+ rcCaret: RECT,
+}}
+pub type PGUITHREADINFO = *mut GUITHREADINFO;
+pub type LPGUITHREADINFO = *mut GUITHREADINFO;
+pub const GUI_CARETBLINKING: DWORD = 0x00000001;
+pub const GUI_INMOVESIZE: DWORD = 0x00000002;
+pub const GUI_INMENUMODE: DWORD = 0x00000004;
+pub const GUI_SYSTEMMENUMODE: DWORD = 0x00000008;
+pub const GUI_POPUPMENUMODE: DWORD = 0x00000010;
+#[cfg(target_arch = "x86_64")]
+pub const GUI_16BITTASK: DWORD = 0x00000000;
+#[cfg(target_arch = "x86")]
+pub const GUI_16BITTASK: DWORD = 0x00000020;
+extern "system" {
+ pub fn GetGUIThreadInfo(
+ idThread: DWORD,
+ pgui: PGUITHREADINFO,
+ ) -> BOOL;
+ pub fn BlockInput(
+ fBlockIt: BOOL,
+ ) -> BOOL;
+}
+pub const USER_DEFAULT_SCREEN_DPI: LONG = 96;
+extern "system" {
+ pub fn SetProcessDPIAware() -> BOOL;
+ pub fn IsProcessDPIAware() -> BOOL;
+ pub fn SetThreadDpiAwarenessContext(
+ dpiContext: DPI_AWARENESS_CONTEXT,
+ ) -> DPI_AWARENESS_CONTEXT;
+ pub fn GetThreadDpiAwarenessContext() -> DPI_AWARENESS_CONTEXT;
+ pub fn GetWindowDpiAwarenessContext(
+ hwnd: HWND,
+ ) -> DPI_AWARENESS_CONTEXT;
+ pub fn GetAwarenessFromDpiAwarenessContext(
+ value: DPI_AWARENESS_CONTEXT,
+ ) -> DPI_AWARENESS;
+ pub fn GetDpiFromDpiAwarenessContext(
+ value: DPI_AWARENESS_CONTEXT,
+ ) -> UINT;
+ pub fn AreDpiAwarenessContextsEqual(
+ dpiContextA: DPI_AWARENESS_CONTEXT,
+ dpiContextB: DPI_AWARENESS_CONTEXT,
+ ) -> BOOL;
+ pub fn IsValidDpiAwarenessContext(
+ value: DPI_AWARENESS_CONTEXT,
+ ) -> BOOL;
+ pub fn GetDpiForWindow(
+ hwnd: HWND,
+ ) -> UINT;
+ pub fn GetDpiForSystem() -> UINT;
+ pub fn GetSystemDpiForProcess(
+ hProcess: HANDLE,
+ ) -> UINT;
+ pub fn EnableNonClientDpiScaling(
+ hwnd: HWND,
+ ) -> BOOL;
+ pub fn SetProcessDpiAwarenessContext(
+ value: DPI_AWARENESS_CONTEXT,
+ ) -> BOOL;
+ pub fn SetThreadDpiHostingBehavior(
+ value: DPI_HOSTING_BEHAVIOR,
+ ) -> DPI_HOSTING_BEHAVIOR;
+ pub fn GetThreadDpiHostingBehavior() -> DPI_HOSTING_BEHAVIOR;
+ pub fn GetWindowDpiHostingBehavior(
+ hwnd: HWND,
+ ) -> DPI_HOSTING_BEHAVIOR;
+ pub fn GetWindowModuleFileNameA(
+ hWnd: HWND,
+ lpszFileName: LPCSTR,
+ cchFileNameMax: UINT,
+ ) -> UINT;
+ pub fn GetWindowModuleFileNameW(
+ hWnd: HWND,
+ lpszFileName: LPWSTR,
+ cchFileNameMax: UINT,
+ ) -> UINT;
+}
+pub const STATE_SYSTEM_UNAVAILABLE: DWORD = 0x00000001;
+pub const STATE_SYSTEM_SELECTED: DWORD = 0x00000002;
+pub const STATE_SYSTEM_FOCUSED: DWORD = 0x00000004;
+pub const STATE_SYSTEM_PRESSED: DWORD = 0x00000008;
+pub const STATE_SYSTEM_CHECKED: DWORD = 0x00000010;
+pub const STATE_SYSTEM_MIXED: DWORD = 0x00000020;
+pub const STATE_SYSTEM_INDETERMINATE: DWORD = STATE_SYSTEM_MIXED;
+pub const STATE_SYSTEM_READONLY: DWORD = 0x00000040;
+pub const STATE_SYSTEM_HOTTRACKED: DWORD = 0x00000080;
+pub const STATE_SYSTEM_DEFAULT: DWORD = 0x00000100;
+pub const STATE_SYSTEM_EXPANDED: DWORD = 0x00000200;
+pub const STATE_SYSTEM_COLLAPSED: DWORD = 0x00000400;
+pub const STATE_SYSTEM_BUSY: DWORD = 0x00000800;
+pub const STATE_SYSTEM_FLOATING: DWORD = 0x00001000;
+pub const STATE_SYSTEM_MARQUEED: DWORD = 0x00002000;
+pub const STATE_SYSTEM_ANIMATED: DWORD = 0x00004000;
+pub const STATE_SYSTEM_INVISIBLE: DWORD = 0x00008000;
+pub const STATE_SYSTEM_OFFSCREEN: DWORD = 0x00010000;
+pub const STATE_SYSTEM_SIZEABLE: DWORD = 0x00020000;
+pub const STATE_SYSTEM_MOVEABLE: DWORD = 0x00040000;
+pub const STATE_SYSTEM_SELFVOICING: DWORD = 0x00080000;
+pub const STATE_SYSTEM_FOCUSABLE: DWORD = 0x00100000;
+pub const STATE_SYSTEM_SELECTABLE: DWORD = 0x00200000;
+pub const STATE_SYSTEM_LINKED: DWORD = 0x00400000;
+pub const STATE_SYSTEM_TRAVERSED: DWORD = 0x00800000;
+pub const STATE_SYSTEM_MULTISELECTABLE: DWORD = 0x01000000;
+pub const STATE_SYSTEM_EXTSELECTABLE: DWORD = 0x02000000;
+pub const STATE_SYSTEM_ALERT_LOW: DWORD = 0x04000000;
+pub const STATE_SYSTEM_ALERT_MEDIUM: DWORD = 0x08000000;
+pub const STATE_SYSTEM_ALERT_HIGH: DWORD = 0x10000000;
+pub const STATE_SYSTEM_PROTECTED: DWORD = 0x20000000;
+pub const STATE_SYSTEM_VALID: DWORD = 0x3fffffff;
+pub const CCHILDREN_TITLEBAR: usize = 5;
+pub const CCHILDREN_SCROLLBAR: usize = 5;
+STRUCT!{struct CURSORINFO {
+ cbSize: DWORD,
+ flags: DWORD,
+ hCursor: HCURSOR,
+ ptScreenPos: POINT,
+}}
+pub type PCURSORINFO = *mut CURSORINFO;
+pub type LPCURSORINFO = *mut CURSORINFO;
+pub const CURSOR_SHOWING: DWORD = 0x00000001;
+pub const CURSOR_SUPPRESSED: DWORD = 0x00000002;
+extern "system" {
+ pub fn GetCursorInfo(
+ pci: PCURSORINFO,
+ ) -> BOOL;
+}
+STRUCT!{struct WINDOWINFO {
+ cbSize: DWORD,
+ rcWindow: RECT,
+ rcClient: RECT,
+ dwStyle: DWORD,
+ dwExStyle: DWORD,
+ dwWindowStatus: DWORD,
+ cxWindowBorders: UINT,
+ cyWindowBorders: UINT,
+ atomWindowType: ATOM,
+ wCreatorVersion: WORD,
+}}
+pub type PWINDOWINFO = *mut WINDOWINFO;
+pub type LPWINDOWINFO = *mut WINDOWINFO;
+pub const WS_ACTIVECAPTION: DWORD = 0x0001;
+extern "system" {
+ pub fn GetWindowInfo(
+ hwnd: HWND,
+ pwi: PWINDOWINFO,
+ ) -> BOOL;
+}
+STRUCT!{struct TITLEBARINFO {
+ cbSize: DWORD,
+ rcTitleBar: RECT,
+ rgstate: [DWORD; CCHILDREN_TITLEBAR + 1],
+}}
+pub type PTITLEBARINFO = *mut TITLEBARINFO;
+pub type LPTITLEBARINFO = *mut TITLEBARINFO;
+extern "system" {
+ pub fn GetTitleBarInfo(
+ hwnd: HWND,
+ pti: PTITLEBARINFO,
+ ) -> BOOL;
+}
+STRUCT!{struct TITLEBARINFOEX {
+ cbSize: DWORD,
+ rcTitleBar: RECT,
+ rgstate: [DWORD; CCHILDREN_TITLEBAR + 1],
+ rgrect: [RECT; CCHILDREN_TITLEBAR + 1],
+}}
+pub type PTITLEBARINFOEX = *mut TITLEBARINFOEX;
+pub type LPTITLEBARINFOEX = *mut TITLEBARINFOEX;
+STRUCT!{struct MENUBARINFO {
+ cbSize: DWORD,
+ rcBar: RECT,
+ hMenu: HMENU,
+ hwndMenu: HWND,
+ BitFields: BOOL,
+}}
+BITFIELD!{MENUBARINFO BitFields: BOOL [
+ fBarFocused set_fBarFocused[0..1],
+ fFocused set_fFocused[1..2],
+]}
+pub type PMENUBARINFO = *mut MENUBARINFO;
+pub type LPMENUBARINFO = *mut MENUBARINFO;
+extern "system" {
+ pub fn GetMenuBarInfo(
+ hwnd: HWND,
+ idObject: LONG,
+ idItem: LONG,
+ pmbi: PMENUBARINFO,
+ ) -> BOOL;
+}
+STRUCT!{struct SCROLLBARINFO {
+ cbSize: DWORD,
+ rcScrollBar: RECT,
+ dxyLineButton: c_int,
+ xyThumbTop: c_int,
+ xyThumbBottom: c_int,
+ reserved: c_int,
+ rgstate: [DWORD; CCHILDREN_SCROLLBAR + 1],
+}}
+pub type PSCROLLBARINFO = *mut SCROLLBARINFO;
+pub type LPSCROLLBARINFO = *mut SCROLLBARINFO;
+extern "system" {
+ pub fn GetScrollBarInfo(
+ hwnd: HWND,
+ idObject: LONG,
+ psbi: PSCROLLBARINFO,
+ ) -> BOOL;
+}
+STRUCT!{struct COMBOBOXINFO {
+ cbSize: DWORD,
+ rcItem: RECT,
+ rcButton: RECT,
+ stateButton: DWORD,
+ hwndCombo: HWND,
+ hwndItem: HWND,
+ hwndList: HWND,
+}}
+pub type PCOMBOBOXINFO = *mut COMBOBOXINFO;
+pub type LPCOMBOBOXINFO = *mut COMBOBOXINFO;
+extern "system" {
+ pub fn GetComboBoxInfo(
+ hwndCombo: HWND,
+ pcbi: PCOMBOBOXINFO,
+ ) -> BOOL;
+}
+pub const GA_PARENT: UINT = 1;
+pub const GA_ROOT: UINT = 2;
+pub const GA_ROOTOWNER: UINT = 3;
+extern "system" {
+ pub fn GetAncestor(
+ hwnd: HWND,
+ gaFlags: UINT,
+ ) -> HWND;
+ pub fn RealChildWindowFromPoint(
+ hwndParent: HWND,
+ ptParentClientCoords: POINT,
+ ) -> HWND;
+ pub fn RealGetWindowClassA(
+ hwnd: HWND,
+ ptszClassName: LPSTR,
+ cchClassNameMax: UINT,
+ ) -> UINT;
+ pub fn RealGetWindowClassW(
+ hwnd: HWND,
+ ptszClassName: LPWSTR,
+ cchClassNameMax: UINT,
+ ) -> UINT;
+}
+STRUCT!{struct ALTTABINFO {
+ cbSize: DWORD,
+ cItems: c_int,
+ cColumns: c_int,
+ cRows: c_int,
+ iColFocus: c_int,
+ iRowFocus: c_int,
+ cxItem: c_int,
+ cyItem: c_int,
+ ptStart: POINT,
+}}
+pub type PALTTABINFO = *mut ALTTABINFO;
+pub type LPALTTABINFO = *mut ALTTABINFO;
+extern "system" {
+ pub fn GetAltTabInfoA(
+ hwnd: HWND,
+ iItem: c_int,
+ pati: PALTTABINFO,
+ pszItemText: LPSTR,
+ cchItemText: UINT,
+ ) -> BOOL;
+ pub fn GetAltTabInfoW(
+ hwnd: HWND,
+ iItem: c_int,
+ pati: PALTTABINFO,
+ pszItemText: LPWSTR,
+ cchItemText: UINT,
+ ) -> BOOL;
+ pub fn GetListBoxInfo(
+ hwnd: HWND,
+ ) -> DWORD;
+ pub fn LockWorkStation() -> BOOL;
+ pub fn UserHandleGrantAccess(
+ hUserHandle: HANDLE,
+ hJob: HANDLE,
+ bGrant: BOOL,
+ ) -> BOOL;
+}
+DECLARE_HANDLE!{HRAWINPUT, HRAWINPUT__}
+#[inline]
+pub fn GET_RAWINPUT_CODE_WPARAM(wParam: WPARAM) -> WPARAM { wParam & 0xff }
+pub const RIM_INPUT: WPARAM = 0;
+pub const RIM_INPUTSINK: WPARAM = 1;
+STRUCT!{struct RAWINPUTHEADER {
+ dwType: DWORD,
+ dwSize: DWORD,
+ hDevice: HANDLE,
+ wParam: WPARAM,
+}}
+pub type PRAWINPUTHEADER = *mut RAWINPUTHEADER;
+pub type LPRAWINPUTHEADER = *mut RAWINPUTHEADER;
+pub const RIM_TYPEMOUSE: DWORD = 0;
+pub const RIM_TYPEKEYBOARD: DWORD = 1;
+pub const RIM_TYPEHID: DWORD = 2;
+STRUCT!{struct RAWMOUSE {
+ usFlags: USHORT,
+ memory_padding: USHORT, // 16bit Padding for 32bit align in following union
+ usButtonFlags: USHORT,
+ usButtonData: USHORT,
+ ulRawButtons: ULONG,
+ lLastX: LONG,
+ lLastY: LONG,
+ ulExtraInformation: ULONG,
+}}
+pub type PRAWMOUSE = *mut RAWMOUSE;
+pub type LPRAWMOUSE = *mut RAWMOUSE;
+pub const RI_MOUSE_LEFT_BUTTON_DOWN: USHORT = 0x0001;
+pub const RI_MOUSE_LEFT_BUTTON_UP: USHORT = 0x0002;
+pub const RI_MOUSE_RIGHT_BUTTON_DOWN: USHORT = 0x0004;
+pub const RI_MOUSE_RIGHT_BUTTON_UP: USHORT = 0x0008;
+pub const RI_MOUSE_MIDDLE_BUTTON_DOWN: USHORT = 0x0010;
+pub const RI_MOUSE_MIDDLE_BUTTON_UP: USHORT = 0x0020;
+pub const RI_MOUSE_BUTTON_1_DOWN: USHORT = RI_MOUSE_LEFT_BUTTON_DOWN;
+pub const RI_MOUSE_BUTTON_1_UP: USHORT = RI_MOUSE_LEFT_BUTTON_UP;
+pub const RI_MOUSE_BUTTON_2_DOWN: USHORT = RI_MOUSE_RIGHT_BUTTON_DOWN;
+pub const RI_MOUSE_BUTTON_2_UP: USHORT = RI_MOUSE_RIGHT_BUTTON_UP;
+pub const RI_MOUSE_BUTTON_3_DOWN: USHORT = RI_MOUSE_MIDDLE_BUTTON_DOWN;
+pub const RI_MOUSE_BUTTON_3_UP: USHORT = RI_MOUSE_MIDDLE_BUTTON_UP;
+pub const RI_MOUSE_BUTTON_4_DOWN: USHORT = 0x0040;
+pub const RI_MOUSE_BUTTON_4_UP: USHORT = 0x0080;
+pub const RI_MOUSE_BUTTON_5_DOWN: USHORT = 0x0100;
+pub const RI_MOUSE_BUTTON_5_UP: USHORT = 0x0200;
+pub const RI_MOUSE_WHEEL: USHORT = 0x0400;
+pub const MOUSE_MOVE_RELATIVE: USHORT = 0;
+pub const MOUSE_MOVE_ABSOLUTE: USHORT = 1;
+pub const MOUSE_VIRTUAL_DESKTOP: USHORT = 0x02;
+pub const MOUSE_ATTRIBUTES_CHANGED: USHORT = 0x04;
+pub const MOUSE_MOVE_NOCOALESCE: USHORT = 0x08;
+STRUCT!{struct RAWKEYBOARD {
+ MakeCode: USHORT,
+ Flags: USHORT,
+ Reserved: USHORT,
+ VKey: USHORT,
+ Message: UINT,
+ ExtraInformation: ULONG,
+}}
+pub type PRAWKEYBOARD = *mut RAWKEYBOARD;
+pub type LPRAWKEYBOARD = *mut RAWKEYBOARD;
+pub const KEYBOARD_OVERRUN_MAKE_CODE: DWORD = 0xFF;
+pub const RI_KEY_MAKE: DWORD = 0;
+pub const RI_KEY_BREAK: DWORD = 1;
+pub const RI_KEY_E0: DWORD = 2;
+pub const RI_KEY_E1: DWORD = 4;
+pub const RI_KEY_TERMSRV_SET_LED: DWORD = 8;
+pub const RI_KEY_TERMSRV_SHADOW: DWORD = 0x10;
+STRUCT!{struct RAWHID {
+ dwSizeHid: DWORD,
+ dwCount: DWORD,
+ bRawData: [BYTE; 1],
+}}
+pub type PRAWHID = *mut RAWHID;
+pub type LPRAWHID = *mut RAWHID;
+UNION!{union RAWINPUT_data {
+ [u32; 6],
+ mouse mouse_mut: RAWMOUSE,
+ keyboard keyboard_mut: RAWKEYBOARD,
+ hid hid_mut: RAWHID,
+}}
+STRUCT!{struct RAWINPUT {
+ header: RAWINPUTHEADER,
+ data: RAWINPUT_data,
+}}
+pub type PRAWINPUT = *mut RAWINPUT;
+pub type LPRAWINPUT = *mut RAWINPUT;
+pub const RID_INPUT: DWORD = 0x10000003;
+pub const RID_HEADER: DWORD = 0x10000005;
+extern "system" {
+ pub fn GetRawInputData(
+ hRawInput: HRAWINPUT,
+ uiCommand: UINT,
+ pData: LPVOID,
+ pcbSize: PUINT,
+ cbSizeHeader: UINT,
+ ) -> UINT;
+}
+pub const RIDI_PREPARSEDDATA: DWORD = 0x20000005;
+pub const RIDI_DEVICENAME: DWORD = 0x20000007;
+pub const RIDI_DEVICEINFO: DWORD = 0x2000000b;
+STRUCT!{struct RID_DEVICE_INFO_MOUSE {
+ dwId: DWORD,
+ dwNumberOfButtons: DWORD,
+ dwSampleRate: DWORD,
+ fHasHorizontalWheel: BOOL,
+}}
+pub type PRID_DEVICE_INFO_MOUSE = *mut RID_DEVICE_INFO_MOUSE;
+STRUCT!{struct RID_DEVICE_INFO_KEYBOARD {
+ dwType: DWORD,
+ dwSubType: DWORD,
+ dwKeyboardMode: DWORD,
+ dwNumberOfFunctionKeys: DWORD,
+ dwNumberOfIndicators: DWORD,
+ dwNumberOfKeysTotal: DWORD,
+}}
+pub type PRID_DEVICE_INFO_KEYBOARD = *mut RID_DEVICE_INFO_KEYBOARD;
+STRUCT!{struct RID_DEVICE_INFO_HID {
+ dwVendorId: DWORD,
+ dwProductId: DWORD,
+ dwVersionNumber: DWORD,
+ usUsagePage: USHORT,
+ usUsage: USHORT,
+}}
+pub type PRID_DEVICE_INFO_HID = *mut RID_DEVICE_INFO_HID;
+UNION!{union RID_DEVICE_INFO_u {
+ [u32; 6],
+ mouse mouse_mut: RID_DEVICE_INFO_MOUSE,
+ keyboard keyboard_mut: RID_DEVICE_INFO_KEYBOARD,
+ hid hid_mut: RID_DEVICE_INFO_HID,
+}}
+STRUCT!{struct RID_DEVICE_INFO {
+ cbSize: DWORD,
+ dwType: DWORD,
+ u: RID_DEVICE_INFO_u,
+}}
+pub type PRID_DEVICE_INFO = *mut RID_DEVICE_INFO;
+pub type LPRID_DEVICE_INFO = *mut RID_DEVICE_INFO;
+extern "system" {
+ pub fn GetRawInputDeviceInfoA(
+ hDevice: HANDLE,
+ uiCommand: UINT,
+ pData: LPVOID,
+ pcbSize: PUINT,
+ ) -> UINT;
+ pub fn GetRawInputDeviceInfoW(
+ hDevice: HANDLE,
+ uiCommand: UINT,
+ pData: LPVOID,
+ pcbSize: PUINT,
+ ) -> UINT;
+ pub fn GetRawInputBuffer(
+ pData: PRAWINPUT,
+ pcbSize: PUINT,
+ cbSizeHeader: UINT,
+ ) -> UINT;
+}
+STRUCT!{struct RAWINPUTDEVICE {
+ usUsagePage: USHORT,
+ usUsage: USHORT,
+ dwFlags: DWORD,
+ hwndTarget: HWND,
+}}
+pub type PRAWINPUTDEVICE = *mut RAWINPUTDEVICE;
+pub type LPRAWINPUTDEVICE = *mut RAWINPUTDEVICE;
+pub type PCRAWINPUTDEVICE = *const RAWINPUTDEVICE;
+pub const RIDEV_REMOVE: DWORD = 0x00000001;
+pub const RIDEV_EXCLUDE: DWORD = 0x00000010;
+pub const RIDEV_PAGEONLY: DWORD = 0x00000020;
+pub const RIDEV_NOLEGACY: DWORD = 0x00000030;
+pub const RIDEV_INPUTSINK: DWORD = 0x00000100;
+pub const RIDEV_CAPTUREMOUSE: DWORD = 0x00000200;
+pub const RIDEV_NOHOTKEYS: DWORD = 0x00000200;
+pub const RIDEV_APPKEYS: DWORD = 0x00000400;
+pub const RIDEV_EXINPUTSINK: DWORD = 0x00001000;
+pub const RIDEV_DEVNOTIFY: DWORD = 0x00002000;
+pub const RIDEV_EXMODEMASK: DWORD = 0x000000F0;
+pub const GIDC_ARRIVAL: DWORD = 1;
+pub const GIDC_REMOVAL: DWORD = 2;
+extern "system" {
+ pub fn RegisterRawInputDevices(
+ pRawInputDevices: PCRAWINPUTDEVICE,
+ uiNumDevices: UINT,
+ cbSize: UINT,
+ ) -> BOOL;
+ pub fn GetRegisteredRawInputDevices(
+ pRawInputDevices: PRAWINPUTDEVICE,
+ puiNumDevices: PUINT,
+ cbSize: UINT,
+ ) -> UINT;
+}
+STRUCT!{struct RAWINPUTDEVICELIST {
+ hDevice: HANDLE,
+ dwType: DWORD,
+}}
+pub type PRAWINPUTDEVICELIST = *mut RAWINPUTDEVICELIST;
+extern "system" {
+ pub fn GetRawInputDeviceList(
+ pRawInputDeviceList: PRAWINPUTDEVICELIST,
+ puiNumDevices: PUINT,
+ cbSize: UINT,
+ ) -> UINT;
+ pub fn DefRawInputProc(
+ paRawInput: *mut PRAWINPUT,
+ nInput: INT,
+ cbSizeHeader: UINT,
+ ) -> LRESULT;
+ pub fn ChangeWindowMessageFilter(
+ message: UINT,
+ dwFlag: DWORD,
+ ) -> BOOL;
+}
+//15165
+STRUCT!{struct CHANGEFILTERSTRUCT {
+ cbSize: DWORD,
+ ExtStatus: DWORD,
+}}
+extern "system" {
+ pub fn ChangeWindowMessageFilterEx(
+ hwnd: HWND,
+ message: UINT,
+ action: DWORD,
+ pChangeFilterStruct: PCHANGEFILTERSTRUCT,
+ ) -> BOOL;
+}
+pub type PCHANGEFILTERSTRUCT = *mut CHANGEFILTERSTRUCT;
+//15427
+pub const NID_INTEGRATED_TOUCH: UINT = 0x00000001;
+pub const NID_EXTERNAL_TOUCH: UINT = 0x00000002;
+pub const NID_INTEGRATED_PEN: UINT = 0x00000004;
+pub const NID_EXTERNAL_PEN: UINT = 0x00000008;
+pub const NID_MULTI_INPUT: UINT = 0x00000040;
+pub const NID_READY: UINT = 0x00000080;
+pub const MAX_STR_BLOCKREASON: usize = 256;
+extern "system" {
+ pub fn ShutdownBlockReasonCreate(
+ hWnd: HWND,
+ pwszReason: LPCWSTR,
+ ) -> BOOL;
+ pub fn ShutdownBlockReasonQuery(
+ hWnd: HWND,
+ pwszBuff: LPWSTR,
+ pcchBuff: *mut DWORD,
+ ) -> BOOL;
+ pub fn ShutdownBlockReasonDestroy(
+ hWnd: HWND,
+ ) -> BOOL;
+}
+//15615
+extern "system" {
+ pub fn IsImmersiveProcess(
+ hProcess: HANDLE,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/winver.rs b/vendor/winapi/src/um/winver.rs
new file mode 100644
index 000000000..5d25c678f
--- /dev/null
+++ b/vendor/winapi/src/um/winver.rs
@@ -0,0 +1,53 @@
+// 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
+//! Version management functions, types, and definitions
+use ctypes::c_void;
+use shared::minwindef::{BOOL, DWORD, LPCVOID, LPVOID, PUINT};
+use um::winnt::{LPCSTR, LPCWSTR, LPSTR, LPWSTR};
+extern "system" {
+ pub fn GetFileVersionInfoSizeA(
+ lptstrFilename: LPCSTR,
+ lpdwHandle: *mut DWORD,
+ ) -> DWORD;
+ pub fn GetFileVersionInfoSizeW(
+ lptstrFilename: LPCWSTR,
+ lpdwHandle: *mut DWORD,
+ ) -> DWORD;
+ pub fn GetFileVersionInfoA(
+ lptstrFilename: LPCSTR,
+ dwHandle: DWORD,
+ dwLen: DWORD,
+ lpData: *mut c_void,
+ ) -> BOOL;
+ pub fn GetFileVersionInfoW(
+ lptstrFilename: LPCWSTR,
+ dwHandle: DWORD,
+ dwLen: DWORD,
+ lpData: *mut c_void,
+ ) -> BOOL;
+ pub fn VerQueryValueA(
+ pBlock: LPCVOID,
+ lpSubBlock: LPCSTR,
+ lplpBuffer: &mut LPVOID,
+ puLen: PUINT,
+ ) -> BOOL;
+ pub fn VerQueryValueW(
+ pBlock: LPCVOID,
+ lpSubBlock: LPCWSTR,
+ lplpBuffer: &mut LPVOID,
+ puLen: PUINT,
+ ) -> BOOL;
+ pub fn VerLanguageNameA(
+ wLang: DWORD,
+ szLang: LPSTR,
+ cchLang: DWORD,
+ ) -> DWORD;
+ pub fn VerLanguageNameW(
+ wLang: DWORD,
+ szLang: LPWSTR,
+ cchLang: DWORD,
+ ) -> DWORD;
+}
diff --git a/vendor/winapi/src/um/wlanapi.rs b/vendor/winapi/src/um/wlanapi.rs
new file mode 100644
index 000000000..9584509da
--- /dev/null
+++ b/vendor/winapi/src/um/wlanapi.rs
@@ -0,0 +1,1459 @@
+// 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.
+//! Definitions and data structures for wlan auto config client side API.
+use shared::devpropdef::DEVPROPKEY;
+use shared::guiddef::{GUID, LPGUID};
+use shared::minwindef::{BOOL, BYTE, DWORD, LPBYTE, PBOOL, PBYTE, PDWORD, PUCHAR, ULONG, USHORT};
+use shared::windef::HWND;
+use shared::windot11::{
+ DOT11_COUNTRY_OR_REGION_STRING, DOT11_HESSID, DOT11_MAC_ADDRESS, DOT11_PHY_TYPE,
+ DOT11_RATE_SET_MAX_LENGTH, PDOT11_BSSID_LIST, PDOT11_HESSID, PDOT11_MAC_ADDRESS,
+};
+use shared::wlantypes::{
+ DOT11_ACCESSNETWORKOPTIONS, DOT11_AUTH_ALGORITHM, DOT11_AUTH_CIPHER_PAIR, DOT11_BSS_TYPE,
+ DOT11_CIPHER_ALGORITHM, DOT11_SSID, DOT11_VENUEINFO, PDOT11_ACCESSNETWORKOPTIONS, PDOT11_SSID,
+};
+use um::eaptypes::EAP_METHOD_TYPE;
+use um::l2cmn::{
+ L2_NOTIFICATION_CODE_PUBLIC_BEGIN, L2_NOTIFICATION_CODE_V2_BEGIN, L2_NOTIFICATION_DATA,
+ L2_NOTIFICATION_SOURCE_ALL, L2_NOTIFICATION_SOURCE_NONE, L2_NOTIFICATION_SOURCE_ONEX,
+ L2_NOTIFICATION_SOURCE_WLAN_ACM, L2_NOTIFICATION_SOURCE_WLAN_HNWK,
+ L2_NOTIFICATION_SOURCE_WLAN_IHV, L2_NOTIFICATION_SOURCE_WLAN_MSM,
+ L2_NOTIFICATION_SOURCE_WLAN_SECURITY, L2_PROFILE_MAX_NAME_LENGTH,
+ L2_REASON_CODE_DOT11_AC_BASE, L2_REASON_CODE_DOT11_MSM_BASE,
+ L2_REASON_CODE_DOT11_SECURITY_BASE, L2_REASON_CODE_GROUP_SIZE, L2_REASON_CODE_PROFILE_BASE,
+ L2_REASON_CODE_SUCCESS, L2_REASON_CODE_UNKNOWN,
+};
+use um::winnt::{
+ BOOLEAN, DELETE, FILE_EXECUTE, FILE_READ_DATA, FILE_WRITE_DATA, HANDLE, LONG, LPCWSTR, LPWSTR,
+ PHANDLE, PVOID, PWCHAR, STANDARD_RIGHTS_EXECUTE, STANDARD_RIGHTS_READ, STANDARD_RIGHTS_WRITE,
+ ULONGLONG, WCHAR, WRITE_DAC,
+};
+pub const WLAN_API_VERSION_1_0: DWORD = 0x00000001;
+pub const WLAN_API_VERSION_2_0: DWORD = 0x00000002;
+#[inline]
+pub fn WLAN_API_VERSION_MAJOR(v: u32) -> u32 {
+ v & 0xffff
+}
+#[inline]
+pub fn WLAN_API_VERSION_MINOR(v: u32) -> u32 {
+ v >> 16
+}
+#[inline]
+pub fn WLAN_API_MAKE_VERSION(major: u32, minor: u32) -> u32 {
+ minor << 16 | major
+}
+pub const WLAN_API_VERSION: u32 = WLAN_API_VERSION_2_0;
+pub const WLAN_MAX_NAME_LENGTH: usize = L2_PROFILE_MAX_NAME_LENGTH;
+pub const WLAN_PROFILE_GROUP_POLICY: DWORD = 0x00000001;
+pub const WLAN_PROFILE_USER: DWORD = 0x00000002;
+pub const WLAN_PROFILE_GET_PLAINTEXT_KEY: DWORD = 0x00000004;
+pub const WLAN_PROFILE_CONNECTION_MODE_SET_BY_CLIENT: DWORD = 0x00010000;
+pub const WLAN_PROFILE_CONNECTION_MODE_AUTO: DWORD = 0x00020000;
+pub const WLAN_SET_EAPHOST_DATA_ALL_USERS: DWORD = 0x00000001;
+STRUCT!{struct WLAN_PROFILE_INFO {
+ strProfileName: [WCHAR; WLAN_MAX_NAME_LENGTH],
+ dwFlags: DWORD,
+}}
+pub type PWLAN_PROFILE_INFO = *mut WLAN_PROFILE_INFO;
+STRUCT!{struct DOT11_NETWORK {
+ dot11Ssid: DOT11_SSID,
+ dot11BssType: DOT11_BSS_TYPE,
+}}
+pub type PDOT11_NETWORK = *mut DOT11_NETWORK;
+pub const DOT11_PSD_IE_MAX_DATA_SIZE: DWORD = 240;
+pub const DOT11_PSD_IE_MAX_ENTRY_NUMBER: DWORD = 5;
+STRUCT!{struct WLAN_RAW_DATA {
+ dwDataSize: DWORD,
+ DataBlob: [BYTE; 1],
+}}
+pub type PWLAN_RAW_DATA = *mut WLAN_RAW_DATA;
+STRUCT!{struct WLAN_RAW_DATA_LIST_DataList {
+ dwDataOffset: DWORD,
+ dwDataSize: DWORD,
+}}
+STRUCT!{struct WLAN_RAW_DATA_LIST {
+ dwTotalSize: DWORD,
+ dwNumberOfItems: DWORD,
+ DataList: [WLAN_RAW_DATA_LIST_DataList; 1],
+}}
+pub type PWLAN_RAW_DATA_LIST = *mut WLAN_RAW_DATA_LIST;
+ENUM!{enum WLAN_CONNECTION_MODE {
+ wlan_connection_mode_profile = 0,
+ wlan_connection_mode_temporary_profile = 1,
+ wlan_connection_mode_discovery_secure = 2,
+ wlan_connection_mode_discovery_unsecure = 3,
+ wlan_connection_mode_auto = 4,
+ wlan_connection_mode_invalid = 5,
+}}
+pub type PWLAN_CONNECTION_MODE = *mut WLAN_CONNECTION_MODE;
+pub type WLAN_REASON_CODE = DWORD;
+pub type PWLAN_REASON_CODE = *mut DWORD;
+pub const WLAN_REASON_CODE_SUCCESS: WLAN_REASON_CODE = L2_REASON_CODE_SUCCESS;
+pub const WLAN_REASON_CODE_UNKNOWN: WLAN_REASON_CODE = L2_REASON_CODE_UNKNOWN;
+pub const WLAN_REASON_CODE_RANGE_SIZE: WLAN_REASON_CODE = L2_REASON_CODE_GROUP_SIZE;
+pub const WLAN_REASON_CODE_BASE: WLAN_REASON_CODE = L2_REASON_CODE_DOT11_AC_BASE;
+pub const WLAN_REASON_CODE_AC_BASE: WLAN_REASON_CODE = L2_REASON_CODE_DOT11_AC_BASE;
+pub const WLAN_REASON_CODE_AC_CONNECT_BASE: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_BASE
+ + WLAN_REASON_CODE_RANGE_SIZE / 2;
+pub const WLAN_REASON_CODE_AC_END: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_BASE
+ + WLAN_REASON_CODE_RANGE_SIZE - 1;
+pub const WLAN_REASON_CODE_PROFILE_BASE: WLAN_REASON_CODE = L2_REASON_CODE_PROFILE_BASE;
+pub const WLAN_REASON_CODE_PROFILE_CONNECT_BASE: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+ + WLAN_REASON_CODE_RANGE_SIZE / 2;
+pub const WLAN_REASON_CODE_PROFILE_END: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+ + WLAN_REASON_CODE_RANGE_SIZE - 1;
+pub const WLAN_REASON_CODE_MSM_BASE: WLAN_REASON_CODE = L2_REASON_CODE_DOT11_MSM_BASE;
+pub const WLAN_REASON_CODE_MSM_CONNECT_BASE: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_BASE
+ + WLAN_REASON_CODE_RANGE_SIZE / 2;
+pub const WLAN_REASON_CODE_MSM_END: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_BASE
+ + WLAN_REASON_CODE_RANGE_SIZE - 1;
+pub const WLAN_REASON_CODE_MSMSEC_BASE: WLAN_REASON_CODE = L2_REASON_CODE_DOT11_SECURITY_BASE;
+pub const WLAN_REASON_CODE_MSMSEC_CONNECT_BASE: WLAN_REASON_CODE = WLAN_REASON_CODE_MSMSEC_BASE
+ + WLAN_REASON_CODE_RANGE_SIZE / 2;
+pub const WLAN_REASON_CODE_MSMSEC_END: WLAN_REASON_CODE = WLAN_REASON_CODE_MSMSEC_BASE
+ + WLAN_REASON_CODE_RANGE_SIZE - 1;
+pub const WLAN_REASON_CODE_NETWORK_NOT_COMPATIBLE: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_BASE + 1;
+pub const WLAN_REASON_CODE_PROFILE_NOT_COMPATIBLE: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_BASE + 2;
+pub const WLAN_REASON_CODE_NO_AUTO_CONNECTION: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE
+ + 1;
+pub const WLAN_REASON_CODE_NOT_VISIBLE: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE + 2;
+pub const WLAN_REASON_CODE_GP_DENIED: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE + 3;
+pub const WLAN_REASON_CODE_USER_DENIED: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE + 4;
+pub const WLAN_REASON_CODE_BSS_TYPE_NOT_ALLOWED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_AC_CONNECT_BASE + 5;
+pub const WLAN_REASON_CODE_IN_FAILED_LIST: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE + 6;
+pub const WLAN_REASON_CODE_IN_BLOCKED_LIST: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE
+ + 7;
+pub const WLAN_REASON_CODE_SSID_LIST_TOO_LONG: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE
+ + 8;
+pub const WLAN_REASON_CODE_CONNECT_CALL_FAIL: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE
+ + 9;
+pub const WLAN_REASON_CODE_SCAN_CALL_FAIL: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE
+ + 10;
+pub const WLAN_REASON_CODE_NETWORK_NOT_AVAILABLE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_AC_CONNECT_BASE + 11;
+pub const WLAN_REASON_CODE_PROFILE_CHANGED_OR_DELETED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_AC_CONNECT_BASE + 12;
+pub const WLAN_REASON_CODE_KEY_MISMATCH: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE + 13;
+pub const WLAN_REASON_CODE_USER_NOT_RESPOND: WLAN_REASON_CODE = WLAN_REASON_CODE_AC_CONNECT_BASE
+ + 14;
+pub const WLAN_REASON_CODE_AP_PROFILE_NOT_ALLOWED_FOR_CLIENT: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_AC_CONNECT_BASE + 15;
+pub const WLAN_REASON_CODE_AP_PROFILE_NOT_ALLOWED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_AC_CONNECT_BASE + 16;
+pub const WLAN_REASON_CODE_HOTSPOT2_PROFILE_DENIED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_AC_CONNECT_BASE + 17;
+pub const WLAN_REASON_CODE_INVALID_PROFILE_SCHEMA: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+ + 1;
+pub const WLAN_REASON_CODE_PROFILE_MISSING: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE + 2;
+pub const WLAN_REASON_CODE_INVALID_PROFILE_NAME: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+ + 3;
+pub const WLAN_REASON_CODE_INVALID_PROFILE_TYPE: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+ + 4;
+pub const WLAN_REASON_CODE_INVALID_PHY_TYPE: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE + 5;
+pub const WLAN_REASON_CODE_MSM_SECURITY_MISSING: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+ + 6;
+pub const WLAN_REASON_CODE_IHV_SECURITY_NOT_SUPPORTED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_PROFILE_BASE + 7;
+pub const WLAN_REASON_CODE_IHV_OUI_MISMATCH: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE + 8;
+pub const WLAN_REASON_CODE_IHV_OUI_MISSING: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE + 9;
+pub const WLAN_REASON_CODE_IHV_SETTINGS_MISSING: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+ + 10;
+pub const WLAN_REASON_CODE_CONFLICT_SECURITY: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+ + 11;
+pub const WLAN_REASON_CODE_SECURITY_MISSING: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE + 12;
+pub const WLAN_REASON_CODE_INVALID_BSS_TYPE: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE + 13;
+pub const WLAN_REASON_CODE_INVALID_ADHOC_CONNECTION_MODE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_PROFILE_BASE + 14;
+pub const WLAN_REASON_CODE_NON_BROADCAST_SET_FOR_ADHOC: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_PROFILE_BASE + 15;
+pub const WLAN_REASON_CODE_AUTO_SWITCH_SET_FOR_ADHOC: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_PROFILE_BASE + 16;
+pub const WLAN_REASON_CODE_AUTO_SWITCH_SET_FOR_MANUAL_CONNECTION: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_PROFILE_BASE + 17;
+pub const WLAN_REASON_CODE_IHV_SECURITY_ONEX_MISSING: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_PROFILE_BASE + 18;
+pub const WLAN_REASON_CODE_PROFILE_SSID_INVALID: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE
+ + 19;
+pub const WLAN_REASON_CODE_TOO_MANY_SSID: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE + 20;
+pub const WLAN_REASON_CODE_IHV_CONNECTIVITY_NOT_SUPPORTED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_PROFILE_BASE + 21;
+pub const WLAN_REASON_CODE_BAD_MAX_NUMBER_OF_CLIENTS_FOR_AP: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_PROFILE_BASE + 22;
+pub const WLAN_REASON_CODE_INVALID_CHANNEL: WLAN_REASON_CODE = WLAN_REASON_CODE_PROFILE_BASE + 23;
+pub const WLAN_REASON_CODE_OPERATION_MODE_NOT_SUPPORTED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_PROFILE_BASE + 24;
+pub const WLAN_REASON_CODE_AUTO_AP_PROFILE_NOT_ALLOWED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_PROFILE_BASE + 25;
+pub const WLAN_REASON_CODE_AUTO_CONNECTION_NOT_ALLOWED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_PROFILE_BASE + 26;
+pub const WLAN_REASON_CODE_HOTSPOT2_PROFILE_NOT_ALLOWED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_PROFILE_BASE + 27;
+pub const WLAN_REASON_CODE_UNSUPPORTED_SECURITY_SET_BY_OS: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSM_BASE + 1;
+pub const WLAN_REASON_CODE_UNSUPPORTED_SECURITY_SET: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_BASE
+ + 2;
+pub const WLAN_REASON_CODE_BSS_TYPE_UNMATCH: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_BASE + 3;
+pub const WLAN_REASON_CODE_PHY_TYPE_UNMATCH: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_BASE + 4;
+pub const WLAN_REASON_CODE_DATARATE_UNMATCH: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_BASE + 5;
+pub const WLAN_REASON_CODE_USER_CANCELLED: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+ + 1;
+pub const WLAN_REASON_CODE_ASSOCIATION_FAILURE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSM_CONNECT_BASE + 2;
+pub const WLAN_REASON_CODE_ASSOCIATION_TIMEOUT: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSM_CONNECT_BASE + 3;
+pub const WLAN_REASON_CODE_PRE_SECURITY_FAILURE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSM_CONNECT_BASE + 4;
+pub const WLAN_REASON_CODE_START_SECURITY_FAILURE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSM_CONNECT_BASE + 5;
+pub const WLAN_REASON_CODE_SECURITY_FAILURE: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+ + 6;
+pub const WLAN_REASON_CODE_SECURITY_TIMEOUT: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+ + 7;
+pub const WLAN_REASON_CODE_ROAMING_FAILURE: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+ + 8;
+pub const WLAN_REASON_CODE_ROAMING_SECURITY_FAILURE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSM_CONNECT_BASE + 9;
+pub const WLAN_REASON_CODE_ADHOC_SECURITY_FAILURE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSM_CONNECT_BASE + 10;
+pub const WLAN_REASON_CODE_DRIVER_DISCONNECTED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSM_CONNECT_BASE + 11;
+pub const WLAN_REASON_CODE_DRIVER_OPERATION_FAILURE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSM_CONNECT_BASE + 12;
+pub const WLAN_REASON_CODE_IHV_NOT_AVAILABLE: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+ + 13;
+pub const WLAN_REASON_CODE_IHV_NOT_RESPONDING: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+ + 14;
+pub const WLAN_REASON_CODE_DISCONNECT_TIMEOUT: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+ + 15;
+pub const WLAN_REASON_CODE_INTERNAL_FAILURE: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+ + 16;
+pub const WLAN_REASON_CODE_UI_REQUEST_TIMEOUT: WLAN_REASON_CODE = WLAN_REASON_CODE_MSM_CONNECT_BASE
+ + 17;
+pub const WLAN_REASON_CODE_TOO_MANY_SECURITY_ATTEMPTS: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSM_CONNECT_BASE + 18;
+pub const WLAN_REASON_CODE_AP_STARTING_FAILURE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSM_CONNECT_BASE + 19;
+pub const WLAN_REASON_CODE_MSMSEC_MIN: WLAN_REASON_CODE = WLAN_REASON_CODE_MSMSEC_BASE;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_INVALID_KEY_INDEX: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 1;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_PSK_PRESENT: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 2;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_KEY_LENGTH: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 3;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_PSK_LENGTH: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 4;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_NO_AUTH_CIPHER_SPECIFIED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 5;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_TOO_MANY_AUTH_CIPHER_SPECIFIED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 6;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_DUPLICATE_AUTH_CIPHER: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 7;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_RAWDATA_INVALID: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 8;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_INVALID_AUTH_CIPHER: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 9;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_ONEX_DISABLED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 10;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_ONEX_ENABLED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 11;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_INVALID_PMKCACHE_MODE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 12;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_INVALID_PMKCACHE_SIZE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 13;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_INVALID_PMKCACHE_TTL: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 14;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_INVALID_PREAUTH_MODE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 15;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_INVALID_PREAUTH_THROTTLE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 16;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_PREAUTH_ONLY_ENABLED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 17;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_NETWORK: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 18;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_NIC: WLAN_REASON_CODE = WLAN_REASON_CODE_MSMSEC_BASE
+ + 19;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_PROFILE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 20;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_DISCOVERY: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 21;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_PASSPHRASE_CHAR: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 22;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_KEYMATERIAL_CHAR: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 23;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_WRONG_KEYTYPE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 24;
+pub const WLAN_REASON_CODE_MSMSEC_MIXED_CELL: WLAN_REASON_CODE = WLAN_REASON_CODE_MSMSEC_BASE + 25;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_AUTH_TIMERS_INVALID: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 26;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_INVALID_GKEY_INTV: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 27;
+pub const WLAN_REASON_CODE_MSMSEC_TRANSITION_NETWORK: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 28;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_KEY_UNMAPPED_CHAR: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 29;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_PROFILE_AUTH: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 30;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_PROFILE_CIPHER: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 31;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_SAFE_MODE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 32;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_PROFILE_SAFE_MODE_NIC: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 33;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_PROFILE_SAFE_MODE_NW: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 34;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_UNSUPPORTED_AUTH: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 35;
+pub const WLAN_REASON_CODE_MSMSEC_PROFILE_UNSUPPORTED_CIPHER: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 36;
+pub const WLAN_REASON_CODE_MSMSEC_CAPABILITY_MFP_NW_NIC: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_BASE + 37;
+pub const WLAN_REASON_CODE_MSMSEC_UI_REQUEST_FAILURE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 1;
+pub const WLAN_REASON_CODE_MSMSEC_AUTH_START_TIMEOUT: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 2;
+pub const WLAN_REASON_CODE_MSMSEC_AUTH_SUCCESS_TIMEOUT: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 3;
+pub const WLAN_REASON_CODE_MSMSEC_KEY_START_TIMEOUT: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 4;
+pub const WLAN_REASON_CODE_MSMSEC_KEY_SUCCESS_TIMEOUT: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 5;
+pub const WLAN_REASON_CODE_MSMSEC_M3_MISSING_KEY_DATA: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 6;
+pub const WLAN_REASON_CODE_MSMSEC_M3_MISSING_IE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 7;
+pub const WLAN_REASON_CODE_MSMSEC_M3_MISSING_GRP_KEY: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 8;
+pub const WLAN_REASON_CODE_MSMSEC_PR_IE_MATCHING: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 9;
+pub const WLAN_REASON_CODE_MSMSEC_SEC_IE_MATCHING: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 10;
+pub const WLAN_REASON_CODE_MSMSEC_NO_PAIRWISE_KEY: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 11;
+pub const WLAN_REASON_CODE_MSMSEC_G1_MISSING_KEY_DATA: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 12;
+pub const WLAN_REASON_CODE_MSMSEC_G1_MISSING_GRP_KEY: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 13;
+pub const WLAN_REASON_CODE_MSMSEC_PEER_INDICATED_INSECURE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 14;
+pub const WLAN_REASON_CODE_MSMSEC_NO_AUTHENTICATOR: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 15;
+pub const WLAN_REASON_CODE_MSMSEC_NIC_FAILURE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 16;
+pub const WLAN_REASON_CODE_MSMSEC_CANCELLED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 17;
+pub const WLAN_REASON_CODE_MSMSEC_KEY_FORMAT: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 18;
+pub const WLAN_REASON_CODE_MSMSEC_DOWNGRADE_DETECTED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 19;
+pub const WLAN_REASON_CODE_MSMSEC_PSK_MISMATCH_SUSPECTED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 20;
+pub const WLAN_REASON_CODE_MSMSEC_FORCED_FAILURE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 21;
+pub const WLAN_REASON_CODE_MSMSEC_M3_TOO_MANY_RSNIE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 22;
+pub const WLAN_REASON_CODE_MSMSEC_M2_MISSING_KEY_DATA: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 23;
+pub const WLAN_REASON_CODE_MSMSEC_M2_MISSING_IE: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 24;
+pub const WLAN_REASON_CODE_MSMSEC_AUTH_WCN_COMPLETED: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 25;
+pub const WLAN_REASON_CODE_MSMSEC_M3_MISSING_MGMT_GRP_KEY: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 26;
+pub const WLAN_REASON_CODE_MSMSEC_G1_MISSING_MGMT_GRP_KEY: WLAN_REASON_CODE =
+ WLAN_REASON_CODE_MSMSEC_CONNECT_BASE + 27;
+pub const WLAN_REASON_CODE_MSMSEC_MAX: WLAN_REASON_CODE = WLAN_REASON_CODE_MSMSEC_END;
+pub type WLAN_SIGNAL_QUALITY = ULONG;
+pub type PWLAN_SIGNAL_QUALITY = *mut ULONG;
+pub const WLAN_AVAILABLE_NETWORK_CONNECTED: DWORD = 0x00000001;
+pub const WLAN_AVAILABLE_NETWORK_HAS_PROFILE: DWORD = 0x00000002;
+pub const WLAN_AVAILABLE_NETWORK_CONSOLE_USER_PROFILE: DWORD = 0x00000004;
+pub const WLAN_AVAILABLE_NETWORK_INTERWORKING_SUPPORTED: DWORD = 0x00000008;
+pub const WLAN_AVAILABLE_NETWORK_HOTSPOT2_ENABLED: DWORD = 0x00000010;
+pub const WLAN_AVAILABLE_NETWORK_ANQP_SUPPORTED: DWORD = 0x00000020;
+pub const WLAN_AVAILABLE_NETWORK_HOTSPOT2_DOMAIN: DWORD = 0x00000040;
+pub const WLAN_AVAILABLE_NETWORK_HOTSPOT2_ROAMING: DWORD = 0x00000080;
+pub const WLAN_AVAILABLE_NETWORK_AUTO_CONNECT_FAILED: DWORD = 0x00000100;
+pub const WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_ADHOC_PROFILES: DWORD = 0x00000001;
+pub const WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_MANUAL_HIDDEN_PROFILES: DWORD = 0x00000002;
+STRUCT!{struct WLAN_RATE_SET {
+ uRateSetLength: ULONG,
+ usRateSet: [USHORT; DOT11_RATE_SET_MAX_LENGTH],
+}}
+pub type PWLAN_RATE_SET = *mut WLAN_RATE_SET;
+pub const WLAN_MAX_PHY_TYPE_NUMBER: usize = 8;
+STRUCT!{struct WLAN_AVAILABLE_NETWORK {
+ strProfileName: [WCHAR; WLAN_MAX_NAME_LENGTH],
+ dot11Ssid: DOT11_SSID,
+ dot11BssType: DOT11_BSS_TYPE,
+ uNumberOfBssids: ULONG,
+ bNetworkConnectable: BOOL,
+ wlanNotConnectableReason: WLAN_REASON_CODE,
+ uNumberOfPhyTypes: ULONG,
+ dot11PhyTypes: [DOT11_PHY_TYPE; WLAN_MAX_PHY_TYPE_NUMBER],
+ bMorePhyTypes: BOOL,
+ wlanSignalQuality: WLAN_SIGNAL_QUALITY,
+ bSecurityEnabled: BOOL,
+ dot11DefaultAuthAlgorithm: DOT11_AUTH_ALGORITHM,
+ dot11DefaultCipherAlgorithm: DOT11_CIPHER_ALGORITHM,
+ dwFlags: DWORD,
+ dwReserved: DWORD,
+}}
+pub type PWLAN_AVAILABLE_NETWORK = *mut WLAN_AVAILABLE_NETWORK;
+STRUCT!{struct WLAN_AVAILABLE_NETWORK_V2 {
+ strProfileName: [WCHAR; WLAN_MAX_NAME_LENGTH],
+ dot11Ssid: DOT11_SSID,
+ dot11BssType: DOT11_BSS_TYPE,
+ uNumberOfBssids: ULONG,
+ bNetworkConnectable: BOOL,
+ wlanNotConnectableReason: WLAN_REASON_CODE,
+ uNumberOfPhyTypes: ULONG,
+ dot11PhyTypes: [DOT11_PHY_TYPE; WLAN_MAX_PHY_TYPE_NUMBER],
+ bMorePhyTypes: BOOL,
+ wlanSignalQuality: WLAN_SIGNAL_QUALITY,
+ bSecurityEnabled: BOOL,
+ dot11DefaultAuthAlgorithm: DOT11_AUTH_ALGORITHM,
+ dot11DefaultCipherAlgorithm: DOT11_CIPHER_ALGORITHM,
+ dwFlags: DWORD,
+ AccessNetworkOptions: DOT11_ACCESSNETWORKOPTIONS,
+ dot11HESSID: DOT11_HESSID,
+ VenueInfo: DOT11_VENUEINFO,
+ dwReserved: DWORD,
+}}
+pub type PWLAN_AVAILABLE_NETWORK_V2 = *mut WLAN_AVAILABLE_NETWORK_V2;
+STRUCT!{struct WLAN_BSS_ENTRY {
+ dot11Ssid: DOT11_SSID,
+ uPhyId: ULONG,
+ dot11Bssid: DOT11_MAC_ADDRESS,
+ dot11BssType: DOT11_BSS_TYPE,
+ dot11BssPhyType: DOT11_PHY_TYPE,
+ lRssi: LONG,
+ uLinkQuality: ULONG,
+ bInRegDomain: BOOLEAN,
+ usBeaconPeriod: USHORT,
+ ullTimestamp: ULONGLONG,
+ ullHostTimestamp: ULONGLONG,
+ usCapabilityInformation: USHORT,
+ ulChCenterFrequency: ULONG,
+ wlanRateSet: WLAN_RATE_SET,
+ ulIeOffset: ULONG,
+ ulIeSize: ULONG,
+}}
+pub type PWLAN_BSS_ENTRY = *mut WLAN_BSS_ENTRY;
+STRUCT!{struct WLAN_BSS_LIST {
+ dwTotalSize: DWORD,
+ dwNumberOfItems: DWORD,
+ wlanBssEntries: [WLAN_BSS_ENTRY; 1],
+}}
+pub type PWLAN_BSS_LIST = *mut WLAN_BSS_LIST;
+ENUM!{enum WLAN_INTERFACE_STATE {
+ wlan_interface_state_not_ready = 0,
+ wlan_interface_state_connected = 1,
+ wlan_interface_state_ad_hoc_network_formed = 2,
+ wlan_interface_state_disconnecting = 3,
+ wlan_interface_state_disconnected = 4,
+ wlan_interface_state_associating = 5,
+ wlan_interface_state_discovering = 6,
+ wlan_interface_state_authenticating = 7,
+}}
+pub type PWLAN_INTERFACE_STATE = *mut WLAN_INTERFACE_STATE;
+ENUM!{enum WLAN_ADHOC_NETWORK_STATE {
+ wlan_adhoc_network_state_formed = 0,
+ wlan_adhoc_network_state_connected = 1,
+}}
+pub type PWLAN_ADHOC_NETWORK_STATE = *mut WLAN_ADHOC_NETWORK_STATE;
+STRUCT!{struct WLAN_INTERFACE_INFO {
+ InterfaceGuid: GUID,
+ strInterfaceDescription: [WCHAR; WLAN_MAX_NAME_LENGTH],
+ isState: WLAN_INTERFACE_STATE,
+}}
+pub type PWLAN_INTERFACE_INFO = *mut WLAN_INTERFACE_INFO;
+STRUCT!{struct WLAN_ASSOCIATION_ATTRIBUTES {
+ dot11Ssid: DOT11_SSID,
+ dot11BssType: DOT11_BSS_TYPE,
+ dot11Bssid: DOT11_MAC_ADDRESS,
+ dot11PhyType: DOT11_PHY_TYPE,
+ uDot11PhyIndex: ULONG,
+ wlanSignalQuality: WLAN_SIGNAL_QUALITY,
+ ulRxRate: ULONG,
+ ulTxRate: ULONG,
+}}
+pub type PWLAN_ASSOCIATION_ATTRIBUTES = *mut WLAN_ASSOCIATION_ATTRIBUTES;
+STRUCT!{struct WLAN_SECURITY_ATTRIBUTES {
+ bSecurityEnabled: BOOL,
+ bOneXEnabled: BOOL,
+ dot11AuthAlgorithm: DOT11_AUTH_ALGORITHM,
+ dot11CipherAlgorithm: DOT11_CIPHER_ALGORITHM,
+}}
+pub type PWLAN_SECURITY_ATTRIBUTES = *mut WLAN_SECURITY_ATTRIBUTES;
+STRUCT!{struct WLAN_CONNECTION_ATTRIBUTES {
+ isState: WLAN_INTERFACE_STATE,
+ wlanConnectionMode: WLAN_CONNECTION_MODE,
+ strProfileName: [WCHAR; WLAN_MAX_NAME_LENGTH],
+ wlanAssociationAttributes: WLAN_ASSOCIATION_ATTRIBUTES,
+ wlanSecurityAttributes: WLAN_SECURITY_ATTRIBUTES,
+}}
+pub type PWLAN_CONNECTION_ATTRIBUTES = *mut WLAN_CONNECTION_ATTRIBUTES;
+ENUM!{enum DOT11_RADIO_STATE {
+ dot11_radio_state_unknown = 0,
+ dot11_radio_state_on = 1,
+ dot11_radio_state_off = 2,
+}}
+pub type PDOT11_RADIO_STATE = *mut DOT11_RADIO_STATE;
+pub const WLAN_MAX_PHY_INDEX: usize = 64;
+STRUCT!{struct WLAN_PHY_RADIO_STATE {
+ dwPhyIndex: DWORD,
+ dot11SoftwareRadioState: DOT11_RADIO_STATE,
+ dot11HardwareRadioState: DOT11_RADIO_STATE,
+}}
+pub type PWLAN_PHY_RADIO_STATE = *mut WLAN_PHY_RADIO_STATE;
+STRUCT!{struct WLAN_RADIO_STATE {
+ dwNumberOfPhys: DWORD,
+ PhyRadioState: [WLAN_PHY_RADIO_STATE; WLAN_MAX_PHY_INDEX],
+}}
+pub type PWLAN_RADIO_STATE = *mut WLAN_RADIO_STATE;
+ENUM!{enum WLAN_OPERATIONAL_STATE {
+ wlan_operational_state_unknown = 0,
+ wlan_operational_state_off = 1,
+ wlan_operational_state_on = 2,
+ wlan_operational_state_going_off = 3,
+ wlan_operational_state_going_on = 4,
+}}
+pub type PWLAN_OPERATIONAL_STATE = *mut WLAN_OPERATIONAL_STATE;
+ENUM!{enum WLAN_INTERFACE_TYPE {
+ wlan_interface_type_emulated_802_11 = 0,
+ wlan_interface_type_native_802_11 = 1,
+ wlan_interface_type_invalid = 2,
+}}
+pub type PWLAN_INTERFACE_TYPE = *mut WLAN_INTERFACE_TYPE;
+STRUCT!{struct WLAN_INTERFACE_CAPABILITY {
+ interfaceType: WLAN_INTERFACE_TYPE,
+ bDot11DSupported: BOOL,
+ dwMaxDesiredSsidListSize: DWORD,
+ dwMaxDesiredBssidListSize: DWORD,
+ dwNumberOfSupportedPhys: DWORD,
+ dot11PhyTypes: [DOT11_PHY_TYPE; WLAN_MAX_PHY_INDEX],
+}}
+pub type PWLAN_INTERFACE_CAPABILITY = *mut WLAN_INTERFACE_CAPABILITY;
+STRUCT!{struct WLAN_AUTH_CIPHER_PAIR_LIST {
+ dwNumberOfItems: DWORD,
+ pAuthCipherPairList: [DOT11_AUTH_CIPHER_PAIR; 1],
+}}
+pub type PWLAN_AUTH_CIPHER_PAIR_LIST = *mut WLAN_AUTH_CIPHER_PAIR_LIST;
+STRUCT!{struct WLAN_COUNTRY_OR_REGION_STRING_LIST {
+ dwNumberOfItems: DWORD,
+ pCountryOrRegionStringList: [DOT11_COUNTRY_OR_REGION_STRING; 1],
+}}
+pub type PWLAN_COUNTRY_OR_REGION_STRING_LIST = *mut WLAN_COUNTRY_OR_REGION_STRING_LIST;
+STRUCT!{struct WLAN_PROFILE_INFO_LIST {
+ dwNumberOfItems: DWORD,
+ dwIndex: DWORD,
+ ProfileInfo: [WLAN_PROFILE_INFO; 1],
+}}
+pub type PWLAN_PROFILE_INFO_LIST = *mut WLAN_PROFILE_INFO_LIST;
+STRUCT!{struct WLAN_AVAILABLE_NETWORK_LIST {
+ dwNumberOfItems: DWORD,
+ dwIndex: DWORD,
+ Network: [WLAN_AVAILABLE_NETWORK; 1],
+}}
+pub type PWLAN_AVAILABLE_NETWORK_LIST = *mut WLAN_AVAILABLE_NETWORK_LIST;
+STRUCT!{struct WLAN_AVAILABLE_NETWORK_LIST_V2 {
+ dwNumberOfItems: DWORD,
+ dwIndex: DWORD,
+ Network: [WLAN_AVAILABLE_NETWORK_V2; 1],
+}}
+pub type PWLAN_AVAILABLE_NETWORK_LIST_V2 = *mut WLAN_AVAILABLE_NETWORK_LIST_V2;
+STRUCT!{struct WLAN_INTERFACE_INFO_LIST {
+ dwNumberOfItems: DWORD,
+ dwIndex: DWORD,
+ InterfaceInfo: [WLAN_INTERFACE_INFO; 1],
+}}
+pub type PWLAN_INTERFACE_INFO_LIST = *mut WLAN_INTERFACE_INFO_LIST;
+STRUCT!{struct DOT11_NETWORK_LIST {
+ dwNumberOfItems: DWORD,
+ dwIndex: DWORD,
+ Network: [DOT11_NETWORK; 1],
+}}
+pub type PDOT11_NETWORK_LIST = *mut DOT11_NETWORK_LIST;
+ENUM!{enum WLAN_POWER_SETTING {
+ wlan_power_setting_no_saving = 0,
+ wlan_power_setting_low_saving = 1,
+ wlan_power_setting_medium_saving = 2,
+ wlan_power_setting_maximum_saving = 3,
+ wlan_power_setting_invalid = 4,
+}}
+pub type PWLAN_POWER_SETTING = *mut WLAN_POWER_SETTING;
+pub const WLAN_CONNECTION_HIDDEN_NETWORK: DWORD = 0x00000001;
+pub const WLAN_CONNECTION_ADHOC_JOIN_ONLY: DWORD = 0x00000002;
+pub const WLAN_CONNECTION_IGNORE_PRIVACY_BIT: DWORD = 0x00000004;
+pub const WLAN_CONNECTION_EAPOL_PASSTHROUGH: DWORD = 0x00000008;
+pub const WLAN_CONNECTION_PERSIST_DISCOVERY_PROFILE: DWORD = 0x00000010;
+pub const WLAN_CONNECTION_PERSIST_DISCOVERY_PROFILE_CONNECTION_MODE_AUTO: DWORD = 0x00000020;
+pub const WLAN_CONNECTION_PERSIST_DISCOVERY_PROFILE_OVERWRITE_EXISTING: DWORD = 0x00000040;
+STRUCT!{struct WLAN_CONNECTION_PARAMETERS {
+ wlanConnectionMode: WLAN_CONNECTION_MODE,
+ strProfile: LPCWSTR,
+ pDot11Ssid: PDOT11_SSID,
+ pDesiredBssidList: PDOT11_BSSID_LIST,
+ dot11BssType: DOT11_BSS_TYPE,
+ dwFlags: DWORD,
+}}
+pub type PWLAN_CONNECTION_PARAMETERS = *mut WLAN_CONNECTION_PARAMETERS;
+STRUCT!{struct WLAN_CONNECTION_PARAMETERS_V2 {
+ wlanConnectionMode: WLAN_CONNECTION_MODE,
+ strProfile: LPCWSTR,
+ pDot11Ssid: PDOT11_SSID,
+ pDot11Hessid: PDOT11_HESSID,
+ pDesiredBssidList: PDOT11_BSSID_LIST,
+ dot11BssType: DOT11_BSS_TYPE,
+ dwFlags: DWORD,
+ pDot11AccessNetworkOptions: PDOT11_ACCESSNETWORKOPTIONS,
+}}
+pub type PWLAN_CONNECTION_PARAMETERS_V2 = *mut WLAN_CONNECTION_PARAMETERS_V2;
+STRUCT!{struct WLAN_MSM_NOTIFICATION_DATA {
+ wlanConnectionMode: WLAN_CONNECTION_MODE,
+ strProfileName: [WCHAR; WLAN_MAX_NAME_LENGTH],
+ dot11Ssid: DOT11_SSID,
+ dot11BssType: DOT11_BSS_TYPE,
+ dot11MacAddr: DOT11_MAC_ADDRESS,
+ bSecurityEnabled: BOOL,
+ bFirstPeer: BOOL,
+ bLastPeer: BOOL,
+ wlanReasonCode: WLAN_REASON_CODE,
+}}
+pub type PWLAN_MSM_NOTIFICATION_DATA = *mut WLAN_MSM_NOTIFICATION_DATA;
+pub const WLAN_CONNECTION_NOTIFICATION_ADHOC_NETWORK_FORMED: DWORD = 0x00000001;
+pub const WLAN_CONNECTION_NOTIFICATION_CONSOLE_USER_PROFILE: DWORD = 0x00000004;
+STRUCT!{struct WLAN_CONNECTION_NOTIFICATION_DATA {
+ wlanConnectionMode: WLAN_CONNECTION_MODE,
+ strProfileName: [WCHAR; WLAN_MAX_NAME_LENGTH],
+ dot11Ssid: DOT11_SSID,
+ dot11BssType: DOT11_BSS_TYPE,
+ bSecurityEnabled: BOOL,
+ wlanReasonCode: WLAN_REASON_CODE,
+ dwFlags: DWORD,
+ strProfileXml: [WCHAR; 1],
+}}
+pub type PWLAN_CONNECTION_NOTIFICATION_DATA = *mut WLAN_CONNECTION_NOTIFICATION_DATA;
+pub const WLAN_NOTIFICATION_SOURCE_NONE: DWORD = L2_NOTIFICATION_SOURCE_NONE;
+pub const WLAN_NOTIFICATION_SOURCE_ALL: DWORD = L2_NOTIFICATION_SOURCE_ALL;
+pub const WLAN_NOTIFICATION_SOURCE_ACM: DWORD = L2_NOTIFICATION_SOURCE_WLAN_ACM;
+pub const WLAN_NOTIFICATION_SOURCE_MSM: DWORD = L2_NOTIFICATION_SOURCE_WLAN_MSM;
+pub const WLAN_NOTIFICATION_SOURCE_SECURITY: DWORD = L2_NOTIFICATION_SOURCE_WLAN_SECURITY;
+pub const WLAN_NOTIFICATION_SOURCE_IHV: DWORD = L2_NOTIFICATION_SOURCE_WLAN_IHV;
+pub const WLAN_NOTIFICATION_SOURCE_HNWK: DWORD = L2_NOTIFICATION_SOURCE_WLAN_HNWK;
+pub const WLAN_NOTIFICATION_SOURCE_ONEX: DWORD = L2_NOTIFICATION_SOURCE_ONEX;
+ENUM!{enum WLAN_NOTIFICATION_ACM {
+ wlan_notification_acm_start = L2_NOTIFICATION_CODE_PUBLIC_BEGIN,
+ wlan_notification_acm_autoconf_enabled = 1,
+ wlan_notification_acm_autoconf_disabled = 2,
+ wlan_notification_acm_background_scan_enabled = 3,
+ wlan_notification_acm_background_scan_disabled = 4,
+ wlan_notification_acm_bss_type_change = 5,
+ wlan_notification_acm_power_setting_change = 6,
+ wlan_notification_acm_scan_complete = 7,
+ wlan_notification_acm_scan_fail = 8,
+ wlan_notification_acm_connection_start = 9,
+ wlan_notification_acm_connection_complete = 10,
+ wlan_notification_acm_connection_attempt_fail = 11,
+ wlan_notification_acm_filter_list_change = 12,
+ wlan_notification_acm_interface_arrival = 13,
+ wlan_notification_acm_interface_removal = 14,
+ wlan_notification_acm_profile_change = 15,
+ wlan_notification_acm_profile_name_change = 16,
+ wlan_notification_acm_profiles_exhausted = 17,
+ wlan_notification_acm_network_not_available = 18,
+ wlan_notification_acm_network_available = 19,
+ wlan_notification_acm_disconnecting = 20,
+ wlan_notification_acm_disconnected = 21,
+ wlan_notification_acm_adhoc_network_state_change = 22,
+ wlan_notification_acm_profile_unblocked = 23,
+ wlan_notification_acm_screen_power_change = 24,
+ wlan_notification_acm_profile_blocked = 25,
+ wlan_notification_acm_scan_list_refresh = 26,
+ wlan_notification_acm_operational_state_change = 27,
+ wlan_notification_acm_end = 28,
+}}
+pub type PWLAN_NOTIFICATION_ACM = *mut WLAN_NOTIFICATION_ACM;
+ENUM!{enum WLAN_NOTIFICATION_MSM {
+ wlan_notification_msm_start = L2_NOTIFICATION_CODE_PUBLIC_BEGIN,
+ wlan_notification_msm_associating = 1,
+ wlan_notification_msm_associated = 2,
+ wlan_notification_msm_authenticating = 3,
+ wlan_notification_msm_connected = 4,
+ wlan_notification_msm_roaming_start = 5,
+ wlan_notification_msm_roaming_end = 6,
+ wlan_notification_msm_radio_state_change = 7,
+ wlan_notification_msm_signal_quality_change = 8,
+ wlan_notification_msm_disassociating = 9,
+ wlan_notification_msm_disconnected = 10,
+ wlan_notification_msm_peer_join = 11,
+ wlan_notification_msm_peer_leave = 12,
+ wlan_notification_msm_adapter_removal = 13,
+ wlan_notification_msm_adapter_operation_mode_change = 14,
+ wlan_notification_msm_link_degraded = 15,
+ wlan_notification_msm_link_improved = 16,
+ wlan_notification_msm_end = 17,
+}}
+pub type PWLAN_NOTIFICATION_MSM = *mut WLAN_NOTIFICATION_MSM;
+ENUM!{enum WLAN_NOTIFICATION_SECURITY {
+ wlan_notification_security_start = L2_NOTIFICATION_CODE_PUBLIC_BEGIN,
+ wlan_notification_security_end = 1,
+}}
+pub type PWLAN_NOTIFICATION_SECURITY = *mut WLAN_NOTIFICATION_SECURITY;
+pub type WLAN_NOTIFICATION_DATA = L2_NOTIFICATION_DATA;
+pub type PWLAN_NOTIFICATION_DATA = *mut L2_NOTIFICATION_DATA;
+FN!{stdcall WLAN_NOTIFICATION_CALLBACK(
+ PWLAN_NOTIFICATION_DATA,
+ PVOID,
+) -> ()}
+ENUM!{enum WLAN_OPCODE_VALUE_TYPE {
+ wlan_opcode_value_type_query_only = 0,
+ wlan_opcode_value_type_set_by_group_policy = 1,
+ wlan_opcode_value_type_set_by_user = 2,
+ wlan_opcode_value_type_invalid = 3,
+}}
+pub type PWLAN_OPCODE_VALUE_TYPE = *mut WLAN_OPCODE_VALUE_TYPE;
+ENUM!{enum WLAN_INTF_OPCODE {
+ wlan_intf_opcode_autoconf_start = 0x000000000,
+ wlan_intf_opcode_autoconf_enabled = 1,
+ wlan_intf_opcode_background_scan_enabled = 2,
+ wlan_intf_opcode_media_streaming_mode = 3,
+ wlan_intf_opcode_radio_state = 4,
+ wlan_intf_opcode_bss_type = 5,
+ wlan_intf_opcode_interface_state = 6,
+ wlan_intf_opcode_current_connection = 7,
+ wlan_intf_opcode_channel_number = 8,
+ wlan_intf_opcode_supported_infrastructure_auth_cipher_pairs = 9,
+ wlan_intf_opcode_supported_adhoc_auth_cipher_pairs = 10,
+ wlan_intf_opcode_supported_country_or_region_string_list = 11,
+ wlan_intf_opcode_current_operation_mode = 12,
+ wlan_intf_opcode_supported_safe_mode = 13,
+ wlan_intf_opcode_certified_safe_mode = 14,
+ wlan_intf_opcode_hosted_network_capable = 15,
+ wlan_intf_opcode_management_frame_protection_capable = 16,
+ wlan_intf_opcode_autoconf_end = 0x0fffffff,
+ wlan_intf_opcode_msm_start = 0x10000100,
+ wlan_intf_opcode_statistics = 268435713,
+ wlan_intf_opcode_rssi = 268435714,
+ wlan_intf_opcode_msm_end = 0x1fffffff,
+ wlan_intf_opcode_security_start = 0x20010000,
+ wlan_intf_opcode_security_end = 0x2fffffff,
+ wlan_intf_opcode_ihv_start = 0x30000000,
+ wlan_intf_opcode_ihv_end = 0x3fffffff,
+}}
+pub type PWLAN_INTF_OPCODE = *mut WLAN_INTF_OPCODE;
+ENUM!{enum WLAN_AUTOCONF_OPCODE {
+ wlan_autoconf_opcode_start = 0,
+ wlan_autoconf_opcode_show_denied_networks = 1,
+ wlan_autoconf_opcode_power_setting = 2,
+ wlan_autoconf_opcode_only_use_gp_profiles_for_allowed_networks = 3,
+ wlan_autoconf_opcode_allow_explicit_creds = 4,
+ wlan_autoconf_opcode_block_period = 5,
+ wlan_autoconf_opcode_allow_virtual_station_extensibility = 6,
+ wlan_autoconf_opcode_end = 7,
+}}
+pub type PWLAN_AUTOCONF_OPCODE = *mut WLAN_AUTOCONF_OPCODE;
+ENUM!{enum WLAN_IHV_CONTROL_TYPE {
+ wlan_ihv_control_type_service = 0,
+ wlan_ihv_control_type_driver = 1,
+}}
+pub type PWLAN_IHV_CONTROL_TYPE = *mut WLAN_IHV_CONTROL_TYPE;
+ENUM!{enum WLAN_FILTER_LIST_TYPE {
+ wlan_filter_list_type_gp_permit = 0,
+ wlan_filter_list_type_gp_deny = 1,
+ wlan_filter_list_type_user_permit = 2,
+ wlan_filter_list_type_user_deny = 3,
+}}
+pub type PWLAN_FILTER_LIST_TYPE = *mut WLAN_FILTER_LIST_TYPE;
+STRUCT!{struct WLAN_PHY_FRAME_STATISTICS {
+ ullTransmittedFrameCount: ULONGLONG,
+ ullMulticastTransmittedFrameCount: ULONGLONG,
+ ullFailedCount: ULONGLONG,
+ ullRetryCount: ULONGLONG,
+ ullMultipleRetryCount: ULONGLONG,
+ ullMaxTXLifetimeExceededCount: ULONGLONG,
+ ullTransmittedFragmentCount: ULONGLONG,
+ ullRTSSuccessCount: ULONGLONG,
+ ullRTSFailureCount: ULONGLONG,
+ ullACKFailureCount: ULONGLONG,
+ ullReceivedFrameCount: ULONGLONG,
+ ullMulticastReceivedFrameCount: ULONGLONG,
+ ullPromiscuousReceivedFrameCount: ULONGLONG,
+ ullMaxRXLifetimeExceededCount: ULONGLONG,
+ ullFrameDuplicateCount: ULONGLONG,
+ ullReceivedFragmentCount: ULONGLONG,
+ ullPromiscuousReceivedFragmentCount: ULONGLONG,
+ ullFCSErrorCount: ULONGLONG,
+}}
+pub type PWLAN_PHY_FRAME_STATISTICS = *mut WLAN_PHY_FRAME_STATISTICS;
+STRUCT!{struct WLAN_MAC_FRAME_STATISTICS {
+ ullTransmittedFrameCount: ULONGLONG,
+ ullReceivedFrameCount: ULONGLONG,
+ ullWEPExcludedCount: ULONGLONG,
+ ullTKIPLocalMICFailures: ULONGLONG,
+ ullTKIPReplays: ULONGLONG,
+ ullTKIPICVErrorCount: ULONGLONG,
+ ullCCMPReplays: ULONGLONG,
+ ullCCMPDecryptErrors: ULONGLONG,
+ ullWEPUndecryptableCount: ULONGLONG,
+ ullWEPICVErrorCount: ULONGLONG,
+ ullDecryptSuccessCount: ULONGLONG,
+ ullDecryptFailureCount: ULONGLONG,
+}}
+pub type PWLAN_MAC_FRAME_STATISTICS = *mut WLAN_MAC_FRAME_STATISTICS;
+STRUCT!{struct WLAN_STATISTICS {
+ ullFourWayHandshakeFailures: ULONGLONG,
+ ullTKIPCounterMeasuresInvoked: ULONGLONG,
+ ullReserved: ULONGLONG,
+ MacUcastCounters: WLAN_MAC_FRAME_STATISTICS,
+ MacMcastCounters: WLAN_MAC_FRAME_STATISTICS,
+ dwNumberOfPhys: DWORD,
+ PhyCounters: [WLAN_PHY_FRAME_STATISTICS; 1],
+}}
+pub type PWLAN_STATISTICS = *mut WLAN_STATISTICS;
+pub const WLAN_READ_ACCESS: DWORD = STANDARD_RIGHTS_READ | FILE_READ_DATA;
+pub const WLAN_EXECUTE_ACCESS: DWORD = WLAN_READ_ACCESS | STANDARD_RIGHTS_EXECUTE | FILE_EXECUTE;
+pub const WLAN_WRITE_ACCESS: DWORD = WLAN_READ_ACCESS | WLAN_EXECUTE_ACCESS | STANDARD_RIGHTS_WRITE
+ | FILE_WRITE_DATA | DELETE | WRITE_DAC;
+ENUM!{enum WLAN_SECURABLE_OBJECT {
+ wlan_secure_permit_list = 0,
+ wlan_secure_deny_list = 1,
+ wlan_secure_ac_enabled = 2,
+ wlan_secure_bc_scan_enabled = 3,
+ wlan_secure_bss_type = 4,
+ wlan_secure_show_denied = 5,
+ wlan_secure_interface_properties = 6,
+ wlan_secure_ihv_control = 7,
+ wlan_secure_all_user_profiles_order = 8,
+ wlan_secure_add_new_all_user_profiles = 9,
+ wlan_secure_add_new_per_user_profiles = 10,
+ wlan_secure_media_streaming_mode_enabled = 11,
+ wlan_secure_current_operation_mode = 12,
+ wlan_secure_get_plaintext_key = 13,
+ wlan_secure_hosted_network_elevated_access = 14,
+ wlan_secure_virtual_station_extensibility = 15,
+ wlan_secure_wfd_elevated_access = 16,
+ WLAN_SECURABLE_OBJECT_COUNT = 17,
+}}
+pub type PWLAN_SECURABLE_OBJECT = *mut WLAN_SECURABLE_OBJECT;
+STRUCT!{struct WLAN_DEVICE_SERVICE_GUID_LIST {
+ dwNumberOfItems: DWORD,
+ dwIndex: DWORD,
+ DeviceService: [GUID; 1],
+}}
+pub type PWLAN_DEVICE_SERVICE_GUID_LIST = *mut WLAN_DEVICE_SERVICE_GUID_LIST;
+pub const WFD_API_VERSION_1_0: DWORD = 0x00000001;
+pub const WFD_API_VERSION: DWORD = WFD_API_VERSION_1_0;
+ENUM!{enum WFD_ROLE_TYPE {
+ WFD_ROLE_TYPE_NONE = 0x00,
+ WFD_ROLE_TYPE_DEVICE = 0x01,
+ WFD_ROLE_TYPE_GROUP_OWNER = 0x02,
+ WFD_ROLE_TYPE_CLIENT = 0x04,
+ WFD_ROLE_TYPE_MAX = 0x05,
+}}
+pub type PWFD_ROLE_TYPE = *mut WFD_ROLE_TYPE;
+STRUCT!{struct WFD_GROUP_ID {
+ DeviceAddress: DOT11_MAC_ADDRESS,
+ GroupSSID: DOT11_SSID,
+}}
+pub type PWFD_GROUP_ID = *mut WFD_GROUP_ID;
+extern "system" {
+ pub fn WlanOpenHandle(
+ dwClientVersion: DWORD,
+ pReserved: PVOID,
+ pdwNegotiatedVersion: PDWORD,
+ phClientHandle: PHANDLE,
+ ) -> DWORD;
+ pub fn WlanCloseHandle(
+ hClientHandle: HANDLE,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanEnumInterfaces(
+ hClientHandle: HANDLE,
+ pReserved: PVOID,
+ ppInterfaceList: *mut PWLAN_INTERFACE_INFO_LIST,
+ ) -> DWORD;
+ pub fn WlanSetAutoConfigParameter(
+ hClientHandle: HANDLE,
+ OpCode: WLAN_AUTOCONF_OPCODE,
+ dwDataSize: DWORD,
+ pData: PVOID,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanQueryAutoConfigParameter(
+ hClientHandle: HANDLE,
+ OpCode: WLAN_AUTOCONF_OPCODE,
+ pReserved: PVOID,
+ pdwDataSize: PDWORD,
+ ppData: *mut PVOID,
+ pWlanOpcodeValueType: PWLAN_OPCODE_VALUE_TYPE,
+ ) -> DWORD;
+ pub fn WlanGetInterfaceCapability(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ pReserved: PVOID,
+ ppCapability: *mut PWLAN_INTERFACE_CAPABILITY,
+ ) -> DWORD;
+ pub fn WlanSetInterface(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ OpCode: WLAN_INTF_OPCODE,
+ dwDataSize: DWORD,
+ pData: PVOID,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanQueryInterface(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ OpCode: WLAN_INTF_OPCODE,
+ pReserved: PVOID,
+ pdwDataSize: PDWORD,
+ ppData: *mut PVOID,
+ pWlanOpcodeValueType: PWLAN_OPCODE_VALUE_TYPE,
+ ) -> DWORD;
+ pub fn WlanIhvControl(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ Type: WLAN_IHV_CONTROL_TYPE,
+ dwInBufferSize: DWORD,
+ pInBuffer: PVOID,
+ dwOutBufferSize: DWORD,
+ pOutBuffer: PVOID,
+ pdwBytesReturned: PDWORD,
+ ) -> DWORD;
+ pub fn WlanScan(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ pDot11Ssid: PDOT11_SSID,
+ pIeData: PWLAN_RAW_DATA,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanGetAvailableNetworkList(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ dwFlags: DWORD,
+ pReserved: PVOID,
+ ppAvailableNetworkList: *mut PWLAN_AVAILABLE_NETWORK_LIST,
+ ) -> DWORD;
+ pub fn WlanGetAvailableNetworkList2(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ dwFlags: DWORD,
+ pReserved: PVOID,
+ ppAvailableNetworkList: *mut PWLAN_AVAILABLE_NETWORK_LIST_V2,
+ ) -> DWORD;
+ pub fn WlanGetNetworkBssList(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ pDot11Ssid: PDOT11_SSID,
+ dot11BssType: DOT11_BSS_TYPE,
+ bSecurityEnabled: BOOL,
+ pReserved: PVOID,
+ ppWlanBssList: *mut PWLAN_BSS_LIST,
+ ) -> DWORD;
+ pub fn WlanConnect(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ pConnectionParameters: PWLAN_CONNECTION_PARAMETERS,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanConnect2(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ pConnectionParameters: PWLAN_CONNECTION_PARAMETERS_V2,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanDisconnect(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanRegisterNotification(
+ hClientHandle: HANDLE,
+ dwNotifSource: DWORD,
+ bIgnoreDuplicate: BOOL,
+ funcCallback: WLAN_NOTIFICATION_CALLBACK,
+ pCallbackContext: PVOID,
+ pReserved: PVOID,
+ pdwPrevNotifSource: PDWORD,
+ ) -> DWORD;
+ pub fn WlanGetProfile(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ strProfileName: LPCWSTR,
+ pReserved: PVOID,
+ pstrProfileXml: *mut LPWSTR,
+ pdwFlags: *mut DWORD,
+ pdwGrantedAccess: *mut DWORD,
+ ) -> DWORD;
+ pub fn WlanSetProfileEapUserData(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ strProfileName: LPCWSTR,
+ eapType: EAP_METHOD_TYPE,
+ dwFlags: DWORD,
+ dwEapUserDataSize: DWORD,
+ pbEapUserData: LPBYTE,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanSetProfileEapXmlUserData(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ strProfileName: LPCWSTR,
+ dwFlags: DWORD,
+ strEapXmlUserData: LPCWSTR,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanSetProfile(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ dwFlags: DWORD,
+ strProfileXml: LPCWSTR,
+ strAllUserProfileSecurity: LPCWSTR,
+ bOverwrite: BOOL,
+ pReserved: PVOID,
+ pdwReasonCode: *mut DWORD,
+ ) -> DWORD;
+ pub fn WlanDeleteProfile(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ strProfileName: LPCWSTR,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanRenameProfile(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ strOldProfileName: LPCWSTR,
+ strNewProfileName: LPCWSTR,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanGetProfileList(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ pReserved: PVOID,
+ ppProfileList: *mut PWLAN_PROFILE_INFO_LIST,
+ ) -> DWORD;
+ pub fn WlanSetProfileList(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ dwItems: DWORD,
+ strProfileNames: *mut LPCWSTR,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanSetProfilePosition(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ strProfileName: LPCWSTR,
+ dwPosition: DWORD,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanSetProfileCustomUserData(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ strProfileName: LPCWSTR,
+ dwDataSize: DWORD,
+ pData: PBYTE,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanGetProfileCustomUserData(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ strProfileName: LPCWSTR,
+ pReserved: PVOID,
+ pdwDataSize: *mut DWORD,
+ ppData: *mut PBYTE,
+ ) -> DWORD;
+ pub fn WlanSetFilterList(
+ hClientHandle: HANDLE,
+ wlanFilterListType: WLAN_FILTER_LIST_TYPE,
+ pNetworkList: PDOT11_NETWORK_LIST,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanGetFilterList(
+ hClientHandle: HANDLE,
+ wlanFilterListType: WLAN_FILTER_LIST_TYPE,
+ pReserved: PVOID,
+ ppNetworkList: *mut PDOT11_NETWORK_LIST,
+ ) -> DWORD;
+ pub fn WlanSetPsdIEDataList(
+ hClientHandle: HANDLE,
+ strFormat: LPCWSTR,
+ pPsdIEDataList: PWLAN_RAW_DATA_LIST,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanSaveTemporaryProfile(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ strProfileName: LPCWSTR,
+ strAllUserProfileSecurity: LPCWSTR,
+ dwFlags: DWORD,
+ bOverWrite: BOOL,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanDeviceServiceCommand(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ pDeviceServiceGuid: LPGUID,
+ dwOpCode: DWORD,
+ dwInBufferSize: DWORD,
+ pInBuffer: PVOID,
+ dwOutBufferSize: DWORD,
+ pOutBuffer: PVOID,
+ pdwBytesReturned: PDWORD,
+ ) -> DWORD;
+ pub fn WlanGetSupportedDeviceServices(
+ hClientHandle: HANDLE,
+ pInterfaceGuid: *const GUID,
+ ppDevSvcGuidList: *mut PWLAN_DEVICE_SERVICE_GUID_LIST,
+ ) -> DWORD;
+ pub fn WlanExtractPsdIEDataList(
+ hClientHandle: HANDLE,
+ dwIeDataSize: DWORD,
+ pRawIeData: PBYTE,
+ strFormat: LPCWSTR,
+ pReserved: PVOID,
+ ppPsdIEDataList: *mut PWLAN_RAW_DATA_LIST,
+ ) -> DWORD;
+ pub fn WlanReasonCodeToString(
+ dwReasonCode: DWORD,
+ dwBufferSize: DWORD,
+ pStringBuffer: PWCHAR,
+ pReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanAllocateMemory(
+ dwMemorySize: DWORD,
+ ) -> PVOID;
+ pub fn WlanFreeMemory(
+ pMemory: PVOID,
+ );
+ pub fn WlanSetSecuritySettings(
+ hClientHandle: HANDLE,
+ SecurableObject: WLAN_SECURABLE_OBJECT,
+ strModifiedSDDL: LPCWSTR,
+ ) -> DWORD;
+ pub fn WlanGetSecuritySettings(
+ hClientHandle: HANDLE,
+ SecurableObject: WLAN_SECURABLE_OBJECT,
+ pValueType: PWLAN_OPCODE_VALUE_TYPE,
+ pstrCurrentSDDL: *mut LPWSTR,
+ pdwGrantedAccess: PDWORD,
+ ) -> DWORD;
+}
+pub const WLAN_UI_API_VERSION: DWORD = 1;
+pub const WLAN_UI_API_INITIAL_VERSION: DWORD = 1;
+ENUM!{enum WL_DISPLAY_PAGES {
+ WLConnectionPage = 0,
+ WLSecurityPage = 1,
+ WLAdvPage = 2,
+}}
+pub type PWL_DISPLAY_PAGES = *mut WL_DISPLAY_PAGES;
+extern "system" {
+ pub fn WlanUIEditProfile(
+ dwClientVersion: DWORD,
+ wstrProfileName: LPCWSTR,
+ pInterfaceGuid: *mut GUID,
+ hWnd: HWND,
+ wlStartPage: WL_DISPLAY_PAGES,
+ pReserved: PVOID,
+ pWlanReasonCode: PWLAN_REASON_CODE,
+ ) -> DWORD;
+}
+ENUM!{enum WLAN_HOSTED_NETWORK_STATE {
+ wlan_hosted_network_unavailable = 0,
+ wlan_hosted_network_idle = 1,
+ wlan_hosted_network_active = 2,
+}}
+pub type PWLAN_HOSTED_NETWORK_STATE = *mut WLAN_HOSTED_NETWORK_STATE;
+ENUM!{enum WLAN_HOSTED_NETWORK_REASON {
+ wlan_hosted_network_reason_success = 0,
+ wlan_hosted_network_reason_unspecified = 1,
+ wlan_hosted_network_reason_bad_parameters = 2,
+ wlan_hosted_network_reason_service_shutting_down = 3,
+ wlan_hosted_network_reason_insufficient_resources = 4,
+ wlan_hosted_network_reason_elevation_required = 5,
+ wlan_hosted_network_reason_read_only = 6,
+ wlan_hosted_network_reason_persistence_failed = 7,
+ wlan_hosted_network_reason_crypt_error = 8,
+ wlan_hosted_network_reason_impersonation = 9,
+ wlan_hosted_network_reason_stop_before_start = 10,
+ wlan_hosted_network_reason_interface_available = 11,
+ wlan_hosted_network_reason_interface_unavailable = 12,
+ wlan_hosted_network_reason_miniport_stopped = 13,
+ wlan_hosted_network_reason_miniport_started = 14,
+ wlan_hosted_network_reason_incompatible_connection_started = 15,
+ wlan_hosted_network_reason_incompatible_connection_stopped = 16,
+ wlan_hosted_network_reason_user_action = 17,
+ wlan_hosted_network_reason_client_abort = 18,
+ wlan_hosted_network_reason_ap_start_failed = 19,
+ wlan_hosted_network_reason_peer_arrived = 20,
+ wlan_hosted_network_reason_peer_departed = 21,
+ wlan_hosted_network_reason_peer_timeout = 22,
+ wlan_hosted_network_reason_gp_denied = 23,
+ wlan_hosted_network_reason_service_unavailable = 24,
+ wlan_hosted_network_reason_device_change = 25,
+ wlan_hosted_network_reason_properties_change = 26,
+ wlan_hosted_network_reason_virtual_station_blocking_use = 27,
+ wlan_hosted_network_reason_service_available_on_virtual_station = 28,
+}}
+pub type PWLAN_HOSTED_NETWORK_REASON = *mut WLAN_HOSTED_NETWORK_REASON;
+ENUM!{enum WLAN_HOSTED_NETWORK_PEER_AUTH_STATE {
+ wlan_hosted_network_peer_state_invalid = 0,
+ wlan_hosted_network_peer_state_authenticated = 1,
+}}
+pub type PWLAN_HOSTED_NETWORK_PEER_AUTH_STATE = *mut WLAN_HOSTED_NETWORK_PEER_AUTH_STATE;
+extern "system" {
+ pub fn WlanHostedNetworkStartUsing(
+ hClientHandle: HANDLE,
+ pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+ pvReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanHostedNetworkStopUsing(
+ hClientHandle: HANDLE,
+ pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+ pvReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanHostedNetworkForceStart(
+ hClientHandle: HANDLE,
+ pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+ pvReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanHostedNetworkForceStop(
+ hClientHandle: HANDLE,
+ pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+ pvReserved: PVOID,
+ ) -> DWORD;
+}
+STRUCT!{struct WLAN_HOSTED_NETWORK_PEER_STATE {
+ PeerMacAddress: DOT11_MAC_ADDRESS,
+ PeerAuthState: WLAN_HOSTED_NETWORK_PEER_AUTH_STATE,
+}}
+pub type PWLAN_HOSTED_NETWORK_PEER_STATE = *mut WLAN_HOSTED_NETWORK_PEER_STATE;
+STRUCT!{struct WLAN_HOSTED_NETWORK_RADIO_STATE {
+ dot11SoftwareRadioState: DOT11_RADIO_STATE,
+ dot11HardwareRadioState: DOT11_RADIO_STATE,
+}}
+pub type PWLAN_HOSTED_NETWORK_RADIO_STATE = *mut WLAN_HOSTED_NETWORK_RADIO_STATE;
+ENUM!{enum WLAN_HOSTED_NETWORK_NOTIFICATION_CODE {
+ wlan_hosted_network_state_change = L2_NOTIFICATION_CODE_V2_BEGIN,
+ wlan_hosted_network_peer_state_change = 4097,
+ wlan_hosted_network_radio_state_change = 4098,
+}}
+pub type PWLAN_HOSTED_NETWORK_NOTIFICATION_CODE = *mut WLAN_HOSTED_NETWORK_NOTIFICATION_CODE;
+STRUCT!{struct WLAN_HOSTED_NETWORK_STATE_CHANGE {
+ OldState: WLAN_HOSTED_NETWORK_STATE,
+ NewState: WLAN_HOSTED_NETWORK_STATE,
+ StateChangeReason: WLAN_HOSTED_NETWORK_REASON,
+}}
+pub type PWLAN_HOSTED_NETWORK_STATE_CHANGE = *mut WLAN_HOSTED_NETWORK_STATE_CHANGE;
+STRUCT!{struct WLAN_HOSTED_NETWORK_DATA_PEER_STATE_CHANGE {
+ OldState: WLAN_HOSTED_NETWORK_PEER_STATE,
+ NewState: WLAN_HOSTED_NETWORK_PEER_STATE,
+ PeerStateChangeReason: WLAN_HOSTED_NETWORK_REASON,
+}}
+pub type PWLAN_HOSTED_NETWORK_DATA_PEER_STATE_CHANGE =
+ *mut WLAN_HOSTED_NETWORK_DATA_PEER_STATE_CHANGE;
+ENUM!{enum WLAN_HOSTED_NETWORK_OPCODE {
+ wlan_hosted_network_opcode_connection_settings = 0,
+ wlan_hosted_network_opcode_security_settings = 1,
+ wlan_hosted_network_opcode_station_profile = 2,
+ wlan_hosted_network_opcode_enable = 3,
+}}
+pub type PWLAN_HOSTED_NETWORK_OPCODE = *mut WLAN_HOSTED_NETWORK_OPCODE;
+STRUCT!{struct WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS {
+ hostedNetworkSSID: DOT11_SSID,
+ dwMaxNumberOfPeers: DWORD,
+}}
+pub type PWLAN_HOSTED_NETWORK_CONNECTION_SETTINGS = *mut WLAN_HOSTED_NETWORK_CONNECTION_SETTINGS;
+STRUCT!{struct WLAN_HOSTED_NETWORK_SECURITY_SETTINGS {
+ dot11AuthAlgo: DOT11_AUTH_ALGORITHM,
+ dot11CipherAlgo: DOT11_CIPHER_ALGORITHM,
+}}
+pub type PWLAN_HOSTED_NETWORK_SECURITY_SETTINGS = *mut WLAN_HOSTED_NETWORK_SECURITY_SETTINGS;
+extern "system" {
+ pub fn WlanHostedNetworkQueryProperty(
+ hClientHandle: HANDLE,
+ OpCode: WLAN_HOSTED_NETWORK_OPCODE,
+ pdwDataSize: PDWORD,
+ ppvData: *mut PVOID,
+ pWlanOpcodeValueType: PWLAN_OPCODE_VALUE_TYPE,
+ pvReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanHostedNetworkSetProperty(
+ hClientHandle: HANDLE,
+ OpCode: WLAN_HOSTED_NETWORK_OPCODE,
+ dwDataSize: DWORD,
+ pvData: PVOID,
+ pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+ pvReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanHostedNetworkInitSettings(
+ hClientHandle: HANDLE,
+ pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+ pvReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanHostedNetworkRefreshSecuritySettings(
+ hClientHandle: HANDLE,
+ pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+ pvReserved: PVOID,
+ ) -> DWORD;
+}
+STRUCT!{struct WLAN_HOSTED_NETWORK_STATUS {
+ HostedNetworkState: WLAN_HOSTED_NETWORK_STATE,
+ IPDeviceID: GUID,
+ wlanHostedNetworkBSSID: DOT11_MAC_ADDRESS,
+ dot11PhyType: DOT11_PHY_TYPE,
+ ulChannelFrequency: ULONG,
+ dwNumberOfPeers: DWORD,
+ PeerList: [WLAN_HOSTED_NETWORK_PEER_STATE; 1],
+}}
+pub type PWLAN_HOSTED_NETWORK_STATUS = *mut WLAN_HOSTED_NETWORK_STATUS;
+extern "system" {
+ pub fn WlanHostedNetworkQueryStatus(
+ hClientHandle: HANDLE,
+ ppWlanHostedNetworkStatus: *mut PWLAN_HOSTED_NETWORK_STATUS,
+ pvReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanHostedNetworkSetSecondaryKey(
+ hClientHandle: HANDLE,
+ dwKeyLength: DWORD,
+ pucKeyData: PUCHAR,
+ bIsPassPhrase: BOOL,
+ bPersistent: BOOL,
+ pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+ pvReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanHostedNetworkQuerySecondaryKey(
+ hClientHandle: HANDLE,
+ pdwKeyLength: PDWORD,
+ ppucKeyData: *mut PUCHAR,
+ pbIsPassPhrase: PBOOL,
+ pbPersistent: PBOOL,
+ pFailReason: PWLAN_HOSTED_NETWORK_REASON,
+ pvReserved: PVOID,
+ ) -> DWORD;
+ pub fn WlanRegisterVirtualStationNotification(
+ hClientHandle: HANDLE,
+ bRegister: BOOL,
+ pReserved: PVOID,
+ ) -> DWORD;
+}
+DEFINE_GUID!{GUID_DEVINTERFACE_WIFIDIRECT_DEVICE,
+ 0x439b20af, 0x8955, 0x405b, 0x99, 0xf0, 0xa6, 0x2a, 0xf0, 0xc6, 0x8d, 0x43}
+DEFINE_GUID!{GUID_AEPSERVICE_WIFIDIRECT_DEVICE,
+ 0xcc29827c, 0x9caf, 0x4928, 0x99, 0xa9, 0x18, 0xf7, 0xc2, 0x38, 0x13, 0x89}
+DEFINE_GUID!{GUID_DEVINTERFACE_ASP_INFRA_DEVICE,
+ 0xff823995, 0x7a72, 0x4c80, 0x87, 0x57, 0xc6, 0x7e, 0xe1, 0x3d, 0x1a, 0x49}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_DeviceAddress,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x01}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_InterfaceAddress,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x02}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_InterfaceGuid,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x03}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_GroupId,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x04}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_IsConnected,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x05}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_IsVisible,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x06}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_IsLegacyDevice,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x07}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_MiracastVersion,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x08}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_IsMiracastLCPSupported,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x09}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_Services,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x0a}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_SupportedChannelList,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x0b}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_InformationElements,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x0c}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_DeviceAddressCopy,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x0d}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_IsRecentlyAssociated,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x0e}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_Service_Aeps,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x0f}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_NoMiracastAutoProject,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x10}
+DEFINE_DEVPROPKEY!{DEVPKEY_InfraCast_Supported,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x11}
+DEFINE_DEVPROPKEY!{DEVPKEY_InfraCast_StreamSecuritySupported,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x12}
+DEFINE_DEVPROPKEY!{DEVPKEY_InfraCast_AccessPointBssid,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x13}
+DEFINE_DEVPROPKEY!{DEVPKEY_InfraCast_SinkHostName,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x14}
+DEFINE_DEVPROPKEY!{DEVPKEY_InfraCast_ChallengeAep,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x15}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_IsDMGCapable,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x16}
+DEFINE_DEVPROPKEY!{DEVPKEY_InfraCast_DevnodeAep,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x17}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_FoundWsbService,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x18}
+DEFINE_DEVPROPKEY!{DEVPKEY_InfraCast_HostName_ResolutionMode,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x19}
+DEFINE_DEVPROPKEY!{DEVPKEY_InfraCast_SinkIpAddress,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x1a}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirect_TransientAssociation,
+ 0x1506935d, 0xe3e7, 0x450f, 0x86, 0x37, 0x82, 0x23, 0x3e, 0xbe, 0x5f, 0x6e, 0x1b}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirectServices_ServiceAddress,
+ 0x31b37743, 0x7c5e, 0x4005, 0x93, 0xe6, 0xe9, 0x53, 0xf9, 0x2b, 0x82, 0xe9, 0x02}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirectServices_ServiceName,
+ 0x31b37743, 0x7c5e, 0x4005, 0x93, 0xe6, 0xe9, 0x53, 0xf9, 0x2b, 0x82, 0xe9, 0x03}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirectServices_ServiceInformation,
+ 0x31b37743, 0x7c5e, 0x4005, 0x93, 0xe6, 0xe9, 0x53, 0xf9, 0x2b, 0x82, 0xe9, 0x04}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirectServices_AdvertisementId,
+ 0x31b37743, 0x7c5e, 0x4005, 0x93, 0xe6, 0xe9, 0x53, 0xf9, 0x2b, 0x82, 0xe9, 0x05}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirectServices_ServiceConfigMethods,
+ 0x31b37743, 0x7c5e, 0x4005, 0x93, 0xe6, 0xe9, 0x53, 0xf9, 0x2b, 0x82, 0xe9, 0x06}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFiDirectServices_RequestServiceInformation,
+ 0x31b37743, 0x7c5e, 0x4005, 0x93, 0xe6, 0xe9, 0x53, 0xf9, 0x2b, 0x82, 0xe9, 0x07}
+extern "system" {
+ pub fn WFDOpenHandle(
+ dwClientVersion: DWORD,
+ pdwNegotiatedVersion: PDWORD,
+ phClientHandle: PHANDLE,
+ ) -> DWORD;
+ pub fn WFDCloseHandle(
+ hClientHandle: HANDLE,
+ ) -> DWORD;
+}
+FN!{stdcall WFD_OPEN_SESSION_COMPLETE_CALLBACK(
+ hSessionHandle: HANDLE,
+ pvContext: PVOID,
+ guidSessionInterface: GUID,
+ dwError: DWORD,
+ dwReasonCode: DWORD,
+) -> ()}
+extern "system" {
+ pub fn WFDStartOpenSession(
+ hClientHandle: HANDLE,
+ pDeviceAddress: PDOT11_MAC_ADDRESS,
+ pvContext: PVOID,
+ pfnCallback: WFD_OPEN_SESSION_COMPLETE_CALLBACK,
+ phSessionHandle: PHANDLE,
+ ) -> DWORD;
+ pub fn WFDCancelOpenSession(
+ hSessionHandle: HANDLE,
+ ) -> DWORD;
+ pub fn WFDOpenLegacySession(
+ hClientHandle: HANDLE,
+ pLegacyMacAddress: PDOT11_MAC_ADDRESS,
+ phSessionHandle: *mut HANDLE,
+ pGuidSessionInterface: *mut GUID,
+ ) -> DWORD;
+ pub fn WFDCloseSession(
+ hSessionHandle: HANDLE,
+ ) -> DWORD;
+ pub fn WFDUpdateDeviceVisibility(
+ pDeviceAddress: PDOT11_MAC_ADDRESS,
+ ) -> DWORD;
+}
+DEFINE_DEVPROPKEY!{DEVPKEY_WiFi_InterfaceGuid,
+ 0xef1167eb, 0xcbfc, 0x4341, 0xa5, 0x68, 0xa7, 0xc9, 0x1a, 0x68, 0x98, 0x2c, 0x02}
diff --git a/vendor/winapi/src/um/wlanihv.rs b/vendor/winapi/src/um/wlanihv.rs
new file mode 100644
index 000000000..e2fa8fb17
--- /dev/null
+++ b/vendor/winapi/src/um/wlanihv.rs
@@ -0,0 +1,410 @@
+// 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.
+//! Definition of public APIs for WLAN Extensibility Framework.
+use shared::basetsd::UINT32;
+use shared::guiddef::{CLSID, GUID};
+use shared::minwindef::{BOOL, BYTE, DWORD, LPVOID, PBOOL, PBYTE, PDWORD, UCHAR, ULONG, USHORT};
+use shared::windot11::{
+ DOT11_ASSOC_STATUS, DOT11_DIRECTION, PDOT11_ASSOCIATION_COMPLETION_PARAMETERS,
+ PDOT11_CIPHER_DEFAULT_KEY_VALUE, PDOT11_CIPHER_KEY_MAPPING_KEY_VALUE, PDOT11_MAC_ADDRESS,
+ PDOT11_PRIVACY_EXEMPTION,
+};
+use shared::wlantypes::{DOT11_AUTH_ALGORITHM, DOT11_BSS_TYPE, DOT11_CIPHER_ALGORITHM, DOT11_SSID};
+use um::dot1x::{ONEX_AUTH_STATUS, ONEX_REASON_CODE};
+use um::eaptypes::EAP_ATTRIBUTES;
+use um::l2cmn::PL2_NOTIFICATION_DATA;
+use um::winnt::{HANDLE, LPWSTR, PHANDLE, WCHAR};
+use um::winuser::PWTSSESSION_NOTIFICATION;
+use um::wlanihvtypes::{MS_MAX_PROFILE_NAME_LENGTH, PDOT11EXT_IHV_PROFILE_PARAMS};
+use um::wlclient::{PDOT11_ADAPTER, PDOT11_BSS_LIST, PDOT11_PORT_STATE};
+STRUCT!{struct DOT11EXT_APIS {
+ Dot11ExtAllocateBuffer: DOT11EXT_ALLOCATE_BUFFER,
+ Dot11ExtFreeBuffer: DOT11EXT_FREE_BUFFER,
+ Dot11ExtSetProfileCustomUserData: DOT11EXT_SET_PROFILE_CUSTOM_USER_DATA,
+ Dot11ExtGetProfileCustomUserData: DOT11EXT_GET_PROFILE_CUSTOM_USER_DATA,
+ Dot11ExtSetCurrentProfile: DOT11EXT_SET_CURRENT_PROFILE,
+ Dot11ExtSendUIRequest: DOT11EXT_SEND_UI_REQUEST,
+ Dot11ExtPreAssociateCompletion: DOT11EXT_PRE_ASSOCIATE_COMPLETION,
+ Dot11ExtPostAssociateCompletion: DOT11EXT_POST_ASSOCIATE_COMPLETION,
+ Dot11ExtSendNotification: DOT11EXT_SEND_NOTIFICATION,
+ Dot11ExtSendPacket: DOT11EXT_SEND_PACKET,
+ Dot11ExtSetEtherTypeHandling: DOT11EXT_SET_ETHERTYPE_HANDLING,
+ Dot11ExtSetAuthAlgorithm: DOT11EXT_SET_AUTH_ALGORITHM,
+ Dot11ExtSetUnicastCipherAlgorithm: DOT11EXT_SET_UNICAST_CIPHER_ALGORITHM,
+ Dot11ExtSetMulticastCipherAlgorithm: DOT11EXT_SET_MULTICAST_CIPHER_ALGORITHM,
+ Dot11ExtSetDefaultKey: DOT11EXT_SET_DEFAULT_KEY,
+ Dot11ExtSetKeyMappingKey: DOT11EXT_SET_KEY_MAPPING_KEY,
+ Dot11ExtSetDefaultKeyId: DOT11EXT_SET_DEFAULT_KEY_ID,
+ Dot11ExtNicSpecificExtension: DOT11EXT_NIC_SPECIFIC_EXTENSION,
+ Dot11ExtSetExcludeUnencrypted: DOT11EXT_SET_EXCLUDE_UNENCRYPTED,
+ Dot11ExtStartOneX: DOT11EXT_ONEX_START,
+ Dot11ExtStopOneX: DOT11EXT_ONEX_STOP,
+ Dot11ExtProcessSecurityPacket: DOT11EXT_PROCESS_ONEX_PACKET,
+}}
+pub type PDOT11EXT_APIS = *mut DOT11EXT_APIS;
+STRUCT!{struct DOT11EXT_IHV_HANDLERS {
+ Dot11ExtIhvDeinitService: DOT11EXTIHV_DEINIT_SERVICE,
+ Dot11ExtIhvInitAdapter: DOT11EXTIHV_INIT_ADAPTER,
+ Dot11ExtIhvDeinitAdapter: DOT11EXTIHV_DEINIT_ADAPTER,
+ Dot11ExtIhvPerformPreAssociate: DOT11EXTIHV_PERFORM_PRE_ASSOCIATE,
+ Dot11ExtIhvAdapterReset: DOT11EXTIHV_ADAPTER_RESET,
+ Dot11ExtIhvPerformPostAssociate: DOT11EXTIHV_PERFORM_POST_ASSOCIATE,
+ Dot11ExtIhvStopPostAssociate: DOT11EXTIHV_STOP_POST_ASSOCIATE,
+ Dot11ExtIhvValidateProfile: DOT11EXTIHV_VALIDATE_PROFILE,
+ Dot11ExtIhvPerformCapabilityMatch: DOT11EXTIHV_PERFORM_CAPABILITY_MATCH,
+ Dot11ExtIhvCreateDiscoveryProfiles: DOT11EXTIHV_CREATE_DISCOVERY_PROFILES,
+ Dot11ExtIhvProcessSessionChange: DOT11EXTIHV_PROCESS_SESSION_CHANGE,
+ Dot11ExtIhvReceiveIndication: DOT11EXTIHV_RECEIVE_INDICATION,
+ Dot11ExtIhvReceivePacket: DOT11EXTIHV_RECEIVE_PACKET,
+ Dot11ExtIhvSendPacketCompletion: DOT11EXTIHV_SEND_PACKET_COMPLETION,
+ Dot11ExtIhvIsUIRequestPending: DOT11EXTIHV_IS_UI_REQUEST_PENDING,
+ Dot11ExtIhvProcessUIResponse: DOT11EXTIHV_PROCESS_UI_RESPONSE,
+ Dot11ExtIhvQueryUIRequest: DOT11EXTIHV_QUERY_UI_REQUEST,
+ Dot11ExtIhvOnexIndicateResult: DOT11EXTIHV_ONEX_INDICATE_RESULT,
+ Dot11ExtIhvControl: DOT11EXTIHV_CONTROL,
+}}
+pub type PDOT11EXT_IHV_HANDLERS = *mut DOT11EXT_IHV_HANDLERS;
+STRUCT!{struct DOT11EXT_VIRTUAL_STATION_APIS {
+ Dot11ExtRequestVirtualStation: DOT11EXT_REQUEST_VIRTUAL_STATION,
+ Dot11ExtReleaseVirtualStation: DOT11EXT_RELEASE_VIRTUAL_STATION,
+ Dot11ExtQueryVirtualStationProperties: DOT11EXT_QUERY_VIRTUAL_STATION_PROPERTIES,
+ Dot11ExtSetVirtualStationAPProperties: DOT11EXT_SET_VIRTUAL_STATION_AP_PROPERTIES,
+}}
+pub type PDOT11EXT_VIRTUAL_STATION_APIS = *mut DOT11EXT_VIRTUAL_STATION_APIS;
+STRUCT!{struct DOT11_IHV_VERSION_INFO {
+ dwVerMin: DWORD,
+ dwVerMax: DWORD,
+}}
+pub type PDOT11_IHV_VERSION_INFO = *mut DOT11_IHV_VERSION_INFO;
+ENUM!{enum DOT11EXT_IHV_CONNECTION_PHASE {
+ connection_phase_any = 0,
+ connection_phase_initial_connection = 1,
+ connection_phase_post_l3_connection = 2,
+}}
+pub type PDOT11EXT_IHV_CONNECTION_PHASE = *mut DOT11EXT_IHV_CONNECTION_PHASE;
+STRUCT!{struct DOT11EXT_IHV_UI_REQUEST {
+ dwSessionId: DWORD,
+ guidUIRequest: GUID,
+ UIPageClsid: CLSID,
+ dwByteCount: DWORD,
+ pvUIRequest: *mut BYTE,
+}}
+pub type PDOT11EXT_IHV_UI_REQUEST = *mut DOT11EXT_IHV_UI_REQUEST;
+ENUM!{enum DOT11_MSONEX_RESULT {
+ DOT11_MSONEX_SUCCESS = 0,
+ DOT11_MSONEX_FAILURE = 1,
+ DOT11_MSONEX_IN_PROGRESS = 2,
+}}
+pub type PDOT11_MSONEX_RESULT = *mut DOT11_MSONEX_RESULT;
+STRUCT!{struct DOT11_EAP_RESULT {
+ dwFailureReasonCode: UINT32,
+ pAttribArray: *mut EAP_ATTRIBUTES,
+}}
+pub type PDOT11_EAP_RESULT = *mut DOT11_EAP_RESULT;
+STRUCT!{struct DOT11_MSONEX_RESULT_PARAMS {
+ Dot11OnexAuthStatus: ONEX_AUTH_STATUS,
+ Dot11OneXReasonCode: ONEX_REASON_CODE,
+ pbMPPESendKey: PBYTE,
+ dwMPPESendKeyLen: DWORD,
+ pbMPPERecvKey: PBYTE,
+ dwMPPERecvKeyLen: DWORD,
+ pDot11EapResult: PDOT11_EAP_RESULT,
+}}
+pub type PDOT11_MSONEX_RESULT_PARAMS = *mut DOT11_MSONEX_RESULT_PARAMS;
+STRUCT!{struct DOT11EXT_IHV_CONNECTIVITY_PROFILE {
+ pszXmlFragmentIhvConnectivity: LPWSTR,
+}}
+pub type PDOT11EXT_IHV_CONNECTIVITY_PROFILE = *mut DOT11EXT_IHV_CONNECTIVITY_PROFILE;
+STRUCT!{struct DOT11EXT_IHV_SECURITY_PROFILE {
+ pszXmlFragmentIhvSecurity: LPWSTR,
+ bUseMSOnex: BOOL,
+}}
+pub type PDOT11EXT_IHV_SECURITY_PROFILE = *mut DOT11EXT_IHV_SECURITY_PROFILE;
+STRUCT!{struct DOT11EXT_IHV_DISCOVERY_PROFILE {
+ IhvConnectivityProfile: DOT11EXT_IHV_CONNECTIVITY_PROFILE,
+ IhvSecurityProfile: DOT11EXT_IHV_SECURITY_PROFILE,
+}}
+pub type PDOT11EXT_IHV_DISCOVERY_PROFILE = *mut DOT11EXT_IHV_DISCOVERY_PROFILE;
+STRUCT!{struct DOT11EXT_IHV_DISCOVERY_PROFILE_LIST {
+ dwCount: DWORD,
+ pIhvDiscoveryProfiles: PDOT11EXT_IHV_DISCOVERY_PROFILE,
+}}
+pub type PDOT11EXT_IHV_DISCOVERY_PROFILE_LIST = *mut DOT11EXT_IHV_DISCOVERY_PROFILE_LIST;
+ENUM!{enum DOT11EXT_IHV_INDICATION_TYPE {
+ IndicationTypeNicSpecificNotification = 0,
+ IndicationTypePmkidCandidateList = 1,
+ IndicationTypeTkipMicFailure = 2,
+ IndicationTypePhyStateChange = 3,
+ IndicationTypeLinkQuality = 4,
+}}
+pub type PDOT11EXT_IHV_INDICATION_TYPE = *mut DOT11EXT_IHV_INDICATION_TYPE;
+pub const DOT11EXT_PSK_MAX_LENGTH: usize = 64;
+STRUCT!{struct DOT11EXT_VIRTUAL_STATION_AP_PROPERTY {
+ dot11SSID: DOT11_SSID,
+ dot11AuthAlgo: DOT11_AUTH_ALGORITHM,
+ dot11CipherAlgo: DOT11_CIPHER_ALGORITHM,
+ bIsPassPhrase: BOOL,
+ dwKeyLength: DWORD,
+ ucKeyData: [UCHAR; DOT11EXT_PSK_MAX_LENGTH],
+}}
+pub type PDOT11EXT_VIRTUAL_STATION_AP_PROPERTY = *mut DOT11EXT_VIRTUAL_STATION_AP_PROPERTY;
+pub const WDIAG_IHV_WLAN_ID_FLAG_SECURITY_ENABLED: DWORD = 0x00000001;
+STRUCT!{struct WDIAG_IHV_WLAN_ID {
+ strProfileName: [WCHAR; MS_MAX_PROFILE_NAME_LENGTH],
+ Ssid: DOT11_SSID,
+ BssType: DOT11_BSS_TYPE,
+ dwFlags: DWORD,
+ dwReasonCode: DWORD,
+}}
+pub type PWDIAG_IHV_WLAN_ID = *mut WDIAG_IHV_WLAN_ID;
+FN!{stdcall DOT11EXT_ALLOCATE_BUFFER(
+ dwByteCount: DWORD,
+ ppvBuffer: *mut LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXT_FREE_BUFFER(
+ pvMemory: LPVOID,
+) -> ()}
+FN!{stdcall DOT11EXT_SET_PROFILE_CUSTOM_USER_DATA(
+ hDot11SvcHandle: HANDLE,
+ hConnectSession: HANDLE,
+ dwSessionID: DWORD,
+ dwDataSize: DWORD,
+ pvData: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXT_GET_PROFILE_CUSTOM_USER_DATA(
+ hDot11SvcHandle: HANDLE,
+ hConnectSession: HANDLE,
+ dwSessionID: DWORD,
+ pdwDataSize: *mut DWORD,
+ ppvData: *mut LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_CURRENT_PROFILE(
+ hDot11SvcHandle: HANDLE,
+ hConnectSession: HANDLE,
+ pIhvConnProfile: PDOT11EXT_IHV_CONNECTIVITY_PROFILE,
+ pIhvSecProfile: PDOT11EXT_IHV_SECURITY_PROFILE,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SEND_UI_REQUEST(
+ hDot11SvcHandle: HANDLE,
+ pIhvUIRequest: PDOT11EXT_IHV_UI_REQUEST,
+) -> DWORD}
+FN!{stdcall DOT11EXT_PRE_ASSOCIATE_COMPLETION(
+ hDot11SvcHandle: HANDLE,
+ hConnectSession: HANDLE,
+ dwReasonCode: DWORD,
+ dwWin32Error: DWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXT_POST_ASSOCIATE_COMPLETION(
+ hDot11SvcHandle: HANDLE,
+ hSecuritySessionID: HANDLE,
+ pPeer: PDOT11_MAC_ADDRESS,
+ dwReasonCode: DWORD,
+ dwWin32Error: DWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SEND_NOTIFICATION(
+ hDot11SvcHandle: HANDLE,
+ pNotificationData: PL2_NOTIFICATION_DATA,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SEND_PACKET(
+ hDot11SvcHandle: HANDLE,
+ uPacketLen: ULONG,
+ pvPacket: LPVOID,
+ hSendCompletion: HANDLE,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_ETHERTYPE_HANDLING(
+ hDot11SvcHandle: HANDLE,
+ uMaxBackLog: ULONG,
+ uNumOfExemption: ULONG,
+ pExemption: PDOT11_PRIVACY_EXEMPTION,
+ uNumOfRegistration: ULONG,
+ pusRegistration: *mut USHORT,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_AUTH_ALGORITHM(
+ hDot11SvcHandle: HANDLE,
+ dwAuthAlgo: DWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_UNICAST_CIPHER_ALGORITHM(
+ hDot11SvcHandle: HANDLE,
+ dwUnicastCipherAlgo: DWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_MULTICAST_CIPHER_ALGORITHM(
+ hDot11SvcHandle: HANDLE,
+ dwMulticastCipherAlgo: DWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_DEFAULT_KEY(
+ hDot11SvcHandle: HANDLE,
+ pKey: PDOT11_CIPHER_DEFAULT_KEY_VALUE,
+ dot11Direction: DOT11_DIRECTION,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_KEY_MAPPING_KEY(
+ hDot11SvcHandle: HANDLE,
+ pKey: PDOT11_CIPHER_KEY_MAPPING_KEY_VALUE,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_DEFAULT_KEY_ID(
+ hDot11SvcHandle: HANDLE,
+ uDefaultKeyId: ULONG,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_EXCLUDE_UNENCRYPTED(
+ hDot11SvcHandle: HANDLE,
+ bExcludeUnencrypted: BOOL,
+) -> DWORD}
+FN!{stdcall DOT11EXT_NIC_SPECIFIC_EXTENSION(
+ hDot11SvcHandle: HANDLE,
+ dwInBufferSize: DWORD,
+ pvInBuffer: LPVOID,
+ pdwOutBufferSize: *mut DWORD,
+ pvOutBuffer: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXT_ONEX_START(
+ hDot11SvcHandle: HANDLE,
+ pEapAttributes: *mut EAP_ATTRIBUTES,
+) -> DWORD}
+FN!{stdcall DOT11EXT_ONEX_STOP(
+ hDot11SvcHandle: HANDLE,
+) -> DWORD}
+FN!{stdcall DOT11EXT_PROCESS_ONEX_PACKET(
+ hDot11SvcHandle: HANDLE,
+ dwInPacketSize: DWORD,
+ pvInPacket: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXT_REQUEST_VIRTUAL_STATION(
+ hDot11PrimaryHandle: HANDLE,
+ pvReserved: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXT_RELEASE_VIRTUAL_STATION(
+ hDot11PrimaryHandle: HANDLE,
+ pvReserved: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXT_QUERY_VIRTUAL_STATION_PROPERTIES(
+ hDot11SvcHandle: HANDLE,
+ pbIsVirtualStation: *mut BOOL,
+ pgPrimary: *mut GUID,
+ pvReserved: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXT_SET_VIRTUAL_STATION_AP_PROPERTIES(
+ hDot11SvcHandle: HANDLE,
+ hConnectSession: HANDLE,
+ dwNumProperties: DWORD,
+ pProperties: PDOT11EXT_VIRTUAL_STATION_AP_PROPERTY,
+ pvReserved: LPVOID,
+) -> DWORD}
+pub const IHV_VERSION_FUNCTION_NAME: &'static str = "Dot11ExtIhvGetVersionInfo";
+pub const IHV_INIT_FUNCTION_NAME: &'static str = "Dot11ExtIhvInitService";
+pub const IHV_INIT_VS_FUNCTION_NAME: &'static str = "Dot11ExtIhvInitVirtualStation";
+FN!{stdcall DOT11EXTIHV_GET_VERSION_INFO(
+ pDot11IHVVersionInfo: PDOT11_IHV_VERSION_INFO,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_INIT_SERVICE(
+ dwVerNumUsed: DWORD,
+ pDot11ExtAPI: PDOT11EXT_APIS,
+ pvReserved: LPVOID,
+ pDot11IHVHandlers: PDOT11EXT_IHV_HANDLERS,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_INIT_VIRTUAL_STATION(
+ pDot11ExtVSAPI: PDOT11EXT_VIRTUAL_STATION_APIS,
+ pvReserved: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_DEINIT_SERVICE() -> ()}
+FN!{stdcall DOT11EXTIHV_INIT_ADAPTER(
+ pDot11Adapter: PDOT11_ADAPTER,
+ hDot11SvcHandle: HANDLE,
+ phIhvExtAdapter: PHANDLE,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_DEINIT_ADAPTER(
+ hIhvExtAdapter: HANDLE,
+) -> ()}
+FN!{stdcall DOT11EXTIHV_PERFORM_PRE_ASSOCIATE(
+ hIhvExtAdapter: HANDLE,
+ hConnectSession: HANDLE,
+ pIhvProfileParams: PDOT11EXT_IHV_PROFILE_PARAMS,
+ pIhvConnProfile: PDOT11EXT_IHV_CONNECTIVITY_PROFILE,
+ pIhvSecProfile: PDOT11EXT_IHV_SECURITY_PROFILE,
+ pConnectableBssid: PDOT11_BSS_LIST,
+ pdwReasonCode: PDWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_ADAPTER_RESET(
+ hIhvExtAdapter: HANDLE,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_PERFORM_POST_ASSOCIATE(
+ hIhvExtAdapter: HANDLE,
+ hSecuritySessionID: HANDLE,
+ pPortState: PDOT11_PORT_STATE,
+ uDot11AssocParamsBytes: ULONG,
+ pDot11AssocParams: PDOT11_ASSOCIATION_COMPLETION_PARAMETERS,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_STOP_POST_ASSOCIATE(
+ hIhvExtAdapter: HANDLE,
+ pPeer: PDOT11_MAC_ADDRESS,
+ dot11AssocStatus: DOT11_ASSOC_STATUS,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_VALIDATE_PROFILE(
+ hIhvExtAdapter: HANDLE,
+ pIhvProfileParams: PDOT11EXT_IHV_PROFILE_PARAMS,
+ pIhvConnProfile: PDOT11EXT_IHV_CONNECTIVITY_PROFILE,
+ pIhvSecProfile: PDOT11EXT_IHV_SECURITY_PROFILE,
+ pdwReasonCode: PDWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_PERFORM_CAPABILITY_MATCH(
+ hIhvExtAdapter: HANDLE,
+ pIhvProfileParams: PDOT11EXT_IHV_PROFILE_PARAMS,
+ pIhvConnProfile: PDOT11EXT_IHV_CONNECTIVITY_PROFILE,
+ pIhvSecProfile: PDOT11EXT_IHV_SECURITY_PROFILE,
+ pConnectableBssid: PDOT11_BSS_LIST,
+ pdwReasonCode: PDWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_CREATE_DISCOVERY_PROFILES(
+ hIhvExtAdapter: HANDLE,
+ bInsecure: BOOL,
+ pIhvProfileParams: PDOT11EXT_IHV_PROFILE_PARAMS,
+ pConnectableBssid: PDOT11_BSS_LIST,
+ pIhvDiscoveryProfileList: PDOT11EXT_IHV_DISCOVERY_PROFILE_LIST,
+ pdwReasonCode: PDWORD,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_PROCESS_SESSION_CHANGE(
+ uEventType: ULONG,
+ pSessionNotification: PWTSSESSION_NOTIFICATION,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_RECEIVE_INDICATION(
+ hIhvExtAdapter: HANDLE,
+ indicationType: DOT11EXT_IHV_INDICATION_TYPE,
+ uBufferLength: ULONG,
+ pvBuffer: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_RECEIVE_PACKET(
+ hIhvExtAdapter: HANDLE,
+ dwInBufferSize: DWORD,
+ pvInBuffer: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_SEND_PACKET_COMPLETION(
+ hSendCompletion: HANDLE,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_IS_UI_REQUEST_PENDING(
+ guidUIRequest: GUID,
+ pbIsRequestPending: PBOOL,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_PROCESS_UI_RESPONSE(
+ guidUIRequest: GUID,
+ dwByteCount: DWORD,
+ pvResponseBuffer: LPVOID,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_QUERY_UI_REQUEST(
+ hIhvExtAdapter: HANDLE,
+ connectionPhase: DOT11EXT_IHV_CONNECTION_PHASE,
+ ppIhvUIRequest: *mut PDOT11EXT_IHV_UI_REQUEST,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_ONEX_INDICATE_RESULT(
+ hIhvExtAdapter: HANDLE,
+ msOneXResult: DOT11_MSONEX_RESULT,
+ pDot11MsOneXResultParams: PDOT11_MSONEX_RESULT_PARAMS,
+) -> DWORD}
+FN!{stdcall DOT11EXTIHV_CONTROL(
+ hIhvExtAdapter: HANDLE,
+ dwInBufferSize: DWORD,
+ pInBuffer: PBYTE,
+ dwOutBufferSize: DWORD,
+ pOutBuffer: PBYTE,
+ pdwBytesReturned: PDWORD,
+) -> DWORD}
diff --git a/vendor/winapi/src/um/wlanihvtypes.rs b/vendor/winapi/src/um/wlanihvtypes.rs
new file mode 100644
index 000000000..d87d7b239
--- /dev/null
+++ b/vendor/winapi/src/um/wlanihvtypes.rs
@@ -0,0 +1,41 @@
+// 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.
+//! Structures used to hold information for IHV.
+use shared::guiddef::GUID;
+use shared::minwindef::{BOOL, BYTE, DWORD, ULONG};
+use shared::wlantypes::{DOT11_AUTH_ALGORITHM, DOT11_BSS_TYPE, DOT11_CIPHER_ALGORITHM, DOT11_SSID};
+use um::eaptypes::EAP_METHOD_TYPE;
+use um::winnt::WCHAR;
+STRUCT!{struct DOT11_MSSECURITY_SETTINGS {
+ dot11AuthAlgorithm: DOT11_AUTH_ALGORITHM,
+ dot11CipherAlgorithm: DOT11_CIPHER_ALGORITHM,
+ fOneXEnabled: BOOL,
+ eapMethodType: EAP_METHOD_TYPE,
+ dwEapConnectionDataLen: DWORD,
+ pEapConnectionData: *mut BYTE,
+}}
+pub type PDOT11_MSSECURITY_SETTINGS = *mut DOT11_MSSECURITY_SETTINGS;
+STRUCT!{struct DOT11EXT_IHV_SSID_LIST {
+ ulCount: ULONG,
+ SSIDs: [DOT11_SSID; 1],
+}}
+pub type PDOT11EXT_IHV_SSID_LIST = *mut DOT11EXT_IHV_SSID_LIST;
+STRUCT!{struct DOT11EXT_IHV_PROFILE_PARAMS {
+ pSsidList: PDOT11EXT_IHV_SSID_LIST,
+ BssType: DOT11_BSS_TYPE,
+ pMSSecuritySettings: PDOT11_MSSECURITY_SETTINGS,
+}}
+pub type PDOT11EXT_IHV_PROFILE_PARAMS = *mut DOT11EXT_IHV_PROFILE_PARAMS;
+pub const MS_MAX_PROFILE_NAME_LENGTH: usize = 256;
+pub const MS_PROFILE_GROUP_POLICY: DWORD = 0x00000001;
+pub const MS_PROFILE_USER: DWORD = 0x00000002;
+STRUCT!{struct DOT11EXT_IHV_PARAMS {
+ dot11ExtIhvProfileParams: DOT11EXT_IHV_PROFILE_PARAMS,
+ wstrProfileName: [WCHAR; MS_MAX_PROFILE_NAME_LENGTH],
+ dwProfileTypeFlags: DWORD,
+ interfaceGuid: GUID,
+}}
+pub type PDOT11EXT_IHV_PARAMS = *mut DOT11EXT_IHV_PARAMS;
diff --git a/vendor/winapi/src/um/wlclient.rs b/vendor/winapi/src/um/wlclient.rs
new file mode 100644
index 000000000..e8af80119
--- /dev/null
+++ b/vendor/winapi/src/um/wlclient.rs
@@ -0,0 +1,33 @@
+// 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::guiddef::GUID;
+use shared::minwindef::{BOOL, PUCHAR, UCHAR, ULONG, USHORT};
+use shared::windot11::{DOT11_CURRENT_OPERATION_MODE, DOT11_MAC_ADDRESS};
+use um::winnt::LPWSTR;
+STRUCT!{struct DOT11_ADAPTER {
+ gAdapterId: GUID,
+ pszDescription: LPWSTR,
+ Dot11CurrentOpMode: DOT11_CURRENT_OPERATION_MODE,
+}}
+pub type PDOT11_ADAPTER = *mut DOT11_ADAPTER;
+STRUCT!{struct DOT11_BSS_LIST {
+ uNumOfBytes: ULONG,
+ pucBuffer: PUCHAR,
+}}
+pub type PDOT11_BSS_LIST = *mut DOT11_BSS_LIST;
+STRUCT!{struct DOT11_PORT_STATE {
+ PeerMacAddress: DOT11_MAC_ADDRESS,
+ uSessionId: ULONG,
+ bPortControlled: BOOL,
+ bPortAuthorized: BOOL,
+}}
+pub type PDOT11_PORT_STATE = *mut DOT11_PORT_STATE;
+STRUCT!{#[repr(packed)] struct DOT11_SECURITY_PACKET_HEADER {
+ PeerMac: DOT11_MAC_ADDRESS,
+ usEtherType: USHORT,
+ Data: [UCHAR; 1],
+}}
+pub type PDOT11_SECURITY_PACKET_HEADER = *mut DOT11_SECURITY_PACKET_HEADER;
diff --git a/vendor/winapi/src/um/wow64apiset.rs b/vendor/winapi/src/um/wow64apiset.rs
new file mode 100644
index 000000000..90d4b724b
--- /dev/null
+++ b/vendor/winapi/src/um/wow64apiset.rs
@@ -0,0 +1,32 @@
+// 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::minwindef::{BOOL, PBOOL, PUSHORT, UINT};
+use um::winnt::{HANDLE, LPSTR, LPWSTR, PVOID};
+extern "system" {
+ pub fn Wow64DisableWow64FsRedirection(
+ OldValue: *mut PVOID,
+ ) -> BOOL;
+ pub fn Wow64RevertWow64FsRedirection(
+ OlValue: PVOID,
+ ) -> BOOL;
+ pub fn IsWow64Process(
+ hProcess: HANDLE,
+ Wow64Process: PBOOL,
+ ) -> BOOL;
+ pub fn GetSystemWow64DirectoryA(
+ lpBuffer: LPSTR,
+ uSize: UINT,
+ ) -> UINT;
+ pub fn GetSystemWow64DirectoryW(
+ lpBuffer: LPWSTR,
+ uSize: UINT,
+ ) -> UINT;
+ pub fn IsWow64Process2(
+ hProcess: HANDLE,
+ pProcessMachine: PUSHORT,
+ pNativeMachine: PUSHORT,
+ ) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/wpdmtpextensions.rs b/vendor/winapi/src/um/wpdmtpextensions.rs
new file mode 100644
index 000000000..7ff0b6dc7
--- /dev/null
+++ b/vendor/winapi/src/um/wpdmtpextensions.rs
@@ -0,0 +1,60 @@
+// 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::wtypes::PROPERTYKEY;
+DEFINE_GUID!{WPD_CATEGORY_MTP_EXT_VENDOR_OPERATIONS,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56}
+DEFINE_PROPERTYKEY!{WPD_COMMAND_MTP_EXT_GET_SUPPORTED_VENDOR_OPCODES,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 11}
+DEFINE_PROPERTYKEY!{WPD_COMMAND_MTP_EXT_EXECUTE_COMMAND_WITHOUT_DATA_PHASE,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 12}
+DEFINE_PROPERTYKEY!{WPD_COMMAND_MTP_EXT_EXECUTE_COMMAND_WITH_DATA_TO_READ,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 13}
+DEFINE_PROPERTYKEY!{WPD_COMMAND_MTP_EXT_EXECUTE_COMMAND_WITH_DATA_TO_WRITE,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 14}
+DEFINE_PROPERTYKEY!{WPD_COMMAND_MTP_EXT_READ_DATA,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 15}
+DEFINE_PROPERTYKEY!{WPD_COMMAND_MTP_EXT_WRITE_DATA,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 16}
+DEFINE_PROPERTYKEY!{WPD_COMMAND_MTP_EXT_END_DATA_TRANSFER,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 17}
+DEFINE_PROPERTYKEY!{WPD_COMMAND_MTP_EXT_GET_VENDOR_EXTENSION_DESCRIPTION,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 18}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_MTP_EXT_OPERATION_CODE,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 1001}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_MTP_EXT_OPERATION_PARAMS,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 1002}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_MTP_EXT_RESPONSE_CODE,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 1003}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_MTP_EXT_RESPONSE_PARAMS,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 1004}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_MTP_EXT_VENDOR_OPERATION_CODES,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 1005}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_MTP_EXT_TRANSFER_CONTEXT,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 1006}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_MTP_EXT_TRANSFER_TOTAL_DATA_SIZE,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 1007}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_MTP_EXT_TRANSFER_NUM_BYTES_TO_READ,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 1008}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_MTP_EXT_TRANSFER_NUM_BYTES_READ,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 1009}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_MTP_EXT_TRANSFER_NUM_BYTES_TO_WRITE,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 1010}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_MTP_EXT_TRANSFER_NUM_BYTES_WRITTEN,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 1011}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_MTP_EXT_TRANSFER_DATA,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 1012}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_MTP_EXT_OPTIMAL_TRANSFER_BUFFER_SIZE,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 1013}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_MTP_EXT_VENDOR_EXTENSION_DESCRIPTION,
+ 0x4d545058, 0x1a2e, 0x4106, 0xa3, 0x57, 0x77, 0x1e, 0x08, 0x19, 0xfc, 0x56, 1014}
+DEFINE_GUID!{WPD_PROPERTIES_MTP_VENDOR_EXTENDED_OBJECT_PROPS,
+ 0x4d545058, 0x4fce, 0x4578, 0x95, 0xc8, 0x86, 0x98, 0xa9, 0xbc, 0x0f, 0x49}
+DEFINE_GUID!{WPD_PROPERTIES_MTP_VENDOR_EXTENDED_DEVICE_PROPS,
+ 0x4d545058, 0x8900, 0x40b3, 0x8f, 0x1d, 0xdc, 0x24, 0x6e, 0x1e, 0x83, 0x70}
+DEFINE_GUID!{WPD_EVENT_MTP_VENDOR_EXTENDED_EVENTS,
+ 0x00000000, 0x5738, 0x4ff2, 0x84, 0x45, 0xbe, 0x31, 0x26, 0x69, 0x10, 0x59}
+DEFINE_PROPERTYKEY!{WPD_PROPERTY_MTP_EXT_EVENT_PARAMS,
+ 0x4d545058, 0xef88, 0x4e4d, 0x95, 0xc3, 0x4f, 0x32, 0x7f, 0x72, 0x8a, 0x96, 1011}
diff --git a/vendor/winapi/src/um/ws2bth.rs b/vendor/winapi/src/um/ws2bth.rs
new file mode 100644
index 000000000..7494f9261
--- /dev/null
+++ b/vendor/winapi/src/um/ws2bth.rs
@@ -0,0 +1,211 @@
+// 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::bthdef::{
+ BTH_ADDR, MAX_L2CAP_INFO_DATA_LENGTH, MAX_L2CAP_PING_DATA_LENGTH, MAX_UUIDS_IN_QUERY,
+};
+use shared::bthsdpdef::{SdpAttributeRange, SdpQueryUuid};
+use shared::guiddef::GUID;
+use shared::minwindef::{DWORD, PULONG, UCHAR, ULONG, USHORT};
+use shared::ws2def::IOC_VENDOR;
+use um::winnt::HANDLE;
+pub const BT_PORT_ANY: ULONG = -1i32 as ULONG;
+pub const BT_PORT_MIN: ULONG = 0x1;
+pub const BT_PORT_MAX: ULONG = 0xffff;
+pub const BT_PORT_DYN_FIRST: ULONG = 0x1001;
+pub const AF_BTH: USHORT = 32;
+pub const PH_BTH: USHORT = AF_BTH;
+pub const NS_BTH: USHORT = 16;
+STRUCT!{#[repr(packed)] struct SOCKADDR_BTH {
+ addressFamily: USHORT,
+ btAddr: BTH_ADDR,
+ serviceClassId: GUID,
+ port: ULONG,
+}}
+pub type PSOCKADDR_BTH = *mut SOCKADDR_BTH;
+DEFINE_GUID!{SVCID_BTH_PROVIDER,
+ 0x6aa63e0, 0x7d60, 0x41ff, 0xaf, 0xb2, 0x3e, 0xe6, 0xd2, 0xd9, 0x39, 0x2d}
+pub const BTH_ADDR_STRING_SIZE: DWORD = 12;
+pub const BTHPROTO_RFCOMM: USHORT = 0x0003;
+pub const BTHPROTO_L2CAP: USHORT = 0x0100;
+pub const SOL_RFCOMM: USHORT = BTHPROTO_RFCOMM;
+pub const SOL_L2CAP: USHORT = BTHPROTO_L2CAP;
+pub const SOL_SDP: USHORT = 0x0101;
+pub const SO_BTH_AUTHENTICATE: ULONG = 0x80000001;
+pub const SO_BTH_ENCRYPT: ULONG = 0x00000002;
+pub const SO_BTH_MTU: ULONG = 0x80000007;
+pub const SO_BTH_MTU_MAX: ULONG = 0x80000008;
+pub const SO_BTH_MTU_MIN: ULONG = 0x8000000a;
+pub const RFCOMM_MAX_MTU: ULONG = 0x000003F3;
+pub const RFCOMM_MIN_MTU: ULONG = 0x00000017;
+pub const BTH_SDP_VERSION: ULONG = 1;
+STRUCT!{#[repr(packed)] struct BTH_SET_SERVICE {
+ pSdpVersion: PULONG,
+ pRecordHandle: HANDLE,
+ fCodService: ULONG,
+ Reserved: [ULONG; 5],
+ ulRecordLength: ULONG,
+ pRecord: [UCHAR; 1],
+}}
+pub type PBTH_SET_SERVICE = *mut BTH_SET_SERVICE;
+pub const SDP_DEFAULT_INQUIRY_SECONDS: UCHAR = 6;
+pub const SDP_MAX_INQUIRY_SECONDS: UCHAR = 60;
+pub const SDP_DEFAULT_INQUIRY_MAX_RESPONSES: UCHAR = 255;
+pub const SDP_SERVICE_SEARCH_REQUEST: ULONG = 1;
+pub const SDP_SERVICE_ATTRIBUTE_REQUEST: ULONG = 2;
+pub const SDP_SERVICE_SEARCH_ATTRIBUTE_REQUEST: ULONG = 3;
+STRUCT!{#[repr(packed)] struct BTH_QUERY_DEVICE {
+ LAP: ULONG,
+ length: UCHAR,
+}}
+pub type PBTH_QUERY_DEVICE = *mut BTH_QUERY_DEVICE;
+STRUCT!{#[repr(packed)] struct BTH_QUERY_SERVICE {
+ type_: ULONG,
+ serviceHandle: ULONG,
+ uuids: [SdpQueryUuid; MAX_UUIDS_IN_QUERY],
+ numRange: ULONG,
+ pRange: [SdpAttributeRange; 1],
+}}
+pub type PBTH_QUERY_SERVICE = *mut BTH_QUERY_SERVICE;
+pub const BTHNS_RESULT_DEVICE_CONNECTED: DWORD = 0x00010000;
+pub const BTHNS_RESULT_DEVICE_REMEMBERED: DWORD = 0x00020000;
+pub const BTHNS_RESULT_DEVICE_AUTHENTICATED: DWORD = 0x00040000;
+pub const SIO_RFCOMM_SEND_COMMAND: DWORD = _WSAIORW!(IOC_VENDOR, 101);
+pub const SIO_RFCOMM_WAIT_COMMAND: DWORD = _WSAIORW!(IOC_VENDOR, 102);
+pub const SIO_BTH_PING: DWORD = _WSAIORW!(IOC_VENDOR, 8);
+pub const SIO_BTH_INFO: DWORD = _WSAIORW!(IOC_VENDOR, 9);
+pub const SIO_RFCOMM_SESSION_FLOW_OFF: DWORD = _WSAIORW!(IOC_VENDOR, 103);
+pub const SIO_RFCOMM_TEST: DWORD = _WSAIORW!(IOC_VENDOR, 104);
+pub const SIO_RFCOMM_USECFC: DWORD = _WSAIORW!(IOC_VENDOR, 105);
+macro_rules! BIT {
+ ($b:expr) => {
+ 1 << $b
+ };
+}
+STRUCT!{#[repr(packed)] struct RFCOMM_MSC_DATA {
+ Signals: UCHAR,
+ Break: UCHAR,
+}}
+pub type PRFCOMM_MSC_DATA = *mut RFCOMM_MSC_DATA;
+pub const MSC_EA_BIT: UCHAR = BIT!(0);
+pub const MSC_FC_BIT: UCHAR = BIT!(1);
+pub const MSC_RTC_BIT: UCHAR = BIT!(2);
+pub const MSC_RTR_BIT: UCHAR = BIT!(3);
+pub const MSC_RESERVED: UCHAR = BIT!(4) | BIT!(5);
+pub const MSC_IC_BIT: UCHAR = BIT!(6);
+pub const MSC_DV_BIT: UCHAR = BIT!(7);
+pub const MSC_BREAK_BIT: UCHAR = BIT!(1);
+macro_rules! MSC_SET_BREAK_LENGTH {
+ ($b: expr, $l: expr) => {
+ ($b & 0x3) | (($l & 0xf) << 4)
+ };
+}
+STRUCT!{#[repr(packed)] struct RFCOMM_RLS_DATA {
+ LineStatus: UCHAR,
+}}
+pub type PRFCOMM_RLS_DATA = *mut RFCOMM_RLS_DATA;
+pub const RLS_ERROR: UCHAR = 0x01;
+pub const RLS_OVERRUN: UCHAR = 0x02;
+pub const RLS_PARITY: UCHAR = 0x04;
+pub const RLS_FRAMING: UCHAR = 0x08;
+STRUCT!{#[repr(packed)] struct RFCOMM_RPN_DATA {
+ Baud: UCHAR,
+ Data: UCHAR,
+ FlowControl: UCHAR,
+ XonChar: UCHAR,
+ XoffChar: UCHAR,
+ ParameterMask1: UCHAR,
+ ParameterMask2: UCHAR,
+}}
+pub type PRFCOMM_RPN_DATA = *mut RFCOMM_RPN_DATA;
+pub const RPN_BAUD_2400: UCHAR = 0;
+pub const RPN_BAUD_4800: UCHAR = 1;
+pub const RPN_BAUD_7200: UCHAR = 2;
+pub const RPN_BAUD_9600: UCHAR = 3;
+pub const RPN_BAUD_19200: UCHAR = 4;
+pub const RPN_BAUD_38400: UCHAR = 5;
+pub const RPN_BAUD_57600: UCHAR = 6;
+pub const RPN_BAUD_115200: UCHAR = 7;
+pub const RPN_BAUD_230400: UCHAR = 8;
+pub const RPN_DATA_5: UCHAR = 0x0;
+pub const RPN_DATA_6: UCHAR = 0x1;
+pub const RPN_DATA_7: UCHAR = 0x2;
+pub const RPN_DATA_8: UCHAR = 0x3;
+pub const RPN_STOP_1: UCHAR = 0x0;
+pub const RPN_STOP_1_5: UCHAR = 0x4;
+pub const RPN_PARITY_NONE: UCHAR = 0x00;
+pub const RPN_PARITY_ODD: UCHAR = 0x08;
+pub const RPN_PARITY_EVEN: UCHAR = 0x18;
+pub const RPN_PARITY_MARK: UCHAR = 0x28;
+pub const RPN_PARITY_SPACE: UCHAR = 0x38;
+pub const RPN_FLOW_X_IN: UCHAR = 0x01;
+pub const RPN_FLOW_X_OUT: UCHAR = 0x02;
+pub const RPN_FLOW_RTR_IN: UCHAR = 0x04;
+pub const RPN_FLOW_RTR_OUT: UCHAR = 0x08;
+pub const RPN_FLOW_RTC_IN: UCHAR = 0x10;
+pub const RPN_FLOW_RTC_OUT: UCHAR = 0x20;
+pub const RPN_PARAM_BAUD: UCHAR = 0x01;
+pub const RPN_PARAM_DATA: UCHAR = 0x02;
+pub const RPN_PARAM_STOP: UCHAR = 0x04;
+pub const RPN_PARAM_PARITY: UCHAR = 0x08;
+pub const RPN_PARAM_P_TYPE: UCHAR = 0x10;
+pub const RPN_PARAM_XON: UCHAR = 0x20;
+pub const RPN_PARAM_XOFF: UCHAR = 0x40;
+pub const RPN_PARAM_X_IN: UCHAR = 0x01;
+pub const RPN_PARAM_X_OUT: UCHAR = 0x02;
+pub const RPN_PARAM_RTR_IN: UCHAR = 0x04;
+pub const RPN_PARAM_RTR_OUT: UCHAR = 0x08;
+pub const RPN_PARAM_RTC_IN: UCHAR = 0x10;
+pub const RPN_PARAM_RTC_OUT: UCHAR = 0x20;
+pub const RFCOMM_CMD_NONE: UCHAR = 0;
+pub const RFCOMM_CMD_MSC: UCHAR = 1;
+pub const RFCOMM_CMD_RLS: UCHAR = 2;
+pub const RFCOMM_CMD_RPN: UCHAR = 3;
+pub const RFCOMM_CMD_RPN_REQUEST: UCHAR = 4;
+pub const RFCOMM_CMD_RPN_RESPONSE: UCHAR = 5;
+UNION!{#[repr(packed)] union RFCOMM_COMMAND_Data {
+ [u8; 7],
+ MSC MSC_mut: RFCOMM_MSC_DATA,
+ RLS RLS_mut: RFCOMM_RLS_DATA,
+ RPN RPN_mut: RFCOMM_RPN_DATA,
+}}
+STRUCT!{#[repr(packed)] struct RFCOMM_COMMAND {
+ CmdType: ULONG,
+ Data: RFCOMM_COMMAND_Data,
+}}
+pub type PRFCOMM_COMMAND = *mut RFCOMM_COMMAND;
+STRUCT!{#[repr(packed)] struct BTH_PING_REQ {
+ btAddr: BTH_ADDR,
+ dataLen: UCHAR,
+ data: [UCHAR; MAX_L2CAP_PING_DATA_LENGTH],
+}}
+pub type PBTH_PING_REQ = *mut BTH_PING_REQ;
+STRUCT!{#[repr(packed)] struct BTH_PING_RSP {
+ dataLen: UCHAR,
+ data: [UCHAR; MAX_L2CAP_PING_DATA_LENGTH],
+}}
+pub type PBTH_PING_RSP = *mut BTH_PING_RSP;
+STRUCT!{#[repr(packed)] struct BTH_INFO_REQ {
+ btAddr: BTH_ADDR,
+ infoType: USHORT,
+}}
+pub type PBTH_INFO_REQ = *mut BTH_INFO_REQ;
+UNION!{#[repr(packed)] union BTH_INFO_RSP_u {
+ [u8; MAX_L2CAP_INFO_DATA_LENGTH],
+ connectionlessMTU connectionlessMTU_mut: USHORT,
+ data data_mut: [UCHAR; MAX_L2CAP_INFO_DATA_LENGTH],
+}}
+STRUCT!{#[repr(packed)] struct BTH_INFO_RSP {
+ result: USHORT,
+ dataLen: UCHAR,
+ u: BTH_INFO_RSP_u,
+}}
+pub type PBTH_INFO_RSP = *mut BTH_INFO_RSP;
+pub type BTHNS_SETBLOB = BTH_SET_SERVICE;
+pub type PBTHNS_SETBLOB = PBTH_SET_SERVICE;
+pub type BTHNS_INQUIRYBLOB = BTH_QUERY_DEVICE;
+pub type PBTHNS_INQUIRYBLOB = PBTH_QUERY_DEVICE;
+pub type BTHNS_RESTRICTIONBLOB = BTH_QUERY_SERVICE;
+pub type PBTHNS_RESTRICTIONBLOB = PBTH_QUERY_SERVICE;
diff --git a/vendor/winapi/src/um/ws2spi.rs b/vendor/winapi/src/um/ws2spi.rs
new file mode 100644
index 000000000..d26128949
--- /dev/null
+++ b/vendor/winapi/src/um/ws2spi.rs
@@ -0,0 +1,909 @@
+// 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.
+//! Definitions to be used with the WinSock service provider.
+use ctypes::{c_char, c_int, c_long, c_uint};
+use shared::basetsd::{DWORD_PTR, PDWORD_PTR, ULONG_PTR};
+use shared::guiddef::{GUID, LPGUID};
+use shared::minwindef::{
+ BOOL, DWORD, INT, LPARAM, LPDWORD, LPHANDLE, LPINT, LPVOID, PBYTE, UINT, WORD, WPARAM,
+};
+use shared::windef::HWND;
+use shared::ws2def::{LPSOCKADDR, LPWSABUF, SOCKADDR};
+use shared::wtypesbase::LPBLOB;
+use um::winnt::{HANDLE, LPCWSTR, LPWSTR, PVOID, WCHAR};
+use um::winsock2::{
+ GROUP, LPCONDITIONPROC, LPQOS, LPWSACOMPLETION, LPWSANETWORKEVENTS, LPWSAOVERLAPPED,
+ LPWSAOVERLAPPED_COMPLETION_ROUTINE, LPWSAPROTOCOL_INFOW, LPWSAQUERYSET2W, LPWSAQUERYSETW,
+ LPWSASERVICECLASSINFOW, SOCKET, WSAESETSERVICEOP, WSAEVENT, fd_set, timeval,
+};
+#[cfg(target_pointer_width = "64")]
+use um::winsock2::{LPWSANAMESPACE_INFOEXW, LPWSANAMESPACE_INFOW};
+use vc::vcruntime::size_t;
+pub const WSPDESCRIPTION_LEN: usize = 255;
+pub const WSS_OPERATION_IN_PROGRESS: ULONG_PTR = 0x00000103;
+STRUCT!{struct WSPDATA {
+ wVersion: WORD,
+ wHighVersion: WORD,
+ szDescription: [WCHAR; WSPDESCRIPTION_LEN + 1],
+}}
+pub type LPWSPDATA = *mut WSPDATA;
+STRUCT!{struct WSATHREADID {
+ ThreadHandle: HANDLE,
+ Reserved: DWORD_PTR,
+}}
+pub type LPWSATHREADID = *mut WSATHREADID;
+FN!{stdcall LPBLOCKINGCALLBACK(
+ dwContext: DWORD_PTR,
+) -> BOOL}
+FN!{stdcall LPWSAUSERAPC(
+ dwContext: DWORD_PTR,
+) -> ()}
+FN!{stdcall LPWSPACCEPT(
+ s: SOCKET,
+ addr: *mut SOCKADDR,
+ addrlen: LPINT,
+ lpfnCondition: LPCONDITIONPROC,
+ dwCallbackData: DWORD_PTR,
+ lpErrno: LPINT,
+) -> SOCKET}
+FN!{stdcall LPWSPADDRESSTOSTRING(
+ lpsaAddress: LPSOCKADDR,
+ dwAddressLength: DWORD,
+ lpProtocolInfo: LPWSAPROTOCOL_INFOW,
+ lpszAddressString: LPWSTR,
+ lpdwAddressStringLength: LPDWORD,
+ lpErrno: LPINT,
+) -> INT}
+FN!{stdcall LPWSPASYNCSELECT(
+ s: SOCKET,
+ hWnd: HWND,
+ wMsg: c_uint,
+ lEvent: c_long,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPBIND(
+ s: SOCKET,
+ name: *mut SOCKADDR,
+ namelen: c_int,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPCANCELBLOCKINGCALL(
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPCLEANUP(
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPCLOSESOCKET(
+ s: SOCKET,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPCONNECT(
+ s: SOCKET,
+ name: *mut SOCKADDR,
+ namelen: c_int,
+ lpCallerData: LPWSABUF,
+ lpCalleeData: LPWSABUF,
+ lpSQOS: LPQOS,
+ lpGQOS: LPQOS,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPDUPLICATESOCKET(
+ s: SOCKET,
+ dwProcessId: DWORD,
+ lpProtocolInfo: LPWSAPROTOCOL_INFOW,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPENUMNETWORKEVENTS(
+ s: SOCKET,
+ hEventObject: WSAEVENT,
+ lpNetworkEvents: LPWSANETWORKEVENTS,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPEVENTSELECT(
+ s: SOCKET,
+ hEventObject: WSAEVENT,
+ lNetworkEvents: c_long,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPGETOVERLAPPEDRESULT(
+ s: SOCKET,
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpcbTransfer: LPDWORD,
+ fWait: BOOL,
+ lpdwFlags: LPDWORD,
+ lpErrno: LPINT,
+) -> BOOL}
+FN!{stdcall LPWSPGETPEERNAME(
+ s: SOCKET,
+ name: *mut SOCKADDR,
+ namelen: LPINT,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPGETSOCKNAME(
+ s: SOCKET,
+ name: *mut SOCKADDR,
+ namelen: LPINT,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPGETSOCKOPT(
+ s: SOCKET,
+ level: c_int,
+ optname: c_int,
+ optval: *mut c_char,
+ optlen: LPINT,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPGETQOSBYNAME(
+ s: SOCKET,
+ lpQOSName: LPWSABUF,
+ lpQOS: LPQOS,
+ lpErrno: LPINT,
+) -> BOOL}
+FN!{stdcall LPWSPIOCTL(
+ s: SOCKET,
+ dwIoControlCode: DWORD,
+ lpvInBuffer: LPVOID,
+ cbInBuffer: DWORD,
+ lpvOutBuffer: LPVOID,
+ cbOutBuffer: DWORD,
+ lpcbBytesReturned: LPDWORD,
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+ lpThreadId: LPWSATHREADID,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPJOINLEAF(
+ s: SOCKET,
+ name: *mut SOCKADDR,
+ namelen: c_int,
+ lpCallerData: LPWSABUF,
+ lpCalleeData: LPWSABUF,
+ lpSQOS: LPQOS,
+ lpGQOS: LPQOS,
+ dwFlags: DWORD,
+ lpErrno: LPINT,
+) -> SOCKET}
+FN!{stdcall LPWSPLISTEN(
+ s: SOCKET,
+ backlog: c_int,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPRECV(
+ s: SOCKET,
+ lpBuffers: LPWSABUF,
+ dwBufferCount: DWORD,
+ lpNumberOfBytesRecvd: LPDWORD,
+ lpFlags: LPDWORD,
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+ lpThreadId: LPWSATHREADID,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPRECVDISCONNECT(
+ s: SOCKET,
+ lpInboundDisconnectData: LPWSABUF,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPRECVFROM(
+ s: SOCKET,
+ lpBuffers: LPWSABUF,
+ dwBufferCount: DWORD,
+ lpNumberOfBytesRecvd: LPDWORD,
+ lpFlags: LPDWORD,
+ lpFrom: *mut SOCKADDR,
+ lpFromlen: LPINT,
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+ lpThreadId: LPWSATHREADID,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPSELECT(
+ nfds: c_int,
+ readfds: *mut fd_set,
+ writefds: *mut fd_set,
+ exceptfds: *mut fd_set,
+ timeout: *const timeval,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPSEND(
+ s: SOCKET,
+ lpBuffers: LPWSABUF,
+ dwBufferCount: DWORD,
+ lpNumberOfBytesSent: LPDWORD,
+ dwFlags: DWORD,
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+ lpThreadId: LPWSATHREADID,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPSENDDISCONNECT(
+ s: SOCKET,
+ lpOutboundDisconnectData: LPWSABUF,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPSENDTO(
+ s: SOCKET,
+ lpBuffers: LPWSABUF,
+ dwBufferCount: DWORD,
+ lpNumberOfBytesSent: LPDWORD,
+ dwFlags: DWORD,
+ lpTo: *const SOCKADDR,
+ iTolen: c_int,
+ lpOverlapped: LPWSAOVERLAPPED,
+ lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+ lpThreadId: LPWSATHREADID,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPSETSOCKOPT(
+ s: SOCKET,
+ level: c_int,
+ optname: c_int,
+ optval: *const c_char,
+ optlen: c_int,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPSHUTDOWN(
+ s: SOCKET,
+ how: c_int,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWSPSOCKET(
+ af: c_int,
+ _type: c_int,
+ protocol: c_int,
+ lpProtocolInfo: LPWSAPROTOCOL_INFOW,
+ g: GROUP,
+ dwFlags: DWORD,
+ lpErrno: LPINT,
+) -> SOCKET}
+FN!{stdcall LPWSPSTRINGTOADDRESS(
+ AddressString: LPWSTR,
+ AddressFamily: INT,
+ lpProtocolInfo: LPWSAPROTOCOL_INFOW,
+ lpAddress: LPSOCKADDR,
+ lpAddressLength: LPINT,
+ lpErrno: LPINT,
+) -> c_int}
+STRUCT!{struct WSPPROC_TABLE {
+ lpWSPAccept: LPWSPACCEPT,
+ lpWSPAddressToString: LPWSPADDRESSTOSTRING,
+ lpWSPAsyncSelect: LPWSPASYNCSELECT,
+ lpWSPBind: LPWSPBIND,
+ lpWSPCancelBlockingCall: LPWSPCANCELBLOCKINGCALL,
+ lpWSPCleanup: LPWSPCLEANUP,
+ lpWSPCloseSocket: LPWSPCLOSESOCKET,
+ lpWSPConnect: LPWSPCONNECT,
+ lpWSPDuplicateSocket: LPWSPDUPLICATESOCKET,
+ lpWSPEnumNetworkEvents: LPWSPENUMNETWORKEVENTS,
+ lpWSPEventSelect: LPWSPEVENTSELECT,
+ lpWSPGetOverlappedResult: LPWSPGETOVERLAPPEDRESULT,
+ lpWSPGetPeerName: LPWSPGETPEERNAME,
+ lpWSPGetSockName: LPWSPGETSOCKNAME,
+ lpWSPGetSockOpt: LPWSPGETSOCKOPT,
+ lpWSPGetQOSByName: LPWSPGETQOSBYNAME,
+ lpWSPIoctl: LPWSPIOCTL,
+ lpWSPJoinLeaf: LPWSPJOINLEAF,
+ lpWSPListen: LPWSPLISTEN,
+ lpWSPRecv: LPWSPRECV,
+ lpWSPRecvDisconnect: LPWSPRECVDISCONNECT,
+ lpWSPRecvFrom: LPWSPRECVFROM,
+ lpWSPSelect: LPWSPSELECT,
+ lpWSPSend: LPWSPSEND,
+ lpWSPSendDisconnect: LPWSPSENDDISCONNECT,
+ lpWSPSendTo: LPWSPSENDTO,
+ lpWSPSetSockOpt: LPWSPSETSOCKOPT,
+ lpWSPShutdown: LPWSPSHUTDOWN,
+ lpWSPSocket: LPWSPSOCKET,
+ lpWSPStringToAddress: LPWSPSTRINGTOADDRESS,
+}}
+pub type LPWSPPROC_TABLE = *mut WSPPROC_TABLE;
+FN!{stdcall LPWPUCLOSEEVENT(
+ hEvent: WSAEVENT,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWPUCLOSESOCKETHANDLE(
+ s: SOCKET,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWPUCREATEEVENT(
+ lpErrno: LPINT,
+) -> WSAEVENT}
+FN!{stdcall LPWPUCREATESOCKETHANDLE(
+ dwCatalogEntryId: DWORD,
+ dwContext: DWORD_PTR,
+ lpErrno: LPINT,
+) -> SOCKET}
+FN!{stdcall LPWPUFDISSET(
+ s: SOCKET,
+ fdset: *mut fd_set,
+) -> c_int}
+FN!{stdcall LPWPUGETPROVIDERPATH(
+ lpProviderId: LPGUID,
+ lpszProviderDllPath: *mut WCHAR,
+ lpProviderDllPathLen: LPINT,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWPUMODIFYIFSHANDLE(
+ dwCatalogEntryId: DWORD,
+ ProposedHandle: SOCKET,
+ lpErrno: LPINT,
+) -> SOCKET}
+FN!{stdcall LPWPUPOSTMESSAGE(
+ hWnd: HWND,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+) -> BOOL}
+FN!{stdcall LPWPUQUERYBLOCKINGCALLBACK(
+ dwCatalogEntryId: DWORD,
+ lplpfnCallback: *mut LPBLOCKINGCALLBACK,
+ lpdwContext: PDWORD_PTR,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWPUQUERYSOCKETHANDLECONTEXT(
+ s: SOCKET,
+ lpContext: PDWORD_PTR,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWPUQUEUEAPC(
+ lpThreadId: LPWSATHREADID,
+ lpfnUserApc: LPWSAUSERAPC,
+ dwContext: DWORD_PTR,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWPURESETEVENT(
+ hEvent: WSAEVENT,
+ lpErrno: LPINT,
+) -> BOOL}
+FN!{stdcall LPWPUSETEVENT(
+ hEvent: WSAEVENT,
+ lpErrno: LPINT,
+) -> BOOL}
+FN!{stdcall LPWPUOPENCURRENTTHREAD(
+ lpThreadId: LPWSATHREADID,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWPUCLOSETHREAD(
+ lpThreadId: LPWSATHREADID,
+ lpErrno: LPINT,
+) -> c_int}
+FN!{stdcall LPWPUCOMPLETEOVERLAPPEDREQUEST(
+ s: SOCKET,
+ lpOverlapped: LPWSAOVERLAPPED,
+ dwError: DWORD,
+ cbTransferred: DWORD,
+ lpErrno: LPINT,
+) -> c_int}
+STRUCT!{struct WSPUPCALLTABLE {
+ lpWPUCloseEvent: LPWPUCLOSEEVENT,
+ lpWPUCloseSocketHandle: LPWPUCLOSESOCKETHANDLE,
+ lpWPUCreateEvent: LPWPUCREATEEVENT,
+ lpWPUCreateSocketHandle: LPWPUCREATESOCKETHANDLE,
+ lpWPUFDIsSet: LPWPUFDISSET,
+ lpWPUGetProviderPath: LPWPUGETPROVIDERPATH,
+ lpWPUModifyIFSHandle: LPWPUMODIFYIFSHANDLE,
+ lpWPUPostMessage: LPWPUPOSTMESSAGE,
+ lpWPUQueryBlockingCallback: LPWPUQUERYBLOCKINGCALLBACK,
+ lpWPUQuerySocketHandleContext: LPWPUQUERYSOCKETHANDLECONTEXT,
+ lpWPUQueueApc: LPWPUQUEUEAPC,
+ lpWPUResetEvent: LPWPURESETEVENT,
+ lpWPUSetEvent: LPWPUSETEVENT,
+ lpWPUOpenCurrentThread: LPWPUOPENCURRENTTHREAD,
+ lpWPUCloseThread: LPWPUCLOSETHREAD,
+}}
+pub type LPWSPUPCALLTABLE = *mut WSPUPCALLTABLE;
+extern "system" {
+ pub fn WSPStartup(
+ wVersionRequested: WORD,
+ lpWSPData: LPWSPDATA,
+ lpProtocolInfo: LPWSAPROTOCOL_INFOW,
+ UpcallTable: WSPUPCALLTABLE,
+ lpProcTable: LPWSPPROC_TABLE,
+ ) -> c_int;
+}
+FN!{stdcall LPWSPSTARTUP(
+ wVersionRequested: WORD,
+ lpWSPData: LPWSPDATA,
+ lpProtocolInfo: LPWSAPROTOCOL_INFOW,
+ UpcallTable: WSPUPCALLTABLE,
+ lpProcTable: LPWSPPROC_TABLE,
+) -> c_int}
+extern "system" {
+ pub fn WSCEnumProtocols(
+ lpiProtocols: LPINT,
+ lpProtocolBuffer: LPWSAPROTOCOL_INFOW,
+ lpdwBufferLength: LPDWORD,
+ lpErrno: LPINT,
+ ) -> c_int;
+}
+FN!{stdcall LPWSCENUMPROTOCOLS(
+ lpiProtocols: LPINT,
+ lpProtocolBuffer: LPWSAPROTOCOL_INFOW,
+ lpdwBufferLength: LPDWORD,
+ lpErrno: LPINT,
+) -> c_int}
+extern "system" {
+ #[cfg(target_pointer_width = "64")]
+ pub fn WSCEnumProtocols32(
+ lpiProtocols: LPINT,
+ lpProtocolBuffer: LPWSAPROTOCOL_INFOW,
+ lpdwBufferLength: LPDWORD,
+ lpErrno: LPINT,
+ ) -> c_int;
+ pub fn WSCDeinstallProvider(
+ lpProviderId: LPGUID,
+ lpErrno: LPINT,
+ ) -> c_int;
+}
+FN!{stdcall LPWSCDEINSTALLPROVIDER(
+ lpProviderId: LPGUID,
+ lpErrno: LPINT,
+) -> c_int}
+extern "system" {
+ #[cfg(target_pointer_width = "64")]
+ pub fn WSCDeinstallProvider32(
+ lpProviderId: LPGUID,
+ lpErrno: LPINT,
+ ) -> c_int;
+ pub fn WSCInstallProvider(
+ lpProviderId: LPGUID,
+ lpszProviderDllPath: *const WCHAR,
+ lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
+ dwNumberOfEntries: DWORD,
+ lpErrno: LPINT,
+ ) -> c_int;
+}
+FN!{stdcall LPWSCINSTALLPROVIDER(
+ lpProviderId: LPGUID,
+ lpszProviderDllPath: *const WCHAR,
+ lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
+ dwNumberOfEntries: DWORD,
+ lpErrno: LPINT,
+) -> c_int}
+extern "system" {
+ #[cfg(target_pointer_width = "64")]
+ pub fn WSCInstallProvider64_32(
+ lpProviderId: LPGUID,
+ lpszProviderDllPath: *const WCHAR,
+ lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
+ dwNumberOfEntries: DWORD,
+ lpErrno: LPINT,
+ ) -> c_int;
+ pub fn WSCGetProviderPath(
+ lpProviderId: LPGUID,
+ lpszProviderDllPath: *mut WCHAR,
+ lpProviderDllPathLen: LPINT,
+ lpErrno: LPINT,
+ ) -> c_int;
+}
+FN!{stdcall LPWSCGETPROVIDERPATH(
+ lpProviderId: LPGUID,
+ lpszProviderDllPath: *mut WCHAR,
+ lpProviderDllPathLen: LPINT,
+ lpErrno: LPINT,
+) -> c_int}
+extern "system" {
+ #[cfg(target_pointer_width = "64")]
+ pub fn WSCGetProviderPath32(
+ lpProviderId: LPGUID,
+ lpszProviderDllPath: *mut WCHAR,
+ lpProviderDllPathLen: LPINT,
+ lpErrno: LPINT,
+ ) -> c_int;
+ pub fn WSCUpdateProvider(
+ lpProviderId: LPGUID,
+ lpszProviderDllPath: *const WCHAR,
+ lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
+ dwNumberOfEntries: DWORD,
+ lpErrno: LPINT,
+ ) -> c_int;
+}
+FN!{stdcall LPWSCUPDATEPROVIDER(
+ lpProviderId: LPGUID,
+ lpszProviderDllPath: *const WCHAR,
+ lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
+ dwNumberOfEntries: DWORD,
+ lpErrno: LPINT,
+) -> c_int}
+#[cfg(target_pointer_width = "64")]
+extern "system" {
+ pub fn WSCUpdateProvider32(
+ lpProviderId: LPGUID,
+ lpszProviderDllPath: *const WCHAR,
+ lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
+ dwNumberOfEntries: DWORD,
+ lpErrno: LPINT,
+ ) -> c_int;
+}
+pub const LSP_SYSTEM: DWORD = 0x80000000;
+pub const LSP_INSPECTOR: DWORD = 0x00000001;
+pub const LSP_REDIRECTOR: DWORD = 0x00000002;
+pub const LSP_PROXY: DWORD = 0x00000004;
+pub const LSP_FIREWALL: DWORD = 0x00000008;
+pub const LSP_INBOUND_MODIFY: DWORD = 0x00000010;
+pub const LSP_OUTBOUND_MODIFY: DWORD = 0x00000020;
+pub const LSP_CRYPTO_COMPRESS: DWORD = 0x00000040;
+pub const LSP_LOCAL_CACHE: DWORD = 0x00000080;
+ENUM!{enum WSC_PROVIDER_INFO_TYPE {
+ ProviderInfoLspCategories,
+ ProviderInfoAudit,
+}}
+STRUCT!{struct WSC_PROVIDER_AUDIT_INFO {
+ RecordSize: DWORD,
+ Reserved: PVOID,
+}}
+extern "system" {
+ pub fn WSCSetProviderInfo(
+ lpProviderId: LPGUID,
+ InfoType: WSC_PROVIDER_INFO_TYPE,
+ Info: PBYTE,
+ InfoSize: size_t,
+ Flags: DWORD,
+ lpErrno: LPINT,
+ ) -> c_int;
+ pub fn WSCGetProviderInfo(
+ lpProviderId: LPGUID,
+ InfoType: WSC_PROVIDER_INFO_TYPE,
+ Info: PBYTE,
+ InfoSize: *mut size_t,
+ Flags: DWORD,
+ lpErrno: LPINT,
+ ) -> c_int;
+ #[cfg(target_pointer_width = "64")]
+ pub fn WSCSetProviderInfo32(
+ lpProviderId: LPGUID,
+ InfoType: WSC_PROVIDER_INFO_TYPE,
+ Info: PBYTE,
+ InfoSize: size_t,
+ Flags: DWORD,
+ lpErrno: LPINT,
+ ) -> c_int;
+ #[cfg(target_pointer_width = "64")]
+ pub fn WSCGetProviderInfo32(
+ lpProviderId: LPGUID,
+ InfoType: WSC_PROVIDER_INFO_TYPE,
+ Info: PBYTE,
+ InfoSize: *mut size_t,
+ Flags: DWORD,
+ lpErrno: LPINT,
+ ) -> c_int;
+ pub fn WSCSetApplicationCategory(
+ Path: LPCWSTR,
+ PathLength: DWORD,
+ Extra: LPCWSTR,
+ ExtraLength: DWORD,
+ PermittedLspCategories: DWORD,
+ pPrevPermLspCat: *mut DWORD,
+ lpErrno: LPINT,
+ ) -> c_int;
+ pub fn WSCGetApplicationCategory(
+ Path: LPCWSTR,
+ PathLength: DWORD,
+ Extra: LPCWSTR,
+ ExtraLength: DWORD,
+ pPermittedLspCategories: *mut DWORD,
+ lpErrno: LPINT,
+ ) -> c_int;
+ pub fn WPUCloseEvent(
+ hEvent: WSAEVENT,
+ lpErrno: LPINT,
+ ) -> BOOL;
+ pub fn WPUCloseSocketHandle(
+ s: SOCKET,
+ lpErrno: LPINT,
+ ) -> c_int;
+ pub fn WPUCreateEvent(
+ lpErrno: LPINT,
+ ) -> WSAEVENT;
+ pub fn WPUCreateSocketHandle(
+ dwCatalogEntryId: DWORD,
+ dwContext: DWORD_PTR,
+ lpErrno: LPINT,
+ ) -> SOCKET;
+ pub fn WPUFDIsSet(
+ s: SOCKET,
+ fdset: *mut fd_set,
+ ) -> c_int;
+ pub fn WPUGetProviderPath(
+ lpProviderId: LPGUID,
+ lpszProviderDllPath: *mut WCHAR,
+ lpProviderDllPathLen: LPINT,
+ lpErrno: LPINT,
+ ) -> c_int;
+ pub fn WPUModifyIFSHandle(
+ dwCatalogEntryId: DWORD,
+ ProposedHandle: SOCKET,
+ lpErrno: LPINT,
+ ) -> SOCKET;
+ pub fn WPUPostMessage(
+ hWnd: HWND,
+ Msg: UINT,
+ wParam: WPARAM,
+ lParam: LPARAM,
+ ) -> BOOL;
+ pub fn WPUQueryBlockingCallback(
+ dwCatalogEntryId: DWORD,
+ lplpfnCallback: *mut LPBLOCKINGCALLBACK,
+ lpdwContext: PDWORD_PTR,
+ lpErrno: LPINT,
+ ) -> c_int;
+ pub fn WPUQuerySocketHandleContext(
+ s: SOCKET,
+ lpContext: PDWORD_PTR,
+ lpErrno: LPINT,
+ ) -> c_int;
+ pub fn WPUQueueApc(
+ lpThreadId: LPWSATHREADID,
+ lpfnUserApc: LPWSAUSERAPC,
+ dwContext: DWORD_PTR,
+ lpErrno: LPINT,
+ ) -> c_int;
+ pub fn WPUResetEvent(
+ hEvent: WSAEVENT,
+ lpErrno: LPINT,
+ ) -> BOOL;
+ pub fn WPUSetEvent(
+ hEvent: WSAEVENT,
+ lpErrno: LPINT,
+ ) -> BOOL;
+ pub fn WPUCompleteOverlappedRequest(
+ s: SOCKET,
+ lpOverlapped: LPWSAOVERLAPPED,
+ dwError: DWORD,
+ cbTransferred: DWORD,
+ lpErrno: LPINT,
+ ) -> c_int;
+ pub fn WPUOpenCurrentThread(
+ lpThreadId: LPWSATHREADID,
+ lpErrno: LPINT,
+ ) -> c_int;
+ pub fn WPUCloseThread(
+ lpThreadId: LPWSATHREADID,
+ lpErrno: LPINT,
+ ) -> c_int;
+ #[cfg(target_pointer_width = "64")]
+ pub fn WSCEnumNameSpaceProviders32(
+ lpdwBufferLength: LPDWORD,
+ lpnspBuffer: LPWSANAMESPACE_INFOW,
+ ) -> INT;
+ #[cfg(target_pointer_width = "64")]
+ pub fn WSCEnumNameSpaceProvidersEx32(
+ lpdwBufferLength: LPDWORD,
+ lpnspBuffer: LPWSANAMESPACE_INFOEXW,
+ ) -> INT;
+ pub fn WSCInstallNameSpace(
+ lpszIdentifier: LPWSTR,
+ lpszPathName: LPWSTR,
+ dwNameSpace: DWORD,
+ dwVersion: DWORD,
+ lpProviderId: LPGUID,
+ ) -> INT;
+}
+FN!{stdcall LPWSCINSTALLNAMESPACE(
+ lpszIdentifier: LPWSTR,
+ lpszPathName: LPWSTR,
+ dwNameSpace: DWORD,
+ dwVersion: DWORD,
+ lpProviderId: LPGUID,
+) -> INT}
+extern "system" {
+ #[cfg(target_pointer_width = "64")]
+ pub fn WSCInstallNameSpace32(
+ lpszIdentifier: LPWSTR,
+ lpszPathName: LPWSTR,
+ dwNameSpace: DWORD,
+ dwVersion: DWORD,
+ lpProviderId: LPGUID,
+ ) -> INT;
+ pub fn WSCUnInstallNameSpace(
+ lpProviderId: LPGUID,
+ ) -> INT;
+}
+FN!{stdcall LPWSCUNINSTALLNAMESPACE(
+ lpProviderId: LPGUID,
+) -> INT}
+extern "system" {
+ pub fn WSCInstallNameSpaceEx(
+ lpszIdentifier: LPWSTR,
+ lpszPathName: LPWSTR,
+ dwNameSpace: DWORD,
+ dwVersion: DWORD,
+ lpProviderId: LPGUID,
+ lpProviderSpecific: LPBLOB,
+ ) -> INT;
+ #[cfg(target_pointer_width = "64")]
+ pub fn WSCInstallNameSpaceEx32(
+ lpszIdentifier: LPWSTR,
+ lpszPathName: LPWSTR,
+ dwNameSpace: DWORD,
+ dwVersion: DWORD,
+ lpProviderId: LPGUID,
+ lpProviderSpecific: LPBLOB,
+ ) -> INT;
+ #[cfg(target_pointer_width = "64")]
+ pub fn WSCUnInstallNameSpace32(
+ lpProviderId: LPGUID,
+ ) -> INT;
+ pub fn WSCEnableNSProvider(
+ lpProviderId: LPGUID,
+ fEnable: BOOL,
+ ) -> INT;
+}
+FN!{stdcall LPWSCENABLENSPROVIDER(
+ lpProviderId: LPGUID,
+ fEnable: BOOL,
+) -> INT}
+extern "system" {
+ #[cfg(target_pointer_width = "64")]
+ pub fn WSCEnableNSProvider32(
+ lpProviderId: LPGUID,
+ fEnable: BOOL,
+ ) -> INT;
+ #[cfg(target_pointer_width = "64")]
+ pub fn WSCInstallProviderAndChains64_32(
+ lpProviderId: LPGUID,
+ lpszProviderDllPath: LPWSTR,
+ lpszProviderDllPath32: LPWSTR,
+ lpszLspName: LPWSTR,
+ dwServiceFlags: DWORD,
+ lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
+ dwNumberOfEntries: DWORD,
+ lpdwCatalogEntryId: LPDWORD,
+ lpErrno: LPINT,
+ ) -> c_int;
+ #[cfg(target_pointer_width = "32")]
+ pub fn WSCInstallProviderAndChains(
+ lpProviderId: LPGUID,
+ lpszProviderDllPath: LPWSTR,
+ lpszLspName: LPWSTR,
+ dwServiceFlags: DWORD,
+ lpProtocolInfoList: LPWSAPROTOCOL_INFOW,
+ dwNumberOfEntries: DWORD,
+ lpdwCatalogEntryId: LPDWORD,
+ lpErrno: LPINT,
+ ) -> c_int;
+}
+FN!{stdcall LPNSPCLEANUP(
+ lpProviderId: LPGUID,
+) -> INT}
+FN!{stdcall LPNSPLOOKUPSERVICEBEGIN(
+ lpProviderId: LPGUID,
+ lpqsRestrictions: LPWSAQUERYSETW,
+ lpServiceClassInfo: LPWSASERVICECLASSINFOW,
+ dwControlFlags: DWORD,
+ lphLookup: LPHANDLE,
+) -> INT}
+FN!{stdcall LPNSPLOOKUPSERVICENEXT(
+ hLookup: HANDLE,
+ dwControlFlags: DWORD,
+ lpdwBufferLength: LPDWORD,
+ lpqsResults: LPWSAQUERYSETW,
+) -> INT}
+FN!{stdcall LPNSPIOCTL(
+ hLookup: HANDLE,
+ dwControlCode: DWORD,
+ lpvInBuffer: LPVOID,
+ cbInBuffer: DWORD,
+ lpvOutBuffer: LPVOID,
+ cbOutBuffer: DWORD,
+ lpcbBytesReturned: LPDWORD,
+ lpCompletion: LPWSACOMPLETION,
+ lpThreadId: LPWSATHREADID,
+) -> INT}
+FN!{stdcall LPNSPLOOKUPSERVICEEND(
+ hLookup: HANDLE,
+) -> INT}
+FN!{stdcall LPNSPSETSERVICE(
+ lpProviderId: LPGUID,
+ lpServiceClassInfo: LPWSASERVICECLASSINFOW,
+ lpqsRegInfo: LPWSAQUERYSETW,
+ essOperation: WSAESETSERVICEOP,
+ dwControlFlags: DWORD,
+) -> INT}
+FN!{stdcall LPNSPINSTALLSERVICECLASS(
+ lpProviderId: LPGUID,
+ lpServiceClassInfo: LPWSASERVICECLASSINFOW,
+) -> INT}
+FN!{stdcall LPNSPREMOVESERVICECLASS(
+ lpProviderId: LPGUID,
+ lpServiceClassId: LPGUID,
+) -> INT}
+FN!{stdcall LPNSPGETSERVICECLASSINFO(
+ lpProviderId: LPGUID,
+ lpdwBufSize: LPDWORD,
+ lpServiceClassInfo: LPWSASERVICECLASSINFOW,
+) -> INT}
+STRUCT!{struct NSP_ROUTINE {
+ cbSize: DWORD,
+ dwMajorVersion: DWORD,
+ dwMinorVersion: DWORD,
+ NSPCleanup: LPNSPCLEANUP,
+ NSPLookupServiceBegin: LPNSPLOOKUPSERVICEBEGIN,
+ NSPLookupServiceNext: LPNSPLOOKUPSERVICENEXT,
+ NSPLookupServiceEnd: LPNSPLOOKUPSERVICEEND,
+ NSPSetService: LPNSPSETSERVICE,
+ NSPInstallServiceClass: LPNSPINSTALLSERVICECLASS,
+ NSPRemoveServiceClass: LPNSPREMOVESERVICECLASS,
+ NSPGetServiceClassInfo: LPNSPGETSERVICECLASSINFO,
+ NSPIoctl: LPNSPIOCTL,
+}}
+pub type LPNSP_ROUTINE = *mut NSP_ROUTINE;
+extern "system" {
+ pub fn NSPStartup(
+ lpProviderId: LPGUID,
+ lpnspRoutines: LPNSP_ROUTINE,
+ ) -> INT;
+}
+FN!{stdcall LPNSPSTARTUP(
+ lpProviderId: LPGUID,
+ lpnspRoutines: LPNSP_ROUTINE,
+) -> INT}
+FN!{stdcall LPNSPV2STARTUP(
+ lpProviderId: LPGUID,
+ ppvClientSessionArg: *mut LPVOID,
+) -> INT}
+FN!{stdcall LPNSPV2CLEANUP(
+ lpProviderId: LPGUID,
+ pvClientSessionArg: LPVOID,
+) -> INT}
+FN!{stdcall LPNSPV2LOOKUPSERVICEBEGIN(
+ lpProviderId: LPGUID,
+ lpqsRestrictions: LPWSAQUERYSET2W,
+ dwControlFlags: DWORD,
+ lpvClientSessionArg: LPVOID,
+ lphLookup: LPHANDLE,
+) -> INT}
+FN!{stdcall LPNSPV2LOOKUPSERVICENEXTEX(
+ hAsyncCall: HANDLE,
+ hLookup: HANDLE,
+ dwControlFlags: DWORD,
+ lpdwBufferLength: LPDWORD,
+ lpqsResults: LPWSAQUERYSET2W,
+) -> ()}
+FN!{stdcall LPNSPV2LOOKUPSERVICEEND(
+ hLookup: HANDLE,
+) -> INT}
+FN!{stdcall LPNSPV2SETSERVICEEX(
+ hAsyncCall: HANDLE,
+ lpProviderId: LPGUID,
+ lpqsRegInfo: LPWSAQUERYSET2W,
+ essOperation: WSAESETSERVICEOP,
+ dwControlFlags: DWORD,
+ lpvClientSessionArg: LPVOID,
+) -> ()}
+FN!{stdcall LPNSPV2CLIENTSESSIONRUNDOWN(
+ lpProviderId: LPGUID,
+ pvClientSessionArg: LPVOID,
+) -> ()}
+STRUCT!{struct NSPV2_ROUTINE {
+ cbSize: DWORD,
+ dwMajorVersion: DWORD,
+ dwMinorVersion: DWORD,
+ NSPv2Startup: LPNSPV2STARTUP,
+ NSPv2Cleanup: LPNSPV2CLEANUP,
+ NSPv2LookupServiceBegin: LPNSPV2LOOKUPSERVICEBEGIN,
+ NSPv2LookupServiceNextEx: LPNSPV2LOOKUPSERVICENEXTEX,
+ NSPv2LookupServiceEnd: LPNSPV2LOOKUPSERVICEEND,
+ NSPv2SetServiceEx: LPNSPV2SETSERVICEEX,
+ NSPv2ClientSessionRundown: LPNSPV2CLIENTSESSIONRUNDOWN,
+}}
+pub type PNSPV2_ROUTINE = *mut NSPV2_ROUTINE;
+pub type LPNSPV2_ROUTINE = *mut NSPV2_ROUTINE;
+pub type PCNSPV2_ROUTINE = *const NSPV2_ROUTINE;
+pub type LPCNSPV2_ROUTINE = *const NSPV2_ROUTINE;
+extern "system" {
+ pub fn WSAAdvertiseProvider(
+ puuidProviderId: *const GUID,
+ pNSPv2Routine: *const LPCNSPV2_ROUTINE,
+ ) -> INT;
+ pub fn WSAUnadvertiseProvider(
+ puuidProviderId: *const GUID,
+ ) -> INT;
+ pub fn WSAProviderCompleteAsyncCall(
+ hAsyncCall: HANDLE,
+ iRetCode: INT,
+ ) -> INT;
+}
diff --git a/vendor/winapi/src/um/ws2tcpip.rs b/vendor/winapi/src/um/ws2tcpip.rs
new file mode 100644
index 000000000..4867c74a2
--- /dev/null
+++ b/vendor/winapi/src/um/ws2tcpip.rs
@@ -0,0 +1,346 @@
+// 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
+//! WinSock2 Extension for TCP/IP protocols
+use ctypes::c_int;
+use shared::guiddef::LPGUID;
+use shared::minwindef::{DWORD, INT, LPHANDLE, ULONG};
+use shared::mstcpip::{
+ SOCKET_PEER_TARGET_NAME, SOCKET_SECURITY_QUERY_INFO, SOCKET_SECURITY_QUERY_TEMPLATE,
+ SOCKET_SECURITY_SETTINGS,
+};
+use shared::winerror::{
+ WSAEAFNOSUPPORT, WSAEINVAL, WSAESOCKTNOSUPPORT, WSAHOST_NOT_FOUND, WSANO_RECOVERY,
+ WSATRY_AGAIN, WSATYPE_NOT_FOUND, WSA_IPSEC_NAME_POLICY_ERROR, WSA_SECURE_HOST_NOT_FOUND,
+};
+use shared::ws2def::{
+ ADDRINFOA, ADDRINFOEXA, ADDRINFOEXW, ADDRINFOW, PADDRINFOA, PADDRINFOEXA, PADDRINFOEXW,
+ PADDRINFOW, SOCKADDR, SOCKET_ADDRESS,
+};
+use shared::wtypesbase::LPBLOB;
+use um::minwinbase::LPOVERLAPPED;
+use um::winnt::{PCHAR, PCSTR, PCWSTR, PSTR, PVOID, PWCHAR, PWSTR, VOID};
+use um::winsock2::{
+ LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE, SOCKET, WSA_NOT_ENOUGH_MEMORY, timeval,
+};
+use vc::vcruntime::size_t;
+pub const UDP_NOCHECKSUM: c_int = 1;
+pub const UDP_CHECKSUM_COVERAGE: c_int = 20;
+pub const EAI_AGAIN: DWORD = WSATRY_AGAIN;
+pub const EAI_BADFLAGS: DWORD = WSAEINVAL;
+pub const EAI_FAIL: DWORD = WSANO_RECOVERY;
+pub const EAI_FAMILY: DWORD = WSAEAFNOSUPPORT;
+pub const EAI_MEMORY: DWORD = WSA_NOT_ENOUGH_MEMORY as u32;
+pub const EAI_NOSECURENAME: DWORD = WSA_SECURE_HOST_NOT_FOUND;
+pub const EAI_NONAME: DWORD = WSAHOST_NOT_FOUND;
+pub const EAI_SERVICE: DWORD = WSATYPE_NOT_FOUND;
+pub const EAI_SOCKTYPE: DWORD = WSAESOCKTNOSUPPORT;
+pub const EAI_IPSECPOLICY: DWORD = WSA_IPSEC_NAME_POLICY_ERROR;
+pub const EAI_NODATA: DWORD = EAI_NONAME;
+pub type ADDRINFO = ADDRINFOA;
+pub type LPADDRINFO = *mut ADDRINFOA;
+extern "system" {
+ pub fn getaddrinfo(
+ pNodeName: PCSTR,
+ pServiceName: PCSTR,
+ pHints: *const ADDRINFOA,
+ ppResult: *mut PADDRINFOA,
+ ) -> INT;
+ pub fn GetAddrInfoW(
+ pNodeName: PCWSTR,
+ pServiceName: PCWSTR,
+ pHints: *const ADDRINFOW,
+ ppResult: *mut PADDRINFOW,
+ ) -> INT;
+}
+FN!{stdcall LPFN_GETADDRINFO(
+ pNodeName: PCSTR,
+ pServiceName: PCSTR,
+ pHints: *const ADDRINFOA,
+ ppResult: *mut PADDRINFOA,
+) -> INT}
+FN!{stdcall LPFN_GETADDRINFOW(
+ pNodeName: PCWSTR,
+ pServiceName: PCWSTR,
+ pHints: *const ADDRINFOW,
+ ppResult: *mut PADDRINFOW,
+) -> INT}
+FN!{stdcall LPLOOKUPSERVICE_COMPLETION_ROUTINE(
+ dwError: DWORD,
+ dwBytes: DWORD,
+ lpOverlapped: LPWSAOVERLAPPED,
+) -> ()}
+extern "system" {
+ pub fn GetAddrInfoExA(
+ pName: PCSTR,
+ pServiceName: PCSTR,
+ dwNameSpace: DWORD,
+ lpNspId: LPGUID,
+ hints: *const ADDRINFOEXA,
+ ppResult: *mut PADDRINFOEXA,
+ timeout: *mut timeval,
+ lpOverlapped: LPOVERLAPPED,
+ lpCompletionRoutine: LPLOOKUPSERVICE_COMPLETION_ROUTINE,
+ lpNameHandle: LPHANDLE,
+ ) -> INT;
+ pub fn GetAddrInfoExW(
+ pName: PCWSTR,
+ pServiceName: PCWSTR,
+ dwNameSpace: DWORD,
+ lpNspId: LPGUID,
+ hints: *const ADDRINFOEXW,
+ ppResult: *mut PADDRINFOEXW,
+ timeout: *mut timeval,
+ lpOverlapped: LPOVERLAPPED,
+ lpCompletionRoutine: LPLOOKUPSERVICE_COMPLETION_ROUTINE,
+ lpNameHandle: LPHANDLE,
+ ) -> INT;
+ pub fn GetAddrInfoExCancel(
+ lpHandle: LPHANDLE,
+ ) -> INT;
+ pub fn GetAddrInfoExOverlappedResult(
+ lpOverlapped: LPOVERLAPPED,
+ ) -> INT;
+}
+FN!{stdcall LPFN_GETADDRINFOEXA(
+ pName: PCSTR,
+ pServiceName: PCSTR,
+ dwNameSpace: DWORD,
+ lpNspId: LPGUID,
+ hints: *const ADDRINFOEXA,
+ ppResult: *mut PADDRINFOEXA,
+ timeout: *mut timeval,
+ lpOverlapped: LPOVERLAPPED,
+ lpCompletionRoutine: LPLOOKUPSERVICE_COMPLETION_ROUTINE,
+ lpNameHandle: LPHANDLE,
+) -> INT}
+FN!{stdcall LPFN_GETADDRINFOEXW(
+ pName: PCWSTR,
+ pServiceName: PCWSTR,
+ dwNameSpace: DWORD,
+ lpNspId: LPGUID,
+ hints: *const ADDRINFOEXW,
+ ppResult: *mut PADDRINFOEXW,
+ timeout: *mut timeval,
+ lpOverlapped: LPOVERLAPPED,
+ lpCompletionRoutine: LPLOOKUPSERVICE_COMPLETION_ROUTINE,
+ lpNameHandle: LPHANDLE,
+) -> INT}
+FN!{stdcall LPFN_GETADDRINFOEXCANCEL(
+ lpHandle: LPHANDLE,
+) -> INT}
+FN!{stdcall LPFN_GETADDRINFOEXOVERLAPPEDRESULT(
+ lpOverlapped: LPOVERLAPPED,
+) -> INT}
+extern "system" {
+ pub fn SetAddrInfoExA(
+ pName: PCSTR,
+ pServiceName: PCSTR,
+ pAddresses: *mut SOCKET_ADDRESS,
+ dwAddressCount: DWORD,
+ lpBlob: LPBLOB,
+ dwFlags: DWORD,
+ dwNameSpace: DWORD,
+ lpNspId: LPGUID,
+ timeout: *mut timeval,
+ lpOverlapped: LPOVERLAPPED,
+ lpCompletionRoutine: LPLOOKUPSERVICE_COMPLETION_ROUTINE,
+ lpNameHandle: LPHANDLE,
+ ) -> INT;
+ pub fn SetAddrInfoExW(
+ pName: PCWSTR,
+ pServiceName: PCWSTR,
+ pAddresses: *mut SOCKET_ADDRESS,
+ dwAddressCount: DWORD,
+ lpBlob: LPBLOB,
+ dwFlags: DWORD,
+ dwNameSpace: DWORD,
+ lpNspId: LPGUID,
+ timeout: *mut timeval,
+ lpOverlapped: LPOVERLAPPED,
+ lpCompletionRoutine: LPLOOKUPSERVICE_COMPLETION_ROUTINE,
+ lpNameHandle: LPHANDLE,
+ ) -> INT;
+}
+FN!{stdcall LPFN_SETADDRINFOEXA(
+ pName: PCSTR,
+ pServiceName: PCSTR,
+ pAddresses: *mut SOCKET_ADDRESS,
+ dwAddressCount: DWORD,
+ lpBlob: LPBLOB,
+ dwFlags: DWORD,
+ dwNameSpace: DWORD,
+ lpNspId: LPGUID,
+ timeout: *mut timeval,
+ lpOverlapped: LPOVERLAPPED,
+ lpCompletionRoutine: LPLOOKUPSERVICE_COMPLETION_ROUTINE,
+ lpNameHandle: LPHANDLE,
+) -> INT}
+FN!{stdcall LPFN_SETADDRINFOEXW(
+ pName: PCWSTR,
+ pServiceName: PCWSTR,
+ pAddresses: *mut SOCKET_ADDRESS,
+ dwAddressCount: DWORD,
+ lpBlob: LPBLOB,
+ dwFlags: DWORD,
+ dwNameSpace: DWORD,
+ lpNspId: LPGUID,
+ timeout: *mut timeval,
+ lpOverlapped: LPOVERLAPPED,
+ lpCompletionRoutine: LPLOOKUPSERVICE_COMPLETION_ROUTINE,
+ lpNameHandle: LPHANDLE,
+) -> INT}
+extern "system" {
+ pub fn freeaddrinfo(
+ pAddrInfo: PADDRINFOA,
+ );
+ pub fn FreeAddrInfoW(
+ pAddrInfo: PADDRINFOW,
+ );
+}
+FN!{stdcall LPFN_FREEADDRINFO(
+ pAddrInfo: PADDRINFOA,
+) -> ()}
+FN!{stdcall LPFN_FREEADDRINFOW(
+ pAddrInfo: PADDRINFOW,
+) -> ()}
+extern "system" {
+ pub fn FreeAddrInfoEx(
+ pAddrInfoEx: PADDRINFOEXA,
+ );
+ pub fn FreeAddrInfoExW(
+ pAddrInfoEx: PADDRINFOEXW,
+ );
+}
+FN!{stdcall LPFN_FREEADDRINFOEXA(
+ pAddrInfoEx: PADDRINFOEXA,
+) -> ()}
+FN!{stdcall LPFN_FREEADDRINFOEXW(
+ pAddrInfoEx: PADDRINFOEXW,
+) -> ()}
+pub type socklen_t = c_int;
+extern "system" {
+ pub fn getnameinfo(
+ pSockaddr: *const SOCKADDR,
+ SockaddrLength: socklen_t,
+ pNodeBuffer: PCHAR,
+ NodeBufferSize: DWORD,
+ pServiceBuffer: PCHAR,
+ ServiceBufferSize: DWORD,
+ Flags: INT,
+ ) -> INT;
+ pub fn GetNameInfoW(
+ pSockaddr: *const SOCKADDR,
+ SockaddrLength: socklen_t,
+ pNodeBuffer: PWCHAR,
+ NodeBufferSize: DWORD,
+ pServiceBuffer: PWCHAR,
+ ServiceBufferSize: DWORD,
+ Flags: INT,
+ ) -> INT;
+}
+FN!{stdcall LPFN_GETNAMEINFO(
+ pSockaddr: *const SOCKADDR,
+ SockaddrLength: socklen_t,
+ pNodeBuffer: PCHAR,
+ NodeBufferSize: DWORD,
+ pServiceBuffer: PCHAR,
+ ServiceBufferSize: DWORD,
+ Flags: INT,
+) -> c_int}
+FN!{stdcall LPFN_GETNAMEINFOW(
+ pSockaddr: *const SOCKADDR,
+ SockaddrLength: socklen_t,
+ pNodeBuffer: PWCHAR,
+ NodeBufferSize: DWORD,
+ pServiceBuffer: PWCHAR,
+ ServiceBufferSize: DWORD,
+ Flags: INT,
+) -> INT}
+extern "system" {
+ pub fn inet_pton(
+ Family: INT,
+ pszAddrString: PCSTR,
+ pAddrBuf: PVOID,
+ ) -> INT;
+ pub fn InetPtonW(
+ Family: INT,
+ pszAddrString: PCWSTR,
+ pAddrBuf: PVOID,
+ ) -> INT;
+ pub fn inet_ntop(
+ Family: INT,
+ pAddr: *const VOID,
+ pStringBuf: PSTR,
+ StringBufSize: size_t,
+ ) -> PCSTR;
+ pub fn InetNtopW(
+ Family: INT,
+ pAddr: *const VOID,
+ pStringBuf: PWSTR,
+ StringBufSize: size_t,
+ ) -> PCWSTR;
+}
+FN!{stdcall LPFN_INET_PTONA(
+ Family: INT,
+ pszAddrString: PCSTR,
+ pAddrBuf: PVOID,
+) -> INT}
+FN!{stdcall LPFN_INET_PTONW(
+ Family: INT,
+ pszAddrString: PCWSTR,
+ pAddrBuf: PVOID,
+) -> INT}
+FN!{stdcall LPFN_INET_NTOPA(
+ Family: INT,
+ pAddr: *const VOID,
+ pStringBuf: PSTR,
+ StringBufSize: size_t,
+) -> PCSTR}
+FN!{stdcall LPFN_INET_NTOPW(
+ Family: INT,
+ pAddr: *const VOID,
+ pStringBuf: PWSTR,
+ StringBufSize: size_t,
+) -> PCWSTR}
+pub const GAI_STRERROR_BUFFER_SIZE: usize = 1024;
+extern "system" {
+ pub fn WSASetSocketSecurity(
+ Socket: SOCKET,
+ SecuritySettings: *const SOCKET_SECURITY_SETTINGS,
+ SecuritySettingsLen: ULONG,
+ Overlapped: LPWSAOVERLAPPED,
+ CompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+ ) -> INT;
+ pub fn WSAQuerySocketSecurity(
+ Socket: SOCKET,
+ SecurityQueryTemplate: *const SOCKET_SECURITY_QUERY_TEMPLATE,
+ SecurityQueryTemplateLen: ULONG,
+ SecurityQueryInfo: *mut SOCKET_SECURITY_QUERY_INFO,
+ SecurityQueryInfoLen: *mut ULONG,
+ Overlapped: LPWSAOVERLAPPED,
+ CompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+ ) -> INT;
+ pub fn WSASetSocketPeerTargetName(
+ Socket: SOCKET,
+ PeerTargetName: *const SOCKET_PEER_TARGET_NAME,
+ PeerTargetNameLen: ULONG,
+ Overlapped: LPWSAOVERLAPPED,
+ CompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+ ) -> INT;
+ pub fn WSADeleteSocketPeerTargetName(
+ Socket: SOCKET,
+ PeerAddr: *const SOCKADDR,
+ PeerAddrLen: ULONG,
+ Overlapped: LPWSAOVERLAPPED,
+ CompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
+ ) -> INT;
+ pub fn WSAImpersonateSocketPeer(
+ Socket: SOCKET,
+ PeerAddr: *const SOCKADDR,
+ PeerAddrLen: ULONG,
+ ) -> INT;
+ pub fn WSARevertImpersonation();
+}
diff --git a/vendor/winapi/src/um/wtsapi32.rs b/vendor/winapi/src/um/wtsapi32.rs
new file mode 100644
index 000000000..ddddf35f2
--- /dev/null
+++ b/vendor/winapi/src/um/wtsapi32.rs
@@ -0,0 +1,6 @@
+use shared::minwindef::BOOL;
+use shared::ntdef::{PHANDLE, ULONG};
+//1286
+extern "system" {
+ pub fn WTSQueryUserToken(SessionId: ULONG, phToken: PHANDLE) -> BOOL;
+}
diff --git a/vendor/winapi/src/um/xinput.rs b/vendor/winapi/src/um/xinput.rs
new file mode 100644
index 000000000..b6f110b7e
--- /dev/null
+++ b/vendor/winapi/src/um/xinput.rs
@@ -0,0 +1,173 @@
+// 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.
+//! XInput procedure declarations, constant definitions and macros
+use shared::guiddef::GUID;
+use shared::minwindef::{BOOL, BYTE, DWORD, UINT, WORD};
+use um::winnt::{LPWSTR, SHORT, WCHAR};
+pub const XINPUT_DEVTYPE_GAMEPAD: BYTE = 0x01;
+pub const XINPUT_DEVSUBTYPE_GAMEPAD: BYTE = 0x01;
+pub const XINPUT_DEVSUBTYPE_UNKNOWN: BYTE = 0x00;
+pub const XINPUT_DEVSUBTYPE_WHEEL: BYTE = 0x02;
+pub const XINPUT_DEVSUBTYPE_ARCADE_STICK: BYTE = 0x03;
+pub const XINPUT_DEVSUBTYPE_FLIGHT_SICK: BYTE = 0x04;
+pub const XINPUT_DEVSUBTYPE_DANCE_PAD: BYTE = 0x05;
+pub const XINPUT_DEVSUBTYPE_GUITAR: BYTE = 0x06;
+pub const XINPUT_DEVSUBTYPE_GUITAR_ALTERNATE: BYTE = 0x07;
+pub const XINPUT_DEVSUBTYPE_DRUM_KIT: BYTE = 0x08;
+pub const XINPUT_DEVSUBTYPE_GUITAR_BASS: BYTE = 0x0B;
+pub const XINPUT_DEVSUBTYPE_ARCADE_PAD: BYTE = 0x13;
+pub const XINPUT_CAPS_VOICE_SUPPORTED: WORD = 0x0004;
+pub const XINPUT_CAPS_FFB_SUPPORTED: WORD = 0x0001;
+pub const XINPUT_CAPS_WIRELESS: WORD = 0x0002;
+pub const XINPUT_CAPS_PMD_SUPPORTED: WORD = 0x0008;
+pub const XINPUT_CAPS_NO_NAVIGATION: WORD = 0x0010;
+pub const XINPUT_GAMEPAD_DPAD_UP: WORD = 0x0001;
+pub const XINPUT_GAMEPAD_DPAD_DOWN: WORD = 0x0002;
+pub const XINPUT_GAMEPAD_DPAD_LEFT: WORD = 0x0004;
+pub const XINPUT_GAMEPAD_DPAD_RIGHT: WORD = 0x0008;
+pub const XINPUT_GAMEPAD_START: WORD = 0x0010;
+pub const XINPUT_GAMEPAD_BACK: WORD = 0x0020;
+pub const XINPUT_GAMEPAD_LEFT_THUMB: WORD = 0x0040;
+pub const XINPUT_GAMEPAD_RIGHT_THUMB: WORD = 0x0080;
+pub const XINPUT_GAMEPAD_LEFT_SHOULDER: WORD = 0x0100;
+pub const XINPUT_GAMEPAD_RIGHT_SHOULDER: WORD = 0x0200;
+pub const XINPUT_GAMEPAD_A: WORD = 0x1000;
+pub const XINPUT_GAMEPAD_B: WORD = 0x2000;
+pub const XINPUT_GAMEPAD_X: WORD = 0x4000;
+pub const XINPUT_GAMEPAD_Y: WORD = 0x8000;
+pub const XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE: SHORT = 7849;
+pub const XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE: SHORT = 8689;
+pub const XINPUT_GAMEPAD_TRIGGER_THRESHOLD: BYTE = 30;
+pub const XINPUT_FLAG_GAMEPAD: DWORD = 0x00000001;
+pub const BATTERY_DEVTYPE_GAMEPAD: BYTE = 0x00;
+pub const BATTERY_DEVTYPE_HEADSET: BYTE = 0x01;
+pub const BATTERY_TYPE_DISCONNECTED: BYTE = 0x00;
+pub const BATTERY_TYPE_WIRED: BYTE = 0x01;
+pub const BATTERY_TYPE_ALKALINE: BYTE = 0x02;
+pub const BATTERY_TYPE_NIMH: BYTE = 0x03;
+pub const BATTERY_TYPE_UNKNOWN: BYTE = 0xFF;
+pub const BATTERY_LEVEL_EMPTY: BYTE = 0x00;
+pub const BATTERY_LEVEL_LOW: BYTE = 0x01;
+pub const BATTERY_LEVEL_MEDIUM: BYTE = 0x02;
+pub const BATTERY_LEVEL_FULL: BYTE = 0x03;
+pub const XUSER_MAX_COUNT: DWORD = 4;
+pub const XUSER_INDEX_ANY: DWORD = 0x000000FF;
+pub const VK_PAD_A: WORD = 0x5800;
+pub const VK_PAD_B: WORD = 0x5801;
+pub const VK_PAD_X: WORD = 0x5802;
+pub const VK_PAD_Y: WORD = 0x5803;
+pub const VK_PAD_RSHOULDER: WORD = 0x5804;
+pub const VK_PAD_LSHOULDER: WORD = 0x5805;
+pub const VK_PAD_LTRIGGER: WORD = 0x5806;
+pub const VK_PAD_RTRIGGER: WORD = 0x5807;
+pub const VK_PAD_DPAD_UP: WORD = 0x5810;
+pub const VK_PAD_DPAD_DOWN: WORD = 0x5811;
+pub const VK_PAD_DPAD_LEFT: WORD = 0x5812;
+pub const VK_PAD_DPAD_RIGHT: WORD = 0x5813;
+pub const VK_PAD_START: WORD = 0x5814;
+pub const VK_PAD_BACK: WORD = 0x5815;
+pub const VK_PAD_LTHUMB_PRESS: WORD = 0x5816;
+pub const VK_PAD_RTHUMB_PRESS: WORD = 0x5817;
+pub const VK_PAD_LTHUMB_UP: WORD = 0x5820;
+pub const VK_PAD_LTHUMB_DOWN: WORD = 0x5821;
+pub const VK_PAD_LTHUMB_RIGHT: WORD = 0x5822;
+pub const VK_PAD_LTHUMB_LEFT: WORD = 0x5823;
+pub const VK_PAD_LTHUMB_UPLEFT: WORD = 0x5824;
+pub const VK_PAD_LTHUMB_UPRIGHT: WORD = 0x5825;
+pub const VK_PAD_LTHUMB_DOWNRIGHT: WORD = 0x5826;
+pub const VK_PAD_LTHUMB_DOWNLEFT: WORD = 0x5827;
+pub const VK_PAD_RTHUMB_UP: WORD = 0x5830;
+pub const VK_PAD_RTHUMB_DOWN: WORD = 0x5831;
+pub const VK_PAD_RTHUMB_RIGHT: WORD = 0x5832;
+pub const VK_PAD_RTHUMB_LEFT: WORD = 0x5833;
+pub const VK_PAD_RTHUMB_UPLEFT: WORD = 0x5834;
+pub const VK_PAD_RTHUMB_UPRIGHT: WORD = 0x5835;
+pub const VK_PAD_RTHUMB_DOWNRIGHT: WORD = 0x5836;
+pub const VK_PAD_RTHUMB_DOWNLEFT: WORD = 0x5837;
+pub const XINPUT_KEYSTROKE_KEYDOWN: WORD = 0x0001;
+pub const XINPUT_KEYSTROKE_KEYUP: WORD = 0x0002;
+pub const XINPUT_KEYSTROKE_REPEAT: WORD = 0x0004;
+STRUCT!{struct XINPUT_GAMEPAD {
+ wButtons: WORD,
+ bLeftTrigger: BYTE,
+ bRightTrigger: BYTE,
+ sThumbLX: SHORT,
+ sThumbLY: SHORT,
+ sThumbRX: SHORT,
+ sThumbRY: SHORT,
+}}
+pub type PXINPUT_GAMEPAD = *mut XINPUT_GAMEPAD;
+STRUCT!{struct XINPUT_STATE {
+ dwPacketNumber: DWORD,
+ Gamepad: XINPUT_GAMEPAD,
+}}
+pub type PXINPUT_STATE = *mut XINPUT_STATE;
+STRUCT!{struct XINPUT_VIBRATION {
+ wLeftMotorSpeed: WORD,
+ wRightMotorSpeed: WORD,
+}}
+pub type PXINPUT_VIBRATION = *mut XINPUT_VIBRATION;
+STRUCT!{struct XINPUT_CAPABILITIES {
+ Type: BYTE,
+ SubType: BYTE,
+ Flags: WORD,
+ Gamepad: XINPUT_GAMEPAD,
+ Vibration: XINPUT_VIBRATION,
+}}
+pub type PXINPUT_CAPABILITIES = *mut XINPUT_CAPABILITIES;
+STRUCT!{struct XINPUT_BATTERY_INFORMATION {
+ BatteryType: BYTE,
+ BatteryLevel: BYTE,
+}}
+pub type PXINPUT_BATTERY_INFORMATION = *mut XINPUT_BATTERY_INFORMATION;
+STRUCT!{struct XINPUT_KEYSTROKE {
+ VirtualKey: WORD,
+ Unicode: WCHAR,
+ Flags: WORD,
+ UserIndex: BYTE,
+ HidCode: BYTE,
+}}
+pub type PXINPUT_KEYSTROKE = *mut XINPUT_KEYSTROKE;
+extern "system" {
+ pub fn XInputGetState(
+ dwUserIndex: DWORD,
+ pState: *mut XINPUT_STATE,
+ ) -> DWORD;
+ pub fn XInputSetState(
+ dwUserIndex: DWORD,
+ pVibration: *mut XINPUT_VIBRATION,
+ ) -> DWORD;
+ pub fn XInputGetCapabilities(
+ dwUserIndex: DWORD,
+ dwFlags: DWORD,
+ pCapabilities: *mut XINPUT_CAPABILITIES,
+ ) -> DWORD;
+ pub fn XInputEnable(
+ enable: BOOL,
+ );
+ pub fn XInputGetAudioDeviceIds(
+ dwUserIndex: DWORD,
+ pRenderDeviceId: LPWSTR,
+ pRenderCount: *mut UINT,
+ pCaptureDeviceId: LPWSTR,
+ pCaptureCount: *mut UINT,
+ ) -> DWORD;
+ pub fn XInputGetBatteryInformation(
+ dwUserIndex: DWORD,
+ devType: BYTE,
+ pBatteryInformation: *mut XINPUT_BATTERY_INFORMATION,
+ ) -> DWORD;
+ pub fn XInputGetKeystroke(
+ dwUserIndex: DWORD,
+ dwReserved: DWORD,
+ pKeystroke: PXINPUT_KEYSTROKE,
+ ) -> DWORD;
+ pub fn XInputGetDSoundAudioDeviceGuids(
+ dwUserIndex: DWORD,
+ pDSoundRenderGuid: *mut GUID,
+ pDSoundCaptureGuid: *mut GUID,
+ ) -> DWORD;
+}